こんにちは。CData Software Japan リードエンジニアの杉本です。
今回はCData Salesforce Driver を活用する上でのTips、「ポリモーフィックフィールドの更新方法」を紹介します。
ポリモーフィックフィールドとは?
ちなみにポリモーフィックフィールドを皆さんご存知でしょうか。
実はSalesforce をお使いの方であれば、普段から馴染みがあるフィールドで、以下のような様々なデータに紐付けることができる参照関係フィールドのことを「ポリモーフィックフィールド」と言います。
この名前はSOQLを使われている方であれば、以下のようなドキュメントで見たことがあるかもしれません。(エンドユーザーとして利用している場合は、あまり馴染みが無いかもしれないですね)
Taskテーブルであれば、「名前:WhoId」、「関連先:WhatId」それから、どのオブジェクトにも存在している「割り当て先:OwnerId」もポリモーフィックフィールドですね。
IDを用いた更新
このポリモーフィックフィールドの更新ですが、基本的には他の参照関係フィールドと方法は変わりありません。
例えば、Taskオブジェクトの「関連先:WhatId」にデータを入力したい場合は
SELECT Id, WhatId, Subject FROM Task Where Id = '00T7F00000ElCVNUA3';
事前に関連付けを行いたい、対象のオブジェクトのIdを特定します。
SELECT Id,Name FROM Account;
あとは素直にUpdate文で「関連先:WhatId」に取得しておいたAccountのIdを指定すればそれで更新が可能です。
UPDATE Task SET WhatId = '0017F00002sE4EgQAK' // Account の ID WHERE Id = '00T7F00000ElCVNUA3';
これは他のオブジェクト、例えば「商談」や「ケース」のオブジェクトになっても変わりありません。
外部キーを用いた更新
しかしながら、場合によっては「外部キー」を用いて、このポリモーフィックフィールドの値を更新したい場合があるでしょう。
実は最新バージョンのCData Salesforce Driver では、この「外部キー」を用いたポリモーフィックフィールドの更新がサポートされました。
例えば、以下のように取引先のオブジェクトに「外部IDカラム:externalidsample__c」というフィールドを用意して、値を設定しておきます。
この情報をもとに、「XXXXFieldType」「XXXXExternalFieldName」という2つの特殊なカラムを用いて、以下のように指定することが出来ます。
「XXXX」の部分にはポリモーフィックフィールドの名前が入ります。
例えば「関連先:WhatId」には以下のように値を指定します。
UPDATE Task SET WhatIdType = 'account', // ポリモーフィックフィールドのオブジェクト名 WhatIdExternalFieldName = 'externalidsample__c', // 外部キーとなるフィールドの名前 WhatId = '12345' // 外部キーのカラム名を指定して、値を入力する WHERE Id = '00T7F00000ElCVNUA3';
これでIdを知らなくても、ポリモーフィックフィールドの値を更新することができました。
終わりに
今回はUPDATE文でポリモーフィックフィールドの更新方法を紹介しましたが、UPSERT文などでも同じように利用することができます。
使っていて気になる点があれば、お気軽にテクニカルサポートまで問い合わせしてみてください。