kintone.Promise.all([kintone.Promise.all([Properties]) ])が処理中断したかのような問題現象

度々 お世話になります。

今般、”Easy Search Plugin”という簡易検索プラグインを使おうとして、kintone.Promise.allの不具合らしき現象に遭遇しました。

 

つきましては、私の問題の原因推定と、修正内容の妥当性、あるいは「kintone.promiseの不具合修正依頼の仕方」について、アドバイス頂ければ、幸いです。

 


kintone.Promise.all([kintone.Promiseのリスト])の用例は、後段のURLにありますが、その湯用が”Easy Search Plugin”の中でも使われています。
2018年頃に作られた”Easy Search Plugin”は、多分 当初は正常動作していたのでしょうが、いつの間にか kintone.Promise.all辺りで”Easy Search Plugin”が誤動作するようになっています。

<”Easy Search Plugin”の問題現象>
設定画面(CONFIG.JS)で、複数個のsabtable中項目と関連レコード中の項目とを”簡単検索”の対象に含めるようにし、
一覧画面(DESKTOP.JS)で、検索キーワードを指定すると、”簡単検索”の対象に設定していた項目の一部がQUERYに反映されなかった。

<”Easy Search Plugin”の問題の原因>kintone.Promise.allの不具合
下記コード片中の★★印のkintone.Promise.all([kintone.Promise.all([Properties]) ])の箇所で、promiseの全件完了を期待しているにも関わらず、最初の幾つかのpromiseが実行されて処理が中断し、queryに反映されるべき条件が欠落している。

const Promise = kintone.Promise;
中略
for (const { code, type, subTable, referenceTable } of config.fields) {
const fieldCode = referenceTable ? `${referenceTable.code}.${code}` : code;
const appId = referenceTable ? referenceTable.app : APP_ID;

const promise = Promise.all([getProperties(APP_ID), getProperties(appId)])★
.then(([thisProperties, properties]) => {
中略 ---- このループ中の処理が、設定された”簡単検索”の対象をKINTONEのQUERYに反映している
promises.push(promise);
}

Promise.all(promises) ★★
.then(() => {

const url = `?view=${event.viewId}&query=${encodeURIComponent(query.query())}`
+ `&keyword=${encodeURIComponent(keyword)}${location.hash}`;
}
」

 

<参考情報>

      「kintone.Promiseを避け、config.fields.optionsを設定段階に取得

 

<原因究明を困難にしている状況>
cybose社のサポート対象外となっている「kintoneのpluginの問題」やwebpackのバージョンやlib/js/polyfill.min.jsと、「kintone APIであるkintone.promiseの問題」との問題の切り分けが困難。

 

小瀬さん

こんにちは。

 

私の環境で同様のプラグイン「kintone-easy-search」v0.1.2(最新)を入れてみましたが問題なく動作しました。

 

掲載のコードは「kintone-easy-search」のdesktop.js内の一部でしょうか。

そちらのプラグインの内部を拝見しましたが、コードが異なるように思います。

例えば「const Promise = kintone.Promise;」が、プラグインでは「var Promise = kintone.Promise;」でした。

 

小瀬さん、またはユーザーさんが意図的に修正をされたものであれば、その修正箇所に原因があるかもしれません。

切り分けのため、プラグイン本体を再度入れ直してみていかがでしょう。

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

>掲載のコードは「kintone-easy-search」のdesktop.js内の一部でしょうか。

はい。 主文に掲載したコードは、tonio0720版kintone-easy-searchのgithubに在ったソースコードの抜粋です。

それは、webPackとbabel-loaderで トランスパイルされる前のdesotop.jsのソースコードで、

例えば、下記の様な 単純なソースコードですら、トランスパイルされると、minifize機能で、難読化され、処理内容の理解を妨げる、バイナリ的なコードになります。

多分、koichiさんが ご覧になったのは、kintone実行環境向けに頒布されているプラグインのzipファイルを解凍された方のdesotop.js(処理内容の理解を妨げるバイナリ的なコード)でしょう。

トランスパイル前

const config = kintone.plugin.app.getConfig(PLUGIN_ID);

config.fields = config.fields ? JSON.parse(config.fields) : []; // 3項演算子で、一旦文を終えている。

トランスパイル後、実行環境に頒布されるコード

var E=kintone.$PLUGIN_ID,B=kintone.plugin.app.getConfig(E);

B.fields=B.fields?JSON.parse(B.fields):[],kintone.events.on(“app.record.index.show”, ....カンマ演算子以降 長い1文が 延々と続いている..

このように 随分 コーディング内容が異なるdesktop.jsですが、githubとkintone-pluginからダウンロードできるプラグインとが、同一のプログラムであることは、原作者殿の「kintone かんたん検索 プラグインを作った話 - Qiita」から、両者にたどり着けることで 解ろうかと思います。

 

なお、冒頭の問題現象は、tonio0720版kintone-easy-searchでは 何度でも再現できますが、拙作の改修版コードでは 発生しません。

ですが、

「過去のバージョンのkintoneでは動作していたらしきtonio0720版kintone-easy-searchが、いつの間にか 動作しなくなった」

というコトの原因究明が不十分なので、

「今日 動作するであろう拙作の改修版コードもまた、来週あるいは来年 動作しなくなるかもしれない」

という懸念を 払拭できないので、この投稿で、原因究明と 根本対策の方策を お伺いしようとしています。

ーーーー

ところで、問題現象を再現できなかったと 言われていた時の、環境設定は、主文に示したような 発生条件を満たした環境になっていたのでしょうか? 「検索対象に、複数個の関連テーブルやsubtableを含める」となると、複数個のアプリも準備するとか、それなりに面倒ですが。、。、

>私の環境で同様のプラグイン「kintone-easy-search」v0.1.2(最新)を入れてみましたが問題なく動作しました。

小瀬さん

 

すみません、subtableを見落としておりました。これが問題ですね。

関連テーブルは検索できました。

 

以下のfind処理でsubtable内のフィールドが引っ掛からず

propがundefinedのために処理終了(return)されることが原因ではないでしょうか。

var prop = properties.find(function (prop) {
return prop.code === code && prop.type === type;
});

if (!prop) {
return;
}

オヤ?!!

「私の問題の原因推定」に対する 御指摘ですね。

 

「2018年頃に作られた”Easy Search Plugin”は、多分 当初は正常動作していたデグレート(kintone.Promiseの破壊的仕様変更)」

というのが 私の誤認識で、

「”Easy Search Plugin”リリース当初から、subtable内のフィールドの検索が出来ていなかった潜在不良」

だったという原因分析が正しかったということですね。

どうも、別件でも kintone.Promiseの非同期処理の連鎖が中断したかのような現象を観ていたので、「マタか? 今度こそ 尻尾を捕まえた!」と、早とちりしてしまった様です。

 


では、<修正内容の妥当性>について;

今般指摘されたdesktop.jsの問題コードの代替えコードは、config.js側にも元々在って、そのconfig.js側のコードを活かした拙作の改修版は、全体として正しく動作するようになったのかと思います。

画面定義情報の参照をdesktop.jsから削除したことにより、運用段階の利用者に"アプリ管理"権限が不要となったのも良かった、と思います。

 

そうした拙作の修正版は、原著作者さんのgithubリポジトリにpull リクエストしていますので、再検証の上で、何時か 再リリースされるでしょう。

その再検証や網羅的なテストを もう少し 促進できる算段は 無いものでしょうか?

「”Easy Search Plugin”リリース当初から、subtable内のフィールドの検索が出来ていなかった潜在不良」
>この可能性が高いと思います。

Git上では原著作者さんの更新が2018年で止まっているので、小瀬さんのpullをもとに修正版がリリースされる可能性は低いかもしれませんね。

kintone.promiseにしても、小瀬さんが懸念されるように今は動いても、将来的に仕様が変われば動かなくなる可能性はゼロではないと思います。
これは日々、APIのリリースノートを追って、地道に対応するしかないかなというのが私の見解です。

只、第三者に使ってもらうことで問題点に早く気づけるということもあると思います。
このdevnetやキンコミにナレッジという形で投稿いただき、第三者に意見を募るというのも一つの手と思います。

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