SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

InterSystems IRISでシンプルに開発するIoTアプリケーション(AD)

IRISのインターオペラビリティ機能を使いこなそう(前編)

InterSystems IRISでシンプルに開発するIoTアプリケーション 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

メッセージクラスの定義

 これまでの連載で、ビジネス・サービスやビジネス・プロセスなどIRISのコンポーネント間で「メッセージが流れる」という説明をしてきました。ここでは、この「メッセージ」というものについて改めて説明し、定義を行っていきます。

メッセージ

 IRISのインターオペラビリティ機能のコンポーネント同士は、メッセージを送受信することで動作します。IRISでは、メッセージは特別な機能を持ったクラスとして定義されます。

 メッセージは、リクエストとレスポンスに分類されます。次の図をご覧ください。

メッセージのトレース画面
メッセージのトレース画面

 赤で囲んだ部分は、CheckDriveProcess(ビジネスプロセス)とCheckDriveOperation(ビジネス・オペレーション)との間でメッセージが送受信されている様子を示しています。CheckDriveProcessは、CheckDriveRequestというリクエストをCheckDriveOperationに送信し、CheckDriveOperationは、CheckDriveResponseというレスポンスを返しています。

 次に示すのは、CheckDriveRequestクラスの定義です。

Class DriveDemo.Request.CheckDriveRequest Extends Ens.Request [ ClassType = persistent, ProcedureBlock ]
{
    Property CarId As %String;
    Property RelativeTm As %Integer;
}

 Extends句でEns.Requestクラスを継承することによって、このクラスがリクエストとして機能することを指定しています(その後の[ ]で囲まれた部分は今回は“おまじない”として理解してください)。

 その後のProperty定義は、通常のクラス定義と同様です。CheckDriveRequestでは、該当する車のID(CarId)と、相対時刻(RelativeTm)がメッセージに含まれるデータとして定義されています。

 次に示すのは、CarUpdateRequestです。

Class DriveDemo.Request.CarUpdateRequest Extends Ens.Request [ ClassType = persistent, ProcedureBlock ]
{
    Property Data As DriveDemo.Data.DriveRecord;
}

 Ens.Requestを継承する点は、先ほどのCheckDriveRequestと同様です。

 プロパティはData一つだけです。As以下で DriveDemo.Data.DriveRecord を指定しています。これは、先ほど定義した DriveDemo.Data.DriveRecordクラスのインスタンスへの参照を、このリクエストに含めることを意味しています。

 今度はレスポンスの例を見てみましょう。CheckDriveResponseの定義です。

Class DriveDemo.Response.CheckDriveResponse Extends Ens.Response [ ClassType = persistent, ProcedureBlock ]
{
    Property hasEvent As %Boolean;
    Property DrivingBehavior As DriveDemo.Data.DrivingBehavior;
    Property MessageText As %String(MAXLEN = 32767);
}

 Ens.Responseクラスを継承することによって、このクラスはレスポンスとして機能します。

 プロパティには、何らかのイベントが発生したかどうかを示すhasEvent、発生したイベントの内容を保持するMessageTextが定義されています。

 DrivingBehaviorプロパティのAs句では、DriveDemo.Data.DrivingBehaviorと指定されています。先ほどのDriveDemo.Data.DriveRecordと違い、ここでは、プロパティに別のクラスのインスタンスを「埋め込む」ことを指定しています。この違いは、Asで指定されているクラスの種類の違いによるものです。

 では、そのDriveDemo.Data.DrivingBehaviorの定義を見てみましょう。

Class DriveDemo.Data.DrivingBehavior Extends ( %SerialObject, %XML.Adaptor )
{
    Property IsOverSpeed As %Boolean;
    Property IsHighEngineRPM As %Boolean;
    Property IsHighXG As %Boolean;
    Property IsHighYG As %Boolean;
}

 これまで紹介したクラスの定義と同様、4つの%Boolean型のプロパティを定義して、どのようなイベントがあったのか(速度超過、エンジン高回転、大きな加速度)を表すようになっています。

 これまで定義したクラスとの重要な違いは、Extends句にあります。このクラスは%SerialObjectを継承しています。

 %SerialObjectは%Persistentと違い、インスタンスをデータベースに保存することはできません。しかし、他のクラスのインスタンスのプロパティに、「シリアル化」して埋め込むことが可能になっています。

 このDrivingBehaviorクラスを例にとると、インスタンスのDrivingBehaviorプロパティに、DrivingBehaviorのインスタンスが埋め込まれることになります。次の図が、そのイメージです。

 今回のアプリケーションでは、他に、DriveDemo.Request.CarRegisterRequestというリクエストを定義しています。

 以上のクラスをコンパイルしてください。

次のページ
ビジネス・オペレーションの定義

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
InterSystems IRISでシンプルに開発するIoTアプリケーション連載記事一覧

もっと読む

この記事の著者

堀田 稔(インターシステムズジャパン)(ホリタ ミノル)

SEマネージャー。1992年大阪大学基礎工学部情報工学科卒。同年日本ディジタルイクイップメント(株)入社。電気通信など様々な業界向けプロジェクトにシステムエンジニアとして携わる。1996年InterSystems Data Platform製品の日本語版開発プロジェクトに従事し、同製品の販売・サポー...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12117 2020/03/31 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング