Condividi tramite


Creare un progetto motore regole di App per la logica di Azure usando Visual Studio Code (anteprima)

Si applica: App per la logica di Azure (Standard)

Importante

Questa funzionalità è in anteprima ed è soggetta alle Condizioni supplementari per l'utilizzo per le anteprime di Microsoft Azure.

Quando si vuole integrare la logica di business con i flussi di lavoro Standard in App per la logica di Azure, è possibile creare e compilare un progetto motore regole App per la logica di Azure usando Visual Studio Code. Le regole regolano la logica di business per il funzionamento dei processi aziendali.

Questa guida pratica descrive come creare un progetto motore regole di App per la logica di Azure:

  • Prerequisiti e configurazione per la creazione del progetto motore regole App per la logica di Azure, inclusa la creazione delle regole business per il progetto con Microsoft Rules Composer.

  • Esportare le regole esistenti da Microsoft BizTalk Server, se presenti.

  • Creare un progetto di app per la logica Standard per il motore regole App per la logica di Azure usando Visual Studio Code.

Prerequisiti

Prima di creare il progetto

Per garantire un progetto di motore regole riuscito, esaminare ed eseguire le attività e le procedure consigliate generali seguenti:

  1. Determinare il modo in cui le regole business rientrano nei processi aziendali.

  2. Pianificare come incorporare regole business nell'applicazione.

  3. Identificare la logica di business che si vuole rappresentare con le regole nell'applicazione.

    Il termine "logica di business" può fare riferimento a molte cose. Ad esempio, la logica di business potrebbe essere "Gli ordini di acquisto maggiori di 500 dollari richiedono l'approvazione del manager".

  4. Identificare le origini dati per gli elementi della regola. Facoltativamente, è possibile definire i vocabolari, ovvero la denominazione specifica del dominio che rappresenta le associazioni sottostanti.

  5. Definire le regole da usare dalle definizioni del vocabolario o direttamente dai data binding. Da queste regole creare un set di regole che rappresenta la logica di business.

Esportare regole da Microsoft BizTalk Server

Per riutilizzare le regole esistenti da Microsoft BizTalk Server, è possibile esportarle. Tuttavia, i fatti del database non sono attualmente supportati. Prima di esportare le regole, rimuoverle o effettuare il refactoring in altri tipi di fatti usando Microsoft BizTalk Rules Composer.

  1. Da Microsoft BizTalk Server avviare la Distribuzione guidata motore regole di business.

  2. Nella pagina Distribuzione guidata motore regole selezionare Avanti.

  3. Nella pagina Attività di distribuzione selezionare Esporta criteri/vocabolario nel file dal database e selezionare Avanti.

  4. Nell'elenco Nome SQL Server della pagina Archivio criteri selezionare SQL Server. Nell'elenco Database di configurazione nel server selezionato selezionare BizTalkRuleEngineDb e quindi selezionare Avanti.

  5. Nella pagina Esporta criteri/vocabolario selezionare i criteri desiderati dall'elenco Criteri. Per trovare e scegliere il file di definizione, selezionare Sfoglia.

  6. Al termine, selezionare Avanti.

  7. Confermare le informazioni sul server, il database e i criteri o sul vocabolario e selezionare Avanti.

  8. Al termine dell'importazione o dell'esportazione, selezionare Avanti.

  9. Esaminare lo stato di completamento per l'importazione o l'esportazione e selezionare Fine.

Creare un progetto motore regole di App per la logica di Azure

  1. Nella barra delle attività di Visual Studio Code selezionare l'icona di Azure. (Tastiera: MAIUSC+ALT+A)

  2. Nella finestra di Azure visualizzata, sulla barra degli strumenti della sezione Area di lavoro, dal menu App per la logica di Azure, scegliere Crea nuova area di lavoro per l'app per la logica.

    Screenshot che mostra Visual Studio Code, finestra di Azure, barra degli strumenti della sezione Area di lavoro e opzione selezionata per Creare nuova area di lavoro per l'app per la logica.

  3. Nella casella Seleziona cartella, passare a e selezionare la cartella locale creata per il progetto.

  4. Quando viene visualizzata la casella di richiesta Crea nuova area di lavoro per l'app per la logica, specificare un nome per l'area di lavoro:

    Screenshot che mostra Visual Studio Code con la richiesta di immettere il nome dell'area di lavoro.

    Questo esempio continua con MyLogicAppRulesWorkspace.

  5. Quando viene visualizzata la casella di richiesta Selezionare un modello di progetto per l'area di lavoro per l'app per la logica, selezionare App per la logica con progetto motore regole (anteprima).

    Screenshot che mostra Visual Studio Code con la richiesta di selezionare il modello di progetto per l'area di lavoro per l'app per la logica.

  6. Seguire le istruzioni successive per specificare i valori di esempio seguenti:

    Articolo Valore di esempio
    Nome della funzione per il progetto di funzioni RulesFunction
    Nome dello spazio dei nomi per il progetto di funzioni Contoso.Enterprise
    Modello flusso di lavoro:
    - Flusso di lavoro con stato
    - Flusso di lavoro senza stato
    Flusso di lavoro con stato
    Nome flusso di lavoro MyRulesWorkflow
  7. Selezionare Apri nella finestra corrente.

    Al termine di questo passaggio, Visual Studio Code crea l'area di lavoro, che include un progetto di funzioni e un progetto motore regole dell'app per la logica, ad esempio:

    Screenshot che mostra Visual Studio Code con l'area di lavoro creata.

    Nodo Descrizione
    <workspace-name> Contiene sia il progetto di progetto funzione che il progetto di flusso di lavoro dell'app per la logica.
    Funzione Contiene gli artefatti per il progetto di funzione. Ad esempio, il <file function-name>.cs è il file di codice in cui è possibile creare il codice.
    App per la logica Contiene gli artefatti per il progetto del motore regole dell'app per la logica, incluso un flusso di lavoro.

Scrivere il codice del motore regole

  1. Nell'area di lavoro espandere il nodo Funzioni, se non è già espanso.

  2. Aprire il <file function-name>.cs denominato RulesFunction.cs in questo esempio.

    Per impostazione predefinita, questo file contiene codice di esempio con gli elementi di codice seguenti, insieme ai valori di esempio forniti in precedenza, se appropriati:

    • Nome spazio dei nomi
    • Nome classe
    • Nome della funzione
    • Parametri di funzione
    • Tipo restituito
    • Tipo complesso

    L'esempio seguente mostra il codice di esempio completo per la funzione denominata RulesFunction:

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso.Enterprise
    {
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;
        using Microsoft.Azure.Functions.Extensions.Workflows;
        using Microsoft.Azure.WebJobs;
        using Microsoft.Azure.Workflows.RuleEngine;
        using Microsoft.Extensions.Logging;
        using System.Xml;
    
        /// <summary>
        /// Represents the RulesFunction flow invoked function.
        /// </summary>
        public class RulesFunction
        {
            private readonly ILogger<RulesFunction> logger;
    
            public RulesFunction(ILoggerFactory loggerFactory)
            {
                logger = loggerFactory.CreateLogger<RulesFunction>();
            }
    
            /// <summary>
            /// Execute the logic app workflow.
            /// </summary>
            /// <param name="ruleSetName">The ruleset name.</param>
            /// <param name="documentType">The document type for the input XML.</param>
            /// <param name="inputXml">The input XML type fact.</param>
            /// <param name="purchaseAmount">The purchase amount value used to create a .NET fact.</param>
            /// <param name="zipCode">The zip code value used to create a .NET fact.</param>
            [FunctionName("RulesFunction")]
            public Task<RuleExecutionResult> RunRules([WorkflowActionTrigger] string ruleSetName, string documentType, string inputXml, int purchaseAmount, string zipCode)
            {
                /***** Summary of steps below *****
                * 1. Get the ruleset to execute.
                * 2. Check if the ruleset was successfully retrieved.
                * 3. Create the rules engine object.
                * 4. Create TypedXmlDocument facts for all XML document facts.
                * 5. Initialize .NET facts.
                * 6. Execute rules engine.
                * 7. Retrieve relevant updates facts and send them back.
                */
    
                try
                {
                    // Get the ruleset based on the ruleset name.
                     var ruleExplorer = new FileStoreRuleExplorer();
                     var ruleSet = ruleExplorer.GetRuleSet(ruleSetName);
    
                    // Check if ruleset exists.
                    if(ruleSet == null)
                    {
                        // Log an error if ruleset not found.
                        this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)");
                        throw new Exception($"RuleSet instance for '{ruleSetName}' was not found.");
                    }
    
                    // Create rules engine instance.
                    var ruleEngine = new RuleEngine(ruleSet: ruleSet);
    
                    // Create one or more typedXmlDocument facts from one or more input XML documents.
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(inputXml);
                    var typedXmlDocument = new TypedXmlDocument(documentType, doc);
    
                    // Initialize .NET facts.
                    var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode);
    
                    // Provide facts and run the rules engine.
                    ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase });
    
                    // Send back the relevant results (facts).
                    var updatedDoc = typedXmlDocument.Document as XmlDocument;
                    var ruleExecutionOutput = new RuleExecutionResult()
                    {
                        XmlDoc = updatedDoc.OuterXml,
                        PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax()
                    };
    
                    return Task.FromResult(ruleExecutionOutput);
                }
                catch(RuleEngineException ruleEngineException)
                {
                    // Log any rules engine exceptions.
                    this.logger.LogCritical(ruleEngineException.ToString());
                    throw;
                }
            }
    
            /// <summary>
            /// Results from rules execution
            /// </summary>
            public class RuleExecutionResult
            {
                /// <summary>
                /// Rules updated XML document
                /// </summary>
                public string XmlDoc { get; set;}
    
                /// <summary>
                /// Purchase amount after tax
                /// </summary>
                public int PurchaseAmountPostTax { get; set;}
            }
        }
    }
    

    La definizione di funzione per RulesFunction include un metodo predefinito RunRules che è possibile usare per iniziare. Questo metodo di esempio RunRules illustra come passare i parametri al motore regole di App per la logica di Azure. In questo esempio, il metodo passa il nome del set di regole, il tipo di documento di input, un fatto XML e altri valori per un'ulteriore elaborazione.

    Il file <function-name>.cs include anche l'interfaccia ILogger, che fornisce il supporto per la registrazione degli eventi in una risorsa di Application Insights. È possibile inviare informazioni di tracciamento ad Application Insights e archiviare tali informazioni insieme a quelle dei flussi di lavoro, ad esempio:

    private readonly ILogger<RulesFunction> logger;
    
        public RulesFunction(ILoggerFactory loggerFactory)
        {
            logger = loggerFactory.CreateLogger<RulesFunction>();
        }
        <...>
    
    

    Il motore regole App per la logica di Azure funziona come descritto nei passaggi seguenti:

    1. Il motore usa l'oggetto FileStoreRuleExplorer per accedere al set di regole. Il file del set di regole viene archiviato nella directory Rules per l'app per la logica Standard.

      Per questo esempio, il file del set di regole è denominato SampleRuleSet.xml, che è stato creato usando Microsoft Rules Composer o esportato con Microsoft BizTalk Server.

      var ruleExplorer = new FileStoreRuleExplorer();
      var ruleSet = ruleExplorer.GetRuleSet(ruleSetName);
      
      // Check if the ruleset exists.
      if(ruleSet == null)
      {
          // Log an error if the ruleset isn't found.
          this.logger.LogCritical($"RuleSet instance for '{ruleSetName}' was not found(null)");
          throw new Exception($"RuleSet instance for '{ruleSetName}' was not found.");
      }
      

      Importante

      I set di regole contengono riferimenti ai relativi fatti. Microsoft Rules Composer cerca gli assembly dei fatti per convalidare il set di regole per la modifica. Per aprire set di regole come SampleRuleSet.xml in Microsoft Rules Composer, è necessario inserirli con gli assembly dei fatti .NET corrispondenti. In caso contrario, viene generata un'eccezione.

    2. Il motore usa l'oggetto ruleSet per creare un'istanza dell'oggetto RuleEngine .

    3. L'oggetto RuleEngine riceve i fatti della regola usando il Execute metodo .

      In questo esempio il Execute metodo riceve due fatti: un fatto XML denominato typedXmlDocument e un fatto .NET denominato currentPurchase.

      Dopo l'esecuzione del motore, i valori dei fatti vengono sovrascritti con i valori risultanti dall'esecuzione del motore:

      // Create rules engine instance.
      var ruleEngine = new RuleEngine(ruleSet: ruleSet);
      
      // Create one or more typedXml facts from one or more input XML documents.
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(inputXml);
      var typedXmlDocument = new TypedXmlDocument(documentType, doc);
      
      // Initialize .NET facts.
      var currentPurchase = new ContosoNamespace.ContosoPurchase(purchaseAmount, zipCode);
      
      // Provide facts and run the rules engine.
      ruleEngine.Execute(new object[] { typedXmlDocument, currentPurchase });
      
      // Send back the relevant results (facts).
      var updatedDoc = typedXmlDocument.Document as XmlDocument;
      
    4. Il motore usa la RuleExecutionResult classe personalizzata per restituire i valori al RunRules metodo :

      var ruleExecutionOutput = new RuleExecutionResult()
      {
          XmlDoc = updatedDoc.OuterXml,
          PurchaseAmountPostTax = currentPurchase.PurchaseAmount + currentPurchase.GetSalesTax()
      };
      
      return Task.FromResult(ruleExecutionOutput);
      
    5. Sostituire il codice della funzione di esempio con il proprio e modificare il metodo predefinito RunRules per gli scenari personalizzati.

      Questo esempio continua a usare il codice di esempio senza alcuna modifica.

Creare e compilare il codice

Dopo aver completato la scrittura del codice, compilare per assicurarsi che non esistano errori di compilazione. Il progetto di funzione include automaticamente le attività di compilazione, che compilano e quindi aggiungono qualsiasi libreria di codice personalizzata, inclusi gli assembly dei fatti .NET, alla cartella lib\custom nel progetto dell'app per la logica in cui i flussi di lavoro cercano funzioni personalizzate da eseguire. Queste attività inseriscono gli assembly nella cartella lib\custom\net472 .

  1. In Visual Studio Code, dal menu Terminale, selezionare Nuovo terminale.

  2. Nell'elenco di directory di lavoro visualizzato, selezionare Funzioni come directory di lavoro corrente per il nuovo terminale.

    Screenshot che mostra Visual Studio Code, la richiesta di directory di lavoro corrente e la directory funzioni selezionata.

    Visual Studio Code apre una finestra del terminale con un prompt dei comandi.

  3. Nella finestra Terminale immettere dotnet restore .\RulesFunction.csproj al prompt dei comandi.

    Screenshot che mostra Visual Studio Code, la finestra del Terminale e il comando dotnet restore completato.

  4. Dopo che il prompt dei comandi viene nuovamente visualizzato, immettere dotnet build .\RulesFunction.csproj.

    Se la compilazione ha esito positivo, nella finestra Terminale viene segnalato che la compilazione è riuscita.

  5. Verificare che nel progetto dell'app per la logica siano presenti gli elementi seguenti:

    • Nell'area di lavoro espandere le cartelle seguenti: LogicApp>lib\custom>net472. Verificare che la sottocartella denominata net472 contenga più assembly necessari per eseguire il codice, incluso un file denominato< function-name>.dll.

    • Nell'area di lavoro espandere le cartelle seguenti: LogicApp>lib\custom><function-name>. Verificare che la sottocartella denominata <function-name> contenga un file function.json, che include i metadati relativi al codice della funzione scritto. La finestra di progettazione del flusso di lavoro usa questo file per determinare gli input e gli output necessari quando si chiama il codice.

    L'esempio seguente mostra gli assembly di esempio generati e altri file nel progetto dell'app per la logica:

    Screenshot che mostra l'area di lavoro dell'app per la logica con il progetto di progetto di funzione e l'app per la logica, ora con gli assembly generati e altri file necessari.

Chiamare le regole da un flusso di lavoro

Dopo aver verificato che il codice viene compilato e che il progetto del motore regole dell'app per la logica contenga i file necessari per l'esecuzione del codice, aprire il flusso di lavoro predefinito incluso nel progetto dell'app per la logica.

  1. Nell'area di lavoro, in LogicApp, espandere il nodo <workflow-name>, aprire il menu di scelta rapida per workflow.json e selezionare Apri finestra di progettazione.

    Nella finestra di progettazione del flusso di lavoro che si apre, il flusso di lavoro predefinito, incluso nel progetto di app per la logica, viene visualizzato con il trigger e le azioni seguenti:

  2. Selezionare l'azione denominata Chiamare una funzione regole locali in questa app per la logica.

    Il riquadro informazioni dell'azione si apre sul lato destro.

    Screenshot che mostra Visual Studio Code, progettazione flussi di lavoro e flusso di lavoro predefinito con trigger e azioni.

  3. Verificare e verificare che il valore del parametro Nome funzione sia impostato sulla funzione rules da eseguire. Esaminare o modificare qualsiasi altro valore di parametro usato dalla funzione.

Eseguire il debug del codice e del flusso di lavoro

  1. Ripetere i passaggi seguenti per avviare l'emulatore di archiviazione Azurite tre volte: una volta per ogni servizi di Archiviazione di Azure seguente:

    • Servizio Blob di Azure
    • Servizio di accodamento di Azure
    • Servizio tabelle di Azure
    1. Dal menu Visualizza di Visual Studio Code, selezionare Riquadro comandi.

    2. Nel prompt visualizzato, trovare e selezionare Azurite: Avvia servizio BLOB.

    3. Nell'elenco di directory di lavoro visualizzato, selezionare LogicApp.

    4. Ripetere questi passaggi per Azurite: Avvia Servizio di accodamento e Azurite: Avvia Servizio tabelle.

    Il processo ha funzionato quando la barra delle applicazioni di Visual Studio Code, nella parte inferiore della schermata, mostra i tre servizi di archiviazione in esecuzione, ad esempio:

    Screenshot che mostra la barra delle applicazioni di Visual Studio Code con in esecuzione il servizio BLOB di Azure, il servizio di accodamento di Azure e il servizio tabelle di Azure.

  2. Nella barra delle attività di Visual Studio Code, selezionare Avvia ed esegui debug. (Tastiera: CTRL+MAIUSC+D)

    Screenshot che mostra la barra delle attività di Visual Studio Code con l'opzione Avvia ed esegui debug selezionata.

  3. Nell'elenco Avvia ed esegui debug, selezionare Collega all'app per la logica (LogicApp), se non è già selezionata, e quindi selezionare Riproduci (freccia verde).

    Screenshot che mostra l'elenco Avvia ed esegui debug con l'opzione Collega all'app per la logica selezionata e il pulsante Riproduci selezionato.

    Viene visualizzata la finestra Terminale e viene visualizzato il processo di debug avviato. Viene quindi visualizzata la finestra Console di debug che mostra gli stati di debug. Nella parte inferiore di Visual Studio Code, la barra delle applicazioni diventa arancione, a indicare che il debugger .NET è caricato.

  4. Nell'elenco Esegui e debug selezionare Connetti a funzioni .NET (Funzioni) e quindi selezionare Riproduci (freccia verde).

    Screenshot che mostra l'elenco Avvia ed esegui debug con selezionati l'opzione Collega a Funzioni .NET e il pulsante Riproduci.

  5. Per impostare eventuali punti di interruzione, nella definizione della funzione (<nome> funzione.cs) o nella definizione del flusso di lavoro (workflow.json), individuare il numero di riga in cui si desidera il punto di interruzione e selezionare la colonna sul lato sinistro, ad esempio:

    Screenshot che mostra Visual Studio Code e il file di codice della funzione aperto con un punto di interruzione impostato per una riga nel codice.

  6. Per eseguire manualmente il trigger Richiesta nel flusso di lavoro, aprire la pagina Panoramica del flusso di lavoro.

    1. Dal progetto dell'app per la logica, aprire il menu di scelta rapida del file di workflow.json e selezionare Panoramica.

      Nella pagina Panoramica del flusso di lavoro, il pulsante Esegui trigger è disponibile per quando si vuole avviare manualmente il flusso di lavoro. In Proprietà flusso di lavoro il valore dell'URL di callback è l'URL di un endpoint chiamabile creato dal trigger Richiesta nel flusso di lavoro. È possibile inviare richieste a questo URL per attivare il flusso di lavoro da altre app, inclusi altri flussi di lavoro dell'app per la logica.

      Screenshot che mostra la pagina Panoramica di Visual Studio Code e del flusso di lavoro aperta.

  7. Nella barra degli strumenti della pagina Panoramica, selezionare Esegui trigger.

    Dopo l'avvio dell'esecuzione del flusso di lavoro, il debugger attiva il primo punto di interruzione.

  8. Nel menu Esegui o nella barra degli strumenti del debugger, selezionare un' azione di debug.

    Al termine dell'esecuzione del flusso di lavoro, la pagina Panoramica mostra l'esecuzione completata e i dettagli di base sull'esecuzione.

  9. Per esaminare altre informazioni sull'esecuzione del flusso di lavoro, selezionare l'esecuzione completata. In alternativa, nell'elenco accanto alla colonna Durata, selezionare Mostra esecuzione.

    Screenshot che mostra Visual Studio Code e l'esecuzione del flusso di lavoro completata.