Dela via


Verktyg för externa regeluppsättningar

Normalt när regler används i ett arbetsflödesprogram är reglerna en del av sammansättningen. I vissa scenarier kanske du vill underhålla regeluppsättningarna separat från sammansättningen så att de kan uppdateras utan att återskapa och distribuera arbetsflödessammansättningen. Med det här exemplet kan du hantera och redigera RuleSets i en databas samt komma åt dessa RuleSets från ett arbetsflöde i realtid. Detta gör att arbetsflödesinstanser som körs automatiskt kan införliva RuleSet-ändringar.

Exemplet externt regeluppsättningsverktyg innehåller ett Windows Forms-baserat verktyg som du kan använda för att hantera och redigera RuleSet-versioner i en databas. Den innehåller även en aktivitet och en värdtjänst för att köra dessa regler.

Anmärkning

Det här exemplet kräver Microsoft SQL Server.

Visual Studio tillhandahåller en RuleSet-redigerare som en del av Windows Workflow Foundation (WF). Du kan starta redigeraren genom att Policy dubbelklicka på aktiviteten i ett arbetsflöde. Det serialiserar det definierade RuleSet-objektet till den .rules-fil som är associerad med arbetsflödet (en Policy aktivitet kör en RuleSet-instans mot arbetsflödet). .rules-filen kompileras till sammansättningen som en resurs när du skapar arbetsflödesprojektet.

Komponenterna i det här exemplet är:

  • Ett grafiska användargränssnittsverktyg för RuleSet som du kan använda för att redigera och hantera RuleSet-versioner i databasen.

  • En RuleSet-tjänst som har konfigurerats i värdprogrammet och som kommer åt RuleSets från databasen.

  • En ExternalPolicy aktivitet som begär en RuleSet från RuleSet-tjänsten och kör RuleSet mot arbetsflödet.

Interaktionen mellan komponenterna visas i följande bild. Avsnitten som följer beskriver varje komponent.

Diagram som visar exempelöversikten extern regeluppsättningsverktyg.

Regeluppsättningsverktyg

Följande bild är en skärmbild av verktyget RuleSet. På menyn Regelarkiv kan du läsa in tillgängliga RuleSets från databasen och spara ändrade RuleSets tillbaka till arkivet. En programkonfigurationsfil innehåller en databasanslutningssträng för RuleSet-databasen. När du startar verktyget läses regeluppsättningarna in automatiskt från den konfigurerade databasen.

Skärmbild som visar RuleSet Browser.

Verktyget RuleSet tillämpar huvud- och delversionsnummer på RuleSets, så att du samtidigt kan underhålla och lagra flera versioner (verktyget ger ingen låsning eller andra funktioner för konfigurationshantering utöver versionsfunktionen). Med verktyget kan du skapa nya RuleSet-versioner eller ta bort befintliga versioner. När du klickar på Nytt skapar verktyget ett nytt RuleSet-namn och tillämpar version 1.0. När du kopierar en version skapar verktyget en kopia av den valda RuleSet-versionen, inklusive de inneslutna reglerna, och tilldelar nya unika versionsnummer. Dessa versionsnummer baseras på versionsnumren för befintliga RuleSets. Du kan ändra RuleSet-namn och versionsnummer med hjälp av de associerade fälten i formuläret.

När du klickar på Redigera regler startar RuleSet-redigeraren enligt följande bild:

Skärmbild som visar RuleSet-redigeraren.

Det här är en ny värd för redigeringsdialogrutan som ingår i Visual Studio-tillägget för Windows Workflow Foundation. Det ger samma funktioner, inklusive Intellisense-stöd. Reglerna skapas mot en måltyp (till exempel ett arbetsflöde) som är associerad med RuleSet i verktyget. När du klickar på Bläddra i huvudverktygsdialogrutan visas dialogrutan Arbetsflöde/Typväljare , enligt bild 4.

Arbetsflöde /Typval

Bild 4: Arbetsflöde/typväljare

Du kan använda dialogrutan Arbetsflöde/Typväljare för att ange en sammansättning och en viss typ i den sammansättningen. Den här typen är den måltyp som reglerna har skapats mot (och körs mot). I många fall är måltypen ett arbetsflöde eller någon annan aktivitetstyp. Du kan dock köra en RuleSet mot valfri .NET-typ.

Sökvägen till sammansättningsfilen och typen name are stored with the RuleSet i databasen, så att när RuleSet hämtas från databasen försöker verktyget automatiskt läsa in måltypen.

När du klickar på OK i dialogrutan Arbetsflöde/Typväljare valideras den valda typen mot RuleSet för att säkerställa att måltypen har alla medlemmar som refereras av reglerna. Fel visas i dialogrutan Valideringsfel . Du kan välja att fortsätta med ändringen trots felen eller klicka på Avbryt. På menyn Verktyg i huvudverktygsdialogrutan kan du klicka på Verifiera för att verifiera RuleSet-versionen mot målaktiviteten.

Skärmbild som visar dialogrutan Valideringsfel.

Från menyn Data i verktyget kan du importera och exportera RuleSets. När du klickar på Importera visas en dialogruta för filväljaren där du kan välja en .rules-fil. Det kan vara, men behöver inte vara, en fil som ursprungligen skapades i Visual Studio. .rules-filen ska innehålla en serialiserad RuleDefinitions instans som innehåller en samling villkor och en samling RuleSets. Verktyget använder inte villkorssamlingen, men använder RuleDefinitions formatet .rules för att tillåta interaktion med Visual Studio-miljön.

När du har valt en .rules-fil visas dialogrutan RuleSet Selector . Du kan använda dialogrutan för att välja RuleSets från filen som du vill importera (standardvärdet anger alla RuleSets). RuleSets i .rules-filen har inte versionsnummer eftersom deras versionshantering i ett WF-projekt är samma som versionen av sammansättningen. Under importen tilldelar verktyget automatiskt nästa tillgängliga huvudversionsnummer (som du kan ändra efter importen). du kan se de tilldelade versionsnumren i listan RegelUppsättningsväljare .

För varje RegelUppsättning som importeras försöker verktyget hitta den associerade typen från mappen bin\Debug under platsen för .rules-filen (om den finns), baserat på de medlemmar som används i RuleSet. Om verktyget hittar flera matchande typer försöker det välja en typ baserat på en matchning mellan filnamnet .rules och typnamnet (till exempel Workflow1 motsvarar typen Workflow1.rules). Om det finns flera matchningar uppmanas du att välja typ. Om den här mekanismen för automatisk identifiering inte hittar en matchande sammansättning eller typ kan du efter importen klicka på Bläddra i huvudverktygsdialogrutan för att navigera till den associerade typen. Följande bild visar RuleSet Selector:

Skärmbild som visar dialogrutan RuleSet Selector (Regeluppsättningsväljare).

När du klickar på Dataexport från huvudverktygsmenyn visas dialogrutan RuleSet Selector igen, från vilken du kan fastställa regeluppsättningarna från databasen som ska exporteras. När du klickar på OK visas dialogrutan Spara fil där du kan ange namn och plats för den resulterande .regelfilen. Eftersom .rules-filen inte innehåller versionsinformation kan du bara välja en RuleSet-version med ett angivet RuleSet-namn.

PolicyFromService-aktivitet

Koden för PolicyFromService aktiviteten är enkel. Det fungerar ungefär som aktiviteten Policy som tillhandahålls med WF, men i stället för att hämta målregeluppsättningen från .rules-filen anropas en värdtjänst för att hämta RuleSet-instansen. Den kör sedan RuleSet mot rotarbetsflödesaktivitetsinstansen.

Om du vill använda aktiviteten i ett arbetsflöde lägger du till en referens till PolicyActivities sammansättningarna och RuleSetService från arbetsflödesprojektet. Se proceduren i slutet av det här avsnittet för en diskussion om hur du lägger till aktiviteten i verktygslådan.

När du har placerat aktiviteten i arbetsflödet måste du ange namnet på regeluppsättningen som ska köras. Du kan ange namnet som ett literalvärde eller binda till en arbetsflödesvariabel eller egenskap för en annan aktivitet. Du kan också ange versionsnummer för den specifika Regeluppsättning som ska köras. Om du lämnar standardvärdet 0 för huvud- och delversionsnumren anges det senaste versionsnumret i databasen automatiskt för aktiviteten.

RuleSet-tjänst

Tjänsten ansvarar för att hämta den angivna RuleSet-versionen från databasen och returnera den till anropsaktiviteten. Som tidigare nämnts hämtar tjänsten den senaste versionen om de huvud- och delversionsvärden som skickades i anropet GetRuleSet båda är 0. I det här läget finns det ingen cachelagring av RuleSet-definitioner eller instanser. På samma sätt finns det inga funktioner för att markera RuleSet-versioner som "distribuerade" för att skilja dem från pågående RuleSets.

Databasen som ska nås av tjänsten ska konfigureras på värden med hjälp av en programkonfigurationsfil.

Så här kör du verktyget

  1. Mappen som konfigurerar tabellen RuleSet som används av verktyget och tjänsten innehåller en Setup.sql fil. Du kan köra Setup.cmd batchfil för att skapa regeldatabasen i SQL Express och för att konfigurera tabellen RuleSet.

  2. Om du redigerar batchfilen eller Setup.sql och anger att du inte ska använda SQL Express eller placera tabellen i en databas med namnet något annat än Rules, bör programkonfigurationsfilerna i verktyget RuleSet och UsageSample projekt redigeras med samma information.

  3. När du har kört skriptet Setup.sql kan du skapa ExternalRuleSetToolkit lösningen och sedan starta verktyget RuleSet från projektet ExternalRuleSetTool.

  4. Den RuleSetToolkitUsageSample sekventiella lösningen för arbetsflödeskonsolen innehåller ett exempelarbetsflöde. Arbetsflödet består av en PolicyFromService aktivitet och två variabler, orderValue och discount, mot vilka regeluppsättningen körs.

  5. Bygg RuleSetToolkitUsageSample-lösningen för att använda exemplet. Från huvudmenyn för verktyget RuleSet klickar du sedan på Dataimport och pekar på filen DiscountRuleSet.rules i mappen RuleSetToolkitUsageSample. Klicka på menyalternativet Rule Store-Save för att spara den importerade RuleSet i databasen.

  6. PolicyActivities Eftersom sammansättningen refereras från exempelarbetsflödesprojektet PolicyFromService visas aktiviteten i arbetsflödet. Den visas dock inte som standard i verktygslådan. Gör följande för att lägga till den i verktygslådan:

    • Högerklicka på verktygslådan och välj Välj objekt (det kan ta en stund).

    • När dialogrutan Välj verktygslådans objekt visas klickar du på fliken Aktiviteter .

    • Bläddra till PolicyActivities sammansättningen i ExternalRuleSetToolkit lösningen och klicka på Öppna.

    • Kontrollera att PolicyFromService-aktiviteten är markerad i dialogrutan Välj verktygslådeobjekt och klicka sedan på OK.

    • Aktiviteten bör nu visas i verktygslådan i kategorin RuleSetToolkitUsageSample-komponenter .

  7. RuleSet-tjänsten har redan konfigurerats på konsolprogramvärden med hjälp av följande instruktion i Program.cs.

    workflowRuntime.AddService(new RuleSetService());
    
  8. Du kan också konfigurera tjänsten på värden med hjälp av en konfigurationsfil. Mer information finns i SDK-dokumentationen.

  9. En programkonfigurationsfil läggs till i arbetsflödesprojektet för att ange anslutningssträngen för databasen som ska användas av tjänsten. Detta bör vara samma anslutningssträng som används av verktyget RuleSet, som pekar på databasen som innehåller tabellen RuleSet.

  10. Nu kan du köra RuleSetToolkitUsageSample projektet på samma sätt som andra arbetsflödeskonsolprogram. Tryck på F5 eller Ctrl+F5 i Visual Studio eller kör filen RuleSetToolkitUsageSample.exe direkt.

    Anmärkning

    Du måste stänga verktyget RuleSet för att kompilera om användningsexemplet eftersom verktyget läser in användningsexempelsammansättningen.