Ejemplo n.º 1
0
        public async Task <CrmExecuteEntityTypeHandleResult> Convert(string name, object value)
        {
            if (!(value is CrmEntityReferenceNull))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.CrmExecuteEntityTypeHandleTypeNotMatch,
                    DefaultFormatting = "Crm执行实体属性值转换处理类型不匹配,期待的类型为{0},实际类型为{1},位置为{2}",
                    ReplaceParameters = new List <object>()
                    {
                        typeof(CrmEntityReferenceNull).FullName, value.GetType().FullName, $"{ this.GetType().FullName }.Convert"
                    }
                };

                throw new UtilityException((int)Errors.CrmExecuteEntityTypeHandleTypeNotMatch, fragment);
            }

            var realValue = value as CrmEntityReferenceNull;
            CrmExecuteEntityTypeHandleResult result = new CrmExecuteEntityTypeHandleResult();

            result.Name  = $"{realValue.EntityName}@odata.bind";
            result.Value = null;

            return(await Task.FromResult(result));
        }
Ejemplo n.º 2
0
        public async Task <CrmExecuteEntityTypeHandleResult> Convert(string name, object value)
        {
            if (value == null)
            {
                CrmExecuteEntityTypeHandleResult result = new CrmExecuteEntityTypeHandleResult();
                result.Name  = name;
                result.Value = JToken.Parse("null");
                return(result);
            }
            if (!_serviceFactories.TryGetValue(value.GetType(), out IFactory <ICrmExecuteEntityTypeHandle> serviceFactory))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundCrmExecuteEntityTypeHandleByTypeName,
                    DefaultFormatting = "找不到类型名称为{0}的Crm执行实体属性值转换处理,位置为{1}",
                    ReplaceParameters = new List <object>()
                    {
                        value.GetType().FullName, $"{ this.GetType().FullName }.Convert"
                    }
                };

                throw new UtilityException((int)Errors.NotFoundCrmExecuteEntityTypeHandleByTypeName, fragment);
            }

            return(await serviceFactory.Create().Convert(name, value));
        }
Ejemplo n.º 3
0
        public async Task <CrmExecuteEntityTypeHandleResult> Convert(string name, object value)
        {
            if (!(value is IList <CrmEntityReference>))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.CrmExecuteEntityTypeHandleTypeNotMatch,
                    DefaultFormatting = "Crm执行实体属性值转换处理类型不匹配,期待的类型为{0},实际类型为{1},位置为{2}",
                    ReplaceParameters = new List <object>()
                    {
                        typeof(IList <CrmEntityReference>).FullName, value.GetType().FullName, $"{ this.GetType().FullName }.Convert"
                    }
                };

                throw new UtilityException((int)Errors.CrmExecuteEntityTypeHandleTypeNotMatch, fragment);
            }

            var realValue = value as IList <CrmEntityReference>;

            JObject       result     = new JObject();
            List <JToken> jTokenList = new List <JToken>();

            foreach (var entityItem in realValue)
            {
                if (entityItem == null)
                {
                    jTokenList.Add(JToken.Parse("null"));
                }
                else
                {
                    var entityItemResult = await _crmExecuteEntityTypeHandle.Convert(string.Empty, entityItem);

                    jTokenList.Add(entityItemResult.Value);
                }
            }


            CrmExecuteEntityTypeHandleResult finalResult = new CrmExecuteEntityTypeHandleResult();

            finalResult.Name  = name;
            finalResult.Value = JsonConvert.DeserializeObject <JToken>(JsonConvert.SerializeObject(jTokenList));
            return(finalResult);
        }
Ejemplo n.º 4
0
        public async Task <CrmExecuteEntityTypeHandleResult> Convert(string name, object value)
        {
            if (!(value is CrmExecuteEntity))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.CrmExecuteEntityTypeHandleTypeNotMatch,
                    DefaultFormatting = "Crm执行实体属性值转换处理类型不匹配,期待的类型为{0},实际类型为{1},位置为{2}",
                    ReplaceParameters = new List <object>()
                    {
                        typeof(CrmExecuteEntity).FullName, value.GetType().FullName, $"{ this.GetType().FullName }.Convert"
                    }
                };

                throw new UtilityException((int)Errors.CrmExecuteEntityTypeHandleTypeNotMatch, fragment);
            }

            var realValue = value as CrmExecuteEntity;

            JObject result = new JObject();

            foreach (var entityItem in realValue.Attributes)
            {
                if (entityItem.Value == null)
                {
                    result[entityItem.Key] = null;
                    continue;
                }

                switch (entityItem.Value)
                {
                case int v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case float v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case DateTime v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case bool v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case string v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case decimal v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case double v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                case long v:
                    result[entityItem.Key] = JToken.Parse(JsonConvert.SerializeObject(v));
                    break;

                default:
                    var convertResult = await _crmExecuteEntityTypeHandle.Convert(entityItem.Key, entityItem.Value);

                    result[convertResult.Name] = convertResult.Value;
                    break;
                }
            }

            if (realValue.Id != Guid.Empty)
            {
                if (realValue.IsActivity)
                {
                    result["activityid"] = JToken.Parse(JsonConvert.SerializeObject(realValue.Id));
                }
                else
                {
                    result[$"{realValue.EntityName.ToLower()}id"] = JToken.Parse(JsonConvert.SerializeObject(realValue.Id));
                }
            }

            CrmExecuteEntityTypeHandleResult finalResult = new CrmExecuteEntityTypeHandleResult();

            finalResult.Name  = name;
            finalResult.Value = JsonConvert.DeserializeObject <JToken>(JsonConvert.SerializeObject(result));
            return(finalResult);
        }