kintone

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

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

今日の質問はこちら!

教えていただきたいことがございます。
 
文字列(1行)フィールドに、そのレコードのURLが表示されるようにしたいのですが、自動計算?で、どのような形式にすればよいか教えてください。
 
たとえばですが、文字列(1行)フィールドに”https://サブドメイン/k/アプリID/show#record=”&[番号]と設定すると、&の前にあるURLと[番号]フィールドに表示されている数字が合体できるのですが、レコード番号(自動入力)だと形式エラーとなってしまいます。

cybozu developer network

標準機能の限界

kintoneには文字列の結合や数値の計算などを行う自動計算機能がある。
しかし、今回のようにレコード番号は指定することはできない。

カスタマイズで解決しよう

ここで登場、javascriptだ。
新規作成時と編集保存時のイベントでリンクとレコード番号を結合してしまえばよい。

(function() {
“use strict”;
var events = [‘app.record.edit.submit’,’app.record.create.submit’];
kintone.events.on(events, function(event) {
var record = event.record;
record.リンク.value = “https://サブドメイン.cybozu.com/k/アプリID/show#record=” + record.レコード番号.value;
return event;
});
})();

さあできたぞ~~~。

あれ?リンクが生成されない…。
編集してぽちっと

できる…なぜだ!?

レコード番号発番のタイミング

いろいろ調べてみると、レコード番号が発番されるのは
保存時ではなく、保存成功時であることがわかった。
保存成功時は当然ながらレコードの値を変えられない!!

どうすりゃええねん?

あぁ、レコードを更新しちゃえばいいんだ。

発想を変えよう。
保存したらその時点でレコード番号をもらい、
それをもとにレコードを更新処理しちゃえばいいじゃない、という結論に達した。
ここでサクッと更新ができるのがkintoneUtility。便利すぎやろ~~~。

(function() {
“use strict”;
var events = [‘app.record.edit.submit.success’,’app.record.create.submit.success’];
kintone.events.on(events, function(event) {
var record = event.record;
var recordId = record.$id.value;
var update = {
リンク: {
value: “https://サブドメイン.cybozu.com/k/アプリID/show#record=” + record.レコード番号.value
},
};
//update by id
kintoneUtility.rest.putRecord({
app: 688,
id: recordId,
record: update,
isGuest: false
}).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
});
return event;});
})();