Bagikan melalui


Argumen yang diperlukan dan grup kelebihan beban

Aktivitas dapat dikonfigurasi sehingga argumen tertentu harus terikat agar aktivitas valid untuk eksekusi. Atribut RequiredArgument digunakan untuk menunjukkan bahwa argumen tertentu pada aktivitas diperlukan dan OverloadGroup atribut digunakan untuk mengelompokkan kategori argumen yang diperlukan bersama-sama. Dengan menggunakan atribut , penulis aktivitas dapat menyediakan konfigurasi validasi aktivitas yang sederhana atau kompleks.

Gunakan argumen yang diperlukan

Untuk menggunakan RequiredArgument atribut dalam aktivitas, tunjukkan argumen yang diinginkan menggunakan RequiredArgumentAttribute. Dalam contoh ini, Add aktivitas didefinisikan yang memiliki dua argumen yang diperlukan.

public sealed class Add : CodeActivity<int>
{
    [RequiredArgument]
    public InArgument<int> Operand1 { get; set; }

    [RequiredArgument]
    public InArgument<int> Operand2 { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        return Operand1.Get(context) + Operand2.Get(context);
    }
}

Di XAML, argumen yang diperlukan juga ditunjukkan dengan menggunakan RequiredArgumentAttribute. Dalam contoh Add ini, aktivitas didefinisikan dengan menggunakan tiga argumen dan menggunakan Assign<T> aktivitas untuk melakukan operasi penambahan.

<Activity x:Class="ValidationDemo.Add" ...>
  <x:Members>
    <x:Property Name="Operand1" Type="InArgument(x:Int32)">
      <x:Property.Attributes>
        <RequiredArgumentAttribute />
      </x:Property.Attributes>
    </x:Property>
    <x:Property Name="Operand2" Type="InArgument(x:Int32)">
      <x:Property.Attributes>
        <RequiredArgumentAttribute />
      </x:Property.Attributes>
    </x:Property>
    <x:Property Name="Result" Type="OutArgument(x:Int32)" />
  </x:Members>
  <Assign>
    <Assign.To>
      <OutArgument x:TypeArguments="x:Int32">[Result]</OutArgument>
    </Assign.To>
    <Assign.Value>
      <InArgument x:TypeArguments="x:Int32">[Operand1 + Operand2]</InArgument>
    </Assign.Value>
  </Assign>
</Activity>

Jika aktivitas digunakan dan salah satu argumen yang diperlukan tidak terikat, kesalahan validasi berikut dikembalikan.

Nilai untuk argumen aktivitas yang diperlukan 'Operand1' tidak disediakan.

Nota

Untuk informasi selengkapnya tentang memeriksa dan menangani kesalahan dan peringatan validasi, lihat Memanggil Validasi Aktivitas.

Menggunakan grup kelebihan beban

Grup kelebihan beban menyediakan metode untuk menunjukkan kombinasi argumen mana yang valid dalam aktivitas. Argumen dikelompokkan bersama dengan menggunakan OverloadGroupAttribute. Setiap grup diberi nama yang ditentukan oleh OverloadGroupAttribute. Aktivitas ini valid ketika hanya satu set argumen dalam grup kelebihan beban yang terikat. Dalam contoh berikut, sebuah kelas CreateLocation ditentukan.

class CreateLocation: Activity
{
    [RequiredArgument]
    public InArgument<string> Name { get; set; }

    public InArgument<string> Description { get; set; }

    [RequiredArgument]
    [OverloadGroup("G1")]
    public InArgument<int> Latitude { get; set; }

    [RequiredArgument]
    [OverloadGroup("G1")]
    public InArgument<int> Longitude { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")]
    [OverloadGroup("G3")]
    public InArgument<string> Street { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")]
    public InArgument<string> City { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")]
    public InArgument<string> State { get; set; }

    [RequiredArgument]
    [OverloadGroup("G3")]
    public InArgument<int> Zip { get; set; }
}

Tujuan dari aktivitas ini adalah untuk menentukan lokasi di AS. Untuk melakukan ini, pengguna aktivitas dapat menentukan lokasi menggunakan salah satu dari tiga grup argumen. Untuk menentukan kombinasi argumen yang valid, tiga grup kelebihan beban ditentukan. G1 berisi argumen Latitude dan Longitude. G2 berisi Street, City, dan State. G3 berisi Street dan Zip. Name juga merupakan argumen yang diperlukan, tetapi bukan bagian dari grup kelebihan beban. Agar aktivitas ini valid, Name harus terikat bersama dengan semua argumen dari satu dan hanya satu grup kelebihan beban.

Dalam contoh berikut, diambil dari sampel Aktivitas Akses Database , ada dua grup kelebihan beban: ConnectionString dan ConfigFileSectionName. Agar aktivitas ini valid, argumen ProviderName dan ConnectionString harus terikat, atau argumen ConfigName, tetapi tidak keduanya sekaligus.

public class DbUpdate: AsyncCodeActivity
{
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }

    [DependsOn("Parameters")]
    public OutArgument<int> AffectedRecords { get; set; }
}

Saat menentukan grup kelebihan beban:

  • Grup kelebihan beban tidak boleh berupa subset atau set yang setara dari grup kelebihan beban lain.

    Nota

    Ada satu pengecualian untuk aturan ini. Jika grup kelebihan beban adalah subset dari grup kelebihan beban lain, dan subset hanya berisi argumen di mana RequiredArgument adalah false, maka grup kelebihan beban valid.

  • Grup kelebihan beban dapat tumpang tindih tetapi merupakan kesalahan jika persimpangan grup berisi semua argumen yang diperlukan dari satu atau kedua grup kelebihan beban. Dalam contoh sebelumnya, grup overloading G2 dan G3 mengalami tumpang tindih, tetapi karena persimpangannya tidak mengandung semua argumen dari salah satu atau kedua grup, ini dinyatakan valid.

Saat mengikat argumen dalam grup kelebihan beban:

  • Grup kelebihan beban dianggap terikat jika semua RequiredArgument argumen dalam grup terikat.
  • Jika grup memiliki argumen nol RequiredArgument dan setidaknya satu argumen terikat, maka grup dianggap terikat.
  • Jika tidak ada grup kelebihan beban yang terikat, ini adalah kesalahan validasi kecuali ada satu grup kelebihan beban yang tidak memiliki argumen di dalamnya.
  • Ini adalah kesalahan untuk memiliki lebih dari satu grup kelebihan beban yang terikat, yaitu, semua argumen yang diperlukan dalam satu grup kelebihan beban terikat dan argumen apa pun dalam grup kelebihan beban lain juga terikat.