Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

業務アプリ開発者が見る、ExcelからWebアプリを作成する「Forguncy」の可能性

数百万円のシステムを、一人の担当者がノンプログラミングで作成する

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/08/03 14:00
目次

より高度な開発を行うための機能

 ここまでノンプログラミングな機能を紹介してきましたが、最後にシステム開発者向けに、より高度なアプリケーション開発を行う機能「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関数の数式を指定することで、記述できます。

図23 【Forguncy Builder】OData関数の数式をセルに設定
図23 【Forguncy Builder】OData関数の数式をセルに設定

 詳しくは以下のぺージをご覧ください。

カスタムWeb API

 Forguncyに対してDLLファイルをアップロードすることで、アプリケーションに独自の処理を行うWeb APIを組み込むことができます。1つのアプリケーションに対して複数のWeb APIを定義でき、定期実行を行うタスクも登録できます。カスタムWeb API内では、後述で紹介するコードのようにODataでデータベースにアクセスしたり、メール送信などが行えます。例えば、他のアプリケーションにデータを公開したり、定期実行によりデータ集計を行ったりなどが実現できます。

 図24のような日報管理システムを例に、カスタムWeb APIを登録するまでの流れを紹介します。カスタムWeb APIは、.NET Framework環境で動くプログラムを記述するので、ここでは.NET Framework開発者向けに説明します。

図24 【ブラウザー】日報管理システム
図24 【ブラウザー】日報管理システム

 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名前空間)を継承したクラスを定義します。クラス名は任意の名前を定義します。

Web APIを定義しているクラス。コードはC#の例です。
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の一覧が表示されます。

図25 【Forguncy Builder】DLLファイルを登録した後の画面
図25 【Forguncy Builder】DLLファイルを登録した後の画面

 アプリケーションをデバッグ実行した後、URL「/customapi/class1/getdailyreport」にアクセスすると、日報データ一覧がJSON形式で取得できます。一方のPOSTメソッドでのアクセスによる日報の作成や、定期実行も有効になっています。

 カスタムWeb APIについてはこちらをご覧ください。カスタムWeb API - オンラインヘルプ


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 矢後 比呂加(ヤゴ ヒロカ)

     Microsoft MVP for Visual Studio and Development Technologies(https://mvp.microsoft.com/ja-jp/PublicProfile/5000246)  シグマコンサルティング株式会社にて、Microsoft Azu...

バックナンバー

連載:現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(Forguncy)
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5