intra-mart Accel Platform OData 連携チュートリアルガイド 初版 2016-12-01

4. OData(V2) サービスのエンティティ操作

4.1. チュートリアル

このチュートリアルが終了すると、次のような事ができます。

  • OData(V2) サービスのエンティティを操作する。
    • 登録
    • 参照
    • 更新
    • 削除

4.1.1. ゴールの説明

このチュートリアルでは、以下で公開されている OData(V2) リファレンスサービスを利用し、製品エンティティの操作を行います。

  1. エンティティの登録

    • エンティティを登録するユーザ定義タスクを作成します。
    • 動作確認のためのフロー定義を作成します。
    • 動作確認を行います。
  2. エンティティの取得

    • エンティティを取得するユーザ定義タスクを作成します。
    • 動作確認のためのフロー定義を作成します。
    • 動作確認を行います。
  3. シングルエンティティの取得

    • シングルエンティティを取得するユーザ定義タスクを作成します。
    • 動作確認のためのフロー定義を作成します。
    • 動作確認を行います。
  4. エンティティの更新

    • エンティティを更新するユーザ定義タスクを作成します。
    • 動作確認のためのフロー定義を作成します。
    • 動作確認を行います。
  5. エンティティの削除

    • エンティティを削除するユーザ定義タスクを作成します。
    • 動作確認のためのフロー定義を作成します。
    • 動作確認を行います。

このような順番で OData(V2) サービスのエンティティの操作方法や作業の流れを説明します。

4.1.2. 準備

チュートリアルの準備に書かれている準備が行われていることを確認してください。

4.1.3. エンティティの登録

IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは「OData(V2)定義」です。

後述の「メソッド」を「POST」として作成することで OData サービスのエンティティの登録を行うようにします。

4.1.3.1. OData(V2)定義の作成

  1. intra-mart Accel Platform にテナント管理者またはLogicDesigner管理者でログインします。

  2. 「サイトマップ」→「LogicDesigner」→「OData(V2)定義新規作成」を開きます。

  3. 「サービスURL」に「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc」を設定します。

    ../../_images/odata_v2_post_1.png

    コラム

    本チュートリアルでは必要ありませんが、利用する OData サービス に認証がかけられている場合、必要に応じて「認証種別」を「BASIC認証」または「OAuth認証」に設定し、認証情報を設定してください。

    コラム

    OData サービスが独自のリクエストヘッダで認証を行う場合、以下のようにリクエストヘッダを追加して認証情報を設定してください。
    ../../_images/odata_v2_authorization_1.png
    • リクエストヘッダ名に独自のリクエストヘッダ名を設定(上記画像では「Authorization」を設定)
    • リクエストヘッダ値に認証情報を設定(上記画像では「my custom authorization」を設定)

    コラム

    OData サービスが独自のリクエストヘッダで認証を行い、かつフロー実行時にリクエストヘッダを設定する必要がある場合、次のようにして認証情報を設定してください。
    ../../_images/odata_v2_authorization_2.png
    • 入力値に独自のプロパティを追加(上記の画像例では「authorization」)
    • リクエストヘッダ値に「${authorization}」を設定
      • 「${authorization}」を設定することで、実行時に入力値「authorization」プロパティに渡された値を設定できます
  4. 「エンティティセット名」の横にあるリロードアイコンをクリックします。

    ../../_images/odata_v2_post_2.png
  5. 「エンティティセット名」に「Products」を選択します。

    ../../_images/odata_v2_post_3.png
  6. 「メソッド」に「POST」を選択します。

    ../../_images/odata_v2_post_4.png
  7. 「入力/返却値取得」の横にある「取得」ボタンをクリックします。

    ../../_images/odata_v2_post_5.png

    コラム

    「入力値」ツリーの「body」配下にあるプロパティが登録するデータ、「返却値」ツリーの「data」配下にあるプロパティが、登録されたデータを表します。
  8. その他の項目は以下のように入力してください。

    ユーザ定義ID ODataV2Post
    ユーザ定義名 ODataV2Post
    ユーザカテゴリID SampleCategory
  9. 「登録」ボタンをクリックします。

  10. 確認ダイアログで「OK」ボタンをクリックします。

これで「OData(V2)定義」の作成は終了です。

4.1.3.2. フロー定義の作成

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

  3. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。

    キー名
    ID integer
    Name string
    Description string
    ReleaseDate calendar
    DiscontinuedDate calendar
    Rating integer
    Price bigdecimal
  4. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ODataV2Post」タスクを追加し、「開始」「終了」と接続します。

    ../../_images/odata_v2_post_6.png
  5. 「ODataV2Post」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/odata_v2_post_7.png
  6. 「入力」の各項目と、「ODataV2Post」の各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_post_8.png
  7. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID ODataV2Post
    フロー定義名 標準 ODataV2Post
    フローカテゴリID SampleCategory
  8. 「確認」ダイアログで「決定」ボタンをクリックします。

4.1.3.3. 動作確認

最後に動作確認を行います。 IM-LogicDesigner のデバッグ機能を使ってフローを実行し、OData サービスにエンティティが作成されることを確認します。

  1. 「ODataV2Post」フローの「編集」アイコンをクリックします。

  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

  4. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。

    ID 9
    Name テスト(Name)
    Description テスト(Description)
    ReleaseDate 2016-12-01T10:00:00Z
    DiscontinuedDate 2017-12-01T10:00:00Z
    Rating 100
    Price 1000
  5. これで、OData サービスにエンティティが作成されました。

本当に作成されたかどうかを確認します。

  1. ブラウザから「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc/Products」にアクセスします。

  2. フローのデバッグ画面で入力した値でエンティティが作成されていることを確認できます。

    ../../_images/odata_v2_post_9.png

4.1.4. エンティティの取得

次に、 エンティティを参照する IM-LogicDesigner のユーザ定義タスクを作成します。作成するのは「OData(V2)定義」です。

「メソッド」を「GET」として作成することで OData サービスのエンティティの取得を行うようにします。

4.1.4.1. OData(V2)定義の作成

エンティティの登録の 1 から 5 までの手順を繰り返してください。

  1. 「メソッド」に「GET」を選択します。

  2. 「クエリオプション」の横にある「追加」アイコンをクリックし、以下のクエリオプションを追加します。

    • 「クエリオプション名」を「$orderby」
    • 「クエリオプション値」を「ID」

    コラム

    「$orderby」に「ID」を指定することで、IDでソートされた結果を取得する事が出来ます。
    クエリオプションの詳細については以下のドキュメントを参照してください。
  3. 「入力/返却値取得」の横にある「取得」ボタンをクリックします。

    ../../_images/odata_v2_get_1.png

    コラム

    「返却値」ツリーの「data」配下にあるプロパティが取得するデータを表します。

    コラム

    「返却値」ツリーの「data」配下にあるプロパティは、選択後「削除」をクリックすることで削除できます。
    不要なプロパティを削除することで、余計なプロパティの取得を防ぎ、実行時の負荷を軽減できます。
  4. その他の項目は以下のように入力してください。

    ユーザ定義ID ODataV2Get
    ユーザ定義名 ODataV2Get
    ユーザカテゴリID SampleCategory
  5. 「登録」ボタンをクリックします。

  6. 確認ダイアログで「OK」ボタンをクリックします。

これで「OData(V2)定義」の作成は終了です。

4.1.4.2. フロー定義の作成

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

  3. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ODataV2Get」タスクと、「繰り返し開始」「繰り返し終了」「ログ出力」タスクを追加し、「開始」「終了」と接続します。

    ../../_images/odata_v2_get_2.png
  4. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。

  • 「定数ID」を「el」

  • 「定数値」を以下

    ID:${im_startLoop1.item.ID}
    ReleaseDate:${im_startLoop1.item.ReleaseDate}
    DiscontinuedDate:${im_startLoop1.item.DiscontinuedDate}
    Rating:${im_startLoop1.item.Rating}
    Price:${im_startLoop1.item.Price}
    
  1. 「繰り返し開始」タスクをクリックし、「繰り返し対象」に「ODataV2Get1/data」を設定します。

    ../../_images/odata_v2_get_3.png
  2. 「ログ出力」タスクをクリックし、「マッピング設定」ボタンをクリックし、次のように各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_get_4.png
  3. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID ODataV2Get
    フロー定義名 標準 ODataV2Get
    フローカテゴリID SampleCategory
  4. 「確認」ダイアログで「決定」ボタンをクリックします。

これでフロー定義の作成が終了です。

4.1.4.3. 動作確認

最後に動作確認を行います。 IM-LogicDesigner のデバッグ機能を使ってフローを実行し、OData サービスのデータが取得されることを確認します。

  1. 「ODataV2Get」フローの「編集」アイコンをクリックします。

  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

  4. 「デバッグの実行」ダイアログが表示されるので、「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。

  5. 以下のログが出力されます。

    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:0
    ReleaseDate:java.util.GregorianCalendar[time=694224000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1992,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:4
    Price:2.5
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:1
    ReleaseDate:java.util.GregorianCalendar[time=812505600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1995,MONTH=9,WEEK_OF_YEAR=40,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=274,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:3.5
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:2
    ReleaseDate:java.util.GregorianCalendar[time=970358400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2000,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=275,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:20.9
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:3
    ReleaseDate:java.util.GregorianCalendar[time=1128124800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2005,MONTH=9,WEEK_OF_YEAR=40,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=274,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:java.util.GregorianCalendar[time=1159660800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=9,WEEK_OF_YEAR=40,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=274,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    Rating:3
    Price:19.9
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:4
    ReleaseDate:java.util.GregorianCalendar[time=1041724800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2003,MONTH=0,WEEK_OF_YEAR=2,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=5,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:22.99
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:5
    ReleaseDate:java.util.GregorianCalendar[time=1154649600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=7,WEEK_OF_YEAR=31,WEEK_OF_MONTH=1,DAY_OF_MONTH=4,DAY_OF_YEAR=216,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:22.8
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:6
    ReleaseDate:java.util.GregorianCalendar[time=1162684800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=10,WEEK_OF_YEAR=45,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=309,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:18.8
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:7
    ReleaseDate:java.util.GregorianCalendar[time=1163548800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=10,WEEK_OF_YEAR=46,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=319,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:35.88
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:8
    ReleaseDate:java.util.GregorianCalendar[time=1210204800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2008,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=129,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:1088.8
    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:9
    ReleaseDate:java.util.GregorianCalendar[time=1480586400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=11,WEEK_OF_YEAR=49,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=336,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:java.util.GregorianCalendar[time=1512122400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=11,WEEK_OF_YEAR=48,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=335,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    Rating:100
    Price:1000
    
  6. ブラウザから「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc/Products」にアクセスします。

ブラウザに表示されるデータと、出力されたログの内容が一致することが確認できます。

4.1.5. シングルエンティティの取得

次に、 シングルエンティティを参照する IM-LogicDesigner のユーザ定義タスクを作成します。作成するのは「OData(V2)定義」です。

「メソッド」を「GET」、「シングルエンティティ」を選択することで OData サービスのシングルエンティティの取得を行うようにします。

4.1.5.1. OData(V2)定義の作成

エンティティの登録の 1 から 5 までの手順を繰り返してください。

  1. 「メソッド」に「GET」を選択します。

  2. 「メソッド」の横にある「シングルエンティティ」を選択します。

  3. 「入力/返却値取得」の横にある「取得」ボタンをクリックします。

    ../../_images/odata_v2_get_single_1.png

    コラム

    「入力値」ツリーの「key」配下にあるプロパティが取得するシングルエンティティを表すキープロパティとして扱われます。

    コラム

    「返却値」ツリーの「data」配下にあるプロパティが取得するデータを表します。

    コラム

    「返却値」ツリーの「data」配下にあるプロパティは、選択後「削除」をクリックすることで削除できます。
    不要なプロパティを削除することで、余計なプロパティの取得を防ぎ、実行時の負荷を軽減できます。
  4. その他の項目は以下のように入力してください。

    ユーザ定義ID ODataV2GetSingle
    ユーザ定義名 ODataV2GetSingle
    ユーザカテゴリID SampleCategory
  5. 「登録」ボタンをクリックします。

  6. 確認ダイアログで「OK」ボタンをクリックします。

これで「OData(V2)定義」の作成は終了です。

4.1.5.2. フロー定義の作成

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

  3. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ODataV2GetSingle」タスクと「ログ出力」タスクを追加し、「開始」「終了」と接続します。

    ../../_images/odata_v2_get_single_2.png
  4. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。

    キー名
    ID integer
  5. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。

  • 「定数ID」を「el」

  • 「定数値」を以下

    ID:${ODataV2GetSingle1.data.ID}
    ReleaseDate:${ODataV2GetSingle1.data.ReleaseDate}
    DiscontinuedDate:${ODataV2GetSingle1.data.DiscontinuedDate}
    Rating:${ODataV2GetSingle1.data.Rating}
    Price:${ODataV2GetSingle1.data.Price}
    
  1. 「ODataV2GetSingle」タスクをクリックし、「マッピング設定」ボタンをクリックし、次のように各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_get_single_3.png
  2. 「ログ出力」タスクをクリックし、「マッピング設定」ボタンをクリックし、次のように各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_get_single_4.png
  3. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID ODataV2GetSingle
    フロー定義名 標準 ODataV2GetSingle
    フローカテゴリID SampleCategory
  4. 「確認」ダイアログで「決定」ボタンをクリックします。

これでフロー定義の作成が終了です。

4.1.5.3. 動作確認

最後に動作確認を行います。 IM-LogicDesigner のデバッグ機能を使ってフローを実行し、OData サービスのデータが取得されることを確認します。

  1. 「ODataV2GetSingle」フローの「編集」アイコンをクリックします。

  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

  4. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。

    ID 7
  5. 以下のログが出力されます。

    [INFO] j.c.i.f.l.e.g.OutputLogTask - [] ID:7
    ReleaseDate:java.util.GregorianCalendar[time=1163548800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=10,WEEK_OF_YEAR=46,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=319,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
    DiscontinuedDate:
    Rating:3
    Price:35.88
    
  6. ブラウザから「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc/Products(7)」にアクセスします。

ブラウザに表示されるデータと、出力されたログの内容が一致することが確認できます。

4.1.6. エンティティの更新

次に、 エンティティを更新する IM-LogicDesigner のユーザ定義タスクを作成します。作成するのは「OData(V2)定義」です。

「メソッド」を「PUT」または「MERGE」として作成することで OData サービスのエンティティの更新を行うようにします。

コラム

「PUT」と「MERGE」はどちらもエンティティの更新を行いますが、「PUT」は入力プロパティの更新を行い、入力プロパティに与えられなかったプロパティは初期値に更新されます。
これとは逆に「MERGE」では入力プロパティに与えられたプロパティの更新のみ行い、入力プロパティに与えられなかったプロパティは更新されません。

本チュートリアルでは「メソッド」に「MERGE」を指定してエンティティの更新を行います。

4.1.6.1. OData(V2)定義の作成

エンティティの登録の 1 から 5 までの手順を繰り返してください。

  1. 「メソッド」に「MERGE」を選択します。

  2. 「入力/返却値取得」の横にある「取得」ボタンをクリックします。

    ../../_images/odata_v2_merge_1.png

    コラム

    「入力値」ツリーの「key」配下にあるプロパティが更新するエンティティを表すキープロパティとして扱われます。

    コラム

    「入力値」ツリーの「body」配下にあるプロパティが更新するデータを表します。
  3. その他の項目は以下のように入力してください。

    ユーザ定義ID ODataV2Merge
    ユーザ定義名 ODataV2Merge
    ユーザカテゴリID SampleCategory
  4. 「登録」ボタンをクリックします。

  5. 確認ダイアログで「OK」ボタンをクリックします。

これで「OData(V2)定義」の作成は終了です。

4.1.6.2. フロー定義の作成

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

  3. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ODataV2Merge」タスクを追加し、「開始」「終了」と接続します。

    ../../_images/odata_v2_merge_2.png
  4. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。

    キー名
    ID integer
    ReleaseDate calendar
    Rating integer
    Price bigdecimal
  5. 「ODataV2Merge」タスクをクリックし、「マッピング設定」ボタンをクリックし、次のように各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_merge_3.png
  6. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID ODataV2Merge
    フロー定義名 標準 ODataV2Merge
    フローカテゴリID SampleCategory
  7. 「確認」ダイアログで「決定」ボタンをクリックします。

これでフロー定義の作成が終了です。

4.1.6.3. 動作確認

最後に動作確認を行います。 IM-LogicDesigner のデバッグ機能を使ってフローを実行し、OData サービスのデータが更新されることを確認します。

  1. 「ODataV2Merge」フローの「編集」アイコンをクリックします。

  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

  4. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。

    ID 3
    ReleaseDate 2016-12-01T10:00:00Z
    Rating 100
    Price 1000
  5. これで、OData サービスのエンティティが更新されました。

本当に作成されたかどうかを確認します。

  1. ブラウザから「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc/Products(3)」にアクセスします。

  2. フローのデバッグ画面で入力した値でエンティティが更新されていることを確認できます。

    ../../_images/odata_v2_merge_4.png

    コラム

    更新処理では、キープロパティを変更することはできません。

    コラム

    入力データとして与えられた「ReleaseDate」「Rating」「Price」プロパティが更新され、入力データに与えられなかった「DiscontinuedDate」プロパティは更新されていないことが確認できます。
    メソッドに「PUT」を指定した場合、入力データとして与えられた「ReleaseDate」「Rating」「Price」プロパティは同様に更新されますが、入力データに与えられなかった「DiscontinuedDate」プロパティは初期値に更新されます。

4.1.7. エンティティの削除

最後に、エンティティを削除する IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは「OData(V2)定義」です。

「メソッド」を「DELETE」として作成することで OData サービスのエンティティの削除を行うようにします。

4.1.7.1. OData(V2)定義の作成

エンティティの登録の 1 から 5 までの手順を繰り返してください。

  1. 「メソッド」に「DELETE」を選択します。

  2. 「入力/返却値取得」の横にある「取得」ボタンをクリックします。

    ../../_images/odata_v2_delete_1.png

    コラム

    「入力値」ツリーの「key」配下にあるプロパティが削除するエンティティを表すキープロパティとして扱われます。
  3. その他の項目は以下のように入力してください。

    ユーザ定義ID ODataV2Delete
    ユーザ定義名 ODataV2Delete
    ユーザカテゴリID SampleCategory
  4. 「登録」ボタンをクリックします。

  5. 確認ダイアログで「OK」ボタンをクリックします。

これで「OData(V2)定義」の作成は終了です。

4.1.7.2. フロー定義の作成

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義」を開きます。

  2. 「新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

  3. ロジックフロー定義編集画面のデザイナに、先ほど作成した「ODataV2Delete」タスクを追加し、「開始」「終了」と接続します。

    ../../_images/odata_v2_delete_2.png
  4. 「入出力設定」リンクをクリックし、「入力」に次のような項目を追加し、「決定」ボタンをクリックします。

    キー名
    ID integer
  5. 「ODataV2Delete」タスクをクリックし、「マッピング設定」ボタンをクリックし、次のように各項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/odata_v2_delete_3.png
  6. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID ODataV2Delete
    フロー定義名 標準 ODataV2Delete
    フローカテゴリID SampleCategory
  7. 「確認」ダイアログで「決定」ボタンをクリックします。

これでフロー定義の作成が終了です。

4.1.7.3. 動作確認

最後に動作確認を行います。 IM-LogicDesigner のデバッグ機能を使ってフローを実行し、OData サービスのデータが削除されることを確認します。

  1. 「ODataV2Delete」フローの「編集」アイコンをクリックします。

  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

  4. 「デバッグの実行」ダイアログが表示されるので、次のように入力し「実行」ボタンをクリックし、「確認」ダイアログで「決定」ボタンをクリックします。

    ID 8
  5. ブラウザから「https://services.odata.org/V2/(S(im_odata))/OData/OData.svc/Products(8)」にアクセスします。

以下のように表示され、ID=8 のエンティティが削除され存在しないことが確認できます。

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <code/>
    <message xml:lang="en-US">Resource not found for the segment 'Products'.</message>
</error>

4.1.8. まとめ

以上で OData(V2) サービスのエンティティ操作のチュートリアルはすべて完了です。

これまでのチュートリアルを通して、以下のことを学びました。

  • OData(V2) サービスのエンティティを操作する。
    • 登録
    • 参照
    • 更新
    • 削除

次章 OData(V4) サービスのエンティティ操作では、OData(V4) サービスのエンティティを操作するチュートリアルを用意しています。