Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #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);
        }