CSV/JSON을 사용하여 Salesforce 사용자 정의 메타데이터 레코드를 가져오는 방법
7421 단어 salesforcejsonapexmetadata
이 테마에 대해 Google에서 빠른 검색을 수행하면 특정 검색 지점에서 사용자 정의 메타데이터 로더 로더를 사용하도록 안내하는 가이드를 보게 될 것입니다. 이 도구는 가져올 레코드가 거의 없고 레코드에 특수 문자가 없는 경우에 유용할 수 있습니다. 그렇지 않으면 많은 버그와 오류가 발생한 후 확실히 실패할 것입니다.
해당 요구 사항을 달성하기 위한 가이드라인으로 공식 Salesforce 문서를 사용하여 클래스를 개발했으며 아래 단계에 따라 Salesforce 사용자 정의 메타데이터 레코드를 가져올 수 있도록 도와드리겠습니다.
1: 데이터 준비
csv를 json으로 변환하는 모든 온라인 서비스를 사용할 수 있습니다. 아래 서비스를 추천합니다.
https://csvjson.com/csv2json
업로드할 레코드가 포함된 CSV 파일을 업로드하고 변환을 클릭한 다음 생성된 JSON을 복사하기만 하면 됩니다.
1.1: JSON을 인라인으로 만들기
다음에 해야 할 일은 해당 JSON을 한 줄로 구문 분석하는 것입니다. 다음 링크에 액세스하여 쉽게 수행할 수 있습니다.
https://jsonformatter.curiousconcept.com/
JSON을 붙여넣고 JSON 템플릿 옵션에서 COMPACT를 선택한 다음 PROCESS를 클릭하기만 하면 됩니다. 생성된 소형 JSON을 복사하고 이후 단계를 위해 안전하게 보관하십시오.
2: 아래 코드를 사용하여 mdtImport Apex 클래스를 생성합니다.
//author: Roger Rosset
//description: Upload custom metadata records using CSV/JSON
public class mdtImport {
public static void insertMetadata(String metaDataTypeName, String jsonString){
try{
Integer count = 1;
Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
JSONCsvTemplate csv = (JSONCsvTemplate)JSON.deserialize(jsonStringMdt(jsonString), JSONCsvTemplate.class);
for(JSONCsvTemplate.mdtRecords item : csv.data.mdtRecordsList){
//Sets the custom metadata type you'll insert your records on
//If you're using namespaces on your org set it here
String nameSpacePrefix ='';
Metadata.CustomMetadata rec = new Metadata.CustomMetadata();
String label = 'Record '+count;
rec.fullName = nameSpacePrefix+metaDataTypeName+'.'+label;
rec.label = label;
//Sets the custom metadata custom fields to be inserted
/*
* Use the template below to setup any fields you want to:
*
Metadata.CustomMetadataValue fieldX = new Metadata.CustomMetadataValue(); //New instance
fieldX.field = 'Custom_Field_Name__c'; //Custom Metadata Field you want to fill
field1.value = item.JSON_Matching_Key_Value; //The matching key value on the wrapper
rec.values.add(fieldX); //adds the value and the matching field
*
*/
Metadata.CustomMetadataValue field1 = new Metadata.CustomMetadataValue();
field1.field = 'SubGroup__c';
field1.value = item.SubGroup;
rec.values.add(field1);
Metadata.CustomMetadataValue field2 = new Metadata.CustomMetadataValue();
field2.field = 'Description__c';
field2.value = item.Description;
rec.values.add(field2);
Metadata.CustomMetadataValue field3 = new Metadata.CustomMetadataValue();
field3.field = 'keyId__c';
field3.value = item.keyId;
rec.values.add(field3);
mdContainer.addMetadata(rec);
count++;
}
Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, null);
system.debug('Container>>'+mdContainer);
system.debug('Id>>'+jobId);
return;
}
catch(Exception ex){
system.debug('Error on insert');
system.debug('Error:'+ex.getMessage());
}
}
private static String jsonStringMdt(String jsonString){
String resultJson = '{"data":{"mdtRecordsList":'+jsonString+'}}';
return resultJson;
}
private class JSONCsvTemplate{
private class Data{
private List<mdtRecords> mdtRecordsList;
}
private class mdtRecords{
private String keyId;
private String SubGroup;
private String Description;
}
private Data data;
}
}
보시다시피 metaDataTypeName 및 jsonString을 속성으로 전달하는 insertMetaData 메서드를 실행할 수 있습니다. 여기서 metaDataTypeName은 사용자 정의 메타데이터 유형(__mdt로 끝남)의 API 이름이고 jsonString은 1.1단계에서 복사한 인라인 JSON입니다. 그러나 먼저 csv 데이터베이스에 맞게 JSONCsvTemplate>mdtRecords의 속성을 조정해야 합니다.
3: 래퍼 클래스를 요구 사항에 맞게 조정
private class JSONCsvTemplate{
private class Data{
private List<mdtRecords> mdtRecordsList;
}
private class mdtRecords{
private String keyId;
private String SubGroup;
private String Description;
}
private Data data;
}
}
위에서 볼 수 있듯이 3개의 열이 있는 레코드를 업로드하고 있습니다.
-keyId
-하급 집단
-설명
이 값은 내 csv 데이터베이스 헤더와 정확히 일치하며 기준에 맞게 템플릿을 추가, 삭제 또는 수정할 수 있습니다. csv 데이터베이스는 필드 이름뿐만 아니라 기본 데이터 유형(정수, 문자열 등)에 대해서도 래퍼 클래스에 맞아야 합니다.
사용된 csv 데이터베이스:
4: 메서드 실행
이전 단계를 모두 수행하고 Salesforce 조직에 클래스를 만들고 저장했는지 확인한 후 다음에 해야 할 일은 insertMetadata를 실행하는 것입니다.
사용자 정의 메타데이터 유형 API 이름(__mdt로 끝남)과 1.1단계에서 생성된 JSON 문자열을 가져오고 개발자 콘솔 내부의 Apex 익명 창에서 메서드를 실행합니다(CTRL+E).
JSON 문자열이 실제로 클 수 있으며 문제를 방지하려면 아래와 같이 메서드 실행 내부의 매개 변수에 "슈퍼 문자열"을 붙여넣기 전에 메서드 템플릿과 따옴표를 배치하는 것이 좋습니다.
메서드를 준비한 후 큰 JSON 문자열을 따옴표 안에 붙여넣고 실행을 클릭합니다.
로그 열기 옵션을 선택한 경우 이 실행 로그로 이동해야 합니다. 여기에서 대기열에 포함된 배포의 ID를 찾고 Salesforce의 배포 상태에서 상태를 확인할 수 있습니다.
설정 > 배포 > 배포 상태
주목
저는 이미 실행당 600개의 레코드 배포를 테스트했습니다. 오류를 피하기 위해 해당 제한을 준수하려고 합니다.
가능하면 크레딧을 유지하면서 필요에 따라 코드를 자유롭게 수정하십시오.
유용하길 바랍니다.
문안 인사,
로저 로셋
기반 문서:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_class_Metadata_Operations.htm
Reference
이 문제에 관하여(CSV/JSON을 사용하여 Salesforce 사용자 정의 메타데이터 레코드를 가져오는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rrosset91/how-to-import-salesforce-custom-metadata-records-using-csv-json-1jic텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)