(57)【特許請求の範囲】
【請求項１】
１以上の情報処理装置が含まれる情報処理システムであって、
電子データを用いた一連の処理を示す第１の処理を外部サービスと連携して実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、
前記第１の処理に関する情報と、該第１の処理に関する情報に基づく第１の処理においてエラーが発生した場合に実行され、前記第１の処理と同等の処理結果を得るための処理内容が定義された第２の処理に関する情報と、該第２の処理が実行された場合における処理結果の種類を示す種類情報とを関連付けて記憶する第２の記憶手段と、
前記情報処理システムに接続される１以上の機器のうちの一の機器から、前記アプリ識別情報と、前記第１の処理に用いられる電子データに関する情報とを含む要求を受け付けると、該要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく電子データを用いて実行する処理実行手段と、
前記処理実行手段により前記第２の処理が実行された場合に、前記第２の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている種類情報に応じた処理結果を、前記一の機器に送信する送信手段と、
を有し、
前記処理実行手段は、
前記第１の処理においてエラーが発生した場合に、該第１の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている前記第２の処理に関する情報に基づく第２の処理を、前記電子データに対して実行する、情報処理システム。
【請求項２】
前記第１の処理においてエラーが発生した場合に、該発生したエラーの種別を判定する判定手段を有し、
前記第２の記憶手段は、
前記第１の処理に関する情報と、前記第２の処理に関する情報と、該第２の処理に関する情報と異なる第３の処理に関する情報とを関連付けて記憶し、
前記処理実行手段は、
前記第１の処理においてエラーが発生した場合に、前記判定手段により該発生したエラーの種別を判定して、判定結果に応じて、前記第１の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている前記第２の処理に関する情報に基づく第２の処理又は前記第３の処理に関する情報に基づく第３の処理を、前記電子データを用いて実行する、請求項１に記載の情報処理システム。
【請求項３】
前記第３の処理に関する情報には、エラー情報の出力及びエラー通知のうちの少なくとも一方を行うための処理内容が定義されている、請求項２に記載の情報処理システム。
【請求項４】
前記処理実行手段は、
電子データを用いて、それぞれ所定の処理を行う複数のコンポーネントを有し、
前記要求に含まれる前記電子データに関する情報に基づく電子データを用いて実行する前記第１の処理又は前記第２の処理を、前記複数のコンポーネントのうちの１以上のコンポーネントを組み合わせて実行する、請求項１ないし３のいずれか１項に記載の情報処理システム。
【請求項５】
前記複数のコンポーネントは、外部サービスに関する処理を実行するコンポーネントを含み、
前記外部サービスに関する処理を実行するコンポーネントには、
外部サービスに対して電子データをアップロードする処理を行うコンポーネントを少なくとも含む、請求項４に記載の情報処理システム。
【請求項６】
情報処理装置であって、
電子データを用いた一連の処理を示す第１の処理を外部サービスと連携して実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、
前記第１の処理に関する情報と、該第１の処理に関する情報に基づく第１の処理においてエラーが発生した場合に実行され、前記第１の処理と同等の処理結果を得るための処理内容が定義された第２の処理に関する情報と、該第２の処理が実行された場合における処理結果の種類を示す種類情報とを関連付けて記憶する第２の記憶手段と、
前記情報処理装置に接続される１以上の機器のうちの一の機器から、前記アプリ識別情報と、前記第１の処理に用いられる電子データに関する情報とを含む要求を受け付けると、該要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく電子データを用いて実行する処理実行手段と、
前記処理実行手段により前記第２の処理が実行された場合に、前記第２の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている種類情報に応じた処理結果を、前記一の機器に送信する送信手段と、
を有し、
前記処理実行手段は、
前記第１の処理においてエラーが発生した場合に、該第１の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている前記第２の処理に関する情報に基づく第２の処理を、前記電子データに対して実行する、情報処理装置。
【請求項７】
１以上の情報処理装置が含まれる情報処理システムであって、電子データを用いた一連の処理を示す第１の処理を外部サービスと連携して実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、前記第１の処理に関する情報と、該第１の処理に関する情報に基づく第１の処理においてエラーが発生した場合に実行され、前記第１の処理と同等の処理結果を得るための処理内容が定義された第２の処理に関する情報と、該第２の処理が実行された場合における処理結果の種類を示す種類情報とを関連付けて記憶する第２の記憶手段と、を有する情報処理システムに用いられる情報処理方法において、
前記情報処理システムに接続される１以上の機器のうちの一の機器から、前記アプリ識別情報と、前記第１の処理に用いられる電子データに関する情報とを含む要求を受け付けると、該要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく電子データを用いて実行する処理実行手順と、
前記処理実行手順により前記第２の処理が実行された場合に、前記第２の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている種類情報に応じた処理結果を、前記一の機器に送信する送信手順と、
を有し、
前記処理実行手順は、
前記第１の処理においてエラーが発生した場合に、該第１の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている前記第２の処理に関する情報に基づく第２の処理を、前記電子データに対して実行する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
近年、クラウドコンピューティング等により多種多様な外部サービスが提供されるようになってきており、外部サービスと機器とが連携して処理を行う技術が知られている。例えば、画像形成装置で原稿をスキャンして取得した画像データを外部ストレージサービスに保管する技術が知られている。
【０００３】
また、予め定義された事務フローモデルに基づき、各種処理を実行するコンポーネント部品を制御するための事務フローを生成する技術が知られている（例えば特許文献１参照）。このような技術では、生成された事務フローによりコンポーネント部品が組み合わされて、事務処理を実現する一連の処理が実行される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の従来技術においては、一連の処理の途中でエラー等が発生した場合には、当該一連の処理を最初から実行し直す必要があった。このため、当該一連の処理を実行し直すことができない場合には、ユーザは、所望の処理結果を得ることができなかった。
【０００５】
本発明の一実施形態は、上記の点に鑑みてなされたもので、外部サービスと連携した一連の処理の代替処理の実行を可能にすることを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の一実施形態は、１以上の情報処理装置が含まれる情報処理システムであって、電子データを用いた一連の処理を示す第１の処理を外部サービスと連携して実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、前記第１の処理に関する情報と、該第１の処理に関する情報に基づく第１の処理においてエラーが発生した場合に実行される第２の処理に関する情報とを関連付けて記憶する第２の記憶手段と、前記情報処理システムに接続される１以上の機器のうちの一の機器から、前記アプリ識別情報と、前記第１の処理に用いられる電子データに関する情報とを含む要求を受け付けると、該要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく電子データを用いて実行する処理実行手段と、を有し、前記処理実行手段は、前記第１の処理においてエラーが発生した場合に、該第１の処理に関する情報に関連付けて前記第２の記憶手段に記憶されている前記第２の処理に関する情報に基づく第２の処理を、前記電子データに対して実行する。
【発明の効果】
【０００７】
本発明の一実施形態によれば、外部サービスと連携した一連の処理の代替処理の実行を可能にすることができる。
【図面の簡単な説明】
【０００８】
【図１】第一の実施形態に係る情報処理システムの一例のシステム構成を示す図である。
【図２】第一の実施形態に係るサービス提供システムの一例のハードウェア構成を示す図である。
【図３】第一の実施形態に係る画像形成装置の一例のハードウェア構成を示す図である。
【図４】第一の実施形態に係る情報処理システムの一例の処理ブロックを示す図である。
【図５】共通Ｉ／Ｆ及び固有Ｉ／Ｆの一例を示す図である。
【図６】第一の実施形態に係る処理内容の一例を示す図である。
【図７】第一の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図８】第一の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【図９】第一の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【図１０】スキャン配信サービスを利用するためのアプリ画面の一例を示す図である。
【図１１】第一の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図１２】第一の実施形態に係るフロー実行処理の他の例のシーケンス図である。
【図１３】第二の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図１４】第二の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【図１５】第二の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図１６】第三の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図１７】第三の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【図１８】第三の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図１９】第四の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図２０】第四の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【図２１】第四の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図２２】第四の実施形態に係る処理内容の一例を示す図である。
【図２３】第五の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図２４】第五の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【図２５】第五の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図２６】第五の実施形態に係る処理内容の一例を示す図である。
【図２７】第六の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【図２８】第六の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【図２９】第六の実施形態に係るフロー実行処理の一例のシーケンス図である。
【図３０】第六の実施形態に係る処理内容（例外フロー内容）の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について図面を参照しながら詳細に説明する。
【００１０】
［第一の実施形態］
＜システム構成＞
まず、本実施形態に係る情報処理システム１のシステム構成について、図１を参照しながら説明する。図１は、第一の実施形態に係る情報処理システムの一例のシステム構成を示す図である。
【００１１】
図１に示す情報処理システム１は、サービス提供環境Ｅ１、ユーザ環境Ｅ２、及び外部ストレージシステム３０を含み、インターネット等の広域的なネットワークＮ１を介して通信可能に接続されている。
【００１２】
サービス提供環境Ｅ１は、ネットワークＮ１を介してクラウドサービス等の外部サービスを提供するシステム環境である。なお、本実施形態では、外部サービスの具体例としてクラウドサービスを採用して説明するが、ＡＳＰ（Application Service Provider）によって提供されるサービスやＷｅｂサービス等、ネットワークを介して提供されるサービスに関して本実施形態が適用されても良い。
【００１３】
サービス提供環境Ｅ１は、一台以上の情報処理装置で実現されるサービス提供システム１０を有する。サービス提供システム１０は、ネットワークＮ１を介して所定のサービスを提供する。
【００１４】
例えば、サービス提供システム１０は、ユーザ環境Ｅ２の画像形成装置２０において原稿をスキャンして生成された電子ファイルをＯＣＲ（Optical Character Reader）処理した後、言語の翻訳処理をして、外部ストレージシステム３０に保存するサービスを提供する。本実施形態では、このようなサービスを「スキャン配信サービス」と表す。そして、サービス提供システム１０は、スキャン配信サービスを提供するものとして説明する。
【００１５】
ただし、サービス提供システム１０により提供されるサービスは、これに限られない。サービス提供システム１０は、例えば、外部ストレージシステム３０に保存されている電子ファイルを、ユーザ環境Ｅ２の画像形成装置２０で印刷するサービスを提供しても良い。また、サービス提供システム１０は、例えば、外部ストレージシステム３０に保存されている電子ファイルを、ユーザ環境Ｅ２のプロジェクタで投影するサービスを提供しても良い。
【００１６】
なお、サービス提供システム１０の全部又は一部は、ユーザ環境Ｅ２に設置されていても良い。すなわち、サービス提供システム１０を構成する情報処理装置の全部又は一部は、ユーザ環境Ｅ２に包含されていても良い。
【００１７】
ユーザ環境Ｅ２は、例えば、画像形成装置２０を利用するユーザである企業等におけるシステム環境である。ユーザ環境Ｅ２は、一台以上の画像形成装置２０が、例えばＬＡＮ（Local Area Network）等のネットワークを介して接続されている。
【００１８】
本実施形態に係る画像形成装置２０は、スキャン機能を有するＭＦＰ（Multifunction Peripheral）等の複合機である。なお、画像形成装置２０は、スキャン機能以外に、例えば、プリント機能、コピー機能、及びファクス（ＦＡＸ）通信機能等を有していても良い。
【００１９】
外部ストレージシステム３０は、ネットワークＮ１を介してストレージサービス（又はオンラインストレージ）と呼ばれるクラウドサービスを提供するコンピュータシステムである。
【００２０】
ストレージサービスとは、外部ストレージシステム３０のストレージの記憶領域を貸し出すサービスである。本実施形態に係るスキャン配信サービスでは、外部ストレージシステム３０によって貸し出される記憶領域に対して、ＯＣＲ処理及び翻訳処理された電子ファイルを保存（アップロード）する。
【００２１】
なお、以降では、複数の外部ストレージシステム３０について、各々を区別するときは、「外部ストレージシステム３０１」、「外部ストレージシステム３０２」等と添え字を用いて表す。また、外部ストレージシステム３０１によって提供されるサービスの名称を「ストレージサービスＡ」、外部ストレージシステム３０２によって提供されるサービスの名称を「ストレージサービスＢ」等とする。
【００２２】
外部ストレージシステム３０は、複数台の情報処理装置によって実現されるシステムであっても良い。また、図１に示す情報処理システム１の構成は一例であって、他の構成であっても良い。例えば、ユーザ環境Ｅ２は、画像形成装置２０に加えて又は画像形成装置２０に代えて、プロジェクタ、電子黒板等の各種機器を有していても良い。
【００２３】
＜ハードウェア構成＞
≪サービス提供システム≫
サービス提供システム１０のハードウェア構成について、図２を参照しながら説明する。図２は、第一の実施形態に係るサービス提供システムの一例のハードウェア構成を示す図である。
【００２４】
図２に示すサービス提供システム１０は、入力装置１１、表示装置１２、外部Ｉ／Ｆ１３、及びＲＡＭ（Random Access Memory）１４を有する。また、サービス提供システム１０は、ＲＯＭ（Read Only Memory）１５、ＣＰＵ（Central Processing Unit）１６、通信Ｉ／Ｆ１７、及びＨＤＤ（Hard Disk Drive）１８を有する。これらの各ハードウェアは、それぞれがバスＢで接続されている。
【００２５】
入力装置１１は、キーボードやマウス、タッチパネル等を含み、ユーザが各操作信号を入力するのに用いられる。表示装置１２は、ディスプレイ等を含み、サービス提供システム１０による処理結果を表示する。なお、入力装置１１及び表示装置１２は、必要なときにバスＢに接続して利用する形態であっても良い。
【００２６】
通信Ｉ／Ｆ１７は、サービス提供システム１０をネットワークＮ１に接続するインタフェースである。これにより、サービス提供システム１０は、通信Ｉ／Ｆ１７を介してデータ通信を行うことができる。
【００２７】
ＨＤＤ１８は、プログラムやデータを格納している不揮発性の記憶装置である。格納されるプログラムやデータには、サービス提供システム１０全体を制御する基本ソフトウェアであるＯＳ（Operating System）、及びＯＳ上において各種機能を提供するアプリケーションソフトウェア等がある。
【００２８】
なお、サービス提供システム１０は、ＨＤＤ１０８に代えて又はＨＤＤ１０８に加えて、フラッシュメモリを用いるドライブ装置（例えばソリッドステートドライブ：ＳＳＤ）を利用しても良い。また、ＨＤＤ１０８は、格納しているプログラムやデータを所定のファイルシステム及び／又はＤＢにより管理している。
【００２９】
外部Ｉ／Ｆ１３は、外部装置とのインタフェースである。外部装置には、記録媒体１３ａ等がある。これにより、サービス提供システム１０は、外部Ｉ／Ｆ１３を介して記録媒体１３ａの読み取り及び／又は書き込みを行うことができる。記録媒体１３ａには、フレキシブルディスク、ＣＤ、ＤＶＤ、ＳＤメモリカード、ＵＳＢメモリ等がある。
【００３０】
ＲＯＭ１５は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ＲＯＭ１５には、サービス提供システム１０の起動時に実行されるＢＩＯＳ（Basic Input/Output System）、ＯＳ設定、及びネットワーク設定等のプログラムやデータが格納されている。ＲＡＭ１４は、プログラムやデータを一時保持する揮発性の半導体メモリである。
【００３１】
ＣＰＵ１６は、ＲＯＭ１５やＨＤＤ１８等からプログラムやデータをＲＡＭ１４上に読み出し、処理を実行することで、サービス提供システム１０全体の制御や機能を実現する演算装置である。
【００３２】
本実施形態に係るサービス提供システム１０は、上記のハードウェア構成を有することにより、後述するような各種処理を実現できる。
【００３３】
≪画像形成装置≫
画像形成装置２０のハードウェア構成について、図３を参照しながら説明する。図３は、第一の実施形態に係る画像形成装置の一例のハードウェア構成を示す図である。
【００３４】
図３に示す画像形成装置２０は、コントローラ２１、操作パネル２２、外部Ｉ／Ｆ２３、通信Ｉ／Ｆ２４、及びスキャナ２５を有する。また、コントローラ２１は、ＣＰＵ２１１、ＲＡＭ２１２、ＲＯＭ２１３、ＮＶＲＡＭ２１４、及びＨＤＤ２１５を有する。
【００３５】
ＲＯＭ２１３は、各種プログラムやデータを格納する。ＲＡＭ２１２は、プログラムやデータを一時保持する。ＮＶＲＡＭ２１４は、例えば設定情報等が格納されている。また、ＨＤＤ２１５は、各種プログラムやデータを格納する。
【００３６】
ＣＰＵ２１１は、ＲＯＭ２１３やＮＶＲＡＭ２１４、ＨＤＤ２１５等からプログラムやデータ、設定情報等をＲＡＭ２１２上に読み出し、処理を実行することで、画像形成装置２０全体の制御や機能を実現する。
【００３７】
操作パネル２２は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている。外部Ｉ／Ｆ２３は、外部装置とのインタフェースである。外部装置には、記録媒体２３ａ等がある。これにより、画像形成装置２０は、外部Ｉ／Ｆ２３を介して記録媒体２３ａの読み取り及び／又は書き込みを行うことができる。記録媒体２３ａにはＩＣカード、フレキシブルディスク、ＣＤ、ＤＶＤ、ＳＤメモリカード、ＵＳＢメモリ等がある。
【００３８】
通信Ｉ／Ｆ２４は、画像形成装置２０をネットワークＮ１に接続するインタフェースである。これにより、画像形成装置２０は通信Ｉ／Ｆ２４を介してデータ通信を行うことができる。スキャナ２５は、原稿を読み取り画像ファイル（電子ファイル）を生成するための読取装置である。
【００３９】
本実施形態に係る画像形成装置２０は、上記のハードウェア構成を有することにより、後述するような各種処理を実現できる。
【００４０】
＜ソフトウェア構成＞
次に、本実施形態に係る情報処理システム１の処理ブロックについて、図４を参照しながら説明する。図４は、第一の実施形態に係る情報処理システムの一例の処理ブロックを示す図である。
【００４１】
図４に示す画像形成装置２０は、例えばＣＰＵ２１１等により実行されるブラウザ２１０を有する。画像形成装置２０のユーザは、ブラウザ２１０を介して、サービス提供システム１０により提供されるサービスを利用することができる。このように、本実施形態に係る画像形成装置２０は、ブラウザ２１０が搭載（インストール）されていれば良い。すなわち、本実施形態に係る情報処理システム１では、サービス提供システム１０により提供されるサービスを画像形成装置２０が利用するための専用アプリケーションを開発等する必要がない。
【００４２】
図４に示すサービス提供システム１０は、サービス処理部１１０、ドキュメントサービス部１５０、及びストレージサービス連携部１６０を有する。これら各部は、サービス提供システム１０にインストールされた１以上のプログラムが、ＣＰＵ１６に実行させる処理により実現される。
【００４３】
また、サービス提供システム１０は、アプリ情報記憶部１９０を有する。アプリ情報記憶部１９０は、ＨＤＤ１８により実現可能である、なお、アプリ情報記憶部１９０は、サービス提供システム１０とネットワークを介して接続される記憶装置等により実現されても良い。
【００４４】
サービス処理部１１０は、画像形成装置２０のブラウザ２１０からの要求に応じて、各種のサービスに関する処理を実行する。サービス処理部１１０は、アプリ管理部１２０、ロジック処理部１３０、及びデータＩ／Ｆ部１４０を有する。
【００４５】
アプリ管理部１２０は、アプリ情報記憶部１９０に記憶されているアプリ情報１０００を管理する。アプリ管理部１２０は、ブラウザ２１０からの要求に応じて、アプリ情報１０００に含まれる画面定義に基づくアプリ画面を返信する。これにより、画像形成装置２０の操作パネル２２には、ブラウザ２１０により、サービス提供システム１０により提供されるサービスを利用するためのアプリ画面が表示される。
【００４６】
ここで、アプリ情報１０００には、アプリ画面を画像形成装置２０に表示させるための画面定義と、アプリ画面から利用されるサービスを実現するための処理内容とが含まれる。なお、アプリ情報１０００には、複数の画面定義と、複数の処理内容とが含まれていても良い。
【００４７】
また、アプリ管理部１２０は、ロジック処理部１３０からの要求に応じて、アプリ情報１０００に含まれる処理内容を返信する。処理内容は、サービス提供システム１０により提供されるサービスを実現するための一連の処理（以降では、一連の処理を「処理フロー」とも表す。）が記述されている。
【００４８】
ロジック処理部１３０は、ブラウザ２１０からの要求に応じて、アプリ管理部１２０を介して処理内容を取得する。そして、ロジック処理部１３０は、取得した処理内容に基づく一連の処理を実行する。
【００４９】
すなわち、ロジック処理部１３０は、ドキュメントサービス部１５０又は／及びストレージサービス連携部１６０のファイル処理部１７０に対して、処理内容に従った処理の実行を要求することで、処理内容に基づく一連の処理を実行する。これにより、本実施形態に係るサービス提供システム１０は、画像形成装置２０に対して各種のサービスを提供することができる。なお、ロジック処理部１３０の詳細な処理ブロックについては、後述する。
【００５０】
データＩ／Ｆ部１４０は、ブラウザ２１０からの要求に応じて、ストレージサービス連携部１６０のデータ処理部１８０に対して、所定の要求（例えば、フォルダ一覧の取得要求等）を行う。
【００５１】
ドキュメントサービス部１５０は、サービス提供システム１０により提供されるサービスを実現するためのプログラム（モジュール）群である。ドキュメントサービス部１５０には、例えば、電子ファイルに対してＯＣＲ処理を行うＯＣＲ処理１５１や、所定の言語で記載されている文書ファイル（電子ファイル）を他の所定の言語に翻訳する翻訳処理１５２等のプログラムが含まれる。
【００５２】
なお、ドキュメントサービス部１５０には、これら以外にも、種々のプログラムが含まれていても良い。例えば、ドキュメントサービス部１５０には、電子ファイルを画像形成装置２０が印刷可能なデータ形式（印刷データ）に変換するプログラムや、電子ファイルを圧縮又は解凍するためのプログラム等が含まれていても良い。
【００５３】
ストレージサービス連携部１６０は、ロジック処理部１３０やデータＩ／Ｆ部１４０からの要求に応じて、外部ストレージシステム３０に対して、各種処理の実行を要求する。
【００５４】
ここで、本実施形態に係るサービス提供システム１０は、外部ストレージシステム３０毎に、ストレージサービス連携部１６０を有する。すなわち、サービス提供システム１０は、外部ストレージシステム３０１に対して処理を要求するためのストレージサービスＡ連携部１６０１、外部ストレージシステム３０２に対して処理を要求するためのストレージサービスＢ連携部１６０２等を有する。このように、サービス提供システム１０は、当該サービス提供システム１０と連携して処理を行う外部ストレージシステム３０毎に、それぞれの外部ストレージシステム３０に対応するストレージサービス連携部１６０を有する。
【００５５】
なお、以降では、複数のストレージサービス連携部１６０について、各々を区別するときは、「ストレージサービスＡ連携部１６０１」、「ストレージサービスＢ連携部１６０２」等と記載する。
【００５６】
ストレージサービス連携部１６０は、上述したように、ロジック処理部１３０からの要求を受け取るファイル処理部１７０、及びデータＩ／Ｆ部１４０からの要求を受け取るデータ処理部１８０を有する。
【００５７】
ファイル処理部１７０は、外部ストレージシステム３０に保存されている電子ファイルに対する操作（例えば、取得、保存、編集等）を行うためのＡＰＩ（Application Programming Interface）が定義された共通Ｉ／Ｆ１７１及び固有Ｉ／Ｆ１７２を有する。
【００５８】
共通Ｉ／Ｆ１７１は、複数の外部ストレージシステム３０間で共通に利用できるＡＰＩであり、例えば図５（ａ）に示すＡＰＩが挙げられる。換言すれば、ファイル処理部１７０の共通Ｉ／Ｆ１７１は、すべての外部ストレージシステム３０が利用できるファイル操作に関する機能（例えば、ファイルの取得、保存等）を利用するためのＡＰＩ群である。
【００５９】
一方、固有Ｉ／Ｆ１７２は、特定の外部ストレージシステム３０において利用できるＡＰＩであり、例えば図５（ｂ）に示すＡＰＩが挙げられる。換言すれば、ファイル処理部１７０の固有Ｉ／Ｆ１７２は、特定の外部ストレージシステム３０において利用できるファイル操作に関する機能（例えば、ファイルの編集等）を利用するためのＡＰＩ群である。
【００６０】
したがって、共通Ｉ／Ｆ１７１は、すべてのストレージサービス連携部１６０に対して同様に定義される。一方で、固有Ｉ／Ｆ１７２は、当該固有Ｉ／Ｆ１７２で定義されるＡＰＩが利用可能な特定のストレージサービス連携部１６０に対して個別に定義される。
【００６１】
また、データ処理部１８０は、外部ストレージシステム３０に保存されている電子ファイルの書誌情報等のメタデータ（例えば、ファイル一覧、フォルダ一覧等）を取得等するためのＡＰＩが定義された共通Ｉ／Ｆ１８１及び固有Ｉ／Ｆ１８２を有する。
【００６２】
共通Ｉ／Ｆ１８１は、複数の外部ストレージシステム３０間で共通に利用できるＡＰＩであり、例えば図５（ｃ）に示すＡＰＩが挙げられる。換言すれば、データ処理部１８０の共通Ｉ／Ｆ１８１は、すべての外部ストレージシステム３０で利用できるメタデータ取得等の機能を利用するためのＡＰＩ群である。
【００６３】
一方、固有Ｉ／Ｆ１８２は、特定の外部ストレージシステム３０において利用できるＡＰＩであり、例えば図５（ｄ）に示すＡＰＩが挙げられる。換言すれば、データ処理部１８０の固有Ｉ／Ｆ１８２は、特定の外部ストレージシステム３０において利用できるメタデータ取得等の機能（例えば、画像ファイル一覧の取得等）を利用するためのＡＰＩ群である。
【００６４】
したがって、共通Ｉ／Ｆ１８１は、すべてのストレージサービス連携部１６０に対して同様に定義される。一方で、固有Ｉ／Ｆ１８２は、当該固有Ｉ／Ｆ１８２で定義されるＡＰＩが利用可能な特定のストレージサービス連携部１６０に対して個別に定義される。
【００６５】
以上のように、本実施形態に係るサービス提供システム１０は、連携して処理を行う外部ストレージシステム３０毎に、それぞれの外部ストレージシステム３０に対応するストレージサービス連携部１６０を有する。このため、連携先となる外部ストレージシステム３０を追加等する場合には、当該外部ストレージシステム３０に対応するストレージサービス連携部１６０をサービス提供システム１０に追加等すれば良い。
【００６６】
したがって、本実施形態に係るサービス提供システム１０は、連携先となる外部ストレージシステム３０の追加等に伴う影響を局所化することができる。換言すれば、他の処理ブロック（サービス処理部１１０やドキュメントサービス部１５０等）に影響を与えることなく（すなわち、他の処理ブロックを修正等する必要なく）、連携先となる外部ストレージシステム３０の追加等を行うことができる。
【００６７】
これにより、本実施形態に係るサービス提供システム１０では、連携先の外部ストレージシステム３０の追加等の開発に要する工数を削減することができる。なお、ストレージサービス連携部１６０の追加等は、ＳＤＫ（Software Development Kit）を用いて行うことができる。
【００６８】
また、ストレージサービス連携部１６０では、共通Ｉ／Ｆ１７１及び固有Ｉ／Ｆ１７２がそれぞれ異なるモジュール等で実現される。さらに、共通Ｉ／Ｆ１７１及び固有Ｉ／Ｆ１７２で定義されるＡＰＩは、「ストレージサービス名」（外部サービス名）を指定することで利用することができる（すなわち、「ストレージサービス名」（外部サービス名）が可変部分となっている）。
【００６９】
したがって、連携先の外部ストレージシステム３０を追加する場合には、他のストレージサービス連携部１６０に定義されている共通Ｉ／Ｆ１７１を再利用することができる。換言すれば、連携先の外部ストレージシステム３０を追加する場合には、当該追加する外部ストレージシステム３０の固有Ｉ／Ｆ１７２のみを開発すれば良い。これにより、本実施形態に係るサービス提供システム１０では、連携先の外部ストレージシステム３０の追加等の開発に要する工数をさらに削減することができる。なお、このことは、データ処理部１８０の共通Ｉ／Ｆ１８１及び固有Ｉ／Ｆ１８２に関しても同様である。
【００７０】
アプリ情報記憶部１９０は、アプリ情報１０００を記憶する。アプリ情報１０００は、アプリ画面を画像形成装置２０に表示させるための画面定義と、アプリ画面から利用されるサービスを実現するための一連の処理の内容が記述された処理内容とを含む。また、アプリ情報１０００には、当該アプリ情報１０００を一意に識別するためのアプリＩＤが付与されている。
【００７１】
ここで、本実施形態に係るスキャン配信サービスを提供するためのアプリ情報１０００のアプリＩＤを「app001」であるとする。また、アプリＩＤ「app001」のアプリ情報１０００には、ストレージサービスＡと連携したスキャン配信サービスを実現するための処理内容１１００、ストレージサービスＢと連携したスキャン配信サービスを実現するための処理内容１２００等が含まれるものとする。
【００７２】
ここで、ストレージサービスＡと連携したスキャン配信サービスを実現するための処理内容１１００及びストレージサービスＢと連携したスキャン配信サービスを実現するための処理内容１２００について、図６を参照しながら説明する。図６は、第一の実施形態に係る処理内容の一例を示す図である。
【００７３】
図６（ａ）に示す処理内容１１００には、フローＩＤ定義部１１０１と、処理定義部１１０２とが含まれる。フローＩＤ定義部１１０１には、処理内容１１００を一意に識別するための識別情報であるフローＩＤ「flow001」が記述されている。
【００７４】
処理定義部１１０２には、ストレージサービスＡと連携したスキャン配信サービスを実現するための一連の処理の内容が記述されている。すなわち、図６（ａ）に示す処理内容１１００には、スキャンして生成された電子ファイルを、ＯＣＲ処理した後、所定の言語に翻訳する翻訳処理をして、外部ストレージシステム３０１に保存する一連の処理が記述されている。
【００７５】
同様に、図６（ｂ）に示す処理内容１２００には、フローＩＤ定義部１２０１と、処理定義部１２０２とが含まれる。フローＩＤ定義部１２０１には、処理内容１２００を一意に識別するための識別情報であるフローＩＤ「flow002」が記述されている。
【００７６】
処理定義部１２０２には、ストレージサービスＢと連携したスキャン配信サービスを実現するための一連の処理の内容が記述されている。すなわち、図６（ｂ）に示す処理内容１２００には、スキャンして生成された電子ファイルを、ＯＣＲ処理した後、所定の言語に翻訳する翻訳処理をして、外部ストレージシステム３０２に保存する一連の処理が記述されている。
【００７７】
以上のように、本実施形態に係るサービス提供システム１０は、画像形成装置２０にアプリ画面を表示させるための画面定義と、サービスを実現するための一連の処理（処理フロー）の内容が記述された処理内容とが含まれるアプリ情報１０００を有する。そして、本実施形態に係るサービス提供システム１０は、画像形成装置２０に対して、アプリ情報１０００を利用して各種のサービスを提供する。このため、サービス提供システム１０により提供されるサービスを追加等する場合には、アプリ情報記憶部１９０にアプリ情報１０００を追加等すれば良い。
【００７８】
また、アプリ情報１０００を追加するには、画面定義及び処理内容を記述すれば良いため、簡易に開発することができる。したがって、サービスの追加・変更等に伴う開発工数を削減させることができるとともに、例えばサードベンダー等によるサービスの追加・変更等を容易に行うことができる。
【００７９】
次に、本実施形態に係るロジック処理部１３０の詳細な処理ブロックについて、図７を参照しながら説明する。図７は、第一の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【００８０】
図７に示すロジック処理部１３０は、フロー実行部１３１、コンポーネント管理部１３２、及びコンポーネント群１３３を有する。また、ロジック処理部１３０は、代替フロー管理テーブル２０００を利用する。
【００８１】
フロー実行部１３１は、サービスを実現するためのフロー実行要求をブラウザ２１０から受け付けると、アプリ管理部１２０を介して、当該フロー実行要求に含まれるフローＩＤに対応する処理内容を取得する。そして、フロー実行部１３１は、取得した処理内容に従ってコンポーネントに対して処理の実行を要求する。ここで、コンポーネントとは、処理内容に基づく一連の処理のうちの一の処理を実行するためのモジュール等であり、例えばクラスや関数等で定義される。
【００８２】
また、フロー実行部１３１は、処理内容に基づく一連の処理においてエラー等が発生した場合、代替フロー管理テーブル２０００から代替フローＩＤを取得する。そして、フロー実行部１３１は、アプリ管理部１２０を介して、代替フローＩＤに対応する処理内容を取得して、当該処理内容に従ってコンポーネントに対して処理の実行を要求する。
【００８３】
ここで、代替フローＩＤとは、ある処理内容に基づく一連の処理（処理フロー）においてエラー等が発生した場合に実行される処理内容（代替フロー内容）のフローＩＤのことである。なお、代替フロー内容には、例えば、処理フローと同等の処理結果を得るための処理の内容が記述されている。
【００８４】
すなわち、フロー実行部１３１は、処理フローにおいてエラー等が発生した場合には、代替フロー管理テーブル２０００において当該処理フローのフローＩＤに関連付けられている代替フローＩＤの代替フロー内容に基づく一連の処理（代替フロー）を実行する。
【００８５】
コンポーネント管理部１３２は、フロー実行部１３１からの要求に応じて、コンポーネントの生成を行う。なお、コンポーネントの生成とは、例えばクラスで定義されたコンポーネントを、メモリ（例えばＲＡＭ１４）上に展開することを意味する。
【００８６】
コンポーネント群１３３は、コンポーネントの集合である。コンポーネント群１３３には、外部ストレージシステム３０１に電子ファイルを配信するための配信コンポーネント１３３１Ａが含まれる。また、コンポーネント群１３３には、電子ファイルにＯＣＲ処理を行うためのＯＣＲコンポーネント１３３２Ａ、電子ファイルを所定の言語に翻訳する翻訳処理を行う翻訳コンポーネント１３３３Ａが含まれる。
【００８７】
さらに、コンポーネント群１３３には、外部ストレージシステム３０２に電子ファイルを配信するための配信コンポーネント１３３１Ｂが含まれる。同様に、コンポーネント群１３３には、上記のＯＣＲコンポーネント１３３２Ａとは異なるＯＣＲコンポーネント１３３２Ｂ、上記の翻訳コンポーネント１３３３Ａとは異なる翻訳コンポーネント１３３３Ｂ等が含まれる。このように、コンポーネント群１３３には、種々の処理を実行する種々のコンポーネントが含まれる。
【００８８】
ここで、コンポーネント群１３３に含まれる各コンポーネントは、コンポーネント共通Ｉ／Ｆ１３３０を有する。コンポーネント共通Ｉ／Ｆ１３３０は、各コンポーネントに対して共通に定義されたＡＰＩであり、コンポーネントを生成するためのＡＰＩと、コンポーネントに対して処理の実行を要求するためのＡＰＩとが含まれる。
【００８９】
このように、各コンポーネントがコンポーネント共通Ｉ／Ｆ１３３０を有することで、コンポーネントの追加等に伴う影響を局所化することができる。換言すれば、フロー実行部１３１及びコンポーネント管理部１３２に影響を与えることなく、コンポーネントの追加等を行うことができる。このため、コンポーネントの追加等の開発に要する工数を削減することができる。
【００９０】
ここで、代替フロー管理テーブル２０００について、図８を参照しながら説明する。図８は、第一の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【００９１】
図８に示す代替フロー管理テーブル２０００は、データ項目として、フローＩＤ、及び代替フローＩＤを有する。すなわち、代替フロー管理テーブル２０００では、フローＩＤに対して代替フローＩＤが関連付けられている。
【００９２】
例えば、フローＩＤ「flow001」には、代替フローＩＤ「flow002」が関連付けられている。これにより、フロー実行部１３１は、フローＩＤ「flow001」の処理内容に基づく一連の処理においてエラー等が発生した場合には、当該フローＩＤに関連付けられている代替フローＩＤ「flow002」の処理内容を取得することができる。
【００９３】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【００９４】
≪スキャン配信サービスの全体処理≫
本実施形態に係るスキャン配信サービスを画像形成装置２０のユーザが利用する場合の全体的な処理について、図９を参照しながら説明する。図９は、第一の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【００９５】
まず、画像形成装置２０のユーザは、ブラウザ２１０を用いて、サービス提供システム１０により提供されるサービスの一覧を取得するための操作を行う。すると、画像形成装置２０は、サービスの一覧の取得要求をサービス提供システム１０に送信する（ステップＳ９０１）。サービス処理部１１０のアプリ管理部１２０は、当該取得要求を受け取ると、サービス提供システム１０により提供されるサービスの一覧を画像形成装置２０に送信する。
【００９６】
これにより、画像形成装置２０の操作パネル２２には、ブラウザ２１０により、サービス提供システム１０により提供されるサービスの一覧が表示される。なお、サービスの一覧には、サービス提供システム１０により提供されるサービスのサービス名、当該サービスを提供するアプリ情報１０００のアプリＩＤ、及び当該サービスを実現するための処理内容のフローＩＤ等が含まれる。
【００９７】
ユーザは、画像形成装置２０の操作パネル２２に表示されたサービスの一覧から、自身が利用を所望するサービスを選択する。すると、ブラウザ２１０は、選択されたサービスを提供するアプリ情報１０００のアプリＩＤと、当該サービスを実現するための処理内容のフローＩＤとをアプリ管理部１２０に送信する（ステップＳ９０２）。
【００９８】
ここでは、ユーザにより、ストレージサービスＡと連携したスキャン配信するためのサービス「Ｓｃａｎ  ｔｏ  ストレージサービスＡ」の利用が選択されたものとする。したがって、ブラウザ２１０は、スキャン配信サービスを提供するアプリ情報１０００のアプリＩＤ「app001」と、当該アプリ情報１０００に含まれる処理内容１１００のフローＩＤ「flow001」とをアプリ管理部１２０に送信する。
【００９９】
そして、アプリ管理部１２０は、ブラウザ２１０から受け取ったアプリＩＤのアプリ情報１０００に含まれる画面定義に基づきＨＴＭＬ（HyperText Markup Language）形式のアプリ画面を生成し、ブラウザ２１０に送信する。
【０１００】
ブラウザ２１０は、アプリ管理部１２０からアプリ画面を受け取ると、例えば図１０に示すアプリ画面３０００を、操作パネル２２に表示させる（ステップＳ９０３）。図１０は、スキャン配信サービスを利用するためのアプリ画面の一例を示す図である。
【０１０１】
次に、ユーザは、図１０に示すアプリ画面３０００において、ファイル名入力欄３２００にスキャンにより生成される電子ファイルに付与する所望のファイル名を入力する。また、ユーザは、保存先フォルダＩＤ入力欄３３００にスキャンにより生成される電子ファイルを保存するストレージサービスＡのフォルダのフォルダＩＤを入力する。なお、図１０に示すアプリ画面３０００の翻訳言語欄３１００には、英語から日本語に翻訳することを示す「英語→日本語」が表示されているが、翻訳元の言語と翻訳後の言語をユーザが選択することができるようにしても良い。
【０１０２】
また、図１０に示すアプリ画面３０００では、ストレージサービスＡにおける保存先フォルダのフォルダＩＤをユーザが直接入力するものとしたが、保存先フォルダをフォルダ一覧からユーザが選択できるようにしても良い。すなわち、例えばデータＩ／Ｆ１４０部がデータ処理部１８０を介してストレージサービスＡのフォルダ一覧を取得し、取得されたフォルダ一覧からユーザが保存先フォルダを選択できるようにしても良い。
【０１０３】
そして、ユーザは、画像形成装置２０のスキャナ２５に原稿をセットした上で、スキャン実行ボタン３４００を押下する（ステップＳ９０４）。これにより、画像形成装置２０のスキャナ２５により原稿が読み取られ、ファイル名入力欄３２００に入力されたファイル名の電子ファイルが生成される（ステップＳ９０５）。
【０１０４】
続いて、サービス提供システム１０は、画像形成装置２０より生成された電子ファイルをＯＣＲ処理して、言語の翻訳を行った上で、ストレージサービスＡに配信するフロー実行処理を行う（ステップＳ９０６）。このフロー実行処理の詳細については、後述する。
【０１０５】
≪フロー実行処理≫
以降では、上記のステップＳ９０６のフロー実行処理の詳細について説明する。まず、フロー実行処理が正常に実行される場合について、図１１を参照しながら説明する。図１１は、第一の実施形態に係るフロー実行処理の一例のシーケンス図である。
【０１０６】
まず、ブラウザ２１０は、スキャン配信サービスを実現するためのフロー実行要求をフロー実行部１３１に送信する（ステップＳ１１０１）。ここで、当該実行要求には、スキャン配信サービスを提供するアプリ情報１０００のアプリＩＤ「app001」と、ストレージサービスＡと連携したスキャン配信サービスを実現するための処理内容のフローＩＤ「flow001」とが含まれる。また、当該実行要求には、スキャンにより生成された電子ファイルと、外部ストレージシステム３０１における当該電子ファイルの保存先フォルダのフォルダＩＤとが含まれる。
【０１０７】
次に、フロー実行部１３１は、フロー実行要求を受け付けると、アプリ管理部１２０を介して、当該実行要求に含まれるアプリＩＤ「app001」のアプリ情報１０００からフローＩＤ「flow001」の処理内容を取得する（ステップＳ１１０２）。すなわち、フロー実行部１３１は、図６（ａ）に示す処理内容１１００を取得する。
【０１０８】
フロー実行部１３１は、取得した処理内容１１００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１１０３）。より具体的には、フロー実行部１３１は、図６（ａ）に示す処理内容１１００の「From("file:input")」の次に指定されている「.to("process:ocrA")」に基づき、ＯＣＲコンポーネント１３３２Ａの取得を、コンポーネント管理部１３２に要求する。
【０１０９】
コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａの取得要求を受け取ると、ＯＣＲコンポーネント１３３２Ａを生成する（ステップＳ１１０４）。ＯＣＲコンポーネント１３３２Ａの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１１０】
そして、ＯＣＲコンポーネント１３３２Ａが生成されると、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１１１】
フロー実行部１３１は、データを指定して、生成されたＯＣＲコンポーネント１３３２Ａに処理の実行を要求する（ステップＳ１１０５）。なお、ここで指定されるデータは、データ型が「InputStream」としてブラウザ２１０から渡される電子ファイルである。
【０１１２】
すなわち、フロー実行部１３１は、ブラウザ２１０からデータ型「InputStream」として渡される電子ファイルを、単に「データ」として（データ型を意識することなく）、ＯＣＲコンポーネント１３３２Ａに渡して処理の実行を要求する。図１１では、このようにデータ型を意識することなく渡される電子ファイル等を、単に「データ」と表す。
【０１１３】
ＯＣＲコンポーネント１３３２Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１１０６）。より具体的には、ＯＣＲコンポーネント１３３２Ａは、ドキュメントサービス部１５０のＯＣＲ処理１５１に処理を要求し、ＯＣＲ処理１５１が指定されたデータに対してＯＣＲ処理を実行する。
【０１１４】
そして、ＯＣＲコンポーネント１３３２Ａは、ＯＣＲ処理後の電子ファイルを示すデータをフロー実行部１３１に返信する。
【０１１５】
次に、フロー実行部１３１は、取得した処理内容１１００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１１０７）。より具体的には、フロー実行部１３１は、図６（ａ）に示す処理内容１１００の「.to("process:ocrA")」の次に指定されている「.to("process:transA")」に基づき、翻訳コンポーネント１３３３Ａの取得を、コンポーネント管理部１３２に要求する。
【０１１６】
コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ａの取得要求を受け取ると、翻訳コンポーネント１３３３Ａを生成する（ステップＳ１１０８）。翻訳コンポーネント１３３３Ａの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１１７】
そして、翻訳コンポーネント１３３３Ａが生成されると、コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ａをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ａが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１１８】
フロー実行部１３１は、データを指定して、生成された翻訳コンポーネント１３３３Ａに処理の実行を要求する（ステップＳ１１０９）。なお、ここで指定されるデータは、ＯＣＲ処理後の電子ファイルである。
【０１１９】
次に、翻訳コンポーネント１３３３Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１１１０）。より具体的には、翻訳コンポーネント１３３３Ａは、ドキュメントサービス部１５０の翻訳処理１５２に処理を要求し、翻訳処理１５２が指定されたデータに対して、所定の言語への翻訳処理を実行する。
【０１２０】
そして、翻訳コンポーネント１３３３Ａは、翻訳処理後の電子ファイルを示すデータをフロー実行部１３１に返信する。
【０１２１】
次に、フロー実行部１３１は、取得した処理内容１１００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１１１１）。より具体的には、フロー実行部１３１は、図６（ａ）に示す処理内容１１００の「.to("process:transA")」の次に指定されている「.to("storage:uploadFileA")」に基づき、配信コンポーネント１３３１Ａの取得を、コンポーネント管理部１３２に要求する。
【０１２２】
コンポーネント管理部１３２は、配信コンポーネント１３３１Ａの取得要求を受け取ると、配信コンポーネント１３３１Ａを生成する（ステップＳ１１１２）。配信コンポーネント１３３１Ａの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１２３】
そして、配信コンポーネント１３３１Ａが生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１Ａをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、配信コンポーネント１３３１Ａが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１２４】
フロー実行部１３１は、データを指定して、生成された配信コンポーネント１３３１Ａに処理の実行を要求する（ステップＳ１１１３）。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
【０１２５】
次に、配信コンポーネント１３３１Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１１１４）。すなわち、配信コンポーネント１３３１Ａは、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているファイル保存のＡＰＩを用いて、データの配信実行を要求する。より具体的には、配信コンポーネント１３３１Ａは、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、図５（ａ）に示すＡＰＩとして「service-a/process/folder」を用いてデータの配信実行を要求する。これにより、ストレージサービスＡにおいて、図１０に示す保存先フォルダＩＤ入力欄３３００に入力されたフォルダＩＤのフォルダに、翻訳処理後の電子ファイルが保存される。
【０１２６】
そして、配信コンポーネント１３３１Ａは、配信実行の実行結果を示すデータをフロー実行部１３１に返信する。
【０１２７】
フロー実行部１３１は、取得した処理内容１１００に基づく一連の処理（処理フロー）の処理結果をブラウザ２１０に返信する（ステップＳ１１１５）。これにより、画像形成装置２０のユーザは、スキャン配信サービスを実現するための一連の処理が完了したことを知ることができる。
【０１２８】
次に、フロー実行処理の途中でエラーが発生した場合について、図１２を参照しながら説明する。図１２は、第一の実施形態に係るフロー実行処理の他の例のシーケンス図である。以降では、本実施形態に係るスキャン配信サービスを実現するための一連の処理（処理フロー）に含まれるＯＣＲ処理においてエラーが発生した場合について説明する。ただし、エラーの発生箇所は、これに限られない。スキャン配信サービスを実現するための処理フローに含まれる各処理のうちのいずれの処理でエラーが発生しても、以降で説明する処理が同様に適用され得る。
【０１２９】
まず、ブラウザ２１０は、スキャン配信サービスを実現するためのフロー実行要求をフロー実行部１３１に送信する（ステップＳ１２０１）。ここで、当該実行要求には、スキャン配信サービスを提供するアプリ情報１０００のアプリＩＤ「app001」と、ストレージサービスＡと連携したスキャン配信サービスを実現するための処理内容のフローＩＤ「flow001」とが含まれる。また、当該実行要求には、スキャンにより生成された電子ファイルと、外部ストレージシステム３０１における当該電子ファイルの保存先フォルダのフォルダＩＤとが含まれる。
【０１３０】
次に、フロー実行部１３１は、フロー実行要求を受け付けると、アプリ管理部１２０を介して、当該実行要求に含まれるアプリＩＤ「app001」のアプリ情報１０００からフローＩＤ「flow001」の処理内容を取得する（ステップＳ１２０２）。すなわち、フロー実行部１３１は、図６（ａ）に示す処理内容１１００を取得する。
【０１３１】
フロー実行部１３１は、取得した処理内容１１００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１２０３）。より具体的には、フロー実行部１３１は、図６（ａ）に示す処理内容１１００の「From("file:input")」の次に指定されている「.to("process:ocrA")」に基づき、ＯＣＲコンポーネント１３３２Ａの取得を、コンポーネント管理部１３２に要求する。
【０１３２】
コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａの取得要求を受け取ると、ＯＣＲコンポーネント１３３２Ａを生成する（ステップＳ１２０４）。ＯＣＲコンポーネント１３３２Ａの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１３３】
そして、ＯＣＲコンポーネント１３３２Ａが生成されると、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ａが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１３４】
フロー実行部１３１は、データを指定して、生成されたＯＣＲコンポーネント１３３２Ａに処理の実行を要求する（ステップＳ１２０５）。なお、ここで指定されるデータは、データ型が「InputStream」としてブラウザ２１０から渡される電子ファイルである。
【０１３５】
ＯＣＲコンポーネント１３３２Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１２０６）。より具体的には、ＯＣＲコンポーネント１３３２Ａは、ドキュメントサービス部１５０のＯＣＲ処理１５１に処理を要求し、ＯＣＲ処理１５１が指定されたデータに対してＯＣＲ処理を実行する。
【０１３６】
ここで、ステップＳ１２０６において、ＯＣＲコンポーネント１３３２Ａの処理の実行中に、例えば、ＯＣＲ処理が不可能であることを示すエラーが発生したものとする。すると、ＯＣＲコンポーネント１３３２Ａは、エラーが発生したことを示すデータをフロー実行部１３１に返信する。
【０１３７】
フロー実行部１３１は、エラーが発生したことを示すデータを受け取ると、代替フロー管理テーブル２０００を参照して、ステップＳ１２０２で取得した処理内容１１００のフローＩＤに関連付けられている代替フローＩＤを取得する（ステップＳ１２０７）。より具体的には、フロー実行部１３１は、代替フロー管理テーブル２０００において、処理内容１１００のフローＩＤ「flow001」に関連付けられている代替フローＩＤ「flow002」を取得する。
【０１３８】
次に、フロー実行部１３１は、代替フローＩＤを取得すると、アプリ管理部１２０を介して、当該代替フローＩＤ「flow002」の処理内容（代替フロー内容）を取得する（ステップＳ１２０８）。すなわち、フロー実行部１３１は、図６（ｂ）に示す処理内容１２００を取得する。
【０１３９】
このように、本実施形態に係るサービス提供システム１０は、処理内容に基づく一連の処理においてエラー等が発生した場合には、代替フロー管理テーブル２０００において当該処理内容に関連付けられている他の処理内容を取得する。
【０１４０】
フロー実行部１３１は、取得した処理内容１２００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１２０９）。より具体的には、フロー実行部１３１は、図６（ｂ）に示す処理内容１２００の「From("file:input")」の次に指定されている「.to("process:ocrB")」に基づき、ＯＣＲコンポーネント１３３２Ｂの取得を、コンポーネント管理部１３２に要求する。
【０１４１】
コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ｂの取得要求を受け取ると、ＯＣＲコンポーネント１３３２Ｂを生成する（ステップＳ１２１０）。ＯＣＲコンポーネント１３３２Ｂの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１４２】
そして、ＯＣＲコンポーネント１３３２Ｂが生成されると、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ｂをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ｂが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１４３】
フロー実行部１３１は、データを指定して、生成されたＯＣＲコンポーネント１３３２Ｂに処理の実行を要求する（ステップＳ１２１１）。
【０１４４】
ＯＣＲコンポーネント１３３２Ｂは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１２１２）。より具体的には、ＯＣＲコンポーネント１３３２Ｂは、ドキュメントサービス部１５０のＯＣＲ処理１５１に処理を要求し、ＯＣＲ処理１５１が指定されたデータに対してＯＣＲ処理を実行する。
【０１４５】
そして、ＯＣＲコンポーネント１３３２Ｂは、ＯＣＲ処理後の電子ファイルを示すデータをフロー実行部１３１に返信する。
【０１４６】
次に、フロー実行部１３１は、取得した処理内容１２００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１２１３）。より具体的には、フロー実行部１３１は、図６（ｂ）に示す処理内容１２００の「.to("process:ocrB")」の次に指定されている「.to("process:transB")」に基づき、翻訳コンポーネント１３３３Ｂの取得を、コンポーネント管理部１３２に要求する。
【０１４７】
コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ｂの取得要求を受け取ると、翻訳コンポーネント１３３３Ｂを生成する（ステップＳ１２１４）。翻訳コンポーネント１３３３Ｂの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１４８】
そして、翻訳コンポーネント１３３３Ｂが生成されると、コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ｂをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ｂが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１４９】
フロー実行部１３１は、データを指定して、生成された翻訳コンポーネント１３３３Ｂに処理の実行を要求する（ステップＳ１２１５）。なお、ここで指定されるデータは、ＯＣＲ処理後の電子ファイルである。
【０１５０】
次に、翻訳コンポーネント１３３３Ｂは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１２１６）。より具体的には、翻訳コンポーネント１３３３Ｂは、ドキュメントサービス部１５０の翻訳処理１５２に処理を要求し、翻訳処理１５２が指定されたデータに対して、所定の言語への翻訳処理を実行する。
【０１５１】
そして、翻訳コンポーネント１３３３Ｂは、翻訳処理後の電子ファイルを示すデータをフロー実行部１３１に返信する。
【０１５２】
次に、フロー実行部１３１は、取得した処理内容１２００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ１２１７）。より具体的には、フロー実行部１３１は、図６（ｂ）に示す処理内容１２００の「.to("process:transB")」の次に指定されている「.to("storage:uploadFileB")」に基づき、配信コンポーネント１３３１Ｂの取得を、コンポーネント管理部１３２に要求する。
【０１５３】
コンポーネント管理部１３２は、配信コンポーネント１３３１Ｂの取得要求を受け取ると、配信コンポーネント１３３１Ｂを生成する（ステップＳ１２１８）。配信コンポーネント１３３１Ｂの生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。
【０１５４】
そして、配信コンポーネント１３３１Ｂが生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１Ｂをフロー実行部１３１に返信する。これは、例えば、コンポーネント管理部１３２は、配信コンポーネント１３３１Ｂが展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返信すれば良い。
【０１５５】
フロー実行部１３１は、データを指定して、生成された配信コンポーネント１３３１Ｂに処理の実行を要求する（ステップＳ１２１９）。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
【０１５６】
次に、配信コンポーネント１３３１Ｂは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ１２２０）。すなわち、配信コンポーネント１３３１Ｂは、ストレージサービスＢ連携部１６０２のファイル処理部１７０２に対して、共通Ｉ／Ｆ１７１２として定義されているファイル保存のＡＰＩを用いて、データの配信実行を要求する。より具体的には、配信コンポーネント１３３１Ｂは、ストレージサービスＢ連携部１６０２のファイル処理部１７０２に対して、図５（ａ）に示すＡＰＩとして「service-b/process/folder」を用いてデータの配信実行を要求する。これにより、ストレージサービスＢにおいて、図１０に示す保存先フォルダＩＤ入力欄３３００に入力されたフォルダＩＤのフォルダに、翻訳処理後の電子ファイルが保存される。
【０１５７】
そして、配信コンポーネント１３３１Ｂは、配信実行の実行結果を示すデータをフロー実行部１３１に返信する。
【０１５８】
フロー実行部１３１は、処理内容１１００の代替フロー内容として取得した処理内容１２００に基づく一連の処理（代替フロー）の処理結果をブラウザ２１０に返信する（ステップＳ１２２１）。これにより、画像形成装置２０のユーザは、スキャン配信サービスを実現するための一連の処理（処理フロー）においてエラーが発生し、代替フローが実行されたことを知ることができる。
【０１５９】
以上のように、本実施形態に係るサービス提供システム１０では、処理内容に基づく一連の処理（処理フロー）においてエラー等が発生した場合、当該処理内容に対して予め関連付けられた他の処理内容（代替フロー内容）に基づく一連の処理（代替フロー）を実行する。これにより、本実施形態に係るサービス提供システム１０では、例えば、ある処理フローにおいてエラーが発生した場合には、当該処理フローと同等の処理を行う代替フローを実行することができる。
【０１６０】
［第二の実施形態］
次に、第二の実施形態に係る情報処理システム１について説明する。第二の実施形態では、代替フローが実行された場合に、当該代替フローの種別に応じた処理結果をブラウザ２１０に返信する点が第一の実施形態と異なる。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
【０１６１】
＜ソフトウェア構成＞
本実施形態に係る情報処理システム１に含まれるサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図１３を参照しながら説明する。図１３は、第二の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【０１６２】
図１３に示すサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ａを有する。また、図１３に示すサービス提供システム１０のロジック処理部１３０は、代替フロー管理テーブル２０００Ａを利用する。
【０１６３】
フロー実行部１３１Ａは、代替フローＩＤに対応する処理内容（代替フロー内容）に基づく一連の処理（代替フロー）が実行された場合に、代替フロー管理テーブル２０００Ａを参照して、当該代替フローの代替フロータイプに応じた処理結果を返信する。
【０１６４】
ここで、代替フロー管理テーブル２０００Ａについて、図１４を参照しながら説明する。図１４は、第二の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【０１６５】
図１４に示す代替フロー管理テーブル２０００Ａは、データ項目として、さらに、代替フロータイプを有する。すなわち、代替フロー管理テーブル２０００Ａでは、代替フローＩＤに対して代替フロータイプが関連付けられている。
【０１６６】
代替フロータイプとは、代替フローＩＤで示される処理内容（代替フロー）に基づく一連の処理（代替フロー）が実行された場合における処理結果の種類を示す情報である。
【０１６７】
例えば、代替フロータイプが「タイプ１」である代替フローＩＤに対応する代替フローが実行された場合、フロー実行部１３１は、当該代替フローの処理結果として「成功」を示す処理結果をブラウザ２１０に返信する。一方で、例えば、代替フロータイプが「タイプ２」である代替フローＩＤに対応する代替フローが実行された場合、フロー実行部１３１は、当該代替フローの処理結果として「失敗」を示す処理結果をブラウザ２１０に返信する。
【０１６８】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０１６９】
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図１５を参照しながら説明する。図１５は、第二の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップＳ１２０１〜ステップＳ１２２０の処理については、第一の実施形態と同様であるため、その説明を省略する。
【０１７０】
フロー実行部１３１Ａは、代替フロー管理テーブル２０００Ａを参照して、実行された代替フローの代替フロータイプを取得する（ステップＳ１５０１）。より具体的には、フロー実行部１３１Ａは、代替フロー管理テーブル２０００Ａにおいて、代替フローＩＤ「flow002」に関連付けられている代替フロータイプ「タイプ１」を取得する。
【０１７１】
次に、フロー実行部１３１Ａは、取得した代替フロータイプに応じた処理結果をブラウザ２１０に返信する（ステップＳ１５０２）。より具体的には、フロー実行部１３１Ａは、取得した代替フロータイプ「タイプ１」に応じて、「成功」を示す処理結果をブラウザ２１０に返信する。
【０１７２】
以上のように、本実施形態に係るサービス提供システム１０では、代替フローが実行された場合には、当該代替フローの代替フロータイプに応じた処理結果を画像形成装置２０に返信する。これにより、本実施形態に係るサービス提供システム１０では、実行された代替フローの種別や内容に応じて、適切な処理結果を画像形成装置２０に返信することができる。
【０１７３】
例えば、エラーが発生した処理フローと同等の処理を実現する代替フローが実行される場合には、代替フロー管理テーブル２０００Ａにおいて、当該代替フローの代替フローＩＤに代替フロータイプ「タイプ１」を関連付けておけば良い。これにより、本実施形態に係るサービス提供システム１０では、処理フローと同等の処理を実現する代替フローが実行された場合に、「成功」を示す処理結果をブラウザ２１０に返信することができる。
【０１７４】
一方で、例えば、エラーが発生した処理フローをロールバックする代替フローが実行される場合には、代替フロー管理テーブル２０００Ａにおいて、当該代替フローの代替フローＩＤに代替フロータイプ「タイプ２」を関連付けておけば良い。これにより、本実施形態に係るサービス提供システム１０は、代替フローが実行された場合に、「失敗」を示す処理結果をブラウザ２１０に返信することができる。
【０１７５】
［第三の実施形態］
次に、第三の実施形態に係る情報処理システム１について説明する。第三の実施形態では、処理フローにおいて発生したエラーが回復可能なエラーであるか否かを判定して、当該判定結果に応じた他の処理内容を取得する点が第一の実施形態と異なる。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
【０１７６】
＜ソフトウェア構成＞
本実施形態に係る情報処理システム１に含まれるサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図１６を参照しながら説明する。図１６は、第三の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【０１７７】
図１６に示すサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ｂを有する。また、図１６に示すサービス提供システム１０のロジック処理部１３０は、代替フロー管理テーブル２０００Ｂを利用する。
【０１７８】
フロー実行部１３１Ｂは、処理内容に基づく一連の処理（処理フロー）においてエラー等が発生した場合に、当該エラーが回復可能なエラーであるか否かを判定する。そして、フロー実行部１３１Ｂは、代替フロー管理テーブル２０００Ｂを参照して、当該判定結果に応じて、代替フローＩＤ又は例外フローＩＤを取得する。
【０１７９】
ここで、例外フローＩＤとは、処理フローにおいて回復不可能なエラーが発生した場合に実行される処理内容（例外フロー内容）のフローＩＤのことである。なお、例外フロー内容には、例えば、エラー情報の出力やエラー通知等を実現するための処理の内容が記述される。
【０１８０】
ここで、代替フロー管理テーブル２０００Ｂについて、図１７を参照しながら説明する。図１７は、第三の実施形態に係る代替フロー管理テーブルの一例を示す図である。
【０１８１】
図１７に示す代替フロー管理テーブル２０００Ｂは、データ項目として、さらに、例外フローＩＤを有する。すなわち、代替フロー管理テーブル２０００Ｂでは、フローＩＤに対して、代替フローＩＤ及び例外フローＩＤが関連付けられている。
【０１８２】
例えば、フローＩＤ「flow001」には、代替フローＩＤ「flow002」及び例外フローＩＤ「flow900」が関連付けられている。これにより、フロー実行部１３１Ｂは、処理フローにおいてエラー等が発生した場合には、当該エラーに応じて代替フローＩＤの処理内容（代替フロー内容）又は例外フローＩＤの処理内容（例外フロー内容）を取得することができる。
【０１８３】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０１８４】
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図１８を参照しながら説明する。図１８は、第三の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップＳ１２０１〜ステップＳ１２０６の処理については、第一の実施形態と同様であるため、その説明を省略する。
【０１８５】
フロー実行部１３１Ｂは、処理内容１１００に基づく一連の処理（処理フロー）において発生したエラーが回復可能なエラーであるか否かを判定する（ステップＳ１８０１）。
【０１８６】
ここで、回復可能なエラーとは、代替フローを実行することが可能なエラー種別を言う。一方、回復不可能なエラーとは、例えば、代替フローを実行することができないエラー種別を言う。なお、回復不可能なエラーには、例えば、代替フローが存在しない場合等を含めても良い。
【０１８７】
ステップＳ１８０１において、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部１３１Ｂは、ステップＳ１８０２〜ステップＳ１８０４の処理を実行する。一方で、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部１３１Ｂは、ステップＳ１８０５〜ステップＳ１８０７の処理を実行する。
【０１８８】
すなわち、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部１３１Ｂは、代替フロー管理テーブル２０００Ｂを参照して、処理内容１１００のフローＩＤに関連付けられている代替フローＩＤを取得する（ステップＳ１８０２）。より具体的には、フロー実行部１３１Ｂは、代替フロー管理テーブル２０００Ｂにおいて、処理内容１１００のフローＩＤ「flow001」に関連付けられている代替フローＩＤ「flow002」を取得する。
【０１８９】
次に、フロー実行部１３１Ｂは、代替フローＩＤを取得すると、アプリ管理部１２０を介して、当該代替フローＩＤ「flow002」の処理内容（代替フロー内容）を取得する（ステップＳ１８０３）。すなわち、フロー実行部１３１は、図６（ｂ）に示す処理内容１２００を取得する。
【０１９０】
そして、フロー実行部１３１Ｂは、取得した処理内容１２００に基づく代替フローを実行する（ステップＳ１８０４）。すなわち、この場合、図１２のステップＳ１２０９〜ステップＳ１２２１と同様の処理が行われる。
【０１９１】
一方、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部１３１Ｂは、代替フロー管理テーブル２０００Ｂを参照して、処理内容１１００のフローＩＤに関連付けられている例外フローＩＤを取得する（ステップＳ１８０５）。より具体的には、フロー実行部１３１Ｂは、代替フロー管理テーブル２０００Ｂにおいて、処理内容１１００のフローＩＤ「flow001」に関連付けられている例外フローＩＤ「flow900」を取得する。
【０１９２】
次に、フロー実行部１３１Ｂは、例外フローＩＤを取得すると、アプリ管理部１２０を介して、当該例外フローＩＤ「flow900」の処理内容（例外フロー内容）を取得する（ステップＳ１８０６）。
【０１９３】
そして、フロー実行部１３１Ｂは、取得した例外フロー内容に基づく例外フローを実行する（ステップＳ１８０７）。
【０１９４】
以上のように、本実施形態に係るサービス提供システム１０では、処理フローにおいてエラーが発生した場合に、当該発生したエラーが回復可能か否かに応じて、代替フロー又は例外フローを実行することができる。このため、本実施形態に係るサービス提供システム１０では、例えば、処理フローにおいて回復不可能な深刻なエラーが発生した場合等には、当該エラーの発生を画像形成装置２０に通知するための例外フローを実行することができる。
【０１９５】
［第四の実施形態］
次に、第四の実施形態に係る情報処理システム１について説明する。第四の実施形態では、処理フローにおいてエラー等が発生した場合、当該エラー等が発生したコンポーネントに対して予め関連付けられた他のコンポーネント（代替コンポーネント）を実行させる処理内容（代替フロー内容）を作成する点が第一の実施形態と異なる。すなわち、第四の実施形態では、コンポーネントにおいてエラー等が発生した場合、代替コンポーネントを実行させる代替フロー内容を動的に作成する。なお、以降では、第一の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第一の実施形態と同一の符号を用いて、その説明を省略する。
【０１９６】
＜ソフトウェア構成＞
本実施形態に係る情報処理システム１に含まれるサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図１９を参照しながら説明する。図１９は、第四の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【０１９７】
図１９に示すサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ｃ、及び代替フロー内容作成部１３４を有する。また、図１９に示すサービス提供システム１０のロジック処理部１３０は、代替コンポーネント管理テーブル４０００を利用する。
【０１９８】
フロー実行部１３１Ｃは、処理内容に基づく一連の処理の各処理を実行するコンポーネントにおいてエラー等が発生した場合、当該エラー等が発生したコンポーネントの代替コンポーネントＩＤを代替コンポーネント管理テーブル４０００から取得する。そして、フロー実行部１３１は、取得した代替コンポーネントＩＤのコンポーネントを実行させる処理内容（代替フロー内容）の作成を代替フロー内容作成部１３４に要求する。
【０１９９】
代替フロー内容作成部１３４は、フロー実行部１３１Ｃの要求に応じて、当該要求に含まれる代替コンポーネントＩＤに基づく代替フロー内容を作成する。
【０２００】
ここで、代替コンポーネント管理テーブル４０００について、図２０を参照しながら説明する。図２０は、第四の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【０２０１】
図２０に示す代替コンポーネント管理テーブル４０００は、データ項目として、フローＩＤ、コンポーネントＩＤ、及び代替コンポーネントＩＤを有する。すなわち、代替コンポーネント管理テーブル４０００では、フローＩＤ毎に、コンポーネントを一意に識別するコンポーネントＩＤと、代替コンポーネントのコンポーネントＩＤを示す代替コンポーネントＩＤとが関連付けられている。なお、代替コンポーネントとは、コンポーネントにエラー等が発生した場合に実行させるコンポーネントのことであり、例えば、エラー等が発生したコンポーネントと同等の処理を行う他のコンポーネントである。
【０２０２】
例えば、フローＩＤ「flow001」において、コンポーネントＩＤ「ocrA」には、代替コンポーネントＩＤ「ocrB」が関連付けられている。これにより、フローＩＤ「flow001」の処理フローにおいて、コンポーネントＩＤ「ocrA」のコンポーネントにエラー等が発生した場合、代替コンポーネントＩＤ「ocrB」のコンポーネントを実行させる処理内容を作成することができる。
【０２０３】
同様に、例えば、フローＩＤ「flow002」において、コンポーネントＩＤ「uploadFileB」には、代替コンポーネントＩＤ「uploadFileA」が関連付けられている。これにより、フローＩＤ「flow002」の処理フローにおいて、コンポーネントＩＤ「uploadFileB」のコンポーネントにエラー等が発生した場合、代替コンポーネントＩＤ「uploadFileA」のコンポーネントを実行させる処理内容を作成することができる。
【０２０４】
なお、代替コンポーネント管理テーブル４０００において、フローＩＤが「−」であるコンポーネントＩＤ及び代替コンポーネントＩＤは、該当のフローＩＤにおいてエラー等が発生したコンポーネントのコンポーネントＩＤが存在しない場合に用いられる。例えば、フローＩＤ「flow002」の処理フローにおいて、コンポーネントＩＤ「transB」のコンポーネントにエラー等が発生した場合、代替コンポーネントＩＤ「transC」が処理内容（代替フロー内容）の作成に用いられる。
【０２０５】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０２０６】
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合につちえ、図２１を参照しながら説明する。図２１は、第四の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップＳ１２０１〜ステップＳ１２０６の処理については、第一の実施形態と同様であるため、その説明を省略する。
【０２０７】
フロー実行部１３１Ｃは、エラーが発生したことを示すデータを受け取ると、代替コンポーネント管理テーブル４０００を参照して、該当の代替コンポーネントＩＤを取得する（ステップＳ２１０１）。すなわち、フロー実行部１３１Ｃは、ステップＳ１２０２で取得した処理内容１１００のフローＩＤ「flow001」及びＯＣＲコンポーネント１３３２ＡのコンポーネントＩＤ「ocrA」に関連付けられている代替コンポーネントＩＤ「ocrB」を取得する。
【０２０８】
次に、フロー実行部１３１Ｃは、取得した代替コンポーネントＩＤ「ocrB」を含む代替フロー内容の作成要求を代替フロー内容作成部１３４に送信する（ステップＳ２１０２）。
【０２０９】
代替フロー内容作成部１３４は、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントＩＤ「ocrB」に基づいて代替フロー内容を作成する（ステップＳ２１０３）。すなわち、代替フロー内容作成部１３４は、処理内容１１００に含まれるコンポーネントＩＤ「ocrA」を、代替コンポーネントＩＤ「ocrB」に変更して、図２２に示す処理内容１３００を作成する。
【０２１０】
そして、代替フロー内容作成部１３４は、作成した処理内容１３００をフロー実行部１３１Ｃに返信する。
【０２１１】
図２２に示す処理内容１３００では、点線１３０１で示すように、処理内容１１００における「.to("process:ocrA")」が「.to("process:ocrB")」に変更されている。これにより、処理内容１３００に基づく一連の処理（代替フロー）では、ＯＣＲコンポーネント１３３２Ｂより処理を行うことができる。
【０２１２】
フロー実行部１３１Ｃは、取得した処理内容１３００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ２１０４）。より具体的には、フロー実行部１３１Ｃは、図２２に示す処理内容１３００に指定されている「.to("process:ocrB")」に基づき、ＯＣＲコンポーネント１３３２Ｂの取得を、コンポーネント管理部１３２に要求する。
【０２１３】
コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ｂの取得要求を受け取ると、ＯＣＲコンポーネント１３３２Ｂを生成する（ステップＳ２１０５）。そして、ＯＣＲコンポーネント１３３２Ｂが生成されると、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３２Ｂをフロー実行部１３１Ｃに返信する。
【０２１４】
フロー実行部１３１Ｃは、データを指定して、生成されたＯＣＲコンポーネント１３３２Ｂに処理の実行を要求する（ステップＳ２１０６）。
【０２１５】
ＯＣＲコンポーネント１３３２Ｂは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ２１０７）。そして、ＯＣＲコンポーネント１３３２Ｂは、ＯＣＲ処理後の電子ファイルを示すデータをフロー実行部１３１Ｃに返信する。
【０２１６】
次に、フロー実行部１３１Ｃは、取得した処理内容１３００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ２１０８）。より具体的には、フロー実行部１３１Ｃは、図２２に示す処理内容１３００の「.to("process:ocrB")」の次に指定されている「.to("process:transA")」に基づき、翻訳コンポーネント１３３３Ａの取得を、コンポーネント管理部１３２に要求する。
【０２１７】
コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ａの取得要求を受け取ると、翻訳コンポーネント１３３３Ａを生成する（ステップＳ２１０９）。そして、翻訳コンポーネント１３３３Ａが生成されると、コンポーネント管理部１３２は、翻訳コンポーネント１３３３Ａをフロー実行部１３１Ｃに返信する。
【０２１８】
フロー実行部１３１Ｃは、データを指定して、生成された翻訳コンポーネント１３３３Ａに処理の実行を要求する（ステップＳ２１１０）。なお、ここで指定されるデータは、ＯＣＲ処理後の電子ファイルである。
【０２１９】
次に、翻訳コンポーネント１３３３Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ２１１１）。そして、翻訳コンポーネント１３３３Ａは、翻訳処理後の電子ファイルを示すデータをフロー実行部１３１Ｃに返信する。
【０２２０】
次に、フロー実行部１３１Ｃは、取得した処理内容１３００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ２１１２）。より具体的には、フロー実行部１３１Ｃは、図２２に示す処理内容１３００の「.to("process:transA")」の次に指定されている「.to("storage:uploadFileA")」に基づき、配信コンポーネント１３３１Ａの取得を、コンポーネント管理部１３２に要求する。
【０２２１】
コンポーネント管理部１３２は、配信コンポーネント１３３１Ａの取得要求を受け取ると、配信コンポーネント１３３１Ａを生成する（ステップＳ２１１３）。そして、配信コンポーネント１３３１Ａが生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１Ａをフロー実行部１３１Ｃに返信する。
【０２２２】
フロー実行部１３１Ｃは、データを指定して、生成された配信コンポーネント１３３１Ａに処理の実行を要求する（ステップＳ２１１４）。なお、ここで指定されるデータは、翻訳処理後の電子ファイルである。
【０２２３】
次に、配信コンポーネント１３３１Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ２１１５）。すなわち、配信コンポーネント１３３１Ａは、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているファイル保存のＡＰＩを用いて、データの配信実行を要求する。これにより、ストレージサービスＡの所定のフォルダに翻訳処理後の電子ファイルが保存される。
【０２２４】
そして、配信コンポーネント１３３１Ａは、配信実行の実行結果を示すデータをフロー実行部１３１Ｃに返信する。
【０２２５】
フロー実行部１３１Ｃは、処理内容１３００に基づく一連の処理（代替フロー）の処理結果をブラウザ２１０に返信する（ステップＳ２２１６）。これにより、画像形成装置２０のユーザは、スキャン配信サービスを実現するための一連の処理（処理フロー）においてエラーが発生し、当該エラーが発生したコンポーネントの代わりに代替コンポーネントが実行されたことを知ることができる。
【０２２６】
以上のように、本実施形態に係るサービス提供システム１０では、処理内容に基づく一連の処理（処理フロー）で実行されたコンポーネントにエラー等が発生した場合、当該コンポーネントの代替コンポーネントを実行させる処理内容（代替フロー内容）を作成する。
【０２２７】
そして、本実施形態に係るサービス提供システム１０では、作成した処理内容（代替フロー内容）に基づく一連の処理（代替フロー）を実行する。これにより、本実施形態に係るサービス提供システム１０では、処理フローにおいてコンポーネントにエラー等が発生した場合、例えば、当該コンポーネントと同等の処理を行う代替コンポーネントを実行させることができる。
【０２２８】
［第五の実施形態］
次に、第五の実施形態に係る情報処理システム１について説明する。第五の実施形態では、代替コンポーネントが実行された場合に、当該代替コンポーネントの種別に応じた処理結果をブラウザ２１０に返信する点が第四の実施形態と異なる。なお、以降では、第四の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第四の実施形態と同一の符号を用いて、その説明を省略する。
【０２２９】
＜ソフトウェア構成＞
本実施形態に係る情報処理システム１に含まれるサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図２３を参照しながら説明する。図２３は、第五の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【０２３０】
図２３に示すサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ｄ、及び代替フロー内容作成部１３４Ａを有する。また、図２３に示すサービス提供システム１０のロジック処理部１３０は、代替コンポーネント管理テーブル４０００Ａを利用する。
【０２３１】
フロー実行部１３１Ｄは、エラー等が発生したコンポーネントの代替コンポーネントＩＤ及び代替コンポーネントタイプを代替コンポーネント管理テーブル４０００Ａから取得する。そして、フロー実行部１３１は、取得した代替コンポーネントＩＤのコンポーネントを実行させる処理内容（代替フロー内容）の作成を代替フロー内容作成部１３４Ａに要求する。
【０２３２】
また、フロー実行部１３１Ｄは、処理内容（代替フロー内容）に基づく一連の処理（代替フロー）が実行された場合に、当該処理内容から代替フロータイプを取得し、取得した代替フロータイプに応じた処理結果を返信する。
【０２３３】
代替フロー内容作成部１３４Ａは、フロー実行部１３１Ｄの要求に応じて、当該要求に含まれる代替コンポーネントＩＤ及び代替コンポーネントタイプに基づく代替フロー内容を作成する。
【０２３４】
ここで、代替コンポーネント管理テーブル４０００Ａについて、図２４を参照しながら説明する。図２４は、第五の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【０２３５】
図２４に示す代替コンポーネント管理テーブル４０００Ａは、データ項目として、さらに、代替コンポーネントタイプを有する。すなわち、代替コンポーネント管理テーブル４０００Ａでは、フローＩＤ、コンポーネントＩＤ、及び代替コンポーネントＩＤに対して代替コンポーネントタイプが関連付けられている。代替コンポーネントタイプとは、代替コンポーネントＩＤのコンポーネントが実行された場合における代替フローの処理結果の種類を示す情報である。
【０２３６】
例えば、代替コンポーネントタイプが「タイプ１」である代替コンポーネントＩＤのコンポーネントが実行された場合、フロー実行部１３１Ｄは、代替フローの処理結果として「成功」を示す処理結果をブラウザ２１０に返信する。一方で、例えば、代替コンポーネントタイプが「タイプ２」である代替コンポーネントＩＤのコンポーネントが実行された場合、フロー実行部１３１Ｄは、代替フローの処理結果として「失敗」を示す処理結果をブラウザ２１０に返信する。
【０２３７】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０２３８】
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図２５を参照しながら説明する。図２５は、第五の実施形態に係るフロー実行処理の一例のシーケンス図である。
【０２３９】
フロー実行部１３１Ｄは、エラーが発生したことを示すデータを受け取ると、代替コンポーネント管理テーブル４０００Ａを参照して、該当の代替コンポーネントＩＤ及び代替コンポーネントタイプを取得する（ステップＳ２５０１）。すなわち、フロー実行部１３１Ｄは、処理内容１１００のフローＩＤ「flow001」及びＯＣＲコンポーネント１３３２ＡのコンポーネントＩＤ「ocrA」に関連付けられている代替コンポーネントＩＤ「ocrB」及び代替コンポーネントタイプ「タイプ１」を取得する。
【０２４０】
次に、フロー実行部１３１Ｄは、取得した代替コンポーネントＩＤ「ocrB」及び代替コンポーネントタイプ「タイプ１」を含む代替フロー内容の作成要求を代替フロー内容作成部１３４Ａに送信する（ステップＳ２５０２）。
【０２４１】
代替フロー内容作成部１３４Ａは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントＩＤ「ocrB」及び代替コンポーネントタイプ「タイプ１」に基づいて代替フロー内容を作成する（ステップＳ２５０３）。すなわち、代替フロー内容作成部１３４Ａは、処理内容１１００に含まれるコンポーネントＩＤ「ocrA」を、代替コンポーネントＩＤ「ocrB」に変更するとともに、代替フロータイプ「タイプ１」を追加して、図２６に示す処理内容１４００を作成する。
【０２４２】
そして、代替フロー内容作成部１３４Ａは、作成した処理内容１４００をフロー実行部１３１Ｄに返信する。
【０２４３】
図２６に示す処理内容１４００では、点線１４０１で示すように、代替コンポーネントタイプ「タイプ１」に基づいて、処理内容１１００に対して代替フロータイプ「flowtype:"タイプ１"」が追加されている。また、処理内容１４００では、点線１４０２に示すように、処理内容１１００における「.to("process:ocrA")」が「.to("process:ocrB")」に変更されている。これにより、処理内容１４００に基づく一連の処理（代替フロー）では、ＯＣＲコンポーネント１３３２Ｂにより処理を行うことができるとともに、代替フロータイプ「タイプ１」に応じた処理結果をブラウザ２１０に返信することができる。
【０２４４】
なお、続くステップＳ２１０４〜ステップＳ２１１５の処理については、第四の実施形態と同様であるため、その説明を省略する。
【０２４５】
フロー実行部１３１Ｄは、実行された代替フローの代替フロータイプを取得する（ステップＳ２５０４）。より具体的には、フロー実行部１３１Ｄは、実行された代替フローの処理内容１４００に含まれる「flowtype:"タイプ１"」から代替フロータイプ「タイプ１」を取得する。
【０２４６】
次に、フロー実行部１３１Ｄは、取得した代替フロータイプに応じた処理結果をブラウザ２１０に返信する（ステップＳ２５０５）。より具体的には、フロー実行部１３１Ｄは、取得した代替フロータイプ「タイプ１」に応じて、「成功」を示す処理結果をブラウザ２１０に返信する。
【０２４７】
以上のように、本実施形態に係るサービス提供システム１０では、代替フローが実行された場合には、当該代替フローの代替フロータイプに応じた処理結果を画像形成装置２０に返信する。また、本実施形態に係るサービス提供システム１０では、代替コンポーネントＩＤに関連付けられた代替コンポーネントタイプに基づいて代替フロータイプを指定する。これにより、本実施形態に係るサービス提供システム１０では、実行された代替コンポーネントの種別や内容に応じて、適切な処理結果を画像形成装置２０に返信することができる。
【０２４８】
［第六の実施形態］
次に、第六の実施形態に係る情報処理システム１について説明する。第六の実施形態では、処理フローにおける各処理を実行するコンポーネントにおいて発生したエラーが回復可能なエラーであるか否かを判定して、当該判定結果に応じた他のコンポーネントのコンポーネントＩＤを取得する点が第四の実施形態と異なる。なお、以降では、第四の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第四の実施形態と同一の符号を用いて、その説明を省略する。
【０２４９】
＜ソフトウェア構成＞
本実施形態に係る情報処理システム１に含まれるサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図２７を参照しながら説明する。図２７は、第六の実施形態に係るロジック処理部の一例の処理ブロックを示す図である。
【０２５０】
図２７に示すサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ｅ、及び代替フロー内容作成部１３４Ｂを有する。また、図２７に示すサービス提供システム１０のロジック処理部１３０において、コンポーネント群１３３は、例外コンポーネント１３３４Ａや例外コンポーネント１３３４Ｂ等が含まれる。
【０２５１】
さらに、図２７に示すサービス提供システム１０のロジック処理部１３０は、代替コンポーネント管理テーブル４０００Ｂを利用する。
【０２５２】
フロー実行部１３１Ｅは、処理内容に基づく一連の処理（処理フロー）における各処理を実行するコンポーネントにおいてエラー等が発生した場合に、当該エラーが回復可能なエラーであるか否かを判定する。そして、フロー実行部１３１Ｅは、代替コンポーネント管理テーブル４０００Ｂを参照して、当該判定結果に応じて、代替コンポーネントＩＤ又は例外コンポーネントＩＤを取得する。
【０２５３】
ここで、例外コンポーネントＩＤとは、処理フローにおける各処理を実行するコンポーネントにおいて回復不可能なエラーが発生した場合に実行される他のコンポーネント（例外コンポーネント１３３４Ａ等）のコンポーネントＩＤのことである。なお、例外コンポーネント１３３４Ａ等は、例えば、エラー情報の出力やエラー通知等の処理を実行する。
【０２５４】
代替フロー内容作成部１３４Ｂは、フロー実行部１３１Ｅの要求に応じて、当該要求に含まれる代替コンポーネントＩＤ又は例外コンポーネントＩＤに基づく代替フロー内容を作成する。
【０２５５】
ここで、代替コンポーネント管理テーブル４０００Ｂについて、図２８を参照しながら説明する。図２８は、第六の実施形態に係る代替コンポーネント管理テーブルの一例を示す図である。
【０２５６】
図２８に示す代替コンポーネント管理テーブル４０００Ｂは、データ項目として、さらに、例外コンポーネントＩＤを有する。すなわち、代替コンポーネント管理テーブル４０００Ｂでは、フローＩＤ及びコンポーネントＩＤに対して、代替コンポーネントＩＤに加えて、例外コンポーネントＩＤが関連付けられている。
【０２５７】
例えば、フローＩＤ「flow001」及びコンポーネントＩＤ「ocrA」には、代替コンポーネントＩＤ「ocrB」に加えて、例外コンポーネント１３３４Ａの例外コンポーネントＩＤ「exceptA」が関連付けられている。同様に、例えば、フローＩＤ「flow001」及びコンポーネントＩＤ「uploadFileA」には、代替コンポーネントＩＤ「uploadFileB」に加えて、例外コンポーネント１３３４Ｂの例外コンポーネントＩＤ「exceptB」が関連付けられている。
【０２５８】
これにより、フロー実行部１３１Ｅは、処理フローの各処理を実行するコンポーネントにおいてエラー等が発生した場合には、当該エラーに応じて、代替コンポーネントＩＤ又例外コンポーネントＩＤを取得することができる。
【０２５９】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０２６０】
≪フロー実行処理≫
以降では、フロー実行処理の途中でエラーが発生した場合について、図２９を参照しながら説明する。図２９は、第六の実施形態に係るフロー実行処理の一例のシーケンス図である。なお、ステップＳ１２０１〜ステップＳ１２０６の処理については、第一の実施形態と同様であるため、その説明を省略する。
【０２６１】
フロー実行部１３１Ｅは、エラーが発生したことを示すデータを受け取ると、当該エラーが回復可能なエラーであるか否かを判定する（ステップＳ２９０１）。
【０２６２】
ここで、本実施形態において、回復可能なエラーとは、代替コンポーネントＩＤのコンポーネントを実行することが可能なエラー種別を言う。このようなエラー種別には、例えば、一時的なネットワークエラー等が含まれる。
【０２６３】
一方、本実施形態において、回復不可能なエラーとは、代替コンポーネントＩＤのコンポーネントを実行することが不可能なエラー種別を言う。このようなエラー種別には、例えば、コンポーネントに入力されたデータが不正であることを示すエラー等が含まれる。
【０２６４】
ステップＳ２９０１において、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部１３１Ｅは、ステップＳ２９０２〜ステップＳ２９０５の処理を実行する。一方で、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部１３１Ｅは、ステップＳ２９０６〜ステップＳ２９１３の処理を実行する。
【０２６５】
すなわち、発生したエラーが回復可能なエラーであると判定された場合、フロー実行部１３１Ｅは、代替コンポーネント管理テーブル４０００Ｂを参照して、該当の代替コンポーネントＩＤを取得する（ステップＳ２９０２）。すなわち、フロー実行部１３１Ｅは、ステップＳ１２０２で取得した処理内容１１００のフローＩＤ「flow001」及びＯＣＲコンポーネント１３３２ＡのコンポーネントＩＤ「ocrA」に関連付けられている代替コンポーネントＩＤ「ocrB」を取得する。
【０２６６】
次に、フロー実行部１３１Ｅは、取得した代替コンポーネントＩＤ「ocrB」を含む代替フロー内容の作成要求を代替フロー内容作成部１３４Ｂに送信する（ステップＳ２９０３）。
【０２６７】
代替フロー内容作成部１３４Ｂは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる代替コンポーネントＩＤ「ocrB」に基づいて代替フロー内容を作成する（ステップＳ２９０４）。すなわち、代替フロー内容作成部１３４は、処理内容１１００に含まれるコンポーネントＩＤ「ocrA」を、代替コンポーネントＩＤ「ocrB」に変更して、図２２に示す処理内容１３００を作成する。
【０２６８】
そして、代替フロー内容作成部１３４Ｂは、作成した処理内容１３００をフロー実行部１３１Ｃに返信する。
【０２６９】
次に、フロー実行部１３１Ｅは、受け取った処理内容１３００に基づく代替フローを実行する（ステップＳ２９０５）。すなわち、この場合、図２１のステップＳ２１０４〜ステップＳ２１１６と同様の処理が行われる。
【０２７０】
一方、発生したエラーが回復不可能なエラーであると判定された場合、フロー実行部１３１Ｅは、代替コンポーネント管理テーブル４０００Ｂを参照して、該当の例外コンポーネントＩＤを取得する（ステップＳ２９０６）。すなわち、フロー実行部１３１Ｅは、ステップＳ１２０２で取得した処理内容１１００のフローＩＤ「flow001」及びＯＣＲコンポーネント１３３２ＡのコンポーネントＩＤ「ocrA」に関連付けられている例外コンポーネントＩＤ「exceptA」を取得する。
【０２７１】
次に、フロー実行部１３１Ｅは、取得した例外コンポーネントＩＤ「exceptA」を含む代替フロー内容の作成要求を代替フロー内容作成部１３４Ｂに送信する（ステップＳ２９０７）。
【０２７２】
代替フロー内容作成部１３４Ｂは、代替フロー内容の作成要求を受け取ると、当該作成要求に含まれる例外コンポーネントＩＤ「exceptA」に基づいて代替フロー内容を作成する（ステップＳ２９０８）。すなわち、代替フロー内容作成部１３４Ｂは、図３０に示す処理内容１５００を作成する。
【０２７３】
そして、代替フロー内容作成部１３４Ｂは、作成した処理内容１５００をフロー実行部１３１Ｅに返信する。
【０２７４】
図３０に示す処理内容１５００では、点線１５０１で示すように、「.to("process:exceptA")」が指定されている。これにより、処理内容１５００に基づく一連の処理（代替フロー）では、例外コンポーネント１３３４Ａにより処理を行うことができる。
【０２７５】
フロー実行部１３１Ｅは、取得した処理内容１５００に従ってコンポーネントの取得を、コンポーネント管理部１３２に要求する（ステップＳ２９０９）。より具体的には、フロー実行部１３１Ｅは、図３０に示す処理内容１５００に指定されている「.to("process:exceptA")」に基づき、例外コンポーネント１３３４Ａの取得を、コンポーネント管理部１３２に要求する。
【０２７６】
コンポーネント管理部１３２は、例外コンポーネント１３３４Ａの取得要求を受け取ると、例外コンポーネント１３３４Ａを生成する（ステップＳ２９１０）。そして、例外コンポーネント１３３４Ａが生成されると、コンポーネント管理部１３２は、例外コンポーネント１３３４Ａをフロー実行部１３１Ｅを返信する。
【０２７７】
フロー実行部１３１Ｅは、データを指定して、生成された例外コンポーネント１３３４Ａに処理の実行を要求する（ステップＳ２９１１）。
【０２７８】
例外コンポーネント１３３４Ａは、データが指定された処理の実行要求を受け取ると、当該指定されたデータに対して処理を実行する（ステップＳ２９１２）。すなわち、例外コンポーネント１３３４Ａは、例えば、エラー情報の出力やエラー通知等の例外処理を実行する。
【０２７９】
そして、例外コンポーネント１３３４Ａは、当該処理の処理結果を示すデータをフロー実行部１３１Ｅに返信する。
【０２８０】
フロー実行部１３１Ｅは、処理内容１５００に基づく一連の処理（代替フロー）の処理結果をブラウザ２１０に返信する（ステップＳ２９１３）。これにより、画像形成装置２０のユーザは、スキャン配信サービスを実現するための一連の処理（処理フロー）において回復不可能なエラーが発生し、当該エラーが発生したコンポーネントの代わりに例外コンポーネントが実行されたことを知ることができる。
【０２８１】
以上のように、本実施形態に係るサービス提供システム１０では、処理フローで実行されたコンポーネントにエラー等が発生した場合、当該エラーが回復可能か否かに応じて、代替コンポーネントＩＤ又は例外コンポーネントＩＤを取得する。そして、本実施形態に係るサービス提供システム１０では、例外コンポーネントＩＤを取得した場合、エラー情報の出力やエラー通知等の例外処理を行う例外コンポーネントを実行させる。
【０２８２】
これにより、本実施形態に係るサービス提供システム１０では、例えば、処理フローにおいて回復不可能な深刻なエラーが発生した場合等には、当該エラーの発生を画像形成装置２０に通知するための例外処理を実行することができる。
【０２８３】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０２８４】
１        情報処理システム
１０      サービス提供システム
２０      画像形成装置
３０      外部ストレージシステム
１１０    サービス処理部
１２０    アプリ管理部
１３０    ロジック処理部
１３１    フロー実行部
１３２    コンポーネント管理部
１３３    コンポーネント群
１４０    データＩ／Ｆ部
１５０    ドキュメントサービス部
１５１    ＯＣＲ処理
１５２    翻訳処理
１６０    ストレージサービス連携部
１７０    ファイル処理部
１８０    データ処理部
１９０    アプリ情報記憶部
【先行技術文献】
【特許文献】
【０２８５】
【特許文献１】特許第５１１２０８５号公報
【図１】
0006657798.tif 000002
【図２】
0006657798.tif 000003
【図３】
0006657798.tif 000004
【図４】
0006657798.tif 000005
【図５】
0006657798.tif 000006
【図６】
0006657798.tif 000007
【図７】
0006657798.tif 000008
【図８】
0006657798.tif 000009
【図９】
0006657798.tif 000010
【図１０】
0006657798.tif 000011
【図１１】
0006657798.tif 000012
【図１２】
0006657798.tif 000013
【図１３】
0006657798.tif 000014
【図１４】
0006657798.tif 000015
【図１５】
0006657798.tif 000016
【図１６】
0006657798.tif 000017
【図１７】
0006657798.tif 000018
【図１８】
0006657798.tif 000019
【図１９】
0006657798.tif 000020
【図２０】
0006657798.tif 000021
【図２１】
0006657798.tif 000022
【図２２】
0006657798.tif 000023
【図２３】
0006657798.tif 000024
【図２４】
0006657798.tif 000025
【図２５】
0006657798.tif 000026
【図２６】
0006657798.tif 000027
【図２７】
0006657798.tif 000028
【図２８】
0006657798.tif 000029
【図２９】
0006657798.tif 000030
【図３０】
0006657798.tif 000031