Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

kintone出来ないこと

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

うっかりすると忘れてしまいがちな、できないこと集

目次

ルックアップでチェックボックスをコピーする

「コピー元のフィールド」には、次のフィールドを指定できます。 文字列(1行) 数値 計算 ルックアップ リンク レコード番号 テーブルに設定したフィールドは指定できません。

ルックアップでチェンジイベントをとる

ルックアップフィールドそのものはkintone のチェンジイベントをとれない。

  kintone.events.on(
    [
      'app.record.create.change.ルックアップフィールド',
    ],
    function (event) {
      console.log(event);//実行されない
      return event;
    }
);

ルックアップでコピー先になるフィールドはチェンジイベントをとれる。ただし「コピー先フィールド」が複数ある場合、順番に更新されていく。そのため、更新途中のフィールドのチェンジイベントを拾ってしまうと、コピーが終わっていないフィールドが出てしまう。一番最後に更新されるフィールドを使うのが理想的。

  kintone.events.on(
    [
      'app.record.create.change.ルックアップコピー先(一行テキスト)',
],
    function (event) {
      console.log(event);//実行される
      return event;
    }
);

ただし、テキスト複数行などのフィールドはそもそもチェンジイベントをとれないので、コピー先が複数行になっているととれない。

  kintone.events.on(
    [
      'app.record.create.change.ルックアップコピー先(複数テキスト)',
],
    function (event) {
      console.log(event);//実行されない
      return event;
    }
);

DOMのチェンジイベントはたぶんとれそう。

「ルックアップフィールドによって値が入力されるフィールド」の値をREST APIで更新する

developer.cybozu.io

次のフィールドは、値を更新できません。
- ルックアップフィールドによって値が入力されるフィールド
- ステータス
- カテゴリー
- 計算
- 作業者
- 作成者
- 作成日時
- 更新者
- 更新日時
- 自動計算が設定されている文字列(1行)フィールド

グラフや表の値として、「レコードの集計値を使って算定した値」を使う

ちょっと説明しづらいのだが、kintoneのグラフの仕様は割と不自由がある。

たとえば、こんなレコードがあるとする。

選手名 ヒット数 打席数
選手A 10 1000
選手A 12 100

レコード1の打率は0.01。 レコード2の打率は0.12。

総合するとこの選手Aの打率は22/1100=0.02である。しかしkintoneではこのように「ヒット数合計/打席数合計」をグラフにしたり表にしたり、ということはできない。

単純な合計値なら、各レコードに「小計」という計算フィールドを設置してレコード内の合計値を出しておき、表などに「合計(小計)」とすることはできる。

モバイル端末からグラフの「表」「クロス集計表」「定期レポート」を見る

モバイルからさっとクラウドのデータを確認できるスマートな仕事っぷりに憧れる方には申し訳ないが、モバイル端末からグラフの「表」「クロス集計表」「定期レポート」を見ることは、標準機能では実現できない。

管理者が「ユーザーにPC版への切り替えを許可」している場合、PC版へ切り替えることでこれらの機能を使うことができる。

サブテーブルの項目を使ってクロス集計表を作る

基本的にサブテーブルの項目をグラフに使用するのは難しいと思った方がよい。

英数字を単語の一部で検索する

kintone の検索は、英数字については単語検索になる。曖昧検索は基本的にできない。

これはAPIのクエリでlike演算子を使っても同じ。

レコードの取得(GET) – cybozu developer network

部分検索ができるプラグインはある模様。

モバイル版からレコードの絞り込みを行う

モバイル版には、レコード絞り込みの機能はない。

検索機能はあるのだが、検索機能には「検索対象が限られている」というまた別の課題がある(次項参照のこと)。

ドロップダウンなどのフィールドの値を検索する

検索窓で検索できる対象が限られている

データを検索する - kintone ヘルプ_

フィールドで検索できるのは - 文字列(1行) - 文字列(複数行) - リッチエディター - リンク だけだ。

数値関係はいいとして、選択肢系の以下のフィールドが検索できない。

PC版では、絞り込みの機能を使えば絞り込むことができる。モバイル版に絞り込みの機能はない。

絞り込みのドロップダウンに表示されるフィールドの順番を変更する

システム規定の順番になっており、変更できない。

よくあるご質問 | 「絞り込み」のドロップダウンに表示されるフィールドの順番を変更できますか?

10万レコードを超える絞り込み

条件に「次のキーワードを含む」/「次のキーワードを含まない」を使用する場合、指定したキーワードを含むレコードが10万件を超えると警告が表示され、レコードが正しく絞り込まれません。

jp.cybozu.help

booleanを保持する

他のデータベースからデータを移行する際に、booleanを表現したいのだがこれがなかなかきつい。

チェックボックスが見た目にはわかりやすいのだが、配列内に複数の文字列を保持するようになっているため、true、falseとはちょっと感覚が違う。「配列に値がない」がfalseという判定になる。複数の項目であれば、配列内を走査して値がないことを確認しないとfalseにならない。

項目が1つでいいなら、配列.lengthで0か1かをとる方がわかりやすい気はする。複数項目でやるとしたら走査せざるをえない。

ラジオボタンで実現する方が見た目とデータが一致するのでまだいい。

チェックボックス(CHECK_BOX)または複数選択(MULTI_SELECT)

  • trueの場合
{value: [値1]}  
{value:[値1,値2]}  
  • falseの場合
value{[]}

ラジオボタン(RADIO_BUTTON)またはドロップダウン(DROP_DOWN)

  • trueの場合
{value: [値1]}
  • falseの場合
{value: [値2]}

複数レコードにまたがる一括処理

kintoneがきわめて苦手とする処理。たとえば「複数レコードをまとめて一括請求書を出したい」と言われるとだいぶ難度が高い。

一覧からなんとか処理する。

同じアプリ内のレコードをルックアップする

例えば商品レコードの親子関係を持たせるために、「子商品」フィールドを用意して、商品レコードへのルックアップを設定したいという場合がある。

  • 商品A
    • 商品Bへのルックアップ
    • 商品Cへのルックアップ
    • 商品Dへのルックアップ
  • 商品B
  • 商品C
  • 商品D

このような形で親子関係を表現したくなるが、「同一アプリ内のレコードへのルックアップ」は設定できない。 「ルックアップ」フィールドの設定画面で、コピー元のアプリに現在のアプリは表示されないのだ。

帳票印刷

kintoneはクラウドに特化していて、印刷をする前提にない。

もし印刷する場合は、プラグインで。「Repotone U Pro」または「プリントクリエイター」になると思う。

Repotone U Proにできないこと

複数のアプリにまたがって、フィールド値を取得することができますか?

プラグインで複数のアプリの情報を参照することはできません。

とのこと。

PDFで「御中」「様」の印刷

フィールドに「会社名」を入れているのが普通だと思うが、Repotone U ProでPDF印刷できるものは以下のどちらか。

  • PDFに書かれている画像
  • フィールドに入っている値

これで行くと、敬称はPDFに書きたくなるが、

  • PDFに書かれているものは固定レイアウトで「会社名の文字数に合わせて」ということはできない。
  • PDFに書かれているものはフィールドに応じて値を変えることもできないし、「このフィールドが空なので印刷しない」ということもできない。

御中は改行しても失礼に当たらないようなので、会社名のすぐ下に付ける方が良さそう。様もそうするしかないか。

丁寧にやるなら、煩雑だが「敬称付フィールド」を用意して「会社名+御中」などが自動的に反映されるようにするしかない。

Excel帳票の場合はExcelでいったん保存して印刷できるので、Excel側でなんとかする、という手が使える。

アプリアクションボタンに指定できないフィールド

テーブル内のフィールドのコピー先には、テーブル内のフィールドだけを指定できます。 テーブル以外のフィールドのコピー先には、テーブル内のフィールドは指定できません。 レコードのURLはテーブル内のフィールドにはコピーできません。 複数の異なるテーブルをコピー元に指定した場合、コピー先として同じテーブルは指定できません。保存しようとすると、「2つ以上のテーブルから、1つのテーブルにコピーすることはできません。」というエラーが表示されます。

アプリアクションボタンの配置を変更する

アクションボタンの設置順について – cybozu developer network https://developer.cybozu.io/hc/ja/community/posts/360039722112-%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E8%A8%AD%E7%BD%AE%E9%A0%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

アプリアクションボタンを表示する条件を付ける

プロセス管理(承認フロー)には申請の表示条件をつけられるが、アプリアクションボタンには表示条件を付けられない。

「承認されたものにだけ表示させたい」場合は、一覧で「承認されたもの」を絞り込んで表示するようにするか、カスタマイズ入れる。

よくあるご質問 | 「アプリアクション」でアクションボタンの表示/非表示をレコードの値に応じて変更できますか? https://faq.cybozu.info/alphascope/cybozu/web/kintone/Detail.aspx?id=2095&isCrawler=1

サブテーブルの行内にボタンをつける

サブテーブル内にはスペースを置くことができないため、カスタマイズでパーツを追加するのは難しい。

チェックボックスがクリックされた時のchangeイベントで代用することはできる。

リンクを設置できるので、詳細表示画面ではリンクのonclickをとることもできるかもしれない。編集画面ではリンクが編集モードになってしまうのでそもそもクリックできない。

フィールドのchangeイベントでPromiseやasync/awaitを使った処理をする

フィールドのchangeイベントはPromise非対応。このことを知らないと、return eventしても反映されないように見える。

通常のイベントではasync function内でreturn eventすれば反映されるが、チェンジイベントで同じようにasync functionを作ってreturn eventしても無視される。ハマると原因に気づきにくく、かなり時間を無駄にする。

誤解されているが、できること

kintone は小数点を扱えない

それはおそらく、お使いの設定で丸め処理をオンにして使っておられるからでは。金銭の計算ではその方が楽な場合が多いので。

また、丸め処理でレコードに小数を持たせることができない場合でも、画面上に表示させるだけならできそうな気がする(未検証)