カレンダーPlus Advent Calendar 2020「カレンダーplus」さわってみました
Twitterに、kintoneで色々良くしてもらってる、tarimoさんからこんなツイートがきました。
HELP ME!(笑)
「アドベントカレンダー」はよく知りませんでしたが、HELP ME!(笑)との事なので、やってみることに。。。
Advent Calender に登録!
お。なんか6日に私のアイコンが入った。これでいいのかな。
カレンダーPlus
kintoneプラグインで有名な「カレンダーPlus」。以前からよく聞いてはいましたが、今回はじめて試用させていただきました。
私のはじめての「カレンダーPlusアプリ」はtarimoさんの「社用車予約簿」。noteを参考にそのまんま作成。
おおっ!!たしかにマウスドラッグで予定が変わる。面白いな。
。。。で。なにしようかな。なんのテーマも考えてないしな。(^^;
「テレワークアプリ」に「カレンダーPlus」を追加
考えたあげく、思いついたのが松田さんの「テレワークアプリ」の機能追加
うちでは、以下動画をもとに作成したアプリが社内でバリバリ実運用されています!(松田さんありがとうございます)
で、実際の画面はこんな感じ。今回テストの為、本番アプリからコピーしてきました。
kintone標準のカレンダーは利用していて、それなりに便利に使っています。表示だけでもあるのとないのでは違いますね。
じゃ、ここに「カレンダーPlus」いれてみましょう!
さくさくっと「カレンダーPlus」の設定して終わると思っていましたが、
あっ!!!
「テレワークアプリ」では、「日付」と「時刻」をフィールドを分けて利用していたため、上記設定でひっかかってしまいました。
で、とりあえず日時フィールド追加。
テストで適当な日時を入れて「カレンダーPlus」を動作させてみたところ、ちゃんと動きました。
さて、じゃどう対応しようかな。まさかユーザーに、二重入力してもらうわけにもいかないし。(^^;
jsなどを使った値コピーも考えましたが、「カレンダーplus」側で値を操作することもあるし、保守性からも、jsは、最小限の利用にとどめたい。
結局、おなじ「時」を「日付」と「時刻」に分けていると「カレンダーPlus」では扱いにくそうだし、いずれにしても、最終的には移行の話もでてくるから、
「日付」「時刻」フィールドを「日時」フィールドに移行する
ことにしました(お、なんかテーマっぽくなってきた。^^;)
今回は、「既に運用中のデータの更新」となるので、単純に、「CSV全件書き出し」→「アプリデータ全削除」→「修正後CSV全件取り込み」するわけにはいきません。
そんなことしたら、ものが「テレワーク管理」なだけに、入力更新の履歴や、プロセス管理、コメントまでぜんぷ吹っ飛んでえらいことになってしまいます。(^^;
移行については、細心の注意を払いながら必要項目だけ更新する必要があります。kintoneには、Oracleデータベースなどにある、処理を一括で戻すようなロールバック(rollback)機能はないので、一発勝負!ある意味シビれます。^^;
項目が多いとわかりくいので、必要フィールドだけの一覧を作ります。今回だと、
レコード番号(更新キー)
日付(更新元フィールド)
業務開始時刻(更新元フィールド)
業務終了時刻(更新元フィールド)
業務開始日時(更新先フィールド)
業務終了日時(更新先フィールド)
で、12月1日に、サンプルになる日時を入力しました。
これをkintone標準機能でCSV出力して、エディタで開くとこんな感じ。
あとは、サンプルで入れた12月1日の「日時」を参考に、他の行の修正をかけていきます。
この修正のやり方については、皆さん色々ノウハウあるでしょうからお好みで。ちなみに私は「秀丸」エディタの、記録( [Shift]+[F1] )と、再生( [Shift]+[F2] )の機能を活用して変換しました。一回やって後同じというパターンで(頭をつかわなくて^^;)できるので、よくやります。
ババババッっと変換して上記の通り。とりあえず25件のデータでのテストです。
これをkintone標準機能でCSV取り込み(レコード番号で更新)すると以下の通り。
事前に「カレンダーPlus」の動作チェックはできてるのでそっちは大丈夫。これで移行完了です!!やったーっ!!
cli-kintoneでやってみよう
今回の移行は普通一回こっきり、しょっちゅうするものでもないので、まあ必要ないといえばそうですが、例えば同じようなアプリ更新が一度に10本以上あったり、毎月更新するようなものであったりしたら大変。
手作業でやってたらミスもでますし、できたらこういう作業は、簡素化、最小化、自動化、したいですよね。そういうときにはコマンドラインで利用できる「cli-kintone」でやったらよいかと。実行記録のログも取りやすいですしね。
と、色々理由をつけて(ほんとはやってみたいだけ^^;)同じことを「cli-kintone」でやってみました。
上記を参考に、以下環境を例としてやってみます。
【環境例】
サブドメイン:piyo
アプリID:1234
APIトークン:ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN
入力ファイル名:日時更新.csv
【コマンド】
cli-kintone.exe --import -a 1234 -d piyo -t ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN -e sjis -f 日時更新.csv
コマンドプロンプトから、上記コマンド実行したらOK!!
いけーーーー!!
c:\cli-kintone>cli-kintone.exe --import -a 1234 -d piyo -t ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN -e sjis -f 日時更新.csv
[2020-12-06 00:53:40]: Start from lines: 1 - 26 => ERROR OCCURRED
ID: uVwxYzAbcdefgHiJkLmN
Code: GAIA_NO01
Status: 403 Forbidden
Message: このAPIトークンでは、指定したAPIを実行できません。
Errors detail: (none)
[2020-12-06 00:53:41]: PROCESS STOPPED!
INSERT ERROR.
For error details, please read the details above.
Lines 1 to 26 of the imported file contain errors. Please fix the errors on the file, and re-import it with the flag "-l 1"えら
エラー。orz
これは 先ほどの、developer network にちゃんと書いてあって
レコードの更新を行うには $id のカラムを含むCSVを用意します。
とのこと。つまり、日時更新.csvの1行目を
"レコード番号","日付","業務開始時刻","業務終了時刻","業務開始日時","業務終了日時"
↓
"$id","日付","業務開始時刻","業務終了時刻","業務開始日時","業務終了日時"
としないといけなかったんですね。気をつけましょう(私が)。
で、そう直して、再び
いけぇーーーーーー!
c:\cli-kintone>cli-kintone.exe --import -a 1234 -d piyo -t ABCdefgHijklMnOpqrstuVwxYzAbcdefgHiJkLmN -e sjis -f 日時更新.csv
[2020-12-06 00:54:59]: Start from lines: 1 - 26 => ERROR OCCURRED
ID: uVwxYzAbcdefgHiJkLmN
Code: CB_VA01
Status: 400 Bad Request
Message: 入力内容が正しくありません。
Errors detail:
'records[2].record[業務終了日時].value': 日時はISO8601形式の必要があります。
'records[20].record[業務終了日時].value': 日時はISO8601形式の必要があります。
'records[8].record[業務終了日時].value': 日時はISO8601形式の必要があります。
:
:
'records[4].record[業務終了日時].value': 日時はISO8601形式の必要があります。
[2020-12-06 00:55:00]: PROCESS STOPPED!
UPDATE ERROR.
For error details, please read the details above.
Lines 1 to 26 of the imported file contain errors. Please fix the errors on the file, and re-import it with the flag "-l 1"
エラー。orz
えっと、ISO8601形式ってどんなだっけ。。。こういうのはググって、先駆者の方々のお知恵を拝借。
本当にこういう知識は皆さんの過去の試行錯誤の結果と惜しみないシェアの精神のおかげです。ありがたいありがたい。
お、あった、あった。
ありがたい。
。。。あれ?
た、tarimoさん!!!!
ありがとうございます。よく、わかりました。m(__)m
こんな感じですかね。
"1","2020/12/04","17:00","17:30","2020/12/04 17:00","2020/12/04 17:30"
↓
"1","2020/12/04","17:00","17:30","2020-12-04T17:00:00+0900","2020-12-04T17:30:00+0900"
再びエディタで、ばばばばばっと修正、以下のようにしました。
いけぇーーーーーー!!。
c:\cli-kintone>cli-kintone.exe --import -a 15 -d 46u -t dTkvWurUHWzW8LDAcnjMNVEq2HdhK8S3SpBbotRA -e sjis -f 日時更新.csv
[2020-12-06 01:00:39]: Start from lines: 1 - 26 => SUCCESS
[2020-12-06 01:00:40]: DONE
やったーーーっ!正常終了!!!
もちろん「カレンダーPlus」もちゃんと表示できてました。^^
なんとか形になったかな。^^;
何かのお役に立てればうれしいです!
またもっといい方法や、ココ違ってるよなどあれば、教えてください。