public static void Add <T>(this IObjVerEx obj, int propertyId, T?value)
            where T : struct
        {
            if (typeof(T).IsEnum && (value != null && value.GetType() == typeof(T)))
            {
                Lookups lookups = obj.objVerEx.GetLookups(propertyId);

                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 lookupToAdd = new Lookup()
                {
                    Item       = Convert.ToInt32(value),
                    ObjectType = ObjectType
                };
                if (lookups.GetLookupIndexByItem(lookupToAdd.Item) == -1)
                {
                    lookups.Add(-1, lookupToAdd);
                }

                PropertyValue propValue = new PropertyValue()
                {
                    PropertyDef = (int)propertyId
                };
                propValue.TypedValue.SetValueToMultiSelectLookup(lookups);
                obj.objVerEx.SetProperty(propValue);
            }
        }
        public static bool Contains <T>(this IObjVerEx obj, int propertyId, T?value)
            where T : struct
        {
            if (typeof(T).IsEnum && (value != null && value.GetType() == typeof(T)))
            {
                PropertyValue propValue = obj.objVerEx.GetProperty(propertyId);
                Lookups       lookups   = obj.objVerEx.GetLookups(propertyId);
                int           itemIndex = lookups.GetLookupIndexByItem(Convert.ToInt32(value));

                return(itemIndex != -1);
            }
            return(false);
        }
        public static bool Contains <T>(this IObjVerEx obj, int propertyId, T value)
            where T : IObjVerEx
        {
            if (obj.objVerEx.HasProperty(propertyId))
            {
                PropertyValue propValue = obj.objVerEx.GetProperty(propertyId);
                Lookups       lookups   = propValue.TypedValue.GetValueAsLookups();
                int           itemIndex = lookups.GetLookupIndexByItem(value.objVerEx.ID);

                return(itemIndex != -1);
            }
            return(false);
        }
        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 static void Remove <T>(this IObjVerEx obj, int propertyId, T value)
            where T : IObjVerEx
        {
            if (obj.objVerEx.HasProperty(propertyId))
            {
                PropertyValue propValue = obj.objVerEx.GetProperty(propertyId);
                Lookups       lookups   = propValue.TypedValue.GetValueAsLookups();
                int           itemIndex = lookups.GetLookupIndexByItem(value.objVerEx.ID);

                if (itemIndex != -1)
                {
                    lookups.Remove(itemIndex);
                }
            }
        }
        public static void Remove <T>(this IObjVerEx obj, int propertyId, T?value)
            where T : struct
        {
            if (typeof(T).IsEnum && (value != null && value.GetType() == typeof(T)))
            {
                PropertyValue propValue = obj.objVerEx.GetProperty(propertyId);
                Lookups       lookups   = obj.objVerEx.GetLookups(propertyId);
                int           itemIndex = lookups.GetLookupIndexByItem(Convert.ToInt32(value));

                if (itemIndex != -1)
                {
                    lookups.Remove(itemIndex);
                }
            }
        }
        public static Lookups ToLookups(this List <ObjVerEx> objVerEx)
        {
            Lookups lookups = new Lookups();

            foreach (ObjVerEx obj in objVerEx)
            {
                Lookup lu = new Lookup {
                    ObjectType = obj.Type,
                    Item       = obj.ID,
                    Version    = -1
                };

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

            return(lookups);
        }
        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);
        }
Example #9
0
        private void Lognotices(Vault vault, ObjVer objver, MfTask otask, string server)
        {
            //   Writelog(string.Format("in Lognotices,objver.type={0},id={1},vaultname={2}", objver.Type, objver.ID, vault.Name));
            var userIds = new Lookups();

            try
            {
                userIds = vault.ObjectPropertyOperations.GetProperty(objver, (int)MFBuiltInPropertyDef.
                                                                     MFBuiltInPropertyDefAssignedTo)
                          .Value.GetValueAsLookups();
            }
            #region no propertydefassignedto
            catch (Exception ex)
            {
                //  Writelog(string.Format("in Lognotices,big catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name,ex.Message ));
                try
                {
                    var perms = vault.ObjectOperations.GetObjectPermissions(objver);
                    var aceks = perms.CustomACL
                                                       ? perms.AccessControlList.CustomComponent.AccessControlEntries.
                                GetKeysWithPseudoUserDefinitions()
                                                       : perms.NamedACL.AccessControlList.CustomComponent.
                                AccessControlEntries.GetKeysWithPseudoUserDefinitions();
                    var aclc = perms.CustomACL ? perms.AccessControlList.CustomComponent
                                                      : perms.NamedACL.AccessControlList.CustomComponent;
                    Writelog(string.Format("perms:Count={0},CustomACL={1},Type={2},ID={3}", aceks.Count, perms.CustomACL, objver.Type, objver.ID));
                    foreach (AccessControlEntryKey acek in aceks)
                    {
                        Writelog(string.Format("perms:IsGroup={0},IsPseudoUser={1},PseudoUserID={2},UserOrGroupID={3}", acek.IsGroup, acek.IsPseudoUser, acek.PseudoUserID, acek.UserOrGroupID));
                        if (acek.UserOrGroupID == 1)
                        {
                            continue;                         //m-files api 获取结果不正确,暂时回避内部所有用户
                        }
                        #region deal with group
                        if (acek.IsGroup)
                        {
                            if (acek.IsPseudoUser)
                            {
                                foreach (UserOrUserGroupID uoug in acek.GetResolvedPseudoUserOrGroupIDs())
                                {
                                    #region deal with MFUserOrUserGroupTypeUserAccount
                                    if (uoug.UserOrGroupType == MFUserOrUserGroupType.MFUserOrUserGroupTypeUserAccount)
                                    {
                                        try
                                        {
                                            Writelog(string.Format("in Lognotices,big catch,first little try111,type={0},id={1},UserOrGroupID={2}", objver.Type, objver.ID, uoug.UserOrGroupID));
                                            //var perm = aclc.GetACEByUserOrGroupID(uoug.UserOrGroupID, false);
                                            //Writelog(string.Format("in Lognotices,big catch,first little try222,type={0},id={1},vaultname={2}", objver.Type, objver.ID, vault.Name));
                                            //var url =
                                            //    string.Format(
                                            //        "user1,AttachObjectsPermission={0},DeletePermission={1},ChangePermissionsPermission={2},EditPermission={3},ReadPermission={4},UserOrGroupID={5},CustomACL={6},ID={7}",
                                            //        perm.AttachObjectsPermission, perm.DeletePermission,
                                            //        perm.ChangePermissionsPermission, perm.EditPermission, perm.ReadPermission, uoug.UserOrGroupID, perms.CustomACL, objver.ID);
                                            //Writelog(string.Format("url:{0}", url)); //{"Id":1,"Name":"小白"}
                                            //if (Checkperm(perm)) continue;
                                            var lu = new Lookup {
                                                Item = uoug.UserOrGroupID
                                            };
                                            if (userIds.GetLookupIndexByItem(lu.Item) < 0)
                                            {
                                                userIds.Add(-1, lu);
                                            }
                                        }
                                        catch (Exception ex1)
                                        {
                                            Writelog(string.Format("in Lognotices,big catch,first little catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name, ex1.Message));
                                        }
                                    }
                                    #endregion deal with MFUserOrUserGroupTypeUserAccount
                                    #region deal with MFUserOrUserGroupTypeUserGroup
                                    else if (uoug.UserOrGroupType == MFUserOrUserGroupType.MFUserOrUserGroupTypeUserGroup)
                                    {
                                        try
                                        {
                                            Writelog(string.Format("in Lognotices,big catch,second little try 111,type={0},id={1},UserOrGroupID={2},acek.UserOrGroupID={3}", objver.Type, objver.ID, uoug.UserOrGroupID, acek.UserOrGroupID));
                                            //var perm = aclc.GetACEByUserOrGroupID(uoug.UserOrGroupID, true);
                                            //Writelog(string.Format("in Lognotices,big catch,second little try 222,type={0},id={1},vaultname={2}", objver.Type, objver.ID, vault.Name));
                                            //var url =
                                            //   string.Format(
                                            //        "group1,AttachObjectsPermission={0},DeletePermission={1},ChangePermissionsPermission={2},EditPermission={3},ReadPermission={4},UserOrGroupID={5},CustomACL={6},ID={7}",
                                            //        perm.AttachObjectsPermission, perm.DeletePermission,
                                            //        perm.ChangePermissionsPermission, perm.EditPermission, perm.ReadPermission, uoug.UserOrGroupID, perms.CustomACL, objver.ID);
                                            //Writelog(string.Format("url:{0}", url)); //{"Id":1,"Name":"小白"}
                                            //if (Checkperm(perm)) continue;
                                            var retul = GetUsers(vault, uoug.UserOrGroupID);
                                            foreach (var lu in retul)
                                            {
                                                if (userIds.GetLookupIndexByItem(lu.Item) < 0)
                                                {
                                                    userIds.Add(-1, lu);
                                                }
                                            }
                                        }
                                        catch (Exception ex2)
                                        {
                                            Writelog(string.Format("in Lognotices,big catch,2nd little catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name, ex2.Message));
                                        }
                                    }
                                    #endregion deal MFUserOrUserGroupTypeUserGroup
                                    //    Writelog(
                                    //string.Format(
                                    //    "in LogCheckInNotice,catch'catch,UserOrGroupID={0},IsPseudoUser={1},Type={2},ID={3},UserOrGroupID={4},UserOrGroupType={5}",
                                    //    acek.UserOrGroupID,
                                    //    acek.IsPseudoUser, objver.Type, objver.ID, uoug.UserOrGroupID, uoug.UserOrGroupType));
                                }
                                continue;
                            }
                            IEnumerable <Lookup> ul = new List <Lookup>();
                            try
                            {
                                var perm = aclc.GetACEByUserOrGroupID(acek.UserOrGroupID, true);
                                var url  =
                                    string.Format(
                                        "group2,AttachObjectsPermission={0},DeletePermission={1},ChangePermissionsPermission={2},EditPermission={3},ReadPermission={4},UserOrGroupID={5},CustomACL={6},ID={7}",
                                        perm.AttachObjectsPermission, perm.DeletePermission,
                                        perm.ChangePermissionsPermission, perm.EditPermission, perm.ReadPermission, acek.UserOrGroupID, perms.CustomACL, objver.ID);
                                Writelog(string.Format("url:{0}", url));
                                if (Checkperm(perm))
                                {
                                    continue;
                                }
                                ul = GetUsers(vault, acek.UserOrGroupID);
                                //  ul = GetUsers(vault, uoug.UserOrGroupID);
                            }
                            catch (Exception exson)
                            {
                                Writelog(
                                    string.Format(
                                        "in Lognotices,catch'catch,UserOrGroupID={0},IsPseudoUser={1},Type={2},ID={3},Message={4}",
                                        acek.UserOrGroupID,
                                        acek.IsPseudoUser, objver.Type, objver.ID, exson.Message));
                            }
                            try
                            {
                                foreach (var lu in ul)
                                {
                                    if (userIds.GetLookupIndexByItem(lu.Item) < 0)
                                    {
                                        userIds.Add(-1, lu);
                                    }
                                }
                            }
                            catch (Exception ex3)
                            {
                                Writelog(string.Format("in Lognotices,big catch,third little catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name, ex3.Message));
                            }
                        }
                        #endregion deal with group
                        else
                        {
                            try
                            {
                                var perm = aclc.GetACEByUserOrGroupID(acek.UserOrGroupID, false);
                                var url  = string.Format(
                                    "user2,AttachObjectsPermission={0},DeletePermission={1},ChangePermissionsPermission={2},EditPermission={3},ReadPermission={4},UserOrGroupID={5},CustomACL={6},ID={7}",
                                    perm.AttachObjectsPermission, perm.DeletePermission,
                                    perm.ChangePermissionsPermission, perm.EditPermission, perm.ReadPermission, acek.UserOrGroupID, perms.CustomACL, objver.ID);
                                Writelog(string.Format("url:{0}", url)); //{"Id":1,"Name":"小白"}
                                if (Checkperm(perm))
                                {
                                    continue;
                                }
                                var lu = new Lookup {
                                    Item = acek.UserOrGroupID
                                };
                                if (userIds.GetLookupIndexByItem(lu.Item) < 0)
                                {
                                    userIds.Add(-1, lu);
                                }
                            }
                            catch (Exception ex4)
                            {
                                Writelog(string.Format("in Lognotices,big catch,4th little catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name, ex4.Message));
                            }
                        }
                    }
                }
                catch (Exception exx)
                {
                    Writelog(string.Format("in Lognotices,in big catch,another catch,type={0},id={1},vaultname={2},exception={3}", objver.Type, objver.ID, vault.Name, exx.Message));
                }
                //   Writelog(string.Format("in Lognotices,end big catch,type={0},id={1},vaultname={2}", objver.Type, objver.ID, vault.Name));
            }
            #endregion no propertydefassignedto
            try
            {
                foreach (Lookup a in userIds)
                {
                    otask.UserIds.Add(a.Item.ToString(CultureInfo.InvariantCulture));
                }
                //Writelog(string.Format("Users Info,type={0},id={1},vaultname={2},counts={3},users={4}",
                //    objver.Type, objver.ID, vault.Name, userIds.Count, userIds.ToString()));

                Logonenotice(vault, otask, server);
            }
            catch (Exception ex)
            {
                Writelog(string.Format("in Lognotices,Logonetask,type={0},id={1},{2}", objver.Type, objver.ID, ex.Message));
            }
            // Writelog(string.Format("in Lognotices,the end,type={0},id={1},vaultname={2}", objver.Type, objver.ID, vault.Name));
        }