導入
Mendix プラットフォームを使用してアプリケーションのモデルを作成します Mendix ビジネスモデラー。コードを生成するのではなく、サーバーランタイムでアプリケーションを起動する際にこのモデルを解釈します。このアプローチには、次のような様々な利点があります。 視覚的にデバッグするリモート環境でも。
この記事を理解するには、マイクロフローを作成した経験があると非常に役立ちますが、マイクロフローとは何かについても説明します。すでにマイクロフローの使い方をご存知の方は、 .
弊社の資料を引用すると、 「マイクロフローを使用すると、アプリケーションのロジックを表現できます」 (NAIST) と 「これは、従来はテキストのプログラムコードで表現されていたものを視覚的に表現する方法です。」つまり、マイクロフローを使用すると、コードを記述することなく、アプリケーションのプロセスに複雑なビジネス ロジックを簡単に追加できます。 Mendix はビジネスと IT のコラボレーションが重要であり、マイクロフローは、ビジネス志向の人々にアプリケーションの設計方法に関する洞察を与えることで大いに役立ちます。
マイクロフローは、高レベルの活動を定義します。非常に基本的な例は次のようになります。

Javaコードでは、これは以下のように記述できます。「else」文は厳密には必須ではありませんが、マイクロフローでの表現方法により近いものとなっています。

より具体的な例を以下に示します。

マイクロフローの使用方法に関する詳細については、以下をご覧ください。 https://world.mendix.com/display/refguide4/Microflows.
しかし、これはどのように機能するのでしょうか? では、早速見ていきましょう。
マイクロフローは、 アクションサーバー内のアクションは、実行可能であるという基本特性を持つインターフェースによって定義されます。これは、 アクションマネージャーこのクラスは、様々な方法でアクションを実行する役割を担います。同期または非同期で実行したり、将来の実行をスケジュールしたりすることができ、スレッド化に伴う複雑な処理もすべて処理します。
サーバーには様々な種類のアクションが定義されています。期限切れのセッションを削除するアクションなど、内部的に使用されるものもあります。また、開発者が使用したり実装したりできるものもあります。 Mendix例としては オブジェクトの削除 or XPathクエリ アクション。Javaアクションを自分で作成したことがある方は、それが UserAction そして、メソッドを実装する必要がある executeAction.
マイクロフローは実行可能なアクションであることが分かりましたが、このクラス (のインスタンス) を取得するにはどうすればよいでしょうか。
マイクロフロー構造の構築
サーバーが起動すると、まずアプリケーションモデルを含むファイルを読み取ります。このモデルには、マイクロフローを含むプロジェクト内のすべてのドキュメントが含まれています。サーバーは、これらのマイクロフロードキュメントの構造を構築します。この構造は、フラットなモデル情報よりも簡単かつ迅速に実際のマイクロフローをインスタンス化するために使用できます。例えば、これらの構造を構築すると、別のマイクロフローを呼び出すマイクロフローは、モデル内の識別子ではなく、そのマイクロフローの構造を直接参照するようになり、ネストされたループの内容は別のマイクロフロー構造としてレンダリングされます。
これが完了すると、マイクロフロー構造がいくつか作成されます。これらはモデラーで描画されたマイクロフローを表し、開始イベント、終了イベント、ブレークイベント、そして最後に重要なイベントを表すマイクロフローオブジェクトが含まれています。 アクティビティ.

これらのマイクロフローオブジェクトは、 流れ: マイクロフローを描く際に、様々なブロックを接続する線。マイクロフローオブジェクトには、入力フローと出力フローを設定できます。
マイクロフローの経験があり、「ループやゲートウェイはどうなの?」と疑問に思われる方もいるかもしれませんが、これらもアクティビティとしてレンダリングされます。この点に関して言えば、最近導入したエラーイベントは、特殊なタイプの終了イベントと考えることができます。
前述の通り、ネストされたループの内容もマイクロフロー構造として表現されます。ループの各反復処理ごとに、別のマイクロフローがインスタンス化されます。インスタンス化されるって? ちょっと見てみましょう…
マイクロフローのインスタンス化と実行
特定のマイクロフローが実行される前に、先ほど構築した構造を使って非常に高速にインスタンス化されます。マイクロフローの特定のインスタンスでは、 入力変数 コンテキスト マイクロフローのコンテキストには、このマイクロフローを実行しているユーザーなど、さまざまな情報が含まれます。
つまり、全体像は次のようになります。

インスタンスが作成されると、アクションマネージャーはマイクロフローを実行します。最終的には アクティビティ...
マイクロフロー活動
前にも述べたように、いくつかの(または実際にはほとんどの)マイクロフローオブジェクトは 活動マイクロフロー アクティビティの例としては、オブジェクトの変更、フォームを開くための指示、テンプレートに基づいたドキュメントの生成、XML のインポートなどがあります。
アクティビティは、 execute メソッド。マイクロフローインスタンスがこのメソッドに渡され、例えば、 スコープ このマイクロフローの。
マイクロフロー活動の一例として、XMLのエクスポートを挙げます。プログラマーの方なら、これが何をするのかすぐにわかるでしょう。

このメソッドは、マイクロフローのスコープからコンテキスト変数とマイクロフロー変数を取得し、XMLマッピングの識別子を取得し、パラメータオブジェクトを取得して、文字列をエクスポートしてその値を返すか、ファイルに書き込むかを決定します。実際に処理を行うメソッドの内部動作についてはここでは説明しませんが、大体の流れはご理解いただけると思います。
Since Mendix 5、私たちは使用しています OSGi モジュールシステムとして。様々なコンポーネントが、マイクロフローエンジンにアクティビティをプラグインできるようになりました。例えば、「ドキュメントジェネレーター」コンポーネントは「ドキュメント生成」アクティビティを挿入し、「Web UI」コンポーネントは「メッセージ表示」などのアクティビティを挿入します。
ゲートウェイ は特別な種類のアクティビティであり、モデル化する際に異なる方法で描画されます。ゲートウェイはマイクロフローのフローの分岐を表します。 排他的分割 または 相続分割排他的分岐のデフォルトオプションは、式を解析することです。この式に基づいて、マイクロフローはその後分岐することができます。最も単純なケースはブール式(真偽値)ですが、列挙値で分岐することも可能です。では、これはどのように機能するのでしょうか?まずは、マイクロフロー式を見てみましょう。
マイクロフロー式
In Mendix 私たちは独自の表現言語を定義しました。定義は Wikipedia: プログラミング言語における式とは、明示的な値、定数、変数、演算子、関数の組み合わせであり、特定のプログラミング言語における特定の優先順位と連想規則に従って解釈され、計算を行い、別の値を生成します(状態のある環境では返します)。このプロセスは、数式と同様に評価と呼ばれます。値は、数値、文字列、論理値など、様々な型を取り得ます。
表現言語の文法を次のように書きました アントラー また、パーサーを生成するためにも使用しており、 抽象構文木彼らのウェブサイトを引用すると、 「ANTLR (ANother Tool for Language Recognition) は、構造化テキストまたはバイナリ ファイルの読み取り、処理、実行、または翻訳を行うための強力なパーサー ジェネレーターです。」
マイクロフロー式の可能性については、 ドキュメント.
式は様々な場所で使用できます。例えば、「Change Object」アクティビティ内で属性に値を代入する場合、変数を返す終了イベント内、あるいは前述の排他的分岐内などです。例を見てみましょう。映画データベースを備えたアプリケーションがあり、ユーザーは映画の様々なプロパティを検索できるとします。

このゲートウェイの式は「Movie/Length > 180」です。「true」値に続くマイクロフローのパスで、この特定のムービーが長いことを条件付けることができます。
このような式はどのように評価されるのでしょうか?
ゲートウェイアクションがトリガーされると、式を評価するコマンドが発行されます。これは非常に単純な二項演算子で、二項演算子クラスに入り、使用されている演算子(この場合は「大なり記号」)を検索します。この演算子が見つかると、算術式または比較式のメソッドに入ります。式の左辺と右辺の型を取得し、値がnullでないことを確認した後、関連する演算子のコードを入力し、比較を実行します。最終的なコードは以下になります。 value = longExpr1 > longExpr2.
次に、値がゲートウェイアクションに返され、マイクロフローのどのパスを次に実行するかが決定されます。この特定の映画は長編としてマークされているので、雨の夜に家で過ごそうと考えているユーザーは、最適な選択肢を見つけることができます。
結論
これで、マイクロフローエンジンの基本的な動作についてほぼ説明が終わりました。マイクロフローを使用すれば、Webサービスの呼び出し方法、関連するセキュリティ制約を考慮した上でデータベースへのSQLクエリの実行方法、クライアント側でフォームを開く方法などについて心配する必要がなくなります。マイクロフローエンジンは、これらの機能をアプリケーションに追加できるシンプルなアクティビティの形で提供します。
この考察をお楽しみいただけたなら幸いです。