Salesforce/Error 4

[Error]You have uncommitted work pending. Please commit or rollback before calling out

"You have uncommitted work pending. Please commit or rollback before calling out" 에러는 Salesforce에서 HTTP 요청(Callout)을 수행하기 전에 트랜잭션에서 아직 커밋되지 않은 작업이 있을 때 발생한다.즉 이 에러는 트랜잭션에서 DML 작업(insert, update, delete)을 수행한 후에 HTTP 요청을 시도하면 발생이유는 Salesforce는 트랜잭션이 완료되기 전에 외부 시스템과의 통신을 허용하지 않기 때문!해결 방법DML 작업과 HTTP 요청(Callout)을 분리하여 수행하면 됨DML 작업을 Callout 이후로 이동: HTTP 요청(Callout)을 먼저 수행한 후, DML 작업을 나중에 수행DML 작업을 분..

Salesforce/Error 2024.09.20

EXCEPTION_THROWN [100]|System.DmlException: Insert failed. First exception on row 0; first error: FIELD_INTEGRITY_EXCEPTION, field integrity exception: unknown (scheduling not enabled on product): [unknown]

`제품 일정`을 사용하기 위해서는 Product2의 `CanUseRevenueSchedule` 필드가 true상태여야한다. 기본적으로 제품을 insert하면 `CanUseRevenueSchedule = false`가 디폴트임 setup>제품일정설정>모든 제품에 대해 활성화를 체크 후 저장하면 모든 제품에 대한  CanUseRevenueSchedule = true로 변경됨.만약 제품 추가와 일정 추가가 코드상에서 모두 이루어진다면 코드상에서 OpportunityLineItemSchedule를 insert하기 전에 Product2의 CanUseRevenueSchedule 필드를 true로 변경해주는 작업이 필요하다!

Salesforce/Error 2024.09.20

System.CalloutException: Callout from scheduled Apex not supported.

스케줄된 Apex 코드에서 HTTP 요청(callout)을 직접 수행할 수 없음을 나타냄.기본적으로 Salesforce는 스케줄된 작업에서 직접적인 HTTP 요청을 금지하고 있음. Callout을 허용하려면 스케줄러 메서드에서 직접 HTTP 요청을 수행하는 대신, Callout을 @future(callout=true) 메서드로 분리해야한다. Future 메서드는 비동기 작업으로 실행되기 때문에 스케줄된 작업에서 사용할 수 있다  Scheduled Apex에서 Callout을 수행할 때: @future(callout=true)를 사용Batch Apex에서 Callout을 수행할 때:  `Database.AllowsCallouts` 인터페이스가 필요

Salesforce/Error 2024.09.03