Delen via


Toolkit voor externe regelset

Normaal gesproken maken de regels deel uit van de assembly wanneer regels worden gebruikt in een werkstroomtoepassing. In sommige scenario's wilt u de RuleSets mogelijk afzonderlijk van de assembly onderhouden, zodat ze kunnen worden bijgewerkt zonder de werkstroomassembly opnieuw te bouwen en te implementeren. Met dit voorbeeld kunt u RuleSets in een database beheren en bewerken en deze RuleSets openen vanuit een werkstroom tijdens runtime. Hierdoor kunnen actieve werkstroomexemplaren automatisch RuleSet-wijzigingen opnemen.

Het voorbeeld van de External RuleSet Toolkit bevat een hulpprogramma op basis van Windows Forms dat u kunt gebruiken voor het beheren en bewerken van RuleSet-versies in een database. Het bevat ook een activiteit en een hostservice voor het uitvoeren van deze regels.

Notitie

Voor dit voorbeeld is Microsoft SQL Server vereist.

Visual Studio biedt een RuleSet-editor als onderdeel van de Windows Workflow Foundation (WF). U kunt deze editor starten door te dubbelklikken op de Policy activiteit in een werkstroom. Hiermee wordt het gedefinieerde RuleSet-object geserialiseerd naar het .rules-bestand dat aan de werkstroom is gekoppeld (een Policy activiteit voert een RuleSet-exemplaar uit op de werkstroom). Het .rules-bestand wordt gecompileerd in de assembly als een resource wanneer u het werkstroomproject bouwt.

De onderdelen van dit voorbeeld zijn:

  • Een grafisch gebruikersinterfaceprogramma ruleset dat u kunt gebruiken om RuleSet-versies in de database te bewerken en te beheren.

  • Een RuleSet-service die is geconfigureerd voor de hosttoepassing en die RuleSets opent vanuit de database.

  • Een ExternalPolicy activiteit die een RuleSet aanvraagt vanuit de RuleSet-service en de RuleSet uitvoert voor de werkstroom.

De interactie van de onderdelen wordt weergegeven in de volgende afbeelding. In de volgende secties wordt elk onderdeel beschreven.

Diagram showing the External RuleSet Toolkit sample overview.

RuleSet Tool

De volgende afbeelding is een schermopname van het hulpprogramma RuleSet. In het menu Rule Store kunt u de beschikbare RuleSets uit de database laden en gewijzigde RuleSets weer opslaan in het archief. Een toepassingsconfiguratiebestand biedt een database-verbindingsreeks voor de RuleSet-database. Wanneer u het hulpprogramma start, worden de RuleSets automatisch vanuit de geconfigureerde database geladen.

Screenshot showing the RuleSet Browser.

Het hulpprogramma RuleSet past primaire en secundaire versienummers toe op de RuleSets, zodat u tegelijkertijd meerdere versies kunt onderhouden en opslaan (het hulpprogramma biedt geen vergrendelings- of andere configuratiebeheerfuncties naast de mogelijkheid voor versiebeheer). Met het hulpprogramma kunt u nieuwe RuleSet-versies maken of bestaande versies verwijderen. Wanneer u op Nieuw klikt, maakt het hulpprogramma een nieuwe RuleSet-naam en past versie 1.0 toe. Wanneer u een versie kopieert, maakt het hulpprogramma een kopie van de geselecteerde RuleSet-versie, inclusief de ingesloten regels, en wijst nieuwe, unieke versienummers toe. Deze versienummers zijn gebaseerd op de versienummers van bestaande RuleSets. U kunt de rulesetnaam en versienummers wijzigen met behulp van de gekoppelde velden in het formulier.

Wanneer u op Regels bewerken klikt, wordt de RuleSet-editor gestart, zoals wordt weergegeven in de volgende afbeelding:

Screenshot showing the RuleSet Editor.

Dit is een herhosting van het editordialoogvenster dat deel uitmaakt van de invoegtoepassing Windows Workflow Foundation Visual Studio. Het biedt dezelfde functionaliteit, waaronder IntelliSense-ondersteuning. De regels worden geschreven op basis van een doeltype (zoals een werkstroom) die is gekoppeld aan de RuleSet in het hulpprogramma; wanneer u op Bladeren klikt in het hoofdvenster van het hulpmiddel, wordt het dialoogvenster Werkstroom/typekiezer weergegeven, zoals wordt weergegeven in afbeelding 4.

Workflow /Type Selection

Afbeelding 4: Werkstroom/typeselector

U kunt het dialoogvenster Werkstroom/typeselector gebruiken om een assembly en een specifiek type in die assembly op te geven. Dit type is het doeltype waarmee de regels zijn gemaakt (en worden uitgevoerd). In veel gevallen is het doeltype een werkstroom of een ander activiteitstype. U kunt echter een RuleSet uitvoeren op elk .NET-type.

Het pad naar het assemblybestand en het type name are stored with the RuleSet in de database, zodat wanneer de RuleSet wordt opgehaald uit de database, het hulpprogramma probeert het doeltype automatisch te laden.

Wanneer u op OK klikt in het dialoogvenster Werkstroom/typeselector, wordt het geselecteerde type gevalideerd op basis van de RuleSet, om ervoor te zorgen dat het doeltype alle leden bevat waarnaar wordt verwezen door de regels. Fouten worden weergegeven in het dialoogvenster Validatiefouten . U kunt ervoor kiezen om door te gaan met de wijziging ondanks de fouten of op Annuleren te klikken. Klik in het menu Extra in het hoofdvenster van het hulpprogramma op Valideren om de RuleSet-versie opnieuw te valideren voor de doelactiviteit.

Screenshot showing the Validation Errors dialog.

In het menu Gegevens in het hulpprogramma kunt u RuleSets importeren en exporteren. Wanneer u op Importeren klikt, wordt er een dialoogvenster voor bestandskiezer weergegeven waaruit u een .rules-bestand kunt selecteren. Dit kan al dan niet een bestand zijn dat in eerste instantie is gemaakt in Visual Studio. Het .rules-bestand moet een geserialiseerd exemplaar RuleDefinitions bevatten dat een verzameling voorwaarden en een verzameling RuleSets bevat. Het hulpprogramma maakt geen gebruik van de verzameling voorwaarden, maar gebruikt wel de RuleDefinitions indeling .rules om interactie met de Visual Studio-omgeving mogelijk te maken.

Nadat u een .rules-bestand hebt geselecteerd, wordt het dialoogvenster RuleSet Selector weergegeven. U kunt het dialoogvenster gebruiken om de RuleSets te selecteren in het bestand dat u wilt importeren (de standaardinstelling geeft alle RuleSets op). RuleSets in het .rules-bestand hebben geen versienummers, omdat de versiebeheer binnen een WF-project hetzelfde is als de versie van de assembly. Tijdens het importproces wijst het hulpprogramma automatisch het eerstvolgende beschikbare primaire versienummer toe (dat u kunt wijzigen na het importeren); u ziet de toegewezen versienummers in de lijst RuleSet Selector .

Voor elke RuleSet probeert het hulpprogramma het bijbehorende type te vinden uit de map bin\Debug onder de locatie van het .rules-bestand (indien aanwezig), op basis van de leden die in de RuleSet worden gebruikt. Als het hulpprogramma meerdere overeenkomende typen vindt, wordt geprobeerd een type te kiezen op basis van een overeenkomst tussen de bestandsnaam .rules en de typenaam (bijvoorbeeld het Workflow1 type komt overeen met Workflow1.rules). Als er meerdere overeenkomsten bestaan, wordt u gevraagd het type te selecteren. Als dit mechanisme voor automatische identificatie een overeenkomende assembly of een overeenkomend type niet kan vinden, kunt u na het importeren op Bladeren klikken in het hoofddialoogvenster om naar het bijbehorende type te navigeren. In de volgende afbeelding ziet u de RuleSet Selector:

Screenshot showing the RuleSet Selector dialog.

Wanneer u in het hoofdmenu van het hulpmiddel op Gegevens exporteren klikt, wordt het dialoogvenster RuleSet Selector opnieuw weergegeven, waaruit u de RuleSets kunt bepalen uit de database die moet worden geëxporteerd. Wanneer u op OK klikt, wordt er een dialoogvenster Bestand opslaan weergegeven waarin u de naam en locatie van het resulterende .rules-bestand kunt opgeven. Omdat het .rules-bestand geen versiegegevens bevat, kunt u slechts één RuleSet-versie met een bepaalde RuleSet-naam selecteren.

PolicyFromService-activiteit

De code voor de PolicyFromService activiteit is eenvoudig. Het werkt net als de Policy activiteit die wordt geleverd met WF, maar in plaats van de doelregelset op te halen uit het bestand .rules, roept het een hostservice aan om het RuleSet-exemplaar te verkrijgen. Vervolgens wordt de RuleSet uitgevoerd op het hoofdexemplaren van de werkstroomactiviteit.

Als u de activiteit in een werkstroom wilt gebruiken, voegt u een verwijzing naar de PolicyActivities en RuleSetService assembly's uit uw werkstroomproject toe. Zie de procedure aan het einde van dit onderwerp voor een bespreking van het toevoegen van de activiteit aan de werkset.

Nadat u de activiteit in uw werkstroom hebt geplaatst, moet u de naam opgeven van de RuleSet die moet worden uitgevoerd. U kunt de naam invoeren als een letterlijke waarde of een binding met een werkstroomvariabele of eigenschap van een andere activiteit. U kunt eventueel versienummers invoeren voor de specifieke RuleSet die moet worden uitgevoerd. Als u de standaardwaarde 0 voor de primaire en secundaire versienummers laat staan, wordt automatisch het meest recente versienummer in de database opgegeven voor de activiteit.

RuleSet-service

De service is verantwoordelijk voor het ophalen van de opgegeven RuleSet-versie uit de database en het retourneren ervan naar de aanroepende activiteit. Zoals eerder besproken, worden de nieuwste versie opgehaald als de primaire en secundaire versiewaarden die in de GetRuleSet aanroep worden doorgegeven beide 0 zijn. Op dit moment is er geen caching van RuleSet-definities of -exemplaren; Op dezelfde manier zijn er geen functies voor het markeren van RuleSet-versies als 'geïmplementeerd' om deze te onderscheiden van actieve RuleSets.

De database die door de service moet worden geopend, moet op de host worden geconfigureerd met behulp van een toepassingsconfiguratiebestand.

Het hulpprogramma uitvoeren

  1. De map waarmee de RuleSet-tabel wordt ingesteld die door het hulpprogramma wordt gebruikt en de service bevat een Setup.sql-bestand. U kunt het Setup.cmd batchbestand uitvoeren om de database Regels in SQL Express te maken en de RuleSet-tabel in te stellen.

  2. Als u het batchbestand of Setup.sql bewerkt en opgeeft dat u SQL Express niet wilt gebruiken of de tabel in een andere database wilt plaatsen dan Rules, moeten de toepassingsconfiguratiebestanden in het hulpprogramma RuleSet en UsageSample projecten met dezelfde informatie worden bewerkt.

  3. Nadat u het Setup.sql-script hebt uitgevoerd, kunt u de ExternalRuleSetToolkit oplossing bouwen en vervolgens het hulpprogramma RuleSet starten vanuit het project ExternalRuleSetTool.

  4. De RuleSetToolkitUsageSample oplossing Sequentiële werkstroomconsoletoepassing bevat een voorbeeldwerkstroom. De werkstroom bestaat uit een PolicyFromService activiteit en twee variabelen, orderValue waarmee discountde doelregelset wordt uitgevoerd.

  5. Als u het voorbeeld wilt gebruiken, bouwt u de RuleSetToolkitUsageSample oplossing. Klik vervolgens in het hoofdmenu van het hulpprogramma RuleSet op Gegevens importeren en wijs het bestand DiscountRuleSet.rules aan in de map RuleSetToolkitUsageSample. Klik op de menuoptie Store-Opslaan van regel om de geïmporteerde RuleSet op te slaan in de database.

  6. Omdat er vanuit het voorbeeldwerkstroomproject naar de PolicyActivities assembly wordt verwezen, wordt de PolicyFromService activiteit weergegeven in de werkstroom. Deze wordt echter niet standaard weergegeven in de werkset. Ga als volgt te werk om deze toe te voegen aan de werkset:

    • Klik met de rechtermuisknop op de werkset en selecteer Items kiezen (dit kan even duren).

    • Wanneer het dialoogvenster Werksetitems kiezen wordt weergegeven, klikt u op het tabblad Activiteiten .

    • Blader naar de PolicyActivities assembly in de ExternalRuleSetToolkit oplossing en klik op Openen.

    • Zorg ervoor dat de PolicyFromService activiteit is geselecteerd in het dialoogvenster Werksetitems kiezen en klik vervolgens op OK.

    • De activiteit moet nu worden weergegeven in de werkset in de categorie RuleSetToolkitUsageSample Components .

  7. De RuleSet-service is al geconfigureerd op de consoletoepassingshost met behulp van de volgende instructie in Program.cs.

    workflowRuntime.AddService(new RuleSetService());
    
  8. U kunt de service op de host ook configureren met behulp van een configuratiebestand; raadpleeg de SDK-documentatie voor meer informatie.

  9. Er wordt een toepassingsconfiguratiebestand toegevoegd aan het werkstroomproject om de verbindingsreeks op te geven voor de database die door de service moet worden gebruikt. Dit moet dezelfde verbindingsreeks zijn die worden gebruikt door het hulpprogramma RuleSet, die verwijst naar de database die de RuleSet-tabel bevat.

  10. U kunt het RuleSetToolkitUsageSample project nu uitvoeren zoals elke andere werkstroomconsoletoepassing. Druk op F5 of Ctrl+F5 in Visual Studio of voer het RuleSetToolkitUsageSample.exe bestand rechtstreeks uit.

    Notitie

    U moet het hulpprogramma RuleSet sluiten om het gebruiksvoorbeeld opnieuw te compileren, omdat het hulpprogramma de voorbeeldassembly van het gebruik laadt.