Exemple #1
0
 protected MFilesObject(int id, string name, string alias, MFDataType dataType = MFDataType.MFDatatypeUninitialized)
 {
     Id       = id;
     Name     = name;
     Alias    = alias;
     DataType = dataType;
 }
        public static SearchConditions AddPropertyCondition <T>(this SearchConditions search, object value, MFConditionType cType = MFConditionType.MFConditionTypeEqual)
            where T : IMFPropertyDefinition
        {
            int        pd_id     = (int)typeof(T).GetField("id").GetRawConstantValue();
            MFDataType data_type = (MFDataType)typeof(T).GetField("data_type").GetRawConstantValue();

            if (value is IObjVerEx)
            {
                search.AddPropertyCondition(pd_id, cType, data_type, (value as IObjVerEx).objVerEx.ToLookup());
            }
            else if (value is IList)
            {
                Lookups lookups = new Lookups();
                foreach (IObjVerEx objVerEx in (value as IList))
                {
                    if (objVerEx == null)
                    {
                        break;
                    }
                    lookups.Add(-1, objVerEx.objVerEx.ToLookup());
                }
                search.AddPropertyCondition(pd_id, cType, data_type, lookups);
            }
            else
            {
                search.AddPropertyCondition(pd_id, cType, data_type, value);
            }
            return(search);
        }
Exemple #3
0
        public void KnownPropertyDefReturnsCorrectData()
        {
            // Details about the property.
            int        propertyDefId = 1234;
            MFDataType dataType      = MFDataType.MFDatatypeText;

            // Mock the property definition.
            var mock = this.GetVaultPropertyDefOperationsMock();

            mock
            .Setup(m => m.GetPropertyDef(propertyDefId))
            .Returns((int id) =>
            {
                var propertyDef = new PropertyDef()
                {
                    ID       = propertyDefId,
                    Name     = "hello world",
                    DataType = MFDataType.MFDatatypeText
                };
                return(propertyDef);
            });

            // Run the method and check the output.
            Assert.IsTrue(mock.Object.TryGetPropertyDefDataType(propertyDefId, out MFDataType output));
            Assert.AreEqual(dataType, output);
        }
        public static PropertyValue ConvertObjectToLookup <T>(object id, MFDataType data_type, T objClass)
            where T : IObjVerEx
        {
            if (null == objClass)
            {
                PropertyValue pv = new PropertyValue()
                {
                    PropertyDef = (int)id
                };
                pv.TypedValue.SetValueToNULL(data_type);
                return(pv);
            }

            Lookup lookup = new Lookup()
            {
                Item       = objClass.objVerEx.ID,
                ObjectType = objClass.objVerEx.Type
            };

            PropertyValue propVal = new PropertyValue();

            propVal.TypedValue.SetValueToLookup(lookup);
            propVal.PropertyDef = (int)id;
            return(propVal);
        }
Exemple #5
0
        /// <summary>
        /// Attempts to get the <see cref="PropertyDef.DataType"/> of a <see cref="PropertyDef"/>
        /// with the given <paramref name="propertyDefId"/>.
        /// </summary>
        /// <param name="propertyDefOperations">The <see cref="VaultPropertyDefOperations"/> instance to use to communicate with the vault.</param>
        /// <param name="propertyDefId">The Id of the property definition to attempt to read.</param>
        /// <param name="dataType">The data type of the property definition, or <see cref="MFDataType.MFDatatypeUninitialized"/> if not found.</param>
        /// <returns>true if the property definition could be found, false otherwise.</returns>
        public static bool TryGetPropertyDefDataType
        (
            this VaultPropertyDefOperations propertyDefOperations,
            int propertyDefId,
            out MFDataType dataType
        )
        {
            // Sanity.
            if (null == propertyDefOperations)
            {
                throw new ArgumentNullException(nameof(propertyDefOperations));
            }

            // Default.
            dataType = MFDataType.MFDatatypeUninitialized;

            // Attempt to get from the underlying data.
            try
            {
                dataType = propertyDefOperations
                           .GetPropertyDef(propertyDefId)
                           .DataType;
                return(true);
            }
            catch
            {
                return(false);
            }
        }
        public SearchParameters AddPDNullCheck <T>(bool is_null = true)
            where T : IMFPropertyDefinition
        {
            int        pd_id     = (int)typeof(T).GetField("id").GetRawConstantValue();
            MFDataType data_type = (MFDataType)typeof(T).GetField("data_type").GetRawConstantValue();

            return(this.AddPDNullCheck(pd_id, data_type, is_null));
        }
Exemple #7
0
        /// <summary>
        /// 一般属性
        /// </summary>
        /// <param name="propDef"></param>
        /// <param name="dataType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static PropertyValue Create(int propDef, MFDataType dataType, object value)
        {
            var p = new PropertyValue {
                PropertyDef = propDef
            };

            SetValue(p.Value, dataType, value);
            return(p);
        }
        public static SearchCondition propertyIsEmpty(int propertyID, MFDataType datatype)
        {
            SearchCondition hasProperty = new SearchCondition();

            hasProperty.Expression.DataPropertyValuePropertyDef = propertyID;
            hasProperty.ConditionType = MFConditionType.MFConditionTypeEqual;
            hasProperty.TypedValue.SetValue(datatype, "");
            return(hasProperty);
        }
        public static void Clear(this IObjVerEx obj, object prop, MFDataType data_type)
        {
            PropertyValue pv = new PropertyValue()
            {
                PropertyDef = (int)prop
            };

            pv.TypedValue.SetValueToNULL(data_type);
            obj.objVerEx.SetProperty(pv);
        }
Exemple #10
0
        /// <summary>
        /// 对象属性搜索
        /// </summary>
        /// <param name="cType"></param>
        /// <param name="propDef"></param>
        /// <param name="dType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static SearchCondition Property(MFConditionType cType,
                                               int propDef, MFDataType dType, object value)
        {
            var sc = new SearchCondition();

            sc.ConditionType = cType;
            sc.Expression.DataPropertyValuePropertyDef = propDef;
            MFPropertyUtils.SetValue(sc.TypedValue, dType, value);
            return(sc);
        }
Exemple #11
0
        /// <summary>
        /// 对象状态搜索
        /// </summary>
        /// <param name="cType"></param>
        /// <param name="sType"></param>
        /// <param name="dType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static SearchCondition Status(MFConditionType cType,
                                             MFStatusType sType, MFDataType dType, object value)
        {
            var sc = new SearchCondition();

            sc.ConditionType = cType;
            sc.Expression.DataStatusValueType = sType;
            MFPropertyUtils.SetValue(sc.TypedValue, dType, value);
            return(sc);
        }
        public static void SetToNull(this IObjVerEx obj, int id, MFDataType data_type)
        {
            obj.RemoveCachedProperty(id);
            PropertyValue pv = new PropertyValue()
            {
                PropertyDef = id
            };

            pv.TypedValue.SetValueToNULL(data_type);
            obj.objVerEx.SetProperty(pv);
        }
Exemple #13
0
 internal static void SetValue(TypedValue tv, MFDataType dataType, object value)
 {
     if (value == null)
     {
         tv.SetValueToNULL(dataType);
     }
     else
     {
         Validate(dataType, value);
         tv.SetValue(dataType, value);
     }
 }
        public static PropertyValue ConvertValueListToLookups <T>(object id, MFDataType data_type, List <T?> vList)
            where T : struct
        {
            if (!typeof(T).IsEnum || vList == null)
            {
                PropertyValue pv = new PropertyValue()
                {
                    PropertyDef = (int)id
                };
                pv.TypedValue.SetValueToNULL(data_type);
                return(pv);
            }

            Lookups lookups = new Lookups();

            foreach (T t in vList)
            {
                if (Equals(t, default(T)))
                {
                    continue;
                }

                string value_list_name = typeof(T).Name.Replace("VL", "");
                if (!string.IsNullOrEmpty(value_list_name) && !char.IsDigit(value_list_name[1]))
                {
                    value_list_name = value_list_name.Substring(1, value_list_name.Length - 1);
                }

                int ObjectType = (int)Enum.Parse(typeof(VL_ValueLists), value_list_name, true);

                Lookup lookup = new Lookup()
                {
                    Item       = Convert.ToInt32(t),
                    ObjectType = ObjectType
                };

                if (lookups.GetLookupIndexByItem(lookup.Item) == -1)
                {
                    lookups.Add(-1, lookup);
                }
            }

            PropertyValue propVal = new PropertyValue()
            {
                PropertyDef = (int)id
            };

            propVal.TypedValue.SetValueToMultiSelectLookup(lookups);
            return(propVal);
        }
 public void SetValue(MFDataType DataType, object Value)
 {
     if (DataType == MFDataType.MFDatatypeText)
     {
         this.Value = Value;
         return;
     }
     else if (DataType == MFDataType.MFDatatypeBoolean)
     {
         this.Value = Value;
         return;
     }
     throw new NotImplementedException();
 }
        public SearchParameters AddPDNullCheck(int property_def, MFDataType dataType, bool is_null = true)
        {
            TypedValue value = new TypedValue();

            value.SetValueToNULL(dataType);
            SearchCondition search = new SearchCondition();

            search.Expression.DataPropertyValuePropertyDef = property_def;
            Expression exp = new Expression();

            exp.SetPropertyValueExpression(property_def, MFParentChildBehavior.MFParentChildBehaviorNone);
            search.ConditionType = is_null ? MFConditionType.MFConditionTypeEqual : MFConditionType.MFConditionTypeNotEqual;
            search.Set(exp, search.ConditionType, value);
            this.Conditions.Add(1, search);
            return(this);
        }
Exemple #17
0
            public PropertyValueInstruction
            (
                PropertyValueInstructionType instructionType,
                int propertyDefId,
                MFDataType dataType,
                object value
            )
            {
                this.InstructionType = instructionType;
                var pv = new PropertyValue()
                {
                    PropertyDef = propertyDefId
                };

                pv.TypedValue.SetValue(dataType, value);
                this.PropertyValue = pv;
            }
        public static PropertyValue ConvertPropertyBoolValue(object id, MFDataType data_type, bool?value)
        {
            PropertyValue pv = new PropertyValue()
            {
                PropertyDef = (int)id
            };

            if (null == value)
            {
                pv.TypedValue.SetValueToNULL(data_type);
            }
            else
            {
                pv.TypedValue.SetValue(data_type, value);
            }

            return(pv);
        }
Exemple #19
0
        public void AddValueToProperty_ThrowsForUnsupportedDataType
        (
            MFDataType dataType,
            object initialValue,
            object newValue
        )
        {
            const int propertyDefId = 12345;

            // Set up the instruction to add/update.
            var instruction = new ObjectCopyOptions.PropertyValueInstruction()
            {
                InstructionType = ObjectCopyOptions.PropertyValueInstructionType.AddValueToProperty,
                PropertyValue   = new PropertyValue()
                {
                    PropertyDef = propertyDefId
                }
            };

            instruction.PropertyValue.TypedValue.SetValue
            (
                dataType,
                newValue                 // Add the new value.
            );

            // Apply it.
            var propertyValues = new PropertyValues();

            {
                var pv = new PropertyValue()
                {
                    PropertyDef = propertyDefId
                };
                // Set the starting value the initial value.
                pv.TypedValue.SetValue
                (
                    dataType,
                    initialValue
                );
                propertyValues.Add(-1, pv);
            }
            instruction.ApplyTo(propertyValues);
        }
Exemple #20
0
        private static string TypeDesc(MFDataType type)
        {
            switch (type)
            {
            case MFDataType.MFDatatypeBoolean:
                return("布尔");

            case MFDataType.MFDatatypeDate:
            case MFDataType.MFDatatypeTime:
            case MFDataType.MFDatatypeTimestamp:
                return("日期");

            case MFDataType.MFDatatypeFloating:
            case MFDataType.MFDatatypeInteger:
            case MFDataType.MFDatatypeInteger64:
                return("数字");
            }
            return("字符串");
        }
Exemple #21
0
 public void SearchConditionIsCorrect
 (
     int propertyDef,
     long?input,
     MFDataType dataType,
     MFConditionType conditionType,
     MFParentChildBehavior parentChildBehavior,
     PropertyDefOrObjectTypes indirectionLevels
 )
 {
     base.AssertSearchConditionIsCorrect
     (
         propertyDef,
         dataType,
         input,
         conditionType,
         parentChildBehavior,
         indirectionLevels
     );
 }
        public static PropertyValue ConvertObjectToLookups <T>(object id, MFDataType data_type, List <T> objClass)
            where T : IObjVerEx
        {
            if (null == objClass)
            {
                PropertyValue pv = new PropertyValue()
                {
                    PropertyDef = (int)id
                };
                pv.TypedValue.SetValueToNULL(data_type);
                return(pv);
            }

            Lookups lookups = new Lookups();

            foreach (T t in objClass)
            {
                if (null == t)
                {
                    continue;
                }
                Lookup lookup = new Lookup()
                {
                    Item       = t.objVerEx.ID,
                    ObjectType = t.objVerEx.Type
                };

                if (lookups.GetLookupIndexByItem(lookup.Item) == -1)
                {
                    lookups.Add(-1, lookup);
                }
            }

            PropertyValue propVal = new PropertyValue();

            propVal.TypedValue.SetValueToMultiSelectLookup(lookups);
            propVal.PropertyDef = (int)id;
            return(propVal);
        }
Exemple #23
0
        private static SqlDbType MapType(MFDataType mfDataType)
        {
            switch (mfDataType)
            {
            case MFDataType.MFDatatypeMultiLineText:
            case MFDataType.MFDatatypeText:
                return(SqlDbType.NVarChar);

            case MFDataType.MFDatatypeInteger:
                return(SqlDbType.Int);

            case MFDataType.MFDatatypeInteger64:
                return(SqlDbType.BigInt);

            case MFDataType.MFDatatypeFloating:
                return(SqlDbType.Float);

            case MFDataType.MFDatatypeDate:
            case MFDataType.MFDatatypeTime:
            case MFDataType.MFDatatypeTimestamp:
            case MFDataType.MFDatatypeFILETIME:
                return(SqlDbType.DateTime);

            case MFDataType.MFDatatypeBoolean:
                return(SqlDbType.Bit);

            case MFDataType.MFDatatypeLookup:
                return(SqlDbType.Int);

            case MFDataType.MFDatatypeMultiSelectLookup:
            case MFDataType.MFDatatypeUninitialized:
            case MFDataType.MFDatatypeACL:
            default:
                return(SqlDbType.NVarChar);
            }
        }
        public static PropertyValue ConvertValueListToLookup <T>(object id, MFDataType data_type, T?vList)
            where T : struct
        {
            if (!typeof(T).IsEnum || null == vList)
            {
                PropertyValue pv = new PropertyValue()
                {
                    PropertyDef = (int)id
                };
                pv.TypedValue.SetValueToNULL(data_type);
                return(pv);
            }

            string value_list_name = typeof(T).Name?.Replace("VL", "");

            if (!string.IsNullOrEmpty(value_list_name) && !char.IsDigit(value_list_name[1]))
            {
                value_list_name = value_list_name.Substring(1, value_list_name.Length - 1);
            }

            int ObjectType = (int)Enum.Parse(typeof(VL_ValueLists), value_list_name, true);

            Lookup lookup = new Lookup()
            {
                Item       = Convert.ToInt32(vList),
                ObjectType = ObjectType
            };

            PropertyValue propVal = new PropertyValue()
            {
                PropertyDef = (int)id
            };

            propVal.TypedValue.SetValueToLookup(lookup);
            return(propVal);
        }
 private PropertyValue GetPropertyValue(int propertyDef, MFDataType dataType, object value)
 {
   var propertyValue = new PropertyValue();
   propertyValue.PropertyDef = propertyDef;
   try { propertyValue.TypedValue.SetValue(dataType, value); }
   catch (Exception ex)
   {
     throw new ArgumentException(
       string.Format("propertyValue.TypedValue.SetValue() failed with parameters: propertyDefId: {0}, dataType: {1}, value: {2}",
       propertyDef, dataType, value), ex);
   }
   return propertyValue;
 }
Exemple #26
0
        internal static void Validate(MFDataType dType, object value)
        {
            System.Diagnostics.Debug.Assert(value != null);
            switch (dType)
            {
            case MFDataType.MFDatatypeACL:
            case MFDataType.MFDatatypeInteger:
            case MFDataType.MFDatatypeLookup:
                if (value is Int32)
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeBoolean:
                if (value is Boolean)
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeDate:
            case MFDataType.MFDatatypeFILETIME:
            case MFDataType.MFDatatypeTime:
            case MFDataType.MFDatatypeTimestamp:
                if (value is DateTime)
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeFloating:
                if (value is Single || value is Double || value is Int32)
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeInteger64:
                if ((value is Int64) || (value is Int32))
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeText:
            case MFDataType.MFDatatypeMultiLineText:
                if (value is String)
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeMultiSelectLookup:
                if (value is Int32 || value is Int32[])
                {
                    return;
                }
                break;

            case MFDataType.MFDatatypeUninitialized:
                break;
            }
            throw new ArgumentException(string.Format(
                                            "数据类型({0})与值给出的类型({1})不匹配", dType.ToString(), value.GetType()));
        }
 public void SetValueToNULL(MFDataType DataType)
 {
     throw new NotImplementedException();
 }
 public static void SetPropertyFrom(this IObjVerEx obj, IObjVerEx source_obj, int property_id, MFDataType property_datatype)
 {
     if (source_obj.objVerEx.HasProperty(property_id))
     {
         obj.RemoveCachedProperty(property_id);
         if (source_obj.IsNull(property_id))
         {
             obj.SetToNull(property_id, property_datatype);
         }
         else
         {
             obj.objVerEx.SetProperty(source_obj.objVerEx.GetProperty(property_id));
         }
     }
 }
        public List <ObjVerEx> FindObjects(Vault vault, MFIdentifier ClassAlias, MFIdentifier PDAlias, MFDataType PDType, String findValue)
        {
            // Create our search builder.
            var searchBuilder = new MFSearchBuilder(vault);

            // Add an object type filter.
            searchBuilder.Class(ClassAlias);
            // Add a "not deleted" filter.
            searchBuilder.Deleted(false);
            List <ObjVerEx> searchResults;

            searchBuilder.Property(PDAlias, PDType, findValue);

            searchResults = searchBuilder.FindEx();

            return((searchResults.Count != 0) ? searchResults : null);
        }
        private int LookupRef(Vault vault, int ObjectID, MFDataType DataType, bool SearchLookupID, object value, LookupOrValuelistStrategy searchType = LookupOrValuelistStrategy.SearchLookup)
        {
            // Create list of search conditions.
            var oSCs = new MFilesAPI.SearchConditions();

            // Create single search condition.
            var oSC = new MFilesAPI.SearchCondition();

            // =================================================================================
            // Filter not deleted
            if (searchType == LookupOrValuelistStrategy.SearchLookup)
            {
                oSC.Expression.SetStatusValueExpression(MFStatusType.MFStatusTypeDeleted);
            }
            else
            {
                oSC.Expression.SetValueListItemExpression(MFValueListItemPropertyDef.MFValueListItemPropertyDefDeleted,
                                                          MFParentChildBehavior.MFParentChildBehaviorNone);
            }
            oSC.ConditionType = MFConditionType.MFConditionTypeEqual;
            oSC.TypedValue.SetValue(MFDataType.MFDatatypeBoolean, false);
            oSCs.Add(-1, oSC);

            // =================================================================================
            // Filter if it's object only objects
            if (searchType == LookupOrValuelistStrategy.SearchLookup)
            {
                oSC.Expression.SetStatusValueExpression(MFStatusType.MFStatusTypeObjectTypeID);
                oSC.ConditionType = MFConditionType.MFConditionTypeEqual;
                oSC.TypedValue.SetValue(DataType, ObjectID);
                oSCs.Add(-1, oSC);
            }

            // =================================================================================
            // Filter Search by ID or name Value
            if (SearchLookupID)
            {
                oSC.Expression.DataStatusValueType = MFStatusType.MFStatusTypeExtID;
                oSC.ConditionType = MFConditionType.MFConditionTypeEqual;
                oSC.TypedValue.SetValue(MFDataType.MFDatatypeText, value);
                oSCs.Add(-1, oSC);
            }
            else
            {
                if (searchType == LookupOrValuelistStrategy.SearchLookup)
                {
                    // object value search syntax
                    oSC.Expression.SetPropertyValueExpression((int)MFBuiltInPropertyDef.MFBuiltInPropertyDefNameOrTitle, MFParentChildBehavior.MFParentChildBehaviorNone);
                    oSC.ConditionType = MFConditionType.MFConditionTypeEqual;
                    oSC.TypedValue.SetValue(MFDataType.MFDatatypeText, value);
                    oSCs.Add(-1, oSC);
                }
                else
                {
                    // valuelist value search syntax
                    oSC.Expression.SetValueListItemExpression(MFValueListItemPropertyDef.MFValueListItemPropertyDefName, MFParentChildBehavior.MFParentChildBehaviorNone);
                    oSC.ConditionType = MFConditionType.MFConditionTypeEqual;
                    oSC.TypedValue.SetValue(MFDataType.MFDatatypeText, value);
                    oSCs.Add(-1, oSC);
                }
            }

            // execute the final search
            if (searchType == LookupOrValuelistStrategy.SearchLookup)
            {
                var oResult = vault.ObjectSearchOperations.SearchForObjectsByConditionsEx(oSCs, MFSearchFlags.MFSearchFlagNone, false);
                if (oResult.Count == 0)
                {
                    return(-1);
                }
                else
                {
                    return(oResult[1].ObjVer.ObjID.ID);
                }
            }
            else
            {
                var vlResult = vault.ValueListItemOperations.SearchForValueListItemsEx(ObjectID, oSCs, false);
                if (vlResult.Count == 0)
                {
                    return(-1);
                }
                else
                {
                    return(vlResult[1].ObjID.ID);
                }
            }
        }
        /// <summary>
        /// search condition of whether the property has the specified value
        /// </summary>
        /// <param name="propertyID">property to look for</param>
        /// <param name="propertyValue">value of property</param>
        /// <returns>search condition</returns>
        public static SearchCondition hasProperty(int propertyID, string propertyValue, MFDataType type)
        {
            SearchCondition hasProp = new SearchCondition();

            hasProp.Expression.SetPropertyValueExpression(propertyID, MFParentChildBehavior.MFParentChildBehaviorNone);
            hasProp.ConditionType = MFConditionType.MFConditionTypeEqual;
            hasProp.TypedValue.SetValue(type, propertyValue);
            return(hasProp);
        }