カテゴリー内の他の記事

第2回 レコードの登録・削除をしてみよう

フォローする

(著者:Cstap 瀧ヶ平 充

はじめに

こんにちは、第2回から「はじめようkintoneコマンドラインツール」シリーズを担当させていただきます。サイボウズスタートアップスの瀧ヶ平です。

前回の記事で、cli-kintoneの導入とレコードの取得について理解していただけたと思います。
※この先kintone コマンドラインツールはcli-kintoneと表記します。

今回も引き続きフィールドコードをカスタマイズした顧客リストアプリを利用して、レコードの追加と削除のやり方を紹介します。

レコードの追加

STEP1 追加するレコードのデータをCSVファイルで用意する

まずは追加するレコードのデータのCSVファイルを作成しましょう。

このとき、必須項目以外のフィールドは入力しなくても問題ありません。

今回はこの内容をcustomers.csvとし、文字コードをShift-JISにして保存します。

STEP2 レコードを追加する

レコードを追加するときは、認証のオプションに加えて -f オプションでファイルを指定して追加します。

このとき作成したレコードのファイルのエンコーディングをエクスポート時と同様に -e オプションで指定します。

今回はShift-JISで作成したのでsjisを指定しましょう。

実行ファイルと同じ場所に customers.csv を保存した場合

customers.csv のファイルパスを指定する場合

2018-05-10_15h50_56.png

customers.csv ファイルの途中行からインポートする場合

2018-05-10_15h49_57.png

レコードを削除した後にレコードを追加

STEP1 全てのレコードを削除してからレコードを追加する

cli-kintoneでレコードを削除してからレコードを追加する際には -f オプションを利用した上で -D オプションを利用します。

このときクエリで絞り込みをしない場合すべてのレコードを削除してからレコードが追加されます。

STEP2 クエリで絞り込みをしたレコードを削除してからレコードを追加する

レコード追加前に一部のレコードのみを削除したい場合、-q オプションを使って削除対象レコードをクエリで絞り込んでから実行する必要があります。

クエリの書き方は前回の取得の時と同様にこちらを参考にしてください。

今回は担当者名に「瀧ヶ平」を含む最新5件のレコードを削除してから、新たにレコードを追加してみましょう。

STEP3 レコードの追加をせず削除のみ行う

空のCSVファイルを作成し、-f オプションで指定した上で -D オプションを利用すればレコードを追加せずに削除することができます。

空のCSVファイルempty.csvはWindows環境では

とすることで、

MacやLinux環境では

または

とすればコマンドライン上で作成できます。

テーブルを含むレコードを追加する

こちらも前回と同様交通費申請アプリを使って確認しましょう。

STEP1 テーブルを含むレコードのCSVファイルを作成する

テーブルを含むレコードを追加する場合は、テーブルを含むレコードを取得したCSVと同じように、フィールドコードの行と各レコードの1行目の最初に*,を追加します。

既にあるレコードをcli-kintoneでエクスポートしたものを参考にCSVを作成すると間違いなく作れるかと思います。

この内容をsubtable.csvとしてShift-JISで保存しましょう。

STEP2 CSVファイルを指定してレコードを追加する

テーブルを含まない場合と同様に、 -f オプションでファイルを指定してレコードを追加します。

注意ポイント:チェックボックスや複数選択で複数チェックが入る場合のCSV表現

今回のサンプルアプリにはありませんでしたが、フィールドに複数の値が含まれる場合は "" 内に改行区切りで選択される値を表記する必要があります。

Excelなどで確認するとセルの中で改行されている形で表示されるかと思います。Excelで編集する場合はAlt + Enterを押すことでセル内で改行することができます。

テーブル内でも同様で、テーブルの行内当該のフィールドの値を "" 内改行区切りで選択される値を表記します。

CSV表現の例

records_contains_checkbox_multiselect.PNG

上の画像のレコード2件の場合、次のCSVで表現できます

▼ エクセルで表示した場合

records_contains_checkbox_multiselect_excel.PNG

CSV表現の例(テーブル内のフィールドの場合)

records_contains_checkbox_multiselect_table.PNG

上の画像のレコード2件をCSVで表現する場合以下になります。

▼ エクセルで表示した場合

records_contains_checkbox_multiselect_table_excel.PNG

レコードが正しく追加されてない場合のデバッグ方法

概ねエラーメッセージに対応すればエラーは解消されるとは思いますが、cybozu.com 共通管理から実行されたリクエストを見ると問題が特定しやすいです。

kintoneの右上の歯車のマークのメニューから「cybozu.com共通管理」へ移動し、左のカラムの「システム管理」内「監査ログ」の「閲覧とダウンロード」に移動します。

こちらの監査ログの一覧を見ると、レコード操作やその成否が、また表左の「i」マークをクリックすると詳細なレコード操作の内容が確認できます。

こちらを見て、cli-kintoneからリクエストが届いているか、どのようなエラー内容が出ているかを見ることでうまくいかない原因を探しやすくなりますね。

 

コマンドラインに出力された処理結果の見方は、Version 0.9.0 新機能紹介記事のデータインポート時に処理結果を出力するを参照してください。

 

第2回はここまでです。レコード追加と削除、いかがでしたでしょうか?
次はレコードの更新をやっていきます、お楽しみに。

2018/01/18追記:
この記事ではデータのインポート時 -f オプションのみ指定していますが、この実行方法はVersion 0.9.0(2018年1月公開)以降、推奨されません。
Version 0.9.0以降、標準入力からのインポート対応にともない、データのインポート時は、--import オプションもあわせて指定する実行方法を推奨します。
実行例: $ cli-kintone.exe --import -f importdata.csv -a 111 -d dev-demo -t xxxxx
現状は、従来の実行方法でも動作します。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
林田平祐
林田平祐により編集されました
Avatar
i.ohishi

テーブルデータのインポートをしてみたのですが、

”*”の有無にかかわらず、1行=1レコードとして登録されてしまいました。

権限の問題で監査ログを見ることもできません。

CSV作成の際、注意することはありますか?

Avatar
瀧ヶ平

i.ohishiさん
cstapの瀧ヶ平です。

こちらでは再現していないのですが、可能であればCSV及びアプリのフォーム設定など教えていただけますでしょうか?

コメント欄では"*"が全角になっていますが、半角の"*"であれば問題なくインポート出来るはずです。
エラーが出ているのではなく1行1レコードとなってしまっているのであればおそらくCSV自体の書き方は問題ないはずなので、テーブル化する*の部分の問題かと思います。

Avatar
h.yamada

STEP1 全てのレコードを削除してからレコードを追加する の質問です。

cli‐kintoneコマンドで-Dオプションを利用すると、DB上の既存レコードが全て削除されますが、次に追加レコードのレコード番号は、更新されていき-Dオプションで削除されたレコード番号は、欠番になる動作仕様のようです。ある意味、当たり前の動作だと思いますが、レコード番号をリセットしたい場合があります。

cli‐kintoneコマンドで -Dオプションで全レコードを削除後に、レコード番号=1にリセットし、追加登録する方法をご存知の方がいれば教えてください。

 

 

Avatar
瀧ヶ平

h.yamadaさん
cstapの瀧ヶ平です。

レコード番号をリセットしたいのであれば、-Dオプションで全て削除してから行うのではなく、新たに登録するID1から始まるレコードをレコードの更新によって行い、
レコードを更新した後、更新したレコードを除くレコードを-qオプションのクエリで絞り込み、-Dオプションで削除する方法で実現するのが良いかと思います。

この方法ではリビジョンなどの情報はリセットされず、これを実行した後に新たに登録する場合はレコードIDは削除済みのレコードのID+1の値から始まります。
そもそもkintoneでは削除したレコードのIDを埋めるようにレコードを作成するのは無理そうなので、これが限界かと思います。

欠番が出ることが問題なのであれば、自動採番プラグインを用いてレコードIDとは別の番号で管理するなどの代替案はどうでしょうか?

参考になれば幸いです。

 

Avatar
h.yamada

cstap:瀧ヶ平さん、

レコード番号をリセット設定するコマンドや設定手段はやはりなさそうですね。

レコード削除があってもレコード番号で綺麗に欠番なく管理するプログラムは少し面倒そうなので、アドバイスを受けた方法などで工夫してみます。

> そもそもkintoneでは削除したレコードのIDを埋めるようにレコードを作成するのは無理そう

アドバイス、ありがとうございした。

 

Avatar
sharaki

素敵なツールありがとうございます。

同一のCSVファイルにおいて、UIの「ファイル読み込み」から登録すると正常に登録されるのに、コマンドラインから登録するとレコード数文の空データしか登録されない現象があります。

アプリ自体の構造はとてもシンプルなもの(文字列フィールドのみ)なのですが、切り分け方法についてヒントいただけないでしょうか?

Avatar
cybozu Development team

shiraki 様

フィードバックをありがとうございます。

GUIからは正常に登録されるということで、コマンドに何らかの誤りがあると思われますが、

個別のトラブルシューティングについてはこちらの記事コメントでは対応いたしかねます。

恐れ入りますが、コマンドの詳細を記載の上、以下のトピックに投稿いただけますでしょうか。

QA, トラブルシューティング

https://developer.cybozu.io/hc/ja/community/topics/200021040

よろしくお願い申し上げます。

Avatar
Toshimichi Konno

「チェックボックスや複数選択で複数チェックが入る場合のCSV表現」の例のようにやってみたのですが、チェックボックス欄にうまくデータが登録されません。

ちなみに単一選択であってもレコード自体は登録されますが、値がセットされません。

何か明示されていない前提条件がありますか。

Avatar
cybozu Development team

Toshimichi Konno 様

こちらの手元で確認をしたいため、

  • 実行したコマンド (認証部分は伏せ字でお願いいたします)
  • 読み込ませたCSVファイルのスクショ画像 (例:記事内のエクセル画像)

をいただくことはできますでしょうか。

お手数をおかけしますが、よろしくお願いいたします。

Avatar
Toshimichi Konno

実行したコマンド

cli-kintone.exe -a 148 -d qsv5k -t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -f テスト.csv

 

テスト.csvの中身

"チェックボックス","複数選択"
"check1","select2"

 

デザイン画面スクショ



上記で実行した結果はチェックボックス、複数選択には何もセットされませんでした。

Avatar
cybozu Development team

Toshimichi Konno 様

詳細の記載ありがとうございます!こちらでも同様の現象を確認することができました。

おそらく、文字コードが原因と思われます。対応策としては以下の2点がございます。

 

・コマンド実行時に文字コードを引数で追加する
cli-kintone.exe -a 148 -d qsv5k -t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e sjis -f テスト.csv

 

・CSV保存時に「UTF-8」で保存する
Excelなどで作成した場合、初期値として文字コードが「Shift-JIS」で保存する設定になっていることが多いです。

 

以上、ご確認よろしくお願いいたします。

Avatar
Toshimichi Konno

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

こちらで確認した結果、sjisではうまくいきましたが、UTF-8では複数選択はうまくいって、チェックボックスはうまくいきませんでした。

ログインしてコメントを残してください。