4

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

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

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

如何返回页面以创建 sObject。

我也知道这样的方法:

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

但是sObject有很多lookup fields,这个方法不能取出reference lookup fields,只能创建一个独立的sObject。

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

4

2 回答 2

5

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


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

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

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

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

可以通过转到设置 > 创建 > 对象 > [您的对象] > [您的字段] 找到字段 ID。到达那里后,在页面地址 (URL) 中查找字段 ID /(但在?如果有 a之前?)。例如,我的字段 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;
}
于 2012-04-24T13:28:21.783 回答
5

尝试添加保存和新建按钮时遇到了同样的问题。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');
}
于 2012-05-29T21:13:52.423 回答