CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Salesforce Driver でポリモーフィックフィールドの更新を行う方法

f:id:sugimomoto:20210727113631p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

今回はCData Salesforce Driver を活用する上でのTips、「ポリモーフィックフィールドの更新方法」を紹介します。

www.cdata.com

ポリモーフィックフィールドとは?

ちなみにポリモーフィックフィールドを皆さんご存知でしょうか。

実はSalesforce をお使いの方であれば、普段から馴染みがあるフィールドで、以下のような様々なデータに紐付けることができる参照関係フィールドのことを「ポリモーフィックフィールド」と言います。

f:id:sugimomoto:20210727113255p:plain

この名前はSOQLを使われている方であれば、以下のようなドキュメントで見たことがあるかもしれません。(エンドユーザーとして利用している場合は、あまり馴染みが無いかもしれないですね)

developer.salesforce.com

Taskテーブルであれば、「名前:WhoId」、「関連先:WhatId」それから、どのオブジェクトにも存在している「割り当て先:OwnerId」もポリモーフィックフィールドですね。

f:id:sugimomoto:20210727113302p:plain

IDを用いた更新

このポリモーフィックフィールドの更新ですが、基本的には他の参照関係フィールドと方法は変わりありません。

例えば、Taskオブジェクトの「関連先:WhatId」にデータを入力したい場合は

SELECT Id, WhatId, Subject FROM Task Where Id = '00T7F00000ElCVNUA3';

f:id:sugimomoto:20210727113310p:plain

事前に関連付けを行いたい、対象のオブジェクトのIdを特定します。

SELECT Id,Name FROM Account;

f:id:sugimomoto:20210727113317p:plain

あとは素直にUpdate文で「関連先:WhatId」に取得しておいたAccountのIdを指定すればそれで更新が可能です。

UPDATE Task SET WhatId = '0017F00002sE4EgQAK' // Account の ID
WHERE Id = '00T7F00000ElCVNUA3';

これは他のオブジェクト、例えば「商談」や「ケース」のオブジェクトになっても変わりありません。

外部キーを用いた更新

しかしながら、場合によっては「外部キー」を用いて、このポリモーフィックフィールドの値を更新したい場合があるでしょう。

実は最新バージョンのCData Salesforce Driver では、この「外部キー」を用いたポリモーフィックフィールドの更新がサポートされました。

例えば、以下のように取引先のオブジェクトに「外部IDカラム:externalidsample__c」というフィールドを用意して、値を設定しておきます。

f:id:sugimomoto:20210727113323p:plain

この情報をもとに、「XXXXFieldType」「XXXXExternalFieldName」という2つの特殊なカラムを用いて、以下のように指定することが出来ます。

「XXXX」の部分にはポリモーフィックフィールドの名前が入ります。

例えば「関連先:WhatId」には以下のように値を指定します。

UPDATE Task SET 
WhatIdType = 'account',  // ポリモーフィックフィールドのオブジェクト名
WhatIdExternalFieldName = 'externalidsample__c', // 外部キーとなるフィールドの名前
WhatId = '12345' // 外部キーのカラム名を指定して、値を入力する
WHERE Id = '00T7F00000ElCVNUA3';

これでIdを知らなくても、ポリモーフィックフィールドの値を更新することができました。

f:id:sugimomoto:20210727113331p:plain

終わりに

今回はUPDATE文でポリモーフィックフィールドの更新方法を紹介しましたが、UPSERT文などでも同じように利用することができます。

使っていて気になる点があれば、お気軽にテクニカルサポートまで問い合わせしてみてください。

https://www.cdata.com/jp/support/submit.aspx