# Class DeactivatedWorkflowRuleProvider OptimaJet.Workflow.Core.Runtime.DeactivatedWorkflowRuleProvider Wraps an [IWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) and allows it to be enabled or disabled dynamically. Namespace: [OptimaJet.Workflow.Core.Runtime](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/) ```csharp public sealed class DeactivatedWorkflowRuleProvider : IWorkflowRuleProvider ``` ## Type Hierarchy - DeactivatedWorkflowRuleProvider Current type - Implemented interfaces - [IWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) ## Constructors `public DeactivatedWorkflowRuleProvider(IWorkflowRuleProvider activatedRuleProvider, Func getDisabled)` Initializes a new dynamically switchable wrapper around a workflow rule provider. ### Parameters | Name | Type | Description | | --- | --- | --- | | `activatedRuleProvider` | `IWorkflowRuleProvider` | The provider to which calls are forwarded while `getDisabled` returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). | | `getDisabled` | `Func` | The predicate evaluated for every method call. A result of [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) selects [EmptyWorkflowRuleProvider.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/EmptyWorkflowRuleProvider/); a result of [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) selects `activatedRuleProvider`. | ## Methods `public List GetRules(string schemeCode, NamesSearchType namesSearchType)` Gets the rule names implemented by this provider for a process scheme. ### Parameters | Name | Type | Description | | --- | --- | --- | | `schemeCode` | `String` | The effective process scheme code used to resolve scheme-specific rules, or [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) when the caller has no process scheme context. | | `namesSearchType` | `NamesSearchType` | The filtering mode. [NamesSearchType.All](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/NamesSearchType/) includes rules excluded by provider-specific exclusion settings and is used for runtime rule resolution. [NamesSearchType.NotExcluded](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/NamesSearchType/) omits those rules, for example when the Designer builds its list of available rules. | ### Returns | Type | Description | | --- | --- | | `List` | A non-null list of rule names implemented by this provider for the requested scheme and filtering mode. | `public bool Check(ProcessInstance processInstance, WorkflowRuntime runtime, string identityId, string ruleName, string parameter)` Determines whether a workflow participant identity satisfies a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the evaluation context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the evaluation. | | `identityId` | `String` | The application-defined value identifying the workflow participant to evaluate, such as a login, user name, database identifier, or another identifier understood by the provider. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard restriction evaluation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) if `identityId` belongs to the set defined by the rule; otherwise, [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `public Task CheckAsync(ProcessInstance processInstance, WorkflowRuntime runtime, string identityId, string ruleName, string parameter, CancellationToken token)` Asynchronously determines whether a workflow participant identity satisfies a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the evaluation context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the evaluation. | | `identityId` | `String` | The application-defined value identifying the workflow participant to evaluate, such as a login, user name, database identifier, or another identifier understood by the provider. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard restriction evaluation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | | `token` | `CancellationToken` | The token supplied by the current workflow operation to observe cancellation. | ### Returns | Type | Description | | --- | --- | | `Task` | A task whose result is [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) if `identityId` belongs to the set defined by the rule; otherwise, [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `public IEnumerable GetIdentities(ProcessInstance processInstance, WorkflowRuntime runtime, string ruleName, string parameter)` Gets all workflow participant identities that satisfy a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the lookup context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the lookup. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard actor calculation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | ### Returns | Type | Description | | --- | --- | | `IEnumerable` | A non-null sequence of application-defined workflow participant identities. Each value must use the same identity representation accepted by [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `public Task> GetIdentitiesAsync(ProcessInstance processInstance, WorkflowRuntime runtime, string ruleName, string parameter, CancellationToken token)` Asynchronously gets all workflow participant identities that satisfy a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the lookup context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the lookup. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard actor calculation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | | `token` | `CancellationToken` | The token supplied by the current workflow operation to observe cancellation. | ### Returns | Type | Description | | --- | --- | | `Task` | A task whose result is a non-null sequence of application-defined workflow participant identities. Each value must use the same identity representation accepted by [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `public bool IsCheckAsync(string ruleName, string schemeCode)` Indicates whether the runtime should call [IWorkflowRuleProvider.CheckAsync(ProcessInstance, WorkflowRuntime, string, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) instead of [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) for a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `schemeCode` | `String` | The effective process scheme code used to resolve the rule. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.CheckAsync(ProcessInstance, WorkflowRuntime, string, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/); [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks This choice is independent of the identity lookup mode returned by [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). `public bool IsGetIdentitiesAsync(string ruleName, string schemeCode)` Indicates whether the runtime should call [IWorkflowRuleProvider.GetIdentitiesAsync(ProcessInstance, WorkflowRuntime, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) instead of [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) for a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `schemeCode` | `String` | The effective process scheme code used to resolve the rule. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.GetIdentitiesAsync(ProcessInstance, WorkflowRuntime, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/); [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks This choice is independent of the rule-checking mode returned by [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). ## Remarks The wrapper evaluates the predicate supplied to the constructor on every method call. When the predicate returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool), the call is forwarded unchanged to the configured provider. When it returns [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool), the configured provider is bypassed and the call is delegated to [EmptyWorkflowRuleProvider.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/EmptyWorkflowRuleProvider/). Disabling the wrapper does not modify the configured provider. While disabled, the wrapper exposes no rule names, synchronous rule checks return [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool), identity lookup returns an empty sequence, and asynchronous capability checks return [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). Direct calls to the asynchronous check or identity lookup methods are delegated to [EmptyWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/EmptyWorkflowRuleProvider/) and throw [NotImplementedException](https://learn.microsoft.com/dotnet/api/system.notimplementedexception). [Previous DeactivatedWorkflowActionProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/DeactivatedWorkflowActionProvider/) [Next DefaultRuntimeIdProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/DefaultRuntimeIdProvider/)