Delen via


Bedrijfsprocesstromen modelleren

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Met een bedrijfsprocesstroom kunt u efficiëntere en gestroomlijnde verkoop-, service-, en andere bedrijfsprocessen maken. Als u over goed werkende processen beschikt, kunt u uw afsluitingspercentage verhogen, de klanttevredenheid verbeteren en uw omzet bevorderen.

Een bedrijfsprocesstroom maakt een visualisatie van uw bedrijfsproces door speciale besturingselementen boven aan de entiteitformulieren te plaatsen. Gebruikers worden door diverse fasen van de verkoop-, marketing- of serviceprocessen geleid tot aan de voltooiing. Elk proces ondersteunt meerdere fasen en stappen. U kunt stappen toevoegen of verwijderen, de volgorde van fasen wijzigen of nieuwe entiteiten toevoegen aan de bedrijfsprocesstroom.

Met Update voor Dynamics 365 (online en on-premises) - december 2016 kunnen verschillende bedrijfsprocesstroomdefinities aan andere rollen worden gekoppeld en kunnen de exemplaren gelijktijdig op dezelfde entiteitsrecord worden uitgevoerd. Gebruikers kunnen schakelen tussen gelijktijdige bedrijfsprocesexemplaren en hun werk hervatten op een actueel stadium in het proces. Met de nieuwe visuele procesontwerper voor slepen-en-neerzetten kunnen processen worden gemaakt, zoals bedrijfsprocesstromen, taakstromen en bedrijfsregels, door middel van een intuïtieve grafische interface in Dynamics 365.

Voor gedetailleerde informatie over bedrijfsprocessen raadpleegt u TechNet: Bedrijfsprocesstromen.

In dit onderwerp

Ondersteuning voor programmering op de server voor bedrijfsprocesstromen

Ondersteuning voor programmering op de client voor bedrijfsprocesstromen

Maximum aantal processen, fasen en stappen

Ondersteuning voor programmering op de server voor bedrijfsprocesstromen

Een bedrijfsprocesstroomdefinitie wordt opgeslagen in de entiteit Workflow. Bedrijfsprocesstroom is een van de categorieën van het proces. Andere procescategorieën omvatten actie, werkstroom en dialoogvenster. Zie Procescategorieën in Dynamics 365 voor meer informatie. Aangepaste entiteiten en entiteiten met bijgewerkte UI-formulieren kunnen deelnemen aan de bedrijfsprocesstroom. De bijgewerkte UI-entiteiten hebben de eigenschap IsAIRUpdated ingesteld op true. Als u een entiteit wilt inschakelen voor de bedrijfsprocesstroom, stelt u de eigenschap IsBusinessProcessEnabled in op true.

Belangrijk

Het inschakelen van een entiteit voor bedrijfsprocesstroom is een proces in één richting. Het is niet omkeerbaar.

  • Bedrijfsprocesstroom definiëren

  • Bedrijfsprocesstroom activeren

  • Beveiliging voor bedrijfsprocesstromen beheren

  • Bedrijfsprocesstroomexemplaren beheren

  • Bedrijfsprocesstroom toepassen tijdens het maken van een entiteitsrecord

Bedrijfsprocesstroom definiëren

Met de nieuwe visuele bedrijfsprocesstroomontwerper in Dynamics 365 kunt u een bedrijfsprocesstroom definiëren. In de entiteit Workflow wordt een bedrijfsprocesstroomdefinitie opgeslagen. De volgende kenmerkwaarden moeten worden opgegeven in de entiteitsrecord Workflow voor een bedrijfsprocesstroom: name, category, businessprocesstype, primaryentity, uniquename en xaml. Voor informatie over deze kenmerken raadpleegt u workflow EntityType. Standaard wordt een bedrijfsprocesstroomrecord gemaakt met de status Draft.

Bedrijfsprocesstroom activeren

Voordat u de processtroom kunt gaan gebruiken, moet u deze activeren. Om deze te kunnen activeren, moet u over de bevoegdheid prvActivateBusinessProcessFlow voor de entiteit Workflow beschikken. Gebruik het bericht UpdateRequest om de status van de entiteitsrecord Workflow in te stellen op Activated.Meer informatie:Speciale bewerkingen uitvoeren via Update

Als u een bedrijfsprocesstroomdefinitie activeert (door de status van de corresponderende entiteitsrecord Workflow te wijzigen), wordt automatisch een aangepaste entiteit met de volgende naam gemaakt, waarin de geactiveerde bedrijfsprocesstroomexemplaren worden opgeslagen: "<voorvoegsel actieve oplossing>_<unieke naam>".

Als u bijvoorbeeld de unieke naam van de bedrijfsprocesstroomdefinitie hebt opgegeven als "myuniquebpf1" en de standaarduitgever voor uw actieve oplossing gebruikt, is de naam van de aangepaste entiteit voor de opslag van procesexemplaren "new_myuniquebpf1".

Als de waarde uniquename niet beschikbaar is voor een bedrijfsprocesstroomdefinitie, bijvoorbeeld als de bedrijfsprocesstroom is geïmporteerd als onderdeel van een oplossing uit een oudere versie, is de standaardnaam van de aangepaste entiteit "<voorvoegsel actieve oplossing>_bpf_<GUID_BPF_Definition>:

Belangrijk

De voorbeeldbedrijfsprocesstroomrecords die beschikbaar zijn in Dynamics 365, maken gebruik van systeementiteiten om de bijbehorende records van bedrijfsprocesstroomexemplaren op te slaan. Enkele van de voorbeeldentiteitsrecord voor bedrijfsprocesstromen zijn opportunitysalesprocess EntityType en leadtoopportunitysalesprocess EntityType.

Zoals eerder uitgelegd, maken alle nieuwe bedrijfsprocesstroomdefinities die u maakt gebruik van aangepaste entiteiten om de exemplaarrecords op te slaan.

Beveiliging voor bedrijfsprocesstromen beheren

De aangepaste entiteit die automatisch wordt gecreëerd na het activeren van een bedrijfsprocesstroom om exemplaren van bedrijfsprocesstromen op te slaan, voldoet aan het standaardbeveiligingsmodel dat voor alle aangepaste entiteiten geldt in Customer Engagement. Dit duidt erop dat bevoegdheden die zijn verleend voor deze entiteiten de machtigingen voor runtime bepalen voor gebruikers van bedrijfsprocesstromen.

De aangepaste entiteit van de bedrijfsprocesstroom heeft een organisatiebereik. De reguliere bevoegdheden voor maken, ophalen, bijwerken en verwijderen van deze entiteit bepalen de machtiging die de gebruiker heeft op basis van de toegewezen rollen. Wanneer de bedrijfsprocesstroomentiteit wordt gemaakt, hebben standaard alleen de beveiligingsrollen systeembeheerder en systeemaanpasser toegang. Voor eventuele andere beveiligingsrollen dient u expliciet machtigingen te verlenen voor deze aangepaste entiteit.

Bedrijfsprocesstroomexemplaren beheren

In de aangepaste entiteit die automatisch bij het activeren van een bedrijfsprocesstroomdefinitie wordt gemaakt, worden alle procesexemplaren voor de bedrijfsprocesstroomdefinitie opgeslagen. De aangepaste entiteit ondersteunt het via programmeren aanmaken en beheren van records (procesexemplaren) via de web-API en het CRM 2011-eindpunt. Als bijvoorbeeld de naam van de aangepaste entiteit "new_myuniquebpf1" is, kunt u met de volgende web-API-query alle records (procesexemplaren) in de aangepaste entiteit ophalen:


[Organization URI]/api/data/v8.2/new_myuniquebpf1s

Een procesexemplaar kan een van de volgende statussen hebben: Active, Finished of Aborted.

Belangrijk

Deze sectie biedt informatie over het programmatisch beheren van verschillende bedrijfsprocesstroomscenario's zoals het overschakelen van bedrijfsprocessen, het ophalen van procesexemplaren voor een entiteitsrecord, het ophalen van een actief pad en een actieve fase voor een procesexemplaar en het verplaatsen naar de volgende of vorige fase. U moet de bericht en de juiste bedrijfsprocesstroomentiteit/entiteiten gebruiken zoals die in deze sectie worden beschreven om uw bedrijfsprocesstromen programmatisch te beheren en te automatiseren.

Het bewerken van procesgerelateerde kenmerken (zoals ProcessId, StageId en TraversedPath) voor entiteiten die zijn ingeschakeld voor bedrijfsprocesstromen biedt geen garantie voor consistentie van de bedrijfsprocesstroomstatus en is geen ondersteund scenario. De enige uitzondering is dat u aanpassingen voor het kenmerk ProcessId kunt programmeren wanneer u een entiteitsrecord maakt om de standaardtoepassing van de bedrijfsprocesstroom te negeren voor het nieuwe record. Meer info: Bedrijfsprocesstroom toepassen tijdens het maken van een entiteitsrecord

Gebruik de berichten SetProcess Action of SetProcessRequest om een andere bedrijfsprocesstroom in te stellen als het actieve procesexemplaar voor de doelentiteitsrecord. Een actief procesexemplaar is degene die zichtbaar is in de gebruikersinterface voor de entiteitsrecord. Als er geen procesexemplaar bestaat van de opgegeven bedrijfsprocesstroomdefinitie wordt een nieuw bedrijfsprocesstroomexemplaar gemaakt en ingesteld als actief voor de entiteitsrecord. Als er al een procesexemplaar bestaat van de bedrijfsprocesstroomdefinitie, wordt dit procesexemplaar ingesteld als het actieve procesexemplaar voor de entiteitsrecord. Als u een specifiek procesexemplaar als actief procesexemplaar voor een entiteitsrecord wilt instellen, kunt u het exemplaar opgeven door middel van de eigenschap NewProcessInstance.

Het programmatisch instellen van een actief proces is hetzelfde als in de gebruikersinterface overschakelen naar een ander procesexemplaar voor de entiteitsrecord. Omdat elk bedrijfsprocesstroomexemplaar zijn eigen informatie voor fase en stapvoortgang bijhoudt, gaan er geen voortgangsgegeven verloren wanneer wordt overgeschakeld naar een andere bedrijfsprocesexemplaar en u gaat verder op hetzelfde punt als waar u bent opgehouden.

In de volgende voorbeeldcode ziet u hoe u kunt overschakelen naar een andere bedrijfsprocesstroom voor een entiteitsrecord:

SetProcessRequest setProcReq = new SetProcessRequest
{
    Target = new EntityReference(Opportunity.EntityLogicalName, _opportunityId),
    NewProcess = new EntityReference(Workflow.EntityLogicalName, _bpfId)
};
SetProcessResponse setProcResp = (SetProcessResponse)_serviceProxy.Execute(setProcReq);

In de bovenstaande voorbeeldcode vertegenwoordigt de variabele _bpfId de id van de bedrijfsprocesstroomdefinitie waarnaar u wilt overschakelen. U kunt de id van de vereiste bedrijfsprocesstroomdefinitie ophalen door een query uit te voeren op de entiteit Workflow. In de volgende voorbeeldcode ziet u hoe u de id van de bedrijfsprocesstroomdefinitie "Verkoopproces verkoopkans" in het voorbeeld kunt ophalen door een query uit te voeren op de entiteit Workflow:

QueryExpression opportunityBpfQuery = new QueryExpression
{
    EntityName = "workflow",
    ColumnSet =  new ColumnSet("name"),
    Criteria = new FilterExpression
    {
        Conditions =
        {
            new ConditionExpression
            {
                AttributeName = "uniquename",
                Operator = ConditionOperator.Equal,
                Values = { "opportunitysalesprocess" }
            }
        }
    }
};
Workflow retrievedBPF = (Workflow)_serviceProxy.RetrieveMultiple(opportunityBpfQuery).Entities[0];
_bpfId = retrievedBPF.Id;

Als u het volledige voorbeeld wilt bekijken, raadpleegt u Voorbeeld: werken met bedrijfsprocesstromen.

Gebruik de RetrieveProcessInstances Function of het bericht RetrieveProcessInstancesRequest om alle bedrijfsprocesstroomexemplaren voor een entiteitsrecord op te halen vanuit alle bedrijfsprocesdefinities. De bedrijfsprocesstroomexemplaren die voor een entiteit worden geretourneerd, worden gesorteerd op basis van het kenmerk modifiedon van het exemplaar. Zo is bijvoorbeeld het meest recent gewijzigde bedrijfsprocesstroomexemplaar de eerste record in de geretourneerde verzameling. Het meest recent gewijzigde bedrijfsprocesstroomexemplaar is het exemplaar dat in de gebruikersinterface actief is voor een entiteitsrecord.

In de volgende voorbeeldcode ziet u hoe u bedrijfsprocesstroomexemplaren voor een entiteitsrecord ophaalt en vervolgens de procesexemplaren opnoemt die aan de entiteitsrecord zijn gekoppeld:

RetrieveProcessInstancesRequest procOpp2Req = new RetrieveProcessInstancesRequest
{
    EntityId = _opportunityId,
    EntityLogicalName = Opportunity.EntityLogicalName
};

RetrieveProcessInstancesResponse procOpp2Resp = (RetrieveProcessInstancesResponse)_serviceProxy.Execute(procOpp2Req);

// Declare variables to store values returned in response
int processCount = procOpp2Resp.Processes.Entities.Count;
var activeProcessInstance = procOpp2Resp.Processes.Entities[0]; // First record is the active process instance
_processOpp2Id = activeProcessInstance.Id; // Id of the active process instance, which will be used
                                           // later to retrieve the active path of the process instance

if (processCount > 0)
{
    // Display the count of process instances concurrently associated with the opportunity record
    Console.WriteLine("\nCount of process instances for the opportunity record: {0}", processCount);

    // Display all the process instances associated with the opportunity record
    // Demonstrates that multiple processes can run concurrently against the same record
    Console.WriteLine("\nProcess instances associated with the opportunity record:");
    for (int i = 0; i<processCount; i++)
    {
        Console.WriteLine("\t{0}", procOpp2Resp.Processes.Entities[i].Attributes["name"]);
    }
}

In de geretourneerde records van het bedrijfsprocesstroomexemplaar voor een entiteitsrecords is ook de id van de actieve fase opgeslagen in het kenmerk processstageid. Hiermee kan het actieve stadium worden gezocht om door te gaan naar de vorige of de volgende fase. Als u dit wilt doen, moet u eerst het actieve pad van een bedrijfsprocesstroomexemplaar en de fasen vinden die beschikbaar zijn in het processtroomexemplaar door middel van de RetrieveActivePath Function of RetrieveActivePathRequest. In de volgende voorbeeldcode ziet u hoe u de procesfasen in het actieve pad voor een bedrijfsprocesstroomexemplaar en de actieve fase van het exemplaar ophaalt:

// Retrieve the active stage ID of in the active process instance
_activeStageId = new Guid(activeProcessInstance.Attributes["processstageid"].ToString());

// Retrieve the process stages in the active path of the current process instance
RetrieveActivePathRequest pathReq = new RetrieveActivePathRequest
{
    ProcessInstanceId = _processOpp2Id
};
RetrieveActivePathResponse pathResp = (RetrieveActivePathResponse)_serviceProxy.Execute(pathReq);

Console.WriteLine("\nRetrieved stages in the active path of the process instance:");
for (int i = 0; i <pathResp.ProcessStages.Entities.Count; i++)
{
    Console.WriteLine("\tStage {0}: {1} (StageId: {2})", i + 1,
                            pathResp.ProcessStages.Entities[i].Attributes["stagename"], 
                            pathResp.ProcessStages.Entities[i].Attributes["processstageid"]);

    // Retrieve the active stage name and active stage position based on the activeStageId for the process instance
    if (pathResp.ProcessStages.Entities[i].Attributes["processstageid"].ToString() == _activeStageId.ToString())
    {
        _activeStageName = pathResp.ProcessStages.Entities[i].Attributes["stagename"].ToString();
        _activeStagePosition = i;
    }
}

// Display the active stage name and Id
Console.WriteLine("\nActive stage for the process instance: {0} (StageID: {1})", _activeStageName, _activeStageId);

Als u de informatie voor de actieve fase en het de actieve pad hebt verkregen voor een bedrijfsprocesstroomexemplaar, kunt u de gegevens gebruiken om naar een eerdere of volgende fase in het actieve pad te gaan. Vooruit navigeren in de fasen moet u in volgorde doen. Dit wil zeggen dat u telkens moet doorgaan naar de eerstvolgende fase in het actieve pad. In de volgende voorbeeldcode ziet u hoe u naar de volgende fase voor een bedrijfsprocesstroomexemplaar kunt gaan:

// Retrieve the stage ID of the next stage that you want to set as active
_activeStageId = (Guid)pathResp.ProcessStages.Entities[_activeStagePosition + 1].Attributes["processstageid"];

// Retrieve the process instance record to update its active stage
ColumnSet cols1 = new ColumnSet();
cols1.AddColumn("activestageid");
Entity retrievedProcessInstance = _serviceProxy.Retrieve("opportunitysalesprocess", _processOpp2Id, cols1);

// Set the next stage as the active stage
retrievedProcessInstance["activestageid"] = new EntityReference(ProcessStage.EntityLogicalName, _activeStageId);
_serviceProxy.Update(retrievedProcessInstance);

Als u het volledige voorbeeld wilt bekijken, raadpleegt u Voorbeeld: werken met bedrijfsprocesstromen.

Bedrijfsprocesstroom toepassen tijdens het maken van een entiteitsrecord

Deze sectie biedt informatie over de standaardwerking bij het automatisch toepassen van bedrijfsprocesstromen op nieuwe entiteitsrecords die zijn gemaakt in Customer Engagement. Tevens vindt u hier informatie over hoe u de standaardwerking kunt negeren en een bedrijfsprocesstroom naar keuze kunt toepassen op nieuwe entiteitsrecords.

Wanneer een entiteit meerdere bedrijfsprocesstromen kent, past het systeem standaard een bedrijfsprocesstroom toe op het nieuwe entiteitsrecord volgens onderstaande stappen:

  1. Identificeer alle bedrijfsprocesstromen die van toepassing zijn op het nieuwe entiteitsrecord op basis van het kenmerk Workflow.PrimaryEntity van de definitierecords van de bedrijfsprocesstroom.

  2. Identificeer de bedrijfsprocesstroomdefinities waar de huidige gebruiker toegang toe heeft. Voor informatie over hoe de toegang tot een bedrijfsprocesstroom wordt bepaald en beheerd, bekijkt u Beveiliging voor bedrijfsprocesstromen beheren eerder in dit onderwerp.

  3. Alle bedrijfsprocesstroomdefinities in het systeem zijn onderhevig aan een algemene volgorde per entiteit. De volgorde van de bedrijfsprocesstroom is opgeslagen in het kenmerk Workflow.ProcessOrder. De bedrijfsprocesstroomdefinities voor een entiteit worden gesorteerd op basis van deze volgorde en de entiteit met de laagste waarde wordt gekozen.

  4. Als het entiteitsrecord wordt gemaakt vanuit een bedrijfsapp (app-module) wordt er een extra filterniveau toegepast om de bedrijfsprocesstroom te kiezen die automatisch wordt toegepast op het nieuwe entiteitsrecord. Bij het werken in een app hebben gebruikers alleen toegang tot relevante entiteiten, bedrijfsprocesstromen, weergaven en formulieren overeenkomstig de beveiligingsrollen die zijn toegewezen aan de bedrijfsapp.

    • Als de bedrijfsapp geen bedrijfsprocesstroom bevat, dan wordt de bedrijfsprocesstroom toegepast zoals uitgelegd in stap 1 tot en met 3.

    • Als de bedrijfsapp één of meerdere bedrijfsprocesstromen heeft, dan kunnen alleen de bedrijfsprocesstromen die in de app aanwezig zijn worden toegepast. In dit geval, wanneer de gebruiker werkt in een bedrijfsapp, wordt de lijst van bedrijfsprocesstromen uit stap 3 verder gefilterd zodat alleen de stromen overblijven die deel uitmaken van de bedrijfsapp en aanwezig zijn in de app-module. Ze worden gesorteerd op basis van de procesvolgorde.

    • Als er geen bedrijfsprocesstroom aanwezig is in een bedrijfsapp voor de entiteit, of geen een waartoe de gebruiker toegang heeft, dan wordt er geen bedrijfsprocesstroom toegepast voor het nieuwe entiteitsrecord.

U kunt de standaardwerking negeren voor bedrijfsprocesstromen die automatisch worden toegepast op nieuwe entiteitsrecords. Hiervoor stelt u het kenmerk ProcessId van de entiteit in op een van de volgende waarden wanneer u een nieuw entiteitsrecord maakt:

  • Kies de waarde Guid.Empty om het toepassen van een bedrijfsprocesstroom voor nieuwe entiteitsrecords over te slaan. Dit kan handig zijn wanneer u entiteitsrecords in bulk maakt, maar er geen bedrijfsprocesstromen op wilt toepassen.

  • Stel een specifieke bedrijfsprocesstroomentiteit (als een entiteitsverwijzing) in als waarde. In dit geval past het systeem de opgegeven bedrijfsprocesstroom toe, in plaats van er een toe te passen volgens de standaardprocedure.

Als u geen waarde instelt voor het kenmerk ProcessId wanneer u een nieuw entiteitsrecord maakt, past het systeem de standaardprocedure toe die eerder is uitgelegd.

Notitie

Het negeren van de standaardwerking voor het automatisch toepassen van bedrijfsprocesstromen op nieuwe entiteitsrecords wordt alleen ondersteund door dit te programmeren. U kunt dit niet instellen in de gebruikersinterface.

Ondersteuning voor programmering op de client voor bedrijfsprocesstromen

Dynamics 365 biedt biedt een clientobjectmodel dat u kunt gebruiken voor interactie met bedrijfsprocesstromen in uw formulierscripts. Met bedrijfsprocesstromen worden steeds op de client gebeurtenissen geactiveerd wanneer een proces op een record wordt toegepast, de fase wordt gewijzigd, of de status wordt gewijzigd in Active, Finished of Aborted.Meer informatie:Scripts schrijven voor bedrijfsprocesstromen

Maximum aantal processen, fasen en stappen

Per entiteit is de standaardwaarde voor het maximumaantal geactiveerde bedrijfsprocesstromen 10. U kunt een andere waarde opgeven met het kenmerk Organization.MaximumActiveBusinessProcessFlowsAllowedPerEntity. Echter, wanneer de waarde groter is dan 10, ziet u mogelijk een verlaging van de prestaties van uw systeem als u overschakelt tussen processen of een record opent met een toegewezen bedrijfsprocesstroom. Dit zal vooral merkbaar zijn als de processen meerdere entiteiten omvatten.

De volgende instellingen zijn niet aanpasbaar:

  • Het maximumaantal fasen per entiteit in het proces is 30.

  • Het maximumaantal stappen in elke fase is 30.

  • Het maximumaantal entiteiten die aan de processtroom kunnen deelnemen is 5.

Zie ook

Video: Bedrijfsproces in Microsoft Dynamics CRM 2015
Procescategorieën in Dynamics 365
Bedrijfsprocessen automatiseren met het Dynamics 365-proces
Realtime-werkstromen maken
Proces Enablement met Microsoft Dynamics CRM 2013
Help en training: Een nieuw bedrijfsproces maken
Help en training: Een beveiligingsrol aan een bedrijfsproces toewijzen
Help & Training: Medewerkers door veelvoorkomende taken leiden via processen
Help en training: Bedrijfsprocessen toevoegen die gereed zijn voor gebruik
TechNet: Bedrijfsprocesstromen
Scripts schrijven voor bedrijfsprocesstromen

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht