新規投稿
フォローする

kintoneのルックアップ先の一部を自動更新する方法伺い


下記のリンク先の「kintoneのルックアップ先を自動更新する3つの方法」という記事によれば、
”アプリ間レコード更新”で、kintoneのlookup元アプリのレコードが更新された時、
そのlooku先のアプリのレコードを、自動更新できるようですが、期待した動作とは成りませんでした。
https://www.comdec.jp/comdeclab/kintone-lookup-au/


試したことは、下記の様に3つのアプリを作って、”アプリ間レコード更新”するようなkintone rest api(put records)でルックアップ先の一部だけの自動更新を試みました。
★事前準備「
・会社マスタに、会社IDをレコード番号として、会社名や会社の本社の住所等を格納。
・事業所マスタに、事業所IDをレコード番号として、事業所名(再lookupが適切な情報)や、事業所に所属する社員の処遇(入所時のベース賃金の標準値みたいな再lookup不適切な情報)
・個人マスタに、個人IDをレコード番号とし、所属する事業所の事業所IDをlookupで転記した事業所名と事業所に所属する社員の処遇の初期値、
 および、所属する会社IDとlookupで転記した会社の情報

★上手くゆかなかった事項;

1⃣事業所マスタのレコード保存時に発動するイベント(app.record.edit.show)の延長で動作する処理として、
 事業所IDによるlookup先の一部だけを”アプリ間レコード更新”でコピーを指定したにも関わらず、最新の事業所情報が全く転記されなかった。
 しかも、put records APIは、黙って正常終了していた。
2⃣ 個人マスタの会社ID lookupフィールドで会社の情報を設定した後、
  該当する会社IDの会社マスタの情報を更新し、
  事業所マスタのレコードを更新した後、
  事業所マスタのレコード保存時に発動するイベント(app.record.edit.show)の延長で動作する処理の中で、
  会社IDによるlookupフィールドの会社IDフィールドだけをコピー指定し、さらに会社IDの値は変更しなかったにも関わらず、
  個人マスタのレコードをput recordsで更新したタイミングで あたかも再lookupされたかのように、lokupしていた会社情報の全てが更新された。

★期待していた挙動;

 put records APIのrecordプロパティで、個人マスタの事業所IDフィールドでルックアップして取得していた事業所の情報の一部だけ(事業所名)が最新情報に更新され、
 個人マスタの事業所IDフィールドに指定していても、put records APIのrecordプロパティに指定しなかったフィールドは更新されないコト。

 

とまあ、{kintone標準のlookup機能と、kintone標準ではない”アプリ間レコード更新”プラグイン}の組み合わせでは、期待していた動作となりませんでした。

多分{kintone標準のlookup機能と同等機能を実装する自作プラグインと、kintone標準ではない”アプリ間レコード更新”プラグイン}を両方自作すれば、期待する動作を実現できそうな気もしますが、「kintone標準のlookup機能と同等機能とは何ぞや?」を実装する前提の仕様を調べだすことソノモノが困難(kintoneの仕様変更の度に情報開示されないので保守も出来ない)です。

さて、何か旨い手段は無いものでしょうか?


<参考>
・Top > kintone > kintone API ドキュメント > kintone REST API > レコード >複数のレコードを更新する
 https://cybozu.dev/ja/kintone/docs/rest-api/records/update-records/
★Kintone rest APIの仕様の引用「
 テーブルを更新するとき
・制限事項
次のフィールドは、値を更新できません。
ルックアップ元からコピーされるフィールド
ステータス
カテゴリー
計算
作業者
作成者
作成日時
更新者
更新日時
自動計算が設定されている文字列 1 行フィールド

この仕様書記載内容によれば、上述の1⃣の問題現象の前半は理解できるのですが、
上述の1⃣の問題現象の後半の、「仕様書に”できません”と記載されていることをやってしまった時に、何もエラーメッセージが出なかった」のが不満です。

 

0

3件のコメント

Avatar
らいと

「kintoneのルックアップ先の一部を自動更新する方法」伺い

とのことですが、残念ながらkintone REST APIでは「できない」とおもいます。

また「エラーが出ないことが不満」とのことですが、
「できないことが仕様」だから「仕様通り動いている」なので「エラーは出ない」になります。
仕様だからしようがないですね。

「APIでルックアップ先の値を変更できるようにして欲しい」のような要望を「kintoneの改善に協力」に出して、
コミュニティにその共感を得られるような投稿をすると同じ要望出す人が増えるかもしれません。

0
Avatar
小瀬

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

>、残念ながらkintone REST APIでは「できない」とおもいます。

「kintoneのルックアップ先の自動更新」とか唄っているプラグインは ググると 見つかりはするので、

何か旨い方法が在るのを期待していたのですが、ヤッパリ難しいですよね。

--

とりあえず、「kintoneのルックアップ先の”一部”を自動更新」というのは諦めて、

”アプリ間レコード更新”するようなプラグインで、

lookup対象のフィールドが含まれている場合はlookup対象フィールドを全て揃えるように制限して、

「kintoneのルックアップ先の”全部”を自動更新=再lookup自動化」というのを試作してみました。

ググって見つかる「kintoneのルックアップ先の自動更新」とかいうプラグインで、こうゆう制限があることに言及がないのは、実は何時の間にか誤動作(=コピーをサボったのに黙っている)するようになっている 羊頭狗肉のプラグインなのでしょうか?

---

あるいは、「常に最新データの参照が保証される関連レコードフィールドが有るのに、

lookupフィールドのコピー先が最新情報であることを期待する」という設計の誤りだとすると、次の回避策が思いつきますが、ますます 開発事項が肥大化しそうです。

フォームの設計に遡って、上手い手は 無いものでしょうか?

<回避処置 案②>

・関連するアプリから その時々の最新の値を転記したいなら、lookupフィールドでは無く、関連レコード・フィールドにする。

→CSVダウンロードしたファイルの中に、lookupフィールドは含まれるが、関連レコードの値は含まれないので、

 「関連レコード自動取込&CSVファイルダウンロード機能」という また別のプラグインの開発が必要となる。

→CSVファイルダウンロードのように、時間を要する処理は、kintone標準機能でもバッチ処理機能になっています。

それに加えて関連レコードの自動取込処理を追加した処理は モット 時間を要すので、バッチ処理として実装するのが順当でしょう。 

クライアント端末にnode.jsベースのCSVダウンロード・コマンドを組み込ませようとすると、テレワークしている人の自宅まで出張して環境構築作業とか、、メンテナンスコストがかさみます。

そうすると、「関連レコード自動取込&CSVファイルダウンロード機能」には、バッチ処理が動作するような MS-Azure functionsのようなホスト・サーバまで必要となります。

物理的な移動も含む作業に比べれば安いとはいえ、「kintone環境内で閉じない 大げさな仕掛けまで要るのかーーー?」と、スポンサーを説き伏せるのも 大変そうです。

ーーーーー

もし、「kintoneの改善に協力」に要望を出すとしたら、

lookUp機能の仕様変更(「APIでルックアップ先の値を変更できるようにして欲しい」より、

「kintoneのCSVダウンロード機能に、関連レコード・フィールドの値を、subTableのフィールドの様にインクルードしてダウントード出来るオプションも追加して欲しい」

の方が、通りやすいでしょうか?

kintoneの既存の使い方に対して破壊的な仕様変更とならず、通りやすそうな 改善要望(案)を揉むのには、こうしたコミュニティは良いかもしれないですね。

 

0
Avatar
らいと

>もし、「kintoneの改善に協力」に要望を出すとしたら、。。。

そういうディスカッション、良いと思います。

(小瀬さんの主張がルックアップの仕様の件だと思っていたので、突然CSVの話になったので混乱しておりますが、)

改善してほしい点についてというのはディスカッションの良いテーマかも知れませんね。
・標準機能で搭載して欲しいの話だったらどちらかというとキンコミ
・APIの仕様についてだとcybozu developer network のコミュニティ

でするとよいかもしれません。

 

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