新規投稿
フォローする

kintoneのレコード番号取得について

こんにちは。初歩的な質問で申し訳ございませんが、
どなたかご教授いただけたら幸いです。
言語はVB2008を使用しております。

kintoneのレコードを更新する場合、レコード番号を指定する必要がありますが、
POSTが成功した場合に、objHttpReq.responseText にレコード番号が帰って
くるようですが、これを取り出して、DBに格納しておき、kintone側の更新時に
使用したいと思っています。
objHttpReq.responseText から、レコード番号を取り出すには、どのような記述
が必要でしょうか?

ご教授いただければ幸いです。
何卒よろしくお願い申し上げます。

下記のようなコードで、recnoには、
{
"id": "100"
"revision": "1"
}
とかえってきますが、IDと、レビジョン番号を別々に取り出すには、どうしたらよいでしょうか?

If objHttpReq.status = 200 Then
 'MsgBox(objHttpReq.responseText & " で登録されました。")
 Dim recno As String
 recno = objHttpReq.responseText
Else
MsgBox(objHttpReq.responseText)
End If

0

6件のコメント

Avatar
斎藤 栄

HAGE_DEBU_MEGANEさん
レコード更新時の話ではなく、まず最初にレコード追加を行い、そのレコード番号を自前のDBに記録しておき、後でそのレコード番号を使って更新をかけたいが、そもそもレコード追加した時にレコード番号を取り出すにはどうすれば良いのですか?というご質問ですね?

recno = objHttpReq.responseText

と書かれてますが、objHttpReq.responseText自体はレコード番号だけが格納されているのではなく、レコード番号(id)とrevisionが格納されたJSONの文字列です。書かれている通り、

{
"id": "100"
"revision": "1"
}

という文字列が返ってきます。

JSON文字列をプログラムで扱いやすくするには、この文字列をパースしてオブジェクトに変換してあげる必要があります。(VBでJSON文字列をパースする方法はいくつかあるようなのでこれは後述)

例えば、パースする関数がparseJSON()だとすると、

strJSON = objHttpReq.responseText
Set objJSON = parseJSON(strJSON)

のようにしてオブジェクトに変換します。オブジェクトに変換されれば、あとは

recno = objJSON("id")
または
recno = objJSON.item("id")

のような形でレコード番号を取得できると思います。

VBでJSON文字列をパースする方法ですが、いくつか方法があるようですので、「VB2008 JSON」等でググってみてください。使われるライブラリによって上記コードが異なる場合がありますが、考え方は同じかと思います。

1
Avatar
HAGE_DEBU_MEGANE

斎藤様

ご教授ありがとうございました!

>レコード更新時の話ではなく、まず最初にレコード追加を行い、そのレコード番>号を自前のDBに記録しておき、後でそのレコード番号を使って更新をかけたい>が、そもそもレコード追加した時にレコード番号を取り出すにはどうすれば良いの>ですか?というご質問ですね?

→ おっしゃる通りでございます。

パースする方法を調べてみます。
大変参考になりました。
ありがとうございました。

0
Avatar
Keiichi Nagaoka

パースについてですが、Json.NETを私は使いました。
http://james.newtonking.com/json

C#+ASP.NETで使いましたが、VBでも使えるはずです。

0
Avatar
HAGE_DEBU_MEGANE

Keiichi Nagaoka 様

ご回答大変ありがとうございます。
私もJSON.NETを使用してみました。
本当に初歩的な質問で、お恥ずかしい&申し訳ないのですが、
できればご教授いただけるとありがたいです。

下記のようなコードを書きまして、JSON_Value As Stringの値を参照する
と、"ids:7"という文字列が帰ってきてしまいます。idsの値である 7 だけを取り
出すには、どのように記述すればよいのでしょうか?

Dim JSON=Newtonsoft.Json.Linq.JObject.Parse(JSONSTR)
Dim JSON_Value As String = JSON.Property("ids").ToString
Dim JSON=Newtonsoft.Json.JsonConvert.DeserializeObject(JSONSTR)
Dim JSON_Value As String = JSON.getvalue("ids")

大変恐縮ながら、ご教授いただければ幸いです。
何卒よろしくお願い申し上げます。

0
Avatar
Keiichi Nagaoka

すみません、私もまだ試行錯誤しているところですのでよく分かっておりません。
最初JSONデータから狙ったデータを取るのがうまくいかず、ひとまずこんなコードで取れたというレベルです。

↓以下がそのコードです。
↓「文字列1行0」と「更新者」のデータを取っているだけです。

//----------------------------------------------------
// レコード取得処理

//----------------------------------------------------
using ( WebResponse rsp = req.GetResponse() )
{
using ( Stream stm = rsp.GetResponseStream() )
{
if (stm != null)
{
// JSONデータそのものを取得
StreamReader reader = new StreamReader(stm);
string jsonString = reader.ReadToEnd();

        // JSONデータを解析、Json.NET使用
        var json = JObject.Parse(jsonString);
        var records = json["records"];
        txtGetString.Text = string.Empty;
        txtGetString.Text = txtGetString.Text + records[0]["文字列__1行__0"]["value"].ToString();
        txtGetString.Text = txtGetString.Text + Environment.NewLine;
        txtGetString.Text = txtGetString.Text + records[0]["更新者"]["value"]["name"].ToString();
    }
}

}

■kintoneからこんなJSONデータがとれていました
{
"records":[
{
"更新日時":{
"type":"UPDATED_TIME",
"value":"2014-04-21T06:00:00Z"
},
"作成者":{
"type":"CREATOR",
"value":{
"code":"Administrator",
"name":"Administrator"
}
},
"$revision":{
"type":"REVISION",
"value":"3"
},
"文字列1行_":{
"type":"SINGLE_LINE_TEXT",
"value":"(株)ほげほげ"
},
"lng":{
"type":"SINGLE_LINE_TEXT",
"value":""
},
"更新者":{
"type":"MODIFIER",
"value":{
"code":"Administrator",
"name":"Administrator"
}
},
"record_no":{
"type":"RECORD_NUMBER",
"value":"1"
},
"文字列
1行2":{
"type":"SINGLE_LINE_TEXT",
"value":"ほげほげさん"
},
"Zipcode":{
"type":"SINGLE_LINE_TEXT",
"value":"6500033"
},
"添付ファイル_0":{
"type":"FILE",
"value":[]
},
"文字列
複数行":{
"type":"MULTI_LINE_TEXT",
"value":""
},
"文字列
1行_0":{
"type":"SINGLE_LINE_TEXT",
"value":"開発部"
},
"作成日時":{
"type":"CREATED_TIME",
"value":"2014-04-21T05:58:00Z"
},
"TEL":{
"type":"SINGLE_LINE_TEXT",
"value":""
},
"Address":{
"type":"SINGLE_LINE_TEXT",
"value":"東京都文京区後楽1-4-14 後楽森ビル12F"
},
"Mail":{
"type":"SINGLE_LINE_TEXT",
"value":""
},
"lat":{
"type":"SINGLE_LINE_TEXT",
"value":""
},
"FAX":{
"type":"SINGLE_LINE_TEXT",
"value":""
}
}
]
}

0
Avatar
HAGE_DEBU_MEGANE

Keiichi Nagaoka 様

ご回答ありがとうございました!
参考にさせていただきます。

0
ログインしてコメントを残してください。