Inputプロパティ項目を動的に変更する -System Center Orchestrator IP開発-

System Center OrchestratorのIP(Integration Pack)の開発についてです。

一つのActivity(活動)に複数の機能を持たせたい場合があります。
例えばWindows Azure Integration Pack for Orchestratorでは、それが実現されています。

クラウドサービスの場合は、
f:id:yomon8:20140514190938p:plain




最初はインプットパラメータは設定できずに、
Activityを選ぶ形になります。

ヘルプから選べるActivityを選択します。

Activityによってインプットプロパティが変化するのがわかります。
例えばCreate Cloud Serviceの場合と、

Update Cloud Serviceの場合では処理もインプットプロパティも変化します。


これと同じことを自分の開発したIP(Integration Pack)でも実装したいと思って調べてみて、やり方がわかったので書いておきます。

実装方法

サンプルコードはこちらです。
列挙型のoptionの選択によってインプットプロパティを変更する例です。

using Microsoft.SystemCenter.Orchestrator.Integration;

namespace MyApp
{
    [Activity("OptionTest")]
    public class OptionTest : IActivity, IActivityWithRedesign
    {
        enum option
        {
            OptionA,
            OptionB,
            OptionC
        }

        public void Design(IActivityDesigner designer)
        {
            designer.AddInput("Option").WithEnumBrowser(typeof(option)).WithRedesign();
        }

        public void Execute(IActivityRequest request, IActivityResponse response)
        {
            //通常通り処理を実装します
        }
                
        public void Redesign(IActivityDesigner designer, IRedesignRequest request)
        {
            //選択されたオプションの取り出し
            string selectedOption = request.RedesignInputs["Option"].ToString();

            //選択されたオプションをデフォルトパラメータとして再設定
            designer.AddInput("Option").WithEnumBrowser(typeof(option)).WithDefaultValue(selectedOption.ToString()).WithRedesign();
            
            //選択されたオプション毎にインプットパラメータを変更
            if(selectedOption == option.OptionA.ToString())
                designer.AddInput("InputForOptionA");
            else if(selectedOption == option.OptionB.ToString())
                designer.AddInput("InputForOptionB");
            else if(selectedOption == option.OptionC.ToString())
                designer.AddInput("InputForOptionC");
            
        }
    }
}


これでIPをビルドしてDesignerから定義画面を見てみます。
上で挙げたAzureの例のように最初にオプションを選べるようになっています。

選べるオプションは今回の場合は列挙型で設定したものです。

OptionAを選んだ場合、

OptionBを選んだ場合、

OptionCを選んだ場合、


思った通りに動いていることがわかります。
これを応用すれば、場合によっては管理がしやすくなるかもしれません。