복수 레코드 생성
Json 오브젝트 형식을 사용하여 복수의 레코드를 생성할 수 있습니다. 최대 200개까지 동시에 생성이 가능하며, 모든 레코드에 오류가 없을 경우에만 생성하도록 하거나 일부 오류가 있더라도 나머지 레코드를 생성할 수 있습니다.
-
Database 클래스에 아래의 메소드를 추가합니다
HttpPost(Insert) 메소드 또는 HttpPatch(Upsert)를 사용합니다. 또한, 복수의 레코드 작업은 JsonObject가 아닌 JsonArray 형식의 결과를 반환합니다.
public static JsonArray createRecords(ConnectionInfo connInfo, String jsonString) { JsonArray jsonArray = null; try { String url = connInfo.getInstanceUrl() + "/services/data/v58.0/composite/sobjects"; HttpPost req = new HttpPost(url); req.setHeader("Content-type", "application/json"); req.setHeader("Authorization", "Bearer " + connInfo.getAccessToken()); req.setEntity(new StringEntity(jsonString, ContentType.APPLICATION_JSON)); String result = call(req); try { JsonElement jl = JsonParser.parseString(result); jsonArray = jl.getAsJsonArray(); } catch (JsonParseException jsonException) { jsonException.printStackTrace(); } req.releaseConnection(); } catch (Exception e) { System.out.println(e); } return jsonArray; } -
App 클래스에 아래의 메소드를 추가합니다.
public static void createRecords(ConnectionInfo connectionInfo){ try { JsonObject objectType = new JsonObject(); objectType.addProperty("type", "Account"); JsonArray records = new JsonArray(); JsonObject rec1 = new JsonObject(); rec1.add("attributes", objectType); rec1.addProperty("Name", "Test Company 1"); records.add(rec1); JsonObject rec2 = new JsonObject(); rec2.add("attributes", objectType); rec2.addProperty("Name", "Test Company 2"); records.add(rec2); JsonObject collection = new JsonObject(); collection.addProperty("allOrNone", false); collection.add("records", records); JsonArray result = Database.createRecords(connectionInfo, collection.toString()); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(result); System.out.println(json); } catch (Exception e) { System.out.println(e); } }allOrNone값은true이면 모든 레코드 셋에 오류가 없어야만 정상적으로 레코드들이 생성됩니다.false이면 오류가 섞여 있어도 오류가 없는 레코드들만 생성을 합니다.NoteJsonObject로 레코드셋을 만들지 않고 다음과 같이 String 으로 만들어서
collection.toString()대신 파라메터로 사용할 수 있습니다.String jsonString = "{" + " \"allOrNone\" : false," + " \"records\" : [{" + " \"attributes\" : {\"type\" : \"Account\"}," + " \"Name\" : \"example.com\"," + " \"BillingCity\" : \"San Francisco\"" + " }, {" + " \"attributes\" : {\"type\" : \"Contact\"}," + " \"LastName\" : \"Johnson\"," + " \"FirstName\" : \"Erica\"" + " }]" + "}";위의 예처럼 서로 다른 SObject의 레코드를 혼합하여 생성할 수도 있습니다.
-
App 클래스의
main메소드를 아래와 같이 수정을 합니다.// Data function block begin //querySample(connectionInfo); //batchSample(connectionInfo); //querySingle(connectionInfo); //createRecord(connectionInfo); //updateRecord(connectionInfo); //deleteRecord(connectionInfo); createRecords(connectionInfo); // Data function block end -
main메소드 위의Run을 클릭하여 프로그램을 실행해 봅니다.Json 배열로 결과값을 반환합니다. 이렇게 생성된 레코드들로
update,delete를 진행하도록 합니다.[ { "id": "001***************", "success": true, "errors": [] }, { "id": "001***************", "success": true, "errors": [] } ]