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

タイトルの通りで調べたところ、サンプルコードがみつかり、見様見真似で以下のようなコードを転送先のアプリに読み込んでみました。

しかし、アクションを実行し、転送先レコードを保存しても、転送元の連携用レコード番号は空のままです。原因が全く分からず。2うのアプリを行き来するのでデバッグの方法もよくわかりません。ご助言いただければ幸いです。


(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": toiRecNo,というのが一致していないのではないでしょうか。
toiRecNoにはいっているのはインシデント管理簿のレコード番号だと思われますが、いkがでしょう。

問い合わせ管理簿のレコード番号をコピーしている先のフィールドコードは正しいでしょうか?

実際にテストしてみましたところ正常に動作しましたので、
やはりフィールドコードにミスがあるようです。

下記の部分のフィールドコードを再度確認してください。 (太字) の部分を環境に合わせて変更してください。

//お問合せ管理簿レコード番号(アクション実行時コピー)
var toiRecNo = record. (問合管理簿のレコード番号がコピーされる先のフィールドのコード).value;

Teru 様

おはようございます。大変丁寧なご回答、いたみいります。

Teru様のご推察どおり、問い合わせ管理簿のレコード番号をインシデント管理簿に関連付けしておりませんでした。

早速、回答いただきました内容で修正してみます。

結果を改めて報告させていただきます。

ありがとうございました。

Teru 様

下記のように修正してみましたがやはり③(転送先レコード番号→転送元フィールドに登録)が実行できません。

確認いただきました内容を再度たどりながらやってみましたが、原因がわかりません。

本当に恐縮ですが、もう一度下記のコードを診断いただければ幸いです。

>やりたいことはおおむねこのような形でよろしいですか?
>①問い合わせ管理簿からアクションを実行
>②インシデント管理簿で新規レコード作成
>③インシデント管理簿を保存したタイミングでインシデント管理簿のレコード番号が問い合わせ管理簿に保存される。

→ご推察どおりです。 ぴったりです。

ご教授いただきましたとおり、インシデント管理簿に問い合わせ管理簿のレコード番号を入れるフィールド(フィールドコード:問合管理簿レコード番号)を追加して。アクションにも追加しました。
アクション実行後、問合せ管理簿のレコード番号が上記の問合管理簿レコード番号に転送されていることを確認しました。

コードを下記のように修正しました。

var toiRecNo = record.問合管理簿レコード番号.value;

修正コード

(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 toiRecNo = record.問合管理簿レコード番号.value;

//連携(更新)するアプリコード+登録レコード番号(インシデント管理簿)
var inciNo = “inci-” + event[‘record’][‘$id’][‘value’];

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

}
}

}

//console.log(‘modbody は’);
//console.log(modbody);

//問い合わせ管理簿に更新
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;
});
});
})();

yui様

お世話になります。

その状態でしたら、

var toiRecNo = event[‘record’][‘問合管理簿レコード番号’][‘value’];

このコードに戻していただければ動作すると思います。

ご確認ください。

Teru 様

早速のご回答ありがとうございます。

コードを戻してみたのですが結果は変わらずでした。

ただConsole画面に以下のような表示がありました。

何度も大変恐縮ですが、何かヒントがあればご教授お願いできますでしょうか?

(レコード番号にはアプリコードを設定しています)

 

 

 

 

yui様

こちらのコードでお試しいただけませんでしょうか。(丸々貼り付けていただけると助かります)
これで動作しない場合、フィールドコードを再度すべてチェックしていただけますでしょうか。
注意すべきポイントにコメントを入れておりますので再度ご確認ください。

(function () {
"use strict";


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

kintone.events.on('app.record.create.submit.success', function(event) {
console.log('アクション!!!!');
var record = event.record;
//お問合せ管理簿アプリID
var toiAppNo = 63; //お問い合わせ管理簿のIDになっていますか。
//お問合せ管理簿レコード番号(アクション実行時コピー)
var toiRecNo = record.問合管理簿レコード番号.value; //フィールド名は「お問合わせ管理簿レコード番号」ですが、これでOKでしょうか。
//連携(更新)するアプリコード+登録レコード番号(インシデント管理簿)
var inciNo = "inci-" + record.$id.value; //inciNoのフィールドは文字列になっていますか。inciを含むため、数値ではだめです。


var modbody = {
"app": toiAppNo,
"id": toiRecNo,
"record":{
"連携inci" : { //連携inciはフィールドコードで間違いないでしょうか
"value" : inciNo

}
}

}

//console.log('modbody は');
//console.log(modbody);

//問い合わせ管理簿に更新
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;
});
});
})();

宜しくお願いいたします。

Teru 様

コードまでお送りいただき、ありがとうございます。

上手く、入りました!!

お問い合わせ管理簿の連携inciフィールドが数値フィールドでした。

(これはもしかしたらと一度文字フィールドに直したのですがその時は問合管理簿レコード番号の連携がされていなかったので失敗し、数値に戻してしまいました。全く・・右往左往です。)

一人でしたら諦めていました。本当に心強かったです。最後までご面倒おかけしましたが大変助かりました。

本当にありがとうございました。

おお!よかったです!

1人では気づかないことも多いですよね…。またよろしくお願いいたします。

Teru 様

あまりにうれしくて、調子にのりまして、

いま、インシデント管理簿のレコードにも、連携した障害管理簿のレコード番号を登録するようにしました。

(いただいたコードを再利用させていただきました)

本当にありがとうございました。

カスタマイズなんて無理!とやけっぱちになっていましたが、もっともっと勉強させていただこうと思います。

今後とも、どうぞよろしくお願いいたします。

 

Teru 様

昨日はありがとうございました。

本当に恐縮なのですが、またご相談させてください。

昨日、いただいたサンプルコードで、インシデント管理簿のレコードにも、アクションで連携した☆障害管理簿のレコード番号を登録するようにしました。

障害レコードとインシデントレコードは1:nの関係になるため、

同じ障害レコードに紐づくインシデントレコードには、上記の☆障害レコード番号を手動でコピーします。

障害レコードには関連レコード一覧で自分に紐づくインシデントレコードの一覧を表示させようと思っていました。

ところがインシデントレコードの☆障害レコード番号は文字列フィールドのため、障害レコード番号と関連レコード一覧で紐づける事ができなくなってしまいました。

障害レコードに文字列フィールドを作成し、自分のレコード番号をコピーさせるコードを作成しようかと思ったのですがうまくいきません。

なにか解決策があればご教授いただけますでしょうか?

yui様

障害管理簿に、関連レコードでインシデント管理簿のフィールドを表示させたいと言うことでよろしいでしょうか。

最速の解決手段は自動登録されるレコード番号をinci-2019のような形ではなく2019のような数値にしてしまうことですが、

管理上問題あるということでしょうか。

その場合はinc-の形式と、もう一つレコード番号を用意するフィールドを追加して数値のみ登録するのではいかがですか?

申し訳ないのですがアプリ構成がちょっと複雑で頭が整理できておりません…。

Teru

すっかりご面倒をおかけしてすみません。

>障害管理簿に、関連レコードでインシデント管理簿のフィールドを表示させたいと言うことでよろしいでしょうか。

→おっしゃるとおりです。ひとつの障害管理レコードに複数のインシデントレコードが紐ついている状態です。

昨日来の「やりたいこと」でTeru様がまとめてくださったように頭を整理してみました。

目的:客先の障害管理の業務改善です。

<インシデント検知>

>①問い合わせ管理簿からアクションを実行
>②インシデント管理簿で新規レコード作成
>③インシデント管理簿を保存したタイミングでインシデント管理簿のレコード番号が問い合わせ管理簿に保存される。

※ここまではおかげさまで完成しました。

<障害判定>

④インシデント管理簿からアクションを実行

⑤障害管理簿で新規レコード追加

⑥障害管理簿を保存したタイミングで障害管理簿のレコード番号(shogai-xx)がインシデント管理簿に保存される。

※ここも昨夜、完成しました。

 

⑦障害復旧までに同じ①→③が多発した場合、②’ 達には⑥の「障害管理簿のレコード番号(shogai-xx)」をコピーする(手入力)

⑧当該障害に関連するインシデントの一覧を関連レコードで確認する。

※⑧でつまづいている次第です。

障害レコード番号と⑦のレコード番号達は見た目同じ番号(アプリコード付)ですが⑦は文字列なので関連つけられないため、

また右往左往四苦八苦しております。

 

yui

なるほど。詳細にありがとうございます。
関連付けだけを優先して考えれば、⑦の手動コピーを数値フィールドにxx部分だけ入れる、で解決しそうな気がしてしまいますが、
別の方法の方がよさそうですか?

 

Teru様

お返事ありがとうございます。

そうですね。関連付けるだけならレコード番号(数字)だけでいいのですが・・・

リンクで当該障害レコードにすぐに飛べるアプリコードがやっぱり捨てられなくって・・(欲深ですみません)

障害レコード番号(アプリコード付)を文字列フィールドに代入することはできませんか?

(実は本日、kintoneのDevCampにCamp inしてます。全力で特訓中です)

yui様

お世話になっております。承知しました。

数点確認させてください。

■アプリ構成

・問い合わせ管理簿

・インシデント管理簿

・障害管理簿

■運用

①問い合わせ管理簿(toiNo-01)から「アクション」でインシデント管理簿(inci-01)を作成。(1:1の関係)

②インシデント管理簿(inci-01)から「アクション」で障害管理簿(shogai-01)を作成。(1:1の関係)

③その後、同じ問い合わせ管理簿(toiNo-01)から複数のインシデント管理簿(inci-02、inci-03…)が発生した場合

インシデント管理簿(inci-02,inci-03)には一括管理ができるように障害管理簿(shogai-01)のレコード番号を手動コピー。

この時点で障害管理簿とインシデント管理簿は1:nの関係に。

④そして障害管理簿(shogai-01)を開くと関連するインシデント管理簿が表示される。

※ここでshogai-01をキーとして関連レコードの表示を試みるが、数値フィールドでないがために関連付けられない、

という認識でよろしいでしょうか。

理解が間違っていたら以下のコードは使い物になりませんので、ご指摘いただければと思います。

 

上記内容でお間違いなければ、下記のコードで解決するかもしれません。

■やりたいこと

①インシデント管理簿に手動入力したタイミング(編集または新規作成を保存したタイミング)

②障害管理簿のレコード番号が保存されているフィールドからshogai-xxを取得し、 

③xx部分だけを取り出して数値フィールドに保存する。

■コード

kintone.events.on([“app.record.edit.submit”,“app.record.create.submimt”], function(event) {

var record = event.record;
var shogaiNo = record.(障害管理簿のレコード番号が保存されているフィールドコード).value;
var related = record.(障害管理簿数値のみを保存するフィールドコード).value;
var shogaiOnlyNo = parseInt(shogaiNo.slice(7));

related = shogaiOnlyNo;

return event;
});

})();

DevCampいいですね!私も参加してみたいです!

Teru様

Teru様がDevCampに参加ですか?

隊長としてですか?軍曹ですか?笑

またしても、やりたいことをまとめていただき、コードまでいただいて、本当に恐れ入ります。

今日はこのアプリ達を(仮縫い状態を了承の上で)実際にお使いいただくお客様とサポートデスクや保守運用担当者にデモと説明をしてきました。

(みなさん、不安そうでした。説明している私が一番不安でした。。)

帰社して早速、いただいたコードを使わせていただきました。

 (「parseInt」って調べたら何気に凄いですね。JavaScriptにはいろんな伏兵?がいるんですね)

で、本題です。

これまで作ってきた各イベントでやりたいこと(コード)を混ぜて入れているjsファイルの途中に、今回のコードを追加したのですが、何も起こらず・・

consoleを↓のように見たらたくさん怒られていました。


show.js:252 kintone.events.onによるapp.record.detail.showの登録は、同期的に行ってください。非同期に登録すると、イベントハンドラーが実行されない場合があります。

show.js:252 kintone.events.onによるapp.record.create.showの登録は、同期的に行ってください。非同期に登録すると、イベントハンドラーが実行されない場合があります。

show.js:252 kintone.events.onによるapp.record.edit.showの登録は、同期的に行ってください。非同期に登録すると、イベントハンドラーが実行されない場合があります。


挿入位置が悪かったのかと、移動してみたのですが変わりません。

当該jsファイルで、今回の"app.record.edit.submit","app.record.create.submimt"以外に指定しているイベントは

app.record.create.show
app.record.create.submit.success

になります。

どうもjsの作法も間違えているようなのですが、イベントを指定する順番などあるのでしょうか?

 

 

yui様

軍曹…笑

私も上司に説明するときはエラーが起きないか不安で仕方ありませんから、それが客先ともなると計り知れない不安でしょう…。

 

どうやら他のコードやイベントと競合しているようです。

原因特定のためにも、一度お渡ししたコードだけで動くかをお試しいただけますでしょうか。