2013-02-28 87 views
2

我有一個要求,我想知道它是否可能。我有Visualforce頁面,它將顯示SOQL查詢的結果,但是SOQL查詢是動態的,可以是自定義對象或標準Obejcts上的查詢。我目前正努力將SOQL查詢編碼到控制器類中,同時試圖弄清楚它將如何工作。我打算在Apex的pageBlockTable或dataTable中顯示SOQL查詢的結果。顯示未知SOQL查詢結果

Salesforce中是否可以這樣做?如果有的話,任何人都可以舉例說明它在Visualforce和Apex中的工作原理嗎?

回答

2

您應該閱讀「動態引用」(也稱爲「動態綁定」)。一個好的起點:http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf_sample_standard.htm

基本上,如果你有String fieldName = 'AccountNumber';,後來在Visualforce你可以參考它直接:

<apex:outputField value="{!a.AccountNumber}">或動態:

<apex:outputField value="{!a[fieldName]}">

這與Apex中的a.AccountNumbera.get('AccountNumber')類似。如果您從未見過,請查閱getting Value of a field by its Name in apex salesforce


,因爲如果你的基礎對象將不會被佔將失敗(例如沒有Contact.AccountNumber場)你必須對身邊小心。上面的例子只處理帳戶,但無論如何這將是一個很好的介紹。

一旦您熟悉了基本想法,您可以探索fieldsets的世界 - 應該集合在一起的預定義字段組 - 您可以將它們用於顯示和查詢數據,基本上它們比硬編碼字符串列表更強大與字段名稱(如在第一個鏈接),但仍然是相同的想法。

至少你會知道什麼關鍵字,尋找;)

+0

這是偉大的,謝謝eyecream。我知道如果知道我正在查詢的對象,那麼這種方式會起作用,但在這種情況下,被查詢的對象也是動態的。例如,我的控制器是一個customReportController,通過它我將在頁面上有多個報告引用不同的對象,要運行的SOQL存儲在自定義報告對象的一個​​字段中。考慮到這一點,這仍然是可能的嗎? – Ronnie 2013-02-28 12:21:45

+0

應該是,任何東西都可以downcast到sObject,所以 - 查詢結果也可以'List '... get/put方法也屬於基類sObject類,而不是「賬號」等。我依稀記得它需要位當存儲的實際數據不是字符串時,更要小心,例如日期(主要是格式化問題)。但通常動態輸出工作正常,動態輸入字段可能有時會很棘手。也許只是試驗一下,如果你遇到任何障礙,用一些代碼更新你的問題? – eyescream 2013-02-28 12:26:22

+0

感謝您的幫助eyescream。 – Ronnie 2013-02-28 12:30:35