kintone

質問に勝手に答えて能力を向上しよう!Part.3

勉強ができるようになるには、類題を多く解くべきだという論がある。
これはプログラミングでも同じこと。
よって僕は勝手にcybozu developer networkに投稿されている質問に答えてみる。

今日の質問はこちら!

アプリアクションの転送先のレコード番号を転送元に登録したい

タイトルの通りで調べたところ、サンプルコードがみつかり、見様見真似で以下のようなコードを転送先のアプリに読み込んでみました。
しかし、アクションを実行し、転送先レコードを保存しても、転送元の連携用レコード番号は空のままです。原因が全く分からず。2うのアプリを行き来するのでデバッグの方法もよくわかりません。ご助言いただければ幸いです。

cybozu developer network

(function () {
“use strict”;

//インシデント管理簿新規レコード作成「成功」時に実行

kintone.events.on(‘app.record.create.submit.success’, function(event) {
console.log(‘アクション!!!!’);

//お問合せ管理簿アプリID
var toiAppNo = 63;
//お問合せ管理簿レコード番号(アクション実行時コピー)
var toiRecNo = event[‘record’][‘レコード番号’][‘value’];
//連携(更新)するアプリコード+登録レコード番号(インシデント管理簿)
var inciNo = “inci-” + event[‘record’][‘$id’][‘value’];

var modbody = {
“app”: toiAppNo,
“id”: toiRecNo,
“record”:{
“inci” : {
“value” : inciNo
}
}
}

//問い合わせ管理簿に更新
kintone.api(kintone.api.url(‘/k/v1/record’, true),’PUT’, modbody, function(resp) {
// success
console.log(resp);
return event;
},function(error) {
// error
event.error = ‘アプリコード更新エラー’;
console.log(‘エラーだよ!!!!’);
return event;
});
});
})();

原因特定の難しさ

あからさまな記述方法のエラーならば気づけるが、
そうでない場合、原因特定はなかなか難しい。
特にユーザー固有のサブドメインやアプリID,フィールドコードなどにミスがあると、
こちらでは気づきようがない。

あたりを付けて聞くしかない

今回やりたいことは、
AからBというアプリへのアクションの際、
Bのレコード番号をAのレコードに保管しておきたい、ということだ。
コードを見ていると気になる点がある。

//お問合せ管理簿アプリID
var toiAppNo = 63;
//お問合せ管理簿レコード番号(アクション実行時コピー)
var toiRecNo = event[‘record’][‘レコード番号’][‘value’];
//連携(更新)するアプリコード+登録レコード番号(インシデント管理簿)
var inciNo = “inci-” + event[‘record’][‘$id’][‘value’];

toiRecNoに入っている値は本当に問い合わせ管理簿のレコード番号なのか??
通常、レコード番号というフィールドコードはそのアプリのレコード番号が入っているはず。

Aのレコード番号を特定しなければならないのに、Bのレコード番号を入れているということだ。
修正すべきはそこ一点。

フィールドコードの取り扱い

まず、フィールドコードとフィールド名は揃えるべきだという認識は持っておくと良いだろう。
そしてアプリをまたぐ場合の処理については、
A側のフィールドコードなのかB側のフィールドコードなのかを当然理解しておかなければならない。
今回のように、A側のフィールドコード(仮にa)に入っていたものが、
Bに移動した際に別のフィールドコード(仮にb)に入っているということは当然起こりうる。
なのにB側のアプリでaを呼び出そうとしても無理で、bを呼び出さなければならないわけだ。