Condividi tramite


Kit di Strumenti per Regole Esterne

In genere, quando le regole vengono usate all'interno di un'applicazione del flusso di lavoro, le regole fanno parte dell'assembly. In alcuni scenari, è possibile mantenere i RuleSet separatamente dall'assembly in modo che possano essere aggiornati senza ricompilare e distribuire l'assembly del flusso di lavoro. Questo esempio consente di gestire e modificare i RuleSet in un database e di accedere a tali RuleSet da un flusso di lavoro in fase di esecuzione. Ciò consente all'esecuzione di istanze del flusso di lavoro di incorporare automaticamente le modifiche di RuleSet.

L'esempio External RuleSet Toolkit contiene uno strumento basato su Windows Form che è possibile usare per gestire e modificare le versioni di RuleSet in un database. Include anche un'attività e un servizio host per l'esecuzione di tali regole.

Annotazioni

Questo esempio richiede Microsoft SQL Server.

Visual Studio fornisce un editor RuleSet come parte di Windows Workflow Foundation (WF). È possibile avviare questo editor facendo doppio clic sull'attività Policy in un flusso di lavoro. Serializza l'oggetto RuleSet definito nel file con estensione rules associato al flusso di lavoro (un'attività Policy esegue un'istanza di RuleSet sul flusso di lavoro). Il file .rules viene compilato nell'assembly come risorsa quando si compila il progetto del flusso di lavoro.

I componenti di questo esempio includono:

  • Strumento interfaccia utente grafica RuleSet che è possibile usare per modificare e gestire le versioni di RuleSet nel database.

  • Un servizio RuleSet configurato nell'applicazione host e accede a RuleSet dal database.

  • Attività ExternalPolicy che richiede un oggetto RuleSet dal servizio RuleSet ed esegue RuleSet sul flusso di lavoro.

L'interazione dei componenti è illustrata nell'immagine seguente. Le sezioni che seguono descrivono ogni componente.

Diagramma che mostra la panoramica dell'esempio del External RuleSet Toolkit.

Strumento Set di Regole

L'immagine seguente è uno screenshot dello strumento RuleSet. Dal menu Archivio regole è possibile caricare i Set di regole disponibili dal database e salvare i RuleSet modificati nell'archivio. Un file di configurazione dell'applicazione fornisce una stringa di connessione del database per il database RuleSet. Quando si avvia lo strumento, carica automaticamente i RuleSet dal database configurato.

Screenshot che mostra il browser RuleSet.

Lo strumento RuleSet applica numeri di versione principali e secondari ai RuleSet, consentendo di gestire e archiviare contemporaneamente più versioni (lo strumento non fornisce blocchi o altre funzionalità di gestione della configurazione oltre alla funzionalità di controllo delle versioni). Usando lo strumento, è possibile creare nuove versioni di RuleSet o eliminare le versioni esistenti. Quando si fa clic su Nuovo, lo strumento crea un nuovo nome ruleSet e applica la versione 1.0. Quando si copia una versione, lo strumento crea una copia della versione di RuleSet selezionata, incluse le regole contenute e assegna nuovi numeri di versione univoci. Questi numeri di versione sono basati sui numeri di versione di RuleSet esistenti. È possibile modificare il nome e i numeri di versione di RuleSet usando i campi associati nel modulo.

Quando si fa clic su Modifica regole, viene avviato l'editor di RuleSet, come illustrato nell'immagine seguente:

Screenshot che mostra l'editor di RuleSet.

Si tratta di un nuovo hosting della finestra di dialogo dell'editor che fa parte del componente aggiuntivo Windows Workflow Foundation di Visual Studio. Offre la stessa funzionalità, incluso il supporto di IntelliSense. Le regole vengono create in base a un tipo di destinazione (ad esempio un flusso di lavoro) associato al RuleSet nello strumento; quando si fa clic su Sfoglia nella finestra di dialogo dello strumento principale, viene visualizzata la finestra di dialogo Selettore flusso di lavoro/tipo , come illustrato nella figura 4.

Workflow /Type Selection

Figura 4: Selettore flusso di lavoro/tipo

È possibile utilizzare la finestra di dialogo Selettore flusso di lavoro/tipo per specificare un assembly e un tipo specifico all'interno di tale assembly. Questo tipo è il tipo di destinazione in base al quale vengono create (ed eseguite) le regole. In molti casi, il tipo di destinazione è un flusso di lavoro o un altro tipo di attività. Tuttavia, è possibile eseguire un RuleSet su qualsiasi tipo .NET.

Percorso del file di assembly e del tipo name are stored with the RuleSet nel database, in modo che quando il RuleSet viene recuperato dal database, lo strumento tenta di caricare automaticamente il tipo di destinazione.

Quando si fa clic su OK nella finestra di dialogo Selettore flusso di lavoro/tipo , convalida il tipo selezionato rispetto al RuleSet per assicurarsi che il tipo di destinazione disponga di tutti i membri a cui fanno riferimento le regole. Gli errori vengono visualizzati in una finestra di dialogo Errori di convalida . È possibile scegliere di continuare con la modifica nonostante gli errori oppure fare clic su Annulla. Dal menu Strumenti della finestra di dialogo principale dello strumento, è possibile fare clic su Convalida per convalidare nuovamente la versione di RuleSet rispetto all'attività di destinazione.

Screenshot che mostra la finestra di dialogo Errori di convalida.

Dal menu Dati dello strumento è possibile importare ed esportare RuleSet. Quando si fa clic su Importa, viene visualizzata una finestra di dialogo di selezione file da cui è possibile selezionare un file con estensione rules. Potrebbe essere o meno un file creato inizialmente in Visual Studio. Il file con estensione rules deve contenere un'istanza serializzata RuleDefinitions che contiene una raccolta di condizioni e una raccolta di RuleSet. Lo strumento non usa la raccolta di condizioni, ma usa il RuleDefinitions formato .rules per consentire l'interazione con l'ambiente di Visual Studio.

Dopo aver selezionato un file con estensione rules, viene visualizzata una finestra di dialogo Selettore RuleSet . È possibile usare la finestra di dialogo per selezionare i Set di regole dal file da importare (l'impostazione predefinita specifica tutti i set di regole). I RuleSets nei file .rules non hanno numeri di versione perché il loro versionamento all'interno di un progetto WF è lo stesso della versione dell'assembly. Durante il processo di importazione, lo strumento assegna automaticamente il successivo numero di versione principale disponibile (che è possibile modificare dopo l'importazione); è possibile visualizzare i numeri di versione assegnati nell'elenco Selettore RuleSet .

Per ogni RuleSet importato, lo strumento tenta di individuare il tipo associato dalla cartella bin\Debug nel percorso del file con estensione rules (se esistente), in base ai membri utilizzati nel RuleSet. Se lo strumento trova più tipi corrispondenti, tenta di scegliere un tipo in base a una corrispondenza tra il nome del file con estensione rules e il nome del tipo ( ad esempio, il Workflow1 tipo corrisponde a Workflow1.rules). Se esistono più corrispondenze, viene richiesto di selezionare il tipo. Se questo meccanismo di identificazione automatica non riesce a individuare un assembly o un tipo corrispondente, dopo l'importazione è possibile fare clic su Sfoglia nella finestra di dialogo principale dello strumento per passare al tipo associato. L'immagine seguente mostra il selettore RuleSet:

Screenshot che mostra la finestra di dialogo del Selettore di Regole.

Quando si fa clic su Esportazione dati dal menu principale dello strumento, viene visualizzata di nuovo la finestra di dialogo Selettore RuleSet , da cui è possibile determinare i Set di regole dal database da esportare. Quando si fa clic su OK, viene visualizzata una finestra di dialogo Salva file in cui è possibile specificare il nome e il percorso del file con estensione rules risultante. Poiché il file con estensione rules non contiene informazioni sulla versione, è possibile selezionare una sola versione di RuleSet con un determinato nome RuleSet.

Attività PolicyFromService

Il codice per l'attività PolicyFromService è semplice. Funziona in modo molto simile all'attività Policy fornita con WF, ma invece di recuperare il RuleSet di destinazione dal file con estensione rules, chiama un servizio host per ottenere l'istanza di RuleSet. Esegue quindi RuleSet sull'istanza dell'attività del flusso di lavoro principale.

Per usare l'attività in un flusso di lavoro, aggiungere un riferimento agli assembly PolicyActivities e RuleSetService dal vostro progetto del flusso di lavoro. Per informazioni su come aggiungere l'attività alla casella degli strumenti, vedere la procedura alla fine di questo argomento.

Dopo aver posizionato l'attività nel flusso di lavoro, è necessario specificare il nome dell'oggetto RuleSet da eseguire. È possibile immettere il nome come valore letterale o associarlo a una variabile o a una proprietà del flusso di lavoro di un'altra attività. Facoltativamente, è possibile immettere i numeri di versione per l'oggetto RuleSet specifico che deve essere eseguito. Se si lascia il valore predefinito 0 per i numeri di versione principale e secondaria, il numero di versione più recente nel database viene fornito automaticamente per l'attività.

Servizio RuleSet

Il servizio è responsabile del recupero della versione di RuleSet specificata dal database e della relativa restituzione all'attività chiamante. Come illustrato in precedenza, se i valori della versione principale e secondaria passati nella GetRuleSet chiamata sono entrambi 0, il servizio recupera la versione più recente. A questo punto, non è presente alcuna memorizzazione nella cache delle definizioni o delle istanze di RuleSet; Analogamente, non esistono funzionalità per contrassegnare le versioni di RuleSet come "distribuite" per differenziarle dai RuleSet in corso.

Il database a cui accedere il servizio deve essere configurato nell'host usando un file di configurazione dell'applicazione.

Per eseguire lo strumento

  1. La cartella che configura la tabella RuleSet utilizzata dallo strumento e il servizio contiene un file Setup.sql. È possibile eseguire il file batch Setup.cmd per creare il database Rules in SQL Express e per configurare la tabella RuleSet.

  2. Se si modifica il file batch o Setup.sql e si specifica di non usare SQL Express o di inserire la tabella in un database denominato diverso da Rules, i file di configurazione dell'applicazione nello strumento RuleSet e UsageSample i progetti devono essere modificati con le stesse informazioni.

  3. Dopo aver eseguito lo script Setup.sql, è possibile compilare la ExternalRuleSetToolkit soluzione e quindi avviare lo strumento RuleSet dal progetto ExternalRuleSetTool.

  4. La RuleSetToolkitUsageSample soluzione dell'applicazione console del flusso di lavoro sequenziale include un flusso di lavoro di esempio. Il flusso di lavoro è costituito da un'attività PolicyFromService e da due variabili orderValue e discount, in base al quale viene eseguito il RuleSet di destinazione.

  5. Per usare l'esempio, compilare la soluzione RuleSetToolkitUsageSample. Quindi dal menu principale dello strumento RuleSet fare clic su Data-Import e scegliere il file DiscountRuleSet.rules nella cartella RuleSetToolkitUsageSample. Fare clic sull'opzione di menu Salva archivio regole per salvare il set di regole importato nel database.

  6. Poiché l'assembly PolicyActivities è referenziato dal progetto di esempio del flusso di lavoro, l'attività PolicyFromService appare nel flusso di lavoro. Non viene tuttavia visualizzata nella casella degli strumenti per impostazione predefinita. Per aggiungerlo alla casella degli strumenti, eseguire le operazioni seguenti:

    • Fare clic con il pulsante destro del mouse sulla casella degli strumenti e scegliere Scegli elementi (l'operazione potrebbe richiedere del tempo).

    • Quando viene visualizzata la finestra di dialogo Scegli elementi casella degli strumenti , fare clic sulla scheda Attività .

    • Passare all'assembly PolicyActivities nella soluzione ExternalRuleSetToolkit e fare clic su Apri.

    • Verificare che l'attività PolicyFromService sia selezionata nella finestra di dialogo Scegli elementi della casella degli strumenti e quindi fare clic su OK.

    • L'attività dovrebbe ora essere visualizzata nella casella degli strumenti nella categoria RuleSetToolkitUsageSample Components .

  7. Il servizio RuleSet è già configurato nell'host dell'applicazione console usando l'istruzione seguente in Program.cs.

    workflowRuntime.AddService(new RuleSetService());
    
  8. È anche possibile configurare il servizio nell'host usando un file di configurazione; per informazioni dettagliate, vedere la documentazione dell'SDK.

  9. Un file di configurazione dell'applicazione viene aggiunto al progetto del flusso di lavoro per specificare la stringa di connessione per il database da usare dal servizio. Deve essere la stessa stringa di connessione utilizzata dallo strumento RuleSet, che punta al database che contiene la tabella RuleSet.

  10. È ora possibile eseguire il RuleSetToolkitUsageSample progetto come qualsiasi altra applicazione console del flusso di lavoro. Premere F5 o CTRL+F5 in Visual Studio oppure eseguire direttamente il file RuleSetToolkitUsageSample.exe.

    Annotazioni

    È necessario chiudere lo strumento RuleSet per ricompilare l'esempio di utilizzo, perché lo strumento carica l'assembly di esempio di utilizzo.