Salesforceのnot allowedって何?なぜ出るのか、改善方法をご紹介
IT・技術関連
更新日:2024.09.05


Salesforceのnot allowedとは?
Salesforceでは、ApexというSalesforce専門のプログラム言語でDMLを実行すると「DML currently not allowed」というエラーが発生することがあります。簡単に言うと、追加されていないデータをリストにアップデートするときに発生します。
例えば、クラウド請求書のAPIでPDFにする際、その請求書のIDで保存しているプログラムがあるとします。このプログラムでは請求書PDFを取り込んだとき、Salesforceに請求書IDがあるか調べ、なかったときはクラウドにもう一度問い合わせるという仕組みでした。
しかし、保存しようとすると「DML currently not allowed」が出てしまったということです。つまり、データを呼び出す、そしてアップロードをするプログラムの場合、起きてしまうエラーということになります。
Salesforceでnot allowedが出る条件

DMLとは
SalesforceにおいてのDMLとは、データベースに対する検索、更新、削除、登録をするときの指示のことです。Apexという言語でデータベースクラスメソッドやApex DMLステートメントを使用して実行ができます。 データ追加や更新、削除や復元などDMLステートメントで使うことが可能です。insert DMLでは、個別で取引先、取引の代表者など1つ、複数の組織データを追加できます。SQLで例えると、INSERT ステートメントに似ています。 以下サンプルコードです。Account newAcct = new Account(name = 'Acme');
try {
insert newAcct;
} catch (DmlException e) {
// Process exception here
}
update DMLは個別の取引先、取引責任者、請求書の明細など組織のデータを複数で更新が可能です。SQLで例えると、UPDATE ステートメントに似ています。
以下サンプルコードです。
Account a = new Account(Name='Acme2');
insert(a);
Account myAcct = [SELECT Id, Name, BillingCity FROM Account WHERE Id = :a.Id];
myAcct.BillingCity = 'San Francisco';
try {
update myAcct;
} catch (DmlException e) {
// Process exception here
}
DML currently not allowedのサンプルコード
「DML currently not allowed」というエラーが発生するサンプルコードを紹介します。最初に取引先の判定処理をして、結果を画面に出力するサンプルです。判定が正常に行われた場合は、「Checked_ok」、という項目をturuにしてupdateします。 下記、サンプルコードになります。
<!-- Visualforceページ -->
<apex:page controller=""AccountCheckController"">
< apex:outputText value=""{! msg }"" />
</apex:page>
/**
* コントローラクラス.
*/
public class AccountCheckController {
/** 取引先ID */
public String accountId;
/** メッセージ */
public String msg{get; set;}
/**
* コンストラクタ.
*/
public AccountCheckController() {
Map paramMap = ApexPages.currentPage().getParameters();
this.accountId = paramMap.get('id');
// 取引先取得
List accountList = [SELECT Id, Name, Checked_ok FROM Account WHERE Id =: this.accountId];
if (accountList.size() == 0) {
this.msg = '取引先が取得できませんでした。';
return;
}
Account acc = accountList.get(0);
// 判定処理
AccountCheck accountCheck = new AccountCheck();
boolean result = accountCheck.exec();
if (!result) {
this.msg = '判定処理でエラーが発生しました。';
return;
}
// 判定処理が正常であれば、チェック実施済フラグを立てる
acc.Checked_ok = true;
update acc;
this.msg = '判定処理が完了しました!';
}
}
Salesforceのnot allowedの解決方法

<!-- Visualforceページ -->
<!-- 追加部分 -->
<apex:page controller=""AccountCheckController"" action=""{! init }"">
<apex:outputText value=""{! msg }"" />
</apex:page>
/**
* コントローラ.
*/
public class AccountCheckController {
/** 取引先ID */
public String accountId;
/** メッセージ */
public String msg{get; set;}
/**
* 初期表示処理(追加部分).
*/
public void init() {
Map paramMap = ApexPages.currentPage().getParameters();
this.accountId = paramMap.get('id');
// 取引先取得
List accountList = [SELECT Id, Name, Checked_ok FROM Account WHERE Id =: this.accountId];
if (accountList.size() == 0) {
this.msg = '取引先が取得できませんでした。';
return;
}
Account acc = accountList.get(0);
// 判定処理
AccountCheck accountCheck = new AccountCheck();
boolean result = accountCheck.exec();
if (!result) {
this.msg = '判定処理でエラーが発生しました。';
return;
}
// 判定処理が正常であれば、チェック実施済フラグを立てる
acc.Checked_ok = true;
update acc;
this.msg = '判定処理が完了しました!';
}
}
Salesforceを便利に活用しよう

この記事の監修者・著者

- AWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
-
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。
・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
最新の投稿
- 2024-12-27営業インタビュー情報共有の活性化の中心に。SP企画部の新たな取り組み
- 2024-07-01営業インタビュー最短で当日にご提案可能。 OPE営業の対応が早い3つの理由
- 2024-07-01営業インタビュー研修見学ツアーが高評価!「お客様のOPEに対する期待を高め、継続に貢献できればと思います。」
- 2024-07-01営業インタビュー信頼関係を構築し、エンジニアの長期就業へ
ITエンジニアの派遣を利用したい企業様へ

- 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
- すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!
オープンアップITエンジニアをご検討ください!
当社のITエンジニア派遣サービスは
- 派遣スピードが速い!(最短即日)
- 4,500名のエンジニアから貴社にマッチした人材を派遣
- 正社員雇用も可能
こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。