サポート > Wagby Developer Network(R7) > REST API 活用ガイド > [応用例] Excel から REST API を経由して Wagby を操作する [2] CRUD 処理
ja | en

Excel から REST API を経由して Wagby を操作する例を紹介します。 R7.5.1

このページを読む前に、「Excel から REST API を経由して Wagby を操作する [1] 基本形」に目を通しておいてください。

顧客モデルの拡張

ここでは、もう一つの顧客モデル "customer1" を用意しました。図1のように日付型項目およびファイル型項目を追加しています。繰り返しコンテナも追加しています。ファイル型項目が存在するため、REST API で操作する場合、マルチパートフォームとして扱う必要があります。

図1 拡張した顧客モデル定義

ビルド後、アプリケーションを起動します。図2に示すサンプルデータを事前に登録しておきます。

図2 サンプルデータ

Excelを起動する

REST API を利用するプログラム (VBA) が含まれる Excel ファイルを開きます。 このとき、Wagby アプリケーションは起動した状態としてください。Excel から HTTP 通信を行うためです。

図3 サンプルアプリケーションを起動する

検索

はじめに、検索条件を指定せずに「検索」ボタンを押下します。

図3 サンプルアプリケーションを起動する

1件のデータが検索されます。一覧表示領域に表示するようにしました。

図4 一覧表示領域

更新

該当データの、任意のセルの値を変更することができます。ここでは電話番号を変更し、「更新」ボタンを押下します。カーソルのある行が対象となります。

図5 電話番号を変更する

確認ダイアログを表示するようにしています。「OK」を押下すると、変更用の REST API を呼び出します。

図6 更新確認ダイアログ

Webから対象データを再取得してみます。データが更新されていることがわかります。

図7 データが更新されている

登録

データの新規登録を行います。今回、用意した顧客モデルは主キーに順序を使うようにしています。この場合、主キーの欄は空白とします。それ以外の項目に値を設定します。

今回のデモアプリケーションは、ファイルのアップロードには未対応です。ファイル型の欄は空白としてください。
図8 新規登録するデータを入力する

カーソルのある行を対象とします。「登録」ボタン押下により、確認ダイアログが表示されます。「OK」を押下すると、登録用の REST API を呼び出します。

図9 登録確認ダイアログ

データ登録のタイミングで、主キーは自動採番されています。

図10 主キーの自動採番

Web画面から確認します。データが追加されていることがわかります。

図11 Web画面からの新規登録データの確認

削除

データの削除を行います。対象行にカーソルを合わせ、「削除」ボタンを押下します。

図12 データの削除を行う

削除確認ダイアログを表示するようにしています。「OK」を押下すると、データ削除のための REST API が呼び出されます。

図13 データ削除確認ダイアログ

ダウンロード

ファイル型項目のダウンロードを行う機能を紹介します。ダウンロードしたいファイルにカーソルを合わせ、「ダウンロード」ボタンを押下します。

図14 ファイルのダウンロード

保存用ダイアログボックスが用意されます。「保存」ボタンを押下すると、ファイルがダウンロードされます。

図15 ファイル保存ダイアログ

このサンプルアプリケーションは、繰り返しコンテナ内のファイル型項目にも対応しています。

図16 繰り返しコンテナ内にあるファイルのダウンロード

サンプルアプリケーションは、Excel VBA で記述されています。いくつかのポイントを説明します。

マルチパートフォームを使った更新

サンプルアプリケーションでは、今回の対象となる顧客モデルがファイル型項目を含んでいるため、マルチパートフォームで更新用APIを呼び出します。

Sub updateOneData()
  rownum = ActiveCell.Row
  pkey = getPrimaryKey(rownum)
  desc = getUpdateDataDescription(rownum)
  If pkey = "" Or desc = "" Then
    Exit Sub
  End If
  ok = MsgBox(desc & " を更新してよろしいですか?", vbOKCancel)
  If ok = vbCancel Then
    Exit Sub
  End If
  '--------------------------------------------------------------------
  '  変数定義
  '--------------------------------------------------------------------
  Dim strJSON As String              ' レスポンスで受け取るJSONデータ
  Dim objJSON As Object              ' レスポンスの JSON 文字列をパースした情報を格納
  Dim strURL As String               ' アクセス先URL
  Dim data As String
  data = createUpdateParameter(rownum)
  'MsgBox (data)
  
  '------------------------------------------------------------------
  ' 検索文字付きURLを作成する
  '------------------------------------------------------------------
  strURL = ModelId & "/edit/" & pkey
  Dim contentType As String
  contentType = "multipart/form-data; boundary=" & MultipartBoudary
  Dim headerkey As New Collection
  Dim headervalue As New Collection
  headerkey.Add item:="Content-Type"
  headervalue.Add item:=contentType, key:="Content-Type"
  strJSON = callRest2(strURL, "PUT", data, headerkey, headervalue)
  If strJSON = "" Then
    Exit Sub
  End If
  strJSON = replaceLongValue(strJSON)
  Set objJSON = parseJSON(strJSON)
    
  If objJSON Is Nothing Then
    Exit Sub
  End If
  If IsNull(objJSON.item("entity")) Then
    Exit Sub
  End If

  setContentsP rownum - RowStart, objJSON.item("entity"), objJSON.item("entityp")
End Sub
  • 2行目で、対象となる行を選択します。
  • 3行目と4行目で、キーと値を取得します。ここはモデル毎に異なるコードとなります。[後述]
  • 8行目で確認ダイアログ処理を行っています。
  • 27行目でマルチパートフォームを指定しています。フォーム定義の上部で次の定数としています。
    Const MultipartBoudary As String = "----WebKitFormBoundary4biuCV4d9GMPOr5D"
    

long値の扱い

サンプルアプリケーションでは、顧客モデルの "datetime1" 項目を日付時刻型としています。ここで、ExcelでJSONを扱うために用いている JSONLib というライブラリは(本ドキュメント執筆時点のバージョンでは)long値に対応していません。

そのため、サンプルアプリケーションでは replaceLongValue という関数を用意しました。VBAで利用できる正規表現ライブラリを用いて、数字型項目はダブルクォーテーショんで囲み、文字列表現としています。これによって JSONLib の制約を回避しています。

Function replaceLongValue(strJSON As String) As String
    Dim items As Variant
    items = Array("datetime1")
    
    For Each itemstr In items
        Set reobj = CreateObject("VBScript.RegExp")
        With reobj
          .Pattern = "(""" & itemstr & "_"":)([0-9]*),"
          .Global = True
        End With
        strJSON = reobj.Replace(strJSON, "$1""$2"",")
    Next
    replaceLongValue = strJSON
End Function
将来の JSONLib のバージョンアップで本制約が撤廃されたときには、このコードは不要になります。あるいは(このような制約のない)他のライブラリを使うという選択肢もあるかもしれません。開発者の判断でご対応ください。

ここで紹介したリポジトリ、サンプルデータ、サンプルアプリケーション(Excelファイル)一式をダウンロードできます。

JSONLib を利用するためには、対象の Excel に jsonlib クラスモジュールをインポートする必要があります。 当ページでダウンロードできる Excel ファイルは既にインポート済みですので、こちらを編集する形での開発をお勧めします。

「REST API 活用ガイド > ログオン・ログオフ > 自動ログオン > セキュリティ」をお読みください。

VBAの次の部分で「ユーザ定義型は定義されていません」というエラーが発生する場合があります。

Dim objHttpReq As MSXML2.XMLHTTP   ' XMLHTTP オブジェクト
次のように修正してお試しください。
Dim objHttpReq As Object   ' XMLHTTP オブジェクト

この修正を行ったファイルをダウンロードできます。