/// <summary>
        /// Determines whether the conditions is satisfied.
        /// </summary>
        /// <returns><c>true</c> when conditions are successfully checked; otherwise - <c>false</c>.</returns>
        public virtual bool GetIsMatchedConditions()
        {
            if (!IsMatchConditions || DataSourceFilters.IsNullOrEmpty())
            {
                return(true);
            }
            CoreEntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByUId(ObjectSchemaId);
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, entitySchema.Name)
            {
                UseAdminRights = false
            };

            esq.AddColumn(entitySchema.PrimaryColumn.Name);
            ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, entitySchema, esq, DataSourceFilters);
            if (esq.Filters.Count == 0)
            {
                return(true);
            }
            if (esq.Filters.Count == 1)
            {
                if (esq.Filters[0] is EntitySchemaQueryFilterCollection filterGroup && filterGroup.Count == 0)
                {
                    return(true);
                }
            }
            Entity entity = esq.GetEntity(UserConnection, RecordId);

            return(entity != null);
        }
Esempio n. 2
0
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            if (EntitySchemaUId.Equals(Guid.Empty))
            {
                return(false);
            }
            EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByUId(EntitySchemaUId);

            if (RecordColumnValues.Values.Count == 0)
            {
                return(true);
            }
            var entitySchemaQuery = new EntitySchemaQuery(UserConnection.EntitySchemaManager, entitySchema.Name);

            entitySchemaQuery.UseAdminRights      = false;
            entitySchemaQuery.IgnoreDisplayValues = GlobalAppSettings.FeatureIgnoreDisplayValuesInDataUserTasks;
            entitySchemaQuery.AddAllSchemaColumns();
            if (IsMatchConditions)
            {
                ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, entitySchema, entitySchemaQuery,
                                                           DataSourceFilters);
                bool isEmptyFilter = entitySchemaQuery.Filters.Count == 0;
                if (!isEmptyFilter && entitySchemaQuery.Filters.Count == 1)
                {
                    var filterGroup = entitySchemaQuery.Filters[0] as EntitySchemaQueryFilterCollection;
                    if (filterGroup != null && filterGroup.Count == 0)
                    {
                        isEmptyFilter = true;
                    }
                }
                if (isEmptyFilter)
                {
                    throw new NullOrEmptyException(new LocalizableString("Terrasoft.Core",
                                                                         "ProcessSchemaChangeDataUserTask.Exception.ChangeDataWithEmptyFilter"));
                }
            }
            EntityCollection entityCollection = entitySchemaQuery.GetEntityCollection(UserConnection);

            UpdateEntityCollection(entityCollection, entitySchema);
            return(true);
        }
Esempio n. 3
0
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            EntitySchemaId.CheckArgumentEmpty("EntitySchemaId");
            EntitySchemaManager entitySchemaManager = UserConnection.EntitySchemaManager;
            EntitySchema        entitySchema        = entitySchemaManager.GetInstanceByUId(EntitySchemaId);
            var esq = new EntitySchemaQuery(entitySchemaManager, entitySchema.Name)
            {
                UseAdminRights = false
            };

            esq.AddAllSchemaColumns();
            esq.IgnoreDisplayValues = GlobalAppSettings.FeatureIgnoreDisplayValuesInDataUserTasks;
            ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, entitySchema, esq, DataSourceFilters);
            bool isEmptyFilter = esq.Filters.Count == 0;

            if (!isEmptyFilter && esq.Filters.Count == 1)
            {
                var filterGroup = esq.Filters[0] as EntitySchemaQueryFilterCollection;
                if (filterGroup != null && filterGroup.Count == 0)
                {
                    isEmptyFilter = true;
                }
            }
            if (isEmptyFilter)
            {
                throw new NullOrEmptyException(new LocalizableString("Terrasoft.Core",
                                                                     "ProcessSchemaDeleteDataUserTask.Exception.DeleteDataWithEmptyFilter"));
            }
            EntityCollection entities = esq.GetEntityCollection(UserConnection);

            while (entities.Count > 0)
            {
                Entity entity = entities.First.Value;
                entity.UseAdminRights = false;
                entities.RemoveFirst();
                entity.Delete();
            }
            return(true);
        }
        public virtual EntityCollection GetFilterResultEntityCollection(out Dictionary <string, string> entityColumnMap)
        {
            entityColumnMap = null;
            if (FilterEntitySchemaId.Equals(Guid.Empty))
            {
                return(null);
            }
            var entitySchema = GetEntitySchema(FilterEntitySchemaId);

            if (entitySchema == null)
            {
                return(null);
            }
            var entitySchemaQuery = new EntitySchemaQuery(entitySchema);

            entitySchemaQuery.UseAdminRights = false;
            if (RecordDefValues.FetchMetaPathes == null || RecordDefValues.FetchMetaPathes.Count == 0)
            {
                entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
            }
            else
            {
                entityColumnMap = new Dictionary <string, string>();
                foreach (var columnValue in RecordDefValues.FetchMetaPathes)
                {
                    string columnPath  = entitySchema.GetSchemaColumnPathByMetaPath(columnValue.Value);
                    var    queryColumn = entitySchemaQuery.AddColumn(columnPath);
                    entityColumnMap[columnValue.Value] = queryColumn.Name;
                }
            }
            if (!FilterEntitySchemaId.Equals(Guid.Empty) && DataSourceFilters.IsNotNullOrEmpty())
            {
                ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, entitySchema, entitySchemaQuery,
                                                           DataSourceFilters);
            }
            return(entitySchemaQuery.GetEntityCollection(UserConnection));
        }
Esempio n. 5
0
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            if (EntitySchemaUId == Guid.Empty)
            {
                return(true);
            }
            var deleteRights = !string.IsNullOrEmpty(DeleteRights)
                                ? Json.Deserialize <List <Dictionary <string, object> > >(DeleteRights)
                                : new List <Dictionary <string, object> >(0);
            var addRights = !string.IsNullOrEmpty(AddRights)
                                ? Json.Deserialize <List <Dictionary <string, object> > >(AddRights)
                                : new List <Dictionary <string, object> >(0);

            if (deleteRights.Count == 0 && addRights.Count == 0)
            {
                return(true);
            }
            EntitySchema entitySchema = UserConnection.EntitySchemaManager.FindInstanceByUId(EntitySchemaUId);

            if (entitySchema == null)
            {
                return(true);
            }
            if (!entitySchema.AdministratedByRecords)
            {
                return(true);
            }
            var entitySchemaQuery = new EntitySchemaQuery(entitySchema)
            {
                UseAdminRights = false
            };

            entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
            if (!string.IsNullOrEmpty(DataSourceFilters))
            {
                ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, entitySchema, entitySchemaQuery,
                                                           DataSourceFilters);
                bool isEmptyFilter = entitySchemaQuery.Filters.Count == 0;
                if (!isEmptyFilter && entitySchemaQuery.Filters.Count == 1)
                {
                    var filterGroup = entitySchemaQuery.Filters[0] as EntitySchemaQueryFilterCollection;
                    if (filterGroup != null && filterGroup.Count == 0)
                    {
                        return(true);
                    }
                }
            }
            Select selectQuery        = entitySchemaQuery.GetSelectQuery(UserConnection);
            var    entityRecordIdList = new List <Guid>();

            selectQuery.ExecuteReader(reader => {
                Guid entityRecordId = reader.GetGuid(0);
                entityRecordIdList.Add(entityRecordId);
            });
            DBSecurityEngine dbSecurityEngine    = UserConnection.DBSecurityEngine;
            string           schemaName          = entitySchema.Name;
            bool             useDenyRecordRights = entitySchema.UseDenyRecordRights;

            foreach (Guid entityRecordId in entityRecordIdList)
            {
                foreach (Dictionary <string, object> deleteRight in deleteRights)
                {
                    DeleteRecordRight(dbSecurityEngine, entityRecordId, schemaName, deleteRight);
                }
                for (int i = addRights.Count - 1; i >= 0; i--)
                {
                    AddRecordRight(dbSecurityEngine, entityRecordId, schemaName, useDenyRecordRights, addRights[i]);
                }
            }
            return(true);
        }
Esempio n. 6
0
        public virtual List <KeyValuePair <Guid, string> > GetAdminUnitIds(Dictionary <string, object> recordRight)
        {
            BaseProcessSchemaElement userTask = GetSchemaElement();
            var parametersMetaInfo            = userTask as IProcessParametersMetaInfo;
            var parameters   = parametersMetaInfo.ForceGetParameters();
            var source       = (ProcessSchemaParameterValueSource)(int.Parse((string)recordRight["Source"]));
            var value        = (string)recordRight["Value"];
            var adminUnitIds = new List <KeyValuePair <Guid, string> >();

            switch ((string)recordRight["Grantee"])
            {
            case "Role":
                switch (source)
                {
                case ProcessSchemaParameterValueSource.Script:
                    const string granteeDescription = "Role (script)";
                    var          parameterUId       = new Guid((string)recordRight["Id"]);
                    if (UseFlowEngineMode)
                    {
                        var parameterMapInfo = new ProcessParameterMapInfo(SchemaElementUId.ToString(),
                                                                           parameterUId.ToString());

                        // TODO CRM-40288 rewrite using GetParameterValue method
                        var valueProvider  = (Owner as ProcessComponentSet).ParameterValueProvider;
                        var parameterValue = valueProvider.GetParameterValue(parameterMapInfo);
                        adminUnitIds.Add(
                            new KeyValuePair <Guid, string>((Guid)parameterValue, granteeDescription));
                    }
                    else
                    {
                        foreach (ProcessSchemaParameter parameter in parameters)
                        {
                            if (parameter.UId.Equals(parameterUId))
                            {
                                adminUnitIds.Add(new KeyValuePair <Guid, string>(
                                                     (Guid)this.GetPropertyValue(parameter.Name), granteeDescription));
                                break;
                            }
                        }
                    }
                    break;

                case ProcessSchemaParameterValueSource.ConstValue:
                    adminUnitIds.Add(new KeyValuePair <Guid, string>(new Guid(value), "Role (constant)"));
                    break;

                case ProcessSchemaParameterValueSource.Mapping:
                    object paramValue = Owner.GetParameterValueByMetaPath((string)recordRight["RuntimeValue"]);
                    if (paramValue != null)
                    {
                        adminUnitIds.Add(new KeyValuePair <Guid, string>((Guid)paramValue, "Role (parameter)"));
                    }
                    break;

                case ProcessSchemaParameterValueSource.SystemValue:
                    object systemValue = UserConnection.SystemValueManager.GetValue(UserConnection,
                                                                                    new Guid(value));
                    if (systemValue != null)
                    {
                        adminUnitIds.Add(
                            new KeyValuePair <Guid, string>((Guid)systemValue, "Role (system value)"));
                    }
                    break;

                case ProcessSchemaParameterValueSource.SystemSetting:
                    object systemSettings = Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection,
                                                                                              value);
                    if (systemSettings != null)
                    {
                        adminUnitIds.Add(
                            new KeyValuePair <Guid, string>((Guid)systemSettings, "Role (system setting)"));
                    }
                    break;
                }
                break;

            case "Employee":
                Guid contactId = Guid.Empty;
                switch (source)
                {
                case ProcessSchemaParameterValueSource.Script:
                    var parameterUId = new Guid((string)recordRight["Id"]);
                    if (UseFlowEngineMode)
                    {
                        var parameterMapInfo = new ProcessParameterMapInfo(SchemaElementUId.ToString(),
                                                                           parameterUId.ToString());

                        // TODO CRM-40288 rewrite using GetParameterValue method
                        var valueProvider  = (Owner as ProcessComponentSet).ParameterValueProvider;
                        var parameterValue = valueProvider.GetParameterValue(parameterMapInfo);
                        contactId = (Guid)parameterValue;
                    }
                    else
                    {
                        foreach (ProcessSchemaParameter parameter in parameters)
                        {
                            if (parameter.UId.Equals(parameterUId))
                            {
                                contactId = (Guid)this.GetPropertyValue(parameter.Name);
                                break;
                            }
                        }
                    }
                    break;

                case ProcessSchemaParameterValueSource.ConstValue:
                    contactId = new Guid(value);
                    break;

                case ProcessSchemaParameterValueSource.Mapping:
                    object paramValue = Owner.GetParameterValueByMetaPath((string)recordRight["RuntimeValue"]);
                    if (paramValue != null)
                    {
                        contactId = (Guid)paramValue;
                    }
                    break;

                case ProcessSchemaParameterValueSource.SystemValue:
                    object systemValue = UserConnection.SystemValueManager.GetValue(UserConnection, new Guid(value));
                    if (systemValue != null)
                    {
                        contactId = (Guid)systemValue;
                    }
                    break;

                case ProcessSchemaParameterValueSource.SystemSetting:
                    object systemSettings = Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, value);
                    if (systemSettings != null)
                    {
                        contactId = (Guid)systemSettings;
                    }
                    break;
                }
                if (contactId == Guid.Empty)
                {
                    break;
                }
                var adminUnitIdSelect = (Select) new Select(UserConnection)
                                        .Column("Id")
                                        .From("SysAdminUnit")
                                        .Where("ContactId").IsEqual(new QueryParameter(contactId));
                using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
                    using (IDataReader dataReader = adminUnitIdSelect.ExecuteReader(dbExecutor)) {
                        if (dataReader.Read())
                        {
                            Guid adminUnitId = UserConnection.DBTypeConverter.DBValueToGuid(dataReader[0]);
                            adminUnitIds.Add(new KeyValuePair <Guid, string>(adminUnitId, $"Employee \"{contactId}\""));
                        }
                    }
                }
                break;

            case "DataSourceFilter":
                EntitySchema contactSchema     = UserConnection.EntitySchemaManager.FindInstanceByName("Contact");
                var          entitySchemaQuery = new EntitySchemaQuery(contactSchema)
                {
                    UseAdminRights = false
                };
                entitySchemaQuery.AddAllSchemaColumns();
                entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
                var dataSourceFilters = (string)recordRight["Value"];
                if (!string.IsNullOrEmpty(dataSourceFilters))
                {
                    ProcessUserTaskUtilities.SpecifyESQFilters(UserConnection, this, contactSchema, entitySchemaQuery,
                                                               dataSourceFilters);
                }
                var entityCollection   = entitySchemaQuery.GetEntityCollection(UserConnection);
                var contactIdParameter = new QueryParameter("ContactId", null, "Guid");
                var adminsUnitIdSelect = (Select) new Select(UserConnection)
                                         .Column("Id")
                                         .From("SysAdminUnit")
                                         .Where("ContactId").IsEqual(contactIdParameter);
                adminsUnitIdSelect.InitializeParameters();
                foreach (Entity entity in entityCollection)
                {
                    contactIdParameter.Value = entity.PrimaryColumnValue;
                    using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
                        using (IDataReader dataReader = adminsUnitIdSelect.ExecuteReader(dbExecutor)) {
                            if (dataReader.Read())
                            {
                                Guid adminUnitId = UserConnection.DBTypeConverter.DBValueToGuid(dataReader[0]);
                                adminUnitIds.Add(new KeyValuePair <Guid, string>(adminUnitId,
                                                                                 $"Selected employees {(Guid)contactIdParameter.Value}"));
                            }
                        }
                    }
                }
                break;
            }
            return(adminUnitIds);
        }