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)); }
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)); }
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); }
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); }