# functionをまたぐ？varで定義した内容の使用について

**URL:** <https://community.cybozu.dev/t/topic/4670>\
**Category:** kintone 開発相談\
**Created:** [2019 年 11 月 25 日午前 9:59 UTC](https://community.cybozu.dev/t/topic/4670 "2019-11-25T09:59:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1307](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account1307](https://community.cybozu.dev/u/Legacy_Account1307)\
**Post date:** [2019 年 11 月 25 日午前 9:59 UTC](https://community.cybozu.dev/t/topic/4670/1 "2019-11-25T09:59:24Z")

</div>

とんちんかんな質問でしたらすみません。

同じ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回入れさせるのは手間だし、間違えそうなので

①の時に入力した内容を使いたいと思っています。

他処理も入っていて長くなるのでコードは載せていませんが、

前後が無いと分からない場合はまた貼り付けますので、

何か確認点などあれば教えて頂ければと思います。

よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2017](https://avatars.discourse-cdn.com/v4/letter/l/f19dbf/32.png) [@Legacy\_Account2017](https://community.cybozu.dev/u/Legacy_Account2017)\
**Post date:** [2019 年 11 月 26 日午前 12:37 UTC](https://community.cybozu.dev/t/topic/4670/2 "2019-11-26T00:37:35Z")

</div>

こうしているけど、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;
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1307](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account1307](https://community.cybozu.dev/u/Legacy_Account1307)\
**Post date:** [2019 年 11 月 26 日午前 9:14 UTC](https://community.cybozu.dev/t/topic/4670/3 "2019-11-26T09:14:06Z")

</div>

PV様、またまたありがとうございます･･･

どうしても②の箇所で日付フィールドが空欄になってしまいます。

window.promptを②の上に持ってくると、①が空白・②は反映されるため、変数の定義がうまくいっていないのでしょうか？

以前別件で頂いたコードをいじくりまわしているので他の処理も入っていますが、現状以下のコードです。

&nbsp;

```
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;
}
);
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2017](https://avatars.discourse-cdn.com/v4/letter/l/f19dbf/32.png) [@Legacy\_Account2017](https://community.cybozu.dev/u/Legacy_Account2017)\
**Post date:** [2019 年 11 月 27 日午前 12:50 UTC](https://community.cybozu.dev/t/topic/4670/4 "2019-11-27T00:50:54Z")

</div>

貼っていただいたソースを見ると、

コピー処理が走るとき、ページがリロードされるため、変数が破棄されているようです。

その対策（画面間で変数を共有する場合）には、通常sessionStorageやlocalSotrage等を使用します。

&nbsp;

値をセットする例）

sessionStorage.setItem(‘kintone\_kaiyakubi’, str);&nbsp; &nbsp; &nbsp;// kintone\_kaiyakubiというキー名で、strの値を保存する。

値を取得する例）

sessionStorage.getItem(‘kintone\_kaiyakubi’);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// kintone\_kaiyakubiというキー名で保存していた値を取得する。

保存している値をすべてクリア)

sessionStorage.clear();

&nbsp;

あと、ソースの以下の場所は｛｝括弧で括らないと、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;
    } // ←@@@@@@@@@@ここ

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1307](https://avatars.discourse-cdn.com/v4/letter/l/47e85d/32.png) [@Legacy\_Account1307](https://community.cybozu.dev/u/Legacy_Account1307)\
**Post date:** [2019 年 11 月 27 日午前 5:15 UTC](https://community.cybozu.dev/t/topic/4670/5 "2019-11-27T05:15:41Z")

</div>

できました･･･ありがとうございます；０；感動です；０；

&nbsp;

最初に日付を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で呼び出そうとしてハマりかけました･･･

&nbsp;

もう1点ご指摘頂いた｛｝についてですが、return event; の後に、 }); で閉じました。

JSEditでカーソルを合わせると、対応する括弧にマーク？網掛け？が付くので、括弧の対応はそれで確認するようにしています！
