Created
February 14, 2015 03:42
-
-
Save tyoshikawa1106/2ac1521c527e3aca4f48 to your computer and use it in GitHub Desktop.
Database.DMLOptionsのサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page controller="DMLOptionsDemoController" showHeader="true" sidebar="false"> | |
<div id="vf-page"> | |
<apex:form id="form"> | |
<apex:pageBlock title="{!$ObjectType.Account.Label}" mode="edit" tabStyle="Account"> | |
<apex:pageMessages id="msg" /> | |
<apex:pageBlockButtons location="bottom"> | |
<apex:commandButton value=" 保存 " action="{!doSave}" reRender="form" /> | |
</apex:pageBlockButtons> | |
<apex:pageBlockSection title="情報"> | |
<apex:inputField value="{!account.Name}" /> | |
<apex:inputField value="{!account.AccountNumber}" /> | |
</apex:pageBlockSection> | |
</apex:pageBlock> | |
</apex:form> | |
</div> | |
</apex:page> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public with sharing class DMLOptionsDemoController { | |
public Account account {get; set;} | |
public Boolean isDuplicate {get; set;} | |
public DMLOptionsDemoController () { | |
this.isDuplicate = false; | |
doInit(); | |
} | |
public void doSave() { | |
// DMLOptions Class | |
Database.DMLOptions dml = new Database.DMLOptions(); | |
// 重複レコード保存不可 | |
dml.DuplicateRuleHeader.AllowSave = false; | |
// INSERT | |
Database.SaveResult sr = Database.insert(this.account, dml); | |
// エラー判定 | |
if (!sr.isSuccess()) { | |
// 重複エラー | |
this.isDuplicate = true; | |
// Insertion failed due to duplicate detected | |
for(Database.Error duplicateError : sr.getErrors()){ | |
// Datacloud.DuplicateResult | |
Datacloud.DuplicateResult duplicateResult = ((Database.DuplicateError)duplicateError).getDuplicateResult(); | |
System.debug('Database.DuplicateResult:getFields() = ' + duplicateResult.getDuplicateRule()); | |
System.debug('Database.DuplicateResult:getErrorMessage() = ' + duplicateResult.getErrorMessage()); | |
System.debug('Database.DuplicateResult:getMatchResults() = ' + duplicateResult.getMatchResults()); | |
System.debug('Database.DuplicateResult:isAllowSave() = ' + duplicateResult.isAllowSave()); | |
// Database.DuplicateError | |
System.debug('Database.DuplicateError:getFields() = ' + duplicateError.getFields()); | |
System.debug('Database.DuplicateError:getMessage() = ' + duplicateError.getMessage()); | |
System.debug('Database.DuplicateError:getStatusCode() = ' + duplicateError.getStatusCode()); | |
// Error Message | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, duplicateResult.getErrorMessage())); | |
} | |
} else { | |
// 正常実行 | |
this.isDuplicate = false; | |
// Create Message | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'Create Account!!')); | |
// Default | |
doInit(); | |
} | |
} | |
private void doInit() { | |
this.account = new Account( | |
Name = 'Sample Account' | |
,AccountNumber = 'Sample Number' | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@isTest | |
private class DMLOptionsDemoControllerTest { | |
private static User testAdminUser = CommonTester.getLoginUser(); | |
/** | |
* DMLOptionsDemoControllerTest1 | |
*/ | |
static testMethod void DMLOptionsDemoControllerTest1() { | |
System.runAs(testAdminUser) { | |
Test.startTest(); | |
// Test | |
DMLOptionsDemoController cls = new DMLOptionsDemoController(); | |
Test.stopTest(); | |
// Result | |
System.assertEquals(cls.isDuplicate, false); | |
System.assertEquals(cls.account.Name, 'Sample Account'); | |
System.assertEquals(cls.account.AccountNumber, 'Sample Number'); | |
} | |
} | |
/** | |
* doSaveTest1 | |
*/ | |
static testMethod void doSaveTest1() { | |
System.runAs(testAdminUser) { | |
Test.startTest(); | |
// Test | |
DMLOptionsDemoController cls = new DMLOptionsDemoController(); | |
cls.doSave(); | |
Test.stopTest(); | |
// Result | |
System.assertEquals(cls.isDuplicate, false); | |
List<Account> resultAccounts = [SELECT Id,Name,AccountNumber FROM Account LIMIT 1]; | |
System.assertEquals(resultAccounts.size(), 1); | |
System.assertEquals(resultAccounts[0].Name, 'Sample Account'); | |
System.assertEquals(resultAccounts[0].AccountNumber, 'Sample Number'); | |
} | |
} | |
/** | |
* doSaveTest2 | |
*/ | |
static testMethod void doSaveTest2() { | |
System.runAs(testAdminUser) { | |
Test.startTest(); | |
// Test | |
DMLOptionsDemoController cls = new DMLOptionsDemoController(); | |
// 保存1回目 | |
cls.doSave(); | |
// 保存2回目 (重複エラー発生条件) | |
cls.doSave(); | |
Test.stopTest(); | |
// Result | |
System.assertEquals(cls.isDuplicate, true); | |
List<Account> resultAccounts = [SELECT Id,Name,AccountNumber FROM Account LIMIT 1]; | |
System.assertEquals(resultAccounts.size(), 1); | |
System.assertEquals(resultAccounts[0].Name, 'Sample Account'); | |
System.assertEquals(resultAccounts[0].AccountNumber, 'Sample Number'); | |
} | |
} | |
/** | |
* doSaveTest3 | |
*/ | |
static testMethod void doSaveTest3() { | |
System.runAs(testAdminUser) { | |
Test.startTest(); | |
// Test | |
DMLOptionsDemoController cls = new DMLOptionsDemoController(); | |
// 保存1回目 | |
cls.doSave(); | |
// 保存2回目 (条件変更) | |
cls.account.AccountNumber = cls.account.AccountNumber + '★'; | |
cls.doSave(); | |
Test.stopTest(); | |
// Result | |
System.assertEquals(cls.isDuplicate, false); | |
List<Account> resultAccounts = [SELECT Id,Name,AccountNumber FROM Account ORDER BY AccountNumber ASC LIMIT 5]; | |
System.assertEquals(resultAccounts.size(), 2); | |
System.assertEquals(resultAccounts[0].Name, 'Sample Account'); | |
System.assertEquals(resultAccounts[0].AccountNumber, 'Sample Number'); | |
System.assertEquals(resultAccounts[1].Name, 'Sample Account'); | |
System.assertEquals(resultAccounts[1].AccountNumber, 'Sample Number★'); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment