Because We Love Happy Coding

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

kintone出来ないこと

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

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

目次

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

「コピー元のフィールド」には、次のフィールドを指定できます。 文字列(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で更新する

https://developer.cybozu.io/hc/ja/articles/201941784#step4developer.cybozu.io

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

添付ファイルできないこと

  • チェンジイベント内のevent.recordでは、添付ファイルの情報(fileKeyなど)を取得できない。空白になっている。
  • kintone.app.record.get()kintone.app.record.set()では添付ファイルの情報を取得したり、セットしたりできない。
  • event.recordの値を書き換えてreturn eventしても値は無視される。

kintone.api()などを使って、APIから書き換えるしかない。

updateKeyとしてルックアップフィールドを使用する

https://developer.cybozu.io/hc/ja/articles/201941784-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B4%E6%96%B0-PUT-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演算子を使っても同じ。

https://developer.cybozu.io/hc/ja/articles/202331474#step2

部分検索ができるプラグインはあるようだ。

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

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

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

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

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

データを検索する - 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

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

svgファイルを扱う

kintoneがサムネイルを表示できる画像はBMP、GIF、JPG、PNGに限られる。

「ファイル」フィールドに添付することはでき、その場合文書ファイルと同じようにファイル名が表示され、クリックすると(画像表示ではなく)ファイルのダウンロードが始まる。

jp.cybozu.help

サムネイルが表示されるのは、以下のファイルです。 サイズ:10MB以内 画素数:5,000万画素以内 形式:BMP、GIF、JPG、PNG

帳票印刷

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

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

Repotone U Proにできないこと

意外と制約が多いので、導入前に確認しておくポイントも多い。

バーコード等、精緻な解像度を要求される画像の印刷

Repotone U Proは画像を印刷する際、印刷領域の大きさに合わせて画像解像度を変更している節がある。

バーコードのように「ピクセル単位で潰れると使えない」ようなものの印刷は基本的に難しいと考えるべき。

サポートによれば「縮小処理はしているが拡大処理はしていない」とのことなので、小さめの画像を大きく表示させる方がまだ可能性がある。

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

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

とのこと。

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

Repotone U ProでPDF印刷できるものは以下のどちらか。

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

フィールドに「会社名」を入れているのが普通だと思うが、これで行くと、敬称はPDFに書きたくなる。しかし、

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

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

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

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

1つの添付ファイルフィールドに複数添付された画像ファイルの2枚目以降を出力する

出力できるのは1枚目のみ。添付フィールド1つにつき、画像1つでやるしかない。

サブテーブルの内容を横並びに配置する

「1行」に書かれた内容をHTMLのフレックスボックスのように「横に並べる」ことはできない。

RepotoneUProでは基本的にデータを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をとることもできるかもしれない。編集画面ではリンクが編集モードになってしまうのでそもそもクリックできない。

サブテーブル内の項目を「重複不可」に設定する

設定しようとすると「テーブル内のフィールドは値の重複を禁止できません。」とのエラーメッセージが表示される。

サブテーブル内のフィールドに「アクセス権」を設定する

設定画面の「フィールドのアクセス権」で、フィールドを指定するドロップダウンメニューにそもそも登場しない。

ワークアラウンドについてはこちらが参考になる。

テーブルの権限設定について – cybozu developer network

サブテーブルの行の順番を入れ替える

サブテーブルの行は基本的に作成した順番で動かせないみたい。頑張ればそういうスクリプトを組むことはできるかもしれないが、あまりスマートなやり方にはならなさそう。行削除→再作成、みたいな感じか。

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

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

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

APIで通知を発生させる

これができてほしい。

通知の文言を変更する

新規レコード作成等を通知する際に何らかの文言を追加したい、というケースは多々あるが、通知に文言を追加することはできない。

固定でも無理だし、フィールド内の文字列を使うこともできない。

メールを送信する

JavaScriptなので、メールを使ったソリューションを期待されるとしんどい。

kintoneの通知を使う

  • 通知をメール通知する設定をしてもらう
  • kintoneの通知を飛ばす

この組み合わせをまずは提案する。ただ前述の通り、文言は完全に固定。あまり自由度は効かない。

プラグインを使う

基本的には「レコード内のメールアドレスに向けて」送信する想定。 あまり融通が効かない。

IFTTTやPowerAutomationなどの自動化ソフトを使う。

先方が外部ツール導入に違和感ないなら使えそう。 外部ツールの管理をどこが持つかははっきりさせておかないといけない。

sendGridやSmtpJSを使う

外部のリソースを使って投げる。

スレッド数10、アプリ数20を超えるスペーステンプレートを作成する

スペーステンプレートを作成する際、「スレッド数10まで、アプリ数20まで」の制限がある。

jp.cybozu.help

それを知ってたらスレッドなんか使わないんですけど……。

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

kintone は小数点を扱えない

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

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