2012-04-24 55 views
4

創建的sObject我知道怎麼回事PageReference編輯和查看的sObject:怎麼回事PageReference在Salesforce

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

但StandardController類並沒有像創建任何方法。

如何返回頁面來創建sObject。

我ALSE知道基法,如:

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

不過的sObject有很多查找fields.This方法不能拿出參照查找fields.It只能創建一個獨立的sObject。

那麼如何返回創建頁面並取出參考查找字段呢?

回答

5

當試圖添加Save and New按鈕時,我遇到了同樣的問題。 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'); 
} 
5

我假設你問如何在我的答案下面設置查找字段。但是,如果您詢問如何刪除查找字段,則需要編輯PageLayout,但這也會從編輯頁面中刪除字段。如果需要編輯頁面上的字段,但不需要創建頁面,則需要爲對象創建新的創建Visualforce頁面,並將重定向設置爲該頁面。


創建頁面是沒有id參數的編輯頁面。你的代碼應該工作:

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

要通過PageReference更改發送到新的頁面中的任何參數,使用getParameters()方法。下面的示例爲帳戶查找輸入一個參數(CF00NC0000004htI5是我的開發版中的字段ID)。

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

可通過轉到設置>創建>對象> [您的對象]> [您的字段]找到字段標識。一旦到達,請在/(但在?之前,如果有?)之後的頁面地址(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; 
} 
+0

太麻煩了,但我只能通過這種方式實現。爲什麼salesforce不提供一些簡單的方法。 – Dozer 2012-04-25 01:36:05

+0

還有一個問題。當我從開發環境發佈我的對象到生產環境時,它會(id)發生改變嗎? + Matthew Keefe – Dozer 2012-04-26 02:26:35

+0

可能。如果您在刷新沙箱之前在生產中創建了該字段,則ID將相同。如果您在沙箱中創建了該字段,則ID將會不同。 – 2012-04-26 12:29:11