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

如何返回PageReference以在salesforce中创建sObject,salesforce,Salesforce,我知道如何返回页面引用以编辑和查看sObject: PageReference ref = new ApexPages.StandardController(bnk).edit(); 但是StandardController类没有像create这样的方法 如何返回页面以创建sObject 我也知道这样的方法: PageReference ref = new PageReference('/a00/e'); 但是sObject有许多查找字段。此方法无法删除引用查找字段。它只能创建一个独立的

我知道如何返回页面引用以编辑和查看sObject:

PageReference ref =  new ApexPages.StandardController(bnk).edit();
但是StandardController类没有像create这样的方法

如何返回页面以创建sObject

我也知道这样的方法:

PageReference ref =  new PageReference('/a00/e');
但是sObject有许多查找字段。此方法无法删除引用查找字段。它只能创建一个独立的sObject


那么,如何返回“创建”页面并删除参考查找字段呢?

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

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

PageReference ref =  new PageReference('/a00/e');
要更改通过PageReference发送到新页面的任何参数,请使用getParameters方法。下面的示例为帐户查找添加了一个参数CF00NC0000004htI5是my Development Edition中的字段Id

PageReference.getParameters().put('CF00NC0000004htI5', 'sForce');
通过进入设置>创建>对象>[您的对象]>[您的字段]可以找到字段Id。到达后,在页地址URL中查找字段Id,该字段位于/之后,但在?如果有一个?。例如,我的字段URL为:https://instance.salesforce.com/00NC0000004htI5?setupid=CustomObjects. 获得Id后,在其前面添加CF

对于查找字段,您可能还需要设置CF+FieldId+\u 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;
}

我在尝试添加按钮时遇到了同样的问题。StandardController没有返回PageReference的新方法,这似乎很奇怪

如果您的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');
}

太麻烦了,但我只能通过这种方式来实现。为什么salesforce不提供一些简单的方法。还有一个问题。当我将我的对象从开发环境发布到生产环境时,id会改变吗+马修·基菲可能。如果在刷新沙盒之前在生产环境中创建了该字段,则ID将是相同的。如果您在沙盒中创建了字段,则ID将不同。