今回の記事では、サイボウズ社のグループウェア製品である「ガルーン」の活用例として、ガルーンのカスタマイズや他システム連携で利用できる機能の紹介をしつつ、実際に私が実装した事例やその実装方法を紹介していきます。
尚、当記事で紹介する内容は、すべて「ガルーン」のオンプレミス版を前提としております。
「クラウド版」のガルーンでは対応していない機能もあるかと思います。
ご了承ください。
ガルーンをカスタマイズせずに利用するのはもったいない!
簡単なプログラミング技術とちょっとした工夫で、ガルーンはもっと便利になりますよ!
ガルーンのカスタマイズや他システム連携で活用できる機能
当項では、ガルーンに備わっているカスタマイズ関連の機能や、他システム連携で活用できる機能を紹介していきます。
これらの機能を上手く利用することで、ガルーン自体の使い勝手を大きく向上したり運用の手間を大幅に軽減することができます。
SOAP APIとREST API
一般的に「API」とは「アプリケーション・プログラミング・インターフェース(Application Programming Interface)」の略称であり、パッケージソフトやSaaSなどのアプリケーションに対して、データの受け渡しやデータ登録などの処理を異なるアプリケーションから行えるようにするための接続口を提供する仕組みのことを指します。
今回のガルーンであれば、ガルーン内部のデータをガルーン以外のアプリケーションから取得したりデータを登録するための機能が「SOAP API」及び「REST API」です。
ガルーンが提供しているAPIでは、大きく分けて以下の種類があります。
- SOAP API
- REST API
- JavaScript API
三つ目の「JavaScript API」については、次項で紹介します。
SOAP APIとREST APIは、APIの設計方式が異なります。
「REST(Representational State Transfer)」はAPIの設計思想であり、「SOAP(Simple Object Access Protocol)」はプロトコルです。
仕様の細かい違いは割愛しますが、具体的には以下のような違いがあります。
- データフォーマットはXML
- メッセージサイズが大きく負荷が高い
- データの信頼性が高い
- マルチフォーマット※一般的にはJSON
- メッセージサイズが小さく負荷が低い
- ステートレス
- 扱いが容易
ガルーンでは、SOAP APIとREST APIがそれぞれ用意されていますが、同じ機能がそれぞれのAPIで利用できるわけではなく、SOAP APIとREST APIで利用できる機能に差があります。
データの登録や更新、削除をするAPIについては、SOAP APIの方が充実しています。
詳しくは以下のリンク先をご一読ください。
この「SOAP API」と「REST API」を上手く利用することで、例えば自社の基幹システムからガルーンのAPIと呼び出して、データの受け渡しを自動化したり、ガルーン内のユーザーの登録や情報の変更といった日常的に発生するメンテナンス作業を自動化させることができるようになります。
また、このAPIを利用するには、何らかのプログラミング言語の知識が必要になります。
JavaScript API
ガルーンでは、各画面のイベントを取得したり画面内の各項目の値や現在ガルーンを操作しているユーザーの情報を取得するといった、ガルーン独自のJavaScript関数が用意されており、それらを活用することでガルーン標準の各機能に対して様々なカスタマイズを行えます。
前述した「SOAP API」と「REST API」は、外部のアプリケーションからガルーンのAPIを呼び出して利用しますが、JavaScript APIでは、ガルーンで用意された関数を組み込んだJavaScriptのファイル(jsファイル)をガルーンに登録することで、そのJavaScriptがガルーン内で有効になります。
また、そのJavaScriptを有効にするログインユーザーをグループで指定することもできます。
詳しくは以下のリンク先をご一読ください。
このJavaScript APIを利用することで、特定のグループがメッセージを送信した場合にブラウザ上で何らかのポップアップを表示したり、ログインユーザーごとにワークフローの入力項目に固定の値を挿入し、その値を利用して承認経路を切り替えるといった複雑な制御をすることが可能です。
また、JavaScriptは、ガルーン全体に適用させることもできますし、「メッセージ」や「スケジュール」、「ワークフロー」など特定の機能に限定して適用することも可能です。
JavaScriptと同様に、CSSもガルーン全体や特定の機能に対して適用する機能もあるため、Webの知識があれば、それらの機能を活用することで、ガルーンの使い勝手を向上させたり、デザインなどを柔軟に変更することも可能です。
ポートレット
「ポートレット」とは、ガルーンの各機能を分離して「ポータル」と呼ばれるトップページ内に自由に配置できる機能です。
通常は、ガルーンに標準で組み込まれているポートレットをポータルに内に配置して、ガルーン内のトップページ(ポータル)を作りますが、ポートレットは管理者が独自に機能やコンテンツを作成してガルーン内に登録することができます。
独自に作成したポートレットを上手く活用することで、ガルーン内で様々な機能をユーザーに提供できるようになります。
独自に作ることができる「ポートレット」機能には、静的なコンテンツを作るための「HTMLポートレット」と、動的なコンテンツを作るための「PHPポートレット」の二種類が用意されています。
特に「PHPポートレット」では、名前の通りPHPを使用してコンテンツを作成できるため、例えば、ガルーンのサーバー上のCSVファイルなどを読み込んで、そのデータをJavaScriptに渡して、チャート生成ライブラリなどを利用してコーポレット内のグラフィカルなグラフを表示させるといった連携が可能です。
また、「HTMLポートレット」では、静的なHTMLを記述できますが、HTMLでリストボックスやコマンドボタンなどを配置し、リストを選択してボタンを押すと、「ファイル管理」内のファイルをダウンロードさせるといったコンテンツを作ることができます。
ワークフローの申請データ自動書き出し
ガルーンの「ワークフロー」機能では、最終承認が完了した申請データを、サーバー上の特定のディレクトリにCSV形式のファイルで自動的に出力する機能があります。
申請データ一件毎に一つのCSVファイルを自動的に作成し、出力対象のデータ項目も申請フォームの設定画面から指定することができます。
ワークフローのデータを元に、異なるシステムとデータ連携をしようとした場合、前述したSOAP APIやREST APIを活用することもできますが、このワークフローの自動CSV書き出し機能を有効にしておけば、承認が完了した申請データを所定のディレクトリに自動的に吐き出してくれるため、別で作成したバッチ処理などで、そのCSVファイルを読み込んでデータ連携をするといった活用が可能です。
Web APIを利用したシステム連携の場合、APIを活用するためには高度なプログラミングの知識が必要になりますが、この「申請データ自動書き出し機能」を上手く活用できれば、高度なプログラミングの知識を使わなくてもシステム連携をすることが可能です。
実際の実装例の紹介と簡単な実装方法
当項では、上記で紹介した様々なガルーンの機能を活用し、実際にどのように利用しているのかの実装例と、併せて簡単な実装方法の解説をしていきます。
ガルーンのユーザー情報メンテナンス自動化
ガルーン内のユーザーの新規登録や、登録内容の変更、削除をSOAP APIを活用して自動化、無人化できます。
実際に私が勤めている会社のシステム連携イメージを以下で掲載します。
このような仕組みを構築してあるため、ガルーン内のユーザーを手動で登録したり、変更や削除をすることは滅多にありません。
尚、当ブログでは、ガルーンのSOAP APIをVBAやVBScriptから利用して、ガルーンのユーザー登録を行う方法を記事にしております。
良ければ以下の記事もご一読ください。
私もこの記事でまとめた実装方法をそのまま利用して上記のシステム連携を構築しております。
ガルーンのメッセージ送信自動化
ガルーンでは、他のユーザーとやり取りをしたり、複数のユーザーに対して一斉に連絡をする場合、「メッセージ」機能を使います。
グループウェアとしてなくてはならない機能の一つですが、このメッセージの送信もSOAP API利用することで自動化することができます。
私の会社では、メッセージ送信APIを業務システムなどに組み込んでガルーンと連携させるような使い方はしておりませんが、メッセージ自体は汎用的な機能であるため、このAPIを上手く利用することで、ユーザーへの通知や連絡などの業務を自動化させることが可能です。
当ブログでは、過去にガルーンのメッセージをAPIを利用して送信する具体的な実装方法を記事で紹介しております。
ご興味があれば以下のリンクからご一読ください。
ユーザー情報の値をワークフローの申請画面で読み込む
「JavaScript API」を利用することで、例えば、ログインしているユーザーのユーザー情報の特定の値を、ワークフローの申請画面で読み込ませることもできます。
実装例としては以下です。
garoon.events.on('workflow.request.create.show', (event) => {
// ログインユーザー情報の取得
var users = garoon.base.user.getLoginUser();
// eventオブジェクトのデータを取得
var requests = event.request;
// ガルーンIDを項目コード:txt_grnidに代入
requests.items.txt_grnid.value = users.garoonId;
return event;
});
上記のスクリプトは、ワークフローの申請画面を開いたイベント時に、現在ログインしているユーザー情報から、ガルーン内部で保持しているユーザーIDを取得して、その値をワークフローの入力項目に代入する処理になります。
具体的には、1行目の「garoon.events.on」がガルーンで用意しているイベントを取得し、その引数として渡している「’workflow.request.create.show’」でワークフローの新規申請画面を開いた際のタイミングを指定しています。
また、4行目の「garoon.base.user.getLoginUser()」は現在ガルーンにログインしている申請者自身のユーザー情報を取得する関数を実行しており、それをオブジェクトで受け取ります。
6行目でワークフローの申請画面読み込み時のオブジェクトを取得しています。
8行目では、4行目で取得したユーザー情報のなかから、garoonIdを指定して、申請画面内に作ってある項目コード:txt_grnidに対して代入しています。
10行目でイベントハンドラーをreturnすることで、画面内に上記処理を反映させています。
このスクリプトをワークフロー内の申請フォーム個別に登録すれば、その申請フォームのみに反映されます。
すべての申請フォームに反映させたい場合は、
からスクリプトファイルを登録することで、全体に反映されます。
尚、JavaScript APIの「getLoginUser()」関数でどの様なユーザー情報が取得できるかは以下のリンク先をご参照ください。
当関数で取得できる情報は限られていますが、例えばユーザー情報の「メールアドレス」や「URL」、「電話番号」などで使用していない項目があれば、そこに何らかの別の値を格納しておき、JavaScript APIでその値を読み込んで、ワークフローの申請画面の入力項目に自動的にセットされるようにしておきます。
そのセットされた値を分岐条件にして、申請者ごとに承認経路を分岐するといったカスタマイズが可能になります。
ユーザー情報を読み込むだけなら、申請フォームを作成する際に、入力項目の設定値に、ユーザー情報を読み込む設定を入れることで、JavaScript APIを使わなくても読み込むことができますが、JavaScriptを利用することで、読み込んだユーザー情報をsplit関数などで分割して配列として受け取ることができたら、スクリプト内で複雑な分岐処理をさせることも可能になるため、より高度な制御を実装することが可能になります。
是非チャレンジしてみてください。
ポートレットでファイルダウンロード用リストボックスを作成する
HTMLポートレットやPHPポートレットで、ファイル管理にアップロードされたファイルをポートレット内に作成したリストボックスに表示させ、選択したファイルをダウンロードボタンからダウンロードされるといったコンテンツを作成するこができます。
尚、当コンテンツの実装方法は、過去に当ブログの記事で紹介しており、その記事のリンク先は以下になります。
この過去の記事では具体的な活用例までは掲載しておりませんが、私が勤める会社では、前述した「ファイル管理内にファイルを自動的にアップロードする」の項で紹介した自動ファイルアップロードと、このポートレットを組み合わせて以下のような構成を組んであります。
まず、右上のマクロ付きExcelファイル(xlsm)のVBAを利用して、データベースからデータを取得しデータ集計表を作成します。
作成したデータ集計表を元に値貼りしたExcelファイル(xlsx)を生成して、所定の場所に出力します。
その後、別で作成してあるバッチファイルからガルーンのSOAP APIを利用して、ガルーンのファイル管理上にExcelファイルをアップロードします。
そのアップロードされたファイルのダウンロード用URLを、コーポレット内のhtmlで作成したボタンのリンク先として組み込んでおくことで、ユーザーはファイル管理上の特定のファイルをコーポレット内のボタンを押下することでダウンロードできるようになります。
コーポレット内にボタンを配置しつつ、更にセレクトボックスを作り、そのセレクトボックスで選択したファイルをダウンロードさせるといった実装も可能です。
因みに、もしファイル管理内のファイルではなく、ガルーンサーバー内の特定のディレクトリに配置されているファイルをダウンロードさせたい場合は、PHPポートレットで、サーバー内のディレクトリを参照して取得する処理を記述することが必要になります。
ただし、その場合は実装の難易度も若干上がることもあり、実装が比較的容易なファイル管理連携方式での実装をお勧めいたします。
ワークフローの承認が済んだデータをバッチで基幹側DBに登録
当記事内で紹介しましたが、ガルーンのワークフローには、最終承認が完了した申請データを自動的にCSVファイルで出力してくれる機能があります。
ワークフローの申請フォームごとに自動出力するか否かを設定することができて、出力する項目も指定することが可能です。
また、出力先はガルーンが稼働するサーバー内の所定のディレクトリです。
最終承認が完了したら都度出力されるため、申請データ1件につき1ファイルで出力されます。
よって、この出力されたCSVファイルを自作したバッチプログラムなどで取り込むことで、異なるシステム間のデータ連携が容易に実装できます。
当記事では、PowerShellを使って、ワークフローから出力されたCSVファイルを取り込む処理の簡単なサンプルコードも紹介しておきます。
# ワークフローcsv出力先ディレクトリ
$garoonCsvDirPath = "指定したcsvの出力先ディレクトリ"
# ワークフローcsv出力先ディレクトリにファイルが存在するか判定し、存在しなければ処理を終了
$csvFiles = Get-ChildItem -Path $garoonCsvDirPath -Filter *.csv
if ($csvFiles.Count -eq 0) {
# csvが存在しないため処理を終了
exit
}
# 取得したcsvファイルの数分繰り返します。
foreach ($csvFile in $csvFiles) {
# csvファイル全体を読み込む
$content = Get-Content $csvFile.FullName -Raw
# 配列を初期化
$line = @()
# 改行を除外して、読み込んだ行を配列に格納します。
$contentWithoutNewlines = $content -replace "`r`n|`r|`n", ""
$line = $contentWithoutNewlines -split '","'
# 配列に格納したデータを使用し、以降で必要な処理を実装します。
#
#
}
上記のコードはヘッダーが無いデータを想定しています。
また、データに改行が含まれている場合は除去します。
後、ガルーンのワークフローのCSVフォーマットは、カンマ区切り且つダブルクォーテーション囲いのため、その条件を指定して配列化させています。
ただし、上記のコードだと行の先頭と末尾のダブルクォーテーションは残る為、必要により別途除去処理を入れる必要があります。
私の会社では、ワークフローの一部のフォームで自動CSV出力機能を有効にしておき、それらを取り込んで基幹システムで使用しているデータベースに更新を掛けるといった処理を実装したバッチ処理をPowerShellなどで作成して運用しています。
以下のようなシステム構成のイメージです。
自動的にCSVファイルを出力するだけというシンプルな機能ですが、その分工夫をすることで色々と活用することが可能です。
是非活用方法を考えて試してみてください。
最後に
今回の記事では、サイボウズ社のグループウェアである「ガルーン」のカスタマイズや他システム連携で利用できる機能の紹介をしつつ、私が実際に自社で稼働しているガルーンに対して行っているカスタマイズ例を紹介してみました。
聞くところによると、ガルーンを利用している企業の多くは、今回の記事で紹介したようなカスタマイズをせずに利用しているとのことです。
この記事で紹介したように、ガルーンには様々なカスタマイズ用の機能が用意されており、記事の冒頭でも記載しましたが、ガルーンをカスタマイズせずに利用するのはもったいないです。
ガルーンを運用しているシステム管理者の方々には、今回の記事を参考にしていただき、是非積極的にカスタマイズにチャレンジして頂けますと幸いです。
今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!