新規投稿
フォローする

関連レコード一覧が消える

お世話になります。

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しなければ関連レコードが表示されるようなのですが、編集不可と関連レコードを両立させることはできないのでしょうか?

宜しくお願い致します。

0

7件のコメント

Avatar
武井 琢治


takasakaiさん

 

試してみたところ、以下のようになりましたので、

少なくとも、編集不可と関連レコードの両立ができないということはなさそうです。

 

何か別の箇所に問題があるかもしれません。

参照レコードの条件としているフィールドのデータが動的に変わる?などですかね。

0
Avatar
takasakai

武井様

ご回答ありがとうございます。

アプリAのフィールドにレコード番号を置いていることを記載しておりませんでした。

レコード番号を削除したところ、検証して頂いたように関連レコードは表示されました。

>参照レコードの条件としているフィールドのデータが動的に変わる?などですかね。

レコード番号は動的に変わらないはずですが、フィールドに置くことでこちらに該当してしまうのでしょうか。

0
Avatar
武井 琢治

takasakaiさん

 

なるほど、おっしゃるとおり確かに参照すべきデータがあるにもかかわらず以下のようになりました

これは動的なデータ云々ではなく、

kintoneの構造的問題である可能性がありそうです。

(公式ヘルプにもこのような仕様であるとは書いていないため)

 

私の方でも気になるので、

サイボウズ社に問い合わせてみたいと思います。

 

何か進展があればこちらでお知らせいたします。

2
Avatar
takasakai

武井様

ありがとうございます。

一旦、編集画面の関連レコード一覧は必須ではないようなのでこのままにしておきます。

引き続きよろしくお願い致します。

0
Avatar
kazuo urata

 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)結果は次の通りです。        

*** ちなみに、参照先アプリは、こんな感じです。

 

1
Avatar
武井 琢治

takasakaiさん

 

先ほどサイボウズ社より連絡がありました。

 

やはり本件につきましては、

レコード編集画面表示イベント内において、

イベントオブジェクトのリターンを行った場合に発生する未知の不具合であるとのことでした。

 

また、本不具合の回避策や改修時期もお伝えできないという回答でした。

 

従いまして、本不具合については公式の対応があるまではユーザーが自主的になにがしかの対策を打たねばならないようです。

 

根本的な解決策としては、

  • レコード番号を配置しない(レコード番号表示が不要なら)
  • フィールドをdisabledにしない(disabledが不要なら)

辺りになるでしょう。

 

次善策としては、kazuo urataさんのおっしゃるような方法で、

この不具合を回避するためのフィールドやコードを追加することです。

 

また、開発環境によってはフィールドが追加できないこともあるかと思いますので、

もう一つの手法としては、

イベントをリターンせず、フィールドを直接disabledにする方法です。

 

 (function() { 
"use strict";
kintone.events.on("app.record.edit.show", function(event) {
$("対象フィールド").attr("disabled", "disabled");
});
})();

以上のようなコードで、disabledしつつ関連レコードを見ることはできました。

ただし、イベント内でイベントをリターンしないと、他のカスタマイズに影響を及ぼす可能性があるため、

他にカスタマイズを検討している場合は注意を要します。

これはイベントを使用せずにdisabledにするなどで回避できます。

1
Avatar
takasakai

urata様

具体的な対応策をありがとうございます。

関連レコードの条件はレコード番号のままでも、
レコード番号フィールドを削除して、数値フィールドにJSでレコードIDを入れて表示用にする
といった方法でもいけそうですね。

ただ、詳細画面でもレコード番号の表示と関連レコードの表示が必要なので、
どちらの方法でもcreate.submit.successでレコードIDをPUTする必要がありそうです。

 

武井様

未知の不具合でしたか...。

今後のアップデートに期待します。

>イベントをリターンせず、フィールドを直接disabledにする方法です。

jQueryたまに使っていますがこの方法は思いつきませんでした。

今回returnしなければならないものは今のところdisabledのみなのでこれも使えそうですね。

 

この度はご親切にありがとうございました。

今後ともよろしくお願い致します。

0
サインインしてコメントを残してください。