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));
        }
예제 #3
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);
        }