詳細画面に遷移したときに編集モードにしたい

詳細画面に遷移したときに編集モードにしたいです。
(編集ボタンを押さないで編集モードにしたい)

下記コードで実装したところ、実現はできましたが、
新規レコード登録時のみ、1回目に保存ボタンを押すと、
下記コードが実行され、編集モードになってしまいます。

新規登録時の保存ボタンを押したときにコード実行が回避されるようにすることは可能でしょうか。

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {

		var curURL = document.URL;
		if(!curURL.match(/tab=/)){
			location.replace(curURL + "&tab=none&mode=edit");
		}

    });

})();

お知恵をお借りしたく。宜しくお願いいたします。

@foopii さん

こんにちは、少しアイデアがあったので回答させていただきました。
新規レコード保存時にwindowオブジェクトに何かしら判別用の値を保存して判別できれば、新規レコードを追加後の遷移で詳細画面開いたのか、単純に詳細画面を開いたのか処理を分ける事ができるかなと思います。
windowオブジェクトの解説は下のリンクを参照ください。

@y_minamitani9534 さん
ご回答ありがとうございます。

app.record.create.submit
で一旦、windows.test = 1
のように定義し、
app.record.detail.show
で、
if(!curURL.match(/tab=/) & test != 1){
location.replace(curURL + “&tab=none&mode=edit”);
}

のような感じでしょうか?

@foopii さん

そうですね、create.submitでそのように定義してあげれば、実現可能だと思います。

↓こちらif文に一つ & が足りなかったので、追加だけしておきました。

if(!curURL.match(/tab=/) && test != 1){
location.replace(curURL + “&tab=none&mode=edit”);
}

@y_minamitani9534 さん
ご連絡ありがとうございます。

いま、app.record.create.submitとapp.record.detail.showで
jsファイルを分けてやってみましたが、

(function() {
    "use strict";
    kintone.events.on('app.record.create.submit', function(event) {
		windows.newflg = 1;
    });
})();

windows is not definedのエラーがでてしまいました。
こちらは何が問題なのでしょうか。
ご教授いただけますと幸いです。。

@y_minamitani9534 さん

ちなみに、2つめのjsファイルは下記になります。

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {
		var curURL = document.URL;
		if(!curURL.match(/tab=/) && newflg != 1){
			location.replace(curURL + "&tab=none&mode=edit");
		}
    });
})();

@foopii さん

windows is not definedのエラー

こちらはwindowsは何かわかりませんというエラーですね。

windows.newflg = 1;

こちらがwindowwindows になってしまっているからだと思います :sweat_drops:

@y_minamitani9534 さん
大変失礼いたしました。
windowに変更したら、該当箇所のエラーは消えました。
が、もともと想定していた、
「詳細画面を開いたときに、編集モードになる」というのも
出来なくなってしまいました・・・。
どこかおかしなコードの検討はつきますでしょうか。。
宜しくお願いいたします。

@foopii さん

windowオブジェクトにtest = 1が残ってしまっているためですね…
でしたら、新規レコード追加時のみ編集画面にいってほしくない(編集画面は大丈夫なのでしょうか…?)との事でしたので、2つ目のファイルのコードを以下に変更してみてはいかがでしょうか?

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {
		var curURL = document.URL;
		if(!curURL.match(/tab=/) && newflg != 1){
			location.replace(curURL + "&tab=none&mode=edit");
		}
        //↓以下を追加してみました。testをnullすれば問題ないはずです。
        window.test = null;
    });
})();

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

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {

		var curURL = document.URL;
		if(!curURL.match(/tab=/) && newflg != 1){
			location.replace(curURL + "&tab=none&mode=edit");
		}

    window.newflg = null;
    });

})();

こちらで試しましたが、変わらず・・・でした。

@foopii さん

こちらの環境で調べてみましたら、'use strict'モード(構文チェックが厳しいモード)を使っているので、if文で明示的に window.newflg != 1 としてあげる必要がありそうですね :sweat_drops:
そのままでするとエラーでていましたが、下記のように変えてあげることによってエラーが解消しました。

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {

		var curURL = document.URL;
		if(!curURL.match(/tab=/) && window.newflg != 1){
			location.replace(curURL + "&tab=none&mode=edit");
		}

        window.newflg = null;
    });

})();
1 Like

@y_minamitani9534 さん
ありがとうございます。

頂いた内容に修正してみましたが、やはりうまくいきませんでした・・・。

(function() {
    "use strict";

    kintone.events.on('app.record.detail.show', function(event) {

console.log(window.newflg);
		var curURL = document.URL;
		if(!curURL.match(/tab=/) && window.newflg != 1){
			location.replace(curURL + "&tab=none&mode=edit");
		}

    window.newflg = null;
    });

})();

console.log(window.newflg);を仕込んで値を確認しようと試みましたが、
こちらもundefinedのエラーが出てしまいます・・・。

@foopii さん

おそらくundefinedはエラーではないと思います :sweat_drops:
こちらの環境では問題なく詳細画面を開いたら編集画面に遷移して、新規レコード追加後の詳細画面では、編集画面に遷移しないという風になっているのですが…

一度コンソールのキャプチャいただいてもいいですか?

@y_minamitani9534 さん
遅くなり申し訳ございません。


こちら、添付いたします。
宜しくお願いいたします。

@foopii さん

undefinedでのエラーは、わからないですが一旦無視しててもよさそうです。(次のエラーが出ているため、今回のプログラムに影響がでていないと考えたため。)

newflgがわかりませんとエラーがでておりますが、window.newflgと指定されてますか?
プログラムに反映できてない可能性もあるのでもう一度確認してみてはいかがでしょうか?

@y_minamitani9534 さん
ご連絡ありがとうございます。

newflg がわかりませんとエラーがでておりますが、window.newflg と指定されてますか?
→こちらは私の記載ミスでした。大変失礼いたしました。

それと、他にも使用しているjsがあり、そちらを外したらとりあえず、詳細画面→編集画面にはいけました。
が、やはり新規登録の保存時にやはり編集画面に戻ってしまいました。。

@foopii さん
いえいえ、とんでもございません。

他に使用しているjsファイルっていうのは下記のコードの分も外されましたか?
下記のコードがないと新規レコード追加時にwondowオブジェクトにnewflgを定義できないと思いますので…

(function() {
    "use strict";
    kintone.events.on('app.record.create.submit', function(event) {
		windows.newflg = 1;
        return event;
    });
})();

@foopii さん

申し訳ないです、私勘違いしていたのですが、編集画面から詳細画面に遷移する際はwindowオブジェクトにリセット(reload処理)がかからないのですが、新規レコード追加画面から詳細画面に遷移する際は、reload処理が噛んでwindowオブジェクトがリセットされちゃうようです…

ちょっと不細工ですが、一つ文字列(1行)フィールドを作成しておいて、新規レコード追加時にフラグとして入力しておいて、詳細画面でフラグが立ってるのを検知したら REST APIでフラグを消してあげることぐらいですかね…ただこれにも問題があって、REST API更新後にreload処理を挟まないまま編集保存すると、画面が読み込まないと保存できない旨のエラーメッセージが出て保存できない問題があります。

状況として、新規レコード追加後に修正したいなどで作業者の方が編集ボタンをクリックして、レコードを編集して保存したときにエラーがかかります。
レコード新規追加後に、修正をすぐかけないというのであればこちら問題にはならないのですが…

1 Like

@y_minamitani9534 さん
ありがとうございます。
やはりそうですよね。
一旦、フィールドを設けてやってみます。
また不明点あれば質問させていただきます!

@foopii さん

私がいらぬ事を伝えたことで脱線してお時間を取らせてしまい申し訳ございません…
ちょっと考えてみたのですが、遷移前のURLを取得できれば問題クリアできるのでは?と考えて以下のコードで試してみたところできましたので、よければお使いください…

(() => {
    'use strict'

    kintone.events.on(['app.record.detail.show'], (event) => {
        //↓遷移前のURLを取得
        const ref = document.referrer;
        const appid = kintone.app.getId();

        //↓新規レコード追加時のURLを定義 このままでも使えるようにしております。
        const before_url = `${location.origin}/k/${appid}/edit`;

        //↓定義した新規レコード追加時のURLと遷移前のURLを比較 同じなら何もしない。
        if (ref != before_url) {
            var curURL = document.URL;
            if (!curURL.match(/tab=/) ) {
                location.replace(curURL + "&tab=none&mode=edit");
            }
        }

        return event;
    });
})()
2 Likes