Forguncyマニュアル
OData
Forguncyの使い方 > OData

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

ForguncyはOData、およびODataのリソースパスを使用したテーブルデータの取得のみをサポートしています。ここでのテーブルデータとは、テーブル、またはビューのデータを指します。また、ODataの一部のクエリオプション、演算子、関数をサポートしています。ODataを使ったデータの取得方法には、以下の4種類の方法があります。

サーバーサイド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を使用したテーブルデータの取得例を示します。

ODATA関数

Excelには存在しないForguncy固有の関数としてODATA関数を提供しています。ODATA関数を使用することで、ODataで指定した条件でテーブルデータを取得できます。なお、ODATA関数をセルに設定する場合、OData生成ツールを使用することで、GUIによる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の具体例

このような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();

関連トピック