複数条件に対応した表示をさせたい(解)

複数条件に対応した表示(この番号ならこの名前…)をさせたい からディスカッションを続行:

以前上記でご回答いただきまして助かりました。
自身の勉強のため解説を追記して再度返信と思ったらクローズとなっていたので新規で…

理解しきれていない部分もあり、おおざっぱなのですが解説内容あっておりますでしょうか
理解とためのトピックで大変申し訳ありませんがよろしくお願いいたします。

@y_minamitani9534 さま いつもありがとうございます。)

(() => {     //定数/変数名 = (引数) => { 処理 }; アロー関数、functionの代わり
                  //はじめようJavaScript第10回にある(メモ)

    "use strict";

    let revisionCheck = (event) => {
        return kintone.api(kintone.api.url('/k/v1/record', true), 'GET', {  //returnないと終わっちゃう 保存を待つ
          //kintone REST API リクエストを送信する レコードを取得 出来たら…
            app: kintone.app.getId(),  //アプリIDを取得
            id: kintone.app.record.getId(), //レコードIDを取得
        }).then((response) => {     //取得出来たら…          
            return event.record.$revision.value === response.record.$revision.value;  //さっきのやつを更新する?(リビジョン番号は更新履歴1なら新規、2以上が更新)
        });
    };

    let changeState = (editing) => {
        let result;
        switch (kintone.getLoginUser().id) {     //ログインユーザーID取得
            case '2':                   //2なら… 3なら…
                result = '佐藤さんが編集中!';
                break;                  //2がもしいたら終了するbreak
            case '3':
                result = '鈴木さんが編集中!';
                break;
            case '4':
                result = '高橋さんが編集中!';
                break;
            case '5':
                result = '小林さんが編集中!';
                break;
            case '6':
                result = '田中さんが編集中!';
                break;
            default:                  //なんでもなかったら
                result = '編集OK!';
                break;
        }
        return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', { //PUTでレコード内容を更新
            app: kintone.app.getId(),  //アプリIDを取得
            id: kintone.app.record.getId(), //レコードIDを取得
            record: {
                編集中: {
                    value: editing ? kintone.getLoginUser().id : 0  //IDが0なら誰フィールド編集OK
                },
                誰:{
                    value: editing ? result : '編集OK!'
                },
            }
        });
    }; 

    kintone.events.on(['app.record.detail.show',], (event) => {    //レコード詳細画面を表示したとき、ページ送り、保存、キャンセル
        revisionCheck(event).then(function (revisionMatch) {    //リビジョン番号がいい感じならリロード?
            if (!revisionMatch) location.reload();
        });
        return event;
    }); 
    
    kintone.events.on(['app.record.edit.show',], (event) => {    //レコード編集画面を表示したとき
        revisionCheck(event).then(function (revisionMatch) {          //リビジョン番号がいい感じならリロード?
            if (!revisionMatch) {
                location.reload(); return;
            } 
            if (Number(event.record.編集中.value)) {                 //編集中の番号と今のログインユーザーがイコールか
                if (event.record.編集中.value !== kintone.getLoginUser().id) {
                    alert('ほかのユーザーが編集中ですよ!'); history.back(); return;  //違ったらアラートを出す
                } document.getElementsByClassName('gaia-ui-actionmenu-cancel')[0].addEventListener('click', function () { //編集画面キャンセルをする 一致しなければしない クリックしたときに発動 
                    changeState(false).then(function () {
                        location.reload();
                    })
                }); window.addEventListener('beforeunload', function (e) {   //ページがアンロードされる直前に発動
                    changeState(false);
                }); window.addEventListener('unload', function (e) {       //ページがアンロードされるときに発動
                    changeState(false);
                });
            } else {
                changeState(true).then(function () {
                    location.reload();                    //リロードする
                });
            }
        });
        return event;
    }); 
    kintone.events.on(['app.record.edit.submit.success',], (event) =>{   //	レコード編集画面で【保存】をクリックし、サーバーの保存が成功したとき
        changeState(false);
        return event;
    });

    kintone.events.on(['app.record.detail.show',], (event) => {  //レコード詳細画面を表示したとき、ページ送り、保存、キャンセル
        revisionCheck(event).then((revisionMatch) => {          //その時リビジョン番号が一致したらリロード?
            if (!revisionMatch) location.reload();
        });
        return event;
    }); 
    
    kintone.events.on(['app.record.edit.submit.success',], (event) =>  { //	レコード編集画面で【保存】をクリックし、サーバーの保存が成功したとき
        changeState(false);
        return event;
    });

    
})();
1 Like

@sakanako さん

こんにちは、ほんとですね…以前のスレッドがいつの間にかクローズされちゃってましたね :sweat_drops:
何はともあれ、ご丁寧にフィードバックありがとうございます!

簡単ですが、私なりの解釈をお伝えさせて頂きますと、まずこちらの

let revisionCheck = (event) => {
        return kintone.api(kintone.api.url('/k/v1/record', true), 'GET', {  //returnないと終わっちゃう 保存を待つ
          //kintone REST API リクエストを送信する レコードを取得 出来たら…
            app: kintone.app.getId(),  //アプリIDを取得
            id: kintone.app.record.getId(), //レコードIDを取得
        }).then((response) => {     //取得出来たら…          
            return event.record.$revision.value === response.record.$revision.value;  //さっきのやつを更新する?(リビジョン番号は更新履歴1なら新規、2以上が更新)
        });
    };

revisionCheck関数が肝になっていると考えております。
こちらの関数がしていることを簡単に申し上げると、書かれている各イベントでも呼び出されているかと思われますが、各イベントで取得したリビジョンとREST APIで取得したリビジョンを見比べてリビジョンが同じ(true)ならリロードしないリビジョンが違う(false)ならリロードする事を作動させるためにboolean値のtrueかfalseでreturnしているようです。
ご提示してくださったコードのコメントを見ていると恐らく解釈が逆になっていて少し気になったので補足させて頂きました!

また、完全にお節介かもしれませんが、changState関数の中の「〇〇さんが編集中!」の部分で、kintoneを利用される方が増減された時などできるだけソースコードを変更しない方が今後の引継ぎ等でトラブル少なくなると思うので、従業員マスタ的なものを作成してそちらからREST APIかルックアップをうまく利用して人員の増減時にはマスタメンテナンスだけするようにされてもいいんじゃないかなと勝手ながら思いました。

以上、簡単ですがご回答させていただきました。
重ねになりますが、ご丁寧にフィードバックありがとうございました!

@y_minamitani9534

こちらこそいつもご丁寧に教えていただき助かります…!

確かに解釈が逆になっていたようです。
ありがとうございます。

メンテナンスまでありがとうございます。
確かに結構人が入れ替わるのでどうしようかな…と思っておりました。

いつもわかりやすいご回答ありがとうございます。
またなにかありましたら相談させてもらえたら幸甚です。

1 Like

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。