private string GetSearchName(Schema.Domain.Attribute attr, string entityAlias = "") { //|| attr.TypeIsState() || attr.TypeIsBit() || attr.TypeIsPickList() var name = attr.Name; if (attr != null && (attr.TypeIsPrimaryKey() || attr.TypeIsLookUp() || attr.TypeIsOwner())) { name += "Name"; } return(entityAlias.IsEmpty() ? name : entityAlias + "." + name); }
public static object WrapAttributeValue(this Entity entity, IEntityFinder entityFinder, Schema.Domain.Attribute attr, object value) { List <string> errors = new List <string>(); if (value == null || value.ToString().IsEmpty()) { return(null); } if (attr != null) { if (attr.TypeIsBit()) { if (value.ToString().IsInteger())// if value is 0/1 { value = value.ToString() == "1"; } else { var boolValue = true; if (bool.TryParse(value.ToString(), out boolValue)) { value = boolValue; } else//if (!(value is bool)) { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'bool'", attr.Name, value.ToString())); } } } else if (attr.TypeIsLookUp()) { if (value is EntityReference) { var er = value as EntityReference; //是否存在该引用实体 if (!entityFinder.Exists(er.ReferencedEntityName)) { errors.Add(string.Format("referenced entity '{0}' is not found by attribute '{1}'", er.ReferencedEntityName, attr.Name)); } } else { if (value.ToString().IsGuid()) { var referencedEntity = entityFinder.FindById(attr.ReferencedEntityId.Value); value = new EntityReference(referencedEntity.Name, Guid.Parse(value.ToString())); } else { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'SDK.EntityReference'", attr.Name, value.ToString())); } } } else if (attr.TypeIsPickList()) { //是否正确的格式 if (!(value is OptionSetValue)) { if (value.ToString().IsInteger()) { value = new OptionSetValue(int.Parse(value.ToString())); } else { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'SDK.OptionSetValue'", attr.Name, value.ToString())); } } //是否存在该值 } else if (attr.TypeIsOwner()) { //是否正确的格式 if (!(value is OwnerObject)) { if (value.ToString().IsGuid()) { value = new OwnerObject(OwnerTypes.SystemUser, Guid.Parse(value.ToString())); } else { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'SDK.OwnerObject'", attr.Name, value.ToString())); } } //是否存在该值 } else if (attr.TypeIsState()) { if (value.ToString().IsInteger())// if value is 0/1 { value = value.ToString() == "1"; } else { var boolValue = true; if (bool.TryParse(value.ToString(), out boolValue)) { value = boolValue; } else//if (!(value is bool)) { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'bool'", attr.Name, value.ToString())); } } } else if (attr.TypeIsInt()) { //是否正确的格式 if (!value.ToString().IsInteger()) { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'int'", attr.Name, value.ToString())); } } else if (attr.TypeIsFloat()) { //是否正确的格式 if (!value.ToString().IsNumeric()) { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'float'", attr.Name, value.ToString())); } } else if (attr.TypeIsMoney()) { //是否正确的格式 if (!(value is Money)) { if (value.ToString().IsNumeric()) { value = new Money(decimal.Parse(value.ToString())); } else { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'SDK.Money'", attr.Name, value.ToString())); } } } else if (attr.TypeIsDateTime()) { //是否正确的格式 if (!value.ToString().IsDateTime()) { errors.Add(string.Format("{0}'s value({1}) is not valid, it's type should be 'datetime'", attr.Name, value.ToString())); } } } if (errors.NotEmpty()) { throw new XmsException(string.Join("\n", errors)); } return(value); }
private ConditionExpression GetCondition(Schema.Domain.Attribute attr, object keyword, string entityAlias = "") { //数字类型 if (keyword.ToString().IsNumeric() && (attr.TypeIsInt() || attr.TypeIsFloat() || attr.TypeIsDecimal() || attr.TypeIsMoney() || attr.TypeIsSmallMoney() || attr.TypeIsSmallInt() )) { return(new ConditionExpression(GetSearchName(attr, entityAlias), GetConditionOperator(attr), keyword)); } //日期类型 else if ((attr.TypeIsDateTime() || attr.TypeIsSmallDateTime() )) { if (DateTime.TryParse(keyword.ToString(), out DateTime d)) { return(new ConditionExpression(GetSearchName(attr, entityAlias), GetConditionOperator(attr), keyword)); } } //guid类型 else if (attr.TypeIsPrimaryKey() || attr.TypeIsLookUp() || attr.TypeIsOwner() || attr.TypeIsCustomer()) { if (keyword.ToString().IsGuid()) { return(new ConditionExpression(attr.Name, GetConditionOperator(attr), keyword)); } return(new ConditionExpression(GetSearchName(attr, entityAlias), ConditionOperator.Like, keyword)); } //选项类型 else if ((attr.TypeIsState() || attr.TypeIsBit() || attr.TypeIsPickList() || attr.TypeIsStatus())) { if (keyword.ToString().IsInteger())//如果是数值 { return(new ConditionExpression(entityAlias.IsEmpty() ? attr.Name : entityAlias + "." + attr.Name, GetConditionOperator(attr), keyword)); } else { //按名称查找选项值 //... if (attr.TypeIsState() || attr.TypeIsBit()) { if (attr.PickLists.IsEmpty()) { attr.PickLists = _stringMapFinder.Query(n => n.Where(f => f.AttributeId == attr.AttributeId)); } var value = attr.PickLists.Find(n => n.Name.IsCaseInsensitiveEqual(keyword.ToString())); if (null != value) { keyword = value.Value; } } else if (attr.TypeIsPickList() || attr.TypeIsStatus()) { if (attr.OptionSet == null) { attr.OptionSet = new OptionSet();//_optionSetFinder.FindById(attr.OptionSetId.Value); } var value = attr.OptionSet.Items.Find(n => n.Name.IsCaseInsensitiveEqual(keyword.ToString())); if (null != value) { keyword = value.Value; } } } //if (keyword.ToString().IsInteger()) //{ // return new ConditionExpression(attr.Name, ConditionOperator.Equal, keyword); //} } //字符串类型 else if ((attr.TypeIsNvarchar() || attr.TypeIsVarchar() || attr.TypeIsChar())) { return(new ConditionExpression(GetSearchName(attr, entityAlias), GetConditionOperator(attr), keyword)); } return(null); }