0

私は開発者ですが、セールスフォースに触れたことはありません。

私はこれを与えられました:

<td class="textAlignRight">
<apex:outputPanel rendered="{!relatedTo.c2g__OwnerCompany__r.c2g__LogoURL__c<>''}"><img src="{!relatedTo.c2g__OwnerCompany__r.c2g__LogoURL__c}"/>
</apex:outputPanel>
</td>

そして、OwnerCompany のロゴを入れるのではなく、Parent のロゴを入れるべきだと言いましたが、Parent の LogoURL プロパティが空白の場合は、その親の LogoURL を入れるべきです。ロゴまたは親がもう存在しない場合、OwnerCompany LogoURL を入れる必要があります。

salesforce が使用する言語をグーグル検索するのに苦労しています。どうすればこれを解決できるか考えている人はいますか? ループのあるメソッドへのある種の関数呼び出し?

編集:

どうやらこれを行う必要があります:

Invoice > Account > LogoURL

Invoice > Account > ParentAccount > LogoURL

Invoice > Account > ParentAccount > ParentAccount > LogoURL

Invoice は relatedToType です。

したがって、LogoURL を確認する必要があると思います。空白の場合は ParentAccount を確認し、空白の場合は ParentAccount.ParentAccount などを確認し、最後の 1 つが空白の場合は使用します

請求書 > OwnerCompany > LogoURL

4

1 に答える 1

1

私はこれを突き刺します...このコードは、フィールドが取引先レコードを指していると想定しています。これには、親取引先 (存在する場合) を指すc2g__OwnerCompany__r独自のフィールドがあります。c2g_OwnerCompany__rVisualForce は、このタイプの再帰のために構築されたものではありません。その理由は次のとおりです。

<apex:variable var="parentLogo" value="{!relatedTo.c2g__OwnerCompany__r.c2g__LogoURL__c}" />
<apex:variable var="parentLogo2" value="{!relatedTo.c2g__OwnerCompany__r.c2g__OwnerCompany__r.c2g__LogoURL__c}" />
<apex:variable var="parentLogo3" value="{!relatedTo.c2g__OwnerCompany__r.c2g__OwnerCompany__r.c2g__OwnerCompany__r.c2g__LogoURL__c}" />
<td class="textAlignRight">
    <apex:outputPanel rendered="{!parentLogo<>''}">
        <img src="{!parentLogo}"/>
    </apex:outputPanel>
    <apex:outputPanel rendered="{!AND(NOT(parentLogo<>''), parentLogo2<>'')}">
        <img src="{!parentLogo2}"/>
    </apex:outputPanel>
    <apex:outputPanel rendered="{!AND(NOT(parentLogo<>''), NOT(parentLogo2<>'') parentLogo3<>'')}">
        <img src="{!parentLogo3}"/>
    </apex:outputPanel>
</td>

このアプローチはあまりお勧めしません。VF ページがすぐに台無しになり、開始できるレベル数に制限があるためです。

別の解決策は、再帰をより詳細に制御できるコントローラークラスでこれを処理することです。Salesforce では、1 回の呼び出しでデータベースにアクセスできる回数に厳密な制限が課されていることに注意してください。そのため、これが行うクエリの数を制限する方法を見つけたいと思うでしょう。数レベルの親アカウントしかなく、循環参照がないことを保証できる場合にのみ、おそらくこれを使用します。

public String getLogoUrl() {
    String logo;
    Account acc= [select Id, c2g__OwnerCompany__c, c2g__LogoURL__c from Account where Id = :relatedTo.c2g__OwnerCompany__c];
    // running SOQL queries inside of loops is most certainly NOT a Salesforce best practice
    while ( true ) {
        logo = acc.c2g__LogoURL__c;
        if ( acc.c2g__OwnerCompany__c != null )
            acc = [select Id, c2g__OwnerCompany__c, c2g__LogoURL__c from Account where Id = :acc.c2g__OwnerCompany__c];
        else
            break;
    }
    return logo;
}

これにより、VF ページが単純化され、最初に作成したものと同様になります。変数は、コントローラーでの呼び出しによってページが読み込まれると、logoUrl自動的に入力されます。getLogoUrl

<td class="textAlignRight">
    <apex:outputPanel rendered="{!AND(NOT(ISNULL(logoUrl)), logoUrl<>'')}">
        <img src="{!logoUrl}"/>
    </apex:outputPanel>
</td>
于 2012-07-20T14:37:57.417 に答える