function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
吉田 丈治吉田 丈治 

SOQLの取得項目に変数名を付けることは出来ないか

Visualforceページを作っています。
例えば取引先に紐付いたvisualforceページで取引先名のプリフィクスで表示内容を変えるというようなイメージです。
visualforceページにはコンタクトリストを表示したいと思います。
コンタクトリストはSOQLで作成しています。

Apex例
public class customAccontPage{
	public customAccontPage(ApexPages.StandardController controller) {
		this.acc = (Account)controller.getRecord();
	}
    public void getCustomQuery(){
    	if( acc.Name.contains('prifix 1') ){
    		customquery = 'phone';//電話番号
    	}else if( acc.Name.contains('prifix 2') ){
    		customquery = 'mobile__c';//携帯電話
    	}
	}
    public void getContactList(){
        this.clist = new List <Contact> ();
        this.clist = Database.query('SELECT Id, Name, ' + customquery + ' FROM Contact');
    }
}

このような場合にvisualforceページでpageBlockでコンタクトリストを表示したいと思っています。
先ほどapexに書いたように、取引先名のプリフィクスに入っている文字列によって取得する項目を分けているので、それに応じた表示をしたいのです。
<apex:pageBlock title="ルーチン" id="TcoR">
            <apex:pageBlockTable value="{!clist}" var="c">
                <apex:column value="{!c.Id}"/>
                <apex:column value="{!c.name}"/>
                <apex:column value="{!c.       }"/> // ここにcustomqueryで取得した項目をだしたい
            </apex:pageBlockTable>
        </apex:pageBlock>


そのようなことは可能でしょうか?

例えばapex側で customqueryの後ろ側に変数名として customNameのようなものを振ることができれば、それを呼び出せばよいかと思ったのですが、それはできなさそうでした。
this.clist = Database.query('SELECT Id, Name, ' + customquery + ' customName FROM Contact');

何か良い方法は無いでしょうか。
takamatakama
2つの手段があるかと思います。
  • 取引先責任者(Contact)に取引先名のプリフィクスからいずれの項目を使用するかの数式を作成する
  • Visualforceのapex:columnで「phone」「mobile__c」双方のカラムを用意しrender属性を指定して条件に合致する方だけ表示する
<apex:column>
    <apex:facet name="header">電話番号</apex:facet>
    <apex:outputField value="{!c.phone}" renderd="{![phoneを表示する条件]}"/>
    <apex:outputField value="{!c.mobile__c}" renderd="{!NOT([phoneを表示する条件])}"/>
</apex:column>