System Center OrchestratorのIP(Integration Pack)の開発についてです。
一つのActivity(活動)に複数の機能を持たせたい場合があります。
例えばWindows Azure Integration Pack for Orchestratorでは、それが実現されています。
クラウドサービスの場合は、
最初はインプットパラメータは設定できずに、
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の例のように最初にオプションを選べるようになっています。
思った通りに動いていることがわかります。
これを応用すれば、場合によっては管理がしやすくなるかもしれません。