세일즈포스 관련지식

salesforce MetaData update

으농농이 2025. 4. 17. 16:39

Interface 연동시 별도 Custom Object 를 만들지 않고 , metaData에서 Endpoint 등 관리를 하게됐다..

문제는 토큰 발급 호출시에, 토큰을 보관해야하는데 담을곳이 없다는것..

토큰때문에 object 만들기는 애매하고, metaData 에 필드를 추가해서 담아놓고 조회하게끔 구현 

 

메타데이터를 업데이트 하는 방법은 아래와 같다 

200 으로 통신이 성공되고 resp 에서 token 정보를 가져와서 metadata 를 찾아서 담아준다. 

                if(responseCode == 200){
                    String responseBody = response.getBody();
                    ResponseCls res = (ResponseCls) JSON.deserialize(responseBody, ResponseCls.class);
                    System.debug('Access Token ' + res.access_token);
                    DateTime expiresDate = System.now().addSeconds(Integer.valueOf(res.expires_Date));
                    System.debug(' (date/time) 변환 :  ' + res. expires_Date );

                    if(res.access_token != null){

                        Metadata.CustomMetadata cmdt = new Metadata.CustomMetadata();
                 
                        cmdt.fullName = 'API_Test__mdt. API_TOKEN_MASTER '; // MasterLabel정보 
                        cmdt.label  = 'API_TOKEN_MASTER';
                   
   
                        Metadata.CustomMetadataValue tokenField = new Metadata.CustomMetadataValue();
                        tokenField.field = 'Token__c'; // mdt 필드추가 
                        tokenField.value = res.access_token;

                        Metadata.CustomMetadataValue expiresField = new Metadata.CustomMetadataValue();
                        expiresField.field = 'ExpiresTokenAt__c'; // expiredDate/Time 
                        expiresField.value = expiresDate  ;

                        cmdt.values = new List<Metadata.CustomMetadataValue>{ tokenField , expiresField };

                        Metadata.DeployContainer container = new Metadata.DeployContainer();
                        container.addMetadata(cmdt);

                        CMDTDeployCallback callback = new CMDTDeployCallback();

                        Id jobId = Metadata.Operations.enqueueDeployment(container, callback);
                        System.debug('배포 Job ID: ' + jobId);
                    }

                }

 

여기서 해당 내용에 대한 callback 을 받고싶다면 이렇게 하면된다 

public class CMDTDeployCallback implements Metadata.DeployCallback {
    public void handleResult(Metadata.DeployResult result,
                             Metadata.DeployCallbackContext context) {
        if (result.status == Metadata.DeployStatus.Succeeded) {
            System.debug('Deployment succeeded: ');
        } else {
            System.debug('Deployment fail : ');
        }
    }
}