2

クイック質問。以下のコードでは、for ループ (newTimecards 内のすべてのレコードを取得し、それらを timecard という変数として配置) が Resource_c を resourceIds セットに追加していることがわかります。このオブジェクトが ID データ型と見なされる方法について混乱しています。オブジェクトが Salesforce で作成されると、Resource_c ID をセットに追加できることがわかるように、自動的に ID が作成されますか? Resource_c オブジェクト内には、Resource_ID_c というフィールドもあることに注意してください。Timecard_c 内の Resource_c は、Master-Detail データ タイプです。Resource_c は Timecard_c の親です。

考えてみると、resourceIds.add(timecard.Resource_c) は 2 つのオブジェクト間の関係を参照し、Resource_c を検索して ID フィールド Resource_ID_c を一意のフィールドとして自動的に追加しますか?

ご協力いただきありがとうございます。

    public class TimecardManager {
    public class TimecardException extends Exception {}
    public static void handleTimecardChange(List<Timecard__c> oldTimecards,  
        List<Timecard__c> newTimecards) { 

        Set<ID> resourceIds = new Set<ID>(); 

        for (Timecard__c timecard : newTimecards) {  
            resourceIds.add(timecard.Resource__c);  
        }
4

2 に答える 2

4

すべてのオブジェクト インスタンス (つまり、ファクトリ インスタンスを含む EVERY を意味します) には一意の組織レベル ID があり、その項目名は常にIdApex タイプでカバーされID、大文字と小文字が区別される 15 文字の文字列であり、大文字と小文字が区別されない 18 文字も含まれます。表現。最初の 3 文字はオブジェクト プレフィックス コード (ケースの場合は 500 など) であるため、同じオブジェクトのすべてのインスタンスは同じプレフィックスを共有します。これらの値はすべての SF に表示されます (たとえば、https://na1.salesforce.com/02s7000000BW59Lでは02s7000000BW59L、URL の が ID です)。オブジェクトのインスタンスが INSERT DML 操作を使用して作成されると、salesforce はプレフィックスと次に使用可能なトランザクション サブ ID に基づいて一意の値を自動的に割り当てます。これはすべて透過的に行われます。

Nameこれは、オブジェクトを作成するときに定義するフィールドであり、自動インクリメントなど (MYOBJ-{00000} など) が可能であり、不可解なものよりもユーザーにとって意味のあるオブジェクト フィールドと混同しないでください。 ID

参照関係または主従関係を作成する場合、2 つのインスタンスをリンクするために使用されるのは名前ではなく ID です。上記の例では、Resource__c がルックアップ フィールドのようで、行のマスターの Id 値が含まれています。

コードが行うことは、タイムラインで使用されるすべてのリソースを列挙し、それらの ID のセットを構築することです。その目的は、おそらくWHERE Id IN :resourceIds句を介して使用され、マスター テーブルからリソースの詳細をロードすることです。

于 2011-05-06T08:37:26.437 に答える
1

mmix の回答は、ID とは何か、ID がどこから来たのかについての優れた概要です。私があなたの具体的な質問だと思うことに答えるには:

あるオブジェクトから別のオブジェクトへの参照がある場合 (ここでは Timecard_ c と Resource _c の間)、参照を表すフィールドは ID になります。したがって、for呼び出すループはresourceIds.add(timecard.Resource__c)、ID のセット (これらの 15 文字の文字列) を構築しているだけです。timecard.Resource__cResource__c テーブルを調べて ID を見つけるのではなく、timecard.Resource__c IDです。

于 2011-05-07T12:06:49.563 に答える