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);
        }
Ejemplo n.º 2
0
        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);
        }