最近のアクセス:
ページ
履歴
バックリンク
GeneXus での OData のサポート
GeneXus アプリケーションと外部データソースを統合させる必要が生じることがよくあります。
ソースが DBMS からのもので、直接アクセスが可能な場合は、
DBRet
を使用して GeneXus モデルに統合できます。
現在、外部ソースとのやり取りに SQL を使用しない場合、GeneXus との統合は、プロシージャーや外部オブジェクトを使用して実行する必要があります。この方法の欠点は、データソースを GeneXus モデルに統合しないことです。そのため、自然言語構造 (
トランザクション
、
ビジネスコンポーネント
、
For Each コマンド
、
データセレクター
) を使用できず、他の手段 (
データプロバイダー
、グリッドなど) を使用する場合も、制約があったり、煩雑だったりします。このシナリオでは、指定子がデータソース用のナビゲーションを生成できません。
この問題を解決するために GeneXus に追加されたメカニズムでは、SQL 以外の外部ソースを GeneXus モデルに統合します。このメカニズムは拡張可能で、新しいデータソースの追加が可能です。
このメカニズムでは、新しいタイプの拡張可能な
データストア
(サービス) を組み込みます。それにより、データストアに対して GeneXus ナビゲーションを計算し、後で外部ソースに対するクエリに変換できます。
この解決策には 3 つの段階 (設計、生成、実行時) があります:
設計: 外部データソースの検査と GeneXus モデルへの統合を行います。
生成: 指定子によって決定されたナビゲーションから、外部ソースに対するクエリの生成を行います。
実行時: 外部ソースに対するクエリの実行と、GeneXus モデルでの結果の再解釈を行います。
前述のシナリオで考えられるデータソースの 1 つが、OData サービスです。
Open Data Protocol (OData) は、Web サイト経由でデータソースに標準的な CRUD アクセスができるようにする、データ アクセス プロトコルです。
「Open Data Protocol (OData) は、データ API を作成して使用するための標準化されたプロトコルです。OData は、HTTP などのコアプロトコルや、REST などの一般的に受け入れられている手法に基づいています。そのため、統一された方法で、さまざまな機能を備えたデータ API を公開できます」
出典:
OData のホームページ
使用するテクノロジー
GeneXus 実装はこのプロトコルのバージョン 4 に基づいています (OData バージョンドキュメント)。以前のバージョンで実装されたサービスもサポートされますが、問題が起きないことを保証するわけではありません。
OData サービスの利用方法
例を挙げてこの機能について説明します。
OData TripPin モデルをナレッジベースに統合する必要があるとします。
この例の OData モデル (TripPin)
これは 4 つのメインエンティティで構成されます:
Person
Airline
Airport
Photo
他のエンティティをクエリのベースエンティティにすることはできません。たとえば、Trip に直接アクセスすることはできず、Person を介してアクセスする必要があります。
このモデルは非常に完成されたもので、多くの OData v4 の機能を使用します。そのいくつかは、GeneXus モデルに直接マッピングされてはいません:
コレクションであるエンティティのフィールドがあります。
複雑なデータタイプのエンティティがあります (Person には AddressInfo のコレクションがあり、各 AddressInfo は、City などを持つ複雑なタイプです)。
列挙型ドメイン
(Gender)、
サブタイプ
(Friends)、
Geography データタイプ
(Loc)、マルチメディア (Photo)、
式
(Concurrency) に基づくフィールドがあります。
GeneXus からのモデルのインポート
モデルをインポートするには、
[ ツール ] > [ アプリケーションの統合 ] > [ 外部のデータストアサービスをインポート ]
を選択します。
インポートによって長い名前の項目属性が作成されるため、バージョンの [ Significant attribute name length ] プロパティの値を増やすと便利です。
次のような画面が表示されます:
ここで、サービスプロバイダーとして OData を選択し、サービスタイプのデータストアを選択します。
該当するものが存在しない場合は、 [ 新規 ] ボタンを使用してここで作成できます。
次のものを追加します:
サービスの URL。この場合は https://services.odata.org/V4/(S(40gwjcqlhjmuyfayfnplov0o))/TripPinServiceRW/ です。
サービスへのアクセスに使用するユーザーとパスワード (この場合は認証がありません)。
追加接続情報。この場合は、filter_strings=n として、このサービスが >、<、>=、<= と文字列データタイプを使用して条件をサポートしないことを示します。
サービスを検査する際には、インポートするエンティティを選択する新しいダイアログが表示されます:
既定では、メインエンティティに関連付けられたトランザクションのみが、このダイアログに表示されます。この場合、インポートプロセスでは、選択したメインエンティティの処理に必要なすべての追加トランザクションがインポートされます。モデルの一部のみをインポートする場合は、 [ トップレベルのみ表示 ] の選択を解除し、インポートするトランザクションを手動で選択します (非推奨)。
SAP の OData サービス
SAP では、データ交換にこのプロトコルを採用しています。このメカニズムを使用して GeneXus で利用できる多くのビルド済みサービスが提供されていますが、SAP NetWeaver Gateway で OData サービスとして公開される、SAP ERP の Abap 関数 (または BAPI) を呼び出すこともできます。
BAPI を OData サービスとして公開するには、
ウィザード
の手順に従います。
SAP NetWeaver Gateway では、
セキュリティメソッド
としてクロスサイト要求の偽造 (CSRF) を使用します。ユーザー名とパスワードを SAP に送信すると、「X-CSRF-Token: qyFwSG-_meLAJt-Ei7gOBA==」のようなトークンが送り返されます。このトークンを将来の POST/PUT/PATCH/DELETE 操作で使用する必要があります。サービスのインポート時に GeneXus で自動的に実行するようにするには、 [
接続情報
] フィールド (または、OData サービスと関連付けられたデータストアの [ Additional connection string attributes ] プロパティ) に
SAP=True
と入力します。
ERP ではなく SAP Business One を利用するには、SAP=True の代わりに
SapLogin=<sapLogin>
を追加する必要があります。この
<sapLogin>
は会社のデータベース名です (C# では一時的な利用のみ可能)。
制限
OData では関数の公開が可能です。たとえば、TripPin モデルには、最も近い空港を返す関数があります。これを外部オブジェクトのメソッドとしてモデリングすることが可能ですが、現時点では実装されていません。
検討が必要な事項がいくつかあります。たとえば、OData ではすべてのオーダーが有効というわけではありません。また、一部のオーダーは部分的に有効です。現在生成されているクエリは通常は機能しますが、オーダーが考慮されない場合があります。
.NET では、マルチメディアタイプに対する更新が適切に機能しません。
Java では、OData v4 のみサポートされます。
Query オブジェクトは OData をサポートしません (その時点で SQL クエリを生成するだけで、OData クエリは生成しません)。このため、対処法としては、データを返すデータプロバイダーを作成 (データプロバイダーは OData クエリの生成をサポートします) し、そのデータプロバイダーを Query Viewer に関連付けます (Data bindings の [ Object ] プロパティ)。
使用可能バージョン
この機能は、
GeneXus 16
以降で利用できます。