protected ProcessParameterMapInfo GetProcessParameterMapInfo(Process process, string macros) { string elementId = GetMacrosValueByPattern(_elementPattern, macros) ?? GetDefaultElementId(process); Match parameterMatch = Regex.Match(macros, _parameterPattern); string columnUId = GetMacrosValueByPattern(_entityColumnPattern, macros); var parameterMapInfo = new ProcessParameterMapInfo(elementId, parameterMatch.Value); if (!string.IsNullOrEmpty(columnUId)) { parameterMapInfo.SubParameterMetaPath = columnUId; } return(parameterMapInfo); }
private string GetEntityParameterDisplayValue(ProcessSchemaParameter parameter, object parameterValue, ProcessParameterMapInfo parameterMapInfo) { EntitySchemaColumn entityColumn = parameter.ReferenceSchema.GetSchemaColumnByMetaPath(parameterMapInfo.SubParameterMetaPath); return(entityColumn.DataValueType.GetDisplayValue(parameterValue)); }
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); }