お世話になります。
2つのアプリA, Bがあり、Aに関連レコード一覧を下記の設定で置いています。
参照先:B
条件:Aのレコード番号=Bの数値フィールド
また、Aに編集不可にしたいフィールドがあるため、下記のJSを入れました。
(function() {
"use strict";
kintone.events.on("app.record.edit.show", function(event) {
var record = event.record;
record["編集不可のフィールド"]["disabled"] = true;
return event;
});
})();
この状態でAのアプリを開くと、詳細画面では関連レコードが正しく表示されるのですが、編集画面に移ると関連レコードは一瞬表示された後、「参照するレコードがありません。」となります。
return eventしなければ関連レコードが表示されるようなのですが、編集不可と関連レコードを両立させることはできないのでしょうか?
宜しくお願い致します。
7件のコメント
takasakaiさん
試してみたところ、以下のようになりましたので、
少なくとも、編集不可と関連レコードの両立ができないということはなさそうです。
何か別の箇所に問題があるかもしれません。
参照レコードの条件としているフィールドのデータが動的に変わる?などですかね。
武井様
ご回答ありがとうございます。
アプリAのフィールドにレコード番号を置いていることを記載しておりませんでした。
レコード番号を削除したところ、検証して頂いたように関連レコードは表示されました。
>参照レコードの条件としているフィールドのデータが動的に変わる?などですかね。
レコード番号は動的に変わらないはずですが、フィールドに置くことでこちらに該当してしまうのでしょうか。
takasakaiさん
なるほど、おっしゃるとおり確かに参照すべきデータがあるにもかかわらず以下のようになりました
これは動的なデータ云々ではなく、
kintoneの構造的問題である可能性がありそうです。
(公式ヘルプにもこのような仕様であるとは書いていないため)
私の方でも気になるので、
サイボウズ社に問い合わせてみたいと思います。
何か進展があればこちらでお知らせいたします。
武井様
ありがとうございます。
一旦、編集画面の関連レコード一覧は必須ではないようなのでこのままにしておきます。
引き続きよろしくお願い致します。
takasakai さん、

>この状態でAのアプリを開くと、詳細画面では関連レコードが正しく表示されるのですが、
>編集画面に移ると関連レコードは一瞬表示された後、「参照するレコードがありません。」となります。
>>アプリAのフィールドにレコード番号を置いていることを記載しておりませんでした。
>>レコード番号を削除したところ、検証して頂いたように関連レコードは表示されました。
ご指摘の、「参照するレコードがありません。」となることを確認できました。
いろいろ試してみたのですが、
どうも、「レコード番号(自動入力)」を条件として、「関連レコード一覧」の「表示するフィールド」データを取得する場合、
同一フォームに、「編集不可フィールド」があると、ご指摘のように、
→関連レコードは一瞬表示された後、「参照するレコードがありません。」と、なるようです。
これは、たぶん、「レコード番号」フィールドが「(自動入力)」なので、
「関連レコード一覧」の「表示するフィールド」データを取得するとき、
その瞬間に、「レコード番号」が認識されていないためではないかと、想像します。
そこで、
編集画面と、関連レコード表示を両立させるために、次のようにしてみました。
※要するに、「レコード番号(自動入力)」を、「関連レコード一覧」の条件としないためです。
(1)レコード番号を保持するフィールドとして、数値フィールドを別におきます。仮に、フィールドコードを「レコード番号コピー」とします。
(2)jsコードに、「レコード番号(自動入力)」を「レコード番号コピー」に書き込む処理を加えます。
(function() {
"use strict";
kintone.events.on("app.record.edit.show", function(event) {
var record = event.record;
record["編集不可のフィールド"]["disabled"] = true;
var rno =record["レコード番号"]["value"]; //
record["レコード番号コピー"]["value"] = rno; //
return event;
});
})();
(3)当方アプリでは、「関連レコード一覧」の条件を次のようにしました。
"レコード番号コピー" = "数値B"
(4)結果は次の通りです。
*** ちなみに、参照先アプリは、こんな感じです。
takasakaiさん
先ほどサイボウズ社より連絡がありました。
やはり本件につきましては、
レコード編集画面表示イベント内において、
イベントオブジェクトのリターンを行った場合に発生する未知の不具合であるとのことでした。
また、本不具合の回避策や改修時期もお伝えできないという回答でした。
従いまして、本不具合については公式の対応があるまではユーザーが自主的になにがしかの対策を打たねばならないようです。
根本的な解決策としては、
辺りになるでしょう。
次善策としては、kazuo urataさんのおっしゃるような方法で、
この不具合を回避するためのフィールドやコードを追加することです。
また、開発環境によってはフィールドが追加できないこともあるかと思いますので、
もう一つの手法としては、
イベントをリターンせず、フィールドを直接disabledにする方法です。
以上のようなコードで、disabledしつつ関連レコードを見ることはできました。
ただし、イベント内でイベントをリターンしないと、他のカスタマイズに影響を及ぼす可能性があるため、
他にカスタマイズを検討している場合は注意を要します。
これはイベントを使用せずにdisabledにするなどで回避できます。
urata様
具体的な対応策をありがとうございます。
関連レコードの条件はレコード番号のままでも、
レコード番号フィールドを削除して、数値フィールドにJSでレコードIDを入れて表示用にする
といった方法でもいけそうですね。
ただ、詳細画面でもレコード番号の表示と関連レコードの表示が必要なので、
どちらの方法でもcreate.submit.successでレコードIDをPUTする必要がありそうです。
武井様
未知の不具合でしたか...。
今後のアップデートに期待します。
>イベントをリターンせず、フィールドを直接disabledにする方法です。
jQueryたまに使っていますがこの方法は思いつきませんでした。
今回returnしなければならないものは今のところdisabledのみなのでこれも使えそうですね。
この度はご親切にありがとうございました。
今後ともよろしくお願い致します。