kintoneレコードで年齢が毎日更新されるwin7用バッチファイルを作ってみた。
kintoneが生年月日から年齢を計算出来ないので、javascriptで出来るようにしてみた。で、レコード入力時や表示する時には自動計算してくれるようになった。
が、30歳以上・以下みたいな検索をしたい場合は、これだと出来ない(あくまで入力補助や表示だけなので、レコードの年齢は自動更新されない)
こういう仕様をみると、kintone=「CSVの入力フォーム&そのWebサーバを簡単に作れるだけ」っていう現実をひしひしと感じるな・・・。
嘆いていもしょうがないので、年齢を自動更新してくれるバッチファイルを作ってみた。
kintone コマンドラインツールの使い方
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
echo %time% | |
set APP_NO= | |
set SUB_DOMAIN= | |
set API_TOKEN= | |
rem 会員管理アプリから全レコードをダウンロード | |
echo kintone downloading... | |
cli-kintone.exe -a %APP_NO% -d %SUB_DOMAIN% -t %API_TOKEN% -c "$id,年齢" -e sjis > download.csv | |
rem アップロードファイルを初期化 | |
echo "$id","年齢">upload.csv | |
rem 本日の日付を取得 | |
set TodayDate=%date:/=% | |
rem 遅延環境変数の展開を有効化 | |
setlocal enabledelayedexpansion | |
echo age calculating... | |
for /f "skip=1 tokens=1,2,3* delims=," %%i in (download.csv) do ( | |
set yyyy_mm_dd=%%~k | |
set birth_date=!yyyy_mm_dd:-=! | |
SET /a age=TodayDate-!birth_date! | |
set /a age=!age!/10000 | |
echo %%i,!age!>> upload.csv | |
) | |
rem 遅延環境変数の展開を無効化 | |
endlocal | |
rem 計算済みの年齢をkintoneアプリへアップロードする | |
echo kintone uploading... | |
cli-kintone.exe -a 56 -d 4qn7v -t 3g7hsNrQu0d1cYGg22q9NhxzaPNdrvsJxnYvsAKY -c "$id,年齢" -e sjis -f upload.csv | |
echo %time% | |
実行速度を調べるためにダミーデータをmysqlで作ってみる。
参照URL: https://www.softel.co.jp/blogs/tech/archives/4730
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
CREATE TABLE kintone ( id INT PRIMARY KEY AUTO_INCREMENT, birthday DATE ); -- レコードを倍々ゲームで増やす。 INSERT INTO kintone () VALUES (); -- 最初に1レコード INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 2 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 4 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 8 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 16 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 32 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 64 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 128 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 256 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 512 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 1024 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 2048 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 4096 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 8192 INSERT INTO kintone (id) SELECT 0 FROM kintone; -- 16384 -- ランダムで適当な誕生日に更新 UPDATE kintone SET birthday = '1980-01-01' + INTERVAL RAND() * 3650 DAY, |
CSV(SJIS)エクスポートして、適当に作ったkintoneアプリに読み込ませる。
batファイルで年齢計算してみたら、所要時間は以下の通り。
1024レコード=約42秒
8192レコード=約300秒
数千~数万件程度なら、起動時のスタートアップに入れたり、タスクスケジューラに入れて、それなりに実用的かな?
※kintone公式のコマンドラインツールは、GO言語のソースを見てみると100件レコード単位で処理しているっぽいので500件単位に修正して、自分でコンパイルしたら早くなるかも…。