
- Questetra BPM Suite の外からプロセスを開始する(準備編)
- Questetra BPM Suite の外からプロセスを開始する(curl編)
- Questetra BPM Suite の外からプロセスを開始する(Python編)
- Questetra BPM Suite の外からプロセスを開始する(エラー対処編)
Python でメッセージ開始イベント (HTTP) にアクセスする
前回の記事では curl コマンドを用いて Questetra BPM Suite のメッセージ開始イベント (HTTP) にアクセスし、プロセスを新規開始しました。今回は Python 3 で同じ処理をするコード例を紹介します。この記事では、HTTP リクエストの送信には Requests パッケージを用います。インストールしていない場合はインストールをお願いします。
ワークフローアプリは前回の curl 編と同じものを使用します。もし作成していない場合は、準備編と curl 編の「さまざまなデータを送信する > アプリの設定」を参照しながら、アプリを作成・リリースしておいてください。
まず、件名だけを入力した状態でプロセスを新規開始しましょう。サンプルコードは以下の通りです。
import requests
if __name__ == '__main__':
# API エンドポイント
url = 'https://example.questetra.net/System/Event/MessageStart/{processModelInfoId}/{nodeNumber}/start'
params = { # 辞書型にパラメータと、それに渡す値を格納
'key' : {APIキー},
'title' : 'テスト',
}
try:
r = requests.post(url, data=params) # POST 送信
r.raise_for_status()
print('Status Code: {0}'.format(r.status_code))
print(r.text)
except requests.exceptions.HTTPError as e: # HTTP エラーをキャッチ
print('Error')
print('Status Code: {0}'.format(r.status_code))
print(r.text)
except requests.exceptions.Timeout as e: # タイムアウトをキャッチ
print('Timeout')
メッセージ開始イベント (HTTP) の API へ文字データを送信する場合、文字コードは UTF-8 を使用する必要があります。ただし、Python 3 はデフォルトで UTF-8 を使用するため、文字コードに関する設定は必要ありません。
このスクリプトを実行することで、件名が「テスト」のプロセスを新規開始できます。他のパラメータにも値を渡したい場合、params に要素を追加してください。パラメータ名が key、渡す値が value です。ファイル型パラメータ以外では、例えば次のようになります。
params = {
'key' : {APIキー},
'title' : 'テスト',
'q_str' : 'プロセス開始テストです',
'q_float' : 1.23,
'q_selects' : 'false',
'q_date' : '2018-04-01',
'q_datetime' : '2018-04-01 12:34',
'q_email' : 'questetra+Canarias@gmail.com',
'q_group' : '10 管理部',
}
curl 編と同じく、ファイル型パラメータへのデータ送信は少し手順が違います。
...
params = { # ファイル型以外のパラメータ
'key' : {APIキー},
'title' : 'テスト',
}
import mimetypes # MIMEタイプ判別のため
files = [ # ファイル型パラメータ
# (パラメータ名, (ファイル名, ファイルオブジェクト, MIMEタイプ))
('q_file', ('ques-kun-01.png', open('./ques-kun-01.png', 'rb'), mimetypes.guess_type('./ques-kun-01.png'))),
]
try:
r = requests.post(url, data=params, files=files) # POST 送信
...
ファイル型とそれ以外のパラメータで、格納先を分ける必要があります。その上で requests.post() メソッドの data パラメータと files パラメータにそれぞれを渡してください。また、ファイルオープンはバイナリモードで行ってください。curl コマンドの場合と違って、送信する際のデータ形式を気にする必要はありません。Requests ライブラリによって、文字列のみの送信の場合は application/x-www-form-urlencoded 形式、ファイルを含む場合には multipart/form-data 形式に自動的に変換されます。
最後に、すべてのデータ項目にデータを入力してプロセスを開始するコードを例として挙げておきます。
import requests
import mimetypes
if __name__ == '__main__':
# API エンドポイント
url = 'https://example.questetra.net/System/Event/MessageStart/{processModelInfoId}/{nodeNumber}/start'
params = { # ファイル型以外のパラメータ
'key' : {APIキー},
'title' : 'テスト',
'q_str' : 'プロセス開始テストです',
'q_float' : 1.23,
'q_selects' : 'false',
'q_date' : '2018-04-01',
'q_datetime' : '2018-04-01 12:34',
'q_email' : questetra+Canarias@gmail.com,
'q_group' : '10 管理部',
}
files = [ # ファイル型パラメータ
# ファイルの複数送信もできます
('q_file', ('ques-kun-01.png', open('./ques-kun-01.png', 'rb'), mimetypes.guess_type('./ques-kun-01.png'))),
('q_file', ('ques-kun-02.png', open('./ques-kun-02.png', 'rb'), mimetypes.guess_type('./ques-kun-02.png'))),
]
try:
r = requests.post(url, data=params, files=files) # POST 送信
r.raise_for_status()
print('Headers: ')
print(r.request.headers)
print('Status Code: {0}'.format(r.status_code))
print(r.text)
except requests.exceptions.HTTPError as e: # HTTP エラーをキャッチ
print('Error')
print('Status Code: {0}'.format(r.status_code))
print(r.text)
except requests.exceptions.Timeout as e: # タイムアウトをキャッチ
print('Timeout')
このように Python では、パラメータと渡す値の組を用意すれば簡単にプロセスを新規開始できます。業務で用いるプログラムの中で API を利用すれば、状況に応じて自動でパラメータに渡す値を決定し、プロセスを開始することもできるでしょう。業務の自動化への手法の一つとして、ぜひメッセージ開始イベント (HTTP) の活用を検討してみましょう!
ピンバック: メッセージ開始イベント(HTTP) – Questetra Support