0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ネクストエンジンAPI-EXCELVBAを用いたマスタ登録&更新処理

Posted at

##はじめに
前回から期間が空いてしまいました。すみません。
今回は更新系のAPIを使用してみたいと思います。
トークン類は前と同様、適当なセルに置いておけば良いです。

セル範囲を選択し、その状態でマクロを呼ぶとその選択範囲を
そのまま更新データとしてネクストエンジンにアップする、といったサンプルになります。

更新情報(新規登録も可能)を入れたCSVデータを、Selectionより自作します。
商品マスタ項目のヘッダ(syohin_code,syohin_name等)も必要です。

Selectionの要素を1から参照していくと、左→右、最終列が終わると次の行
といった感じで移動していくので、CSVを作成するのに都合が良いね。
最終列以外はカンマ、最終列は改行(VbCr)を入れます。それの繰り返しで
パラメータとするCSV文字列を作り上げます。

商品情報の更新として、API
h ttps://api.next-engine.org/api_v1_master_goods/upload
を呼び出します。

###サンプルコード

test.bas
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パースのしかた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?