より高度な開発を行うための機能
ここまでノンプログラミングな機能を紹介してきましたが、最後にシステム開発者向けに、より高度なアプリケーション開発を行う機能「ODataの利用」と「カスタムWeb API」を紹介します。基本的な機能だけでは手が届かないところを支援します。
ODataの利用
Forguncyでは、随所でODataのクエリーによるデータの取得方法を採用しています。以下のような場面でODataのクエリーを使用できます。
- A. Forguncy Builderの画面レイアウトにて、Forguncy独自のOData関数を使用してデータ取得を行う
- B. カスタムWeb API(サーバー側で実行するための独自Web API)にて、ODataを使用してテーブルデータにアクセスする
- C. カスタムJavaScript(クライアント側で実行するためのJavaScript)にて、ODataを使用してテーブルデータにアクセスする
- D. アプリケーションが配置されているURLに対し、ODataのクエリー文字列でアクセスすることでテーブルデータの取得を行う
Aを例にして具体的に説明すると、”顧客テーブルの中から顧客IDがC11セルと同じ値である行の郵便番号を表示する”といったロジックを、セルに対して図23のようにOData関数の数式を指定することで、記述できます。
詳しくは以下のぺージをご覧ください。
カスタムWeb API
Forguncyに対してDLLファイルをアップロードすることで、アプリケーションに独自の処理を行うWeb APIを組み込むことができます。1つのアプリケーションに対して複数のWeb APIを定義でき、定期実行を行うタスクも登録できます。カスタムWeb API内では、後述で紹介するコードのようにODataでデータベースにアクセスしたり、メール送信などが行えます。例えば、他のアプリケーションにデータを公開したり、定期実行によりデータ集計を行ったりなどが実現できます。
図24のような日報管理システムを例に、カスタムWeb APIを登録するまでの流れを紹介します。カスタムWeb APIは、.NET Framework環境で動くプログラムを記述するので、ここでは.NET Framework開発者向けに説明します。
Visual Studioにて、「クラスライブラリ」のプロジェクトを作成し、後述のDLLファイルを参照した後、所定のクラスを継承したクラスを作成します。環境は「.NET Framework 4.6」をターゲットにしてコンパイルできる環境であればVisual Studio以外でも構いません。
参照するDLLファイル
- C:\Program Files (x86)\Forguncy\Website\bin\GrapeCity.Forguncy.ServerApi.dll
- C:\Program Files (x86)\Forguncy\Website\bin\Microsoft.Owin.dll
また、今回はJSON形式のデータを扱うため、以下のDLLファイルも参照します。
追加参照するDLLファイル(今回のみ)
- C:\Program Files (x86)\Forguncy\Website\bin\Newtonsoft.Json.dll
次の例のように、ForguncyApiクラス(GrapeCity.Forguncy.ServerApi名前空間)を継承したクラスを定義します。クラス名は任意の名前を定義します。
using GrapeCity.Forguncy.ServerApi; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Net; namespace ClassLibrary1 { public class Class1 : ForguncyApi { //日報一覧をJSONで返すAPI [Get] public void GetDailyReport() { var deilyReportList = this.DataAccess.GetTableData(odataPath: "DailyReport/?$orderby=Date"); var json = JsonConvert.SerializeObject(deilyReportList); this.Context.Response.Write(json); this.Context.Response.ContentType = "application/json"; this.Context.Response.StatusCode = (int)HttpStatusCode.OK; } //日報をリクエスト内容から作成します [Post] public void PostDailyReport() { var reader = new StreamReader(this.Context.Request.Body); //リクエストをDictionaryに変換します var request = JsonConvert.DeserializeObject<Dictionary<string, object>>(reader.ReadToEnd()); this.DataAccess.AddTableData(tableName: "DailyReport", newValues: request); } //定期実行を行う処理の定義 [ScheduleApi(interval: "0:0:10")] public void AutoCreator() { var request = new Dictionary<string, object>() { { "Date", DateTime.Now }, { "Accomplishment", "スケジューラーから作成した実績" }, { "NextPlan", "スケジューラーから作成した予定" } }; this.DataAccess.AddTableData(tableName: "DailyReport", newValues: request); } } }
この例では、以下のような機能を実装しています。
-
GetDailyReportメソッド
- HTTP GETでアクセスした場合に、日報データの一覧をJSON形式で返すAPI。
-
PostDailyReportメソッド
- HTTP POSTでアクセスした場合に、HTTPリクエストのBody内にJSON形式で記述されている内容から、日報データを作成します。
-
AutoCreatorメソッド
- 定期実行を行うメソッドです。10秒毎に、日報データを作成します。
HTTP GET・HTTP POST・定期実行の種類は、メソッドに付与されている属性(GrapeCity.Forguncy.ServerApi名前空間)で指定します。定期実行の場合は、実行する間隔を「interval」引数にてTimeSpan構造体(System名前空間)を表す文字列書式で記述します。また、HTTPリクエスト・レスポンスの処理の方法は、OWINミドルウェアの作成時と同じです。ASP.NET Web APIのアクションメソッドとは違うことに注意して下さい。
次に、ビルドを行い、作成されたDLLファイルをForguncy Builderからアップロードします(Forguncy Serverに対してアップロードするのではなく、アプリケーションファイルに対して添付します)。アップロードすると、図25のように有効なWeb APIの一覧が表示されます。
アプリケーションをデバッグ実行した後、URL「/customapi/class1/getdailyreport」にアクセスすると、日報データ一覧がJSON形式で取得できます。一方のPOSTメソッドでのアクセスによる日報の作成や、定期実行も有効になっています。
カスタムWeb APIについてはこちらをご覧ください。カスタムWeb API - オンラインヘルプ