##はじめに
前回から期間が空いてしまいました。すみません。
今回は更新系のAPIを使用してみたいと思います。
トークン類は前と同様、適当なセルに置いておけば良いです。
セル範囲を選択し、その状態でマクロを呼ぶとその選択範囲を
そのまま更新データとしてネクストエンジンにアップする、といったサンプルになります。
更新情報(新規登録も可能)を入れたCSVデータを、Selectionより自作します。
商品マスタ項目のヘッダ(syohin_code,syohin_name等)も必要です。
Selectionの要素を1から参照していくと、左→右、最終列が終わると次の行
といった感じで移動していくので、CSVを作成するのに都合が良いね。
最終列以外はカンマ、最終列は改行(VbCr)を入れます。それの繰り返しで
パラメータとするCSV文字列を作り上げます。
商品情報の更新として、API
h ttps://api.next-engine.org/api_v1_master_goods/upload
を呼び出します。
###サンプルコード
Private Sub CommandButton1_Click()
'API商品情報登録
Dim Token As String 'アクセストークン
Dim Refresh As String 'リフレッシュトークン
Dim jsonObj As Object 'パースしたjson用のオブジェクト
Dim httpReq As New XMLHTTP60
Dim i As Integer 'loopカウンタ
Dim rngToken As Range
Dim rngRefresh As Range
Dim ws As Excel.Worksheet
Dim cnt As Long 'レコード件数
Dim queNo As String
Dim rngdt As Range
Dim strdt As String
Set ws = Worksheets("token")
Set rngToken = ws.Range("B2")
Set rngRefresh = ws.Range("B3")
'画面からアクセストークン・リフレッシュトークンをセットする
Token = rngToken.Value
Refresh = rngRefresh.Value
'選択範囲セレクションからデータ文字列を作成する
'セレクションの数だけLoop
Set rngdt = Selection
For i = 1 To rngdt.Count
If i Mod rngdt.Columns.Count <> 0 Then
'最終列以外はカンマを打つ
strdt = strdt & rngdt(i).Value & ","
Else
'最終列は改行を打つ
strdt = strdt & rngdt(i).Value & vbCr
End If
Next
Debug.Print strdt
With httpReq
'リクエストURLとエンドポイント
.Open "POST", "https://api.next-engine.org/api_v1_master_goods/upload"
'ヘッダ
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'パラメータを入れて送信
.send ("&access_token=" & Token & "&refresh_token=" & Refresh & "&data_type=csv&data=" & strdt)
'Debug.Print .responseText
'jsonをパースする
Set jsonObj = JsonConverter.ParseJson(.responseText)
End With
Set httpReq = Nothing
'取得したトークンをそれぞれ画面に戻す
If jsonObj("result") = "success" Then
rngToken.Value = jsonObj("access_token")
rngRefresh.Value = jsonObj("refresh_token")
rngToken.Offset(0, 1).Value = jsonObj("access_token_end_date")
rngRefresh.Offset(0, 1).Value = jsonObj("refresh_token_end_date")
Set rngToken = Nothing
Set rngRefresh = Nothing
'キューIDを取得
queNo = jsonObj("que_id")
Call MsgBox("キューNo:" & queNo & vbCr & "にて処理完了しました", vbInformation, "処理終了")
Else
Call MsgBox(CStr(jsonObj("message")), vbExclamation, "エラー")
End If
Set jsonObj = Nothing
Set rngdt = Nothing
End Sub
JSONの戻り値は、
異常終了ではエラーメッセージ
正常終了でバッチのキューIDが返ります。
また、商品マスタ一括登録画面にログが残ります。
##参考サイト
ネクストエンジンAPIにEXCELブックから接続する
【VBA】JSONファイルの内容をEXCELファイルに読み込む
宇宙一わかりやすい?VBA-JSONを使ったJSONパースのしかた