데이터를 수정하는 작업은 Web API의 핵심 부분입니다. 간단한 업데이트 및 삭제 작업 외에도 단일 테이블 열(엔터티 특성)에서 작업을 수행하고 존재 여부에 따라 데이터를 업데이트하거나 삽입하는 upsert 요청을 작성할 수 있습니다.
기본 업데이트
업데이트 작업은 HTTP PATCH 동사를 사용합니다. 레코드를 나타내는 URI로 업데이트하려는 속성이 포함된 JSON 개체를 전달합니다. 업데이트에 성공하면 상태가 204 No Content 있는 응답이 반환됩니다.
헤더 If-Match: *는 실수로 upsert 작업을 수행하여 새 레코드를 만드는 것을 방지합니다. 추가 정보: upsert에서 만들기를 방지합니다.
중요합니다
엔터티를 업데이트할 때는 변경 중인 속성만 요청 본문에 포함합니다. 이전에 검색한 엔터티의 속성을 업데이트하고 요청에 해당 JSON을 포함하면 값이 동일하더라도 각 속성이 업데이트됩니다. 이로 인해 값이 변경될 것으로 예상되는 비즈니스 논리를 트리거할 수 있는 시스템 이벤트가 발생할 수 있습니다. 이로 인해 실제로 변경되지 않은 경우 감사 데이터에서 속성이 업데이트된 것처럼 보일 수 있습니다.
statecode 속성을 업데이트할 때 항상 원하는 statuscode을 설정하는 것이 중요합니다.
statecode와 statuscode는 종속된 값이 있습니다. 지정된 값에 대해 여러 statuscode 유효한 값이 있을 수 있지만 각 statecode 열에는 단일 statecode 값이 구성되어 있습니다.
statecode를 업데이트할 때 statuscode를 지정하지 않으면, 시스템에서 기본 상태 값을 설정합니다. 또한 테이블 및 statuscode 열에서 감사를 사용하도록 설정하면 업데이트 작업에서 지정하지 않는 한 열의 변경된 값 statuscode 이 감사 데이터에 캡처되지 않습니다.
비고
특성에 대한 정의에는 속성이 RequiredLevel 포함됩니다. 이 값을 SystemRequired설정하면 이러한 특성을 null 값으로 설정할 수 없습니다. 추가 정보: 특성 요구 사항 수준
다음은 기존 계정 레코드를 00000000-0000-0000-0000-0000-00000000000001 값으로 accountid 업데이트하는 예제입니다.
요청:
PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-Match: *
{
"name": "Updated Sample Account ",
"creditonhold": true,
"address1_latitude": 47.639583,
"description": "This is the updated description of the sample account",
"revenue": 6000000,
"accountcategorycode": 2
}
응답:
HTTP/1.1 204 No Content
OData-Version: 4.0
비고
업데이트 시 엔터티 연결 및 연결 해제에 대한 자세한 내용은 단일 값 탐색 속성 사용을 참조하세요.
반환된 데이터로 업데이트
업데이트하는 엔터티에서 데이터를 검색하려면 생성된 레코드의 데이터가 200 상태(확인)로 반환되도록 요청을 작성 PATCH 할 수 있습니다. 이 결과를 얻으려면 요청 헤더를 Prefer: return=representation 사용해야 합니다.
반환되는 속성을 제어하려면 엔터티 집합에 $select URL에 쿼리 옵션을 추가합니다.
$expand 쿼리 옵션은 사용되는 경우 무시됩니다.
이 예제에서는 계정 엔터티를 업데이트하고 응답에서 요청된 데이터를 반환합니다.
요청:
PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json; charset=utf-8
Prefer: return=representation
If-Match: *
{"name":"Updated Sample Account"}
응답:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: return=representation
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
"@odata.etag": "W/\"536537\"",
"accountid": "00000000-0000-0000-0000-000000000001",
"accountcategorycode": 1,
"description": "This is the description of the sample account",
"address1_latitude": 47.63958,
"creditonhold": false,
"name": "Updated Sample Account",
"createdon": "2016-09-28T23:14:00Z",
"revenue": 5000000.0000,
"_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"
}
단일 요청으로 여러 레코드 업데이트
단일 요청에서 동일한 형식의 여러 레코드를 업데이트하는 가장 빠른 방법은 UpdateMultiple 작업을 사용하는 것입니다. 이 글을 작성하는 시점에서 UpdateMultiple 작업입니다. 모든 표준 테이블이 이 작업을 지원하는 것은 아니지만 모든 탄력적 테이블은 지원합니다.
추가 정보:
단일 속성 값 업데이트
단일 속성 값만 업데이트하려면 엔터티의 URI에 속성 이름이 추가된 요청을 사용합니다 PUT .
다음 예제에서는 기존 name 행의 account 속성을 00000000-0000-0000-0000-000000000001 값으로 accountid 업데이트합니다.
요청:
PUT [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/name HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
{"value": "Updated Sample Account Name"}
응답:
HTTP/1.1 204 No Content
OData-Version: 4.0
단일 속성 값 삭제
단일 속성의 값을 삭제하려면 엔터티의 URI에 속성 이름이 추가된 요청을 사용합니다 DELETE .
다음 예제에서는 계정 엔터티의 description 속성 값을 00000000-0000-0000-0000-000000000001의 accountid 값으로 삭제합니다.
요청:
DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/description HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
응답:
HTTP/1.1 204 No Content
OData-Version: 4.0
비고
단일 값 탐색 속성과 함께 두 엔터티를 분리하는 데 사용할 수 없습니다. 다른 방법은 단일 값 탐색 속성과 연결 해제를 참조하세요 .
테이블 행 upsert
upsert 작업은 업데이트와 유사합니다. 요청을 사용하고 PATCH URI를 사용하여 특정 레코드를 참조합니다. 차이점은 레코드가 없으면 레코드가 생성된다는 것입니다. 이미 있는 경우 업데이트됩니다.
Upsert는 외부 시스템 간에 데이터를 동기화할 때 유용합니다. 외부 시스템은 Dataverse 테이블의 기본 키에 대한 참조를 포함하지 않을 수 있으므로 두 시스템의 레코드를 고유하게 식별하는 외부 시스템의 값을 사용하여 Dataverse 테이블에 대한 대체 키를 구성할 수 있습니다. 추가 정보: 행을 참조하는 대체 키 정의
$metadata 서비스 문서의 엔터티 형식에 대한 주석에서 테이블에 대해 정의된 대체 키를 볼 수 있습니다. 추가 정보: 대체 키.
다음 예제에서는 sample_thing이라는 이름의 테이블이 있습니다. 이 테이블에는 두 개의 열, 즉 sample_key1 및 sample_key2을 참조하는 대체 키가 있으며, 이들 열은 모두 정수 값을 저장하도록 정의되어 있습니다.
요청:
PATCH [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1) HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Content-Type: application/json
{
"sample_name": "1:1"
}
만들기 또는 업데이트 작업 모두에 대해 동일한 응답을 받습니다. 응답 헤더가 레코드의 OData-EntityId GUID 기본 키 식별자가 아닌 키 값을 사용하는 방법을 확인합니다.
응답:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1)
응답이 동일하기 때문에 Create 작업인지 Update 작업인지 알 수 없습니다.
알아야 할 경우 요청 헤더를 Prefer: return=representation 사용할 수 있습니다. 이 헤더를 사용하면 레코드를 201 Created 만들 때 응답이 표시되고 레코드가 200 OK 업데이트되면 응답이 표시됩니다. 이 옵션은 성능에 Retrieve 영향을 주는 작업을 추가합니다. 요청 헤더 Prefer: return=representation를 사용하는 경우, $select에 최소한의 데이터로 기본 키 열만 포함되도록 해야 합니다. 추가 정보: 반환된 데이터로 업데이트 하고 반환된 데이터를 사용하여 만듭니다.
대체 키를 사용하는 경우 요청 본문에 대체 키 값을 포함하면 안 됩니다.
- upsert가 해당
Update값을 나타내는 경우 이러한 대체 키 값은 무시됩니다. 대체 키 값을 사용하여 레코드를 식별하는 동안에는 업데이트할 수 없습니다. - upsert가
Create을 나타내는 경우, 본문에 없는 경우 URL의 키 값이 해당 레코드에 대해 설정됩니다. 따라서 요청 본문에 포함할 필요가 없습니다.
추가 정보: Upsert를 사용하여 레코드 만들기 또는 업데이트
비고
일반적으로 새 레코드를 만들 때 시스템에서 기본 키에 대한 GUID 값을 할당할 수 있습니다. 시스템이 인덱스에 최적화된 키를 생성하고 성능이 향상되기 때문에 이는 모범 사례입니다. 그러나 키 GUID 값이 외부 시스템에 upsert 의해 생성되는 경우와 같이 특정 기본 키 값으로 레코드를 만들어야 하는 경우 이 작업을 수행하는 방법을 제공합니다.
upsert를 사용하여 만들기 또는 업데이트 방지
경우에 따라 수행 upsert하려는 상황이 있지만 잠재적인 작업 중 하나(만들기 또는 업데이트)를 방지하려는 경우가 있습니다.
If-Match 헤더 또는 If-None-Match 헤더를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 upsert 작업 제한을 참조하세요.
기본 삭제
삭제 작업은 간단합니다. 삭제하려는 엔터티의 URI와 함께 DELETE 동사를 사용합니다. 이 예제 메시지는 기본 키 accountid 값이 000000000-0000-0000-0000-0000000000000001인 계정 엔터티를 삭제합니다.
요청:
DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
응답:
엔터티가 있는 경우 삭제가 성공했음을 나타내기 위해 상태 204와 함께 일반적인 응답을 받습니다. 엔터티를 찾을 수 없는 경우 상태 404로 응답을 받습니다.
HTTP/1.1 204 No Content
OData-Version: 4.0
중복 레코드 확인
업데이트 작업 중에 중복 레코드를 확인하는 방법에 대한 자세한 내용은 Web API를 사용하여 업데이트 작업 중 중복 검색을 참조하세요.
단일 요청에서 여러 레코드 삭제
단일 요청에서 동일한 형식의 여러 레코드를 삭제하는 가장 빠른 방법은 작업을 사용하는 DeleteMultiple 것입니다. 현재 작성 시점에 DeleteMultiple 기능은 미리 보기 기능입니다. 표준 테이블은 이 작업을 지원하지 않지만 모든 탄력적 테이블은 지원합니다.
비고
표준 테이블의 경우 쿼리와 일치하는 레코드를 비동기 삭제할 수 있는 BulkDelete 작업을 사용하는 것이 좋습니다. 추가 정보: 대량으로 데이터 삭제
추가 정보:
스토리지 파티션에서 문서 업데이트 및 삭제
파티션에 저장된 탄력적 테이블 데이터를 업데이트하거나 삭제하는 경우 해당 데이터에 액세스할 때 파티션 키를 지정해야 합니다.
추가 정보: PartitionId 값 선택
참고하십시오
Web API 기본 작업 샘플(C#)
Web API 기본 작업 샘플(클라이언트 쪽 JavaScript)
Web API를 사용하여 작업 수행
Http 요청 작성 및 오류 처리
웹 API를 사용하여 데이터 쿼리
Web API를 사용하여 테이블 행 만들기
Web API를 사용하여 테이블 행 검색
Web API를 사용하여 테이블 행 연결 및 연결 해제
Web API 함수 사용
웹 API 작업 사용
Web API를 사용하여 일괄 처리 작업 실행
Web API를 사용하여 다른 사용자를 가장하기
Web API를 사용하여 조건부 작업 수행