Because We Love Happy Coding

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

kintoneの無用のトラブルを避けるtips

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

自分がkintoneのカスタマイズを組んでて「ええっ」と思ったり「えー」と思ったりしたところをご紹介したい。

環境

  • kintone

フィールド名に半角スラッシュ「/」を使わない

半角スラッシュは使えないのかというと、使える。

じゃあ使って問題ないかというと、フィールドコードが半角アンダーバー「_」に勝手に置き換わる仕様になっている。

これのせいで、REST APIで送ったはずのデータが反映されないようなことがたびたび起きる。

詳細画面では、API更新よりも、return eventの方を使う

詳細画面でAPI更新をした場合は、location.reload()などで画面のリロードをしないと反映されない。つまり、バックエンドで更新しているがその情報が画面に表示されていない状態になる。

ただ、location.reload()すると入力途中の情報などは失われてしまうので、あまり現実的ではない。

return eventする方はすぐに画面に表示されるので、詳細画面ではできるだけこちらを使う。

クエリ文字列

こちらの記事が大変参考になる。

REST APIのGET/recordsにおけるクエリの書き方のコツ【一覧の絞り込み条件を再利用する方法】 | kintoneを便利に使う方法を紹介するブログ

あとURLエンコードしたものは読めないので、うまくいかないことはデコードしてから眺めたりすると手がかりが得られる。

Web便利ツール/URLエンコード・デコードフォーム - TAG index

日付"yyyy-mm-dd"はダブルクォートする

配送日 > "2019-03-06" and 配送日 < "2019-03-07"のようにダブルクォートで囲む。囲まないとエラーになる。

日付の処理は面倒が多いので、UltraDateかMoment.jsをCDNで導入した方がいいかもしれない……(cybozu CDNにある)

フィールドコードは演算子の左

支払日 >= \"2019-07-01\" and 支払日 <= \"2019-07-31\" order by 支払日 desc limit 500 offset 0は正しく処理されるが、"\"2019-07-01\" <= 支払日 and 支払日 <= \"2019-07-31\" order by 支払日 desc limit 500 offset 0" は処理されないので、フィールドコードを演算子の左に置かないとダメみたい。

order by は 'DSC'じゃなくて'DESC'

いつも間違えちゃう。

サブテーブルの構造

行にメタデータがあるということを忘れがち。

"Table": {//テーブルの名前
    "value": [ //テーブルのデータ、行配列
        {
            "value": { //行のvalue。これを見落としがち
                "列1": {//列見出し
                    "value": "テスト"//データ
                },
                "列2": {//列見出し
                    "value": "テスト"//データ
                },
            }
        }
    ]
}

参照する場合はこう。

tabledata['テーブル名']['value'][0]['value']['列1']['value']['データ'];//1行目の列1
tabledata['テーブル名']['value'][99]['value']['列7']['value']['データ'];//100行目の列7

一行のデータは{'value': {'列1': {'value': データ},'列2': {'value': データ}, ...}という形。

サブテーブルへの書き込み

これは以前、記事を書いた。

サブテーブルに書き込みをする際には、以下のような(直観的でない)仕様になっているような……。 書き込むjsonには、サブテーブルの一行にあるすべてのフィールド(列)を用意しなければいけない。 各フィールドには、valueとtypeがなくてはいけない。 自動計算CALCフィールドも用意しなくてはいけない。valueの値は無視される。

kintoneのサブテーブルを書き込もうとすると「カスタマイズ用のJavaScriptの実行時にエラーが発生しました。」と言われる - Because We Love Happy Coding

APIのエンドポイント

kintoneは公式ドキュメントのエンドポイントURLに「セキュアアクセスの場合はsubdomain.s.cybozu.com にアクセスする」ってことを明記すべきだと思うんだが違うかな。