クラウド型 ワークフロー

Excel で作った申請書から簡単にワークフローを開始する方法

ExcelVBA(マクロ) → Questetra BPM Suite の連携事例です。

既存の Excel の申請書を使う形でワークフロー化したい。そういう話をよく耳にします。

理由としては

  • 利用者(ユーザ)への教育の手間の軽減
  • ITに弱いユーザでも Excel なら使える

といった点があげられます。

ということで、今回はユーザが Excel の申請書に入力して、そこから Questetra BPM Suite の業務(ワークフロー)を開始できるようにする、という方法を紹介します。

1.操作のイメージ

ユーザは既存の Excel の申請書にデータを入力して、今回準備する「送信」ボタンを押せば、Questetra BPM Suite の該当業務がスタートされ、業務が流れていきます。

2.実現方法の概要

処理の流れは以下の通りです。

  1. Excel の画面上のボタンを押すと、マクロ(VBA)の処理が実行される。
  2. マクロ(VBA)で Excel の各セルに入力されたデータを取り出して、Questetra BPM Suite に http リクエストの形で送付する。
  3. Questetra BPM Suite はそれを「メッセージ開始イベント(HTTP)」で受けて、業務を開始する。

ExcelVBA_QBPMS

3.前提となる知識

Excel マクロ(VBA)の知識が必要になりますが、プログラミング経験がある方であれば、すぐに理解できるレベルです。
またプログラミング経験がない方であっても、少し勉強すれば十分に理解できる簡単なレベルの内容です。

4.実現方法の詳細

4.1 Questetra BPM Suite 側の準備

Excel からデータが送られてきたら起動するプロセスモデルを準備する。
「メッセージ開始イベント(HTTP)」というデータの受け口が必要となる。
BPMN-message-start-event-http
※Excel との接続部分はリリースをしないと確定されないので注意してください。リリース済で「メッセージ開始イベント(HTTP)」のプロパティの「URL・パラメータ詳細」を開くと以下のような画面が表示されますので、それにあわせて次の Excel 側の準備を進めてください。
message-start-event-http-property

4.2 Excel 側の準備

申請書のフォーマットにあわせて ExcelVBA を準備する(以下のサンプルコードを元に作成する)。

※サンプルコードを含む Excel ファイルとそのサンプルに対応してプロセスモデルアーカイブ(入館申請書)のダウンロードはこちらから。サンプルの Excel ファイルそのままで試す場合でも、少なくともプロセスモデルをインポートした Questetra BPM Suite の環境にあわせて、後述の12~15行目の url ~ key の変更が必要になります。

※ExcelVBA(マクロ)の設定方法は一般的な話になりますので、詳細は割愛します。こちらのサイト等を参考にしてください。このサイトは Excel2013 について記載されていますが、古いバージョンの場合でも設定方法が異なるだけで、対応は可能です。

サンプルコード(入館申請書)
Sub ボタン1_Click()

    Dim params() As String
    Dim values() As String

    ReDim params(16)
    ReDim values(16)

    Dim i As Integer
    i = 0

    Dim url As String
    Dim processModelInfoId As String
    Dim nodeNumber As String
    Dim key As String
    url = "https://xxxxxxxx/System/Event/MessageStart/start"
    processModelInfoId = "999"
    nodeNumber = "0"
    key = "xxxxxxxx"

    params(i) = "data[0].input"
    values(i) = Range("C4").Value
    i = i + 1
    params(i) = "data[1].datetime"
    values(i) = Range("C5").Value
    i = i + 1
    params(i) = "data[2].datetime"
    values(i) = Range("C6").Value
    i = i + 1
    params(i) = "data[3].input"
    values(i) = Range("D7").Value
    i = i + 1
    params(i) = "data[4].input"
    values(i) = Range("D8").Value
    i = i + 1
    params(i) = "data[5].input"
    values(i) = Range("D9").Value
    i = i + 1
    params(i) = "data[6].input"
    values(i) = Range("C10").Value
    i = i + 1
    params(i) = "data[7].input"
    values(i) = Range("C11").Value
    i = i + 1
    params(i) = "data[8].input"
    values(i) = Range("C12").Value
    i = i + 1
    params(i) = "data[9].input"
    values(i) = Range("C13").Value
    i = i + 1

    send url & "?processModelInfoId=" & processModelInfoId & "&nodeNumber=" & nodeNumber & "&key=" & key, params, values
End Sub

Public Function send(url As String, params() As String, values() As String) As String
    Dim httpObj As Object
    Set httpObj = CreateObject("MSXML2.XMLHTTP")

    Dim parameters As String
    parameters = ""
    For i = 0 To UBound(params)
        If Len(parameters) > 0 Then
            parameters = parameters & "&"
        End If
        parameters = parameters & params(i) & "=" & values(i)
    Next

    httpObj.Open "POST", url, False
    httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" & vbCrLf
    httpObj.send (parameters)

    If httpObj.Status = 200 Then
        MsgBox ("送信成功")
    Else
        MsgBox ("送信失敗" & vbCrLf & "status=" & httpObj.Status)
    End If
End Function

サンプルコードから編集すべき部分は以下の通り。

    • 1行目の Sub 名を追加したボタンにあわせて変更。
Sub ボタン1_Click()
    • Excel から送付するデータの数が多い場合は、4~5行目のパラメータの数を送付したいデータ数にあわせて変更。
    ReDim params(16)
    ReDim values(16)
    • 12~15行目の url、processModelInfoId、nodeNumber、key を Questetra BPM Suite 側の「メッセージ開始イベント(HTTP)」の詳細にあわせて変更。
    url = "https://xxxxxxxx/System/Event/MessageStart/start"
    processModelInfoId = "999"
    nodeNumber = "0"
    key = "xxxxxxxx"
    • 16行目以降を「メッセージ開始イベント(HTTP)」の受信パラメータ名と Excel からデータを取り出すセル位置にあわせてそれぞれ変更。もしデータの数が多い場合には以下の3行をセットでコピーして増やす(params が送付パラメータ名で、Range のカッコ内が Excel のどのセルからデータを抜き出すかの設定です)。
    params(i) = "data[0].input"
    values(i) = Range("C4").Value
    i = i + 1

※後半の send() という Function については変更不要。

「送信」ボタンを押して「送信成功」と表示されれば Questetra BPM Suite 側のプロセスが開始されているはずです。もし「送信失敗」と表示された場合には、以下のような問題が考えられます。

※Questetra BPM Suite 側でエラーとなっている場合には、プロセスモデルの管理者にエラー内容がメールで通知されますので、そちらで詳細をご確認ください。

  • url ~ keyの設定が Questetra BPM Suite 側の設定と一致していない
  • データ送付する各パラメータ名の設定が Questetra BPM Suite 側の設定と一致していない
  • Questetra BPM Suite 側で必須設定にしているデータが送付するよう設定されていない
  • 選択型・ユーザ型・日付型・日時型データについて Questetra BPM Suite 向けデータ書式と一致していない

VBA についての知識は少し必要ですが、比較的簡単な設定で Excel の申請書を入力画面がわりにできることをご理解いただけたかと思います。
ご質問等ございましたら、お問合せフォームから日下(くさか)宛てにご連絡ください。

Kusaka Tsuyoshi の紹介

営業をやってますが、もともとエンジニアなので、プログラミングもやります。
Kusaka Tsuyoshi の投稿をすべて表示

あわせて読みたい
50.Questetra Tips の前の記事 FAQ. 案件データをダウンロードすることはできますか?
50.Questetra Tips の次の記事 Googleカレンダー上の予定からワークフローを開始する方法
Kusaka Tsuyoshi の他の記事 電話をかけてワークフローを開始する方法

アーカイブ

 RSS