private static Dictionary <string, object> GetSchemaParameterValues(UserConnection userConnection, BaseProcessSchemaElement baseSchemaElement, IEnumerable <CompleteParameter> completeParameters) { var schemaParameterValues = new Dictionary <string, object>(); var schemaElement = (IProcessParametersMetaInfo)baseSchemaElement; ProcessSchemaParameterCollection schemaElementParameters = schemaElement.ForceGetParameters(); foreach (CompleteParameter parameter in completeParameters) { ProcessSchemaParameter userTaskParameter = schemaElementParameters.FindByName(parameter.key); if (userTaskParameter == null) { continue; } var dataParameter = new Parameter { Value = parameter.value }; Terrasoft.Core.DataValueType dataValueType = userTaskParameter.DataValueType; if (dataValueType is DateTimeDataValueType && dataParameter.Value == null) { dataParameter.Value = "null"; } object parameterValue = dataParameter.GetValue(userConnection, userTaskParameter.DataValueType); schemaParameterValues[userTaskParameter.Name] = parameterValue; } return(schemaParameterValues); }
private static LocalizableString GetSchemaElementCaption(ProcessActivity processElement) { BaseProcessSchemaElement schemaElement = processElement.GetSchemaElement(); LocalizableString schemaElementCaption = schemaElement.Caption; return(LocalizableString.IsNullOrEmpty(schemaElementCaption) ? new LocalizableString("Terrasoft.Core", string.Concat("ProcessSchema", processElement.Schema.Name, ".Caption")) : schemaElementCaption); }
private EntitySchema FindSourceEntitySchema() { EntitySchemaManager entitySchemaManager = UserTask.UserConnection.EntitySchemaManager; BaseProcessSchemaElement userTaskSchema = UserTask.GetSchemaElement(); var parametersMetaInfo = userTaskSchema as IProcessParametersMetaInfo; EntitySchema schema = null; if (parametersMetaInfo != null) { ProcessSchemaParameterCollection parameters = parametersMetaInfo.ForceGetParameters(); ProcessSchemaParameter parameter = parameters.GetByName("EmailTemplateEntityId"); schema = entitySchemaManager.FindInstanceByUId(parameter.ReferenceSchemaUId); } return(schema); }
public int CompleteExecution(Guid procElUId, List <CompleteParameter> parameters) { UserConnection userConnection = UserConnection; IProcessEngine processEngine = userConnection.ProcessEngine; try { BaseProcessSchemaElement schemaElement = processEngine.GetSchemaElement(procElUId); Dictionary <string, object> nameValues = GetSchemaParameterValues(userConnection, schemaElement, parameters); ProcessDescriptor descriptor = processEngine.CompleteExecuting(procElUId, nameValues); return(descriptor.WaitingUserTasksCount); } catch (Terrasoft.Common.ItemNotFoundException) { _log.Warn($"Attempt to complete the process element with Id '{procElUId}', but that element was not found."); return(-1); } }
public List <ResponceEntryPoints> GetProcessEntryPointsData(string entitySchemaUId, string entityId) { entitySchemaUId.CheckArgumentNullOrEmpty("entitySchemaUId"); entityId.CheckArgumentNullOrEmpty("entityId"); UserConnection userConnection = UserConnection; var response = new List <ResponceEntryPoints>(); var entryPointSelect = (Select) new Select(userConnection) .Column("SysProcessElementDataId") .From("EntryPoint") .Where("EntitySchemaUId").IsEqual(Column.Parameter(new Guid(entitySchemaUId))) .And("EntityId").IsEqual(Column.Parameter(new Guid(entityId))) .And("IsActive").IsEqual(Column.Parameter(true)); IProcessEngine processEngine = userConnection.IProcessEngine; using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) { using (IDataReader reader = entryPointSelect.ExecuteReader(dbExecutor)) { DBTypeConverter dbTypeConverter = userConnection.DBTypeConverter; while (reader.Read()) { Guid elementId = dbTypeConverter.DBValueToGuid(reader[0]); var sysProcessElementData = new SysProcessElementData(userConnection); if (!sysProcessElementData.FetchFromDB(elementId)) { continue; } Guid sysProcessId = sysProcessElementData.SysProcessId; Process process = processEngine.FindProcessByUId(sysProcessId.ToString(), true); if (process == null) { continue; } var processActivity = (ProcessActivity)process.FindFlowElementByUId(elementId); BaseProcessSchemaElement schemaElement = processActivity.GetSchemaElement(); response.Add(new ResponceEntryPoints { id = elementId.ToString(), caption = schemaElement.Caption }); } } } return(response); }
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); }