public void GetEnableRules(ICustomWorkflowContext context)
        {
            #region Parameters check

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            #endregion

            var entityName  = context.GetArgumentValue(EntityName);
            var objectIdArg = context.GetArgumentValue(ObjectId);

            context.SetArgumentValue(Result, "[]");

            if (objectIdArg == null || !Guid.TryParse(objectIdArg, out var objectId))
            {
                objectId = Guid.Empty;
            }

            var enableRuleProviderTypes = GetType().Assembly.GetExportedTypes().Where(t => typeof(IEnableRuleProvider).IsAssignableFrom(t) && !t.IsAbstract).ToList();

            IEnableRuleProvider ruleProvider = null;

            foreach (var ruleProviderType in enableRuleProviderTypes)
            {
                var constructor = ruleProviderType.GetConstructor(new[] { typeof(ICustomWorkflowContext) });

                if (constructor == null)
                {
                    throw new InvalidPluginExecutionException($"The rule provider {ruleProviderType} must have one, and only one, public constructor.");
                }

                ruleProvider = (IEnableRuleProvider)constructor.Invoke(new object[] { context });

                if (ruleProvider.EntityName == entityName)
                {
                    break;
                }

                ruleProvider = null;
            }

            if (ruleProvider == null)
            {
                return;
            }

            var enableRules = ruleProvider.GetEnableStatus(objectId);

            var resultString = JsonConvert.SerializeObject(enableRules);

            context.SetArgumentValue(Result, resultString);
        }
示例#2
0
 protected EnableRuleProvider(ICustomWorkflowContext context)
 {
     Context = context;
 }