[salesforce]Dynamic DML

By |9月 24, 2010|salesforce, |


OEM製品のように汎用性が必要なアプリケーション開発になると受託案件では遭遇しない問題にぶち当たります。例えば動的に変化するオブジェクトとカラムでオブジェクト操作する要件です。

そんな時はDynamic DMLという手法で解決します。ただUpdateやDeleteはQueryStringを動的に作れば良いので比較的容易ですがInsertはすぐ思いつかなかったので色々試してみました。

試した結果、以下のように書くと実現できました。

[php]
String obj = ‘Account’, col = ‘Name’, val = ‘Test’;
SObject rec = Schema.getGlobalDescribe().get(obj).newSObject();
rec.put(col, val);
Insert rec;
[/php]

ただしDynamic SOQLを含んだApexをパッケージに含めた場合、パッケージのセキュリティ制限を「無制限」→「制限あり」に変更する必要があるそうです。Dynamic SOSL、Dynamic DMLを含んだ場合も同様かどうかは検証していません。