※Dr.Sum Ver 5.5 で追加されたDS Scriptを含みます。
MotionBoard×Dr.Sum×Pythonの連携とは?
Dr.SumとPythonを連携させる方法をご存じの方は多いかもしれませんが、MotionBoardと組み合わせた活用方法はご存じでしょうか?
本記事では、MotionBoard×Dr.Sum×Pythonの連携方法を解説します。具体的には、MotionBoardで入力した文字をDr.Sumに渡し、Pythonのライブラリを使ってQRコード化し、MotionBoard上に表示する方法を紹介します。
このように、製品間のスムーズな連携を実現することで、データ活用の幅が広がります。
例えば、QRコードを発行する作業の業務改善や、QRコード印刷業務を省きペーパーレスに大きく寄与することができます!

前提
Python連携とは
本記事でのPythonはDr.Sumのサーバー上で動くものです。Dr.SumのPython連携機能とは異なります。
Dr.SumのPython連携の詳細はマニュアルを参考にしてください。
またDr.SumのPython連携を使用した記事はこちらです。
サーバー環境
本記事ではDr.SumとMotionBoardを同一のサーバーにインストールしている前提です。それぞれの連携はlocalhost連携をしていますのでご了承ください。
必要な環境、推奨知識レベル
必要な環境、推奨知識レベルを下記に記載します。
- MotionBoard、Dr.Sum オンプレミス版の管理者権限
- Pythonの初級程度の知識
- Pythonのライブラリの用意(QRCODE・PILLOWライブラリ)
Pythonライブラリのインストール等は下記を参考にしてください。
製品間の連携イメージ
大きく下記4つの手順で連携を図ります。
- MotionBoardで入力した文字列をDr.Sumに格納し、変数をDS Scriptに渡す
- DS ScriptにてPythonファイルを呼び出す
- Pythonにて文字列をQRコード化し、エンコードした文字列をDr.Sumに格納する
- MotionBoard上でQRコードを表示する
MotionBoardで入力した文字列をDr.Sumに格納し、変数をDS Scriptに渡す
まず、MotionBoardで入力した文字列を${DATA}とし、データベース入力機能を使いDr.Sumに格納します。次に、現在の時分秒を日付変数で取得し${QRCODE_ID}とし、サーバープログラムのパラメーター(引数)としてバッチファイルへ渡します。

バッチファイルでは、set p1=%1やset p2=%2のように記述することで、%1(最初の引数)を p1 に、%2(2番目の引数)を p2 に設定することができます。
サーバープログラムの詳細はマニュアルを参考にしてください。
MotionBoardからDS Scriptを呼び出すバッチファイル
下記にサンプルの記述例を紹介します。
@echo off
set p1=%1
set p2=%2
set COMMAND_PATH=%DWODS_TOOLS_PATH%\cmd\JPN
call "%COMMAND_PATH%\dwscr_execute" "localhost" 6001 "Administrator" "" "SCRIPT_ROOT/QRCODE.dhn" "" "$QRCODE_ID" "%p1%" "$DB" "%p2%"
if not %errorlevel% == 0 exit /b %errorlevel
:end
exit /b %errorlevel%
DS ScriptにてPythonファイルを呼び出す
このスクリプトは、QRCODE_ID に対応する QRCODE_IMG を取得し、そのデータを Python スクリプト QRCODE.py に渡して処理を実行します。後述のPython スクリプトの実行結果(変換後のQRコード画像、処理結果、エラーメッセージ)を取得し、それらのデータを QRCODE テーブルに更新します。最後に、設定された条件を満たしていればスクリプトを終了します。

DS Scriptのファイル
下記に記述例を記載します。
SET() {
$condition = 1;
$QRCODE_ID := "";
$DB := ""
}
CONNECT($DB) {
}
SET_FROM_QUERY() {
$DATA = select QRCODE_IMG from QRCODE where QRCODE_ID = '${QRCODE_ID}';
}
EXECUTE($_CONSOLE_ENCODE_ANSI) {
($RESULT1, $STD1, $STDERROR1) = python.exe "C:\bidata\drsum_batch\QRCODE.py" "${DATA}";
}
SQL($_SQL_AUTO_COMMIT_ON) {
update QRCODE set QRCODE_IMG='${STD1}',RESULT='${RESULT1}',STDERROR='${STDERROR1}'
where QRCODE_ID='${QRCODE_ID}';
}
EXIT ($condition == 1) {
}
Pythonにて文字列をQRコード化し、エンコードした文字列をDr.Sumに格納する
このpyファイルでは、渡された文字列を QR コードに変換し、一時的に画像ファイルとして保存します。保存した画像を Base64 にエンコードして標準出力し、前述のDS Scriptの標準出力${STD1}として出力します。その後、不要になった画像ファイルを削除します。

文字列をQRコード化し標準出力を行うPyファイル
下記に記述例を記載します。
import os,sys,datetime
import qrcode
import base64
outfile = str(datetime.datetime.now())
outfile = outfile.replace(":","")
outfile = outfile + ".png"
img = qrcode.make(sys.argv[1])
img.save(outfile)
with open(outfile,"rb") as f:
img = base64.b64encode(f.read()).decode('utf-8')
print(img)
os.remove(outfile)
MotionBoard上でQRコードを表示する
MotionBoardでカード型明細を用意し、接続先を上述したQRコードの格納先とします。QRCODE_IMGの編集ボタンより、[リンク/イメージ]-「設定」をクリックします。[イメージURL]-「Base64」に変更します。

さいごに
「MotionBoard×Dr.Sum×Python」の連携について解説しました。 スムーズな製品間連携でデータ活用の幅を広げましょう。その他にもDr.Sum×Python連携を紹介した記事があります。ぜひご覧ください。