LoginSignup
0
1

More than 5 years have passed since last update.

VBA で kintone ユーザー情報を取得し json 変換

Last updated at Posted at 2017-08-05

VBA で kintone ユーザー情報を取得し json 変換する例です。
json 変換に、cJobject ライブラリを使用します。
VBA で kintone レコードを取得し json 変換 とほとんど同じ手順です。

環境

Windows 10 Pro
Excel 2016

cjobject ライブラリの準備

cJobject の機能を使うには、下記からexcel ファイルをダウンロードします。
ダウンロードページ で、Data Manipulation を展開すると、最後にvanillacJobject.xlsm があります。

今回は、ダウンロードしたファイルに、VBA IDE で、Module を追加して処理を記述します。

ユーザーエクスポートAPI 取得

ユーザーエクスポートAPI で、codes を指定して、ユーザー情報を取得します。

S001, S002 の codes を指定した例

    strQuery = "codes[0]=S001&codes[1]=S002"
    strURL = "https://<サブドメイン>.cybozu.com/v1/users.json?" & strQuery

※ query をエンコードするとエラーになります。

ログイン認証のBase64変換

cJobject ライブラリに、Base64Encode関数があるので、それを使います。

Dim strAuthorization As String     ' Authorization
strAuthorization = Base64Encode("USER:PASS")

レスポンス情報を json 変換

JSONParse 関数でレスポンス情報を、cjobject に変換できます。

    Dim resp As cJobject           ' json data
    Dim users As cJobject           ' json data

    ...
    Set resp = JSONParse(strJSON)
    Set users = resp.child("users")

ユーザー情報内の項目値を取り出す

ユーザー情報の配列からからユーザー情報を取り出します。
user.stringify は、cjobject を文字列に変換します。

    For Each user In users.children

        If users.children.Count > 0 Then

            ' ユーザーの情報
            Debug.Print "ユーザー情報: " & user.stringify

            Dim info As cJobject
            ' 全情報
            For Each info In user.children
                Debug.Print info.stringify
            Next info
            Debug.Print vbCrLf

        End If
    Next user

VBA コード全体

module1.vba
Sub kintoneGetTest2()

    '--------------------------------------------------------------------
    '  変数定義
    '--------------------------------------------------------------------
    Dim objHttpReq As XMLHTTP60   ' XMLHTTP オブジェクト
    Dim strJSON As String              ' レスポンスで受け取るJSONデータ
    Dim strURL As String               ' アクセス先URL
    Dim strQuery As String             ' 検索文字列
    Dim strAuthorization As String     ' Authorization

    strAuthorization = Base64Encode("USER:PASS")

    '------------------------------------------------------------------
    ' 検索文字付きURLを作成する
    '------------------------------------------------------------------
    strQuery = "codes[0]=S001&codes[1]=S002"
    strURL = "https://<サブドメイン>.cybozu.com/v1/users.json?" & strQuery

    '------------------------------------------------------------------
    ' XMLHTTP オブジェクトを生成する
    '------------------------------------------------------------------
    Set objHttpReq = CreateObject("MSXML2.XMLHTTP")
    objHttpReq.Open "GET", strURL, False
    '------------------------------------------------------------------
    ' XMLHTTP のリクエストヘッダーを指定する
    '------------------------------------------------------------------
    ' ログイン認証
    objHttpReq.setRequestHeader "X-Cybozu-Authorization", strAuthorization
    ' Basic 認証
    'objHttpReq.setRequestHeader "Authorization", "Basic " & <ベーシック認証情報>
    'ドメイン名:ポート番号
    objHttpReq.setRequestHeader "Host", "<サブドメイン>.cybozu.com" + ":443"
    'キャッシュ対策(常にレスポンスが取得できる状態にする)
    objHttpReq.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"

    '------------------------------------------------------------------
    ' リクエストを送信する
    '------------------------------------------------------------------
    objHttpReq.send (Null)

    '------------------------------------------------------------------
    ' レスポンスを取得する
    '------------------------------------------------------------------
    'レスポンス情報を変数に格納する

    Dim resp As cJobject           ' json data
    Dim users As cJobject           ' json data
    Dim user As cJobject           ' json data

    strJSON = objHttpReq.responseText
    'Debug.Print "resp: " & strJSON
    Set resp = JSONParse(strJSON)
    Set users = resp.child("users")


    For Each user In users.children

        If user.children.Count > 0 Then

            ' ユーザーの情報
            Debug.Print "ユーザー情報: " & user.stringify

            Dim info As cJobject
            ' 全情報
            For Each info In user.children
                Debug.Print info.stringify
            Next info
            Debug.Print vbCrLf

        End If
    Next user

End Sub

実行結果

イミディエイトウィンドウ

ユーザー情報: {"id":"11","code":"S001","ctime":"2017-02-18T03:46:47Z","mtime":"2017-02-18T03:46:47Z","valid":false,"name":"早乙女太一","surName":"","givenName":"","surNameReading":"","givenNameReading":"","localName":"","localNameLocale":"ja","timezone":"Asia/Tokyo","locale":null,"description":"","phone":"","mobilePhone":"","extensionNumber":"","email":"","callto":"","url":"","employeeNumber":"","birthDate":null,"joinDate":null,"primaryOrganization":null,"sortOrder":null,"customItemValues":[ ]}
{"id":"11"}
{"code":"S001"}
{"ctime":"2017-02-18T03:46:47Z"}
{"mtime":"2017-02-18T03:46:47Z"}
{"valid":false}
{"name":"早乙女太一"}
{"surName":""}
{"givenName":""}
{"surNameReading":""}
{"givenNameReading":""}
{"localName":""}
{"localNameLocale":"ja"}
{"timezone":"Asia/Tokyo"}
{"locale":null}
{"description":""}
{"phone":""}
{"mobilePhone":""}
{"extensionNumber":""}
{"email":""}
{"callto":""}
{"url":""}
{"employeeNumber":""}
{"birthDate":null}
{"joinDate":null}
{"primaryOrganization":null}
{"sortOrder":null}
{"customItemValues":[ ]}


ユーザー情報: {"id":"12","code":"S002","ctime":"2017-02-18T03:46:47Z","mtime":"2017-02-18T03:46:47Z","valid":false,"name":"高橋一生","surName":"","givenName":"","surNameReading":"","givenNameReading":"","localName":"","localNameLocale":"ja","timezone":"Asia/Tokyo","locale":null,"description":"","phone":"","mobilePhone":"","extensionNumber":"","email":"","callto":"","url":"","employeeNumber":"","birthDate":null,"joinDate":null,"primaryOrganization":null,"sortOrder":null,"customItemValues":[ ]}
{"id":"12"}
{"code":"S002"}
{"ctime":"2017-02-18T03:46:47Z"}
{"mtime":"2017-02-18T03:46:47Z"}
{"valid":false}
{"name":"高橋一生"}
{"surName":""}
{"givenName":""}
{"surNameReading":""}
{"givenNameReading":""}
{"localName":""}
{"localNameLocale":"ja"}
{"timezone":"Asia/Tokyo"}
{"locale":null}
{"description":""}
{"phone":""}
{"mobilePhone":""}
{"extensionNumber":""}
{"email":""}
{"callto":""}
{"url":""}
{"employeeNumber":""}
{"birthDate":null}
{"joinDate":null}
{"primaryOrganization":null}
{"sortOrder":null}
{"customItemValues":[ ]}

関連

VBA で kintone レコードを取得し json 変換
VBA で kintone ユーザー情報を取得し json 変換
VBA で kintone 新規レコード作成、json 文字列変換

0
1
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
1