Apex setReadOnlyApplicationModeでアプリケーションモードを参照のみに設定する

環境
Salesfoce

構文
public static Void setReadOnlyApplicationMode(Boolean applicationMode)
Salesforce のアップグレードおよびダウンタイム中に参照のみモードをシミュレートするには、Apex テストにおける組織のアプリケーションモードを参照のみに設定します。アプリケーションモードは、Apex テストの各実行が終了するとデフォルトのモードにリセットされます。

使用例
アプリケーションモードを参照のみに設定し、新しい取引先レコードを挿入しようとしています。
結果は例外となります。
その後、アプリケーションモードはリセットされ、正しく挿入されます。

サンプルコード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
@isTest
private class ApplicationReadOnlyModeTestClass {
public static testmethod void test() {
// テストアカウントを作成
Account testAccount = new Account(Name = 'TestAccount');
insert testAccount;
// アプリケーションの読み取り専用モードを設定.
Test.setReadOnlyApplicationMode(true);
// 読み取り専用モードを確認
System.assertEquals(
ApplicationReadWriteMode.READ_ONLY,
System.getApplicationReadWriteMode());
// アカウントオブジェクトの作成
Account testAccount2 = new Account(Name = 'TestAccount2');
try {
// テストアカウントを取得
Account testAccountFromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount'];
System.assertEquals(testAccount.Id, testAccountFromDb.Id);
//InvalidReadOnlyUserDmlException例外
insert testAccount2;
System.assertEquals(false, true);
} catch (System.InvalidReadOnlyUserDmlException e) {
// Expected
}
// 読み取り専用アプリケーション モード
Test.setReadOnlyApplicationMode(false);
insert testAccount2;
Account testAccount2FromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount2'];
System.assertEquals(testAccount2.Id, testAccount2FromDb.Id);
}
}
@isTest private class ApplicationReadOnlyModeTestClass { public static testmethod void test() { // テストアカウントを作成 Account testAccount = new Account(Name = 'TestAccount'); insert testAccount; // アプリケーションの読み取り専用モードを設定. Test.setReadOnlyApplicationMode(true); // 読み取り専用モードを確認 System.assertEquals( ApplicationReadWriteMode.READ_ONLY, System.getApplicationReadWriteMode()); // アカウントオブジェクトの作成 Account testAccount2 = new Account(Name = 'TestAccount2'); try { // テストアカウントを取得 Account testAccountFromDb = [SELECT Id, Name FROM Account WHERE Name = 'TestAccount']; System.assertEquals(testAccount.Id, testAccountFromDb.Id); //InvalidReadOnlyUserDmlException例外 insert testAccount2; System.assertEquals(false, true); } catch (System.InvalidReadOnlyUserDmlException e) { // Expected } // 読み取り専用アプリケーション モード Test.setReadOnlyApplicationMode(false); insert testAccount2; Account testAccount2FromDb = [SELECT Id, Name FROM Account WHERE Name = 'TestAccount2']; System.assertEquals(testAccount2.Id, testAccount2FromDb.Id); } }
@isTest
private class ApplicationReadOnlyModeTestClass {
  public static testmethod void test() {
    // テストアカウントを作成
    Account testAccount = new Account(Name = 'TestAccount');
    insert testAccount;

    // アプリケーションの読み取り専用モードを設定.
    Test.setReadOnlyApplicationMode(true);

    // 読み取り専用モードを確認
    System.assertEquals(
               ApplicationReadWriteMode.READ_ONLY, 
               System.getApplicationReadWriteMode());

    // アカウントオブジェクトの作成
    Account testAccount2 = new Account(Name = 'TestAccount2');

    try {
      // テストアカウントを取得
      Account testAccountFromDb = 
        [SELECT Id, Name FROM Account WHERE Name = 'TestAccount'];
      System.assertEquals(testAccount.Id, testAccountFromDb.Id);

      //InvalidReadOnlyUserDmlException例外 
      insert testAccount2;      
      System.assertEquals(false, true);
    } catch (System.InvalidReadOnlyUserDmlException e) {
      // Expected
    }        
    // 読み取り専用アプリケーション モード
    Test.setReadOnlyApplicationMode(false);

    insert testAccount2;
    Account testAccount2FromDb = 
       [SELECT Id, Name FROM Account WHERE Name = 'TestAccount2'];
    System.assertEquals(testAccount2.Id, testAccount2FromDb.Id);
  }
}

 

IT

Posted by arkgame