2013-07-30 207 views
1

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

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

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

有Google'd了很多,我相信这个问题是存在的,因为isPersonAccount布尔字段不是在创建帐户(室颤)的点集,因此页面不允许姓名字段进行渲染。

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

任何与此有关的帮助将被大量赞赏,因为Salesforce并不是完全有用,我不能成为世界上唯一需要通过Visualforce页面创建个人帐户的人吗?

回答

2

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

由于您现在不需要依赖标准控制器来渲染字段,因此不需要明确设置isPersonAccount字段。

+0

有趣的是,这是确切的路线我今天早上已经解决了这个问题。我为3个名称字段中的每一个创建了一个公共字符串,并将它们添加为VF页面上的输入文本字段,然后在插入记录之前将save()例程中的实际字段设置为inputtext值。我会投你的答案,除非我没有足够的代表:o( –

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>