「1時間以内に作成されたレコードのみ一覧」が思ったより大変だった話


はじめに

  • キンコミにも書いたけどqiitaにも記事残します
  • 「1時間以内に作成されたレコードだけの一覧が欲しい」と言われてつくりました
  • 気楽に受けたけど思ったより大変でした

自己紹介です

  • イシイケンタロウです
  • 刷毛をつくっている会社の兼業情シスです
  • kintone認定資格は3つとも取得済です

  

  • その他にITストラテジストやシステム監査技術者などの国家資格をいくつか取得しています
  • kintoneのカスタマイズは社内向けのみで、プラグインは作ってません(作れません)

やりたいこと

formBridgeから登録されたレコードのうち、直近1時間以内に登録されたもののみをkViewerで表示したい

動くまでの経緯

  1. 「本日登録されたレコードのみ表示」は標準機能でできるが、時間単位だと現在日時との比較しかできない
  2. 作成日時に1時間加えた「1時間後」フィールドを作って、「1時間後 >= 現在日時」という絞り込み条件にすると、1時間以内に作成されたレコードだけが表示されるハズ
  3. 「1時間後」を計算フィールドで作成 → 作成日時 + 60 * 60
  4. 計算フィールドは現在日時と比較できない!
  5. 日時フィールドに作成日時の1時間後を入れる js を記述
  6. formBridgeからの登録なので app.record.create.submit が動かない!
  7. formBridge側で fb.events.form.mounted に書く → やっと動いた

formBridge実装

  fb.events.form.mounted = [ (state) => {

    // 1時間後日時の生成
    const now = new Date();
    const afterAnHour = new Date();
    afterAnHour.setHours(now.getHours() + 1);

    // 1時間後日時のセット
    state.record.afterAnHour.value = afterAnHour;

    return state;
  }];

kViewer実装

おわりに

  • 厳密にはフォームがマウントされた日時から1時間後なので、開きっぱなしのフォームから登録されたら1時間以内でも一覧から消えちゃう
  • もっと簡単なやり方あったら教えてください
  • そしていつものですが、塗装用ローラーもつくってます