如何返回PageReference以在salesforce中创建sObject

时间:2012-04-24 04:05:58

标签: salesforce

我知道如何返回一个PageReference来编辑和查看sObject:

PageReference ref =  new ApexPages.StandardController(bnk).edit();

但是StandardController类没有像create这样的方法。

如何返回页面以创建sObject。

我也知道这样的方法:

PageReference ref =  new PageReference('/a00/e');

但是sObject有很多查找字段。这个方法不能取出引用查找字段。它只能创建一个独立的sObject。

那么如何返回创建页面并取出参考查找字段?

2 个答案:

答案 0 :(得分:5)

我假设您在下面的答案中询问如何设置查找字段。但是,如果您要询问如何删除查找字段,则需要编辑PageLayout,但这也会从“编辑”页面中删除字段。如果您需要“编辑”页面上的字段,而不是“创建页面”上的字段,则需要为对象创建新的“创建Visualforce”页面,并将重定向设置为该页面。


创建页面是没有id参数的编辑页面。您拥有的代码应该有效:

PageReference ref =  new PageReference('/a00/e');

要通过PageReference更改发送到新页面的所有参数,请使用getParameters()方法。下面的示例为帐户查找添加了一个参数(CF00NC0000004htI5是我的开发版中的字段ID)。

PageReference.getParameters().put('CF00NC0000004htI5', 'sForce');

可以通过转到设置>找到字段ID。创建>对象> [您的对象]> [你的领域]。在那里,在/之后的页面地址(URL)中查找字段ID(如果有?,则在?之前查找。例如,我的字段网址为:https://instance.salesforce.com/00NC0000004htI5?setupid=CustomObjects。获得Id后,在其前添加CF

对于查找字段,您可能还需要设置CF + FieldId + _lktp参数。这设置了引用记录的Id。

这是我用来获取下一页的完整方法。

public PageReference NextPage()
{
    Account a = [Select Id, Name From Account Where Name like '%sForce%' Limit 1];

    PageReference myPage = new PageReference('/a03/e');

    // set the ID on a lookup field
    myPage.getParameters().put('CF00NC0000004htI5_lktp', a.Id); 
    // set the Name on a lookup field
    myPage.getParameters().put('CF00NC0000004htI5', a.Name);

    myPage.setRedirect(true);
    return myPage;
}

答案 1 :(得分:5)

尝试添加Save and New按钮时遇到了同样的问题。看起来很奇怪,StandardController没有返回PageReference的new()方法。

如果要将Apex类部署到另一个Salesforce组织(例如,添加到出站更改集,放入托管或非托管包,或使用Eclipse部署),我将避免将自定义对象密钥前缀硬编码为这可能会在组织之间发生变化。相反,使用DescribeSObjectResult获取KeyPrefix。

public PageReference customObjectPageReference() {
    Schema.DescribeSObjectResult R = YourCustomObject__c.SObjectType.getDescribe();
    // Add /o to end of URL to view recent
    return new PageReference('/' + R.getKeyPrefix() + '/e');
}