.NETアセンブリからWebサービスをインポートする
幅広いWebサービスに対応するために、Integration StudioではWebサービスクライアントの定義をインポートできます。OutSystemsでは、これを「Web参照」と呼びます。Web参照は拡張機能にカプセル化してService Studioで使用することができます。
Service Studioでの利用方法の詳細については、「SOAP Webサービスを利用する」をご覧ください。
この機能は.NETスタックでのみ利用可能です。
Visual Studioを使用して.NETアセンブリプロキシを作成する
はじめにWSDLアドレスを取得します。取得すると、新しいVisual Studioプロジェクトを作成できるようになります。新しいVisual C# Class Libraryプロジェクトを選択し、.NETフレームワーク3.5以降に設定します。
Solution Explorerで新しいプロジェクトを右クリックし、[Add Service Reference...]を選択します。[Add Service Reference]ウィンドウで、[Advanced...]ボタンをクリックした後、[Add Web Reference...]ボタンをクリックします。次に、WebサービスのWSDLアドレスをURLフィールドに入力します。
Visual StudioがWebサービスによって公開されているメソッドを検出した後、[Add Reference]ボタンを押します。次に、F6
を押すか、プロジェクトを右クリックして[Build]を選択し、プロジェクトを作成します。
コマンドラインを使用して.NETアセンブリプロキシを作成する
Visual Studioで生成できるのは一度に1つのプロキシのみであるため、同じストラクチャ(同一のデータ型)を使用する複数のサービスをインポートする必要がある場合は、「Employee1」、「Employee2」、「Employee3」のように同じストラクチャに複数の表現が存在することになります。
.NET Framework SDKで入手可能なDisco.exeやWsdl.exeツールを使用すると、この問題を解決できます。
-
Visual Studio ToolsフォルダからVisual Studio Command Promptを起動します。
-
disco.exe <first_wsdl_path>
を実行してresults.discomap
ファイルを生成します。ファイル名を「wsdl1.discomap
」に変更します。エンドポイントが同一のWebサービスが2つある場合、生成されたファイルを別々のフォルダに保存する必要があります。そうしない場合、最初のWebサービス用に生成されたファイルは次の手順で削除されます。 -
disco.exe <second_wsdl_path>
を実行します。生成されたファイル名をwsdl2.discomap
に再度変更します。 -
wsdl.exe /shareTypes /out:proxy.cs wsdl1.discomap wsdl2.discomap
を実行し、C# プロキシを生成します。 -
csc.exe /target:library proxy.cs
を実行し、プロキシをDLLにコンパイルします。必ず.NET Framework 3.5以降のC# コンパイラを使用します。
.NETアセンブリをインポートする
Integration Studioで[File]、[Import]をクリックし、[Import Actions from .NET Assembly... (.NET Only)]を選択して先ほど作成したDLLをインポートします。詳細については、「.NETアセンブリからアクションをインポートする」をご覧ください。
Integration StudioはDLLをイントロスペクションし、インポートするWebサービスメソッドを選択するよう求めます。
最後に、インポートするメソッドを選択します。ウィザードの終了後、Integration StudioはService Studioアクションとストラクチャを生成します。これで他の拡張機能内と同様に、どのようなカスタムロジックでも開発できます。
Webサービスを利用する
インポートを行うと、複数のコンストラクタ(<Structure_Name>_New
)が自動で作成されます。ご注意ください。これらのコンストラクタを使用して、Webサービスを起動する際のストラクチャをインスタンス化します。
他の拡張機能と同様に、[1-Click Publish]ボタンを使用してサーバーに拡張機能をパブリッシュします。操作が終了すると、Webサービスをカプセル化した拡張機能を、参照によってすべてのモジュールで使用できるようになります。
Web参照の定義が変更された場合、新しいWeb参照をカプセル化するための新しい拡張機能を作成し、すべてのモジュールがこの新しい拡張機能を参照するよう設定する必要があります。
サポートされているWebサービス構成
OutSystems言語の表現力が原因で、Service Studioでは直接サポートされていないものの、Webサービスのクライアント定義の.NETアセンブリをインポートすることによってサポートされる構成があります。
- データ型で継承を使用するWebサービス
- 再帰データ型のWebサービス
- 多次元配列のWebサービス
生成されるストラクチャ
例として、以下のクラスを検討します。
.NETアセンブリのイントロスペクション中、Integration Studioは基本クラスと同名の単一のストラクチャを作成します。Typeアトリビュートは、インスタンス化されたストラクチャがどのクラスを示しているかを指定します。
継承チェーン内のすべてのクラスのフィールドがアトリビュートとしてLifeストラクチャに存在しており、フィールドの説明には所属クラスが示しています。ストラクチャを同一にして継承全体を表すより、提供されるコンストラクタを使用するほうが、希望するクラスを容易にインスタンス化できます。
再帰データ型を使用する
再帰データ型を使用する際、Integration Studioは再帰を引き起こす要素をシリアル化します。
上記の例では、AnimalクラスはLifeクラスを拡張するので再帰ですが、同時にLifeデータ型の[FavoriteFood]フィールドを含んでいます。この場合、[FavoriteFood]フィールドはこの再帰定義を回避するためにシリアル化されます。そのため、インポートされたAnimalクラスは、LifeからSerializedLifeに変更されたFavoriteFoodデータ型になります。
ストラクチャの作成を支援するために、Integration Studioは各ストラクチャにコンストラクタアクションを提供しています。コンストラクタはパラメータとしてクラスのすべてのフィールドを受け取り、再帰を引き起こすフィールドを内部で変換してデータ型を修正します。このため、ボトムアップでのストラクチャ作成にはコンストラクタを使用し、作成プロセスでのシリアル化対処を回避する必要があります。
例として、「ニワトリ」というオブジェクトをインスタンス化する場合、以下の手順を実行します。
Vegetable_New
コンストラクタアクションを使用して、とうもろこし(ニワトリの好きな食べ物)のストラクチャのインスタンスを作成します。これはName、Size、Weight、HasFruitパラメータを受け取ります。- コンストラクタ(
Animal_New
)を使用して、ニワトリのストラクチャをインスタンス化します。これはName、Size、Weight、Speed、FavoriteFoodパラメータを受け取ります。 Animal_New
アクションのFavoriteFood引数として、Vegetable_New
の結果を渡します。
ニワトリのオブジェクトの作成後にそのFavoriteFoodにアクセスする必要がある場合、SerializedLifeデータ型であるため、提供されているDeserialize
アクションを使用します。Life_Deserialize
を呼び出し、パラメータとしてニワトリのアトリビュートであるFavoriteFoodを渡します。このアクションはこれをSerializedLifeからLifeに変換するため、値を読み込むことができます。
同様に、直接FavoriteFoodを指定してそのアトリビュートを変更する場合、以下の手順を実行します。
Life_Deserialize
アクションを使用して、FavoriteFoodをSerializedLifeからLifeデータ型に変換します。- 必要に応じて、FavoriteFoodを変更します。
Life_Serialize
アクションを使用して、FavoriteFoodをシリアル化します。これでFavoriteFoodはLifeからSerialized Lifeに戻ります。- ニワトリのFavoriteFood アトリビュートにシリアル化されたバージョンを割り当てます。