Forguncy 8 オンラインヘルプ
Forguncyの使い方 / OData
このトピックで
    OData
    このトピックで

    テーブルやビューからデータを取得する方法として、ForguncyではODataおよびODataのリソースパスをサポートしています。またODataの一部のクエリオプション、演算子、関数もサポートしています。

    ODataとは:

    「Webアプリケーションにおけるデータアクセス方法を標準化したプロトコル」です。Microsoft、IBM、SAP、Citrix社など中心となり仕様が策定され、2014年3月に国際標準化団体OASIS(Organization for the Advancement of Structured Information Standards, 構造化情報標準促進協会)によりOData 4.0が標準化されています。

    ODataを使ったデータの取得方法には、以下の4種類の方法が用意されています。

    [重要]OData使用における注意点:

    ODataを関数として使用する場合などでは、セル単位で自由にデータベースからデータを取得できたり、さらには取得したデータをページ上で計算処理を行うことができたりと、データアクセスを伴うロジック実装において、ODataは容易にかつ自由度の高い処理を実現できるといったメリットがあります。

    しかし一方で、ODataを使った実装は、アプリ開発において統制を効かせにくかったり、実装した処理のメンテナンス性が低くかったりデメリットになりえる要素も複数存在します。

    OData利用における開発上の主なデメリット

    • 関数でセルに使用した場合、業務処理がセルの値として埋もれてしまい処理実装の見通しが悪い

    • テーブルやフィールドの使用個所を検索する「すべての参照を検索」での検索対象に含まれない

    • ODATA関数をページ上に複数記載した場合、ODATA関数の数だけリクエストがサーバーに送信されるためパフォーマンスへの考慮が必要

    現行バージョンのForguncyでは、[変数の設定]コマンドを使うことでデータベースから取得した値を変数に格納することが可能です。ODataを使用しなくても多くの処理は、変数を使うことで実装が可能になります。OData関数を使用する場合は上記のデメリットがあることを理解した上で適切にご利用ください。

    サーバーサイドAPI

    GetTableData メソッド (String)オーバーロードを使用することで、ODataのリソースパスを使ってテーブルデータを取得できます。

    Web API

    getTableDataByODataメソッドを使用することで、ODataのリソースパスを使ってテーブルデータを取得できます。詳細はForguncy JavaScript APIリファレンスを参照してください。

    URL

    以下のようなURLのルールで、ODataを使用したテーブルデータの取得が行えます。

    http://<サーバー名、またはIPアドレス>/<アプリケーションパス>/OData/GetData/<ODataのリソースパス>

    たとえば、サーバー名が「srv01」、アプリケーション名が「app01」である場合に、「Categories」テーブルの「CategoryID」フィールドの値が「2」のレコードを取得するURLは以下のようになります。

    http://srv01/app01/OData/GetData/Categories?$filter=CategoryID eq 2

    なお、Forguncyアプリケーションにログインしていない場合には、URLを使用した方法は使用できません。以下にC#コードを使用してForguncyアプリケーションの認証を取得し、URLによるODataを使用したテーブルデータの取得例を示します。

    関数

    Excelには存在しないForguncy固有の関数としてODATA関数を提供しています。ODATA関数を使用することで、ODataで指定した条件でテーブルデータを取得できます。

    ODATA関数をセルに設定する場合、OData生成ツールを使用することで、GUIによるODataパスの構築が可能です。

    注意:

    • セルの値に設定したODATA関数は、非同期で実行されます。そのため「ページロード時のコマンド」で、そのODATA関数を使用したセルの値を参照した場合、データベースやネットワークの処理速度によってはODATA関数で値を取得するよりも前にセル参照が行われてしまう可能性があります。このような問題を防ぐにはセルにODATA関数を設定するのではなく、「ページロード時のコマンド」のコマンド内でODATA関数を使用するようにします。

    • ODATA関数は、通常のセルで使用する以外に、リストビュー上のセルでも使用できます。しかし、リストビュー上のセルにODATA関数を設定した場合、リストビューにデータ連結しているデータの個数分、データの取得のためのサーバーへの通信が発生します。そのため、リストビュー上のセルで使用する場合には、リストビューに表示するデータ数を少なくするなどし、パフォーマンス問題が発生しないような状態での使用を推奨します。

    ODATA関数の使い方

    「Categories」テーブルの「CategoryID」フィールドの値が「2」のレコードを取得する場合の数式は以下のようになります。

    =ODATA("Categories?$filter=CategoryIDeq 2")

    上記の場合で、値「2」の部分をA1セルの値で置き換えたい場合の数式は以下のようになります。

    =ODATA("Categories?$filter=CategoryIDeq " & A1)

    ODATA関数を使って複数レコードのデータを表示したい場合、配列数式と組み合わせることで実現可能です。詳しくは配列数式の使用を参照してください。

    ODATA関数の取得結果は集計関数で評価することができます。例えば、以下の書き方でデータの個数を取得できます。このとき、集計関数の対象はレコードではなくデータ全体、つまり複数フィールドを取得した場合すべてのフィールドが集計の対象になる点に注意してください。

    =COUNT(ODATA("Categories?$filter=CategoryIDeq 2"))

    ODataの具体例

    このようなODataのURLをForguncyがサポートする4種類の方法で表現した場合、以下のようになります。

    サーバーサイドAPI(C#)

    this.DataAccess.GetTableData("Categories(1)/Products?$top=2&$orderby=Name");

    Web API(JavaScript)

    Forguncy.getTableDataByOData("Categories(1)/Products?$top=2&$orderby=Name", function (data) { }, function (e) { });

    URL(サーバー名が「srv01」、アプリケーション名が「app01」である場合)

    http://srv01/app01/OData/GetData/Categories(1)/Products?$top=2&$orderby=Name

    関数

    =ODATA("Categories(1)/Products?$top=2&$orderby=Name")

    以下に代表的な具体例を示します。記載する具体例は「リソースパス」以降の部分のみです。

    エンコードの必要な特殊文字

    ODataでは、特殊文字を含むレコードをODataパスで指定する際に文字のエンコードが必要です。たとえば、「+」を含んでいるレコードを取得する場合、ODataパスには以下のように「%2b」にエンコードして指定します。

    エンコード前の「+」を含んだODataパス
    Products?$filter=Categories/CategoryName eq 'Produce+'

    エンコード後のODataパス
    Products?$filter=Categories/CategoryName eq 'Produce%2b'

    サポートされる演算子や関数

    ForguncyのODataでは、以下の演算子や関数がサポートされます。

    参考: ODataパスを簡単に生成できるOData生成ツールが提供されています。
    詳細については、OData生成ツール を参照してください。

    ページ上にOData関数を記載した場合、そのページの「ページロード時のコマンド…」で「JavaScriptコードの実行」コマンドを呼び出し、以下を記載してください。この記載がないと、同時に異なる端末でデータを更新していたとしても、ブラウザにOData関数で取得した値のキャッシュが残り表示が更新されなくなります。
    Forguncy.Page.recalc();