/// <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); }
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); }
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)); }
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); }
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); }