Salesforce エンジニア初心者がハマった事・注意すべき事
仕事でSalesforce上に外部向けサイトをつくる必要がありました。
(Java経験はありましたが)Salesforceに関してはまったくの初めてだったので、ハマった事や注意すべき事をまとめていきます。
レコードタイプIDを取得する際はスキーマを使う
Apexからオブジェクトに対してDMLを発行する際や、ヒープやCPUサイズ等に ガバナ制限 というものが関わってくる。
これはトランザクション単位でカウントされ、これらの制限を超えるとアプリケーションエラーとなる。
(基本的にアプリケーション実行中は開発者コンソールのログから、ガバナ制限を確認しながら開発を進めた方がよい)
特に気をつける点としては、繰り返し処理内のDMLで、動的にレコードタイプを検索した上でオブジェクト参照するパターンが起こり得ると思います。
そのため、レコードタイプを検索する場合は、次のように スキーマ を使うことでガバナ制限を増やさずにレコードタイプIDを取得することができました。
public ID getRecordTypeId(String objName, String recordTypeName) {
return Schema.getGlobalDescribe().get(objName).getDescribe().getRecordTypeInfosByDeveloperName().get(recordTypeName).getRecordTypeId();
}
オブジェクト削除する際の権限について
オブジェクトを作成・編集・削除する際は実行ユーザの権限によって大きく影響されます。
権限によっては参照権限もつかないため、アプリケーション上で次のエラーが発生します。
first error: INSUFFICIENT_ACCESS_OR_READONLY, ...
この問題を解決する簡単な方法ですが、システム権限を付与してしまうことです。(ただし外部向けアプリケーションの場合は、逆に意図せずデータを書き換えてしまう可能性があるため、そのへんは留意)
WithoutSharing ws = new WithoutSharing();
ws.insertNewCase(newCase, dmo);
private without sharing class WithoutSharing {
public void insertNewCase(Case newCase, Database.DMLOptions dmo) {
database.insert(newCase, dmo);
}
}
WithoutSharingクラスを継承する。
これからも追記予定
Author And Source
この問題について(Salesforce エンジニア初心者がハマった事・注意すべき事), 我々は、より多くの情報をここで見つけました https://qiita.com/Sam/items/f30ad6036e3a292e02cf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .