通过Visualforce创建Salesforce人员帐户

时间:2013-07-30 08:30:06

标签: controller salesforce apex-code visualforce

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

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

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

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

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

对于这方面的任何帮助都会受到大力赞赏,因为Salesforce不是非常有用,我不能成为世界上唯一需要通过visualforce页面创建个人帐户的人吗?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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

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