Bagikan melalui


Membuat Aktivitas di Runtime dengan DynamicActivity

DynamicActivity adalah kelas konkret yang sudah disegel dengan konstruktor publik. DynamicActivity dapat digunakan untuk merakit fungsionalitas aktivitas saat runtime menggunakan DOM aktivitas.

Fitur DynamicActivity

DynamicActivity memiliki akses ke properti eksekusi, argumen, dan variabel, tetapi tidak ada akses ke layanan runtime seperti penjadwalan aktivitas anak atau pelacakan.

Properti tingkat atas dapat diatur menggunakan objek Argument alur kerja. Dalam kode imperatif, argumen ini dibuat menggunakan properti CLR pada jenis baru. Di XAML, mereka dinyatakan menggunakan x:Class tag dan x:Member .

Aktivitas yang dibangun menggunakan DynamicActivity antarmuka dengan perancang menggunakan ICustomTypeDescriptor. Aktivitas yang dibuat dalam perancang dapat dimuat secara dinamis menggunakan Load, seperti yang ditunjukkan dalam prosedur berikut.

Untuk membuat aktivitas saat runtime menggunakan kode imperatif

  1. OpenVisual Studio 2010.

  2. Pilih File, Baru, Proyek. Pilih Alur Kerja 4.0 di bawah Visual C# di jendela Jenis Proyek , dan pilih simpul v2010 . Pilih Aplikasi Konsol Alur Kerja Berurutan di jendela Templat . Beri nama proyek baru DynamicActivitySample.

  3. Klik kanan Workflow1.xaml di proyek HelloActivity dan pilih Hapus.

  4. Buka Program.cs. Tambahkan direktif berikut ke bagian atas file.

    using System.Collections.Generic;
    
  5. Gantikan isi metode Main dengan kode berikut, yang membuat sebuah aktivitas Sequence yang berisi satu aktivitas WriteLine dan menetapkannya ke properti Implementation dari aktivitas dinamis baru.

    //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. Jalankan aplikasi. Jendela konsol dengan teks "Halo Dunia!" ditampilkan.

Untuk pembuatan aktivitas pada saat runtime menggunakan XAML

  1. Buka Visual Studio 2010.

  2. Pilih File, Baru, Proyek. Pilih Alur Kerja 4.0 di bawah Visual C# di jendela Jenis Proyek , dan pilih simpul v2010 . Pilih Aplikasi Konsol Alur Kerja di jendela Templat . Beri nama proyek baru DynamicActivitySample.

  3. Buka Workflow1.xaml di proyek HelloActivity. Klik opsi Argumen di bagian bawah perancang. Buat argumen baru In yang disebut TextToWrite jenis String.

  4. Seret aktivitas WriteLine dari bagian Primitives di kotak alat ke permukaan perancang. Tetapkan nilai TextToWrite ke properti Teks aktivitas.

  5. Buka Program.cs. Tambahkan direktif berikut ke bagian atas file.

    using System.Activities.XamlIntegration;
    
  6. Ganti konten Main metode dengan kode berikut.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. Jalankan aplikasi. Jendela konsol dengan teks "Halo Dunia!" muncul.

  8. Klik kanan file Workflow1.xaml di Penjelajah Solusi dan pilih Tampilkan Kode. Perhatikan bahwa kelas aktivitas dibuat dengan x:Class dan properti dibuat dengan x:Property.

Lihat juga