问题描述
您好,我需要将 JS Xrm web api 函数转换为 C#
var opp = Xrm.Page.data.entity.getId();
Xrm.WebApi.retrieveMultipleRecords(
"dei_opportunityline","?$select=_dei_vendor_value,dei_multiplier,dei_iscommission,dei_opportunitylineid&$filter=_dei_opportunity_value eq " +
opp
).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
var newMulti = null;
if (result.entities[i].dei_iscommission) {
if (
result.entities[i]["_dei_vendor_value"] ==
"5fc8d03b-c41c-eb11-a813-000d3a31ed8d"
) {
if (jcimulti != null) newMulti = jcimulti;
} else {
if (commulti != null) newMulti = commulti;
}
对于 .retrieveMultipleRecords、result.entities[i].dei_iscomission 等方法
有没有办法在 C# 插件中编写这个?!
解决方法
您不能在 C# 中使用 Xrm
,这仅在 Dynamics 客户端脚本 (JS) 上下文中有用。即网络表单上下文。
对于服务器端 (C#),您必须使用 HttpClient
。 Sample code
HttpClient httpClient = null;
httpClient = new HttpClient();
//Default Request Headers needed to be added in the HttpClient Object
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion","4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version","4.0");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Set the Authorization header with the Access Token received specifying the Credentials
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",authToken);
httpClient.BaseAddress = new Uri("https://yourorg.api.crmx.dynamics.com/api/data/v9.0/");
var response = httpClient.GetAsync("dei_opportunityline?$select=_dei_vendor_value,dei_multiplier,dei_iscommission,dei_opportunitylineid&$filter=_dei_opportunity_value eq <guid>").Result;
if (response.IsSuccessStatusCode)
{
var records = response.Content.ReadAsStringAsync().Result;
//you can get dei_iscomission from above records
}
这是我们在控制台应用程序中使用的方式,但在插件或工作流代码中 - 您可以使用 Org Service 使用查询表达式或 fetchxml 获取数据。 service.RetrieveMultiple
之类的方法将满足您的需求。 Read more