以下、本発明の実施形態について図面を参照しながら詳細に説明する。
[第一の実施形態]
<システム構成>
まず、本実施形態に係る情報処理システム1のシステム構成について、図1を参照しながら説明する。図1は、第一の実施形態に係る情報処理システムの一例のシステム構成を示す図である。
図1に示す情報処理システム1は、サービス提供環境E1、ユーザ環境E2、及び外部ストレージシステム30を含み、インターネット等の広域的なネットワークN1を介して通信可能に接続されている。
サービス提供環境E1は、ネットワークN1を介してクラウドサービス等の外部サービスを提供するシステム環境である。なお、本実施形態では、外部サービスの具体例としてクラウドサービスを採用して説明するが、ASP(Application Service Provider)によって提供されるサービスやWebサービス等、ネットワークを介して提供されるサービスに関して本実施形態が適用されても良い。
サービス提供環境E1は、一台以上の情報処理装置で実現されるサービス提供システム10を有する。サービス提供システム10は、ネットワークN1を介して所定のサービスを提供する。
例えば、サービス提供システム10は、ユーザ環境E2の画像形成装置20において原稿をスキャンして生成された電子ファイルをOCR(Optical Character Reader)処理した後、言語の翻訳処理をして、外部ストレージシステム30に保存するサービスを提供する。本実施形態では、このようなサービスを「スキャン配信サービス」と表す。そして、サービス提供システム10は、スキャン配信サービスを提供するものとして説明する。
ただし、サービス提供システム10により提供されるサービスは、これに限られない。サービス提供システム10は、例えば、外部ストレージシステム30に保存されている電子ファイルを、ユーザ環境E2の画像形成装置20で印刷するサービスを提供しても良い。また、サービス提供システム10は、例えば、外部ストレージシステム30に保存されている電子ファイルを、ユーザ環境E2のプロジェクタで投影するサービスを提供しても良い。
なお、サービス提供システム10の全部又は一部は、ユーザ環境E2に設置されていても良い。すなわち、サービス提供システム10を構成する情報処理装置の全部又は一部は、ユーザ環境E2に包含されていても良い。
ユーザ環境E2は、例えば、画像形成装置20を利用するユーザである企業等におけるシステム環境である。ユーザ環境E2は、一台以上の画像形成装置20が、例えばLAN(Local Area Network)等のネットワークを介して接続されている。
本実施形態に係る画像形成装置20は、スキャン機能を有するMFP(Multifunction Peripheral)等の複合機である。なお、画像形成装置20は、スキャン機能以外に、例えば、プリント機能、コピー機能、及びファクス(FAX)通信機能等を有していても良い。
外部ストレージシステム30は、ネットワークN1を介してストレージサービス(又はオンラインストレージ)と呼ばれるクラウドサービスを提供するコンピュータシステムである。
ストレージサービスとは、外部ストレージシステム30のストレージの記憶領域を貸し出すサービスである。本実施形態に係るスキャン配信サービスでは、外部ストレージシステム30によって貸し出される記憶領域に対して、OCR処理及び翻訳処理された電子ファイルを保存(アップロード)する。
なお、以降では、複数の外部ストレージシステム30について、各々を区別するときは、「外部ストレージシステム301」、「外部ストレージシステム302」等と添え字を用いて表す。また、外部ストレージシステム301によって提供されるサービスの名称を「ストレージサービスA」、外部ストレージシステム302によって提供されるサービスの名称を「ストレージサービスB」等とする。
外部ストレージシステム30は、複数台の情報処理装置によって実現されるシステムであっても良い。また、図1に示す情報処理システム1の構成は一例であって、他の構成であっても良い。例えば、ユーザ環境E2は、画像形成装置20に加えて又は画像形成装置20に代えて、プロジェクタ、電子黒板等の各種機器を有していても良い。
<ハードウェア構成>
≪サービス提供システム≫
サービス提供システム10のハードウェア構成について、図2を参照しながら説明する。図2は、第一の実施形態に係るサービス提供システムの一例のハードウェア構成を示す図である。
図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は、必要なときにバスBに接続して利用する形態であっても良い。
通信I/F17は、サービス提供システム10をネットワークN1に接続するインタフェースである。これにより、サービス提供システム10は、通信I/F17を介してデータ通信を行うことができる。
HDD18は、プログラムやデータを格納している不揮発性の記憶装置である。格納されるプログラムやデータには、サービス提供システム10全体を制御する基本ソフトウェアであるOS(Operating System)、及びOS上において各種機能を提供するアプリケーションソフトウェア等がある。
なお、サービス提供システム10は、HDD108に代えて又はHDD108に加えて、フラッシュメモリを用いるドライブ装置(例えばソリッドステートドライブ:SSD)を利用しても良い。また、HDD108は、格納しているプログラムやデータを所定のファイルシステム及び/又は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は、上記のハードウェア構成を有することにより、後述するような各種処理を実現できる。
≪画像形成装置≫
画像形成装置20のハードウェア構成について、図3を参照しながら説明する。図3は、第一の実施形態に係る画像形成装置の一例のハードウェア構成を示す図である。
図3に示す画像形成装置20は、コントローラ21、操作パネル22、外部I/F23、通信I/F24、及びスキャナ25を有する。また、コントローラ21は、CPU211、RAM212、ROM213、NVRAM214、及びHDD215を有する。
ROM213は、各種プログラムやデータを格納する。RAM212は、プログラムやデータを一時保持する。NVRAM214は、例えば設定情報等が格納されている。また、HDD215は、各種プログラムやデータを格納する。
CPU211は、ROM213やNVRAM214、HDD215等からプログラムやデータ、設定情報等をRAM212上に読み出し、処理を実行することで、画像形成装置20全体の制御や機能を実現する。
操作パネル22は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている。外部I/F23は、外部装置とのインタフェースである。外部装置には、記録媒体23a等がある。これにより、画像形成装置20は、外部I/F23を介して記録媒体23aの読み取り及び/又は書き込みを行うことができる。記録媒体23aにはICカード、フレキシブルディスク、CD、DVD、SDメモリカード、USBメモリ等がある。
通信I/F24は、画像形成装置20をネットワークN1に接続するインタフェースである。これにより、画像形成装置20は通信I/F24を介してデータ通信を行うことができる。スキャナ25は、原稿を読み取り画像ファイル(電子ファイル)を生成するための読取装置である。
本実施形態に係る画像形成装置20は、上記のハードウェア構成を有することにより、後述するような各種処理を実現できる。
<ソフトウェア構成>
次に、本実施形態に係る情報処理システム1の処理ブロックについて、図4を参照しながら説明する。図4は、第一の実施形態に係る情報処理システムの一例の処理ブロックを示す図である。
図4に示す画像形成装置20は、例えばCPU211等により実行されるブラウザ210を有する。画像形成装置20のユーザは、ブラウザ210を介して、サービス提供システム10により提供されるサービスを利用することができる。このように、本実施形態に係る画像形成装置20は、ブラウザ210が搭載(インストール)されていれば良い。すなわち、本実施形態に係る情報処理システム1では、サービス提供システム10により提供されるサービスを画像形成装置20が利用するための専用アプリケーションを開発等する必要がない。
図4に示すサービス提供システム10は、サービス処理部110、ドキュメントサービス部150、及びストレージサービス連携部160を有する。これら各部は、サービス提供システム10にインストールされた1以上のプログラムが、CPU16に実行させる処理により実現される。
また、サービス提供システム10は、アプリ情報記憶部190を有する。アプリ情報記憶部190は、HDD18により実現可能である、なお、アプリ情報記憶部190は、サービス提供システム10とネットワークを介して接続される記憶装置等により実現されても良い。
サービス処理部110は、画像形成装置20のブラウザ210からの要求に応じて、各種のサービスに関する処理を実行する。サービス処理部110は、アプリ管理部120、ロジック処理部130、及びデータI/F部140を有する。
アプリ管理部120は、アプリ情報記憶部190に記憶されているアプリ情報1000を管理する。アプリ管理部120は、ブラウザ210からの要求に応じて、アプリ情報1000に含まれる画面定義に基づくアプリ画面を返信する。これにより、画像形成装置20の操作パネル22には、ブラウザ210により、サービス提供システム10により提供されるサービスを利用するためのアプリ画面が表示される。
ここで、アプリ情報1000には、アプリ画面を画像形成装置20に表示させるための画面定義と、アプリ画面から利用されるサービスを実現するための処理内容とが含まれる。なお、アプリ情報1000には、複数の画面定義と、複数の処理内容とが含まれていても良い。
また、アプリ管理部120は、ロジック処理部130からの要求に応じて、アプリ情報1000に含まれる処理内容を返信する。処理内容は、サービス提供システム10により提供されるサービスを実現するための一連の処理(以降では、一連の処理を「処理フロー」とも表す。)が記述されている。
ロジック処理部130は、ブラウザ210からの要求に応じて、アプリ管理部120を介して処理内容を取得する。そして、ロジック処理部130は、取得した処理内容に基づく一連の処理を実行する。
すなわち、ロジック処理部130は、ドキュメントサービス部150又は/及びストレージサービス連携部160のファイル処理部170に対して、処理内容に従った処理の実行を要求することで、処理内容に基づく一連の処理を実行する。これにより、本実施形態に係るサービス提供システム10は、画像形成装置20に対して各種のサービスを提供することができる。なお、ロジック処理部130の詳細な処理ブロックについては、後述する。
データI/F部140は、ブラウザ210からの要求に応じて、ストレージサービス連携部160のデータ処理部180に対して、所定の要求(例えば、フォルダ一覧の取得要求等)を行う。
ドキュメントサービス部150は、サービス提供システム10により提供されるサービスを実現するためのプログラム(モジュール)群である。ドキュメントサービス部150には、例えば、電子ファイルに対してOCR処理を行うOCR処理151や、所定の言語で記載されている文書ファイル(電子ファイル)を他の所定の言語に翻訳する翻訳処理152等のプログラムが含まれる。
なお、ドキュメントサービス部150には、これら以外にも、種々のプログラムが含まれていても良い。例えば、ドキュメントサービス部150には、電子ファイルを画像形成装置20が印刷可能なデータ形式(印刷データ)に変換するプログラムや、電子ファイルを圧縮又は解凍するためのプログラム等が含まれていても良い。
ストレージサービス連携部160は、ロジック処理部130やデータI/F部140からの要求に応じて、外部ストレージシステム30に対して、各種処理の実行を要求する。
ここで、本実施形態に係るサービス提供システム10は、外部ストレージシステム30毎に、ストレージサービス連携部160を有する。すなわち、サービス提供システム10は、外部ストレージシステム301に対して処理を要求するためのストレージサービスA連携部1601、外部ストレージシステム302に対して処理を要求するためのストレージサービスB連携部1602等を有する。このように、サービス提供システム10は、当該サービス提供システム10と連携して処理を行う外部ストレージシステム30毎に、それぞれの外部ストレージシステム30に対応するストレージサービス連携部160を有する。
なお、以降では、複数のストレージサービス連携部160について、各々を区別するときは、「ストレージサービスA連携部1601」、「ストレージサービスB連携部1602」等と記載する。
ストレージサービス連携部160は、上述したように、ロジック処理部130からの要求を受け取るファイル処理部170、及びデータI/F部140からの要求を受け取るデータ処理部180を有する。
ファイル処理部170は、外部ストレージシステム30に保存されている電子ファイルに対する操作(例えば、取得、保存、編集等)を行うためのAPI(Application Programming Interface)が定義された共通I/F171及び固有I/F172を有する。
共通I/F171は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(a)に示すAPIが挙げられる。換言すれば、ファイル処理部170の共通I/F171は、すべての外部ストレージシステム30が利用できるファイル操作に関する機能(例えば、ファイルの取得、保存等)を利用するためのAPI群である。
一方、固有I/F172は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(b)に示すAPIが挙げられる。換言すれば、ファイル処理部170の固有I/F172は、特定の外部ストレージシステム30において利用できるファイル操作に関する機能(例えば、ファイルの編集等)を利用するためのAPI群である。
したがって、共通I/F171は、すべてのストレージサービス連携部160に対して同様に定義される。一方で、固有I/F172は、当該固有I/F172で定義されるAPIが利用可能な特定のストレージサービス連携部160に対して個別に定義される。
また、データ処理部180は、外部ストレージシステム30に保存されている電子ファイルの書誌情報等のメタデータ(例えば、ファイル一覧、フォルダ一覧等)を取得等するためのAPIが定義された共通I/F181及び固有I/F182を有する。
共通I/F181は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(c)に示すAPIが挙げられる。換言すれば、データ処理部180の共通I/F181は、すべての外部ストレージシステム30で利用できるメタデータ取得等の機能を利用するためのAPI群である。
一方、固有I/F182は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(d)に示すAPIが挙げられる。換言すれば、データ処理部180の固有I/F182は、特定の外部ストレージシステム30において利用できるメタデータ取得等の機能(例えば、画像ファイル一覧の取得等)を利用するためのAPI群である。
したがって、共通I/F181は、すべてのストレージサービス連携部160に対して同様に定義される。一方で、固有I/F182は、当該固有I/F182で定義されるAPIが利用可能な特定のストレージサービス連携部160に対して個別に定義される。
以上のように、本実施形態に係るサービス提供システム10は、連携して処理を行う外部ストレージシステム30毎に、それぞれの外部ストレージシステム30に対応するストレージサービス連携部160を有する。このため、連携先となる外部ストレージシステム30を追加等する場合には、当該外部ストレージシステム30に対応するストレージサービス連携部160をサービス提供システム10に追加等すれば良い。
したがって、本実施形態に係るサービス提供システム10は、連携先となる外部ストレージシステム30の追加等に伴う影響を局所化することができる。換言すれば、他の処理ブロック(サービス処理部110やドキュメントサービス部150等)に影響を与えることなく(すなわち、他の処理ブロックを修正等する必要なく)、連携先となる外部ストレージシステム30の追加等を行うことができる。
これにより、本実施形態に係るサービス提供システム10では、連携先の外部ストレージシステム30の追加等の開発に要する工数を削減することができる。なお、ストレージサービス連携部160の追加等は、SDK(Software Development Kit)を用いて行うことができる。
また、ストレージサービス連携部160では、共通I/F171及び固有I/F172がそれぞれ異なるモジュール等で実現される。さらに、共通I/F171及び固有I/F172で定義されるAPIは、「ストレージサービス名」(外部サービス名)を指定することで利用することができる(すなわち、「ストレージサービス名」(外部サービス名)が可変部分となっている)。
したがって、連携先の外部ストレージシステム30を追加する場合には、他のストレージサービス連携部160に定義されている共通I/F171を再利用することができる。換言すれば、連携先の外部ストレージシステム30を追加する場合には、当該追加する外部ストレージシステム30の固有I/F172のみを開発すれば良い。これにより、本実施形態に係るサービス提供システム10では、連携先の外部ストレージシステム30の追加等の開発に要する工数をさらに削減することができる。なお、このことは、データ処理部180の共通I/F181及び固有I/F182に関しても同様である。
アプリ情報記憶部190は、アプリ情報1000を記憶する。アプリ情報1000は、アプリ画面を画像形成装置20に表示させるための画面定義と、アプリ画面から利用されるサービスを実現するための一連の処理の内容が記述された処理内容とを含む。また、アプリ情報1000には、当該アプリ情報1000を一意に識別するためのアプリIDが付与されている。
ここで、本実施形態に係るスキャン配信サービスを提供するためのアプリ情報1000のアプリIDを「app001」であるとする。また、アプリID「app001」のアプリ情報1000には、ストレージサービスAと連携したスキャン配信サービスを実現するための処理内容1100、ストレージサービスBと連携したスキャン配信サービスを実現するための処理内容1200等が含まれるものとする。
ここで、ストレージサービスAと連携したスキャン配信サービスを実現するための処理内容1100及びストレージサービスBと連携したスキャン配信サービスを実現するための処理内容1200について、図6を参照しながら説明する。図6は、第一の実施形態に係る処理内容の一例を示す図である。
図6(a)に示す処理内容1100には、フローID定義部1101と、処理定義部1102とが含まれる。フローID定義部1101には、処理内容1100を一意に識別するための識別情報であるフローID「flow001」が記述されている。
処理定義部1102には、ストレージサービスAと連携したスキャン配信サービスを実現するための一連の処理の内容が記述されている。すなわち、図6(a)に示す処理内容1100には、スキャンして生成された電子ファイルを、OCR処理した後、所定の言語に翻訳する翻訳処理をして、外部ストレージシステム301に保存する一連の処理が記述されている。
同様に、図6(b)に示す処理内容1200には、フローID定義部1201と、処理定義部1202とが含まれる。フローID定義部1201には、処理内容1200を一意に識別するための識別情報であるフローID「flow002」が記述されている。
処理定義部1202には、ストレージサービスBと連携したスキャン配信サービスを実現するための一連の処理の内容が記述されている。すなわち、図6(b)に示す処理内容1200には、スキャンして生成された電子ファイルを、OCR処理した後、所定の言語に翻訳する翻訳処理をして、外部ストレージシステム302に保存する一連の処理が記述されている。
以上のように、本実施形態に係るサービス提供システム10は、画像形成装置20にアプリ画面を表示させるための画面定義と、サービスを実現するための一連の処理(処理フロー)の内容が記述された処理内容とが含まれるアプリ情報1000を有する。そして、本実施形態に係るサービス提供システム10は、画像形成装置20に対して、アプリ情報1000を利用して各種のサービスを提供する。このため、サービス提供システム10により提供されるサービスを追加等する場合には、アプリ情報記憶部190にアプリ情報1000を追加等すれば良い。
また、アプリ情報1000を追加するには、画面定義及び処理内容を記述すれば良いため、簡易に開発することができる。したがって、サービスの追加・変更等に伴う開発工数を削減させることができるとともに、例えばサードベンダー等によるサービスの追加・変更等を容易に行うことができる。
次に、本実施形態に係るロジック処理部130の詳細な処理ブロックについて、図7を参照しながら説明する。図7は、第一の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図7に示すロジック処理部130は、フロー実行部131、コンポーネント管理部132、及びコンポーネント群133を有する。また、ロジック処理部130は、代替フロー管理テーブル2000を利用する。
フロー実行部131は、サービスを実現するためのフロー実行要求をブラウザ210から受け付けると、アプリ管理部120を介して、当該フロー実行要求に含まれるフローIDに対応する処理内容を取得する。そして、フロー実行部131は、取得した処理内容に従ってコンポーネントに対して処理の実行を要求する。ここで、コンポーネントとは、処理内容に基づく一連の処理のうちの一の処理を実行するためのモジュール等であり、例えばクラスや関数等で定義される。
また、フロー実行部131は、処理内容に基づく一連の処理においてエラー等が発生した場合、代替フロー管理テーブル2000から代替フローIDを取得する。そして、フロー実行部131は、アプリ管理部120を介して、代替フローIDに対応する処理内容を取得して、当該処理内容に従ってコンポーネントに対して処理の実行を要求する。
ここで、代替フローIDとは、ある処理内容に基づく一連の処理(処理フロー)においてエラー等が発生した場合に実行される処理内容(代替フロー内容)のフローIDのことである。なお、代替フロー内容には、例えば、処理フローと同等の処理結果を得るための処理の内容が記述されている。
すなわち、フロー実行部131は、処理フローにおいてエラー等が発生した場合には、代替フロー管理テーブル2000において当該処理フローのフローIDに関連付けられている代替フローIDの代替フロー内容に基づく一連の処理(代替フロー)を実行する。
コンポーネント管理部132は、フロー実行部131からの要求に応じて、コンポーネントの生成を行う。なお、コンポーネントの生成とは、例えばクラスで定義されたコンポーネントを、メモリ(例えばRAM14)上に展開することを意味する。
コンポーネント群133は、コンポーネントの集合である。コンポーネント群133には、外部ストレージシステム301に電子ファイルを配信するための配信コンポーネント1331Aが含まれる。また、コンポーネント群133には、電子ファイルにOCR処理を行うためのOCRコンポーネント1332A、電子ファイルを所定の言語に翻訳する翻訳処理を行う翻訳コンポーネント1333Aが含まれる。
さらに、コンポーネント群133には、外部ストレージシステム302に電子ファイルを配信するための配信コンポーネント1331Bが含まれる。同様に、コンポーネント群133には、上記のOCRコンポーネント1332Aとは異なるOCRコンポーネント1332B、上記の翻訳コンポーネント1333Aとは異なる翻訳コンポーネント1333B等が含まれる。このように、コンポーネント群133には、種々の処理を実行する種々のコンポーネントが含まれる。
ここで、コンポーネント群133に含まれる各コンポーネントは、コンポーネント共通I/F1330を有する。コンポーネント共通I/F1330は、各コンポーネントに対して共通に定義されたAPIであり、コンポーネントを生成するためのAPIと、コンポーネントに対して処理の実行を要求するためのAPIとが含まれる。
このように、各コンポーネントがコンポーネント共通I/F1330を有することで、コンポーネントの追加等に伴う影響を局所化することができる。換言すれば、フロー実行部131及びコンポーネント管理部132に影響を与えることなく、コンポーネントの追加等を行うことができる。このため、コンポーネントの追加等の開発に要する工数を削減することができる。
ここで、代替フロー管理テーブル2000について、図8を参照しながら説明する。図8は、第一の実施形態に係る代替フロー管理テーブルの一例を示す図である。
図8に示す代替フロー管理テーブル2000は、データ項目として、フローID、及び代替フローIDを有する。すなわち、代替フロー管理テーブル2000では、フローIDに対して代替フローIDが関連付けられている。
例えば、フローID「flow001」には、代替フローID「flow002」が関連付けられている。これにより、フロー実行部131は、フローID「flow001」の処理内容に基づく一連の処理においてエラー等が発生した場合には、当該フローIDに関連付けられている代替フローID「flow002」の処理内容を取得することができる。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪スキャン配信サービスの全体処理≫
本実施形態に係るスキャン配信サービスを画像形成装置20のユーザが利用する場合の全体的な処理について、図9を参照しながら説明する。図9は、第一の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
まず、画像形成装置20のユーザは、ブラウザ210を用いて、サービス提供システム10により提供されるサービスの一覧を取得するための操作を行う。すると、画像形成装置20は、サービスの一覧の取得要求をサービス提供システム10に送信する(ステップS901)。サービス処理部110のアプリ管理部120は、当該取得要求を受け取ると、サービス提供システム10により提供されるサービスの一覧を画像形成装置20に送信する。
これにより、画像形成装置20の操作パネル22には、ブラウザ210により、サービス提供システム10により提供されるサービスの一覧が表示される。なお、サービスの一覧には、サービス提供システム10により提供されるサービスのサービス名、当該サービスを提供するアプリ情報1000のアプリID、及び当該サービスを実現するための処理内容のフローID等が含まれる。
ユーザは、画像形成装置20の操作パネル22に表示されたサービスの一覧から、自身が利用を所望するサービスを選択する。すると、ブラウザ210は、選択されたサービスを提供するアプリ情報1000のアプリIDと、当該サービスを実現するための処理内容のフローIDとをアプリ管理部120に送信する(ステップS902)。
ここでは、ユーザにより、ストレージサービスAと連携したスキャン配信するためのサービス「Scan to ストレージサービスA」の利用が選択されたものとする。したがって、ブラウザ210は、スキャン配信サービスを提供するアプリ情報1000のアプリID「app001」と、当該アプリ情報1000に含まれる処理内容1100のフローID「flow001」とをアプリ管理部120に送信する。
そして、アプリ管理部120は、ブラウザ210から受け取ったアプリIDのアプリ情報1000に含まれる画面定義に基づきHTML(HyperText Markup Language)形式のアプリ画面を生成し、ブラウザ210に送信する。
ブラウザ210は、アプリ管理部120からアプリ画面を受け取ると、例えば図10に示すアプリ画面3000を、操作パネル22に表示させる(ステップS903)。図10は、スキャン配信サービスを利用するためのアプリ画面の一例を示す図である。
次に、ユーザは、図10に示すアプリ画面3000において、ファイル名入力欄3200にスキャンにより生成される電子ファイルに付与する所望のファイル名を入力する。また、ユーザは、保存先フォルダID入力欄3300にスキャンにより生成される電子ファイルを保存するストレージサービスAのフォルダのフォルダIDを入力する。なお、図10に示すアプリ画面3000の翻訳言語欄3100には、英語から日本語に翻訳することを示す「英語→日本語」が表示されているが、翻訳元の言語と翻訳後の言語をユーザが選択することができるようにしても良い。
また、図10に示すアプリ画面3000では、ストレージサービスAにおける保存先フォルダのフォルダIDをユーザが直接入力するものとしたが、保存先フォルダをフォルダ一覧からユーザが選択できるようにしても良い。すなわち、例えばデータI/F140部がデータ処理部180を介してストレージサービスAのフォルダ一覧を取得し、取得されたフォルダ一覧からユーザが保存先フォルダを選択できるようにしても良い。
そして、ユーザは、画像形成装置20のスキャナ25に原稿をセットした上で、スキャン実行ボタン3400を押下する(ステップS904)。これにより、画像形成装置20のスキャナ25により原稿が読み取られ、ファイル名入力欄3200に入力されたファイル名の電子ファイルが生成される(ステップS905)。
続いて、サービス提供システム10は、画像形成装置20より生成された電子ファイルをOCR処理して、言語の翻訳を行った上で、ストレージサービスAに配信するフロー実行処理を行う(ステップS906)。このフロー実行処理の詳細については、後述する。
≪フロー実行処理≫
以降では、上記のステップS906のフロー実行処理の詳細について説明する。まず、フロー実行処理が正常に実行される場合について、図11を参照しながら説明する。図11は、第一の実施形態に係るフロー実行処理の一例のシーケンス図である。
まず、ブラウザ210は、スキャン配信サービスを実現するためのフロー実行要求をフロー実行部131に送信する(ステップS1101)。ここで、当該実行要求には、スキャン配信サービスを提供するアプリ情報1000のアプリID「app001」と、ストレージサービスAと連携したスキャン配信サービスを実現するための処理内容のフローID「flow001」とが含まれる。また、当該実行要求には、スキャンにより生成された電子ファイルと、外部ストレージシステム301における当該電子ファイルの保存先フォルダのフォルダIDとが含まれる。
次に、フロー実行部131は、フロー実行要求を受け付けると、アプリ管理部120を介して、当該実行要求に含まれるアプリID「app001」のアプリ情報1000からフローID「flow001」の処理内容を取得する(ステップS1102)。すなわち、フロー実行部131は、図6(a)に示す処理内容1100を取得する。
フロー実行部131は、取得した処理内容1100に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1103)。より具体的には、フロー実行部131は、図6(a)に示す処理内容1100の「From("file:input")」の次に指定されている「.to("process:ocrA")」に基づき、OCRコンポーネント1332Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、OCRコンポーネント1332Aの取得要求を受け取ると、OCRコンポーネント1332Aを生成する(ステップS1104)。OCRコンポーネント1332Aの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、OCRコンポーネント1332Aが生成されると、コンポーネント管理部132は、OCRコンポーネント1332Aをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、OCRコンポーネント1332Aが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成されたOCRコンポーネント1332Aに処理の実行を要求する(ステップS1105)。なお、ここで指定されるデータは、データ型が「InputStream」としてブラウザ210から渡される電子ファイルである。
すなわち、フロー実行部131は、ブラウザ210からデータ型「InputStream」として渡される電子ファイルを、単に「データ」として(データ型を意識することなく)、OCRコンポーネント1332Aに渡して処理の実行を要求する。図11では、このようにデータ型を意識することなく渡される電子ファイル等を、単に「データ」と表す。
OCRコンポーネント1332Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1106)。より具体的には、OCRコンポーネント1332Aは、ドキュメントサービス部150のOCR処理151に処理を要求し、OCR処理151が指定されたデータに対してOCR処理を実行する。
そして、OCRコンポーネント1332Aは、OCR処理後の電子ファイルを示すデータをフロー実行部131に返信する。
次に、フロー実行部131は、取得した処理内容1100に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1107)。より具体的には、フロー実行部131は、図6(a)に示す処理内容1100の「.to("process:ocrA")」の次に指定されている「.to("process:transA")」に基づき、翻訳コンポーネント1333Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、翻訳コンポーネント1333Aの取得要求を受け取ると、翻訳コンポーネント1333Aを生成する(ステップS1108)。翻訳コンポーネント1333Aの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、翻訳コンポーネント1333Aが生成されると、コンポーネント管理部132は、翻訳コンポーネント1333Aをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、翻訳コンポーネント1333Aが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成された翻訳コンポーネント1333Aに処理の実行を要求する(ステップS1109)。なお、ここで指定されるデータは、OCR処理後の電子ファイルである。
次に、翻訳コンポーネント1333Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1110)。より具体的には、翻訳コンポーネント1333Aは、ドキュメントサービス部150の翻訳処理152に処理を要求し、翻訳処理152が指定されたデータに対して、所定の言語への翻訳処理を実行する。
そして、翻訳コンポーネント1333Aは、翻訳処理後の電子ファイルを示すデータをフロー実行部131に返信する。
次に、フロー実行部131は、取得した処理内容1100に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1111)。より具体的には、フロー実行部131は、図6(a)に示す処理内容1100の「.to("process:transA")」の次に指定されている「.to("storage:uploadFileA")」に基づき、配信コンポーネント1331Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、配信コンポーネント1331Aの取得要求を受け取ると、配信コンポーネント1331Aを生成する(ステップS1112)。配信コンポーネント1331Aの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、配信コンポーネント1331Aが生成されると、コンポーネント管理部132は、配信コンポーネント1331Aをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、配信コンポーネント1331Aが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成された配信コンポーネント1331Aに処理の実行を要求する(ステップS1113)。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
次に、配信コンポーネント1331Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1114)。すなわち、配信コンポーネント1331Aは、ストレージサービスA連携部1601のファイル処理部1701に対して、共通I/F1711として定義されているファイル保存のAPIを用いて、データの配信実行を要求する。より具体的には、配信コンポーネント1331Aは、ストレージサービスA連携部1601のファイル処理部1701に対して、図5(a)に示すAPIとして「service-a/process/folder」を用いてデータの配信実行を要求する。これにより、ストレージサービスAにおいて、図10に示す保存先フォルダID入力欄3300に入力されたフォルダIDのフォルダに、翻訳処理後の電子ファイルが保存される。
そして、配信コンポーネント1331Aは、配信実行の実行結果を示すデータをフロー実行部131に返信する。
フロー実行部131は、取得した処理内容1100に基づく一連の処理(処理フロー)の処理結果をブラウザ210に返信する(ステップS1115)。これにより、画像形成装置20のユーザは、スキャン配信サービスを実現するための一連の処理が完了したことを知ることができる。
次に、フロー実行処理の途中でエラーが発生した場合について、図12を参照しながら説明する。図12は、第一の実施形態に係るフロー実行処理の他の例のシーケンス図である。以降では、本実施形態に係るスキャン配信サービスを実現するための一連の処理(処理フロー)に含まれるOCR処理においてエラーが発生した場合について説明する。ただし、エラーの発生箇所は、これに限られない。スキャン配信サービスを実現するための処理フローに含まれる各処理のうちのいずれの処理でエラーが発生しても、以降で説明する処理が同様に適用され得る。
まず、ブラウザ210は、スキャン配信サービスを実現するためのフロー実行要求をフロー実行部131に送信する(ステップS1201)。ここで、当該実行要求には、スキャン配信サービスを提供するアプリ情報1000のアプリID「app001」と、ストレージサービスAと連携したスキャン配信サービスを実現するための処理内容のフローID「flow001」とが含まれる。また、当該実行要求には、スキャンにより生成された電子ファイルと、外部ストレージシステム301における当該電子ファイルの保存先フォルダのフォルダIDとが含まれる。
次に、フロー実行部131は、フロー実行要求を受け付けると、アプリ管理部120を介して、当該実行要求に含まれるアプリID「app001」のアプリ情報1000からフローID「flow001」の処理内容を取得する(ステップS1202)。すなわち、フロー実行部131は、図6(a)に示す処理内容1100を取得する。
フロー実行部131は、取得した処理内容1100に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1203)。より具体的には、フロー実行部131は、図6(a)に示す処理内容1100の「From("file:input")」の次に指定されている「.to("process:ocrA")」に基づき、OCRコンポーネント1332Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、OCRコンポーネント1332Aの取得要求を受け取ると、OCRコンポーネント1332Aを生成する(ステップS1204)。OCRコンポーネント1332Aの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、OCRコンポーネント1332Aが生成されると、コンポーネント管理部132は、OCRコンポーネント1332Aをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、OCRコンポーネント1332Aが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成されたOCRコンポーネント1332Aに処理の実行を要求する(ステップS1205)。なお、ここで指定されるデータは、データ型が「InputStream」としてブラウザ210から渡される電子ファイルである。
OCRコンポーネント1332Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1206)。より具体的には、OCRコンポーネント1332Aは、ドキュメントサービス部150のOCR処理151に処理を要求し、OCR処理151が指定されたデータに対してOCR処理を実行する。
ここで、ステップS1206において、OCRコンポーネント1332Aの処理の実行中に、例えば、OCR処理が不可能であることを示すエラーが発生したものとする。すると、OCRコンポーネント1332Aは、エラーが発生したことを示すデータをフロー実行部131に返信する。
フロー実行部131は、エラーが発生したことを示すデータを受け取ると、代替フロー管理テーブル2000を参照して、ステップS1202で取得した処理内容1100のフローIDに関連付けられている代替フローIDを取得する(ステップS1207)。より具体的には、フロー実行部131は、代替フロー管理テーブル2000において、処理内容1100のフローID「flow001」に関連付けられている代替フローID「flow002」を取得する。
次に、フロー実行部131は、代替フローIDを取得すると、アプリ管理部120を介して、当該代替フローID「flow002」の処理内容(代替フロー内容)を取得する(ステップS1208)。すなわち、フロー実行部131は、図6(b)に示す処理内容1200を取得する。
このように、本実施形態に係るサービス提供システム10は、処理内容に基づく一連の処理においてエラー等が発生した場合には、代替フロー管理テーブル2000において当該処理内容に関連付けられている他の処理内容を取得する。
フロー実行部131は、取得した処理内容1200に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1209)。より具体的には、フロー実行部131は、図6(b)に示す処理内容1200の「From("file:input")」の次に指定されている「.to("process:ocrB")」に基づき、OCRコンポーネント1332Bの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、OCRコンポーネント1332Bの取得要求を受け取ると、OCRコンポーネント1332Bを生成する(ステップS1210)。OCRコンポーネント1332Bの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、OCRコンポーネント1332Bが生成されると、コンポーネント管理部132は、OCRコンポーネント1332Bをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、OCRコンポーネント1332Bが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成されたOCRコンポーネント1332Bに処理の実行を要求する(ステップS1211)。
OCRコンポーネント1332Bは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1212)。より具体的には、OCRコンポーネント1332Bは、ドキュメントサービス部150のOCR処理151に処理を要求し、OCR処理151が指定されたデータに対してOCR処理を実行する。
そして、OCRコンポーネント1332Bは、OCR処理後の電子ファイルを示すデータをフロー実行部131に返信する。
次に、フロー実行部131は、取得した処理内容1200に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1213)。より具体的には、フロー実行部131は、図6(b)に示す処理内容1200の「.to("process:ocrB")」の次に指定されている「.to("process:transB")」に基づき、翻訳コンポーネント1333Bの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、翻訳コンポーネント1333Bの取得要求を受け取ると、翻訳コンポーネント1333Bを生成する(ステップS1214)。翻訳コンポーネント1333Bの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、翻訳コンポーネント1333Bが生成されると、コンポーネント管理部132は、翻訳コンポーネント1333Bをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、翻訳コンポーネント1333Bが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成された翻訳コンポーネント1333Bに処理の実行を要求する(ステップS1215)。なお、ここで指定されるデータは、OCR処理後の電子ファイルである。
次に、翻訳コンポーネント1333Bは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1216)。より具体的には、翻訳コンポーネント1333Bは、ドキュメントサービス部150の翻訳処理152に処理を要求し、翻訳処理152が指定されたデータに対して、所定の言語への翻訳処理を実行する。
そして、翻訳コンポーネント1333Bは、翻訳処理後の電子ファイルを示すデータをフロー実行部131に返信する。
次に、フロー実行部131は、取得した処理内容1200に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS1217)。より具体的には、フロー実行部131は、図6(b)に示す処理内容1200の「.to("process:transB")」の次に指定されている「.to("storage:uploadFileB")」に基づき、配信コンポーネント1331Bの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、配信コンポーネント1331Bの取得要求を受け取ると、配信コンポーネント1331Bを生成する(ステップS1218)。配信コンポーネント1331Bの生成は、コンポーネント共通I/F1330に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、配信コンポーネント1331Bが生成されると、コンポーネント管理部132は、配信コンポーネント1331Bをフロー実行部131に返信する。これは、例えば、コンポーネント管理部132は、配信コンポーネント1331Bが展開されたメモリ(例えばRAM14)上のアドレスを、フロー実行部131に返信すれば良い。
フロー実行部131は、データを指定して、生成された配信コンポーネント1331Bに処理の実行を要求する(ステップS1219)。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
次に、配信コンポーネント1331Bは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS1220)。すなわち、配信コンポーネント1331Bは、ストレージサービスB連携部1602のファイル処理部1702に対して、共通I/F1712として定義されているファイル保存のAPIを用いて、データの配信実行を要求する。より具体的には、配信コンポーネント1331Bは、ストレージサービスB連携部1602のファイル処理部1702に対して、図5(a)に示すAPIとして「service-b/process/folder」を用いてデータの配信実行を要求する。これにより、ストレージサービスBにおいて、図10に示す保存先フォルダID入力欄3300に入力されたフォルダIDのフォルダに、翻訳処理後の電子ファイルが保存される。
そして、配信コンポーネント1331Bは、配信実行の実行結果を示すデータをフロー実行部131に返信する。
フロー実行部131は、処理内容1100の代替フロー内容として取得した処理内容1200に基づく一連の処理(代替フロー)の処理結果をブラウザ210に返信する(ステップS1221)。これにより、画像形成装置20のユーザは、スキャン配信サービスを実現するための一連の処理(処理フロー)においてエラーが発生し、代替フローが実行されたことを知ることができる。
以上のように、本実施形態に係るサービス提供システム10では、処理内容に基づく一連の処理(処理フロー)においてエラー等が発生した場合、当該処理内容に対して予め関連付けられた他の処理内容(代替フロー内容)に基づく一連の処理(代替フロー)を実行する。これにより、本実施形態に係るサービス提供システム10では、例えば、ある処理フローにおいてエラーが発生した場合には、当該処理フローと同等の処理を行う代替フローを実行することができる。
[第二の実施形態]
次に、第二の実施形態に係る情報処理システム1について説明する。第二の実施形態では、代替フローが実行された場合に、当該代替フローの種別に応じた処理結果をブラウザ210に返信する点が第一の実施形態と異なる。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
<ソフトウェア構成>
本実施形態に係る情報処理システム1に含まれるサービス提供システム10のロジック処理部130の処理ブロックについて、図13を参照しながら説明する。図13は、第二の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図13に示すサービス提供システム10のロジック処理部130は、フロー実行部131Aを有する。また、図13に示すサービス提供システム10のロジック処理部130は、代替フロー管理テーブル2000Aを利用する。
フロー実行部131Aは、代替フローIDに対応する処理内容(代替フロー内容)に基づく一連の処理(代替フロー)が実行された場合に、代替フロー管理テーブル2000Aを参照して、当該代替フローの代替フロータイプに応じた処理結果を返信する。
ここで、代替フロー管理テーブル2000Aについて、図14を参照しながら説明する。図14は、第二の実施形態に係る代替フロー管理テーブルの一例を示す図である。
図14に示す代替フロー管理テーブル2000Aは、データ項目として、さらに、代替フロータイプを有する。すなわち、代替フロー管理テーブル2000Aでは、代替フローIDに対して代替フロータイプが関連付けられている。
代替フロータイプとは、代替フローIDで示される処理内容(代替フロー)に基づく一連の処理(代替フロー)が実行された場合における処理結果の種類を示す情報である。
例えば、代替フロータイプが「タイプ1」である代替フローIDに対応する代替フローが実行された場合、フロー実行部131は、当該代替フローの処理結果として「成功」を示す処理結果をブラウザ210に返信する。一方で、例えば、代替フロータイプが「タイプ2」である代替フローIDに対応する代替フローが実行された場合、フロー実行部131は、当該代替フローの処理結果として「失敗」を示す処理結果をブラウザ210に返信する。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図15を参照しながら説明する。図15は、第二の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップS1201〜ステップS1220の処理については、第一の実施形態と同様であるため、その説明を省略する。
フロー実行部131Aは、代替フロー管理テーブル2000Aを参照して、実行された代替フローの代替フロータイプを取得する(ステップS1501)。より具体的には、フロー実行部131Aは、代替フロー管理テーブル2000Aにおいて、代替フローID「flow002」に関連付けられている代替フロータイプ「タイプ1」を取得する。
次に、フロー実行部131Aは、取得した代替フロータイプに応じた処理結果をブラウザ210に返信する(ステップS1502)。より具体的には、フロー実行部131Aは、取得した代替フロータイプ「タイプ1」に応じて、「成功」を示す処理結果をブラウザ210に返信する。
以上のように、本実施形態に係るサービス提供システム10では、代替フローが実行された場合には、当該代替フローの代替フロータイプに応じた処理結果を画像形成装置20に返信する。これにより、本実施形態に係るサービス提供システム10では、実行された代替フローの種別や内容に応じて、適切な処理結果を画像形成装置20に返信することができる。
例えば、エラーが発生した処理フローと同等の処理を実現する代替フローが実行される場合には、代替フロー管理テーブル2000Aにおいて、当該代替フローの代替フローIDに代替フロータイプ「タイプ1」を関連付けておけば良い。これにより、本実施形態に係るサービス提供システム10では、処理フローと同等の処理を実現する代替フローが実行された場合に、「成功」を示す処理結果をブラウザ210に返信することができる。
一方で、例えば、エラーが発生した処理フローをロールバックする代替フローが実行される場合には、代替フロー管理テーブル2000Aにおいて、当該代替フローの代替フローIDに代替フロータイプ「タイプ2」を関連付けておけば良い。これにより、本実施形態に係るサービス提供システム10は、代替フローが実行された場合に、「失敗」を示す処理結果をブラウザ210に返信することができる。
[第三の実施形態]
次に、第三の実施形態に係る情報処理システム1について説明する。第三の実施形態では、処理フローにおいて発生したエラーが回復可能なエラーであるか否かを判定して、当該判定結果に応じた他の処理内容を取得する点が第一の実施形態と異なる。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
<ソフトウェア構成>
本実施形態に係る情報処理システム1に含まれるサービス提供システム10のロジック処理部130の処理ブロックについて、図16を参照しながら説明する。図16は、第三の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図16に示すサービス提供システム10のロジック処理部130は、フロー実行部131Bを有する。また、図16に示すサービス提供システム10のロジック処理部130は、代替フロー管理テーブル2000Bを利用する。
フロー実行部131Bは、処理内容に基づく一連の処理(処理フロー)においてエラー等が発生した場合に、当該エラーが回復可能なエラーであるか否かを判定する。そして、フロー実行部131Bは、代替フロー管理テーブル2000Bを参照して、当該判定結果に応じて、代替フローID又は例外フローIDを取得する。
ここで、例外フローIDとは、処理フローにおいて回復不可能なエラーが発生した場合に実行される処理内容(例外フロー内容)のフローIDのことである。なお、例外フロー内容には、例えば、エラー情報の出力やエラー通知等を実現するための処理の内容が記述される。
ここで、代替フロー管理テーブル2000Bについて、図17を参照しながら説明する。図17は、第三の実施形態に係る代替フロー管理テーブルの一例を示す図である。
図17に示す代替フロー管理テーブル2000Bは、データ項目として、さらに、例外フローIDを有する。すなわち、代替フロー管理テーブル2000Bでは、フローIDに対して、代替フローID及び例外フローIDが関連付けられている。
例えば、フローID「flow001」には、代替フローID「flow002」及び例外フローID「flow900」が関連付けられている。これにより、フロー実行部131Bは、処理フローにおいてエラー等が発生した場合には、当該エラーに応じて代替フローIDの処理内容(代替フロー内容)又は例外フローIDの処理内容(例外フロー内容)を取得することができる。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図18を参照しながら説明する。図18は、第三の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップS1201〜ステップS1206の処理については、第一の実施形態と同様であるため、その説明を省略する。
フロー実行部131Bは、処理内容1100に基づく一連の処理(処理フロー)において発生したエラーが回復可能なエラーであるか否かを判定する(ステップS1801)。
ここで、回復可能なエラーとは、代替フローを実行することが可能なエラー種別を言う。一方、回復不可能なエラーとは、例えば、代替フローを実行することができないエラー種別を言う。なお、回復不可能なエラーには、例えば、代替フローが存在しない場合等を含めても良い。
ステップS1801において、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部131Bは、ステップS1802〜ステップS1804の処理を実行する。一方で、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部131Bは、ステップS1805〜ステップS1807の処理を実行する。
すなわち、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部131Bは、代替フロー管理テーブル2000Bを参照して、処理内容1100のフローIDに関連付けられている代替フローIDを取得する(ステップS1802)。より具体的には、フロー実行部131Bは、代替フロー管理テーブル2000Bにおいて、処理内容1100のフローID「flow001」に関連付けられている代替フローID「flow002」を取得する。
次に、フロー実行部131Bは、代替フローIDを取得すると、アプリ管理部120を介して、当該代替フローID「flow002」の処理内容(代替フロー内容)を取得する(ステップS1803)。すなわち、フロー実行部131は、図6(b)に示す処理内容1200を取得する。
そして、フロー実行部131Bは、取得した処理内容1200に基づく代替フローを実行する(ステップS1804)。すなわち、この場合、図12のステップS1209〜ステップS1221と同様の処理が行われる。
一方、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部131Bは、代替フロー管理テーブル2000Bを参照して、処理内容1100のフローIDに関連付けられている例外フローIDを取得する(ステップS1805)。より具体的には、フロー実行部131Bは、代替フロー管理テーブル2000Bにおいて、処理内容1100のフローID「flow001」に関連付けられている例外フローID「flow900」を取得する。
次に、フロー実行部131Bは、例外フローIDを取得すると、アプリ管理部120を介して、当該例外フローID「flow900」の処理内容(例外フロー内容)を取得する(ステップS1806)。
そして、フロー実行部131Bは、取得した例外フロー内容に基づく例外フローを実行する(ステップS1807)。
以上のように、本実施形態に係るサービス提供システム10では、処理フローにおいてエラーが発生した場合に、当該発生したエラーが回復可能か否かに応じて、代替フロー又は例外フローを実行することができる。このため、本実施形態に係るサービス提供システム10では、例えば、処理フローにおいて回復不可能な深刻なエラーが発生した場合等には、当該エラーの発生を画像形成装置20に通知するための例外フローを実行することができる。
[第四の実施形態]
次に、第四の実施形態に係る情報処理システム1について説明する。第四の実施形態では、処理フローにおいてエラー等が発生した場合、当該エラー等が発生したコンポーネントに対して予め関連付けられた他のコンポーネント(代替コンポーネント)を実行させる処理内容(代替フロー内容)を作成する点が第一の実施形態と異なる。すなわち、第四の実施形態では、コンポーネントにおいてエラー等が発生した場合、代替コンポーネントを実行させる代替フロー内容を動的に作成する。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
<ソフトウェア構成>
本実施形態に係る情報処理システム1に含まれるサービス提供システム10のロジック処理部130の処理ブロックについて、図19を参照しながら説明する。図19は、第四の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図19に示すサービス提供システム10のロジック処理部130は、フロー実行部131C、及び代替フロー内容作成部134を有する。また、図19に示すサービス提供システム10のロジック処理部130は、代替コンポーネント管理テーブル4000を利用する。
フロー実行部131Cは、処理内容に基づく一連の処理の各処理を実行するコンポーネントにおいてエラー等が発生した場合、当該エラー等が発生したコンポーネントの代替コンポーネントIDを代替コンポーネント管理テーブル4000から取得する。そして、フロー実行部131は、取得した代替コンポーネントIDのコンポーネントを実行させる処理内容(代替フロー内容)の作成を代替フロー内容作成部134に要求する。
代替フロー内容作成部134は、フロー実行部131Cの要求に応じて、当該要求に含まれる代替コンポーネントIDに基づく代替フロー内容を作成する。
ここで、代替コンポーネント管理テーブル4000について、図20を参照しながら説明する。図20は、第四の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
図20に示す代替コンポーネント管理テーブル4000は、データ項目として、フローID、コンポーネントID、及び代替コンポーネントIDを有する。すなわち、代替コンポーネント管理テーブル4000では、フローID毎に、コンポーネントを一意に識別するコンポーネントIDと、代替コンポーネントのコンポーネントIDを示す代替コンポーネントIDとが関連付けられている。なお、代替コンポーネントとは、コンポーネントにエラー等が発生した場合に実行させるコンポーネントのことであり、例えば、エラー等が発生したコンポーネントと同等の処理を行う他のコンポーネントである。
例えば、フローID「flow001」において、コンポーネントID「ocrA」には、代替コンポーネントID「ocrB」が関連付けられている。これにより、フローID「flow001」の処理フローにおいて、コンポーネントID「ocrA」のコンポーネントにエラー等が発生した場合、代替コンポーネントID「ocrB」のコンポーネントを実行させる処理内容を作成することができる。
同様に、例えば、フローID「flow002」において、コンポーネントID「uploadFileB」には、代替コンポーネントID「uploadFileA」が関連付けられている。これにより、フローID「flow002」の処理フローにおいて、コンポーネントID「uploadFileB」のコンポーネントにエラー等が発生した場合、代替コンポーネントID「uploadFileA」のコンポーネントを実行させる処理内容を作成することができる。
なお、代替コンポーネント管理テーブル4000において、フローIDが「−」であるコンポーネントID及び代替コンポーネントIDは、該当のフローIDにおいてエラー等が発生したコンポーネントのコンポーネントIDが存在しない場合に用いられる。例えば、フローID「flow002」の処理フローにおいて、コンポーネントID「transB」のコンポーネントにエラー等が発生した場合、代替コンポーネントID「transC」が処理内容(代替フロー内容)の作成に用いられる。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合につちえ、図21を参照しながら説明する。図21は、第四の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップS1201〜ステップS1206の処理については、第一の実施形態と同様であるため、その説明を省略する。
フロー実行部131Cは、エラーが発生したことを示すデータを受け取ると、代替コンポーネント管理テーブル4000を参照して、該当の代替コンポーネントIDを取得する(ステップS2101)。すなわち、フロー実行部131Cは、ステップS1202で取得した処理内容1100のフローID「flow001」及びOCRコンポーネント1332AのコンポーネントID「ocrA」に関連付けられている代替コンポーネントID「ocrB」を取得する。
次に、フロー実行部131Cは、取得した代替コンポーネントID「ocrB」を含む代替フロー内容の作成要求を代替フロー内容作成部134に送信する(ステップS2102)。
代替フロー内容作成部134は、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントID「ocrB」に基づいて代替フロー内容を作成する(ステップS2103)。すなわち、代替フロー内容作成部134は、処理内容1100に含まれるコンポーネントID「ocrA」を、代替コンポーネントID「ocrB」に変更して、図22に示す処理内容1300を作成する。
そして、代替フロー内容作成部134は、作成した処理内容1300をフロー実行部131Cに返信する。
図22に示す処理内容1300では、点線1301で示すように、処理内容1100における「.to("process:ocrA")」が「.to("process:ocrB")」に変更されている。これにより、処理内容1300に基づく一連の処理(代替フロー)では、OCRコンポーネント1332Bより処理を行うことができる。
フロー実行部131Cは、取得した処理内容1300に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS2104)。より具体的には、フロー実行部131Cは、図22に示す処理内容1300に指定されている「.to("process:ocrB")」に基づき、OCRコンポーネント1332Bの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、OCRコンポーネント1332Bの取得要求を受け取ると、OCRコンポーネント1332Bを生成する(ステップS2105)。そして、OCRコンポーネント1332Bが生成されると、コンポーネント管理部132は、OCRコンポーネント1332Bをフロー実行部131Cに返信する。
フロー実行部131Cは、データを指定して、生成されたOCRコンポーネント1332Bに処理の実行を要求する(ステップS2106)。
OCRコンポーネント1332Bは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS2107)。そして、OCRコンポーネント1332Bは、OCR処理後の電子ファイルを示すデータをフロー実行部131Cに返信する。
次に、フロー実行部131Cは、取得した処理内容1300に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS2108)。より具体的には、フロー実行部131Cは、図22に示す処理内容1300の「.to("process:ocrB")」の次に指定されている「.to("process:transA")」に基づき、翻訳コンポーネント1333Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、翻訳コンポーネント1333Aの取得要求を受け取ると、翻訳コンポーネント1333Aを生成する(ステップS2109)。そして、翻訳コンポーネント1333Aが生成されると、コンポーネント管理部132は、翻訳コンポーネント1333Aをフロー実行部131Cに返信する。
フロー実行部131Cは、データを指定して、生成された翻訳コンポーネント1333Aに処理の実行を要求する(ステップS2110)。なお、ここで指定されるデータは、OCR処理後の電子ファイルである。
次に、翻訳コンポーネント1333Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS2111)。そして、翻訳コンポーネント1333Aは、翻訳処理後の電子ファイルを示すデータをフロー実行部131Cに返信する。
次に、フロー実行部131Cは、取得した処理内容1300に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS2112)。より具体的には、フロー実行部131Cは、図22に示す処理内容1300の「.to("process:transA")」の次に指定されている「.to("storage:uploadFileA")」に基づき、配信コンポーネント1331Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、配信コンポーネント1331Aの取得要求を受け取ると、配信コンポーネント1331Aを生成する(ステップS2113)。そして、配信コンポーネント1331Aが生成されると、コンポーネント管理部132は、配信コンポーネント1331Aをフロー実行部131Cに返信する。
フロー実行部131Cは、データを指定して、生成された配信コンポーネント1331Aに処理の実行を要求する(ステップS2114)。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
次に、配信コンポーネント1331Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS2115)。すなわち、配信コンポーネント1331Aは、ストレージサービスA連携部1601のファイル処理部1701に対して、共通I/F1711として定義されているファイル保存のAPIを用いて、データの配信実行を要求する。これにより、ストレージサービスAの所定のフォルダに翻訳処理後の電子ファイルが保存される。
そして、配信コンポーネント1331Aは、配信実行の実行結果を示すデータをフロー実行部131Cに返信する。
フロー実行部131Cは、処理内容1300に基づく一連の処理(代替フロー)の処理結果をブラウザ210に返信する(ステップS2216)。これにより、画像形成装置20のユーザは、スキャン配信サービスを実現するための一連の処理(処理フロー)においてエラーが発生し、当該エラーが発生したコンポーネントの代わりに代替コンポーネントが実行されたことを知ることができる。
以上のように、本実施形態に係るサービス提供システム10では、処理内容に基づく一連の処理(処理フロー)で実行されたコンポーネントにエラー等が発生した場合、当該コンポーネントの代替コンポーネントを実行させる処理内容(代替フロー内容)を作成する。
そして、本実施形態に係るサービス提供システム10では、作成した処理内容(代替フロー内容)に基づく一連の処理(代替フロー)を実行する。これにより、本実施形態に係るサービス提供システム10では、処理フローにおいてコンポーネントにエラー等が発生した場合、例えば、当該コンポーネントと同等の処理を行う代替コンポーネントを実行させることができる。
[第五の実施形態]
次に、第五の実施形態に係る情報処理システム1について説明する。第五の実施形態では、代替コンポーネントが実行された場合に、当該代替コンポーネントの種別に応じた処理結果をブラウザ210に返信する点が第四の実施形態と異なる。なお、以降では、第四の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第四の実施形態と同一の符号を用いて、その説明を省略する。
<ソフトウェア構成>
本実施形態に係る情報処理システム1に含まれるサービス提供システム10のロジック処理部130の処理ブロックについて、図23を参照しながら説明する。図23は、第五の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図23に示すサービス提供システム10のロジック処理部130は、フロー実行部131D、及び代替フロー内容作成部134Aを有する。また、図23に示すサービス提供システム10のロジック処理部130は、代替コンポーネント管理テーブル4000Aを利用する。
フロー実行部131Dは、エラー等が発生したコンポーネントの代替コンポーネントID及び代替コンポーネントタイプを代替コンポーネント管理テーブル4000Aから取得する。そして、フロー実行部131は、取得した代替コンポーネントIDのコンポーネントを実行させる処理内容(代替フロー内容)の作成を代替フロー内容作成部134Aに要求する。
また、フロー実行部131Dは、処理内容(代替フロー内容)に基づく一連の処理(代替フロー)が実行された場合に、当該処理内容から代替フロータイプを取得し、取得した代替フロータイプに応じた処理結果を返信する。
代替フロー内容作成部134Aは、フロー実行部131Dの要求に応じて、当該要求に含まれる代替コンポーネントID及び代替コンポーネントタイプに基づく代替フロー内容を作成する。
ここで、代替コンポーネント管理テーブル4000Aについて、図24を参照しながら説明する。図24は、第五の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
図24に示す代替コンポーネント管理テーブル4000Aは、データ項目として、さらに、代替コンポーネントタイプを有する。すなわち、代替コンポーネント管理テーブル4000Aでは、フローID、コンポーネントID、及び代替コンポーネントIDに対して代替コンポーネントタイプが関連付けられている。代替コンポーネントタイプとは、代替コンポーネントIDのコンポーネントが実行された場合における代替フローの処理結果の種類を示す情報である。
例えば、代替コンポーネントタイプが「タイプ1」である代替コンポーネントIDのコンポーネントが実行された場合、フロー実行部131Dは、代替フローの処理結果として「成功」を示す処理結果をブラウザ210に返信する。一方で、例えば、代替コンポーネントタイプが「タイプ2」である代替コンポーネントIDのコンポーネントが実行された場合、フロー実行部131Dは、代替フローの処理結果として「失敗」を示す処理結果をブラウザ210に返信する。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図25を参照しながら説明する。図25は、第五の実施形態に係るフロー実行処理の一例のシーケンス図である。
フロー実行部131Dは、エラーが発生したことを示すデータを受け取ると、代替コンポーネント管理テーブル4000Aを参照して、該当の代替コンポーネントID及び代替コンポーネントタイプを取得する(ステップS2501)。すなわち、フロー実行部131Dは、処理内容1100のフローID「flow001」及びOCRコンポーネント1332AのコンポーネントID「ocrA」に関連付けられている代替コンポーネントID「ocrB」及び代替コンポーネントタイプ「タイプ1」を取得する。
次に、フロー実行部131Dは、取得した代替コンポーネントID「ocrB」及び代替コンポーネントタイプ「タイプ1」を含む代替フロー内容の作成要求を代替フロー内容作成部134Aに送信する(ステップS2502)。
代替フロー内容作成部134Aは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントID「ocrB」及び代替コンポーネントタイプ「タイプ1」に基づいて代替フロー内容を作成する(ステップS2503)。すなわち、代替フロー内容作成部134Aは、処理内容1100に含まれるコンポーネントID「ocrA」を、代替コンポーネントID「ocrB」に変更するとともに、代替フロータイプ「タイプ1」を追加して、図26に示す処理内容1400を作成する。
そして、代替フロー内容作成部134Aは、作成した処理内容1400をフロー実行部131Dに返信する。
図26に示す処理内容1400では、点線1401で示すように、代替コンポーネントタイプ「タイプ1」に基づいて、処理内容1100に対して代替フロータイプ「flowtype:"タイプ1"」が追加されている。また、処理内容1400では、点線1402に示すように、処理内容1100における「.to("process:ocrA")」が「.to("process:ocrB")」に変更されている。これにより、処理内容1400に基づく一連の処理(代替フロー)では、OCRコンポーネント1332Bにより処理を行うことができるとともに、代替フロータイプ「タイプ1」に応じた処理結果をブラウザ210に返信することができる。
なお、続くステップS2104〜ステップS2115の処理については、第四の実施形態と同様であるため、その説明を省略する。
フロー実行部131Dは、実行された代替フローの代替フロータイプを取得する(ステップS2504)。より具体的には、フロー実行部131Dは、実行された代替フローの処理内容1400に含まれる「flowtype:"タイプ1"」から代替フロータイプ「タイプ1」を取得する。
次に、フロー実行部131Dは、取得した代替フロータイプに応じた処理結果をブラウザ210に返信する(ステップS2505)。より具体的には、フロー実行部131Dは、取得した代替フロータイプ「タイプ1」に応じて、「成功」を示す処理結果をブラウザ210に返信する。
以上のように、本実施形態に係るサービス提供システム10では、代替フローが実行された場合には、当該代替フローの代替フロータイプに応じた処理結果を画像形成装置20に返信する。また、本実施形態に係るサービス提供システム10では、代替コンポーネントIDに関連付けられた代替コンポーネントタイプに基づいて代替フロータイプを指定する。これにより、本実施形態に係るサービス提供システム10では、実行された代替コンポーネントの種別や内容に応じて、適切な処理結果を画像形成装置20に返信することができる。
[第六の実施形態]
次に、第六の実施形態に係る情報処理システム1について説明する。第六の実施形態では、処理フローにおける各処理を実行するコンポーネントにおいて発生したエラーが回復可能なエラーであるか否かを判定して、当該判定結果に応じた他のコンポーネントのコンポーネントIDを取得する点が第四の実施形態と異なる。なお、以降では、第四の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第四の実施形態と同一の符号を用いて、その説明を省略する。
<ソフトウェア構成>
本実施形態に係る情報処理システム1に含まれるサービス提供システム10のロジック処理部130の処理ブロックについて、図27を参照しながら説明する。図27は、第六の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
図27に示すサービス提供システム10のロジック処理部130は、フロー実行部131E、及び代替フロー内容作成部134Bを有する。また、図27に示すサービス提供システム10のロジック処理部130において、コンポーネント群133は、例外コンポーネント1334Aや例外コンポーネント1334B等が含まれる。
さらに、図27に示すサービス提供システム10のロジック処理部130は、代替コンポーネント管理テーブル4000Bを利用する。
フロー実行部131Eは、処理内容に基づく一連の処理(処理フロー)における各処理を実行するコンポーネントにおいてエラー等が発生した場合に、当該エラーが回復可能なエラーであるか否かを判定する。そして、フロー実行部131Eは、代替コンポーネント管理テーブル4000Bを参照して、当該判定結果に応じて、代替コンポーネントID又は例外コンポーネントIDを取得する。
ここで、例外コンポーネントIDとは、処理フローにおける各処理を実行するコンポーネントにおいて回復不可能なエラーが発生した場合に実行される他のコンポーネント(例外コンポーネント1334A等)のコンポーネントIDのことである。なお、例外コンポーネント1334A等は、例えば、エラー情報の出力やエラー通知等の処理を実行する。
代替フロー内容作成部134Bは、フロー実行部131Eの要求に応じて、当該要求に含まれる代替コンポーネントID又は例外コンポーネントIDに基づく代替フロー内容を作成する。
ここで、代替コンポーネント管理テーブル4000Bについて、図28を参照しながら説明する。図28は、第六の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
図28に示す代替コンポーネント管理テーブル4000Bは、データ項目として、さらに、例外コンポーネントIDを有する。すなわち、代替コンポーネント管理テーブル4000Bでは、フローID及びコンポーネントIDに対して、代替コンポーネントIDに加えて、例外コンポーネントIDが関連付けられている。
例えば、フローID「flow001」及びコンポーネントID「ocrA」には、代替コンポーネントID「ocrB」に加えて、例外コンポーネント1334Aの例外コンポーネントID「exceptA」が関連付けられている。同様に、例えば、フローID「flow001」及びコンポーネントID「uploadFileA」には、代替コンポーネントID「uploadFileB」に加えて、例外コンポーネント1334Bの例外コンポーネントID「exceptB」が関連付けられている。
これにより、フロー実行部131Eは、処理フローの各処理を実行するコンポーネントにおいてエラー等が発生した場合には、当該エラーに応じて、代替コンポーネントID又例外コンポーネントIDを取得することができる。
<処理の詳細>
次に、本実施形態に係る情報処理システム1の処理の詳細について説明する。
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図29を参照しながら説明する。図29は、第六の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップS1201〜ステップS1206の処理については、第一の実施形態と同様であるため、その説明を省略する。
フロー実行部131Eは、エラーが発生したことを示すデータを受け取ると、当該エラーが回復可能なエラーであるか否かを判定する(ステップS2901)。
ここで、本実施形態において、回復可能なエラーとは、代替コンポーネントIDのコンポーネントを実行することが可能なエラー種別を言う。このようなエラー種別には、例えば、一時的なネットワークエラー等が含まれる。
一方、本実施形態において、回復不可能なエラーとは、代替コンポーネントIDのコンポーネントを実行することが不可能なエラー種別を言う。このようなエラー種別には、例えば、コンポーネントに入力されたデータが不正であることを示すエラー等が含まれる。
ステップS2901において、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部131Eは、ステップS2902〜ステップS2905の処理を実行する。一方で、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部131Eは、ステップS2906〜ステップS2913の処理を実行する。
すなわち、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部131Eは、代替コンポーネント管理テーブル4000Bを参照して、該当の代替コンポーネントIDを取得する(ステップS2902)。すなわち、フロー実行部131Eは、ステップS1202で取得した処理内容1100のフローID「flow001」及びOCRコンポーネント1332AのコンポーネントID「ocrA」に関連付けられている代替コンポーネントID「ocrB」を取得する。
次に、フロー実行部131Eは、取得した代替コンポーネントID「ocrB」を含む代替フロー内容の作成要求を代替フロー内容作成部134Bに送信する(ステップS2903)。
代替フロー内容作成部134Bは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントID「ocrB」に基づいて代替フロー内容を作成する(ステップS2904)。すなわち、代替フロー内容作成部134は、処理内容1100に含まれるコンポーネントID「ocrA」を、代替コンポーネントID「ocrB」に変更して、図22に示す処理内容1300を作成する。
そして、代替フロー内容作成部134Bは、作成した処理内容1300をフロー実行部131Cに返信する。
次に、フロー実行部131Eは、受け取った処理内容1300に基づく代替フローを実行する(ステップS2905)。すなわち、この場合、図21のステップS2104〜ステップS2116と同様の処理が行われる。
一方、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部131Eは、代替コンポーネント管理テーブル4000Bを参照して、該当の例外コンポーネントIDを取得する(ステップS2906)。すなわち、フロー実行部131Eは、ステップS1202で取得した処理内容1100のフローID「flow001」及びOCRコンポーネント1332AのコンポーネントID「ocrA」に関連付けられている例外コンポーネントID「exceptA」を取得する。
次に、フロー実行部131Eは、取得した例外コンポーネントID「exceptA」を含む代替フロー内容の作成要求を代替フロー内容作成部134Bに送信する(ステップS2907)。
代替フロー内容作成部134Bは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる例外コンポーネントID「exceptA」に基づいて代替フロー内容を作成する(ステップS2908)。すなわち、代替フロー内容作成部134Bは、図30に示す処理内容1500を作成する。
そして、代替フロー内容作成部134Bは、作成した処理内容1500をフロー実行部131Eに返信する。
図30に示す処理内容1500では、点線1501で示すように、「.to("process:exceptA")」が指定されている。これにより、処理内容1500に基づく一連の処理(代替フロー)では、例外コンポーネント1334Aにより処理を行うことができる。
フロー実行部131Eは、取得した処理内容1500に従ってコンポーネントの取得を、コンポーネント管理部132に要求する(ステップS2909)。より具体的には、フロー実行部131Eは、図30に示す処理内容1500に指定されている「.to("process:exceptA")」に基づき、例外コンポーネント1334Aの取得を、コンポーネント管理部132に要求する。
コンポーネント管理部132は、例外コンポーネント1334Aの取得要求を受け取ると、例外コンポーネント1334Aを生成する(ステップS2910)。そして、例外コンポーネント1334Aが生成されると、コンポーネント管理部132は、例外コンポーネント1334Aをフロー実行部131Eを返信する。
フロー実行部131Eは、データを指定して、生成された例外コンポーネント1334Aに処理の実行を要求する(ステップS2911)。
例外コンポーネント1334Aは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する(ステップS2912)。すなわち、例外コンポーネント1334Aは、例えば、エラー情報の出力やエラー通知等の例外処理を実行する。
そして、例外コンポーネント1334Aは、当該処理の処理結果を示すデータをフロー実行部131Eに返信する。
フロー実行部131Eは、処理内容1500に基づく一連の処理(代替フロー)の処理結果をブラウザ210に返信する(ステップS2913)。これにより、画像形成装置20のユーザは、スキャン配信サービスを実現するための一連の処理(処理フロー)において回復不可能なエラーが発生し、当該エラーが発生したコンポーネントの代わりに例外コンポーネントが実行されたことを知ることができる。
以上のように、本実施形態に係るサービス提供システム10では、処理フローで実行されたコンポーネントにエラー等が発生した場合、当該エラーが回復可能か否かに応じて、代替コンポーネントID又は例外コンポーネントIDを取得する。そして、本実施形態に係るサービス提供システム10では、例外コンポーネントIDを取得した場合、エラー情報の出力やエラー通知等の例外処理を行う例外コンポーネントを実行させる。
これにより、本実施形態に係るサービス提供システム10では、例えば、処理フローにおいて回復不可能な深刻なエラーが発生した場合等には、当該エラーの発生を画像形成装置20に通知するための例外処理を実行することができる。
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。