タイトルの通りで調べたところ、サンプルコードがみつかり、見様見真似で以下のようなコードを転送先のアプリに読み込んでみました。
しかし、アクションを実行し、転送先レコードを保存しても、転送元の連携用レコード番号は空のままです。原因が全く分からず。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;
});
});
})();
27件のコメント
お世話になっております。
コードを拝見したところ、
更新のキーとなっている"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様
こちらのコードでお試しいただけませんでしょうか。(丸々貼り付けていただけると助かります)
これで動作しない場合、フィールドコードを再度すべてチェックしていただけますでしょうか。
注意すべきポイントにコメントを入れておりますので再度ご確認ください。
宜しくお願いいたします。
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様
軍曹…笑
私も上司に説明するときはエラーが起きないか不安で仕方ありませんから、それが客先ともなると計り知れない不安でしょう…。
どうやら他のコードやイベントと競合しているようです。
原因特定のためにも、一度お渡ししたコードだけで動くかをお試しいただけますでしょうか。
Teru様
おはようございます。お世話になっております。
遅い時間にご対応いただいてすみません。早速試してみました!
障害番号(数値のみ)取得のコードを「障害番号(数値のみ)取得.js」に分割してみても結果は変わらずでしたので、
いっそ、プラグインのファイルを「障害番号(数値のみ)取得.js」のみにして試してみたのですが変わらずでした。
上記(競合?)エラーは、詳細画面を開いた時に表示されます(画面を開いただけで)。
この「障害番号(数値のみ)取得.js」を削除して、元の「連携元お問い合わせ管理番号取得.js」だけに戻したところ、正常に動作しました。
なんですか、探偵になったようで少し楽しくなってしまいました。が、犯人の目星どころか、犯行現場させ、さっぱりわかりません。
本当に何度も恐れ入りますが、捜査方針をご指示いただけないでしょうか?
(それにしても、サスペンス劇場のサブタイトルみたいに長いファイル名ですみません)
yui様
お世話になっております。返信が遅くなり失礼しました。
一度、コードをすべてお見せいただけますでしょうか。
(サブドメイン等は伏字にしてください)
最初は楽しいのですがね…原因がずっとわからないとイライラしてきます笑
Teru様
おはようございます。
貴重な睡眠時間まで潰させて本当に本当に恐縮です。
コードとConsoleのエラー画面をお送りします。
どうか、差しさわりのない範囲でフォローをお願いします。
↓こんな感じです。
Teru様
たびたび失礼します。
teru様からいただきましたコードを元に以下の方法も試してみました。
>①問い合わせ管理簿が新規作成、編集、保存 時
>②問い合わせ管理簿のレコード番号にアプリコード(shogai-)を付けて、文字列フィールドにコピー
>③問い合わせ管理簿の関連レコードで②の文字列フィールドとインシデント管理簿の障害番号(文字列)を関連させる
結果、
新規画面→保存では②に何も入りません。
これを編集画面で開くと②③とも成功します。
あれもこれもで恐縮ですがまずは取り急ぎご報告まで。
----------
(function() {
"use strict";
kintone.events.on(["app.record.edit.submit",
"app.record.edit.submit.success",
"app.record.create.submimt",
"app.record.create.submit.success",
"app.record.edit.show",
"app.record.index.edit.submit"], function(event) {
console.log('!!!!!!!!障害番号GET!!!!');
var record = event.record;
var shogaiNo = "shogai-" + record.$id.value;
record.レコード番号_文字列.value = shogaiNo;
// var shogaiOnlyNo = parseInt(shogaiNo.slice(7));
//related = shogaiNo;
console.log(record);
return event;
});
})();
yui様
お世話になります。いえ、仕事上夜型の生活なので昼扱いです笑
お気になさらず!
こちらのコードの実装ですが、レコード番号はsubmit.success(保存実行後)時に発番されるためエラーが発生します。
防ぐためには新規作成時と編集時でイベントを分けます。下記コードに書き換えてください。
(function() {
"use strict";
//レコード編集保存時にshogaiNoをレコード番号_文字列に保存
kintone.events.on(["app.record.edit.submit"], function(event) {
console.log('!!!!!!!!障害番号GET!!!!');
var record = event.record;
var shogaiNo = "shogai-" + record.$id.value;
record.レコード番号_文字列.value = shogaiNo;
console.log(record);
return event;
});
//レコード新規作成保存時にshogaiNoをレコード番号_文字列に保存
kintone.events.on(["app.record.create.submit.success"], function(event) {
var record = event.record;
var shogaiNo = "shogai-" + record.$id.value;
var recordId = record.$id.value;
//登録用API
var body = {
"app": 51, //アプリIDをセットしてください
"id": recordId,
"record": {
"レコード番号_文字列": {
"value": shogaiNo
}
}
};
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
return event;
});
})();
Teru様
ありがとうございました!!!
いただいたコードで試してみたところ、やりたい事がもうそのまんま実現しました。
本日、本番環境に移行の日でしたが間に合いました!
(サポートデスクの業務が終わってから作業に入ったのでこの時間になってしまいました)
kintoneは敷居が低くって、「自分にもできるかも!?」と大きな夢と錯覚をくれます。
わたしの大きな錯覚にTeru様を巻き込んでしまい本当に申し訳ありませんでした。
思い知りました。。。
でも、大変勉強になりました。
今後は「ねばまい」の方でも勉強させていただきます(ブックマークに追加しました。まだわたしにはずいぶん敷居が高いですが・・)
本当にありがとうございました。
取り急ぎお礼まで。
yui様
おおお!そんな大事な日だったとは…。よかったです!
いえ、私は自分の勉強にもなるので非常に助かりました。
ブックマークもありがとうございます。もし何か困ったことがあればTwitterや問い合わせフォームの方でご連絡いただければ対応できますので。
最初は躓くことが多いと思いますが、決して気落ちせずに頑張ってください。サポートできるところはさせていただければと思います。
こちらこそありがとうございました。
Teru様
ご返信ありがとうございます。
teru様にご協力いただいたアプリ達の本番でのテストとドキュメントの作成に追われていましたが、ひとつひとつ見直していくと、直したいところばかりです。
完了報告作業が終わったら、少し余裕ができるのでまたコツコツJavaScriptの勉強をします。
もう少しまともなご質問ができるように頑張ります!!
よろしくお願いします。