/// <summary> /// Sets MetaFile and Image values /// </summary> /// <param name="context">The context.</param> /// <param name="obj">The obj.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="name">The name.</param> /// <param name="contentType">Type of the content.</param> /// <param name="fileContents">The file contents.</param> /// <returns></returns> public static bool SetMetaFile(MetaDataContext context, MetaObject obj, string fieldName, string name, string contentType, byte[] fileContents) { MetaField mf = MetaField.Load(context, fieldName); if (mf == null || (mf.DataType != MetaDataType.File && mf.DataType != MetaDataType.Image && mf.DataType != MetaDataType.ImageFile)) { return(false); } // assign default meta field value if value is not specified and meta field doesn't allow null values if (fileContents == null || fileContents.Length == 0) { if (!mf.AllowNulls) { obj[mf.Name] = MetaObject.GetDefaultValue(mf.DataType); } else { obj[mf.Name] = null; } return(true); } // assign the file value MetaFile metaFile = new MetaFile(name, contentType, fileContents); obj[mf.Name] = metaFile; return(true); }
/// <summary> /// Creates the parameters. /// </summary> /// <param name="command">The command.</param> protected virtual void CreateParameters(DataCommand command) { foreach (MetaField metaField in MetaClass.SystemMetaFields) { object fieldValue = this[metaField] == null ? DBNull.Value : this[metaField]; if (fieldValue != DBNull.Value) { } else { if (!metaField.AllowNulls && this.ObjectState == MetaObjectState.Added) { fieldValue = MetaObject.GetDefaultValue(metaField.DataType); } } // Fix Problem: DbNull.Value in an image column [2/17/2005] if (fieldValue == DBNull.Value && metaField.DataType == MetaDataType.Image) { DataParameter tmpSqlPrm = new DataParameter(metaField.Name, DataParameterType.Image); tmpSqlPrm.Value = DBNull.Value; command.Parameters.Add(tmpSqlPrm); } else if (fieldValue == DBNull.Value && metaField.DataType == MetaDataType.Binary) { DataParameter tmpSqlPrm = new DataParameter(metaField.Name, DataParameterType.Binary); tmpSqlPrm.Value = DBNull.Value; command.Parameters.Add(tmpSqlPrm); } else if (fieldValue == DBNull.Value && metaField.DataType == MetaDataType.Money) { DataParameter tmpSqlPrm = new DataParameter(metaField.Name, DataParameterType.Money); tmpSqlPrm.Value = DBNull.Value; command.Parameters.Add(tmpSqlPrm); } else if (metaField.DataType == MetaDataType.NText || metaField.DataType == MetaDataType.LongHtmlString || metaField.DataType == MetaDataType.LongString) { DataParameter tmpSqlPrm = new DataParameter(metaField.Name, DataParameterType.NText); tmpSqlPrm.Value = fieldValue; command.Parameters.Add(tmpSqlPrm); } else { command.Parameters.Add(new DataParameter(metaField.Name, fieldValue, (DataParameterType)metaField.DataType.GetHashCode())); } } }
/// <summary> /// Sets values for the meta object's meta field. Doesn't set file and image values. /// </summary> /// <param name="context">The context.</param> /// <param name="obj">The obj.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="values">The values.</param> /// <returns>True, if value was set successfully.</returns> public static bool SetMetaFieldValue(MetaDataContext context, MetaObject obj, string fieldName, object[] values) { MetaField mf = MetaField.Load(context, fieldName); if (mf == null) { return(false); } // assign default meta field value if value is not specified and meta field doesn't allow null values if (values == null || values.Length == 0) { obj[mf.Name] = mf.AllowNulls ? null : MetaObject.GetDefaultValue(mf.DataType); return(true); } // assign the value depending on meta field's type switch (mf.DataType) { case MetaDataType.File: // do not assign file values in this function throw new ApplicationException("do not assign file values in this function"); case MetaDataType.Image: case MetaDataType.ImageFile: // do not assign image values in this function throw new ApplicationException("do not assign file values in this function"); case MetaDataType.BigInt: case MetaDataType.Bit: case MetaDataType.Boolean: case MetaDataType.Char: case MetaDataType.Date: case MetaDataType.DateTime: case MetaDataType.Decimal: case MetaDataType.Email: case MetaDataType.Float: case MetaDataType.Int: case MetaDataType.Integer: case MetaDataType.LongHtmlString: case MetaDataType.LongString: case MetaDataType.Money: case MetaDataType.NChar: case MetaDataType.NText: case MetaDataType.Numeric: case MetaDataType.NVarChar: case MetaDataType.Real: case MetaDataType.ShortString: case MetaDataType.SmallDateTime: case MetaDataType.SmallInt: case MetaDataType.SmallMoney: case MetaDataType.Sysname: case MetaDataType.Text: case MetaDataType.Timestamp: case MetaDataType.TinyInt: case MetaDataType.UniqueIdentifier: case MetaDataType.URL: case MetaDataType.VarChar: case MetaDataType.Variant: obj[mf.Name] = values[0]; break; case MetaDataType.DictionarySingleValue: case MetaDataType.EnumSingleValue: // find a dictionary if type is string if (values[0] == null || values[0].GetType() == typeof(MetaDictionaryItem)) { obj[mf.Name] = values[0]; break; } else { string value = values[0].ToString(); foreach (MetaDictionaryItem dic in mf.Dictionary) { if (String.Compare(dic.Value, value, true) == 0) { obj[mf.Name] = dic; break; } } } break; case MetaDataType.EnumMultiValue: case MetaDataType.DictionaryMultiValue: ArrayList dics = new ArrayList(); foreach (string val1 in values) { int valueInt = 0; Int32.TryParse(val1.ToString(), out valueInt); foreach (MetaDictionaryItem dic in mf.Dictionary) { if (dic.Id == Int32.Parse(val1)) { dics.Add(dic); break; } } } obj[mf.Name] = (MetaDictionaryItem[])dics.ToArray(typeof(MetaDictionaryItem)); break; case MetaDataType.StringDictionary: // if meta field type is StringDictionary, then values must be one of the following: // 1. values[0] is MetaStringDictionary // 2. values is array of string dictionary values where each values[i] is a combination of key and value divided by semicolon, i.e. value[i]="key;value" if (values[0] == null || values[0].GetType() == typeof(MetaStringDictionary)) { obj[mf.Name] = values[0]; break; } else { MetaStringDictionary strDict = new MetaStringDictionary(); foreach (string row in (string[])values) { string[] val = row.Split(';'); if (val.Length >= 2) { strDict.Add(val[0], val[1]); } } obj[mf.Name] = strDict; } break; default: break; } return(true); }