コードでのレコード再利用後、フィールドの値を変更したい。
過去の投稿を見て、ボタンを押すとレコード再利用は出来たんですが、
その後にフィールド内容を変更する書き方が見つけられません。
(function() {
“use strict”;
kintone.events.on(‘app.record.detail.show’, function(event) {
var record = event.record;
// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement(‘button’);
mySpaceFieldButton.id = ‘my_space_field_button’;
mySpaceFieldButton.innerText = ‘解約処理を始める’;
mySpaceFieldButton.onclick = function () {
//レコード再利用
var copy = document.getElementsByClassName(‘gaia-argoui-app-menu-copy gaia-argoui-app-menu’);
copy[0].setAttribute(“id”,“copy”);
document.getElementById(“copy”).click();
};
kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);
});
})();
欲を言えば、
マンションの顧客管理で、契約後にキャンセルが出た場合、
①契約時のレコードはそのまま保持し、
②1のコピー後、契約時の数値にすべてマイナスを付けて、
③さらに1をコピーして、顧客情報を空白にしたレコード作成
(空室として次の顧客情報を管理する為)
まで、行いたいと思っています。
イメージとしてはレコード再利用の流れを3回やって、
間でマイナスつけるとか、いらないフィールドを消せばいいかと考えていましたが、なかなかうまくいきません・・・
始めたばかりのコピペばかりの私では難しい内容かとは思いますが、
何卒お力を貸していただければと思います。
よろしくお願いします。
こんな感じでしょうか。
(function () {
"use strict";
kintone.events.on('app.record.detail.show', function (event) {
// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement('button');
mySpaceFieldButton.id = 'my_space_field_button';
mySpaceFieldButton.innerText = '解約処理を始める';
mySpaceFieldButton.onclick = function () {
// マイナスレコードを作る処理開始
// 元のレコードをコピー
var record = JSON.parse(JSON.stringify(event.record));
// 元のレコードから、レコード番号は引き継がないのでクリア
delete record.レコード番号;
// 各数値が入っていたら値をマイナスにする。[]の中に、数値の"フィールドコード"を設定
['数値1', '数値2'].forEach(function (fieldCode) {
if (record[fieldCode]) {
record[fieldCode].value = parseInt(record[fieldCode].value) * -1;
}
});
// kintoneにマイナスのレコードを追加
kintone.api(kintone.api.url('/k/v1/record', true), 'POST', { app: kintone.app.getId(), record: record }).then(function () {
// 解約処理なのか、通常のコピーなのかの判断のためのフラグセット
sessionStorage.setItem('kintone_kaiyaku', "1");
//レコード再利用
var copy = document.getElementsByClassName('gaia-argoui-app-menu-copy gaia-argoui-app-menu');
copy[0].setAttribute("id", "copy");
document.getElementById("copy").click();
}).catch(function (err) {
alert('何らかの理由でマイナスレコードの作成に失敗');
});
};
kintone.app.record.getSpaceElement('my_space_field').appendChild(mySpaceFieldButton);
});
kintone.events.on('app.record.create.show', function (event) {
if (event.reuse && sessionStorage.getItem('kintone_kaiyaku') === "1")
// 解約処理のフラグクリア
sessionStorage.clear();
// 解約処理の場合、画面の顧客情報の空白にする処理。[]の中に、顧客情報の"フィールドコード"を設定
var record = event.record;
['顧客情報1', '顧客情報2'].forEach(function (fieldCode) {
record[fieldCode].value = "";
});
return event;
}
});
})();
ありがとうございます!
当方kintoneもプログラミングも初めてで、まだ全部理解できていませんが、
ざっと見ただけでも色々な場面で応用できそうな書き方で勉強になります・・・
今日はこれを解読して希望の処理ができるよう頑張ってみます!
もしまた何かあればお力を貸していただければと思います・・・;0;
頂いたコードで記載した内容はバッチリ動いたんですが、
処理を追加して良いでしょうか・・・できるやろ!と思ってたのと、ここまで答えて頂けると思っておらず書いていない部分がありました。
もしお時間あれば教えて頂けると助かります・・・
①契約時のレコードはそのまま保持し、
★→空白にしたいフィールドがある(今回は日付)
コピーの下に record[‘引渡日’] = []; を挿入してみましたがそんなに単純な話ではなかった・・・
②1のコピー後、契約時の数値にすべてマイナスを付けて、
③さらに1をコピーして、顧客情報を空白にしたレコード作成
(空室として次の顧客情報を管理する為)
★④違約金を取る/取らない処理を入れたい
取らない→終了 取る→さらに1をコピーして、特定のフィールドを空白に(これは3のコードをコピペすれば良いかなと思ってます)
取るときの処理の理想として考えているのは、ポップアップで入力したい箇所だけ表示され、入力した内容がフィールドに代入される形です。
調べながらpromptとかかなと思っていますが、その手前でつまずいています
★ルックアップフィールドがある場合、処理が中断されてしまう→alert(‘何らかの理由でマイナスレコードの作成に失敗’);が出る
物件マスタという形でルックアップフィールドを作成しているので、フィールドを外すことはできません。
何卒よろしくお願いいたします。
全部私が作成してもあれなので、作成に必要そうな参考情報を載せておきます。
★→空白にしたいフィールドがある(今回は日付)
現在のレコードを更新するには、レコードの更新APIで更新する必要があります。
http://chobi-tech.com/kintone-api-matome/
★④違約金を取る/取らない処理を入れたい
とる取らないの確認 confirm → ポップアップ prompt で問題ないかと思われます。
★ルックアップフィールドがある場合、処理が中断されてしまう→alert(‘何らかの理由でマイナスレコードの作成に失敗’);が出る
errの変数に、エラーの原因が入っていると思いますので、
alert(‘何らかの理由でマイナスレコードの作成に失敗’); → console.log(err);
にしてどのようなエラーが出ているか確認してみてください。
【動かない?そんな時はデバッグをしてみよう!入門編】
https://developer.cybozu.io/hc/ja/articles/207613916-%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84-%E3%81%9D%E3%82%93%E3%81%AA%E6%99%82%E3%81%AF%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-%E5%85%A5%E9%96%80%E7%B7%A8