티스토리 뷰
[세일즈포스 개발자] Salesforce Developer Study 02 - sObject / Trigger / SOSL / SOQL / @future
monimoni 2023. 2. 20. 08:131. sObject ( Salesforce Object )
- sObject는 Org의 Salesforce Object에 해당하는 Apex 데이터 유형이다.
- sObject는 하나의 변수에 여러 값을 보유하는 복합 데이터 유형이다.
- Account, Contact, Opportunity와 같은 Salesforce Object의 단일 데이터 레코드를 보유한다.
- sObject에는 문자열, 날짜, 정수, Boolean과 같은 다양한 데이터 유형을 지닐 수 있다.
- Salesforce의 모든 레코드는 기본적으로 Apex에서 sObject로 표시된다.
- sObject를 생성하기 위해서는 변수를 선언한 후, 변수에 sObject 인스턴스를 할당해야 한다.
- Ex. Account acc = new Account ( Name = ‘Acme’ );
- Ex. Account acc = new Account(Name='Acme', Phone='(415)555-1212', Number=100);
2. SOQL
- SOQL이란 Salesforce 데이터베이스에서 레코드 데이터를 가져오는 언어이다.
- SOQL에서 필수로 작성해야 하는 절은 SELECT, FROM이다.
- 선택적으로 작성할 수 있는 절은 조건을 달 수 있는 WHERE, 반환할 최대 레코드의 개수를 설정할 수 있는 LIMIT, 정렬방향을 지정할 수 있는 OEDER BY가 있다.
- 쿼리 결과를 list에 할당하기 위해서는, 쿼리가 대괄호 [ ]로 감싸져 있으며, 명령문 끝에는 세미콜론 ;이 붙어야 한다.
- 쿼리에서 바인드 변수는 :로 쿼리 내에서 구분해줘야 한다.
- Bind( 바인드 )는 SOQL문 내에서 지역변수를 사용하는 것을 의미한다.
3. Flow Type
- 1) Screen Flow
- : Screen Flow는 비지니스 프로세스를 통해 사용자를 안내하는 UI를 제공한다.
- 2) Autolaunched Flow
- : Autolaunched Flow는 UI가 없는 비지니스 프로세스를 자동화한다.
- : Trigger가 없으며, 백그라운드에서 실행된다.
- 3) Triggered Flow
- : 지정한 트리거에 의해 자동 실행되며, 백그라운드에서 실행된다.
- : Trigger는 Flow를 시작하는 항목을 식별한다.
- : Criteria는 트리거의 특성을 정의한다.
- : Action은 Flow가 수행하는 작업을 결정합니다.
4. Trigger Types
- 1) Schedule : 지정한 시간과 빈도로 실행된다.
- 2) Platform Event : 특정 플랫폼 이벤트 메시지 수신 시 실행된다.
- 3) Record : 레코드가 생성, 업데이트 또는 삭제될 때 실행된다.
5. Record Trigger Flows
- Record Trigger Flows는 가장 일반적으로 사용되는 자동화이다.
- Record Trigger Flows의 역할은 ‘어떤 일이 발생하면 다른 작업을 합니다.’이다.
- Record Trigger Flows의 경우, Trigger는 Flow가 작동하는 Object와 실행시기를 결정한다. ( 생성/업데이트/삭제 )
- Record Trigger Flows을 생성하여, 다른 레코드를 업데이트하거나 알림을 보내거나 프로세스를 시작하거나 데이터 일관성을 유지할 수 있다.
6. Record Trigger Flows 옵션
- 1) Fast Field Update
- : Flow를 트리거한 레코드 업데이트 중이거나 해당 업데이트가 저장되기 전에 실행
- : 트랜잭션을 트리거한 레코드를 업데이트할 수 있다.
- : Trigger Record 업데이트로 제한되기에 최적의 성능을 낼 수 있다.
- 2) Related Records and Actions ( 관련 레코드 및 액션 )
- : Flow를 트리거한 레코드가 업데이트하는 동안과 업데이트 후에 저장
- : 다른 레코드를 생성, 업데이트하거나 삭제할 수 있다.
- : 하위 Flow를 호출할 수 있다.
- : 이메일 알림 보내기 또는 Chatter에 게시하는 등의 호출 작업을 할 수 있다.
- : 레코드 변경에 의해 트리거 되는 일반 프로세스를 자동화해준다.
- 3) Run Asynchronously ( 비동기적으로 실행 )
- : Flow를 트리거한 레코드 업데이트가 완료된 직후 실행된다.
- : 외부 시스템에 요청을 보내거나 다른 장기 실행 프로세스를 수행하는 것과 같은 고급 시나리오를 실행한다.
- : Flow을 트리거한 레코드 업데이트의 속도 저하 또는 차단을 방지할 수 있다.
- 4) Scheduled Paths ( 예정된 경로 )
- : 종료 날짜와 같이 Flow를 트리거한 레코드의 날짜를 기반으로 미리 알림 또는 후속 조치를 예약할 수 있다.
- : 트리거 실행과 자동화 실행 사이에 지정된 기간 동안 기다릴 수 있다.
7. SOQL과 SOSL 사용 시기
- 1) SOQL ( Salesforce Object Query Language )
- : 데이터가 있는 Object 또는 field를 알고 있고, 다음 작업을 수행하려는 경우 사용
- : 단일 Object 또는 서로 관계가 있는 다중 Object에서 데이터를 검색
- : 쿼리의 일부로 결과를 정렬
- : 숫자, 날짜 또는 확인란 field에서 데이터를 검색
- 2) SOSL ( Salesforce Object Search Language )
- : 데이터가 상주하는 Object 또는 field를 모르는 상태로 다음 작업을 수행하려는 경우 사용
- : field 내에 존재하는 특정 용어에 대한 데이터를 검색
- : SOSL의 경우 field 내에서 여러 용어를 토큰화하고 이로부터 검색 인덱스를 구축할 수 있기에, 더 빠르고 관련성이 있는 결과를 반환할 수 있다.
- : 여러 Object와 field를 효율적으로 검색하고, Object는 서로 관련이 있을 수도 없을 수도 있다.
- : 부서( division ) 기능을 사용하여 조직의 특정 부서에 대한 데이터를 검색하고 가장 효율적인 방법으로 데이터를 찾는다.
8. 프로토콜로 쿼리 보내기
- 1) Query ( REST ) and query() ( SOAP )
- : 지정한 Object에 대해 SOQL 쿼리를 실행하고, 기준과 일치하는 데이터를 반환
- 2) Search ( REST ) and search() ( SOAP )
- : 조직의 데이터에 대해 SOSL 텍스트 문자열 검색을 실행
9. SOQL VS SOSL
SOQL | SOSL | |
명칭 | Salesforce Object Query Language | Salesforce Object Search Language |
사용 | List Views, Reports, Apex | (Global, Sidebar, Advanced) Search, Apex |
인덱싱 | 동기식 ( 사용자 지정 인덱스 / 표준 인덱스 사용 ) |
비동기식 ( 보통 2-3분에 한번 9000이상의 레코드가 로드 되면 초과분은 대기열로 이동 -> 느림 ) |
검색기준 | 정확성 | 관련성 및 속도 |
검색범위 | 한번에 하나의 Object 검색 | 한번에 여러 Object 검색 |
조건 | WHERE | IN SearchGroup |
반환 값 | SELECT | Returning FieldSpec |
정렬 | ORDER BY, LIMIT, OFFESET | ORDER BY, LIMIT, OFFESET |
필터링 | WITH DATA CATEGORY | WITH DATA CATEGORY |
10. SOSL - 단일 Object 내에서의 검색
- FIND { 검색 단어 } RETRUNING ObjectTypeName
11. SOSL - 다중 Object 내에서의 검색
- FIND { 검색 단어 } RETRUNING ObjectTypeName1, ObjectTypeName2
- FIND {A} IN ALL FIELDS RETURNING Account(Name), Contact(Department)
12. APEX 언어의 특징
- 1) Hosted ( 호스팅 )
- : Apex는 서버인 Lightning Platform에서 저장, 컴파일 및 실행된다.
- 2) Object oriented ( 객체 지향 )
- : Apex는 클래스, 인터페이스 및 상속을 지원한다.
- 3) Strongly typed ( 강력한 유형 )
- : Apex는 컴파일 시간에 Object에 대한 참조를 확인한다.
- 4) Multitenant aware ( 다중 테넌트 인식 )
- : Apex는 다중 테넌트 플랫폼에서 실행되기에 코드가 공유 리소스를 독점하는 것을 방지하여 제한을 적용하여 런어웨이 코드를 면밀히 보호한다.
- 5) Integrated with the database ( 데이터베이스와의 통합 )
- : Apex는 레코드 및 해당 필드에 대한 직접적인 액세스를 제공하고 해당 레코드를 조작하기 위한 명령문 및 쿼리 언어를 제공한다.
- 6) Data focused ( 데이터 중심 )
- : Apex는 데이터베이스에 대한 트랜잭션 액세스를 제공하므로 작업을 롤백이 가능
- 7) Easy to use ( 사용하기 쉬움 )
- : Apex는 친숙한 언어인 Java 문법을 기반으로 한다.
- 8) Easy to test ( 테스트하기 쉬움 )
- : Apex는 단위 테스트 생성, 실행 및 코드 적용 범위에 대한 기본 지원을 제공한다.
- : Salesforce는 플랫폼 업그레이드 전에 모든 단위 테스트를 실행하여 모든 사용자 정의 Apex 코드가 예상대로 작동하는지 확인한다.
- 9) Versioned ( 버전관리 )
- : 사용자 정의 Apex 코드를 API의 여러 버전에 대해 저장할 수 있다.
- + Apex는 고유한 API 이름을 사용하여 Standard 또는 Customer sObject 및 해당 필드를 참조한다.
- + 사용자 정의일 경우 API 이름의 마지막이 __C로 끝나며,
- + 사용자 정의 관계필드의 경우에는 마지막이 __r로 끝난다.
13. Apex와 다른 객체 지향언어와 다르게 지원하는 기능
- Apex로서의 클라우드 개발은 클라우드에서 저장, 컴파일 및 실행된다.
- 데이터베이스 시스템의 Trigger와 유사한 Trigger을 지원한다.
- 트랜잭션 및 롤백이 가능하다.
- 사용자 지정 코드의 버전 관리가 가능하다.
- 데이터를 쿼리하고 검색하기 위해 직접 데이터베이스 호출 및 쿼리 언어를 만들 수 있다.
- Public보다 더 허용적이고 네임스페이스와 애플리케이션 전체의 액세스를 허용하는 global을 지원한다.
14. Apex 언어에서 사용할 수 있는 DML문
- INSERT / UPDATE / UPSERT / DELETE / UNDELETE / MERGE
- 각 DML문은 sObject 또는 sObject List를 반환할 수 있다.
- 이 중 UPSERT와 MERGE는 Salesforce 내에서만 사용이 가능하다.
- UPSERT는 새 레코드를 생성하고 단일 문 내에서 sObject 레코드를 업데이트한다.
- UPSERT는 지정된 필드를 사용하여 기존 개체의 존재를 확인하거나 필드를 지정되지 않는 경우 ID 필드를 사용한다.
- MERGE는 동일한 sObject 유형의 최대 3개 레코드를 하나의 레코드에 병합하고 나머지 레코드는 삭제한 후 관련 레코드의 부모를 다시 지정한다.
15. Database 메소드
- Database.SaveResult [ ] results = Database.insert(recordList, false);문을 통해 각 레코드에 대한 성공 또는 실패 정보가 포함된 결과 개체를 반환한다.
16. SOSL의 기본 쿼리문
- FIND { SearchQuery } [ IN SearchGroup ] [ RETURNING ObjectsAndFields ]
- SearchGroup은 선택 사항으로, ALL FIELDS / NAME FIELDS / PHONE FIELDS / EMAIL FIELDS / SIDEBAR FIELDS 중 하나를 사용할 수 있다.
17. 트리거 ( Trigger )
- Apex에서 Trigger를 사용하면 삽입, 업데이트 또는 삭제와 같은 Salesforce의 레코드에 대한 이벤트 전후에 사용자 정의 작업을 수행할 수 있다.
- 트리거의 구문은 다음과 같다.
- trigger TriggerName on ObjectName ( trigger_events ) {
- // code_block
- }
- 트리거에서 지정해줄 수 있는 이벤트로는 Before insert / Before update / Before delete / After insert / After update / After delete / After undelete가 있다.
18. Types of Triggers ( 트리거의 유형 )
- 1) Before triggers
- : 레코드 값이 데이터베이스에 저장되기 전에 레코드 값을 업데이트하거나 유형성을 검사하기 전에 실행한다.
- 2) After triggers
- : 시스템에서 설정한 필드 값에 액세스하고 다른 레코드의 변경 사항에 영향을 주는데 사용된다.
- : After trigger를 실행하는 레코드는 read-only이다.
19. List of context Variable available for trigger
- 1) isExecuting
- : Apex 코드의 현재 컨텍스트가 Visualforce 페이지, 웹 서비스 또는 API 호출이 아니라 트리거인 경우 true를 반환한다.
- 2) isInsert
- : Salesforce 사용자 인터페이스, Apex 또는 API에서 insert로 이 트리거가 실행된 경우 true가 반환된다.
- 3) isUpdate
- : Salesforce 사용자 인터페이스, Apex 또는 API에서 Update로 이 트리거가 실행된 경우 true가 반환된다.
- 4) isDelete
- : Salesforce 사용자 인터페이스, Apex 또는 API에서 Delete로 이 트리거가 실행된 경우 true가 반환된다.
- 5) isBefore
- : 레코드가 저장되기 전에 이 트리거가 실행되었는지에 대한 여부를 반환한다.
- 6) isAfter
- : 모든 레코드가 저장된 후에 이 트리거가 실행되었는지에 대한 여부를 반환한다.
- 7) isUndelete
- : 휴지통에서 레코드가 복구된 후 트리거가 실행되었는지에 대한 여부를 반환한다.
- 8) new
- : sObject 레코드의 새 버전 목록을 반환한다.
- : sObject 목록은 오직 insert / update / undelete 트리거에서만 가능하다.
- : 레코드는 오직 before 트리거로만 수정이 가능하다.
- 9) newMap
- : 새 버전의 sObject 레코드에 대한 ID맵이다.
- : 이 Map은 오직 before update / after insert / after update / after undelete 트리거에서만 가능하다.
- 10) old
- : sObject 레코드의 이전 버전 List를 반환한다.
- : 이 sObject list는 오직 update와 delete 트리거에서만 가능하다.
- 11) oldMap
- : sObject 레코드의 이전 버전에 대한 ID Map을 반환한다.
- : 이 Map의 경우 오직 update와 delete 트리거에서만 가능하다.
- 12) operationType
- : 현재 작업에서 해당하는 System.TriggerOpperation 형식의 열거형을 반환한다.
- 13) Size
- : 트리거 호출의 총 레코드 수를 반환한다. ( 이전 및 새로운 모두 )
20. Callouts ( 콜아웃 )
- 외부 웹 사이트에 대한 Apex 호출을 콜아웃이라고 부른다.
- 트리거에서 콜아웃을 만들려면, 비동기적으로 실행되는 클래스 메소드를 호출한다.
- 이러한 메소드는 퓨처 메소드라고 하며, @future( callout=true )라는 주석이 붙는다.
21. 비동기 Apex ( Asynchronous Apex )
- 비동기식 Apex는 나중에 별도의 스레드에서 프로세스를 실행하는데 사용된다.
- 비동기식 프로세스는 사용자가 작업이 완료될 때까지 기다리지 않고 ‘백그라운드’에서 작업을 실행하는 프로세스 또는 기능이다.
- 외부 시스템에 대한 콜아웃, 더 높은 제한이 필요한 작업 및 특정 시간에 실행해야 하는 코드에 대해 비동기 Apex를 사용한다.
22. 비동기식 처리의 장점
- 1) User efficiency ( 사용자 효율성 )
- : 비동기 처리로 작업을 계속할 수 있고 백그라운드에서 처리를 수행할 수 있다.
- 2) Scalability ( 확장성 )
- : 미래의 어느 시점에서 리소스를 사용할 수 있을 때 플랫폼의 일부 기능이 실행되도록 허용함으로써 리소스를 신속하게 관리하고 확장할 수 있다.
- 3) Higher Limits ( 상한선 )
- : 비동기 프로세스는 권한 및 실행 제한이 더 높은 새 스레드에서 시작된다.
23. 비동기식 Apex ( Asynchronous Apex )의 종류
- 1) Future Methods ( 미래 메소드 )
- : 자체 스레드에서 실행하고 리소스를 사용할 수 있을 때까지 시작하지 않는다.
- : 주로 Web Service callout에서 사용된다.
- 2) Bath Apex ( 배치 Apex )
- : 일반적으로 처리하는데 걸린 제한을 초과하는 대규모 작업을 실행한다.
- : 주로 데이터 정리나 기록 보관하는데 사용된다.
- 3) Queueable Apex ( 대기 가능 Apex )
- : 미래 메소드(Future Methods)와 유사하지만 추가 작업을 연결을 제공하고, 더 복잡한 데이터 유형을 사용할 수 있다.
- : 주로 외부 웹 서비스로 순차적인 처리 작업을 수행하는데 사용된다.
- 4) Scheduled Apex ( 스케줄 Apex )
- : Apex가 지정된 시간에 실행되도록 예약한다.
- : 주로 일일 또는 주간 작업에 사용된다.
24. 비동기 처리 방식의 주의점
- 1) Ensure fairness of processing ( 처리의 공정성 확보 )
- : 모든 고객이 처리 리소스를 공평하게 공유하도록 한다.
- 2) Ensure fault tolerance ( 내결함성 보장 )
- : 장비 또는 소프트웨어 오류로 인해 비동기식 요청이 손실되지 않도록 한다.
25. 비동기식 처리 – 요청 수명 주기
- 1) Enqueue ( 대기열에 넣기 )
- : 요청이 대기열에 들어간다.
- : 플랫폼은 요청을 처리하기 위해 적절한 데이터와 함께 요청을 Queue에 넣는다.
- 2) Persistence ( 지속 )
- : Queue에 넣은 요청은 지속된다.
- : 요청은 오류 복구 및 트랜잭션 기능 제공을 위해 영구 저장소에 저장된다.
- 3) Dequeue ( 대기열에서 빼기 )
- : Queue에 넣은 요청은 Queue에서 제거되고 처리된다.
- : 처리가 실패하면 트랜잭션 제어를 통해 요청이 손실되지 않도록 한다.
'[세일즈포스 개발자]' 카테고리의 다른 글
Apex로 기본 Form 만들기 (0) | 2023.02.21 |
---|---|
[세일즈포스 개발자] Salesforce Developer Study 03 - Future Method / Batch Apex / Queueable Apex / Scheduled Apex / Visualforce (0) | 2023.02.21 |
[세일즈포스 개발자] Salesforce Developer Study 01 - 변수/컬렉션/연산자 (5) | 2023.02.16 |
[세일즈포스 개발자] Salesforce admin 오답정리 - Dump 03 (0) | 2023.02.16 |
[세일즈포스 개발자] Salesforce admin 오답정리 - Dump 02 (0) | 2023.02.08 |