Condividi tramite


Creazione di flussi di lavoro in tempo reale

 

Data di pubblicazione: novembre 2016

Si applica a: Dynamics CRM 2015

Analogamente ai flussi di lavoro asincroni, i flussi di lavoro in tempo reale sono utilizzabili per modellare e automatizzare i processi aziendali del mondo reale. Facoltativamente possono richiedere l'input dell'utente, possono iniziare automaticamente in base a condizioni di specificati o è possono essere avviati manualmente da un utente. I flussi di lavoro in tempo reale sono pensati per utenti aziendali, ad esempio la business analyst, per implementare la funzionalità simili ai plug-in sincroni senza richiedere esperienza di programmazione .NET Framework. È possibile creare flussi di lavoro asincroni o in tempo reale nell'applicazione Web Microsoft Dynamics 365 o nel codice.

Alcuni punti chiave sui flussi di lavoro in tempo reale includono gli elementi seguenti:

  • Definito utilizzando un record dell'entità Workflow, simile a un flusso di lavoro asincrono.

  • Viene eseguito in una fase della pipeline di esecuzione evento, analogamente ai plug-in sincroni. Il flusso di lavoro in tempo reale può essere eseguito prima (operazione preliminare), dopo (operazione successiva) o durante l'operazione principale. Un flusso di lavoro in tempo reale eseguito durante l'operazione principale rappresenta l'implementazione di un'azione personalizzata. I flussi di lavoro in tempo reale possono essere classificati in una fase analogamente ai plug-in.Ulteriori informazioni:Fasi pipeline

  • Che sia configurato per l'esecuzione su richiesta o in risposta a un evento, un flusso di lavoro in tempo reale viene eseguito immediatamente anziché essere messo in coda per essere eseguito in un secondo momento.

  • Può essere eseguito nel contesto di protezione dell'utente connesso o del proprietario del flusso di lavoro. Tuttavia, i flussi di lavoro impostati per essere eseguiti su richiesta vengono eseguiti sempre nel contesto di protezione dell'utente connesso.

  • Non può contenere ritardi o attività di attesa.

  • Solo i log di errori e solo quando la registrazione è abilitata.

  • Viene eseguito nella transazione corrente. Tutte le attività nel flusso di lavoro e nei flussi di lavoro figlio, ad eccezione dei flussi di lavoro asincroni, fanno parte di una singola transazione. I flussi di lavoro figlio asincroni sono messi in coda e vengono eseguiti in una transazione distinta.

  • Può essere convertito nel flusso di lavoro asincrono e poi di nuovo in flusso di lavoro in tempo reale.

In questo argomento

Privilegi di sicurezza obbligatori

Creare un flusso di lavoro in tempo reale nel codice

Convertire un flusso di lavoro asincrono e in flusso di lavoro in tempo reale e viceversa.

Gestione degli errori e rollback

Pacchetto per un flusso di lavoro in tempo reale da distribuire

Privilegi di sicurezza obbligatori

Per attivare flussi di lavoro in tempo reale per l'esecuzione, è necessario il privilegio di sicurezza denominato Attiva processi in tempo reale (prvActivateSynchronousWorkflow). Il privilegio Esecuzione processo del flusso di lavoro (prvWorkflowExecution) è necessario per avviare il flusso di lavoro. Poiché un flusso di lavoro in tempo reale impatta l'operazione di sistema principale, è consigliabile che solo a un gruppo ristretto di utenti con esperienza venga concesso il privilegio di attivazione.

Per ulteriori informazioni su questi privilegi, vedere scheda Personalizzazione.

Creare un flusso di lavoro in tempo reale nel codice

Mentre Microsoft Dynamics CRM Online supporta i flussi di lavoro in tempo reale, è necessario crearli in modo interattivo nell'applicazione Web. I flussi di lavoro basati su XAML, illustrati in questa sezione, sono supportati solo dai server locali o IFD. Per ulteriori informazioni sulla conformità dei flussi di lavoro XAML, vedere Flussi di lavoro XAML personalizzati.

È possibile creare un flusso di lavoro in tempo reale nel codice creando un record dell'entità Workflow. Verificare i metadati dell'attributo dell'entità Workflow utilizzando lo strumento Browser di metadati o il foglio di calcolo EntityMetadata.xlsx nel pacchetto SDK.Per visualizzare i metadati di entità per l'organizzazione, installa la soluzione Browser di metadati descritta in Visualizzazione dei metadati per l'organizzazione. Puoi inoltre visualizzare i metadati per un'organizzazione non personalizzata nel file Excel EntityMetadata.xlsx incluso nella cartella di livello superiore di Download degli SDK. Scarica il pacchetto SDK di Microsoft Dynamics CRM.

Nell'esempio seguente viene confrontato il codice che crea un flusso di lavoro asincrono con il codice che crea un flusso di lavoro in tempo reale.


// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);

// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

Il flusso di lavoro in tempo reale ha alcune proprietà aggiuntive impostate che il flusso di lavoro asincrono non ha:

Attributo di flusso di lavoro

Descrizione

Category

Impostato su WorkflowCategory.Workflow.

RunAs

Specifica di eseguire il flusso di lavoro nel contesto di sicurezza del proprietario del flusso di lavoro (workflow_runas.Owner), o dell'utente connessoworkflow_runas.CallingUser().

SyncWorkflowLogOnError

Quando è true, gli errori vengono registrati in ProcessSession. A differenza dei flussi di lavoro asincroni, l'esecuzione del flusso di lavoro in tempo reale non viene registrata nei record del System Job.

CreateStage, DeleteStage o UpdateStage

Identifica la fase nella pipeline di esecuzione dell'evento in cui il flusso di lavoro deve essere eseguito: prima dell'operazione principale (workflow_stage.Preoperation), o dopo (workflow_stage.Postoperation). È necessario che la fase corrisponda all'evento di attivazione per l'operazione desiderata. Se ad esempio TriggerOnUpdate è true, è necessario impostare anche UpdateStage.

I flussi di lavoro in tempo reale non possono essere eseguiti nei recuperi. A parte i recuperi, gli altri messaggi dei servizi Web supportati eseguono il mapping a uno di questi tre eventi supportati. Ad esempio, un'operazione o un'impostazione di stato in ultima analisi è equivalente a un aggiornamento.

Mode

Questa è la modalità di esecuzione. Impostare questo in WorkflowMode.Realtime.

Rank

È possibile ordinare l'esecuzione di plug-in e flussi di lavoro in tempo reale in una fase impostando la classificazione. I plug-in o flussi di lavoro in tempo reale con una classificazione di 1 vengono eseguiti prima di quelli con una classificazione di 2, e così via.

Xaml

Impostato sul codice XAML che definisce il flusso di lavoro in tempo reale.

È possibile visualizzare il codice di esempio completo per creare un flusso di lavoro in tempo reale nell'argomento Esempio: creare un flusso di lavoro in tempo reale nel codice.

Convertire un flusso di lavoro asincrono e in flusso di lavoro in tempo reale e viceversa.

È possibile convertire i flussi di lavoro da asincroni a in tempo reale e viceversa utilizzando UpdateRequest senza dover riscrivere il flusso di lavoro, a patto che il flusso di lavoro asincrono non includa alcuna attività di attesa o ritardo. È inoltre possibile convertire in modo interattivo utilizzando l'applicazione Web. Il flusso di lavoro deve essere in stato bozza (non attivato) prima di eseguire la conversione.

Convertire un flusso di lavoro asincrono e in flusso di lavoro in tempo reale.

  1. Creare un UpdateRequest per flusso di lavoro.

  2. Impostare la proprietà Mode del flusso di lavoro su WorkflowMode.Realtime.

  3. Impostare CreateStage, UpdateStage o DeleteStage del flusso di lavoro in base alle esigenze. Ad esempio, se il flusso di lavoro è impostato su TriggerOnDelete, sarà necessario impostare anche la proprietà DeleteStage.

  4. Chiamare il metodo Execute passando la richiesta di aggiornamento come parametro.

Convertire un flusso di lavoro in tempo reale in asincrono

  1. Creare un UpdateRequest per flusso di lavoro.

  2. Impostare la proprietà Mode del flusso di lavoro su WorkflowMode.Background.

  3. Chiamare il metodo Execute passando la richiesta di aggiornamento come parametro.

Gestione degli errori e rollback

Qualsiasi attività flusso di lavoro eseguita durante la transazione di database che passa un'eccezione nuovamente alla piattaforma annulla l'operazione principale. Ciò provoca un rollback dell'operazione principale se si è già verificata. Inoltre, viene eseguito il rollback di tutti i plug-in registrati pre-evento o post-evento o dei flussi di lavoro in tempo reale che non sono ancora stati eseguiti. Tutti i flussi di lavoro asincroni che vengono attivati dallo stesso evento non verranno eseguiti.

Se si include un'attività Interrompi flusso di lavoro (Classe TerminateWorkflow) con l'opzione annullata nel flusso di lavoro, è possibile aggiungere un messaggio di stato personalizzato (proprietàReason ) all'attività che contiene una singola riga di testo da far visualizzare all'utente nella finestra di dialogo Errore processo aziendale.

Quando SyncWorkflowLogOnError è impostato su true, gli errori del flusso di lavoro in tempo reale sono registrati nei record dell'entità ProcessSession.

Pacchetto per un flusso di lavoro in tempo reale da distribuire

Per distribuire il flusso di lavoro affinché possa essere importato in un'organizzazione Microsoft Dynamics 365, aggiungere il flusso di lavoro a una soluzione Microsoft Dynamics 365. Questa operazione può essere facilmente eseguita tramite l'applicazione Web passando a Impostazioni > Personalizzazioni > Soluzioni. È inoltre possibile scrivere codice per creare la soluzione. Per ulteriori informazioni sulle soluzioni, vedere Comprimere e distribuire estensioni con soluzioni.

Vedere anche

Scrivere i flussi di lavoro per automatizzare i processi aziendali.
Creare azioni personalizzate
Pipeline di esecuzione evento
Scrivere plug-in per estendere i processi aziendali

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright