Condividi tramite


Creazione di un'attività in fase di esecuzione con DynamicActivity

DynamicActivity è una classe sealed concreta con costruttore pubblico. DynamicActivity può essere usata per assemblare la funzionalità di attività in fase di esecuzione tramite un unico DOM di attività.

Funzionalità DynamicActivity

La classe DynamicActivity dispone dell'accesso alle proprietà, agli argomenti e alle variabili di esecuzione, ma non ai servizi in fase di esecuzione quali la pianificazione di attività figlio o il rilevamento.

Usando gli oggetti Argument del flusso di lavoro è possibile impostare le proprietà di primo livello. Nel codice imperativo, questi argomenti vengono creati usando le proprietà CLR in un nuovo tipo. In XAML, vengono dichiarati usando i tag x:Class e x:Member.

Le attività costruite usando la classe DynamicActivity si interfacciano con l'utilità di progettazione tramite l'oggetto ICustomTypeDescriptor. Le attività create nell'utilità di progettazione possono essere caricate usando il metodo Load in modo dinamico, come dimostrato nella procedura riportata di seguito.

Per creare un'attività in fase di esecuzione usando il codice imperativo

  1. Aprire OpenVisual Studio 2010.

  2. Scegliere File, Nuovo, Progetto. Selezionare Workflow 4.0 sotto Visual C# nella finestra Tipi progetto e scegliere il nodo v2010. Selezionare Applicazione console flusso di lavoro sequenziale nella finestra Modelli. Assegnare il nome DynamicActivitySample al nuovo progetto.

  3. Fare clic con il pulsante destro del mouse su Workflow1.xaml nel progetto HelloActivity e selezionare Elimina.

  4. Aprire Program.cs. Aggiungere la seguente direttiva all'inizio del file.

    using System.Collections.Generic;  
    
  5. Sostituire il contenuto del metodo Main con il codice seguente che crea un'attività Sequence che contiene una singola attività WriteLine e la assegna alla proprietà Implementation di una nuova attività dinamica.

    //Define the input argument for the activity  
    var textOut = new InArgument<string>();  
    //Create the activity, property, and implementation  
                Activity dynamicWorkflow = new DynamicActivity()  
                {  
                    Properties =
                    {  
                        new DynamicActivityProperty  
                        {  
                            Name = "Text",  
                            Type = typeof(InArgument<String>),  
                            Value = textOut  
                        }  
                    },  
                    Implementation = () => new Sequence()  
                    {  
                        Activities =
                        {  
                            new WriteLine()  
                            {  
                                Text = new InArgument<string>(env => textOut.Get(env))  
                            }  
                        }  
                    }  
                };  
    //Execute the activity with a parameter dictionary  
                WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } });  
                Console.ReadLine();  
    
  6. Eseguire l'applicazione. Viene visualizzata una finestra della console con il testo "Hello World!".

Per creare un'attività in fase di esecuzione usando il codice XAML

  1. Aprire Visual Studio 2010.

  2. Scegliere File, Nuovo, Progetto. Selezionare Workflow 4.0 sotto Visual C# nella finestra Tipi progetto e scegliere il nodo v2010. Selezionare Applicazione console flusso di lavoro nella finestra Modelli. Assegnare il nome DynamicActivitySample al nuovo progetto.

  3. Aprire Workflow1.xaml nel progetto HelloActivity. Fare clic sull'opzione Argomenti nella parte inferiore dell'utilità di progettazione. Creare un nuovo argomento In denominato TextToWrite di tipo String.

  4. Trascinare un'attività WriteLine dalla sezione Primitive della casella degli strumenti nell'area di progettazione. Assegnare il valoreTextToWrite alla proprietà Text dell'attività.

  5. Aprire Program.cs. Aggiungere la seguente direttiva all'inizio del file.

    using System.Activities.XamlIntegration;  
    
  6. Sostituire il contenuto del metodo Main con il codice seguente.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");  
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });  
    Console.ReadLine();  
    
  7. Eseguire l'applicazione. Viene visualizzata una finestra della console con il testo "Hello World!".

  8. Fare clic con il pulsante destro del mouse sul file Workflow1.xaml in Esplora soluzioni e scegliere Visualizza codice. Si noti che la classe di attività viene creata con x:Class e la proprietà viene creata con x:Property.

Vedi anche