public async Task <CrmRequestMessageHandleResult> ExecuteRequest(CrmRequestMessage request) { if (!(request is CrmUnBoundActionRequestMessage)) { var fragment = new TextFragment() { Code = TextCodes.CrmRequestMessageTypeNotMatch, DefaultFormatting = "消息请求类型不匹配,期待的类型为{0},实际类型为{1},位置为{2}", ReplaceParameters = new List <object>() { typeof(CrmUnBoundActionRequestMessage).FullName, request.GetType().FullName, $"{ this.GetType().FullName }.ExecuteRequest" } }; throw new UtilityException((int)Errors.CrmRequestMessageTypeNotMatch, fragment); } var realRequest = request as CrmUnBoundActionRequestMessage; var url = $"{realRequest.OrganizationURI}/api/data/v{realRequest.ApiVersion}/{realRequest.ActionName}"; JObject parameterJObject = new JObject(); foreach (var parameterItem in realRequest.Parameters) { var itemResult = await _crmActionParameterConvertService.Convert(parameterItem); parameterJObject[parameterItem.Name] = itemResult; } var headers = new Dictionary <string, IEnumerable <string> >(); headers["OData-MaxVersion"] = new List <string> { "4.0" }; headers["OData-Version"] = new List <string> { "4.0" }; headers["Content-Type"] = new List <string> { "application/json" }; headers["Content-Type-ChartSet"] = new List <string> { "utf-8" }; headers["Accept"] = new List <string> { "application/json" }; foreach (var itemHeader in realRequest.Headers) { headers[itemHeader.Key] = itemHeader.Value; } CrmRequestMessageHandleResult result = new CrmRequestMessageHandleResult(); result.Url = url; result.Method = HttpMethod.Post; result.Headers = headers; result.Body = JsonSerializerHelper.Serializer(parameterJObject); return(result); }
public async Task <CrmRequestMessageHandleResult> ExecuteRequest(CrmRequestMessage request) { if (!(request is CrmBoundActionRequestMessage)) { var fragment = new TextFragment() { Code = TextCodes.CrmRequestMessageTypeNotMatch, DefaultFormatting = "消息请求类型不匹配,期待的类型为{0},实际类型为{1},位置为{2}", ReplaceParameters = new List <object>() { typeof(CrmBoundActionRequestMessage).FullName, request.GetType().FullName, $"{ this.GetType().FullName }.ExecuteRequest" } }; throw new UtilityException((int)Errors.CrmRequestMessageTypeNotMatch, fragment); } var realRequest = request as CrmBoundActionRequestMessage; //如果唯一键集合不为空,则使用唯一键作为主键,否则,使用Entity的Id作为主键 var url = $"{realRequest.OrganizationURI}/api/data/v{realRequest.ApiVersion}/{realRequest.EntityName.ToPlural()}"; if (realRequest.AlternateKeys != null && realRequest.AlternateKeys.Count > 0) { StringBuilder strAlternateKey = new StringBuilder(); foreach (var keyItem in realRequest.AlternateKeys) { strAlternateKey.Append(keyItem.Key); strAlternateKey.Append("="); strAlternateKey.Append(await _crmAlternateKeyTypeHandle.Convert(keyItem.Value)); strAlternateKey.Append(","); } if (strAlternateKey.Length > 0) { strAlternateKey.Remove(strAlternateKey.Length - 1, 1); } url = $"{url}({strAlternateKey.ToString()})"; } else { url = $"{url}({realRequest.EntityId.ToString()})"; } url = $"{url}/Microsoft.Dynamics.CRM.{ realRequest.ActionName}"; JObject parameterJObject = new JObject(); foreach (var parameterItem in realRequest.Parameters) { var itemResult = await _crmActionParameterConvertService.Convert(parameterItem); parameterJObject[parameterItem.Name] = itemResult; } var headers = new Dictionary <string, IEnumerable <string> >(); headers["OData-MaxVersion"] = new List <string> { "4.0" }; headers["OData-Version"] = new List <string> { "4.0" }; headers["Content-Type"] = new List <string> { "application/json" }; headers["Content-Type-ChartSet"] = new List <string> { "utf-8" }; headers["Accept"] = new List <string> { "application/json" }; foreach (var itemHeader in realRequest.Headers) { headers[itemHeader.Key] = itemHeader.Value; } CrmRequestMessageHandleResult result = new CrmRequestMessageHandleResult(); result.Url = url; result.Method = HttpMethod.Post; result.Headers = headers; result.Body = JsonSerializerHelper.Serializer(parameterJObject); return(result); }