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

Doz*_*zer 4 salesforce

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

PageReference ref =  new ApexPages.StandardController(bnk).edit();
Run Code Online (Sandbox Code Playgroud)

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

如何返回页面以创建sObject.

我也知道这样的方法:

PageReference ref =  new PageReference('/a00/e');
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*t K 5

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


创建页面是没有id参数的编辑页面.你有的代码应该工作:

PageReference ref =  new PageReference('/a00/e');
Run Code Online (Sandbox Code Playgroud)

要通过更改发送到新页面的任何参数PageReference,请使用该getParameters()方法.下面的示例为Account Lookup提供了一个参数(CF00NC0000004htI5是我的Development Edition中的Field Id).

PageReference.getParameters().put('CF00NC0000004htI5', 'sForce');
Run Code Online (Sandbox Code Playgroud)

可以通过转到设置>创建>对象> [您的对象]> [您的字段]找到字段ID.在那里之后,在页面地址(URL)之后查找字段ID /(但是?如果有的话?).例如,我的字段URL是: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;
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ger 5

尝试添加" 保存"和"新建"按钮时遇到了同样的问题.看起来很奇怪,StandardController没有返回PageReference的new()方法.

如果要将Apex类部署到另一个Salesforce组织(例如,添加到出站更改集,放入托管或非托管包,或使用Eclipse部署),我将避免硬编码自定义对象密钥前缀,因为这可能会更改orgs之间.而是使用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');
}
Run Code Online (Sandbox Code Playgroud)