以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
[第一の実施形態]
<システム構成>
まず、本実施形態に係る情報処理システム1のシステム構成について、図1を参照しながら説明する。図1は、本実施形態に係る情報処理システム1の一例のシステム構成を示す図である。
図1に示す情報処理システム1は、サービス提供システム10と、機器20と、外部ストレージシステム30とを含み、インターネット等の広域的なネットワークN1を介して通信可能に接続されている。
サービス提供システム10は、一台以上の情報処理装置で実現され、ネットワークN1を介して、クラウドサービス等の外部サービスと連携した各種のサービスを提供する。本実施形態に係るサービス提供システム10が提供するサービスの具体例については後述する。
なお、本実施形態では、外部サービスの具体例としてクラウドサービスを採用して説明するが、これに限られない。本実施形態は、例えば、ASP(Application Service Provider)によって提供されるサービスやWebサービス等のネットワークを介して提供される各種の外部サービスに関して適用されても良い。
機器20は、ユーザが使用する各種の電子機器である。すなわち、機器20は、例えば、MFP(Multifunction Peripheral)等の画像形成装置、PC(パーソナルコンピュータ)、プロジェクタ、電子黒板、デジタルカメラ等である。ユーザは、機器20を用いて、サービス提供システム10が提供する各種のサービスを利用することができる。
なお、以降では、複数の機器20について、各々を区別するときは、「機器201」、「機器202」等と添え字を用いて記載する。
外部ストレージシステム30は、ネットワークN1を介してストレージサービス(又はオンラインストレージ)と呼ばれるクラウドサービスを提供するコンピュータシステムである。ストレージサービスとは、外部ストレージシステム30のストレージの記憶領域を貸し出すサービスである。
なお、以降では、複数の外部ストレージシステム30について、各々を区別するときは、「外部ストレージシステム301」、「外部ストレージシステム302」等と添え字を用いて記載する。また、外部ストレージシステム301により提供されるストレージサービスの名称を「ストレージA」、外部ストレージシステム301により提供されるストレージサービスの名称を「ストレージB」等とする。
なお、外部ストレージシステム30は、複数台の情報処理装置によって実現されるシステムであっても良い。
また、図1に示す情報処理システム1の構成は一例であって、他の構成であっても良い。例えば、本実施形態に係る情報処理システム1には、電子データの入力及び出力の少なくとも一方を行う各種機器が含まれ、これらの機器がサービス提供システム10により提供される各種サービスを利用しても良い。
<ハードウェア構成>
次に、本実施形態に係る情報処理システム1に含まれるサービス提供システム10のハードウェア構成について、図2を参照しながら説明する。図2は、本実施形態に係るサービス提供システム10の一例のハードウェア構成を示す図である。
図2に示すサービス提供システム10は、入力装置11と、表示装置12と、外部I/F13と、RAM(Random Access Memory)14とを有する。また、サービス提供システム10は、ROM(Read Only Memory)15と、CPU(Central Processing Unit)16と、通信I/F17と、HDD(Hard Disk Drive)18とを有する。これらの各ハードウェアは、それぞれがバスBで接続されている。
入力装置11は、キーボードやマウス、タッチパネル等を含み、ユーザが各操作信号を入力するのに用いられる。表示装置12は、ディスプレイ等を含み、サービス提供システム10による処理結果を表示する。なお、入力装置11及び表示装置12の少なくとも一方は、必要なときにサービス提供システム10に接続して利用する形態であっても良い。
通信I/F17は、サービス提供システム10をネットワークN1に接続するインタフェースである。これにより、サービス提供システム10は、通信I/F17を介して通信を行うことができる。
HDD18は、プログラムやデータを格納している不揮発性の記憶装置である。HDD18に格納されるプログラムやデータには、サービス提供システム10全体を制御する基本ソフトウェアであるOS(Operating System)、OS上において各種機能を提供するアプリケーションソフトウェア等がある。
なお、サービス提供システム10は、HDD18に代え、記憶媒体としてフラッシュメモリを用いるドライブ装置(例えばソリッドステートドライブ:SSD)を利用するものであっても良い。また、HDD18は、格納しているプログラムやデータを所定のファイルシステム及び/又はDBにより管理している。
外部I/F13は、外部装置とのインタフェースである。外部装置には、記録媒体13a等がある。これにより、サービス提供システム10は、外部I/F13を介して記録媒体13aの読み取りや書き込みを行うことができる。記録媒体13aには、フレキシブルディスク、CD、DVD、SDメモリカード、USBメモリ等がある。
ROM15は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ROM15には、サービス提供システム10の起動時に実行されるBIOS(Basic Input/Output System)、OS設定、及びネットワーク設定等のプログラムやデータが格納されている。RAM14は、プログラムやデータを一時保持する揮発性の半導体メモリである。
CPU16は、ROM15やHDD18等の記憶装置からプログラムやデータをRAM14上に読み出し、処理を実行することで、サービス提供システム10全体の制御や機能を実現する演算装置である。
本実施形態に係るサービス提供システム10は、図2に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
次に、本実施形態に係る情報処理システム1に含まれる機器20が画像形成装置である場合のハードウェア構成について、図3を参照しながら説明する。図3は、本実施形態に係る機器20の一例のハードウェア構成を示す図である。
図3に示す機器20は、コントローラ21と、操作パネル22と、外部I/F23と、通信I/F24と、スキャナ25とを有する。また、コントローラ21は、CPU31と、RAM32と、ROM33と、NVRAM34と、HDD35とを有する。
ROM33は、各種プログラムやデータを格納している不揮発性の半導体メモリである。RAM32は、プログラムやデータを一時保持する揮発性の半導体メモリである。NVRAM34は、例えば設定情報等を格納している。また、HDD35は、各種プログラムやデータを格納している不揮発性の記憶装置である。
CPU31は、ROM33やNVRAM34、HDD35等からプログラムやデータ、設定情報等をRAM32上に読み出し、処理を実行することで、機器20全体の制御や機能を実現する演算装置である。
操作パネル22は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている。外部I/F23は、外部装置とのインタフェースである。外部装置には、記録媒体23a等がある。これにより、機器20は、外部I/F23を介して記録媒体23aの読み取り及び/又は書き込みを行うことができる。なお、記録媒体23aには、例えば、ICカード、フレキシブルディスク、CD、DVD、SDメモリカード、USBメモリ等がある。
通信I/F24は、機器20をネットワークN2に接続するインタフェースである。これにより、機器20は、通信I/F24を介して通信を行うことができる。スキャナ25は、原稿を読み取って電子ファイル(画像ファイル)を生成する読取装置である。
本実施形態に係る機器20は、図3に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
<サービス提供システムが提供するサービス>
ここで、本実施形態に係るサービス提供システム10が提供するサービスについて説明する。なお、以降では、機器20が画像形成装置であるものとして説明する。
本実施形態に係るサービス提供システム10は、機器20において原稿をスキャンして生成された電子ファイルに含まれるバーコードを、バーコード認識処理により読み取る。その後、本実施形態に係るサービス提供システム10は、当該認識処理における認識結果に応じた外部ストレージシステム30に当該電子ファイルを保存した上で、保存先URL(Uniform Resource Locator)をメール配信するサービスを提供する。
本実施形態に係るサービス提供システム10は、上述したサービス(以降では、「コード配信」サービス、又は、単に「コード配信」とも表す。)を提供する。
ただし、サービス提供システム10により提供されるサービスは、これに限られない。例えば、サービス提供システム10は、電子ファイルに含まれるQRコード(登録商標)をQRコード認識処理により読み取って、当該認識処理における認識結果に応じた外部ストレージシステム30に当該電子ファイルを保存するサービスを提供しても良い。
また、例えば、サービス提供システム10は、外部ストレージシステム30から取得(ダウンロード)した電子ファイルに含まれるバーコードを、バーコード認識処理により読み取って、当該認識処理における認識結果に応じた機器20で印刷するサービスを提供しても良い。
なお、本実施形態に係るサービス提供システム10により提供される「コード配信」サービスでは、外部ストレージシステム30によって貸し出される記憶領域に、機器20においてスキャンして生成された電子ファイルが保存(アップロード)される。
<機能構成>
次に、本実施形態に係る情報処理システム1の機能構成について、図4を参照しながら説明する。図4は、本実施形態に係る情報処理システム1の一例の機能構成を示す図である。
図4に示す機器20は、例えばCPU31等により実行されるブラウザ210を有する。機器20のユーザは、ブラウザ210を介して、サービス提供システム10が提供するサービスを利用することができる。このように、本実施形態に係る機器20は、ブラウザ210が搭載されていれば良い。
図4に示すサービス提供システム10は、入出力サービス処理部110と、Webサービス処理部120と、ドキュメントサービス部130と、外部サービス連携部140とを有する。これら各部は、サービス提供システム10にインストールされた1以上のプログラムが、CPU16に実行させる処理により実現される。
また、図4に示すサービス提供システム10は、アプリ情報記憶部150と、画面情報記憶部160と、リソース管理情報記憶部170とを有する。これら各記憶部は、HDD18により実現可能である。なお、アプリ情報記憶部150、画面情報記憶部160、及びリソース管理情報記憶部170の少なくとも1つの記憶部が、サービス提供システム10とネットワークN1を介して接続される記憶装置等により実現されていても良い。
入出力サービス処理部110は、サービス提供システム10が提供するサービスに関する処理を行う。ここで、入出力サービス処理部110は、アプリ管理部111と、ロジック処理部112と、データI/F部113とを有する。
アプリ管理部111は、アプリ情報記憶部150に記憶されているアプリ情報1000を管理する。なお、アプリ情報1000とは、各種のサービスを提供するアプリケーションである。すなわち、サービス提供システム10が提供する各種のサービスは、アプリ情報1000により提供される。
また、アプリ管理部111は、ロジック処理部112からの要求に応じて、アプリ情報1000に含まれる処理フロー情報1100を返信する。なお、処理フロー情報1100は、アプリ情報1000により提供されるサービスを実現する一連の処理(以降では、一連の処理を「処理フロー」とも表す。)が定義された情報である。
ロジック処理部112は、Webサービス処理部120からの要求に応じて、アプリ管理部111から処理フロー情報1100を取得する。そして、ロジック処理部112は、取得した処理フロー情報1100に基づいて、サービスを実現する処理フローを実行する。これにより、本実施形態に係る情報処理システム1では、サービス提供システム10により各種のサービスが提供される。なお、ロジック処理部112の詳細については後述する。
データI/F部113は、Webサービス処理部120からの要求に応じて、外部サービス連携部140のデータ処理部142に各種の要求を行う。例えば、データI/F部113は、外部サービス連携部140のデータ処理部142にフォルダ一覧の取得要求を行う。
Webサービス処理部120は、ブラウザ210からの要求に応じて、画面情報記憶部160に記憶されている画面情報2000を返信する。なお、画面情報2000は、ブラウザ210に表示される画面を定義した情報であり、例えばHTML(HyperText Markup Language)やCSS(Cascading Style Sheets)等の形式で定義されている。
これにより、機器20の操作パネル22には、ブラウザ210により、サービス提供システム10が提供するサービスを選択するためのサービス一覧画面や、サービスを利用するためのサービス画面等が表示される。
また、Webサービス処理部120は、ブラウザ210からの要求に応じて、入出力サービス処理部110に各種の要求を行う。例えば、Webサービス処理部120は、ブラウザ210からの要求に応じて、「コード配信」サービスを実現する処理フローの実行要求を、入出力サービス処理部110のロジック処理部112に行う。
ドキュメントサービス部130は、処理フロー情報1100に基づく一連の処理(処理フロー)に含まれる処理を実行する。ここで、ドキュメントサービス部130は、コード認識部131と、メール配信部132とを有する。
コード認識部131は、電子ファイルに含まれる所定のコード(例えば、バーコードやQRコード等)をコード認識処理により読み取って、認識結果を取得する。なお、認識結果とは、例えば、バーコードやQRコード等を読み取ることで取得される情報(例えば、英数字や記号等を含む文字列等)である。
メール配信部132は、電子ファイルを添付したメールを作成して、当該メールを指定されたメールアドレス宛に配信する。
なお、ドキュメントサービス部130は、例えば、電子ファイルのデータ形式を所定のデータに変換するデータ変換部、電子ファイルを圧縮又は解凍する圧縮・解凍部等を有していても良い。
このように、ドキュメントサービス部130には、一連の処理(処理フロー)に含まれる処理を実行する種々の機能部が含まれる。したがって、ドキュメントサービス部130は、これら種々の機能を提供するプログラム(モジュール)群により実現される。
外部サービス連携部140は、ロジック処理部112やデータI/F部113からの要求に応じて、外部ストレージシステム30に各種の要求を行う。
本実施形態に係るサービス提供システム10は、外部ストレージシステム30毎に、当該外部ストレージシステム30に対応する外部サービス連携部140を有する。すなわち、本実施形態に係るサービス提供システム10は、外部ストレージシステム301に各種の要求を行うための外部サービス連携部1401、外部ストレージシステム302に各種の要求を行うための外部サービス連携部1402等を有する。
このように、本実施形態に係るサービス提供システム10は、当該サービス提供システム10と連携して処理を行う外部ストレージシステム30毎に、それぞれ対応する外部サービス連携部140を有する。なお、以降では、複数の外部サービス連携部140について、各々を区別するときは、上記のように、「外部サービス連携部1401」、「外部サービス連携部1402」等と添え字を用いて記載する。
ここで、外部サービス連携部140は、ロジック処理部112からの要求を受信するファイル処理部141と、データI/F部113からの要求を受信するデータ処理部142とを有する。
ファイル処理部141は、外部ストレージシステム30に保存されている電子ファイルに対する操作(例えば、取得、保存、編集等)を行うためのAPI(Application Programming Interface)が定義された共通I/F1411及び固有I/F1412を有する。
共通I/F1411は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(a)に示すAPIが挙げられる。すなわち、ファイル処理部141の共通I/F1411は、全ての外部ストレージシステム30が利用できるファイル操作に関する機能(例えば、電子ファイルの取得、保存等)を利用するためのAPI群である。
一方、固有I/F1412は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(b)に示すAPIが挙げられる。すなわち、ファイル処理部141の固有I/F1412は、特定の外部ストレージシステム30において利用できるファイル操作に関する機能(例えば、電子ファイルの編集等)を利用するためのAPI群である。
したがって、共通I/F1411は、全ての外部サービス連携部140に対して同様に定義される。一方で、固有I/F1412は、当該固有I/F1412で定義されるAPIが利用可能な特定の外部ストレージシステム30に対応する外部サービス連携部140に対して定義される。
また、データ処理部142は、外部ストレージシステム30に保存されている電子ファイルの書誌情報等のメタデータ(例えば、ファイル一覧やフォルダ一覧等)を取得等するためのAPIが定義された共通I/F1421及び固有I/F1422を有する。
共通I/F1421は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(c)に示すAPIが挙げられる。すなわち、データ処理部142の共通I/F1421は、全ての外部ストレージシステム30で利用できるメタデータ取得等の機能(例えば、ファイル一覧やフォルダ一覧の取得等)を利用するためのAPI群である。
一方、固有I/F1422は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(d)に示すAPIが挙げられる。すなわち、データ処理部142の固有I/F1422は、特定の外部ストレージシステム30において利用できるメタデータ取得等の機能(例えば、画像ファイル一覧の取得等)を利用するためのAPI群である。
したがって、共通I/F1421は、全ての外部サービス連携部140に対して同様に定義される。一方で、固有I/F1422は、当該固有I/F1422で定義されるAPIが利用可能な特定の外部ストレージシステム30に対応する外部サービス連携部140に対して定義される。
このように、本実施形態に係るサービス提供システム10は、当該サービス提供システム10と連携して処理を行う外部ストレージシステム30毎に、それぞれの外部ストレージシステム30に対応する外部サービス連携部140を有する。このため、例えば、サービス提供システム10の連携先となる外部ストレージシステム30を追加や削除(以降、「追加等)と表す。)する場合には、この外部ストレージシステム30に対応する外部サービス連携部140を追加等すれば良い。
したがって、本実施形態に係るサービス提供システム10では、連携先となる外部ストレージシステム30の追加等に伴う影響を局所化することができる。換言すれば、本実施形態に係るサービス提供システム10では、他の機能構成(例えば、入出力サービス処理部110やWebサービス処理部120等)に影響を与えることなく、連携先となる外部ストレージシステム30の追加等を行うことができる。
このため、本実施形態に係るサービス提供システム10では、当該サービス提供システム10の連携先となる外部ストレージシステム30を追加等した場合における開発工数を削減することができる。なお、外部サービス連携部140の追加等は、SDK(Software Development Kit)を用いて行うことができる。
また、外部サービス連携部140は、共通I/F1411と固有I/F1412とを異なるモジュール等により実現している。また、共通I/F1411と固有I/F1412で定義されるAPIは、外部サービス名(ストレージサービスの名称)を指定することで利用することができる(すなわち、「外部サービス名」が可変部分となっている。)。
したがって、本実施形態に係るサービス提供システム10では、当該サービス提供システム10の連携先となる外部ストレージシステム30を追加する場合には、他の外部サービス連携部140に含まれる共通I/F1411を再利用することができる。換言すれば、連携先となる外部ストレージシステム30を追加する場合には、固有I/F1412のみ開発すれば良い。これにより、本実施形態に係るサービス提供システム10では、連携先となる外部ストレージシステム30を追加する場合における開発工数をさらに削減することができる。なお、このことは共通I/F1421と固有I/F1422に関しても同様である。
アプリ情報記憶部150は、アプリ情報1000を記憶する。アプリ情報1000は、当該アプリ情報1000(アプリケーション)を一意に識別するアプリIDと関連付けてアプリ情報記憶部150に記憶されている。
ここで、アプリ情報1000には、処理フロー情報1100が含まれる。例えば、「コード配信」サービスを提供するアプリ情報1000には、当該サービスを実現する一連の処理が定義された処理フロー情報1100が含まれる。
なお、アプリ情報1000には、2以上の処理フロー情報1100が含まれていても良い。例えば、「コード配信」サービスを提供するアプリ情報1000には、バーコード認識処理を行って電子ファイルを保存する処理フロー情報1100Aと、QRコード認識処理を行って電子ファイルを保存する処理フロー情報1100Bとが含まれても良い。
処理フロー情報1100は、上述したように、アプリ情報1000により提供されるサービスを実現する一連の処理(処理フロー)が定義された情報である。なお、処理フロー情報1100の詳細については後述する。
画面情報記憶部160は、画面情報2000を記憶する。画面情報2000は、上述したように、ブラウザ210に表示される画面を定義した情報である。なお、アプリ情報1000により提供されるサービスを利用するためのサービス画面の画面情報2000は、当該アプリ情報1000のアプリIDと関連付けて画面情報記憶部160に記憶されている。
リソース管理情報記憶部170は、処理フロー情報1100に基づく一連の処理に用いられるパラメータや当該一連の処理に含まれる各処理の処理結果等を管理するリソース管理情報170Dを記憶する。なお、リソース管理情報170Dの詳細については後述する。
ここで、ロジック処理部112の詳細な機能構成について、図6を参照しながら説明する。図6は、本実施形態に係るロジック処理部112の一例の機能構成を示す図である。
図6に示すロジック処理部112は、フロー実行部301と、コンポーネント管理部302と、コンポーネント群303と、型変換管理部304と、型変換群305と、リソース管理部306とを有する。また、ロジック処理部112は、型変換情報テーブル3000を有する。
フロー実行部301は、Webサービス処理部120を介して、ブラウザ210から処理実行要求を受信すると、アプリ情報1000に含まれる処理フロー情報1100をアプリ管理部111から取得する。そして、フロー実行部301は、取得した処理フロー情報1100に基づく一連の処理(処理フロー)を実行する。
ここで、処理フロー情報1100に基づく一連の処理は、当該一連の処理に含まれる各処理を実行するためのコンポーネントを組み合わせることにより実行される。なお、コンポーネントは、所定の機能を提供するプログラムやモジュール等により実現され、例えばクラスや関数等で定義される。
また、フロー実行部301は、処理フロー情報1100を取得すると、リソース管理部306を介して、当該処理フロー情報1100に含まれるパラメータ等をリソース管理情報170Dとしてリソース管理情報記憶部170に保存する。
なお、パラメータとは、一連の処理に含まれる各処理を実行するためのコンポーネントが用いる各種情報のことである。
コンポーネント管理部302は、コンポーネントを管理する。コンポーネント管理部302は、フロー実行部301からの要求に応じて、コンポーネントを生成すると共に、生成したコンポーネントをフロー実行部301に返信する。なお、コンポーネントの生成とは、例えばクラスや関数等で定義されたコンポーネントを、メモリ(例えばRAM14)上に展開することである。
コンポーネント群303は、コンポーネントの集合である。コンポーネント群303には、分岐コンポーネント401と、バーコード認識コンポーネント402と、ストレージA配信コンポーネント403と、ストレージB配信コンポーネント404と、メール配信コンポーネント405とを有する。
分岐コンポーネント401は、処理フローに含まれる処理の分岐を制御するためのコンポーネントである。バーコード認識コンポーネント402は、電子ファイルに含まれるバーコードの認識処理を行うためのコンポーネントである。
ストレージA配信コンポーネント403は、外部ストレージシステム301(ストレージA)に電子ファイルを保存(アップロード)するためのコンポーネントである。ストレージB配信コンポーネント404は、外部ストレージシステム302(ストレージB)に電子ファイルを保存(アップロード)するためのコンポーネントである。メール配信コンポーネント405は、指定されたメールアドレス宛にメール配信するためのコンポーネントである。
なお、コンポーネント群303には、これら以外にも、例えば、電子ファイルにOCR(Optical Character Recognition)を行うためのコンポーネント、電子ファイルの圧縮するための圧縮コンポーネント等の各種のコンポーネントが含まれる。
また、コンポーネント群303に含まれる各コンポーネントは、コンポーネント共通I/F400を有する。コンポーネント共通I/F400は、各コンポーネントに対して共通に定義されたAPIであり、コンポーネントを生成するためのAPIと、コンポーネントの処理を実行するためのAPIとが含まれる。
このように、各コンポーネントがコンポーネント共通I/F400を有することで、コンポーネントの追加等に伴う影響を局所化することができる。すなわち、例えば、フロー実行部301やコンポーネント管理部302等に影響を与えることなく、コンポーネントの追加等を行うことができる。これにより、本実施形態に係るサービス提供システム10では、所定の機能の追加等(すなわち、当該機能を実現する処理を実行するためのコンポーネントの追加等)に伴う開発工数を削減することができる。
なお、コンポーネント管理部302は、例えば、サービス提供システム10の起動時に、コンポーネント共通I/F400により、コンポーネント群303に含まれる各コンポーネントを生成しても良い。
型変換管理部304は、データ型の型変換を管理する。ここで、各コンポーネントは、自身が扱えるデータ型が予め決まっている。したがって、型変換管理部304は、コンポーネントからの要求に応じて、例えば図7に示す型変換情報テーブル3000を参照して、型変換群305に含まれる型変換を生成する。
そして、型変換管理部304は、生成された型変換に型変換処理の実行を要求する。なお、型変換は、データ型の型変換処理を実行するプログラムやモジュール等により実現され、例えばクラスや関数等で定義される。また、型変換の生成とは、例えばクラスや関数等で定義された型変換を、メモリ(例えばRAM14上)に展開することである。
なお、データ型には、例えば、ストリームデータを示すデータ型「InputStream」、記憶装置等に格納されている電子ファイルのパス(アドレス)を示す「LocalFilePath」、及び電子ファイルの実体を示す「File」等が挙げられる。
ここで、型変換情報テーブル3000について、図7を参照しながら説明する。図7は、型変換情報テーブルの一例を示す図である。
図7に示す型変換情報テーブル3000は、データ項目として、変換前のデータ型と、変換後のデータ型と、生成する型変換とを有する。すなわち、型変換情報テーブル3000に格納されている型変換情報は、変換前のデータ型及び変換後のデータ型毎に、当該変換前のデータ型を、当該変換後のデータ型に変換するための型変換が関連付けられた情報である。
型変換群305は、型変換の集合である。型変換群305には、データ型「InputStream」を「LocalFilePath」に変換するための第1の型変換501が含まれる。なお、型変換群305には、これ以外にも、例えば、データ型「LocalFilePath」を「File」に変換するための第2の型変換等が含まれる。
また、型変換群305に含まれる各型変換は、型変換共通I/F500を有する。型変換共通I/F500は、各型変換に対して共通に定義されたAPIであり、型変換を生成するためのAPIと、型変換の型変換処理を実行するためのAPIとが含まれる。
このように、各型変換が型変換共通I/F500を有することで、型変換の追加等に伴う影響を局所化することができる。すなわち、例えば、型変換管理部304等に影響を与えることなく、型変換の追加等を行うことができる。これにより、本実施形態に係るサービス提供システム10では、型変換の追加等に伴う開発工数を削減することができる。
リソース管理部306は、リソース管理情報記憶部170に記憶されたリソース管理情報170Dを管理する。すなわち、リソース管理部306は、フロー実行部301からの要求に応じて、処理フロー情報1100に基づく一連の処理に用いられるパラメータ等を、リソース管理情報170Dとしてリソース管理情報記憶部170に記憶させる。
ここで、「コード配信」サービスを提供するアプリ情報1000に含まれる処理フロー情報1100について、図8を参照しながら説明する。図8は、本実施形態に係る処理フロー情報1100の一例を示す図である。
図8に示す処理フロー情報1100は、「コード配信」サービスを実現する一連の処理(処理フロー)が定義された情報である。
図8に示す処理フロー情報1100には、処理フロー情報1100を一意に識別する識別情報を示すフローID1101と、処理フロー情報1100の名称を示すフロー名1102とが含まれる。また、処理フロー情報1100には、一連の処理に含まれる各処理の内容が定義されたフロー詳細群1103と、一連の処理に含まれる各処理の接続関係(先行・後続関係)が定義されたフロー関係群1104が含まれる。
フロー詳細群1103には、一連の処理に含まれる各処理をそれぞれ示すフロー詳細1111〜1115が含まれる。各フロー詳細1111〜1115には、フロー詳細群1103において、フロー詳細を一意に識別する「detailName」と、処理を実行するコンポーネントを示す「component」と、当該コンポーネントのパラメータを示す「parameters」とが定義されている。なお、以降では「detailName」を「フロー詳細名」とも表す。
例えば、フロー詳細1111は、バーコード認識コンポーネント402による処理を定義しており、当該フロー詳細1111のフロー詳細名は「detail0」と定義されている。同様に、例えば、フロー詳細1112は、分岐コンポーネント401による処理を定義しており、当該フロー詳細1112のフロー詳細名は「detail1」と定義されている。
このように、各フロー詳細1111〜1115にフロー詳細名が定義されていることにより、一連の処理において、同一のコンポーネントによる処理を、異なる処理として扱うことができる。具体的には、例えば、一連の処理の中に、バーコード認識コンポーネント402による処理が複数含まれている場合でも、それぞれの処理を定義したフロー詳細名を異なる名称とすることで、それぞれの処理を異なる処理として扱うことができる。
フロー関係群1104は、フロー詳細群1103に含まれる各フロー詳細1111〜1115の接続関係(先行・後続関係)が定義された接続関係1121〜1125が含まれる。
例えば、接続関係1121には、「"prev":"detail0"」、「"next:detail1"」と定義されている。これは、「detail0」のフロー詳細1111で定義された処理の次の処理は、「detail1」のフロー詳細1112で定義された処理であることを示している。言い換えれば、接続関係1121は、バーコード認識コンポーネント402の後続のコンポーネント(次のコンポーネント)が、分岐コンポーネント401であることを示している。
同様に、接続関係1122には、「"prev":"detail1"」、「"next:detail2"」と定義されている。これは、「detail1」のフロー詳細1111で定義された処理の次の処理は、「detail2」のフロー詳細1112で定義された処理であることを示している。言い換えれば、接続関係1122は、分岐コンポーネント401の後続のコンポーネント(次のコンポーネント)が、ストレージA配信コンポーネント403であることを示している。
なお、接続関係1123には、「"prev":"detail1"」、「"next:detail3"」と定義されている。したがって、分岐コンポーネント401の後続のコンポーネントは、ストレージA配信コンポーネント403及びストレージB配信コンポーネント404である。
このように、フロー関係群1104には、フロー詳細間の先行・後続関係を定義されている。言い換えれば、フロー関係群1104には、これらのフロー詳細によりそれぞれ定義される各コンポーネント間の先行・後続関係(すなわち、各コンポーネントにより実行される処理の実行順)が定義されている。
ここで、図8に示す処理フロー情報1100に基づく処理フロー(すなわち、「コード配信」サービスを実現する処理フロー)を、図9を示す。図9は、「コード配信」サービスを実現する処理フローの一例を説明するための図である。
図9に示すように、「コード配信」サービスを実現する処理フローでは、分岐コンポーネント401により、ストレージA配信コンポーネント403又はストレージB配信コンポーネント404のいずれかの処理が実行されるように制御される。言い換えれば、分岐コンポーネント401は、ストレージA配信コンポーネント403又はストレージB配信コンポーネント404のいずれかの処理の実行を抑制(スキップ)する。
これにより、「コード配信」サービスを実現する処理フローでは、処理の分岐(すなわち、バーコード認識処理の認識結果に応じて、ストレージAへの配信処理又はストレージBへの配信処理のいずれかの処理に分岐)を実現している。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
以降では、機器20のユーザUが、ブラウザ210を用いて、サービス提供システム10により提供されるサービスを利用する場合の処理について、図10を参照しながら説明する。図10は、本実施形態に係るサービス利用の全体処理の一例を示すシーケンス図である。
ユーザUは、機器20のブラウザ210を用いて、アプリ情報1000により提供されるサービスの一覧を表示させるための表示操作を行う(ステップS1001)。
機器20のブラウザ210は、サービスの一覧を表示させるための表示操作を受け付けると、サービス一覧画面の取得要求を、サービス提供システム10のWebサービス処理部120に送信する(ステップS1002)。
Webサービス処理部120は、サービス一覧画面の取得要求を受信すると、当該サービス一覧画面の画面情報2000を画面情報記憶部160から取得する(ステップS1003)。そして、Webサービス処理部120は、サービス一覧画面の画面情報2000をブラウザ210に返信する。
なお、サービス一覧画面の画面情報2000には、サービス毎に、当該サービスを提供するアプリ情報1000のアプリIDと、当該アプリ情報1000に含まれる処理フロー情報1100のフローIDとが含まれる。
機器20のブラウザ210は、サービス一覧画面の画面情報2000を受信すると、当該画面情報2000に基づいて、例えば図11(a)に示すサービス一覧画面4100を操作パネル22に表示させる(ステップS1004)。
図11(a)に示すサービス一覧画面4100には、サービス提供システム10により提供されるサービス名の一覧であるサービス名一覧4101が含まれる。
次に、ユーザUは、サービス一覧画面4100のサービス名一覧4101から、所望のサービスを選択する操作を行う(ステップS1005)。ここで、以降では、サービス一覧画面4100のサービス名一覧4101から「コード配信」が選択されたものとして説明する。
機器20のブラウザ210は、サービスの選択操作を受け付けると、サービス画面の取得要求をWebサービス処理部120に送信する(ステップS1006)。なお、当該取得要求には、ユーザUにより選択された「コード配信」サービスを提供するアプリ情報1000のアプリIDが含まれる。
Webサービス処理部120は、サービス画面の取得要求を受信すると、当該取得要求に含まれるアプリIDに関連付けて画面情報記憶部160に記憶されている画面情報2000(サービス画面の画面情報2000)を取得する(ステップS1007)。そして、Webサービス処理部120は、取得した画面情報2000をブラウザ210に返信する。
機器20のブラウザ210は、サービス画面の画面情報2000を受信すると、当該画面情報2000に基づいて、例えば図11(b)に示すサービス画面4200を操作パネル22に表示させる(ステップS1008)。
図11(b)に示すサービス画面4200は、ユーザUにより選択された「コード配信」サービスを利用するための画面である。図11(b)に示すサービス画面4200には、ファイル名指定欄4201と、メールアドレス指定欄4202と、スキャン実行ボタン4203とが含まれる。
ここで、ファイル名指定欄4201は、スキャンにより生成された電子ファイルのファイル名を指定する欄である。メールアドレス指定欄4202は、ストレージA又はストレージBに配信された電子ファイルの格納先URLをメール送信する宛先(メールアドレス)を指定する欄である。なお、サービス画面4200には、例えば、電子ファイルの格納先URLをCCやBCCでメール送信する宛先を指定するためのCC指定欄やBCC指定欄等が含まれていても良い。
次に、ユーザUは、サービス画面4200において、ファイル名指定欄4201に所望のファイル名を指定すると共に、メールアドレス指定欄4202に所望のメールアドレスを指定する。そして、ユーザUは、機器20のスキャナ25に原稿をセットした上で、スキャン実行ボタン4203を押下する(ステップS1009)。
ここで、以降では、ユーザUにより、ファイル名指定欄4201にファイル名「test」が指定される共に、メールアドレス指定欄4202にメールアドレス「hoge@fuga.com」が指定されたものとして説明する。
機器20のブラウザ210は、スキャン実行ボタン4203の押下操作を受け付けると、スキャナ25により原稿をスキャンして、ファイル名「test」の電子ファイルを生成する(ステップS1010)。
機器20のブラウザ210は、スキャンにより電子ファイルが生成されると、「コード配信」サービスを実現する処理フローの実行要求をWebサービス処理部120に送信する(ステップS1011)。
なお、当該実行要求には、「コード配信」サービスを提供するアプリ情報1000のアプリIDと、当該サービスを実現するための処理フロー情報1100のフローIDが含まれる。また、当該実行要求には、スキャンにより生成された電子ファイルと、サービス画面4200においてユーザUにより入力された入力情報(すなわち、ファイル名及びメールアドレス)とが含まれる。
Webサービス処理部120は、処理フローの実行要求を受信すると、当該実行要求を、入出力サービス処理部110のロジック処理部112に送信する(ステップS1012)。
入出力サービス処理部110のロジック処理部112は、処理フローの実行要求を受信すると、当該実行要求に含まれるアプリID及びフローIDに対応する処理フロー情報1100に基づく一連の処理を実行する(ステップS1013)。
そして、ロジック処理部112は、当該一連の処理の処理結果を、Webサービス処理部120を介して、機器20のブラウザ210に返信する。
これにより、本実施形態に係るサービス提供システム10において、「コード配信」サービスを実現する一連の処理が実行され、機器20に対して当該サービスが提供される。
ここで、上記のステップS1013の処理フローの実行処理の詳細について、図12を参照しながら説明する。図12は、本実施形態に係る処理フローの実行処理の一例を示すシーケンス図である。
フロー実行部301は、処理フローの実行要求を受信すると、処理フロー情報の取得要求をアプリ管理部111に送信する(ステップS1201)。なお、当該取得要求には、Webサービス処理部120から受信した処理フローの実行要求に含まれるアプリIDと、フローIDとが含まれる。
アプリ管理部111は、処理フロー情報の取得要求を受信すると、当該取得要求に含まれるアプリID及びフローIDに対応する処理フロー情報1100をアプリ情報記憶部150から取得する(ステップS1202)。そして、アプリ管理部111は、取得した処理フロー情報1100をフロー実行部301に返信する。これにより、フロー実行部301には、図8に示す処理フロー情報1100が返信される。
次に、フロー実行部301は、処理フロー情報1100を受信すると、リソース管理情報の保存要求をリソース管理部306に送信する(ステップS1203)。なお、当該保存要求には、ステップS1201でブラウザ210から受信した処理フローの実行要求と、処理フロー情報1100に含まれるフロー詳細1111〜1115にそれぞれ含まれるパラメータ(parameters)とが含まれる。
リソース管理部306は、リソース管理情報の保存要求を受信すると、当該保存要求に含まれる処理フローの実行要求と、パラメータとに基づいて、例えば図13に示すリソース管理情報170Dを作成する。また、リソース管理部306は、作成したリソース管理情報170Dをリソース管理情報記憶部170に保存する(ステップS1204)。そして、リソース管理部306は、保存結果をフロー実行部301に返信する。
ここで、リソース管理情報記憶部170に保存されたリソース管理情報170Dについて、図13を参照しながら説明する。図13は、本実施形態に係るリソース管理情報170Dの一例を示す図である。
図13に示すリソース管理情報170Dには、実行要求171と、パラメータ172と、処理結果173とが含まれる。
実行要求171は、処理フローの実行要求である。図13に示すリソース管理情報170Dには、ブラウザ210からHTTP(Hypertext Transfer Protocol)リクエストの形式で送信された処理フローの実行要求が保存されている。
パラメータ172には、「detail0」のフロー詳細1111のパラメータ1721と、「detail1」のフロー詳細1112のパラメータ1722と、「detail2」のフロー詳細1113のパラメータ1723とが保存されている。また、パラメータ172には、「detail3」のフロー詳細1114のパラメータ1724と、「detail4」のフロー詳細1115のパラメータ1725とが保存されている。
すなわち、パラメータ172には、バーコード認識コンポーネント402が用いるパラメータ1721と、分岐コンポーネント401が用いるパラメータ1722と、ストレージA配信コンポーネント403が用いるパラメータ1723とが保存されている。同様に、パラメータ172には、ストレージB配信コンポーネント404が用いるパラメータ1724と、メール配信コンポーネント405が用いるパラメータ1725とが保存されている。
ここで、パラメータ1721〜1725には、「"skip":"false"」が含まれる。「"skip"」は、コンポーネントの処理をスキップするか否かを示すパラメータである。「"skip":"false"」の場合には、フロー実行部301により、コンポーネントの処理が実行される一方、「"true"」の場合には、コンポーネントの処理がスキップされる。
また、パラメータ1721には、「"filename":"test"」が含まれる。「"filename"」は、バーコード認識コンポーネント402の処理対象の電子ファイル名である。なお、「"test"」は、処理フローの実行要求に含まれる入力情報のファイル名である。
また、パラメータ1722には、「"conditions"」が含まれる。「"conditions"」は、分岐条件と、条件が成立した場合における分岐コンポーネント401の制御内容とが定義された「condition1」及び「condition2」が含まれる。
すなわち、「"condition1"」には、「"expressions"」において、条件式「result.detail0.value=storageA」が定義されている。また、「"condition1"」には、「"flowdetailName"」において制御対象のフロー詳細名「detail3」と、「"excType"」において制御内容「"skip"」が定義されている。ここで、「"result.detail0.value"」は、フロー詳細名「detail0」(すなわち、バーコード認識コンポーネント402)の処理結果である。
これにより、「"condition1"」の「"expressions"」に定義された条件式が成立するときに、フロー詳細名「detail3」のコンポーネント(すなわち、ストレージB配信コンポーネント404)の処理がスキップされる。
同様に、「"condition2"」には、「"expressions"」において、条件式「result.detail0.value=storageB」が定義されている。また、「"condition2"」には、「"flowdetailName"」において制御対象のフロー詳細名「detail2」と、「"excType"」において制御内容「"skip"」が定義されている。
これにより、「"condition2"」の「"expressions"」に定義された条件式が成立するときに、フロー詳細名「detail2」のコンポーネント(すなわち、ストレージA配信コンポーネント403)の処理がスキップされる。
このように、分岐コンポーネント401のパラメータは、分岐条件と、当該分岐条件が成立した場合における制御内容(どのコンポーネントをスキップさせるか)とが定義された情報である。
なお、分岐条件には、論理式で表される種々の条件を定義することができる。例えば、分岐条件に含まれる「"sign"」には、等号「=」を示す「"eq"」の他、不等号「<」を示す「"lt"」等であっても良い。また、「"excType"」には、「"skip"」の他に、例えば、条件式が成立したときに制御対象のフロー詳細名に定義されたコンポーネントを実行させることを示す「"exc"」が定義されていても良い。
また、パラメータ1725には、「"to":"hoge@fuga.com"」が含まれる。「"to"」は、メール配信コンポーネント405のメール送信の宛先メールアドレスである。なお、「"hoge@fuga.com"」は、処理フローの実行要求に含まれる入力情報のメールアドレスである。
このように、パラメータ172には、フロー詳細名(detailName)毎に、フロー詳細で定義されたコンポーネントが用いるパラメータが保存される。なお、処理結果173には、各コンポーネントの処理が実行された場合に、当該コンポーネントの処理結果が保存される。
図12に戻る。フロー実行部301は、リソース管理部306から保存結果を受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1205)。
すなわち、フロー実行部301は、処理フロー情報1100のフロー詳細1111に指定されたコンポーネント「バーコード認識コンポーネント」の取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、バーコード認識コンポーネント402を生成する(ステップS1206)。なお、バーコード認識コンポーネント402の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したバーコード認識コンポーネント402をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、バーコード認識コンポーネント402が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、バーコード認識コンポーネント402が返信されると、当該コンポーネントのパラメータの取得要求をリソース管理部306に送信する(ステップS1207)。なお、当該取得要求には、例えば、フロー詳細1111のフロー詳細名「detail0」が含まれる。
リソース管理部306は、パラメータの取得要求を受信すると、図13に示すリソース管理情報170Dに含まれるパラメータ1721を取得する(ステップS1208)。そして、リソース管理部306は、取得したパラメータ1721をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1721を受信すると、当該パラメータ1721に含まれる「"skip"」パラメータに基づいて、バーコード認識コンポーネント402の処理をスキップするか否かを判定する(ステップS1209)。
すなわち、フロー実行部301は、パラメータ1721に含まれる「"skip"」パラメータが「"false"」又は「"true"」のいずれであるか否かを判定する。ここでは、パラメータ1721に含まれる「"skip"」パラメータは、「"false"」であるため、バーコード認識コンポーネント402の処理はスキップしないと判定される。
フロー実行部301は、コンポーネント実行要求をバーコード認識コンポーネント402に送信する(ステップS1210)。なお、当該実行要求には、データと、パラメータ1721とが含まれる。
ここで、データとは、データ型「InputStream」として、ブラウザ210から受信した電子ファイル(スキャンにより生成された電子ファイル)である。すなわち、フロー実行部301は、ブラウザ210からデータ型「InputStream」として渡された電子ファイルを、単に「データ」として(データ型を意識することなく)、バーコード認識コンポーネント402に渡して処理の実行を要求する。本実施形態では、このようにデータ型を意識しない電子ファイル等を、単に「データ」と表す。
バーコード認識コンポーネント402は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1211)。そして、バーコード認識コンポーネント402は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
ここで、バーコード認識コンポーネント402の実行処理について、図14を参照しながら説明する。図14は、本実施形態に係るバーコード認識コンポーネント402の実行処理の一例を示すシーケンス図である。
まず、バーコード認識コンポーネント402は、型変換要求を型変換管理部304に送信する(ステップS1401)。なお、当該型変換要求には、データと、バーコード認識コンポーネント402が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1402)。
ここで、受信した型変換要求に含まれるデータのデータ型は「InputStream」である一方、指定されたデータ型は「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致しないものと判断する。
すると、型変換管理部304は、型変換情報テーブル3000を参照して、「InputStream」を「LocalFilePath」に変換するための第1の型変換501を特定して、当該特定した第1の型変換501を生成する(ステップS1403)。なお、第1の型変換501の生成は、型変換共通I/F500に定義されたAPIを用いて行うことができる。
次に、型変換管理部304は、生成された第1の型変換501に対して、型変換要求を送信する(ステップS1404)。なお、当該型変換要求には、データが含まれる。
第1の型変換501は、型変換要求を受信すると、当該要求に含まれるデータのデータ型を「InputStream」から「LocalFilePath」に変換する(ステップS1405)。そして、第1の型変換501は、当該変換後のデータを、型変換管理部304を介して、バーコード認識コンポーネント402に返信する。
バーコード認識コンポーネント402は、型変換後のデータを受信すると、パラメータ1721を用いて処理を実行する(ステップS1406)。すなわち、バーコード認識コンポーネント402は、パラメータ1721に含まれる「"filename"」パラメータに指定されたファイル名「"test"」の電子ファイルに対して、バーコード認識処理を実行する。なお、バーコード認識コンポーネント402は、ドキュメントサービス部130のコード認識部131により、当該電子ファイルに対して、バーコード認識処理を実行する。
次に、バーコード認識コンポーネント402は、処理を実行すると、処理結果の保存要求をリソース管理部306に送信する(ステップS1407)。なお、当該保存要求には、バーコード認識コンポーネント402の処理の結果を示すデータが含まれる。
リソース管理部306は、処理結果の保存要求を受信すると、当該保存要求に含まれるデータに基づいて、処理結果を作成して、リソース管理情報170Dの処理結果173に保存する(ステップS1408)。そして、リソース管理部306は、保存結果をバーコード認識コンポーネント402に返信する。
ここで、リソース管理情報170Dに保存されたバーコード認識コンポーネント402の処理結果について、図15を参照しながら説明する。図15は、バーコード認識コンポーネントの処理結果が格納されたリソース管理情報の一例を示す図である。
図15に示すように、リソース管理情報170Dには、バーコード認識コンポーネント402の処理結果1731が保存されている。すなわち、リソース管理情報170Dの処理結果173には、フロー詳細1111のフロー詳細名「detail0」におけるバーコード認識コンポーネント402の処理結果「"value":"storageA"」が保存される。
このように、リソース管理情報170Dの処理結果1731には、一連の処理に含まれる各処理を実行するためのコンポーネントの処理結果が保存される。
図12に戻る。フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1212)。
すなわち、フロー実行部301は、処理フロー情報1100のフロー詳細1112に指定されたコンポーネント「分岐コンポーネント」の取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受け取ると、分岐コンポーネント401を生成する(ステップS1213)。なお、分岐コンポーネント401の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成した分岐コンポーネント401をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、分岐コンポーネント401が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、分岐コンポーネント401が返信されると、当該コンポーネントのパラメータの取得要求をリソース管理部306に送信する(ステップS1214)。なお、当該取得要求には、例えば、フロー詳細1112のフロー詳細名「detail1」が含まれる。
リソース管理部306は、パラメータの取得要求を受信すると、図13に示すリソース管理情報170Dに含まれるパラメータ1722を取得する(ステップS1215)。そして、リソース管理部306は、取得したパラメータ1722をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1722を受信すると、当該パラメータ1722に含まれる「"skip"」パラメータに基づいて、分岐コンポーネント401の処理をスキップするか否かを判定する(ステップS1216)。
すなわち、フロー実行部301は、パラメータ1722に含まれる「"skip"」パラメータが「"false"」又は「"true"」のいずれであるか否かを判定する。ここでは、パラメータ1722に含まれる「"skip"」パラメータは、「"false"」であるため、分岐コンポーネント401の処理はスキップしないと判定される。
フロー実行部301は、コンポーネント実行要求を分岐コンポーネント401に送信する(ステップS1217)。なお、当該実行要求には、データと、パラメータ1722とが含まれる。
分岐コンポーネント401は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1218)。そして、分岐コンポーネント401は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。なお、分岐コンポーネント401の実行処理の詳細については後述する。
以降では、分岐コンポーネント401の実行処理により、図13に示すリソース管理情報170Dに含まれるパラメータ1724の「"skip"」パラメータが「"true"」に更新されたものとして説明を続ける。
フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1219)。
すなわち、フロー実行部301は、処理フロー情報1100のフロー詳細1113に指定されたコンポーネント「ストレージA配信コンポーネント」の取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受け取ると、ストレージA配信コンポーネント403を生成する(ステップS1220)。なお、ストレージA配信コンポーネント403の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したストレージA配信コンポーネント403をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、ストレージA配信コンポーネント403が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、ストレージA配信コンポーネント403が返信されると、当該コンポーネントのパラメータの取得要求をリソース管理部306に送信する(ステップS1221)。なお、当該取得要求には、例えば、フロー詳細1113のフロー詳細名「detail2」が含まれる。
リソース管理部306は、パラメータの取得要求を受信すると、図13に示すリソース管理情報170Dに含まれるパラメータ1723を取得する(ステップS1222)。そして、リソース管理部306は、取得したパラメータ1723をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1723を受信すると、当該パラメータ1723に含まれる「"skip"」パラメータに基づいて、ストレージA配信コンポーネント403の処理をスキップするか否かを判定する(ステップS1223)。
すなわち、フロー実行部301は、パラメータ1723に含まれる「"skip"」パラメータが「"false"」又は「"true"」のいずれであるか否かを判定する。ここでは、パラメータ1723に含まれる「"skip"」パラメータは、「"false"」であるため、ストレージA配信コンポーネント403の処理はスキップしないと判定される。
フロー実行部301は、コンポーネント実行要求をストレージA配信コンポーネント403に送信する(ステップS1224)。なお、当該実行要求には、データと、パラメータ1723とが含まれる。
ストレージA配信コンポーネント403は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1225)。そして、ストレージA配信コンポーネント403は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
ここで、ストレージA配信コンポーネント403の実行処理について、図16を参照しながら説明する。図16は、本実施形態に係るストレージA配信コンポーネント403の実行処理の一例を示すシーケンス図である。
まず、ストレージA配信コンポーネント403は、型変換要求を型変換管理部304に送信する(ステップS1601)。なお、当該型変換要求には、データと、ストレージA配信コンポーネント403が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1602)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、ストレージA配信コンポーネント403に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
ストレージA配信コンポーネント403は、データを受信すると、パラメータ1723を用いて処理を実行する(ステップS1603)。すなわち、ストレージA配信コンポーネント403は、外部サービス連携部1401のファイル処理部141に対して、図5(a)に示すAPI「/外部サービス名/process/folder」を用いて、電子ファイルを配信(アップロード)する。これにより、ストレージA配信コンポーネント403により電子ファイルがストレージAにアップロードされる。
次に、ストレージA配信コンポーネント403は、処理を実行すると、処理結果の保存要求をリソース管理部306に送信する(ステップS1604)。なお、当該保存要求には、ストレージA配信コンポーネント403の処理の結果を示すデータが含まれる。
リソース管理部306は、処理結果の保存要求を受信すると、当該保存要求に含まれるデータに基づいて、処理結果を作成して、リソース管理情報170Dの処理結果173に保存する(ステップS1605)。そして、リソース管理部306は、保存結果をストレージA配信コンポーネント403に返信する。なお、ここでは、ストレージA配信コンポーネント403の処理結果として、電子ファイルのアップロード先URL(すなわち、格納先URL)が処理結果173に保存される。
図12に戻る。フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1226)。
すなわち、フロー実行部301は、処理フロー情報1100のフロー詳細1114に指定されたコンポーネント「ストレージB配信コンポーネント」の取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受け取ると、ストレージB配信コンポーネント404を生成する(ステップS1227)。なお、ストレージB配信コンポーネント404の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したストレージB配信コンポーネント404をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、ストレージB配信コンポーネント404が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、ストレージB配信コンポーネント404が返信されると、当該コンポーネントのパラメータの取得要求をリソース管理部306に送信する(ステップS1228)。なお、当該取得要求には、例えば、フロー詳細1114のフロー詳細名「detail3」が含まれる。
リソース管理部306は、パラメータの取得要求を受信すると、図13に示すリソース管理情報170Dに含まれるパラメータ1724を取得する(ステップS1229)。そして、リソース管理部306は、取得したパラメータ1724をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1724を受信すると、当該パラメータ1724に含まれる「"skip"」パラメータに基づいて、ストレージB配信コンポーネント404の処理をスキップするか否かを判定する(ステップS1230)。
すなわち、フロー実行部301は、パラメータ1724に含まれる「"skip"」パラメータが「"false"」又は「"true"」のいずれであるか否かを判定する。
ここで、上述したように、ステップS1218の分岐コンポーネント401の実行処理において、パラメータ1724に含まれる「"skip"」パラメータは、「"true"」に更新されている。したがって、フロー実行部301は、ストレージB配信コンポーネント404の処理をスキップすると判定する。
フロー実行部301は、コンポーネントの処理をスキップすると判定した場合、処理フロー情報1100に基づく次のコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1231)。
すなわち、フロー実行部301は、処理フロー情報1100のフロー詳細1115に指定されたコンポーネント「メール配信コンポーネント」の取得要求をコンポーネント管理部302に送信する。
このように、フロー実行部301は、コンポーネントのパラメータに含まれる「"skip"」パラメータが「"true"」である場合、当該コンポーネントの処理をスキップする。すなわち、フロー実行部301は、処理フローに分岐が含まれる場合、分岐条件に応じて、いずれかのコンポーネントの「"skip"」パラメータを「"true"」に更新することで、処理の分岐を実現する。
コンポーネント管理部302は、コンポーネントの取得要求を受け取ると、メール配信コンポーネント405を生成する(ステップS1232)。なお、メール配信コンポーネント405の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したメール配信コンポーネント405をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、メール配信コンポーネント405が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、メール配信コンポーネント405が返信されると、当該コンポーネントのパラメータの取得要求をリソース管理部306に送信する(ステップS1233)。なお、当該取得要求には、例えば、フロー詳細1115のフロー詳細名「detail4」が含まれる。
リソース管理部306は、パラメータの取得要求を受信すると、図13に示すリソース管理情報170Dに含まれるパラメータ1725を取得する(ステップS1234)。そして、リソース管理部306は、取得したパラメータ1725をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1725を受信すると、当該パラメータ1725に含まれる「"skip"」パラメータに基づいて、メール配信コンポーネント405の処理をスキップするか否かを判定する(ステップS1235)。
すなわち、フロー実行部301は、パラメータ1725に含まれる「"skip"」パラメータが「"false"」又は「"true"」のいずれであるか否かを判定する。ここでは、パラメータ1725に含まれる「"skip"」パラメータは、「"false"」であるため、メール配信コンポーネント405の処理はスキップしないと判定される。
フロー実行部301は、コンポーネント実行要求をメール配信コンポーネント405に送信する(ステップS1236)。なお、当該実行要求には、データと、パラメータ1725とが含まれる。
メール配信コンポーネント405は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1237)。そして、メール配信コンポーネント405は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
これにより、本実施形態に係るサービス提供システム10は、「コード配信」サービスを機器20に提供することができる。
ここで、メール配信コンポーネント405の実行処理について、図17を参照しながら説明する。図17は、本実施形態に係るメール配信コンポーネント405の実行処理の一例を示すシーケンス図である。
まず、メール配信コンポーネント405は、型変換要求を型変換管理部304に送信する(ステップS1701)。なお、当該型変換要求には、データと、メール配信コンポーネント405が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1702)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、メール配信コンポーネント405に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
メール配信コンポーネント405は、データを受信すると、パラメータ1725を用いて処理を実行する(ステップS1703)。すなわち、メール配信コンポーネント405は、電子ファイルが格納されたストレージAの格納先URLが記載されたメールを作成し、「"to"」パラメータに指定されたメールアドレス「"hoge@fuga.com"」宛に当該メールを送信する。なお、メール配信コンポーネント405は、ドキュメントサービス部130のメール配信部132により、メールの作成及び送信処理を実行する。
ここで、上記のステップS1218における分岐コンポーネント401の実行処理について、図18を参照しながら説明する。図18は、本実施形態に係る分岐コンポーネント401の実行処理の一例を示すシーケンス図である。
まず、分岐コンポーネント401は、型変換要求を型変換管理部304に送信する(ステップS1801)。なお、当該型変換要求には、データと、分岐コンポーネント401が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1802)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、分岐コンポーネント401に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
分岐コンポーネント401は、データを受信すると、パラメータ1722に定義された分岐条件(conditions)に基づいて、スキップするフロー詳細名を特定する(ステップS1803)。
すなわち、分岐コンポーネント401は、パラメータ1722に定義された「"condition1"」及び「"condition2"」に定義された条件式(expressions)のうち、いずれの条件式が成立するかを判定する。そして、分岐コンポーネント401は、条件が成立する条件式に対応する「"flowdetailName"」を取得することで、スキップするフロー詳細名を特定する。
ここで、図15に示すように、リソース管理情報170Dに保存されているバーコード認識コンポーネント402の処理結果(result.detail.value)は「"storageA"」である。したがって、分岐コンポーネント401は、スキップするフロー詳細名を「detail3」と特定する。
なお、分岐コンポーネント401は、パラメータに定義されたいずれの条件式も成立しない場合や矛盾した条件式が定義されている場合等には、エラーをブラウザ210に返信すれば良い。
分岐コンポーネント401は、スキップするフロー詳細名を特定すると、後続フロー詳細名の取得要求をフロー実行部301に送信する(ステップS1804)。なお、当該取得要求には、ステップS1803で特定したフロー詳細名「detail3」が含まれる。
すると、フロー実行部301は、フロー詳細名「detail3」の後続フロー詳細名「detail4」と、当該フロー詳細名「detail4」の先行フロー詳細の数「2」とを返信する。なお、フロー実行部301は、後続フロー詳細名と、当該後続フロー詳細の先行フロー詳細の数とを、処理フロー情報1100に基づいて特定及び算出して返信する。
次に、分岐コンポーネント401は、ステップS1804で取得した後続フロー詳細名の先行フロー詳細の数が2以上であるか否かを判定する(ステップS1805)。ここでは、ステップS1804で取得した後続フロー詳細名「detail4」の先行フロー詳細の数「2」は、分岐コンポーネント401により、2以上であると判定される。
ここで、後続フロー詳細名の先行フロー詳細の数が2以上である場合、当該後続フロー詳細名のフロー詳細は、複数のフロー詳細が合流するフロー詳細である。言い換えれば、フロー詳細名「detail4」のフロー詳細1115に定義されたメール配信コンポーネント405は、ストレージA配信コンポーネント403及びストレージB配信コンポーネント404が合流するコンポーネントである。
したがって、この場合、分岐コンポーネント401は、フロー詳細名「detail3」に定義されたストレージB配信コンポーネント404をスキップすれば良い。
次に、分岐コンポーネント401は、skipパラメータの更新要求をリソース管理部306に送信する(ステップS1807)。なお、当該更新要求には、スキップ対象のストレージB配信コンポーネント404が定義されたフロー詳細名「detail3」と、更新内容「true」とが含まれる。
リソース管理部306は、skipパラメータの更新要求を受信すると、リソース管理情報170Dにおいて、フロー詳細名「detail3」のパラメータ1724に含まれる「"skip"」パラメータを「"true"」に更新する(ステップS1807)。そして、リソース管理部306は、更新結果を分岐コンポーネント401に返信する。
これにより、リソース管理情報170Dのフロー詳細名「detail3」のパラメータ1724に含まれる「"skip"」パラメータが、「"false"」から「"true"」に更新される。したがって、上述したように、フロー実行部301により、フロー詳細名「detail3」のフロー詳細1114に定義されたストレージB配信コンポーネント404の処理がスキップされる。
以上のように、本実施形態に係るサービス提供システム10では、サービスを実現する処理フローに分岐が含まれる場合、分岐コンポーネント401により条件式の判定を行い、当該判定結果に応じて、後続のコンポーネントの処理の実行をスキップする。これにより、本実施形態に係るサービス提供システム10では、処理の分岐が含まれる処理フローを実行することができる。
なお、本実施形態に係るサービス提供システム10では、コンポーネントを生成した後に、パラメータの取得及びスキップ判定を行ったが、これに限られず、パラメータの取得及びスキップ判定を、コンポーネントを生成する前に行っても良い。これにより、本実施形態に係るサービス提供システム10では、例えば、スキップ判定によりコンポーネントの処理をスキップすると判定された場合には、当該コンポーネントの生成を行わないようにすることもできる。
なお、処理フローに分岐が含まれない場合、サービス提供システム10は、当該処理フローに含まれる各処理を実行するためのコンポーネントを、順に実行すれば良い。
ここで、分岐が含まれる処理フローの他の例について、図19を参照しながら説明する。図19は、分岐が含まれる処理フローの他の例を説明するための図(その1)である。
図19に示す処理フローは、バーコード認識コンポーネント402の処理結果に応じて、「ストレージA配信コンポーネント403」又は「OCRコンポーネント406及びストレージB配信コンポーネント404」の処理を実行するものである。すなわち、図19に示す処理フローは、フロー詳細名「detail0」に定義されたコンポーネントの処理結果に応じて、フロー詳細名「detail2」、又は「detail3」と「detail4」に定義されたコンポーネントの処理を実行するものである。
このように、図19に示す処理フローは、例えば、ストレージA配信コンポーネント403の処理を実行する場合、複数のコンポーネント(OCRコンポーネント406及びストレージB配信コンポーネント404)の処理をスキップする。なお、図19に示す処理フローにおいて、分岐コンポーネント401の処理に用いるパラメータは、図9に示す処理フローと同様に定義することができる。
図19に示す処理フローにおいて、OCRコンポーネント406及びストレージB配信コンポーネント404の処理をスキップする場合における分岐コンポーネント401の実行処理について、図20を参照しながら説明する。図20は、本実施形態に係る分岐コンポーネント401の実行処理の一例を示すシーケンス図(その1)である。なお、図18と同様の処理を行う箇所については、同一のステップ番号を付与して、その説明を省略する。
分岐コンポーネント401は、スキップするフロー詳細名を特定すると、後続フロー詳細名の取得要求をフロー実行部301に送信する(ステップS2101)。なお、当該取得要求には、ステップS1803で特定したフロー詳細名「detail3」が含まれる。
すると、フロー実行部301は、フロー詳細名「detail3」の後続フロー詳細名「detail4」と、当該フロー詳細名「detail4」の先行フロー詳細の数「1」とを返信する。
次に、分岐コンポーネント401は、ステップS2001で取得した後続フロー詳細名の先行フロー詳細の数が2以上であるか否かを判定する(ステップS2002)。ここでは、ステップS2001で取得した後続フロー詳細名「detail4」の先行フロー詳細の数「1」は、分岐コンポーネント401により、2以上でないと判定される。
この場合、分岐コンポーネント401は、さらに、後続フロー詳細名の取得要求をフロー実行部301に送信する(ステップS2003)。なお、当該取得要求には、ステップS2003で取得したフロー詳細名「detail4」が含まれる。
すると、フロー実行部301は、フロー詳細名「detail4」の後続フロー詳細名「detail5」と、当該フロー詳細名「detail5」の先行フロー詳細の数「2」とを返信する。
次に、分岐コンポーネント401は、ステップS2003で取得した後続フロー詳細名の先行フロー詳細の数が2以上であるか否かを判定する(ステップS2004)。ここでは、ステップS2003で取得した後続フロー詳細名「detail5」の先行フロー詳細の数「2」は、分岐コンポーネント401により、2以上であると判定される。
すなわち、フロー詳細名「detail5」のフロー詳細に定義されたメール配信コンポーネント405は、複数のコンポーネント(ストレージA配信コンポーネント403及びストレージB配信コンポーネント404)が合流するコンポーネントである。
したがって、この場合、分岐コンポーネント401は、フロー詳細名「detail3」及び「detail4」にそれぞれ定義されたOCRコンポーネント406及びストレージB配信コンポーネント404をスキップすれば良い。
次に、分岐コンポーネント401は、skipパラメータの更新要求をリソース管理部306に送信する(ステップS2004)。なお、当該更新要求には、OCRコンポーネント406のフロー詳細名「detail3」と、ストレージB配信コンポーネント404が定義されたフロー詳細名「detail4」と、更新内容「true」とが含まれる。
リソース管理部306は、skipパラメータの更新要求を受信すると、リソース管理情報170Dにおいて、フロー詳細名「detail3」のパラメータに含まれる「"skip"」パラメータを「"true"」に更新する。また、リソース管理部306は、リソース管理情報170Dにおいて、フロー詳細名「detail4」のパラメータに含まれる「"skip"」パラメータを「"true"」に更新する(ステップS2006)。そして、リソース管理部306は、更新結果を分岐コンポーネント401に返信する。
これにより、リソース管理情報170Dのフロー詳細名「detail3」の「"skip"」パラメータと、フロー詳細名「detail4」の「"skip"」パラメータとが、「"false"」から「"true"」に更新される。したがって、この場合、フロー実行部301により、図19に示す処理フローにおいて、OCRコンポーネント406の処理と、ストレージB配信コンポーネント404の処理とがスキップされる。
ここで、分岐が含まれる処理フローの他の例について、図21を参照しながら説明する。図21は、分岐が含まれる処理フローの他の例を説明するための図(その2)である。
図21に示す処理フローは、バーコード認識コンポーネント402の処理結果に応じて、「ストレージA配信コンポーネント403」、「ストレージB配信コンポーネント404」、又は「ストレージC配信コンポーネント407」の処理を実行するものである。すなわち、図21に示す処理フローは、フロー詳細名「detail0」に定義されたコンポーネントの処理結果に応じて、フロー詳細名「detail2」、「detail3」、又は「detail4」に定義されたコンポーネントの処理を実行するものである。
このように、図21に示す処理フローは、例えば、ストレージA配信コンポーネント403の処理を実行する場合、複数のコンポーネント(ストレージB配信コンポーネント404及びストレージC配信コンポーネント407)の処理をスキップする。
ここで、上記の図21に示す処理フローにおいて、分岐コンポーネント401が用いるパラメータは、例えば図22に示すパラメータ1722Aのように定義することができる。すなわち、分岐コンポーネント401が用いるパラメータ1722Aには、「"condition1"」〜「"condition3"」が含まれる。そして、各「"condition1"」〜「"condition3"」の「"flowdetailName"」パラメータには、複数のフロー詳細名が指定されている。
例えば、「"condition1"」の「"flowdetailName"」パラメータには、フロー詳細名「detail3」及び「detail4」が指定されている。これにより、「"condition1"」の「"expressions"」に定義された条件式が成立するときに、フロー詳細名「detail3」及び「detail4」のコンポーネントの処理がスキップされる。
同様に、「"condition2"」の「"flowdetailName"」パラメータには、フロー詳細名「detail2」及び「detail4」が指定されている。これにより、「"condition2"」の「"expressions"」に定義された条件式が成立するときに、フロー詳細名「detail2」及び「detail4」のコンポーネントの処理がスキップされる。
図21に示す処理フローにおいて、ストレージB配信コンポーネント404及びストレージC配信コンポーネント407の処理をスキップする場合における分岐コンポーネント401の実行処理について、図23を参照しながら説明する。図23は、本実施形態に係る分岐コンポーネント401の実行処理の一例を示すシーケンス図(その2)である。なお、図18と同様の処理を行う箇所については、同一のステップ番号を付与して、その説明を省略する。
分岐コンポーネント401は、スキップするフロー詳細名「detail3」及び「detail4」を特定すると、後続フロー詳細名の取得要求をフロー実行部301に送信する(ステップS2301)。なお、当該取得要求には、ステップS1803で特定したフロー詳細名「detail3」及び「detail4」のうち、「detail3」が含まれる。
すると、フロー実行部301は、フロー詳細名「detail3」の後続フロー詳細名「detail5」と、当該フロー詳細名「detail5」の先行フロー詳細の数「3」とを返信する。
次に、分岐コンポーネント401は、ステップS2301で取得した後続フロー詳細名の先行フロー詳細の数が2以上であるか否かを判定する(ステップS2302)。ここでは、ステップS2301で取得した後続フロー詳細名「detail5」の先行フロー詳細の数「3」は、分岐コンポーネント401により、2以上であると判定される。
すなわち、フロー詳細名「detail5」のフロー詳細に定義されたメール配信コンポーネント405は、複数のコンポーネントが合流するコンポーネントである。したがって、この場合、分岐コンポーネント401は、フロー詳細名「detail3」に定義されたストレージB配信コンポーネント404をスキップすれば良い。
次に、分岐コンポーネント401は、skipパラメータの更新要求をリソース管理部306に送信する(ステップS2303)。なお、当該更新要求には、ストレージB配信コンポーネント404のフロー詳細名「detail3」が含まれる。
リソース管理部306は、skipパラメータの更新要求を受信すると、リソース管理情報170Dにおいて、フロー詳細名「detail3」のパラメータに含まれる「"skip"」パラメータを「"true"」に更新する(ステップS2304)。そして、リソース管理部306は、更新結果を分岐コンポーネント401に返信する。
これにより、リソース管理情報170Dのフロー詳細名「detail3」の「"skip"」パラメータが、「"false"」から「"true"」に更新される。したがって、この場合、フロー実行部301により、図21に示す処理フローにおいて、ストレージB配信コンポーネント404の処理がスキップされる。
次に、分岐コンポーネント401は、後続フロー詳細名の取得要求をフロー実行部301に送信する(ステップS2305)。なお、当該取得要求には、ステップS1803で特定したフロー詳細名「detail3」及び「detail4」のうち、「detail4」が含まれる。
すると、フロー実行部301は、フロー詳細名「detail4」の後続フロー詳細名「detail5」と、当該フロー詳細名「detail5」の先行フロー詳細の数「3」とを返信する。
次に、分岐コンポーネント401は、ステップS2305で取得した後続フロー詳細名の先行フロー詳細の数が2以上であるか否かを判定する(ステップS2306)。ここでは、ステップS2305で取得した後続フロー詳細名「detail5」の先行フロー詳細の数「3」は、分岐コンポーネント401により、2以上であると判定される。
すなわち、フロー詳細名「detail5」のフロー詳細に定義されたメール配信コンポーネント405は、複数のコンポーネントが合流するコンポーネントである。したがって、この場合、分岐コンポーネント401は、フロー詳細名「detail4」に定義されたストレージC配信コンポーネント407をスキップすれば良い。
次に、分岐コンポーネント401は、skipパラメータの更新要求をリソース管理部306に送信する(ステップS2307)。なお、当該更新要求には、ストレージC配信コンポーネント407のフロー詳細名「detail4」が含まれる。
リソース管理部306は、skipパラメータの更新要求を受信すると、リソース管理情報170Dにおいて、フロー詳細名「detail4」のパラメータに含まれる「"skip"」パラメータを「"true"」に更新する(ステップS2308)。そして、リソース管理部306は、更新結果を分岐コンポーネント401に返信する。
これにより、リソース管理情報170Dのフロー詳細名「detail4」の「"skip"」パラメータが、「"false"」から「"true"」に更新される。したがって、この場合、フロー実行部301により、図21に示す処理フローにおいて、ストレージC配信コンポーネント407の処理がスキップされる。
このように、図21に示す処理フローにおいて、ストレージA配信コンポーネント403の処理を実行する場合、フロー実行部301により、ストレージB配信コンポーネント404及びストレージC配信コンポーネント407の処理がスキップされる。
[第二の実施形態]
次に、第二の実施形態について説明する。なお、第二の実施形態の説明では、主に、第一の実施形態との相違点について説明し、第一の実施形態と実質的に同様の機能構成を有する箇所及び実質的に同様の処理を実行する箇所は、適宜、その説明を省略する。
<機能構成>
まず、本実施形態に係るロジック処理部112の詳細な機能構成について、図24を参照しながら説明する。図24は、本実施形態に係るロジック処理部112の一例の機能構成を示す図である。
図24に示すロジック処理部112は、パラメータ評価部307を有する。パラメータ評価部307は、フロー実行部301からの要求に応じて、リソース管理部306からパラメータを取得し、取得したパラメータに置換指定が含まれるか否かを判定する。ここで、置換指定とは、置換指定されたパラメータの値を、例えば、他のコンポーネントの処理結果等に置換するための指定であり、「${処理結果等の格納先}」等で表される。
また、図24に示すロジック処理部112のコンポーネント群303は、合流コンポーネント408を有する。合流コンポーネント408は、処理フローに含まれる処理の合流を制御するためのコンポーネントである。
次に、本実施形態に係る「コード配信」サービスを実現する処理フローを図25に示す。図25は、「コード配信」サービスを実現する処理フローの他の例を説明するための図である。
本実施形態に係る「コード配信」サービスを実現する処理フローでは、まず、分岐コンポーネント401により、ストレージA配信コンポーネント403又はストレージB配信コンポーネント404のいずれかの処理が実行されるように制御される。
次に、図25に示すように、本実施形態に係る「コード配信」サービスを実現する処理フローでは、合流コンポーネント408により、先行のコンポーネントの処理結果を、合流コンポーネント408の処理結果として出力する。すなわち、合流コンポーネント408は、ストレージA配信コンポーネント403又はストレージB配信コンポーネント404のうち、実行されたコンポーネントの処理結果を、合流コンポーネント408の処理結果として出力する。
これにより、本実施形態に係る「コード配信」サービスを実現する処理フローでは、メール配信コンポーネント405は、ストレージA配信コンポーネント403又はストレージB配信コンポーネント404のいずれが実行されたかを意識する必要がない。言い換えれば、メール配信コンポーネント405は、分岐コンポーネント401による分岐結果に関わらず、電子ファイルの格納先のURLを合流コンポーネント408の処理結果として取得することができる。
このため、例えば、処理フロー情報1100の作成者等のユーザは、合流コンポーネント408を用いることで、処理フローに分岐が含まれる場合であっても、当該合流コンポーネント408以降の後続の各コンポーネントに対して、分岐を意識することなく、パラメータを指定することができる。
ここで、図25に示す処理フローの処理フロー情報1100を図26に示す。図26は、本実施形態に係る処理フロー情報1100の他の例を示す図である。
図26に示す処理フロー情報1100は、第一の実施形態と同様に、フローID1101と、フロー名1102と、フロー詳細群1103と、フロー関係群1104とを有する。
図26に示す処理フロー情報1100のフロー詳細群1103には、図25に示す処理フローに含まれる各処理をそれぞれ示すフロー詳細1111〜1114、フロー詳細1116、及びフロー詳細1115Aが含まれる。
例えば、フロー詳細1116は、合流コンポーネント408による処理を定義しており、当該フロー詳細1116のフロー詳細名は「detail4」と定義されている。同様に、フロー詳細1115Aは、メール配信コンポーネント405による処理を定義しており、当該フロー詳細1115Aのフロー詳細名は「detail5」と定義されている。
なお、フロー関係群1104には、図25に示す処理フローを実現するように、フロー詳細1111〜1114、フロー詳細1116、及びフロー詳細1115Aの接続関係(先行・後続関係)が定義されている。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。以降では、図25に示す処理フローの実行処理の詳細について、図27及び図28を参照しながら説明する。図27及び図28は、本実施形態に係る処理フローの実行処理の一例を示すシーケンス図である。なお、図10のサービス利用の全体処理は、第一の実施形態と同様であるための、その説明を省略する。
フロー実行部301は、処理フローの実行要求を受信すると、処理フロー情報の取得要求をアプリ管理部111に送信する(ステップS2701)。なお、当該取得要求には、Webサービス処理部120から受信した処理フローの実行要求に含まれるアプリIDと、フローIDとが含まれる。
アプリ管理部111は、処理フロー情報の取得要求を受信すると、当該取得要求に含まれるアプリID及びフローIDに対応する処理フロー情報1100をアプリ情報記憶部150から取得する(ステップS2702)。そして、アプリ管理部111は、取得した処理フロー情報1100をフロー実行部301に返信する。これにより、フロー実行部301には、図26に示す処理フロー情報1100が返信される。
次に、フロー実行部301は、処理フロー情報1100を受信すると、リソース管理情報の保存要求をリソース管理部306に送信する(ステップS2703)。なお、当該保存要求には、ステップS2701で受信した処理フローの実行要求と、図26に示す処理フロー情報1100に含まれるフロー詳細1111〜1114、フロー詳細1116、及びフロー詳細1115Aにそれぞれ含まれるパラメータとが含まれる。
リソース管理部306は、リソース管理情報の保存要求を受信すると、当該保存要求に含まれる処理フローの実行要求と、パラメータとに基づいて、例えば図29に示すリソース管理情報170Dを作成する。また、リソース管理部306は、作成したリソース管理情報170Dをリソース管理情報記憶部170に保存する(ステップS2704)。そして、リソース管理部306は、保存結果をフロー実行部301に返信する。
ここで、リソース管理情報記憶部170に保存されたリソース管理情報170Dについて、図29を参照しながら説明する。図29は、本実施形態に係るリソース管理情報170Dの一例を示す図である。
実行要求171は、第一の実施形態と同様に、処理フローの実行要求であり、ブラウザ210からHTTPリクエストの形式で送信された処理フローの実行要求が保存されている。また、処理結果173は、第一の実施形態と同様に、各コンポーネントの処理が実行された場合に、当該コンポーネントの処理結果が保存される。
パラメータ172には、「detail0」のフロー詳細1111のパラメータ1711と、「detail1」のフロー詳細1112のパラメータ1712と、「detail2」のフロー詳細1113のパラメータ1713とが保存されている。また、パラメータ172には、「detail3」のフロー詳細1114のパラメータ1714と、「detail4」のフロー詳細1116のパラメータ1716と、「detail5」のフロー詳細1115Aのパラメータ1715Aとが保存されている。
ここで、パラメータ1722に定義されている「"${result.detail0.value}"」と、パラメータ1725Aに定義されている「"${result.detail4.url}"」とは、置換指定である。すなわち、「"${result.detail0.value}"」は、detail0の処理結果(result)に含まれる項目名(キー)「"value"」で置換することを示している。同様に、「"${result.detail4.url}"」は、detail4の処理結果(result)に含まれる項目名(キー)「"url"」で置換することを示している。
図27に戻る。以降のステップS2705及びステップS2706の処理は、図12のステップS1205及びステップS1206の処理とそれぞれ同様であるため、その説明を省略する。
フロー実行部301は、バーコード認識コンポーネント402が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2707)。なお、当該取得要求には、例えば、フロー詳細1111のフロー詳細名「detail0」と、パラメータの各項目名(具体的には、「"skip"」や「"filename"」等)とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2708)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1721を取得する(ステップS2709)。そして、リソース管理部306は、取得したパラメータ1721をパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1721に置換指定が含まれるか否かを判定する。(ステップS2710)。ここで、パラメータ1721には、置換指定が含まれない。したがって、パラメータ評価部307は、パラメータ1721に置換指定が含まれないと判定する。この場合、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1721をフロー実行部301に返信する。
以降のステップS2711〜ステップS2715の処理は、図12のステップS1209〜ステップS1213の処理とそれぞれ同様であるため、その説明を省略する。
フロー実行部301は、分岐コンポーネント401が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2716)。なお、当該取得要求には、例えば、フロー詳細1112のフロー詳細名「detail1」と、パラメータの各項目名とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2717)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1722を取得する(ステップS2718)。そして、リソース管理部306は、取得したパラメータ1722をパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1722に置換指定が含まれるか否かを判定する。(ステップS2719)。ここで、パラメータ1722には、置換指定「"${result.detail0.value}"」が含まれる。したがって、パラメータ評価部307は、パラメータ1722に置換指定が含まれると判定する。
この場合、パラメータ評価部307は、処理結果の取得要求をリソース管理部306に送信する(ステップS2720)。なお、当該取得要求には、置換指定(具体的には、処理結果等の格納先である「result.detail0.value」)が含まれる。
リソース管理部306は、処理結果の取得要求を受信すると、リソース管理情報170Dに含まれる処理結果を取得する(ステップS2721)。そして、リソース管理部306は、取得した処理結果をパラメータ評価部307に返信する。
すなわち、リソース管理部306は、図15に示すリソース管理情報170Dに格納されているバーコード認識コンポーネント402(detail0)の処理結果(result)のうち、項目名「value」の値「storageA」を取得する。そして、リソース管理部306は、取得した値「storageA」をパラメータ評価部307に返信する。
次に、パラメータ評価部307は、処理結果を受信すると、置換指定されているパラメータの値を、当該処理結果が示す値に置換する(ステップS2722)。すなわち、パラメータ評価部307は、「"left":"${result.detail0.value}"」を「"left":"storageA"」と置換する。
そして、パラメータ評価部307は、置換後のパラメータ1722をフロー実行部301に返信する。
以降のステップS2723〜ステップS2727の処理は、図12のステップS1215〜ステップS1220の処理とそれぞれ同様であるため、その説明を省略する。
フロー実行部301は、ストレージ配信Aコンポーネント403が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2728)。なお、当該取得要求には、例えば、フロー詳細1112のフロー詳細名「detail2」と、パラメータの各項目名とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2729)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1723を取得する(ステップS2730)。そして、リソース管理部306は、取得したパラメータ1723をパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1723に置換指定が含まれるか否かを判定する。(ステップS2731)。ここで、パラメータ1723には、置換指定が含まれない。したがって、パラメータ評価部307は、パラメータ1723に置換指定が含まれないと判定する。この場合、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1723をフロー実行部301に返信する。
以降のステップS2732〜ステップS2736の処理は、図12のステップS1223〜ステップS1227の処理とそれぞれ同様であるため、その説明を省略する。
フロー実行部301は、ストレージ配信Bコンポーネント404が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2737)。なお、当該取得要求には、例えば、フロー詳細1114のフロー詳細名「detail3」と、パラメータの各項目名とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2738)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1724を取得する(ステップS2739)。そして、リソース管理部306は、取得したパラメータ1724をパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1724に置換指定が含まれるか否かを判定する。(ステップS2740)。ここで、パラメータ1724には、置換指定が含まれない。したがって、パラメータ評価部307は、パラメータ1724に置換指定が含まれないと判定する。この場合、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1724をフロー実行部301に返信する。
なお、以降のステップS2741の処理は、図12のステップS1230と同様であるため、その説明を省略する。
フロー実行部301は、ステップS2741でコンポーネントの処理をスキップすると判定した場合、図26に示す処理フロー情報1100に基づく次のコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS2742)。
すなわち、フロー実行部301は、図26に示す処理フロー情報1100のフロー詳細1116に指定されたコンポーネント「合流コンポーネント」の取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受け取ると、合流コンポーネント408を生成する(ステップS1243)。なお、合流コンポーネント408の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成した合流コンポーネント408をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、合流コンポーネント408が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
フロー実行部301は、合流コンポーネント408が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2744)。なお、当該取得要求には、例えば、フロー詳細1116のフロー詳細名「detai41」と、パラメータの各項目名とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2745)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1726を取得する(ステップS2746)。そして、リソース管理部306は、取得したパラメータ1726をパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1723に置換指定が含まれるか否かを判定する。(ステップS2747)。ここで、パラメータ1726には、置換指定が含まれない。したがって、パラメータ評価部307は、パラメータ1726に置換指定が含まれないと判定する。この場合、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1726をフロー実行部301に返信する。
次に、フロー実行部301は、パラメータ1726を受信すると、当該パラメータ1726に含まれる「"skip"」パラメータに基づいて、合流コンポーネント408の処理をスキップするか否かを判定する(ステップS2748)。ここでは、パラメータ1726に含まれる「"skip"」パラメータは、「"false"」であるため、合流コンポーネント408の処理はスキップしないと判定される。
フロー実行部301は、コンポーネント実行要求を合流コンポーネント408に送信する(ステップS1249)。なお、当該実行要求には、データと、パラメータ1726とが含まれる。
合流コンポーネント408は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1250)。そして、合流コンポーネント408は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
ここで、合流コンポーネント408の実行処理について、図30を参照しながら説明する。図30は、本実施形態に係る合流コンポーネント408の実行処理の一例を示すシーケンス図である。
まず、合流コンポーネント408は、型変換要求を型変換管理部304に送信する(ステップS3001)。なお、当該型変換要求には、データと、合流コンポーネント408が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS3002)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、合流コンポーネント408に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
合流コンポーネント408は、データを受信すると、処理結果の保存要求をリソース管理部306に送信する(ステップS3004)。なお、当該保存要求には、先行のコンポーネント(すなわち、ストレージA配信コンポーネント403)の処理結果を示すデータが含まれる。
リソース管理部306は、処理結果の保存要求を受信すると、当該保存要求に含まれるデータに基づいて、処理結果を作成して、リソース管理情報170Dの処理結果173に保存する(ステップS3005)。そして、リソース管理部306は、保存結果を合流コンポーネント408に返信する。
ここで、リソース管理情報170Dに保存された合流コンポーネント408の処理結果について、図31を参照しながら説明する。図31は、合流コンポーネントの処理結果をリソース管理情報に格納する一例を説明するための図である。
まず、上記のステップS3003の処理が実行される前におけるリソース管理情報170Dは、図31(a)に示すものであったとする。すなわち、図31(a)に示すリソース管理情報170Dには、ストレージA配信コンポーネント403の処理結果1733が格納されているものとする。
このとき、合流コンポーネント408は、上記のステップS3003において、処理結果1733を示すデータが含まれる保存要求をリソース管理部306に送信する。これにより、リソース管理情報170Dには、図31(b)に示すように、合流コンポーネント408の処理結果1735(すなわち、処理結果1733と同一内容の処理結果)が格納される。
このように、合流コンポーネント408は、先行で実行されたコンポーネント(すなわち、ストレージA配信コンポーネント403)の処理結果と同一内容の処理結果をリソース管理情報170Dに格納する。これにより、メール配信コンポーネント405は、合流コンポーネント408の処理結果1735を用いれば良く、分岐コンポーネント401による分岐に応じてパラメータを指定する必要がなくなる。すなわち、メール配信コンポーネント405は、例えば、ストレージA配信コンポーネント403が実行された場合のパラメータと、ストレージB配信コンポーネント404が実行された場合のパラメータとの両方を指定する必要がなくなる。
図28に戻る。フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、図26に示す処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS2751)。
すなわち、フロー実行部301は、図26に示す処理フロー情報1100のフロー詳細1115Aに指定されたコンポーネント「メール配信コンポーネント」の取得要求をコンポーネント管理部302に送信する。
以降のステップS2752の処理は、図12のステップS1232の処理と同様であるため、その説明を省略する。
フロー実行部301は、メール配信コンポーネント405が返信されると、当該コンポーネントのパラメータの取得要求をパラメータ評価部307に送信する(ステップS2753)。なお、当該取得要求には、例えば、フロー詳細1115Aのフロー詳細名「detail5」と、パラメータの各項目名(具体的には、「"skip"」や「"to"」、「"from"」、「"subject"」、「"body"」等)とが含まれる。
パラメータ評価部307は、パラメータの取得要求を受信すると、当該パラメータの取得要求をリソース管理部306に送信する(ステップS2754)。
次に、リソース管理部306は、パラメータの取得要求を受信すると、図29に示すリソース管理情報170Dに含まれるパラメータ1725Aを取得する(ステップS2755)。そして、リソース管理部306は、取得したパラメータ1725Aをパラメータ評価部308に返信する。
次に、パラメータ評価部307は、リソース管理部306から返信されたパラメータ1725Aに置換指定が含まれるか否かを判定する。(ステップS2756)。ここで、パラメータ1725Aには、置換指定「"${result.detail4.url}"」が含まれる。したがって、パラメータ評価部307は、パラメータ1725Aに置換指定が含まれると判定する。
この場合、パラメータ評価部307は、処理結果の取得要求をリソース管理部306に送信する(ステップS2757)。なお、当該取得要求には、置換指定(具体的には、処理結果等の格納先である「result.detail4.url」)が含まれる。
リソース管理部306は、処理結果の取得要求を受信すると、リソース管理情報170Dに含まれる処理結果を取得する(ステップS2758)。そして、リソース管理部306は、取得した処理結果をパラメータ評価部307に返信する。
すなわち、リソース管理部306は、図31(b)に示すリソース管理情報170Dに格納されている合流コンポーネント408(detail4)の処理結果(result)の項目名「url」の値「http://storageA.co.jp/fileid」を取得する。そして、リソース管理部306は、取得した値「http://storageA.co.jp/fileid」をパラメータ評価部307に返信する。
次に、パラメータ評価部307は、処理結果を受信すると、置換指定されているパラメータの値を、当該処理結果が示す値に置換する(ステップS2759)。すなわち、パラメータ評価部307は、「"body":"${result.detail4.url}"」を「"body":"http://storageA.co.jp/fileid"」と置換する。
そして、パラメータ評価部307は、置換後のパラメータ1725Aをフロー実行部301に返信する。
以降のステップS2760〜ステップS2762の処理は、図12のステップS1235〜ステップS1237の処理とそれぞれ同様であるため、その説明を省略する。
以上のように、本実施形態に係るサービス提供システム10では、処理フローに分岐が含まれる場合であっても、合流コンポーネント408を用いることで、当該合流コンポーネント408以降の各コンポーネントは分岐を意識することなく処理を行うことができる。したがって、例えば、処理フロー情報1100の作成者等のユーザは、合流コンポーネント408以降の各コンポーネントが用いるパラメータ等を容易に指定することができる。
ここで、合流コンポーネント408を用いた処理フローの他の例について、図32を参照しながら説明する。図32は、処理フローの他の例を説明するための図(その3)である。
図32に示す処理フローは、まず、コンポーネントAによる処理を実行する。その後、コンポーネントBによる処理と、コンポーネントCによる処理と、コンポーネントDによる処理とを並列に実行して、合流コンポーネント408による処理と、コンポーネントEによる処理とを順に実行するものである。また、コンポーネントBによる処理と、コンポーネントCによる処理と、コンポーネントDによる処理とは、それぞれ処理結果として、「ファイル1」と、「ファイル2」と、「ファイル3」とを出力する。
このとき、合流コンポーネント408は、パラメータに指定された条件に応じて、様々な処理結果をコンポーネントEに出力することができる。
例えば、合流コンポーネント408は、当該条件に応じて、「ファイル1」、「ファイル2」、及び「ファイル3」をマージしたファイルを処理結果としてコンポーネントDに出力しても良い。
また、例えば、合流コンポーネント408は、当該条件に応じて、「ファイル1」、「ファイル2」、及び「ファイル3」のうち、いずれかのファイルを処理結果としてコンポーネントEに出力しても良い。この場合、当該条件としては、例えば、「ファイル1」、「ファイル2」、及び「ファイル3」のうち、最初に又は最後に出力されたファイルを、処理結果としてコンポーネントEに出力すれば良い。または、例えば、「ファイル1」、「ファイル2」、及び「ファイル3」のうち、所定のファイル名のファイルや所定のファイルサイズ未満(又は所定のファイルサイズ以上)のファイルを、処理結果としてコンポーネントEに出力しても良い。
このように、合流コンポーネント408は、処理フローに分岐が含まれる場合に限られず、処理フローに並列で実行される処理が含まれる場合にも用いることができる。なお、合流コンポーネント408のパラメータには、例えば、論理和や論理積で表される様々な条件を指定することができる。これにより、合流コンポーネント408は、先行のコンポーネントの処理が並列で実行される場合に、後続のコンポーネントに対して、様々な処理結果を出力することができるようになる。
以上のように、第一の実施形態に係るサービス提供システム10は、サービスを実現する一連の処理に分岐が含まれる場合、後続の処理を実行するコンポーネントのうち、一のコンポーネント以外のコンポーネントの処理の実行を抑止(スキップ)する。これにより、第一の実施形態に係るサービス提供システム10では、一連の処理に分岐が含まれる場合においても当該一連の処理を実行することができる。
しかも、第一の実施形態に係るサービス提供システム10は、例えば、既に実行されたコンポーネントの処理結果に応じて、分岐先のいずれの処理を実行又は抑止させるかを判断する。これにより、本実施形態に係るサービス提供システム10は、例えば、一連の処理の処理対象の電子ファイル等に応じて、分岐先の処理を動的に決定することができる。
また、第二の実施形態に係るサービス提供システム10では、サービスを実現する一連の処理に分岐が含まれる場合、合流コンポーネント408を用いることで、当該合流コンポーネント408以降の各コンポーネントは分岐を意識する必要がない。このため、第二の実施形態に係るサービス提供システム10では、例えば、処理フローの作成者等のユーザは、合流コンポーネント408以降の各コンポーネントのパラメータを容易に指定することができるようになる。
本発明は、具体的に開示された上記の各実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。