[salesforce] 애플 업그레이드
22266 단어 SalesforceAPEXtech
개시하다
프로그램 설계에 있어서 Salesforce의 Apex를 처음 사용하는 사람들이 갈수록 많아지고 있다.
변수,if,for,List를 알면 이동하는 코드가 비교적 간단하게 쓰여집니다.
그런데 어쩌면 이렇게 간단해서 반 설계를 기억할 기회가 없었고 매일 일하느라 바빴을까?
오늘 트리거를 통해 반 디자인과 디자인 모델의 일부분을 접촉하여 자신의 수준을 향상시키자😊
초보자
Trailhead에 기재된 코드 중 비즈니스 논리의 처리 클래스를 조합한 코드입니다.
Trigger.is~를 조합하여 처리 시기를 제어합니다.
수동 레벨로만 상업 논리를 배제하면 되지만, 트리거 레벨마다 여러 개의if문을 써야 하기 때문에 고생이 많습니다.
AccountTrigger.cls
trigger AccountTrigger on Account (before insert, after insert, after update) {
AccountTriggerHandler handler = new AccountTriggerHandler();
if (Trigger.isInsert) {
if (Trigger.isBefore) {
handler.beforeInsert(Trigger.new);
} else if (Trigger.isAfter) {
handler.afterInsert(Trigger.new);
}
}
else if (Trigger.isUpdate) {
if (Trigger.isBefore) {
handler.beforeUpdate(Trigger.old, Trigger.new);
}
}
}
초보자
switch 및 TriggeroperationType으로 코드를 덮어쓰려고 했습니다.
만약 글의 삽입이 사라지면 코드의 예견이 약간 좋아진다.
AccountTrigger.cls
trigger AccountTrigger on Account (before insert, after insert, after update) {
AccountTriggerHandler handler = new AccountTriggerHandler();
switch on Trigger.operationType {
when BEFORE_INSERT {
handler.beforeInsert(Trigger.new);
}
when AFTER_INSERT {
handler.afterInsert(Trigger.new);
}
when BEFORE_UPDATE {
handler.beforeUpdate(Trigger.old, Trigger.new);
}
}
}
중급편
디자인 모드 중 하나인 Template Method 모드를 사용하여 반을 다시 설계해 봅시다!
트리거 레벨
AccountTrigger.cls
trigger AccountTrigger on Account(before insert, after insert, before update, after update, before delete, after delete, after undelete) {
new AccountTriggerHandler().run();
}
네, 갑자기 세 줄만 갔어요.Trigger.is~Trigger.operationType은 어디에 있습니까?
터치 프로세서 추상 클래스
TriggerHandler.cls
public abstract class TriggerHandler {
public TriggerHandler() {}
public void run() {
switch on Trigger.operationType {
when BEFORE_INSERT {
this.beforeInsert();
}
when BEFORE_UPDATE {
this.beforeUpdate();
}
when AFTER_INSERT {
this.afterInsert();
}
when AFTER_UPDATE {
this.afterUpdate();
}
when BEFORE_DELETE {
this.beforeDelete();
}
when AFTER_DELETE {
this.afterDelete();
}
when AFTER_UNDELETE {
this.afterUndelete();
}
}
}
protected virtual void beforeInsert() {}
protected virtual void beforeUpdate() {}
protected virtual void beforeDelete() {}
protected virtual void afterInsert() {}
protected virtual void afterUpdate() {}
protected virtual void afterDelete() {}
protected virtual void afterUndelete() {}
}
abstract와virtual 같은 키워드가 나왔어요.기억나는 거 있어요?상기 코드에서 abstract는 추상적인 종류의 선언으로,virtual은 덮어쓰기 처리가 가능한 가상 방법으로 사용된다.
run () 방법은 각 방법을 호출했지만, 이 분류에 정의된 before Insert () 등 방법에서는 처리되지 않았습니다.
그냥 방법을 부르는 거야.
트리거 처리 이미지 레벨
AccountTriggerHandler.cls
public inherited sharing class AccountTriggerHandler extends TriggerHandler {
private List<Account> triggerOld;
private List<Account> triggerNew;
private Map<Id, Account> triggerOldMap;
private Map<Id, Account> triggerNewMap;
public AccountTriggerHandler() {
this.triggerOld = (List<Account>) Trigger.old;
this.triggerNew = (List<Account>) Trigger.new;
this.triggerOldMap = (Map<Id, Account>) Trigger.oldMap;
this.triggerNewMap = (Map<Id, Account>) Trigger.newMap;
}
public override void beforeInsert() {
for (Account newRec : this.triggerNew) {
// 何らかの処理...
}
}
public override void afterInsert() {
for (Account newRec : this.triggerNew) {
// 何らかの処理...
}
}
public override void beforeUpdate() {
for (Account newRec : this.triggerNew) {
// 何らかの処理...
}
}
}
이번에 extends 키워드가 나왔습니다.이것을 사용하여 TriggerHandler 클래스를 상속하는 솔리드 클래스를 만들 수 있습니다.구조기에 Trigger가 있어요.클래스 변수에 트리거 상하문, 예를 들어 new를 저장합니다.
그리고override 키워드를 사용하여 가상 방법을 확장합니다.
추상 클래스 측에서 호출 시간을 제어하기 때문에 실체 클래스 측에서 의견 차이가 발생하지 않으며 오버라이드 before Insert() 등의 방법만 있으면 필요한 시기에 호출 처리할 수 있다.
이렇게 하면 Trigger의 분기 처리 등 처리된 프레임워크를 추상 클래스에 집중하고 구상 클래스에 구체적인 처리를 기재하는 기법을 디자인 모드 Template Method 모드라고 한다.
이 모델을 사용하면 Trigger의 실현 방법의 공통화를 실현할 수 있고 매번 Trigger 특유의 지점 처리를 기록할 필요가 없다.
총결산
상술한 글쓰기는 모두 Salesforce에서 정확하게 처리된 것이기 때문에 모두 정식 환경에서 사용하는 것이다.조직마다 여러 개의 트리거를 만들 것 같아서 처리하는 공통화, 쓰기 통일 등 이익을 누릴 수 있는 반 설계를 생각해 보세요!
고급 트리거 구성
참고 자료
Reference
이 문제에 관하여([salesforce] 애플 업그레이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/skussun1/articles/2b27f7641d67dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)