Motori delle regole del router di processo

Il router di processi può usare uno o più motori di regole per elaborare i dati e prendere decisioni sui processi e i ruoli di lavoro. Questo documento illustra le operazioni eseguite dai motori delle regole e il motivo per cui è possibile applicarli nell'implementazione.

Panoramica del motore regole

Il controllo del comportamento dell'implementazione può spesso includere processi decisionali complessi. Il router del processo offre un modo flessibile per richiamare il comportamento a livello di codice usando vari motori di regole. I motori delle regole del router di processo in genere accettano un set di etichette definite su oggetti quali un processo, una coda o un ruolo di lavoro come input, applicare la regola e produrre un output.

A seconda della posizione in cui si applicano le regole nel router processo, il risultato può variare. Ad esempio, un criterio di classificazione può scegliere un ID coda in base alle etichette definite nell'input di un processo. In un altro esempio, i criteri di distribuzione possono trovare il ruolo di lavoro migliore usando una regola di assegnazione dei punteggi personalizzata.

Tipi di motore regole

I tipi di motore regole seguenti sono disponibili in Job Router per offrire flessibilità nella modalità di elaborazione dei processi.

Regola statica: consente di specificare un valore statico, ad esempio la selezione di un ID coda specifico.

Regola di espressione: usa il linguaggio PowerFx per definire la regola come espressione inline.

Regola della funzione di Azure: consente al router del processo di passare le etichette di input come payload a una funzione di Azure e rispondere con un valore di output.

Regola webhook: consente al router del processo di passare le etichette di input come payload a un webhook e rispondere con un valore di output.

Regola di mapping diretta: accetta le etichette di input in un processo e restituisce un set di selettori di lavoro o coda con gli stessi valori e chiave. Questa operazione deve essere usata solo in ConditionalQueueSelectorAttachment o ConditionalWorkerSelectorAttachment.

Esempio: usare una regola statica per impostare la priorità di un processo

In questo esempio , StaticRouterRuleche è un sottotipo di RouterRule può essere usato per impostare la priorità di tutti i processi, che usano questo criterio di classificazione.

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions(classificationPolicyId: "my-policy-id")
    {
        PrioritizationRule = new StaticRouterRule(new RouterValue(5))
    });
await administrationClient.path("/routing/classificationPolicies/{classificationPolicyId}", "my-policy-id").patch({
    body: {
        prioritizationRule: { kind: "static", value: 5 }
    },
    contentType: "application/merge-patch+json"
  });
administration_client.upsert_classification_policy(
    classification_policy_id = "my-policy-id",
    prioritization_rule = StaticRouterRule(value = 5))
administrationClient.createClassificationPolicy(new CreateClassificationPolicyOptions("my-policy-id")
    .setPrioritizationRule(new StaticRouterRule(new RouterValue(5))));

Esempio: usare una regola di espressione per impostare la priorità di un processo

In questo esempio un oggetto ExpressionRouterRule che è un sottotipo di RouterRule, valuta un'espressione PowerFX per impostare la priorità di tutti i processi che usano questo criterio di classificazione.

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions(classificationPolicyId: "my-policy-id")
    {
        PrioritizationRule = new ExpressionRouterRule(expression: "If(job.Escalated = true, 10, 5)") // this will check whether the job has a label "Escalated" set to "true"
    });
await administrationClient.path("/routing/classificationPolicies/{classificationPolicyId}", "my-policy-id").patch({
    body: {
        prioritizationRule: {
            kind: "expression",
            expression: "If(job.Escalated = true, 10, 5)"
        }
    },
    contentType: "application/merge-patch+json"
});
administration_client.upsert_classification_policy(
    classification_policy_id = "my-policy-id",
    prioritization_rule = ExpressionRouterRule(expression = "If(job.Urgent = true, 10, 5)"))
administrationClient.createClassificationPolicy(
    new CreateClassificationPolicyOptions("my-policy-id")
        .setPrioritizationRule(new ExpressionRouterRule("If(job.Urgent = true, 10, 5)")));

Passaggi successivi