PDI 문제 96
어떤 자동화를 통해 개발자는 가장 효율적인 방식으로 이러한 요구 사항을 충족할 수 있을까요?
검증 규칙은 Apex나 Flow가 없어도 필드 수준 조건을 적용하는 데 효율적입니다.
수식을 사용하면 사용자 프로필이 "영업 관리자"가 아닌지, 상태가 "닫힘 분실"로 설정되어 있을 때 분실 사유 필드가 비어 있는지 확인할 수 있습니다.
다른 옵션은 왜 없나요?
A: 이 간단한 검증에는 트리거가 더 복잡하고 불필요합니다.
C: 레코드 트리거 흐름은 검증 규칙에 비해 필드 검증에 덜 효율적입니다.
D: 승인 프로세스는 이러한 유형의 필드 수준 제한을 처리하지 않습니다.
참조: 검증 규칙 문서: https://help.salesforce.com/s/articleView?id=sf.
fields_about_field_validation.htm
PDI 문제 97
PDI 문제 98
Apex 방법의 정확한 정의는 무엇입니까?
Next Best Action 전략의 Enhance Element에 대한 Apex 메서드의 올바른 정의를 확인하려면 이 맥락에서 사용되는 @InvocableMethod의 구문과 요구 사항을 평가해야 합니다. 특히 접근성, 입출력 유형, Next Best Action과의 호환성에 중점을 둡니다. Salesforce 공식 문서를 참조하여 문제와 각 옵션을 체계적으로 분석해 보겠습니다.
다음 최선의 조치 및 향상 요소 이해:
* 다음 최선의 행동(NBA): NBA는 사용자에게 개인화된 추천을 제공하는 Salesforce 기능으로, 프로세스 자동화(예: Flow 또는 Einstein Next Best Action)에 자주 사용됩니다. NBA는 연락처에 할인을 제공하는 등 특정 행동을 제안하는 전략을 평가합니다.
* 향상 요소: NBA에서 향상 요소를 사용하면 개발자가 사용자 지정 로직(예: Apex 메서드)을 호출하여 추천을 수정하거나 생성할 수 있습니다. Salesforce Next Best Action 설명서에는 "Next Best Action 전략의 향상 요소는 Apex 메서드를 호출하여 추천을 동적으로 생성하거나 수정할 수 있습니다"(Salesforce 도움말, Next Best Action)라고 명시되어 있습니다.
* Apex 방법 요구 사항:
* NBA 또는 Flow에서 호출하려면 해당 메서드에 @InvocableMethod 주석을 추가해야 합니다.
* 클래스 외부에서 접근하려면 전역적이고 정적이어야 합니다.
* NBA의 경우, 이 메서드는 일반적으로 권장 사항을 List<Recommendation> 또는 List<List<Recommendation>>(대량 처리용)로 반환합니다.
* 입력은 연락처 세부 정보와 같은 데이터를 전달하기 위한 사용자 정의 래퍼 클래스(예: ContactWrapper)의 목록이 될 수 있습니다.
* Apex 개발자 가이드에서는 "@InvocableMethod는 전역적이고 정적이어야 하며 입력 목록을 받아서 출력 목록을 반환할 수 있어야 합니다."(Salesforce Apex 개발자 가이드, InvocableMethod 주석)라고 명시되어 있습니다.
요구 사항 분석:
* 목적: 이 방법은 연락처에 대한 할인 수준을 결정하여 추천(예: 할인 혜택)을 생성하거나 수정하는 것을 제안합니다.
* 입력: 이 메서드는 List<ContactWrapper>를 입력으로 받는데, 여기서 ContactWrapper는 연락처 데이터와 기타 요소를 포함하는 사용자 정의 클래스입니다.
* 출력: NBA용이므로 메서드는 List<Recommendation>을 반환해야 합니다. 여기서 Recommendation은 NBA에서 제안된 작업(예: 할인 혜택)을 나타내는 데 사용되는 표준 Salesforce 객체입니다. Salesforce 객체 참조 가이드에서는 "Recommendation 객체는 이름, 설명, ActionReference와 같은 필드를 포함하는 Next Best Action의 제안된 작업을 나타냅니다"(Salesforce 객체 참조 가이드, Recommendation 객체)라고 명시되어 있습니다.
* 향상 요소 세부 사항: 향상 요소는 일반적으로 각 입력에 대해 중첩된 List<List<Recommendation>>이 아닌 List<Recommendation>을 출력으로 예상합니다(특정 방식으로 대량화되지 않는 한).
하지만 이 방법은 대량화(List를 입력으로 받아서 List를 반환)를 지원해야 합니다.
옵션 평가:
* 가.
꼭대기
복사
@InvocableMethod
글로벌 정적 List<List<Recommendation>> getLevel(List<ContactWrapper> 입력)
{ /*구현*/ }
* 접근성: global static과 @InvocableMethod는 호출 가능한 메서드에 적합합니다.
* 입력: ContactWrapper가 사용자 정의 클래스라고 가정할 때 List<ContactWrapper>가 적절합니다.
@InvocableVariable 속성을 사용하여 연락처 데이터를 전달합니다.
* 출력: 중첩된 목록인 List<List<Recommendation>>을 반환합니다. Apex 개발자 가이드에서는 "@InvocableMethod는 중첩된 목록을 반환할 수 있지만, Flow 또는 NBA의 경우 직접 매핑을 위한 예상 출력은 일반적으로 List<t>입니다"(Salesforce Apex 개발자 가이드, InvocableMethod 애노테이션)라고 설명합니다. NBA에서 Enhance Element는 일반적으로
<code>List<Recommendation></code>은 중첩된 목록이 아닌 추천에 직접 매핑됩니다. 중첩된 목록(<code>List<List<Recommendation>></code>)은 여러 입력에 대한 여러 출력을 처리할 때 Flows에서 더 일반적이지만, NBA에서는 Enhance Element의 표준 패턴이 아닙니다.</t>
* 결론: NBA의 Enhance Element에서 일반적으로 기대하는 List<Recommendation>을 기대하는 중첩된 List<List<Recommendation>> 반환 유형과 일치하지 않으므로 잘못된 설명입니다.
* 나.
꼭대기
복사
@InvocableMethod
전역 추천 getLevel(ContactWrapper 입력)
{ /*구현*/ }
* 접근성: @InvocableMethod와 전역 메서드를 사용하지만, 메서드가 정적이 아닙니다. Apex 개발자 가이드에 따르면 "Flow 또는 Next Best Action에서 호출하려면 @InvocableMethod가 정적이어야 합니다"(Salesforce Apex 개발자 가이드, InvocableMethod 주석). 이로 인해 컴파일 오류가 발생합니다.
* 입력: List<ContactWrapper>가 아닌 단일 ContactWrapper를 사용합니다. 호출 가능한 메서드는 레코드가 하나만 전달되더라도 List를 입력으로 사용하여 대량 처리를 지원해야 합니다. Apex 개발자 가이드에는 "호출 가능한 메서드는 대량 처리를 지원하려면 List를 입력으로 사용해야 합니다"(Salesforce Apex 개발자 가이드, InvocableMethod 주석)라고 명시되어 있습니다.
* 출력: List<Recommendation>이 아닌 단일 Recommendation을 반환합니다. 마찬가지로, 대량 처리를 지원하려면 출력도 List여야 합니다.
* 결론: 정적 키워드가 누락되어 잘못된 설명이며, 입력과 출력 모두 대량화 요구 사항(목록을 사용해야 함)을 위반합니다.
* 씨.
꼭대기
복사
@InvocableMethod
전역 List<List<Recommendation>> getLevel(List<ContactWrapper> 입력)
{ /*구현*/ }
* 접근성: @InvocableMethod와 global을 사용하지만 메서드가 정적이 아니므로 컴파일 오류가 발생합니다(옵션 B와 동일한 문제).
* 입력: List<ContactWrapper>는 대량화에 적합합니다.
* 출력: List<List<Recommendation>>을 반환합니다. 이는 옵션 A에서 언급했듯이 NBA Enhance Element의 일반적인 반환 유형이 아닙니다. List<Recommendation>은 권장 사항에 직접 매핑될 것으로 예상합니다.
* 결론: 정적 키워드 누락 및 중첩으로 인해 잘못된 내용입니다.
List<List<Recommendation>> 반환 유형은 NBA Enhance Elements에 적합하지 않습니다.
* 디.
꼭대기
복사
@InvocableMethod
글로벌 정적 List<Recommendation> getLevel(List<ContactWrapper> 입력)
{ /*구현*/ }
* 접근성: global static과 @InvocableMethod가 올바르므로 NBA에서 해당 메서드에 접근할 수 있습니다.
* 입력: List<ContactWrapper>는 대량화를 지원하며 연락처 데이터와 요소를 전달하는 데 적합합니다.
* 출력: NBA Enhance Element의 기대치에 부합하는 List<Recommendation>을 반환합니다. Enhance Element는 반환된 추천(예: 할인 혜택)을 NBA 전략에 직접 사용할 수 있습니다. Next Best Action에 대한 Salesforce 도움말 문서에서 다음 내용을 확인할 수 있습니다.
"Enhance Element에서 호출된 Apex 메서드는 일반적으로 권장 사항을 제공하거나 수정하기 위해 List<recommendation>을 반환합니다."(Salesforce 도움말, Next Best Action Enhance Element)
/추천>
* 결론: 모든 요구 사항(적절한 접근성, 대량의 입력/출력, NBA에 대한 예상 반환 유형)을 충족하므로 정답입니다.
옵션 D가 올바른 이유:
옵션 D가 올바른 이유는 다음과 같습니다.
* @InvocableMethod를 전역적이고 정적으로 사용하여 메서드를 Next Best Action Enhance Element에서 호출할 수 있게 합니다.
* 입력 List<ContactWrapper>는 대량화를 지원하고 연락처 데이터 및 기타 요소를 전달할 수 있습니다.
* 출력 List<Recommendation>은 NBA Enhance Element에 대한 예상 반환 유형과 일치하므로 전략에서 반환된 권장 사항(예: 할인 혜택)을 직접 사용할 수 있습니다.
* 이는 Apex 개발자 가이드와 Next Best Action 문서에 설명된 대로 프로세스 자동화에서 호출 가능한 방법에 대한 Salesforce 모범 사례와 일치합니다.
명확성에 대한 예:
옵션 D를 구현하는 방법은 다음과 같습니다.
꼭대기
복사
글로벌 클래스 DiscountCalculator {
@InvocableMethod(label='할인 수준 가져오기' description='연락처에 대한 할인 수준을 결정합니다') global static List<Recommendation> getLevel(List<ContactWrapper> input) { List<Recommendation> recommendations = new List<Recommendation>(); for (ContactWrapper wrapper : input) {
// 할인 수준을 결정하는 예제 논리
10진수 discountLevel = 0.1; // 요인에 따라 10% 할인
추천 rec = new Recommendation();
rec.Name = '할인 혜택';
rec.Description = '제공 ' + (discountLevel * 100) + '% 할인 ' + wrapper.contactName; rec.ActionReference = 'ApplyDiscount'; // 흐름 또는 작업에 대한 참조 recommendations.add(rec);
}
반품 권장 사항;
}
}
글로벌 클래스 ContactWrapper {
@InvocableVariable
글로벌 문자열 contactName;
@InvocableVariable
글로벌 ID contactId;
// 다른 요소를 InvocableVariables로 추가합니다.
}
* NBA에서의 사용: Next Best Action 전략의 Enhance 요소는 getLevel을 호출하여 연락처 데이터가 담긴 List<ContactWrapper>를 전달합니다. 이 메서드는 각각 할인 혜택을 나타내는 List<Recommendation>을 반환하며, NBA는 이를 사용자에게 제시할 수 있습니다.
오타 처리:
* 제공된 이미지의 옵션은 구문적으로 올바르며, 수정할 오타는 없습니다.
* 이 질문은 ContactWrapper가 @InvocableVariable 속성을 가진 적절하게 정의된 클래스라고 가정하는데, 이는 맥락에 대한 합리적인 가정입니다.
* 원래 질문의 D 옵션 ListRecommendation에 오타(<와 > 누락)가 있는 것으로 보입니다. 분석 과정에서 가정하고 서식이 적용된 옵션에서 수정한 대로 올바른 구문은 List<Recommendation>입니다.
참고문헌:
Salesforce Apex 개발자 가이드:
"InvocableMethod 주석" 섹션: 글로벌, 정적 및 대량 입력/출력을 포함하여 @InvocableMethod에 대한 세부 요구 사항을 설명합니다. (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta에서 사용 가능)
/에이펙스코드/)
Salesforce 도움말:
"다음 최선의 조치" 섹션: Enhance Elements와 Apex 메서드를 사용하여 권장 사항을 생성하는 방법을 설명합니다.(https://help.salesforce.com/에서 제공) Salesforce 객체 참조 가이드:
"추천 객체": NBA에서 제안된 작업에 사용되는 추천 객체를 설명합니다.
(https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/에서 제공) 플랫폼 개발자 I 학습 가이드:
"프로세스 자동화 및 로직" 섹션: Next Best Action 및 Flow와 같은 프로세스 자동화 도구에서 Apex를 사용하는 방법을 다룹니다. (https://trailhead.salesforce.com/en/content/learn/modules/platform-developer- i-certification-study-guide에서 확인 가능)
PDI 문제 99
PDI 문제 100
Trigger.oldcontext 변수에는 트리거에서 처리 중인 레코드의 이전 버전이 포함되어 있습니다.
inserttrigger 이전에는 처리되는 레코드가 새롭고 데이터베이스에 이전 상태가 없으므로 Trigger가 실행되지 않습니다.
올디스널.
이 동작은 레코드가 생성되기 전에 참조할 "이전" 레코드가 없기 때문에 삽입 트리거에만 해당됩니다.
왜 null인가요?
Trigger.old 변수는 업데이트 또는 삭제를 처리하는 트리거(예: 업데이트 전, 업데이트 후, 삭제 전, 삭제 후)에 대해서만 채워집니다. 삽입 작업의 경우, 레코드의 이전 상태는 존재하지 않습니다.
다른 옵션은 왜 안 되나요?
A: sObject의 빈 목록:
이는 잘못된 설명입니다. Trigger.old는 삽입 트리거에 대한 빈 목록으로 초기화되지 않았습니다. 단순히 null입니다.
B: 정의되지 않음:
Trigger.old는 트리거 컨텍스트에 정의되어 있지만 삽입 작업에서는 null입니다. Undefined는 유효한 Apex 상태가 아닙니다.
D: ID가 없는 새로 생성된 sObject 목록:
이는 Trigger.old가 아닌 inserttrigger 이전의 Trigger.new를 설명합니다. Trigger.new에는 삽입되는 새 레코드가 포함됩니다.
참고문헌:
Apex 트리거 문서
트리거 컨텍스트 변수
- 다른 버전
- 1026Salesforce.PDI.v2024-12-17.q123
- 1496Salesforce.PDI.v2024-09-07.q207
- 1228Salesforce.PDI.v2024-06-04.q143
- 1709Salesforce.PDI.v2023-05-22.q141
- 1355Salesforce.PDI.v2023-05-01.q107
- 1909Salesforce.PDI.v2022-09-19.q122
- 2677Salesforce.PDI.v2022-05-04.q138
- 최근 업로드
- 134Salesforce.PDI.v2026-01-02.q196
- 115Microsoft.AI-900-KR.v2026-01-01.q158
- 197Scrum.SAFe-Practitioner.v2026-01-01.q163
- 122Adobe.AD0-E409.v2026-01-01.q45
- 152ServiceNow.CIS-ITSM.v2026-01-01.q104
- 206Microsoft.MS-102-KR.v2025-12-31.q236
- 155SAP.C-ABAPD-2507.v2025-12-31.q79
- 254Microsoft.AZ-400-KR.v2025-12-29.q241
- 197PaloAltoNetworks.NetSec-Analyst.v2025-12-29.q90
- 153Fortinet.NSE8_812.v2025-12-27.q101
PDF 파일 다운로드
메일 주소를 입력하시고 다운로드 하세요. Salesforce.PDI.v2026-01-02.q196 모의시험 시험자료를 다운 받으세요.
