とんちんかんな質問でしたらすみません。
同じjsファイル?に2個functionがあり、
①元レコードを契約日欄(入力済み)に解約日付を新しく入力(上書き)
②元レコードの色々な項目を空白にして、同じように契約日欄に解約日付を上書き
上記2点の解約日付を入力させる際に、入力者に分かりやすいようにwindow.pronmtで入力させています。
var str = window.prompt(“解約日を入力してください。入力形式YYYY-MM-DD(例:2019-10-01)”, “YYYY-MM-DD”);
record[‘契約日’].value = str;
上のvarで定義している内容は①に書いている内容で、そのまま②の中に引っ張ってくるよう record[‘契約日’].value = str; を書いてみたんですが、
特にエラーも出ず、他部分で書いている処理は動いているので、
スルーされている?ように見えています。
②の時も同じようにwindow.promptにて入力させれば、実現できるんですが、
同じ内容を2回入れさせるのは手間だし、間違えそうなので
①の時に入力した内容を使いたいと思っています。
他処理も入っていて長くなるのでコードは載せていませんが、
前後が無いと分からない場合はまた貼り付けますので、
何か確認点などあれば教えて頂ければと思います。
よろしくお願いいたします。
こうしているけど、2でも引き継ぎたいということですか?
function test1() {
var str = window.prompt("解約日を入力してください。入力形式YYYY-MM-DD(例:2019-10-01)", "YYYY-MM-DD");
record['契約日'].value = str;
}
function test2() {
record['契約日'].value = str;
}
2でも引き継ぎたい場合は、このように、外で変数を宣言してあげる必要があります。
var str;
function test1() {
str = window.prompt("解約日を入力してください。入力形式YYYY-MM-DD(例:2019-10-01)", "YYYY-MM-DD");
record['契約日'].value = str;
}
function test2() {
record['契約日'].value = str;
}
PV様、またまたありがとうございます・・・
どうしても②の箇所で日付フィールドが空欄になってしまいます。
window.promptを②の上に持ってくると、①が空白・②は反映されるため、変数の定義がうまくいっていないのでしょうか?
以前別件で頂いたコードをいじくりまわしているので他の処理も入っていますが、現状以下のコードです。
var str;
(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 () {
// 元レコードの引渡日をクリア(更新API)
var appId = kintone.app.getId();
var Id = kintone.app.record.getId();
var param = {
"app": appId,
"id": Id,
"record": {
"引渡日": {
"value": ""
},
}
};
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', param, function(resp) {
// 成功時の処理
console.log(resp);
}, function(error) {
// エラー時の処理
console.log(error);
});
// マイナスレコードを作る処理開始
// 元のレコードをコピー
var record = JSON.parse(JSON.stringify(event.record));
// 元のレコードから、レコード番号は引き継がないのでクリア
delete record.レコード番号;
// 各数値が入っていたら値をマイナスにする。[]の中に、数値の"フィールドコード"を設定
['設定金額', '売上金額'].forEach(function (fieldCode) {
if (record[fieldCode]) {
record[fieldCode].value = parseInt(record[fieldCode].value) * -1;
}
});
// 引渡日を空白にする(マイナスレコード)
['引渡日'].forEach(function (fieldCode) {
record[fieldCode].value = "";
});
str = window.prompt("解約日を入力してください。入力形式YYYY-MM-DD(例:2019-10-01)", "YYYY-MM-DD");
record['契約日'].value = str;
// 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('何らかの理由でマイナスレコードの作成に失敗');
console.log(err);
});
};
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;
// 解約処理の場合、画面の顧客情報の空白にする処理。[]の中に、顧客情報の"フィールドコード"を設定
['販社名', '名前','設定金額','引渡日','ルックアップ'].forEach(function (fieldCode) {
record[fieldCode].value = "";
});
record['ルックアップ']['lookup'] = 'CLEAR';
record['契約日']['value'] = str;
//window.alert('現在表示されている画面は、空室データです。次回の契約時に使用しますので、土地・建物など売買金額を確認後、[保存ボタン]を押してください。');
return event;
}
);
})();
貼っていただいたソースを見ると、
コピー処理が走るとき、ページがリロードされるため、変数が破棄されているようです。
その対策(画面間で変数を共有する場合)には、通常sessionStorageやlocalSotrage等を使用します。
値をセットする例)
sessionStorage.setItem(‘kintone_kaiyakubi’, str); // kintone_kaiyakubiというキー名で、strの値を保存する。
値を取得する例)
sessionStorage.getItem(‘kintone_kaiyakubi’); // kintone_kaiyakubiというキー名で保存していた値を取得する。
保存している値をすべてクリア)
sessionStorage.clear();
あと、ソースの以下の場所は{}括弧で括らないと、ifがtrueでもfalseでも、それ以降の処理が走ってしまいます。
(解約処理ではなく、通常の新規登録時も処理が走ってしまう。)
if (event.reuse && sessionStorage.getItem('kintone_kaiyaku') === "1") { // ←@@@@@@@@@@ここから
// 解約処理のフラグクリア
sessionStorage.clear();
var record = event.record;
// 解約処理の場合、画面の顧客情報の空白にする処理。[]の中に、顧客情報の"フィールドコード"を設定
['販社名', '名前', '設定金額', '引渡日', 'ルックアップ'].forEach(function (fieldCode) {
record[fieldCode].value = "";
});
record['ルックアップ']['lookup'] = 'CLEAR';
record['契約日']['value'] = str;
//window.alert('現在表示されている画面は、空室データです。次回の契約時に使用しますので、土地・建物など売買金額を確認後、[ 保存ボタン ]を押してください。');
return event;
} // ←@@@@@@@@@@ここ
できました・・・ありがとうございます;0;感動です;0;
最初に日付をstrへ定義して、そのstrをセットアイテムで保管して、
var str = window.prompt(“解約日を入力してください。入力形式YYYY-MM-DD(例:2019-10-01)”, “YYYY-MM-DD”);
sessionStorage.setItem(‘kintone_kaiyakubi’, str);
1個目の日付はstrで呼び出して、
record[‘契約日’].value = str;
2個目の日付はゲットアイテムで呼び出す
record[‘契約日’][‘value’] = sessionStorage.getItem(‘kintone_kaiyakubi’);
こんな形で思った通りの動作となりました!2個目もstrで呼び出そうとしてハマりかけました・・・
もう1点ご指摘頂いた{}についてですが、return event; の後に、 }); で閉じました。
JSEditでカーソルを合わせると、対応する括弧にマーク?網掛け?が付くので、括弧の対応はそれで確認するようにしています!