1

我最近在我们的 salesforce 组织中激活并配置了个人客户。我们将在服务控制台中使用它们,并集成 Postcode Anywhere 以进行地址查找。要将 PA 集成到控制台中,必须通过 visualforce 页面完成,因为没有侧边栏来加载应用程序。为了解决这个问题,我创建了一个涵盖所有客户记录类型(包括个人客户)的 Visualforce 页面,并覆盖了“新建”和“编辑”按钮来调用 VF 页面。

到目前为止,一切都很好。现在,在编辑帐户时,目前一切正常,所有字段都显示并且 PA 工作正常。但是,在创建新个人帐户时,称呼、名字和姓氏字段不会显示在页面上,因此无法保存记录(因为创建帐户需要姓氏)。

与 Salesforce 讨论过这个问题(因为这是一个非常基本的问题),他们声称这 3 个字段没有 API 字段定义,因此无法通过 VF 页面调用。这显然是不正确的,因为它们在编辑模式下工作正常(使用标准页面创建了个人帐户)并且它们也在 WSDL 文件中列出。

有很多谷歌,我相信问题就在那里,因为 isPersonAccount 布尔字段未在创建帐户时设置(在 VF 中),因此页面不允许呈现名称字段。

那么关于我的问题(我对 VF 或控制器没有太多经验),在通过 VF 创建个人帐户时,是否可以使用控制器扩展或类似的东西以某种方式将 isPersonAccount 字段设置为 true。或者可以在将页面呈现给用户之前以某种方式保存页面,以便设置字段并呈现名称字段?

对此的任何帮助将不胜感激,因为 Salesforce 并没有完全有帮助,而且我不能成为世界上唯一需要通过 visualforce 页面创建个人帐户的人?

4

2 回答 2

3

解决如下:

控制器代码(部分):

Account acct; 
public String salutation {get; set;}
public String fname{get; set;}
public String lname{get; set;}

public PageReference save() {
    try {
        // check for person account record type
        recType = [select id,name,sobjectType,ispersontype from recordType where ispersontype=true and sobjectType='account' limit 1];
        if(acct.recordtypeid == recType.id) {
            acct.Salutation=salutation;
            acct.FirstName=fname;
            acct.LastName=lname;
            insert(acct);                    
            PageReference newPage = New PageReference('/'+acct.id);
            newPage.setRedirect(true);
            return newPage;
        }
        else {
            insert(acct);    
            PageReference newPage = New PageReference('/'+acct.id);
            newPage.setRedirect(true);
            return newPage;
        }
    }
    catch(System.DMLException e) {
            ApexPages.addMessages(e);
             return null;
    }  
    return null;
}

Visualforce 代码(部分):

<apex:pageblocksectionitem >
    <apex:outputlabel value="First Name"/>
    <apex:outputpanel >
        <apex:inputText value="{!salutation}" id="personSalutation"/>
        <apex:inputText value="{!fname}" id="personFname"/>
     </apex:outputpanel>
</apex:pageblocksectionitem>
<apex:pageBlockSectionItem>
    <apex:outputLabel value="Last Name" for="personLname"></apex:outputLabel>
    <apex:inputText value="{!lname}" id="personLname"/>
</apex:pageBlockSectionItem>
于 2013-08-01T09:30:20.143 回答
2

您当然可以使用控制器扩展来解决问题。这个想法是通过apex:inputText为 VisualForce 页面提供您需要的任何其他字段。然后获取字段的值并在保存时将它们写入对象。

由于您现在无需依赖标准控制器来呈现该字段,因此您无需显式设置 isPersonAccount 字段。

于 2013-07-31T18:54:06.100 回答