1
https://example.com/crm/api/data/v8.2/accounts?$select=custom_optionset 

위 쿼리는 CRM의 옵션 집합 필드에서 모든 값을 선택합니다. 반환 데이터는 다음과 같습니다.CRM 웹 API의 OData 쿼리에서 옵션 집합 텍스트 가져 오기

{ 
    { 
     "@odata.etag":"W/\"112607639\"","custom_optionset":285960000,"accountid":"a08f0bd1-e2c4-e111-8c9a-00155d0aa573" 
    }, 
    { 
     "@odata.etag":"W/\"112615384\"","custom_optionset":285960010,"accountid":"a18f0bd1-e2c4-e111-8c9a-00155d0aa573" 
    } 
} 

나는이 옵션 세트의 값을 원하지 않습니다. 나는 관련 텍스트 레이블을 원한다. 어떻게받을 수 있습니까?

답변

2

webapi를 사용하여 옵션 세트 텍스트를 가져 오려면 요청 헤더에 아래 스 니펫을 사용하십시오.

req.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue"); 

이렇게하면 조회 FormattedValue와 비슷한 선택 목록 텍스트가 반환됩니다.

enter image description here

전체 코드 예제 :

function retrieveEntity(entityName, Id, columnSet) { 
    var serverURL = Xrm.Page.context.getClientUrl(); 
    var Query = entityName + "(" + Id + ")" + columnSet; 
    var req = new XMLHttpRequest(); 
    req.open("GET", serverURL + "/api/data/v8.2/" + Query, true); 
    req.setRequestHeader("Accept", "application/json"); 
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
    req.setRequestHeader("OData-MaxVersion", "4.0"); 
    req.setRequestHeader("OData-Version", "4.0"); 
    req.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue"); 
    req.onreadystatechange = function() { 
     if (this.readyState == 4 /* complete */) { 
      req.onreadystatechange = null; 
      if (this.status == 200) { 
       var data = JSON.parse(this.response); 
       if (data != null { 
         alert(data["[email protected]e"]); //for lookup text 
         alert(data["[email protected]"]); //for optionset text 
        } 
       } else { 
        var error = JSON.parse(this.response).error; 
        alert(error.message); 
       } 
      } 
     }; 
     req.send(); 
    } 

Reference. 당신이 제이슨 Lattimer의 CRM RESTBuilder 솔루션을 사용하는 경우

2

, 그것은 헤더 req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); 포함이 같은 쿼리 작성 :

var req = new XMLHttpRequest(); 
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/accounts(674D7FDC-47AE-E711-8108-5065F38A3BA1)?$select=accountid,industrycode", true); 
req.setRequestHeader("OData-MaxVersion", "4.0"); 
req.setRequestHeader("OData-Version", "4.0"); 
req.setRequestHeader("Accept", "application/json"); 
req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); 
req.onreadystatechange = function() { 
    if (this.readyState === 4) { 
     req.onreadystatechange = null; 
     if (this.status === 200) { 
      var result = JSON.parse(this.response); 
      var accountid = result["accountid"]; 
      var industrycode = result["industrycode"]; 
      var industrycode_formatted = result["[email protected]"]; 
     } else { 
      Xrm.Utility.alertDialog(this.statusText); 
     } 
    } 
}; 
req.send(); 

을 그리고 결과는 옵션 세트 라벨이 포함

{ 
@odata.context:"https://myorg.crm.dynamics.com/api/data/v8.2/$metadata#accounts(accountid,industrycode)/$entity", 
@odata.etag:"W/"1959756"", 
accountid:"674d7fdc-47ae-e711-8108-5065f38a3ba1", 
[email protected]:"Accounting", 
industrycode:1 
} 
+0

크로스 크로스 롤 .. :) –

+0

위대한 마음은 똑같이 생각합니다. :) – Aron

2

I을 CRM에서 웹 API를 호출하기 위해 XrmQuery을 사용하는 것이 가장 쉬운 방법입니다 (전체 공개 : 저는 이것을 개발 한 회사에서 일하고 있습니다). 헤더 및 XMLHttpRequests에 대한 수동 조작은 필요하지 않으며 사용자 자신의 CRM에있는 엔티티 및 필드에 대한 강력한 형식화 된 지원을받을 수 있습니다.

XrmQuery.retrieve(a => a.accounts, "5B86C6EB-DE6D-E611-80DF-C4346BADF080") 
     .select(a => [a.industrycode]) 
     .includeFormattedValues() 
     .execute(a => { 
      console.log("Industry is: " + a.industrycode_formatted); 
     }); 

.includeFormattedValues()를 추가하면 자동으로 단순히 industrycode_formatted라는 필드에 액세스 할 수 있습니다 다음과 같이 예를 들어

, 특정 계정을 검색하고 industrycode 필드를 선택 보입니다. 이 Industry in CRM

위의 코드는 반환합니다 :

산업은 다음 optionset 값 계정에 대한

방송 인쇄 및 출판