(57)【特許請求の範囲】
【請求項１】
１以上の情報処理装置を含み、所定の処理をそれぞれ実行する複数のコンポーネントを有する情報処理システムであって、
電子データを用いた一連の処理である第１の処理を実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、
前記情報処理システムに接続される１以上の機器のうちの一の機器から前記アプリ識別情報と、該一の機器において指定された電子データに関する情報とを含む要求を受信する受信手段と、
前記複数のコンポーネントのうちの２以上のコンポーネントを組み合わせることで、前記受信手段で受信した前記要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく前記第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく第１の電子データに対して実行する処理実行手段と、
前記処理実行手段により実行される前記第１の処理に含まれる処理おいてエラーが発生した場合、前記第１の処理において該エラーが発生した処理以降の一連の処理を含む第２の処理に関する情報を生成する処理生成手段と
を有し、
前記処理実行手段は、
前記第１の処理に含まれる処理においてエラーが発生した場合、前記複数のコンポーネントのうち、前記エラーが発生するまでに前記第１の電子データを用いて実行された前記第１の処理の処理結果を示す第２の電子データを取得する第１のコンポーネントが含まれる２以上のコンポーネントを組み合わせることで、前記処理生成手段により生成された前記第２の処理に関する情報に基づく第２の処理を実行する、情報処理システム。
【請求項２】
前記処理実行手段は、
さらに、前記第２の電子データを第２の記憶手段に記憶させ、
前記第１の処理に含まれる処理においてエラーが発生した場合、前記処理生成手段により生成された前記第２の処理に関する情報に基づく第２の処理を、前記第２の記憶手段に記憶された前記第２の電子データを用いて実行する、請求項１に記載の情報処理システム。
【請求項３】
前記第１のコンポーネントは、前記第２の記憶手段から前記第２の電子データを取得するためのコンポーネントであり、
前記処理実行手段は、
前記第２の電子データを用いて実行する前記第２の処理を、前記第１のコンポーネントと、前記第１の処理を実行した際の２以上のコンポーネントの組み合わせに含まれる１以上の第２のコンポーネントとを組み合わせて実行する、請求項２記載の情報処理システム。
【請求項４】
所定の処理をそれぞれ実行する複数のコンポーネントを有する情報処理装置であって、
電子データを用いた一連の処理である第１の処理を実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、
前記情報処理装置に接続される１以上の機器のうちの一の機器から前記アプリ識別情報と、該一の機器において指定された電子データに関する情報とを含む要求を受信する受信手段と、
前記複数のコンポーネントのうちの２以上のコンポーネントを組み合わせることで、前記受信手段で受信した前記要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく前記第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく第１の電子データに対して実行する処理実行手段と、
前記処理実行手段により実行される前記第１の処理に含まれる処理おいてエラーが発生した場合、前記第１の処理において該エラーが発生した処理以降の一連の処理を含む第２の処理に関する情報を生成する処理生成手段と
を有し、
前記処理実行手段は、
前記第１の処理に含まれる処理においてエラーが発生した場合、前記複数のコンポーネントのうち、前記エラーが発生するまでに前記第１の電子データを用いて実行された前記第１の処理の処理結果を示す第２の電子データを取得する第１のコンポーネントが含まれる２以上のコンポーネントを組み合わせることで、前記処理生成手段により生成された前記第２の処理に関する情報に基づく第２の処理を実行する、情報処理装置。
【請求項５】
前記処理実行手段は、
さらに、前記第２の電子データを第２の記憶手段に記憶させ、
前記第１の処理に含まれる処理においてエラーが発生した場合、前記処理生成手段により生成された前記第２の処理に関する情報に基づく第２の処理を、前記第２の記憶手段に記憶された前記第２の電子データを用いて実行する、請求項４に記載の情報処理装置。
【請求項６】
前記第１のコンポーネントは、前記第２の記憶手段から前記第２の電子データを取得するためのコンポーネントであり、
前記処理実行手段は、
前記第２の電子データを用いて実行する前記第２の処理を、前記第１のコンポーネントと、前記第１の処理を実行した際の２以上のコンポーネントの組み合わせに含まれる１以上の第２のコンポーネントとを組み合わせて実行する、請求項５記載の情報処理装置。
【請求項７】
電子データを用いた一連の処理である第１の処理を実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段を有し、かつ、１以上の情報処理装置を含み、所定の処理をそれぞれ実行する複数のコンポーネントを有する情報処理システムに用いられる情報処理方法であって、
前記情報処理システムに接続される１以上の機器のうちの一の機器から前記アプリ識別情報と、該一の機器において指定された電子データに関する情報とを含む要求を受信する受信手順と、
前記複数のコンポーネントのうちの２以上のコンポーネントを組み合わせることで、前記受信手順で受信した前記要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく前記第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく第１の電子データに対して実行する処理実行手順と、
前記処理実行手順により実行される前記第１の処理に含まれる処理おいてエラーが発生した場合、前記第１の処理において該エラーが発生した処理以降の一連の処理を含む第２の処理に関する情報を生成する処理生成手順と
を有し、
前記処理実行手順は、
前記第１の処理に含まれる処理においてエラーが発生した場合、前記複数のコンポーネントのうち、前記エラーが発生するまでに前記第１の電子データを用いて実行された前記第１の処理の処理結果を示す第２の電子データを取得する第１のコンポーネントが含まれる２以上のコンポーネントを組み合わせることで、前記処理生成手順により生成された前記第２の処理に関する情報に基づく第２の処理を実行する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
近年、クラウドコンピューティング等により多種多様な外部サービスが提供されるようになってきており、このような外部サービスと機器とが連携して処理を行う技術が知られている。例えば画像形成装置で原稿をスキャンして取得した画像データを外部ストレージサービスに保管する技術が知られている。
【０００３】
また、予め定義された事務フローモデルに基づき、各種処理を実行するコンポーネント部品を制御するための事務フローを生成する技術が知られている（例えば特許文献１参照）。このような技術では、生成された事務フローによりコンポーネント部品が組み合わされて、事務フローを実現する一連の処理が実行される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の従来技術においては、一連の処理がエラー等により途中で失敗した場合、失敗するまでに行われた処理の結果がそのまま残ってしまうことがあった。
【０００５】
例えば、外部サービスに新規フォルダを作成する処理を行った後、原稿をスキャンして取得した画像データを当該作成した新規フォルダに保管する処理を行う一連の処理があるとする。このとき、画像データを新規フォルダに保管する処理においてエラー等が発生し、一連の処理が失敗した場合、作成された新規フォルダが外部サービスにそのまま残ってしまうことがあった。したがって、このような一連の処理がエラー等により途中で失敗した場合、当該一連の処理が実行される前のフォルダ構成等に復帰させることが好ましい。
【０００６】
本発明の一実施形態は、上記の点に鑑みてなされたもので、一連の処理が実行される前の状態に復帰させることを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の一実施形態は、１以上の情報処理装置を含む情報処理システムであって、電子データを用いた一連の処理である第１の処理を実行するアプリケーション毎に、該アプリケーションを識別するアプリ識別情報と、該第１の処理に関する情報とを関連付けて記憶する第１の記憶手段と、前記情報処理システムに接続される１以上の機器のうちの一の機器から前記アプリ識別情報と、該一の機器において指定された電子データに関する情報とを含む要求を受信する受信手段と、前記受信手段で受信した前記要求に含まれる前記アプリ識別情報に関連付けて前記第１の記憶手段に記憶されている前記第１の処理に関する情報に基づく前記第１の処理を、前記要求に含まれる前記電子データに関する情報に基づく電子データに対して実行する処理実行手段と、前記処理実行手段により実行される前記第１の処理においてエラーが発生した場合、該エラーが発生するまでに前記処理実行手段により実行された前記第１の処理の処理結果を該第１の処理の実行前に戻すための一連の処理である第２の処理に関する情報を生成する処理生成手段とを有し、前記処理実行手段は、前記第１の処理においてエラーが発生した場合、前記処理生成手段により生成された前記第２の処理に関する情報に基づく第２の処理を実行する。
【発明の効果】
【０００８】
本発明の一実施形態によれば、一連の処理が実行される前の状態に復帰させることができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係る情報処理システムの一例のシステム構成図である。
【図２】第１の実施形態に係るサービス提供システムの一例のハードウェア構成図である。
【図３】第１の実施形態に係る画像形成装置の一例のハードウェア構成図である。
【図４】第１の実施形態に係る情報処理システムの一例の処理ブロック図である。
【図５】共通Ｉ／Ｆ及び固有Ｉ／Ｆの一例を示す図である。
【図６】処理内容の一例を示す図である。
【図７】第１の実施形態に係るロジック処理部の一例の処理ブロック図である。
【図８】第１の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【図９】スキャン配信サービスを利用するためのアプリ画面の一例を示す図である。
【図１０】第１の実施形態に係る配信実行処理の一例のシーケンス図である。
【図１１】フロー経過情報テーブルの一例を示す図である。
【図１２】復元情報テーブルの一例を示す図である。
【図１３】復元処理内容の一例を示す図である。
【図１４】エラー画面の一例を示す図である。
【図１５】第１の実施形態に係る復元処理の一例のシーケンス図である。
【図１６】第２の実施形態に係るロジック処理部の一例の処理ブロック図である。
【図１７】第２の実施形態に係る配信実行処理の一例のシーケンス図である。
【図１８】第２の実施形態に係る復元処理の一例のシーケンス図である。
【図１９】スキップ可能エラー情報テーブルの一例を示す図である。
【図２０】第３の実施形態に係る配信実行処理の一例のシーケンス図である。
【図２１】エラー画面の他の例を示す図である。
【図２２】復元処理内容の他の例を示す図である。
【図２３】第４の実施形態に係るロジック処理部の一例の処理ブロック図である。
【図２４】第４の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【図２５】スキャン配信サービスを利用するためのアプリ画面の一例を示す図である。
【図２６】第４の実施形態に係る配信実行処理の一例のシーケンス図である。
【図２７】処理内容の他の例を示す図である。
【図２８】フロー経過情報テーブルの他の例を示す図である。
【図２９】再開処理内容の一例を示す図である。
【図３０】サブフロー生成部により生成される再開処理内容について説明するための図である。
【図３１】エラー画面の一例を示す図である。
【図３２】第４の実施形態に係る配信実行処理の再開処理の一例のシーケンス図である。
【図３３】第５の実施形態に係る情報処理システムの一例の処理ブロック図である。
【図３４】エラー情報管理テーブルの一例を示す図である。
【図３５】第５の実施形態に係るロジック処理部の一例の処理ブロック図である。
【図３６】自動リカバリ可能エラー情報テーブルの一例を示す図である。
【図３７】第５の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【図３８】スキャン配信サービスを利用するためのアプリ画面の他の例を示す図である。
【図３９】第５の実施形態に係る配信実行処理の一例のシーケンス図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について図面を参照しながら詳細に説明する。
【００１１】
［第１の実施形態］
＜システム構成＞
まず、本実施形態に係る情報処理システム１のシステム構成について、図１を用いて説明する。図１は、第１の実施形態に係る情報処理システムの一例のシステム構成図である。図１に示される情報処理システム１は、サービス提供環境Ｅ１、ユーザ環境Ｅ２、及び外部ストレージシステム３０を含み、インターネット等の広域的なネットワークＮ１を介して通信可能に接続されている。
【００１２】
サービス提供環境Ｅ１は、ネットワークを介してクラウドサービス等の外部サービスを提供するシステム環境である。なお、本実施形態では、外部サービスの具体例としてクラウドサービスを採用して説明するが、ＡＳＰ（Application Service Provider）によって提供されるサービスやＷｅｂサービス等、ネットワークを介して提供されるサービスに関して本実施の形態が適用されてもよい。
【００１３】
サービス提供環境Ｅ１は、一台以上の情報処理装置で実現されるサービス提供システム１０を有する。サービス提供システム１０は、ネットワークを介して、外部サービスと連携した所定のサービスを提供する。例えば、サービス提供システム１０は、ユーザ環境Ｅ２の画像形成装置２０において原稿をスキャンして生成された電子ファイルを、外部ストレージシステム３０の所定のフォルダに保存するサービス（スキャン配信サービス）を提供する。本実施形態では、サービス提供システム１０は、このようなスキャン配信サービスを提供するものとして説明する。
【００１４】
ただし、サービス提供システム１０により提供されるサービスは、これに限られない。サービス提供システム１０は、例えば、外部ストレージシステム３０に保存されている電子ファイルを、ユーザ環境Ｅ２の画像形成装置２０で印刷するサービス（クラウドプリントサービス）を提供してもよい。また、サービス提供システム１０は、例えば、画像形成装置２０において原稿をスキャンして生成された電子ファイルを、ＯＣＲ（Optical Character Reader）処理した後、所定の言語に翻訳して、外部ストレージシステム３０に保存するサービスを提供してもよい。さらに、サービス提供システム１０は、例えば、外部ストレージシステム３０に保存されている電子ファイルを、ユーザ環境Ｅ２のプロジェクタで投影するサービス等を提供してもよい。
【００１５】
なお、サービス提供システム１０の全部又は一部は、ユーザ環境Ｅ２に設置されていてもよい。すなわち、サービス提供システム１０を構成する情報処理装置の全部又は一部は、ユーザ環境Ｅ２に包含されていてもよい。
【００１６】
ユーザ環境Ｅ２は、例えば画像形成装置２０を使用するユーザである企業等におけるシステム環境である。ユーザ環境Ｅ２は、一台以上の画像形成装置２０が例えばＬＡＮ（Local Area Network）等のネットワークを介して接続されている。
【００１７】
本実施形態に係る画像形成装置２０は、スキャン機能を有する。ただし、画像形成装置２０は、スキャン機能以外に、プリント機能やコピー機能、ファックス（ＦＡＸ）通信機能等を備える複合機等でもよい。
【００１８】
外部ストレージシステム３０は、ネットワークを介してストレージサービス（又はオンラインストレージ）と呼ばれるクラウドサービスを提供するコンピュータシステムである。ストレージサービスとは、外部ストレージシステム３０の記憶領域を貸し出すサービスである。本実施形態では、スキャン配信サービスにおいて、外部ストレージシステム３０によって貸し出される記憶領域に、電子ファイルを保存（アップロード）する。
【００１９】
なお、以降では、複数の外部ストレージシステム３０について、各々を区別するときは、「外部ストレージシステム３０１」、「外部ストレージシステム３０２」等と添え字を用いて記載する。また、外部ストレージシステム３０１によって提供されるサービスの名称を「ストレージサービスＡ」、ストレージシステム３０２によって提供されるサービスの名称を「ストレージサービスＢ」等とする。
【００２０】
また、外部ストレージシステム３０は、複数台の情報処理装置によって実現されるシステムであってもよい。さらに、図１に示される情報処理システム１の構成は一例であって、他の構成であってもよい。例えば、ユーザ環境Ｅ２は、画像形成装置２０に加えて又は画像形成装置２０に代えて、プロジェクタ、電子黒板、携帯電話、スマートフォン等の各種機器を有していてもよい。
【００２１】
＜ハードウェア構成＞
次に、本実施形態に係るサービス提供システム１０及び画像形成装置２０のハードウェア構成について、それぞれ図２及び図３を用いて説明する。
【００２２】
≪サービス提供システム≫
図１に示されるサービス提供システム１０は、例えば図２に示されるようなハードウェア構成を有する。図２は、第１の実施形態に係るサービス提供システムの一例のハードウェア構成図である。図２に示すサービス提供システム１０は、入力装置１１と、表示装置１２と、外部Ｉ／Ｆ１３と、ＲＡＭ（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」とする。
【００５１】
ここで、アプリ情報１０００１に含まれるスキャン配信サービスの一例の処理内容を図６に示す。図６は、処理内容の一例を示す図である。図６に示す処理内容１１００は、ストレージサービスＡにフォルダ「folder2」を新規作成した後、このフォルダ「folder2」の直下にフォルダ「folder1」を移動させた後、電子ファイルをフォルダ「folder1」に配信する一連の処理を示している。図６に示す処理内容１１００の「flowId」にはアプリ情報１０００１において処理内容を一意に識別するためのフローＩＤ「flow1」が定義されている。また、図６に示す処理内容１１００の「flowDetails」には、オペレーション１１０１〜１１０３が定義されている。
【００５２】
ここで、オペレーションとは、サービス提供システム１０により提供されるサービスを実現する一連の処理に含まれる各処理に関する情報のことである。したがって、処理内容には、１以上のオペレーションが定義されている。
【００５３】
処理内容１１００は、ストレージサービスＡにフォルダを新規作成するオペレーション１１０１、ストレージサービスＡのフォルダを移動させるオペレーション１１０２、及びストレージサービスＡに電子ファイルを配信するオペレーション１１０３で構成されている。ここで、それぞれのオペレーション１１０１〜１１０３について、より具体的に説明する。オペレーション１１０１には、ストレージサービスＡのフォルダパス「/」の直下にフォルダ名「folder2」（フォルダパス「/folder2」）のフォルダを新規作成する処理が定義されている。また、オペレーション１１０２には、ストレージサービスＡのフォルダパス「/」の直下に既にあるフォルダ「folder1」（フォルダパス「/folder1」）をフォルダ「folder2」の直下に移動させる処理が定義されている。さらに、オペレーション１１０３には、ストレージサービスＡのフォルダ「folder1」（フォルダパス「/folder2/folder1」）に電子ファイルを配信（アップロード）することが定義されている。
【００５４】
なお、図６に示す処理内容１１００は、スキャン配信サービスを実現するための一例である。スキャン配信サービスは、例えば、ドキュメントサービス部１５０に含まれるプログラムにより実現される各種処理を、さらに組み合わせた一連の処理により実現されてもよい。例えば、スキャン配信サービスは、「スキャンされた電子ファイルについて、ＯＣＲ処理を行った後、ストレージサービスＡの指定されたフォルダに配信する」等であってもよい。
【００５５】
また、アプリ情報１０００１には、複数の処理内容が含まれてもよい。すなわち、アプリ情報１０００には、フローＩＤが異なる複数の処理内容が含まれてもよい。
【００５６】
次に、本実施形態に係るロジック処理部１３０の詳細な処理ブロックについて、図７を用いて説明する。図７は、第１の実施形態に係るロジック処理部の一例の処理ブロック図である。ロジック処理部１３０は、フロー実行部１３１と、コンポーネント管理部１３２と、コンポーネント群１３３と、フロー経過管理部１３４と、サブフロー生成部１３５と、フロー経過情報記憶部１３６と、復元情報記憶部１３７とを有する。
【００５７】
フロー実行部１３１は、ブラウザ２１０からスキャン配信サービスの処理の実行要求を受け付けると、アプリ管理部１２０を介して、アプリ情報１０００から処理内容を取得する。そして、フロー実行部１３１は、取得した処理内容に定義されたオペレーションに従って、コンポーネントに対して処理の実行を要求する。なお、ここで、コンポーネントとは、各種処理を実行するためのモジュール等であり、例えばクラスや関数等で定義される。
【００５８】
また、フロー実行部１３１は、コンポーネントから処理結果を受け取ると、フロー経過情報の格納をフロー経過管理部１３４に要求する。ここで、フロー経過情報とは、処理内容に定義されたオペレーションのうち実行済のオペレーションに関する情報である。
【００５９】
コンポーネント管理部１３２は、フロー実行部１３１からの要求に応じて、コンポーネントの生成を行う。なお、コンポーネントの生成とは、例えばクラスで定義されたコンポーネントを、メモリ（例えばＲＡＭ１４）上に展開することを意味する。
【００６０】
コンポーネント群１３３は、コンポーネントの集合である。コンポーネント群１３３には、外部ストレージシステム３０に電子ファイルを配信するための配信コンポーネント１３３１、外部ストレージシステム３０のフォルダの新規作成や移動（フォルダパスの変更）等のフォルダ操作をするためのフォルダ操作コンポーネント１３３２が含まれる。なお、コンポーネント群１３３には、これら以外にも、例えば、外部ストレージシステム３０から電子ファイルを取得するための取得コンポーネントや電子ファイルにＯＣＲ処理を行うためのＯＣＲコンポーネント等が含まれてもよい。
【００６１】
このように、コンポーネント群１３３には、処理内容に定義されたオペレーションの処理を実行するコンポーネントが定義されている。したがって、フロー実行部１３１は、処理内容に定義されたオペレーションに従って、オペレーションに対応するコンポーネントに処理の実行を要求することで、サービス提供システム１０により提供されるサービスを実現するための一連の処理を実行することができる。
【００６２】
さらに、これらの各コンポーネントは、コンポーネント共通Ｉ／Ｆ１３３０を有する。コンポーネント共通Ｉ／Ｆ１３３０は、各コンポーネントに対して共通に定義されたＡＰＩであり、コンポーネントを生成するためのＡＰＩと、コンポーネントに対して処理の実行を要求するためのＡＰＩとが含まれる。このように、各コンポーネントがコンポーネント共通Ｉ／Ｆ１３３０を有することで、コンポーネントの追加等に伴う影響を局所化することができる。これにより、コンポーネントの追加等の開発に要する工数を削減することができる。
【００６３】
フロー経過管理部１３４は、フロー実行部１３１からフロー経過情報を受け取った場合に、受け取ったフロー経過情報をフロー経過情報記憶部１３６に記憶させる。
【００６４】
サブフロー生成部１３５は、処理内容に定義されたオペレーションに従って実行されたコンポーネントの処理にエラー等が発生した場合（異常に終了した場合）、エラー等が発生した処理を含む一連の処理が実行される前の状態に復元するための処理内容を生成する。以降では、サブフロー生成部１３５により生成される処理内容を、「復元処理内容」と表す。そして、サブフロー生成部１３５は、アプリ管理部１２０を介して、生成した復元処理内容をアプリ情報記憶部１９０に記憶させる。
【００６５】
ここで、上記において一連の処理が実行される前の状態に復元するとは、一連の処理において変更された外部ストレージシステム３０の各種データ等を、当該一連の処理が実行される前の状態に戻すことをいい、「ロールバック」又は「後退復帰」とも称される。
【００６６】
フロー経過情報記憶部１３６は、フロー経過情報テーブル１３６１を記憶する。フロー経過情報テーブル１３６１には、処理内容に定義されたオペレーションの実行状況が管理される。これにより、フロー経過管理部１３４は、一連の処理に関する情報を示す処理内容に定義された各オペレーションについて、どこまでのオペレーションが処理されたのかを管理することができる。なお、フロー経過情報テーブル１３６１の詳細については後述する。
【００６７】
復元情報記憶部１３７は、復元情報テーブル１３７１を記憶する。復元情報テーブル１３７１には、処理内容から復元処理内容を生成するための情報が管理される。すなわち、処理内容に定義される各オペレーションについて、当該オペレーションに従って実行される処理の処理結果を復元させるためのオペレーション（復元オペレーション）が管理されている。なお、復元情報テーブル１３７１の詳細については後述する。
【００６８】
以上のように、本実施形態に係るサービス提供システム１０は、一連の処理に関する情報を示す処理内容に定義されたオペレーションの実行状況を管理する。また、本実施形態に係るサービス提供システム１０は、処理内容に定義される各オペレーションに従って実行される処理を復元させるための復元オペレーションを管理する。これにより、サービス提供システム１０は、処理内容に定義されたオペレーションに従って実行されたコンポーネントの処理にエラー等が発生した場合、当該エラー等が発生する以前に実行された処理の結果を復元させることができる。
【００６９】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【００７０】
≪スキャン配信サービスの全体処理≫
まず、画像形成装置２０のユーザが本実施形態に係るスキャン配信サービスを利用する場合の全体的な処理について説明する。図８は、第１の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【００７１】
画像形成装置２０のユーザは、ブラウザ２１０を用いて、サービス提供システム１０により提供されるサービスの一覧を取得するための操作を行う。すると、画像形成装置２０は、サービスの一覧の取得要求をサービス提供システム１０のサービス処理部１１０に送信する（ステップＳ８０１）。そして、サービス処理部１１０のアプリ管理部１２０は、当該取得要求を受信すると、サービス提供システム１０により提供されるサービスの一覧を画像形成装置２０に送信する。これにより、画像形成装置２０のブラウザ２１０により、画像形成装置２０の操作パネル２２にサービス提供システム１０により提供されるサービスの一覧が表示される。なお、サービスの一覧には、サービス提供システム１０により提供されるサービスのサービス名と、このサービスを提供するアプリ情報１０００のアプリＩＤと、このアプリ情報１０００に含まれる処理内容のフローＩＤとが含まれる。
【００７２】
ユーザは、画像形成装置２０の操作パネル２２に表示されたサービスの一覧から、自身が利用を所望するサービスを選択する。すると、ブラウザ２１０は、選択されたサービスを提供するアプリ情報１０００のアプリＩＤをアプリ管理部１２０に送信する（ステップＳ８０２）。ここでは、ユーザによりストレージサービスＡにスキャン配信するためのサービス「スキャン配信サービス」の利用が選択されたものとする。したがって、ブラウザ２１０は、アプリ情報１０００１のアプリＩＤ「app001」をアプリ管理部１２０に送信する。そして、アプリ管理部１２０は、ブラウザ２１０から受け取ったアプリＩＤ「app001」のアプリ情報１０００１に含まれる画面定義に基づきＨＴＭＬ（HyperText Markup Language）形式のアプリ画面を生成し、ブラウザ２１０に送信する。
【００７３】
ブラウザ２１０は、アプリ管理部１２０から受け取ったアプリ画面を受信すると、例えば図９に示すようなアプリ画面Ｇ１００を、操作パネル２２に表示させる（ステップＳ８０３）。図９は、ストレージサービスＡにスキャン配信するスキャン配信サービスを利用するためのアプリ画面Ｇ１００である。
【００７４】
次に、ユーザは、図９に示すアプリ画面Ｇ１００において、ファイル名入力欄Ｇ１０１に、スキャンにより生成される電子ファイルに付与する所望のファイル名を入力する。そして、ユーザは、画像形成装置２０のスキャナ２５に原稿をセットした上で、スキャン実行ボタンＧ１０２を押下する。すると、ブラウザ２１０は、スキャン実行ボタンＧ１０２の押下を受け付ける（ステップＳ８０４）。これにより、画像形成装置２０のスキャナ２５により原稿が読み取られ、ファイル名入力欄Ｇ１０１に入力されたファイル名の電子ファイルが生成される（ステップＳ８０５）。なお、ここでは、ファイル名入力欄Ｇ１０１には「test」と入力されたものとする。
【００７５】
なお、図９に示すアプリ画面Ｇ１００では、新規作成するフォルダ「folder2」の直下に、電子ファイルの保存先となるフォルダ「folder1」を移動させる場合であるが、電子ファイルの保存先となるフォルダはユーザが選択できるようにしてもよい。すなわち、例えばデータＩ／Ｆ部１４０がデータ処理部１８０を介してストレージサービスＡのフォルダ一覧を取得し、取得されたフォルダ一覧からユーザが保存先フォルダを選択できるようにしてもよい。この場合、新規作成するフォルダ「folder2」の直下に、ユーザにより選択された保存先フォルダを移動させればよい。
【００７６】
続いて、画像形成装置２０は、生成された電子ファイルをストレージサービスＡに配信するための配信実行処理を行う（ステップＳ８０６）。この配信実行処理について、図１０を用いて詳細に説明する。ただし、図１０に示す配信実行処理では、ストレージサービスＡへの電子ファイルの配信（アップロード）が失敗する（エラーとなる）場合について説明する。
【００７７】
≪配信実行処理≫
図１０は、第１の実施形態に係る配信実行処理の一例のシーケンス図である。
【００７８】
まず、ブラウザ２１０は、スキャン配信サービスの処理の実行要求をフロー実行部１３１に送信する（ステップＳ１００１）。ここで、当該実行要求には、アプリＩＤ「app001」、実行される処理内容のフローＩＤ「flow1」、スキャンにより生成された電子ファイル等が含まれる。そして、フロー実行部１３１は、処理の実行要求を受け付けると、アプリ管理部１２０を介して、当該処理の実行要求に含まれるアプリＩＤ「app001」のアプリ情報１０００１からフローＩＤ「flow1」の処理内容を取得する（ステップＳ１００２）。すなわち、フロー実行部１３１は、図６に示す処理内容１１００を取得する。
【００７９】
フロー実行部１３１は、ステップＳ１００２で取得した処理内容１１００に基づき実行されるジョブを一意に識別するためのジョブＩＤを発行する（ステップＳ１００３）。ここでは、ジョブＩＤ「Job001」が発行されたものとする。
【００８０】
次に、フロー実行部１３１は、取得した処理内容に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ１００４）。より具体的には、フロー実行部１３１は、図６に示す処理内容１１００のオペレーション１１０１に基づき、フォルダ操作コンポーネント１３３２の取得をコンポーネント管理部１３２に要求する。
【００８１】
コンポーネント管理部１３２は、フォルダ操作コンポーネント１３３２の取得要求を受け付けると、フォルダ操作コンポーネント１３３２を生成する（ステップＳ１００５）。フォルダ操作コンポーネント１３３２の生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。そして、フォルダ操作コンポーネント１３３２が生成されると、コンポーネント管理部１３２は、フォルダ操作コンポーネント１３３２をフロー実行部１３１に返却する。これは、例えば、コンポーネント管理部１３２は、フォルダ操作コンポーネント１３３２が展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返却すればよい。
【００８２】
フロー実行部１３１は、生成されたフォルダ操作コンポーネント１３３２に対して、新規作成するフォルダのフォルダパス「/folder2」を指定して処理の実行を要求する（ステップＳ１００６）。
【００８３】
すると、フォルダ操作コンポーネント１３３２は、処理を実行する（ステップＳ１００７）。すなわち、フォルダ操作コンポーネント１３３２は、ストレージサービスＡにおいてフォルダパス「/folder2」のフォルダ「folder2」を新規作成する。そして、フォルダ操作コンポーネント１３３２は、処理結果をフロー実行部１３１に返信する。
【００８４】
より具体的には、フォルダ操作コンポーネント１３３２は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているフォルダ作成のＡＰＩを用いて、フォルダを新規作成する。すなわち、フォルダ操作コンポーネント１３３２は、図５（ａ）に示すＡＰＩとして「外部サービス名/process/create_folder」を用いて、例えば「service-a/process/create_folder?path= /folder2」と指定する。これにより、ストレージサービスＡにおいてフォルダパス「/folder2」のフォルダ「folder2」が新規作成される。
【００８５】
次に、フロー実行部１３１は、フロー経過情報の格納をフロー経過管理部１３４に要求する（ステップＳ１００８）。ここで、フロー経過情報には、ステップＳ１００３で発行されたジョブＩＤ「Job001」と、実行されたフォルダ操作コンポーネント１３３２に対応するオペレーション１１０１のオペレーション名「createFolder」とが含まれる。すると、フロー経過管理部１３４は、フロー経過情報に含まれるジョブＩＤと、オペレーション名とに基づき、フロー経過情報記憶部１３６のフロー経過情報テーブル１３６１を更新する。
【００８６】
より具体的には、フロー経過管理部１３４は、フロー経過情報に含まれるジョブＩＤ「Job001」と、オペレーション名「createFolder」とに基づき、図１１に示すようなフロー経過情報テーブル１３６１のジョブＩＤ「Job001」で特定されるレコードにおいて、オペレーション「createFolder」の実行区分を、実行済みであることを示す「済」に更新する。これにより、ステップＳ１００２で取得した処理内容１１００に定義されたオペレーションのうち、オペレーション１１０１が実行済み（すなわち、正常に処理された）ことが管理される。
【００８７】
なお、フロー経過情報テーブル１３６１の各ジョブＩＤで特定されるレコードは、例えば、ステップＳ１００３でジョブＩＤが発行された時点で、各オペレーションの実行区分を「未済」として作成すればよい。または、フロー経過管理部１３４が最初にフロー経過情報の格納要求を受け取った時点で、各オペレーションの実行区分を「未済」として作成すればよい。
【００８８】
次に、フロー実行部１３１は、図６に示す処理内容１１００のオペレーション１１０１の次に定義されたオペレーション１１０２に基づき、フォルダ操作コンポーネント１３３２に対して、フォルダ移動の処理の実行を要求する（ステップＳ１００９）。すなわち、フロー実行部１３１は、移動元を示すフォルダパス「/folder1」と、移動先を示すフォルダパス「/folder2/folder1」とを指定して、フォルダ操作コンポーネント１３３２に対して、処理の実行を要求する。
【００８９】
すると、フォルダ操作コンポーネント１３３２は、処理を実行する（ステップＳ１０１０）。すなわち、フォルダ操作コンポーネント１３３２は、ストレージサービスＡにおいてフォルダパス「/folder1」のフォルダを、フォルダパス「/folder2」のフォルダの直下に移動させる（つまり、フォルダパスを「/folder1」から「/folder1/folder2」に変更する。）。そして、フォルダ操作コンポーネント１３３２は、処理結果をフロー実行部１３１に返信する。
【００９０】
より具体的には、フォルダ操作コンポーネント１３３２は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているフォルダ作成のＡＰＩを用いて、フォルダを移動させる。すなわち、フォルダ操作コンポーネント１３３２は、図５（ａ）に示すＡＰＩとして「外部サービス名/process/move_folder」を用いて、例えば「service-a/process/move_folder?from= /folder1&to=/folder2/folder1」と指定する。これにより、ストレージサービスＡにおいてフォルダパス「/folder1」のフォルダが、フォルダパス「/folder2」のフォルダの直下に移動される。
【００９１】
次に、フロー実行部１３１は、フロー経過情報の格納をフロー経過管理部１３４に要求する（ステップＳ１０１１）。ここで、フロー経過情報には、ステップＳ１００３で発行されたジョブＩＤ「Job001」と、実行されたフォルダ操作コンポーネント１３３２に対応するオペレーション１１０２のオペレーション名「moveFolder」とが含まれる。すると、フロー経過管理部１３４は、フロー経過情報に含まれるジョブＩＤと、オペレーション名とに基づき、フロー経過情報記憶部１３６のフロー経過情報テーブル１３６１を更新する。
【００９２】
より具体的には、フロー経過管理部１３４は、フロー経過情報に含まれるジョブＩＤ「Job001」と、オペレーション名「moveFolder」とに基づき、図１１に示すようなフロー経過情報テーブル１３６１のジョブＩＤ「Job001」で特定されるレコードにおいて、オペレーション「moveFolder」の実行区分を、実行済みであることを示す「済」に更新する。これにより、ステップＳ１００２で取得した処理内容１１００に定義されたオペレーションのうち、オペレーション１１０２が実行済み（すなわち、正常に処理された）ことが管理される。
【００９３】
次に、フロー実行部１３１は、ステップＳ１００２で取得した処理内容１１００に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ１０１２）。より具体的には、フロー実行部１３１は、図６に示す処理内容１１００のオペレーション１１０２の次に定義されたオペレーション１１０３に基づき、配信コンポーネント１３３１の取得をコンポーネント管理部１３２に要求する。
【００９４】
コンポーネント管理部１３２は、配信コンポーネント１３３１の取得要求を受け付けると、配信コンポーネント１３３１を生成する（ステップＳ１０１３）。配信コンポーネント１３３１の生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。そして、配信コンポーネント１３３１が生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１をフロー実行部１３１に返却する。これは、例えば、コンポーネント管理部１３２は、配信コンポーネント１３３１が展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返却すればよい。
【００９５】
フロー実行部１３１は、生成された配信コンポーネント１３３１に対して、データを指定して処理の実行を要求する（ステップＳ１０１４）。なお、ここで指定されるデータは、具体的にはスキャンにより生成した電子ファイルである。すなわち、フロー実行部１３１は、ブラウザ２１０から渡される電子ファイルを、単に「データ」として（データ型を意識することなく）、配信コンポーネント１３３１に渡して処理の実行を要求する。
【００９６】
配信コンポーネント１３３１は、フロー実行部１３１からデータを受け取ると、処理を実行する（ステップＳ１０１５）。そして、配信コンポーネント１３３１は、処理結果をフロー実行部１３１に返信する。
【００９７】
より具体的には、配信コンポーネント１３３１は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているファイル保存のＡＰＩを用いて、データの配信実行を要求する。すなわち、配信コンポーネント１３３１は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、図５（ａ）に示すＡＰＩとして「外部サービス名/process/folder」を用いて、例えば「service-a/process/folder?path=/floder2/folder1&name=test」と指定する。これにより、ストレージサービスＡのフォルダパス「/folder2/folder1」のフォルダに、ファイル名「test」の電子ファイルが配信される。
【００９８】
ここで、上述したように、本実施形態ではステップＳ１０１５の処理においてエラー等が発生したものとする。すなわち、配信コンポーネント１３３１は、電子ファイルの配信（アップロード）に失敗したものとする。したがって、配信コンポーネント１３３１は、エラーが発生したことを示す情報（エラー情報）を処理結果としてフロー実行部１３１に返信する。
【００９９】
次に、フロー実行部１３１は、配信コンポーネント１３３１からエラー情報を受け取ると、ステップＳ１００３で発行されたジョブＩＤ「Job001」を指定して、復元処理内容の生成をサブフロー生成部１３５に要求する（ステップＳ１０１６）。
【０１００】
サブフロー生成部１３５は、フロー経過情報テーブル１３６１及び復元情報テーブル１３７１を参照して、復元処理内容を生成する（ステップＳ１０１７）。ここで、サブフロー生成部１３５は、次のようにして復元処理内容を生成する。
【０１０１】
すなわち、サブフロー生成部１３５は、フロー経過情報テーブル１３６１を参照して、指定されたジョブＩＤ「Job001」で特定されるレコードにおいて、実行区分が「済」のオペレーションを順に取得する。ここでは、オペレーション「createFolder」と、オペレーション「moveFolder」とがこの順に取得される。
【０１０２】
次に、サブフロー生成部１３５は、例えば図１２に示す復元情報テーブル１３７１を参照して、上記でオペレーションを取得した順とは逆の順に、対応する復元オペレーションを取得する。ここでは、オペレーション「moveFolder」に対応する復元オペレーション「moveFolder」と、オペレーション「createFolder」に対応する復元オペレーション「deleteFolder」とがこの順に取得される。
【０１０３】
そして、サブフロー生成部１３５は、取得した復元オペレーションに基づき、例えば図１３に示すような復元処理内容２０００を生成する。図１３に示す復元処理内容２０００の「isSubFlow」には、復元処理内容であることを示す「true」が定義されている。また、図１３示す復元処理内容２０００の「flowDetails」には、取得した「moveFolder」の処理内容が定義された復元オペレーション２１００と、取得した「deleteFolder」の処理内容が定義された復元オペレーション２２００が定義されている。
【０１０４】
ここで、復元オペレーション２１００及び２２００について、より具体的に説明する。復元オペレーション２１００は、ストレージサービスＡのフォルダパス「/folder2」の直下にあるフォルダ「folder1」をフォルダパス「/」の直下に移動させる処理が定義されている。これは、換言すれば、フォルダ「folder1」のフォルダパスを「/folder2/folder1」から「/folder1」に変更させる処理である。また、復元オペレーション２２００は、ストレージサービスＡのフォルダパス「/folder2」のフォルダ「folder2」を削除する処理が定義されている。このような、復元処理内容２０００により、処理内容１１００に定義されているオペレーション１１０１及び１１０２に従って実行された処理の結果を、実行前の状態に復元することができる。
【０１０５】
続いて、サブフロー生成部１３５は、生成した復元処理内容２０００の登録をアプリ管理部１２０に要求する（ステップＳ１０１８）。アプリ管理部１２０は、生成された復元処理内容２０００を、エラーが発生したジョブのアプリＩＤ「app001」と関連付けてアプリ情報記憶部１９０に記憶させる。また、このときアプリ管理部１２０は、復元処理内容を一意に識別するフローＩＤを発行する。そして、サブフロー生成部１３５は、生成した復元処理内容２０００をフロー実行部１３１に送信する。
【０１０６】
フロー実行部１３１は、サブフロー生成部１３５から復元処理内容２０００を取得すると、取得した復元処理内容２０００に従って復元処理を実行する（ステップＳ１０１９）。この復元処理については、後述する。
【０１０７】
そして、フロー実行部１３１は、エラー情報を示す処理結果を画像形成装置２０のブラウザ２１０に返信する。ここで、ブラウザ２１０は、フロー実行部１３１からエラー情報を受け取ると、受け取ったエラー情報に基づき、例えば図１４に示すようなエラー画面Ｇ２００を表示させる。図１４に示すエラー画面Ｇ２００は、配信実行処理においてエラーが発生したため、復元処理が実行されたことをユーザに通知する画面である。これにより、ユーザは、スキャン配信サービスを実現するための処理においてエラーが発生したこと及びエラー発生に伴う復元処理が実行されたことを知ることができる。
【０１０８】
≪復元処理≫
図１５は、第１の実施形態に係る復元処理の一例のシーケンス図である。
【０１０９】
まず、フロー実行部１３１は、サブフロー生成部１３５から取得した復元処理内容２０００に基づき実行されるジョブを一意に識別するためのジョブＩＤを発行する（ステップＳ１５０１）。
【０１１０】
次に、フロー実行部１３１は、図１３に示す復元処理内容２０００に定義された復元オペレーション２１００に基づき、フォルダ操作コンポーネント１３３２に対して、フォルダ移動の処理の実行を要求する（ステップＳ１５０２）。すなわち、フロー実行部１３１は、移動元を示すフォルダパス「/folder2/folder1」と、移動先を示すフォルダパス「/folder1」とを指定して、フォルダ操作コンポーネント１３３２に対して、処理の実行を要求する。
【０１１１】
すると、フォルダ操作コンポーネント１３３２は、処理を実行する（ステップＳ１５０３）。すなわち、フォルダ操作コンポーネント１３３２は、ストレージサービスＡにおいてフォルダパス「/folder2/folder1」のフォルダを、フォルダパス「/」のフォルダの直下に移動させる（つまり、フォルダパスを「/folder2/folder1」から「/folder1」に変更する。）。そして、フォルダ操作コンポーネント１３３２は、処理結果をフロー実行部１３１に返信する。
【０１１２】
より具体的には、フォルダ操作コンポーネント１３３２は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているフォルダ作成のＡＰＩを用いて、フォルダを移動させる。すなわち、フォルダ操作コンポーネント１３３２は、図５（ａ）に示すＡＰＩとして「外部サービス名/process/move_folder」を用いて、例えば「service-a/process/move_folder?from= /folder2/folder1&to=/folder1」と指定する。これにより、ストレージサービスＡにおいてフォルダパス「/folder2/folder1」のフォルダ「folder1」が、フォルダパス「/」のフォルダの直下に移動される。
【０１１３】
続いて、フロー実行部１３１は、図１３に示す復元処理内容２０００に定義された復元オペレーション２２００に基づき、フォルダ操作コンポーネント１３３２に対して、フォルダ削除の処理の実行を要求する（ステップＳ１５０４）。すなわち、フロー実行部１３１は、削除するフォルダのフォルダパス「/folder2」を指定して、フォルダ操作コンポーネント１３３２に対して、処理の実行を要求する。
【０１１４】
すると、フォルダ操作コンポーネント１３３２は、処理を実行する（ステップＳ１５０５）。すなわち、フォルダ操作コンポーネント１３３２は、ストレージサービスＡにおいてフォルダパス「/folder2」のフォルダ「folder2」を削除する。そして、フォルダ操作コンポーネント１３３２は、処理結果をフロー実行部１３１に返信する。
【０１１５】
より具体的には、フォルダ操作コンポーネント１３３２は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、共通Ｉ／Ｆ１７１１として定義されているフォルダ作成のＡＰＩを用いて、フォルダを削除する。すなわち、フォルダ操作コンポーネント１３３２は、図５（ａ）に示すＡＰＩとして「外部サービス名/process/delete_folder」を用いて、例えば「service-a/process/delete_folder?path= /folder2」と指定する。これにより、ストレージサービスＡにおいてフォルダパス「/folder2」のフォルダ「folder2」が削除される。
【０１１６】
以上により、本実施形態に係る復元処理が完了する。これにより、処理内容に定義されたオペレーションに従って実行されるコンポーネントの処理にエラー等が発生して、異常に終了した場合でも、外部ストレージシステム３０に対する変更（例えば、フォルダ操作等によりなされた変更）を元に戻すことができる。
【０１１７】
［第２の実施形態］
次に、第２の実施形態について説明する。第２の実施形態に係るサービス提供システム１０は、復元処理内容に基づき実行されたジョブにおいて、例えば外部サービスが一時的に利用することができない等のエラーが発生した場合、所定の時間経過後に復元処理内容に基づくジョブを実行する。
【０１１８】
また、第２の実施形態に係るサービス提供システム１０は、復元処理内容に基づき実行されたジョブにおいてエラーが発生した場合、発生したエラーがスキップ可能か否か（すなわち、無視してもよいエラーか否か）を判定する。なお、以降では、第１の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第１の実施形態と同一の符号を用いて、その説明を省略する。
【０１１９】
＜ソフトウェア構成＞
第２の実施形態に係るサービス提供システム１０のロジック処理部１３０の処理ブロックについて、図１６を用いて説明する。図１６は、第２の実施形態に係るロジック処理部の一例の処理ブロック図である。第２の実施形態に係るサービス提供システム１０のロジック処理部１３０は、フロー実行部１３１Ａと、スキップ可能エラー情報記憶部１３８とを有する。
【０１２０】
フロー実行部１３１Ａは、復元処理内容に定義された復元オペレーションに従って実行された処理において、ストレージサービスが一時的に利用できないことを示すエラーが発生した場合、所定の時間経過後に、復元処理内容に基づくジョブを再実行させる。
【０１２１】
また、フロー実行部１３１Ａは、復元処理内容に定義された復元オペレーションに従って実行された処理において、エラーが発生した場合、スキップ可能エラー情報テーブル１３８１を参照して、発生したエラーがスキップ可能であるか否かを判定する。ここで、スキップ可能とは、発生したエラーに対して対処しなくてもよいことを意味する。
【０１２２】
スキップ可能エラー情報記憶部１３８は、スキップ可能エラー情報テーブル１３８１を記憶する。スキップ可能エラー情報テーブル１３８１は、復元処理内容に定義されたオペレーション毎に、このオペレーションに従って実行されるコンポーネントにおいて対処しなくてもよいエラー情報（スキップ可能エラー情報）が管理されている。なお、スキップ可能エラー情報テーブル１３８１の詳細については後述する。
【０１２３】
＜処理の詳細＞
≪配信実行処理≫
まず、第２の実施形態に係る配信実行処理について、図１７を用いて説明する。図１７は、第２の実施形態に係る配信実行処理の一例のシーケンス図である。図１７では、ステップＳ１０１９の復元処理において、ストレージサービスＡを一時的に利用できないことを示すエラーが発生し、フロー実行部１３１Ａは、発生したエラーのエラー情報を受信したものとする。なお、ストレージサービスＡを一時的に利用できないことを示すエラーとは、例えば、ストレージサービスＡを提供する外部ストレージシステム３０１に対してアクセスが一時的に集中し、ストレージサービスＡを利用できない場合等に発生するエラー等である。
【０１２４】
このとき、フロー実行部１３１Ａは、所定の時間経過後に復元処理を再実行することを画像形成装置２０のブラウザ２１０に通知する（ステップＳ１７０１）。そして、フロー実行部１３１Ａは、所定の時間経過後に、復元処理を再実行する（ステップＳ１７０２）。これにより、本実施形態に係るサービス提供システム１０は、復元処理において、ストレージサービスが一時的に利用できないことを示すエラーが発生した場合でも、所定の時間が経過した後に復元処理を再実行することができる。
【０１２５】
≪復元処理≫
次に、第２の実施形態に係る復元処理について、図１８を用いて説明する。図１８は、第２の実施形態に係る復元処理の一例のシーケンス図である。
【０１２６】
フロー実行部１３１Ａは、フォルダ操作コンポーネント１３３２からエラー情報を示す処理結果を受信した場合、スキップ可能エラー情報テーブル１３８１を参照して、発生したエラーがスキップ可能であるか否かを判定する（ステップＳ１８０１）。そして、フロー実行部１３１Ａは、スキップ可能なエラーであると判定した場合、後続の処理を実行する。一方で、フロー実行部１３１Ａは、スキップ可能なエラーでないと判定した場合、復元処理を終了（異常終了）させる。
【０１２７】
ここで、スキップ可能エラー情報テーブル１３８１について、図１９を用いて説明する。図１９は、スキップ可能エラー情報テーブルの一例を示す図である。図１９に示すスキップ可能エラー情報テーブル１３８１は、復元オペレーション毎に、スキップ可能なエラー情報が定義されている。例えば、図１９の１レコード目は、復元オペレーション「deleteFolder」を指定したフォルダ操作コンポーネント１３３２の処理において、エラー情報「folder_not_exist」のエラーが発生した場合、当該エラーはスキップ可能であることが定義されている。これは、復元オペレーション「deleteFolder」において、削除対象のフォルダが存在しないことを示すエラーは対処不要（すなわち、復元不要）だからである。これにより、本実施形態に係るサービス提供システム１０は、復元処理においてスキップ可能なエラー（対処不要なエラー）が発生した場合には、発生したエラーを無視して後続の処理を実行させることができる。
【０１２８】
［第３の実施形態］
次に、第３の実施形態について説明する。第３の実施形態に係るサービス提供システム１０は、復元処理内容に定義された復元オペレーションのうち、画像形成装置２０のユーザにより選択された復元オペレーションに基づくジョブを実行する。なお、以降では、第１の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第１の実施形態と同一の符号を用いて、その説明を省略する。
【０１２９】
＜処理の詳細＞
≪配信実行処理≫
図２０は、第３の実施形態に係る配信実行処理の一例のシーケンス図である。
【０１３０】
フロー実行部１３１は、サブフロー生成部１３５により生成された復元処理内容２０００を受信すると、この復元処理内容２０００を画像形成装置２０のブラウザ２１０に送信する（ステップＳ２００１）。
【０１３１】
次に、ブラウザ２１０は、受信した復元処理内容２０００に含まれる復元オペレーションのうち、実行する復元オペレーションをユーザに選択させるための、例えば図２１に示すエラー画面Ｇ３００を表示する。そして、ユーザは、図２１に示すエラー画面Ｇ３００において、復元させるオペレーションを選択する（ステップＳ２００２）。すなわち、ユーザが選択欄Ｇ３０１において「復元する」を選択した場合、復元オペレーション２２００が実行される一方、「復元しない」を選択した場合、復元オペレーション２２００は実行されない。同様に、ユーザが選択欄Ｇ３０２において「復元する」を選択した場合、復元オペレーション２１００が実行される一方、「復元しない」を選択した場合、復元オペレーション２１００は実行されない。
【０１３２】
ここで、ユーザは、選択欄Ｇ３０１では「復元しない」を、選択欄Ｇ３０２では「復元する」を選択したものとする。この場合、画像形成装置２０は、受信した復元処理内容２０００から、例えば図２２に示す復元処理内容３０００を作成する。すなわち、画像形成装置２０は、復元オペレーション２１００を実行するか否か示す実行要否区分３１００と、復元オペレーション２２００を実行するか否か示す実行要否区分３２００とを復元処理内容２０００に付加した復元処理内容３０００を作成する。ここでは、実行要否区分３１００には復元オペレーション２１００を実行すること示す「"doRollback:true"」が、実行要否区分３２００には復元オペレーション２２００を実行しないことを示す「"doRollback:false"」が定義されている。
【０１３３】
続いて、画像形成装置２０のブラウザ２１０は、復元処理内容３０００をフロー実行部１３１に送信する（ステップＳ２００３）。そして、フロー実行部１３１は、復元処理内容３０００に定義された復元オペレーション及び実行要否区分に従って復元処理を実行する（ステップＳ２００４）。すなわち、フロー実行部１３１は、復元処理内容３０００に定義された復元オペレーション２１００に従った処理を実行させる一方で、復元オペレーション２２００に従った処理は実行させない。このように、本実施形態では、復元処理内容に定義される復元オペレーションのうち、ユーザにより選択された復元オペレーションに従った処理が実行される。
【０１３４】
［第４の実施形態］
次に、第４の実施形態について説明する。従来技術においては、一連の処理の途中でエラー等が発生した場合、再度、一連の処理を最初から実行する必要があった。換言すれば、一連の処理の途中でエラー等が発生した場合、エラー等が発生した処理から実行を再開することができなかった。そこで、第４の実施形態に係るサービス提供システム１０では、一連の処理の実行再開を可能にするものである。なお、以降では、第１の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第１の実施形態と同一の符号を用いて、その説明を省略する。
【０１３５】
以降、本実施形態に係るサービス提供システム１０は、ユーザ環境Ｅ２の画像形成装置２０において原稿をスキャンして生成された電子ファイルをＯＣＲ処理して、外部ストレージシステム３０に保存するスキャン配信サービスを提供するものとして説明する。
【０１３６】
＜ソフトウェア構成＞
まず、本実施形態に係るロジック処理部１３０の詳細な処理ブロックについて、図２３を用いて説明する。図２３は、第４の実施形態に係るロジック処理部の一例の処理ブロック図である。なお、本実施形態に係る情報処理システム１の処理ブロックは、第１の実施形態と同様であるため、その説明を省略する。
【０１３７】
本実施形態に係るロジック処理部１３０は、フロー経過管理部１３４Ａと、サブフロー生成部１３５Ａと、フロー経過情報記憶部１３６Ａと、型変換管理部１４１と、型変換群１４２とを有する。
【０１３８】
また、本実施形態に係るコンポーネント群１３３には、さらに、電子ファイルにＯＣＲ処理を行うためのＯＣＲコンポーネント１３３３が含まれる。また、本実施形態に係るコンポーネント群１３３には、フロー経過情報記憶部１３６Ａからエラー等となった処理の実行を再開するための情報を取得するフロー経過情報取得コンポーネント１３３４が含まれる。なお、本実施形態に係るコンポーネント群１３３には、これら以外にも、例えば、外部ストレージシステム３０を利用するための認証情報を取得するための認証コンポーネント等が含まれてもよい。
【０１３９】
型変換管理部１４１は、データ型の型変換を管理する。ここで、コンポーネント群１３３に含まれる各コンポーネントは、自身が扱えるデータ型が予め定まっている。したがって、型変換管理部１４１は、コンポーネントからの要求に応じて、型変換群１４２に定義されている型変換を生成し、生成された型変換に対して型変換処理の実行を要求する。ここで、型変換とは、データ型の型変換処理を実行するためのモジュール等であり、例えばクラスや関数等で定義される。
【０１４０】
なお、型変換の生成とは、例えばクラスで定義された型変換を、メモリ（例えばＲＡＭ１４）上に展開することを意味する。また、データ型には、例えば、ストリームデータを示すデータ型「InputStream」、記憶装置等に格納されている電子ファイルのパス（アドレス）を示す「LocalFilePath」、電子ファイルの実体を示す「File」等が挙げられる。
【０１４１】
型変換群１４２は、型変換の集合である。型変換群１４２には、データ型「InputStream」をデータ型「LocalFilePath」に変換する型変換１４２１が含まれる。なお、型変換群１４２には、これに限られず、例えば、データ型「LocalFilePath」をデータ型「File」に変換する型変換等が含まれる。
【０１４２】
さらに、各型変換は、型変換共通Ｉ／Ｆ１４２０を有する。型変換共通Ｉ／Ｆ１４２０は、各型変換に対して共通に定義されたＡＰＩであり、型変換を生成するためのＡＰＩと、型変換に対して処理の実行を要求するためのＡＰＩとが含まれる。このように、各型変換が型変換共通Ｉ／Ｆ１４２０を有することで、型変換の追加等に伴う影響を局所化することができる。これにより、型変換の追加等の開発に要する工数を削減することができる。
【０１４３】
なお、上述した第１の実施形態〜第３の実施形態に係るロジック処理部１３０は、型変換管理部１４１及び型変換群１４２を有していてもよい。
【０１４４】
フロー経過管理部１３４Ａは、フロー実行部１３１からフロー経過情報を受け取った場合に、受け取ったフロー経過情報に含まれる情報をフロー経過情報記憶部１３６Ａに記憶させる。なお、本実施形態に係るフロー経過情報には、ジョブＩＤ及びオペレーション名に加えて、正常に終了したコンポーネントの処理結果として出力されるデータが含まれる。
【０１４５】
サブフロー生成部１３５Ａは、処理内容に定義されたオペレーションに従って実行されたコンポーネントの処理にエラー等が発生した場合（すなわち、異常に終了した場合）、当該エラー等が発生したコンポーネントの処理実行を再開するための処理内容を生成する。そして、サブフロー生成部１３５Ａは、アプリ管理部１２０を介して、生成した処理内容をアプリ情報記憶部１９０に記憶させる。
【０１４６】
フロー経過情報記憶部１３６Ａは、さらに、再開用データ１３６２を記憶する。再開用データ１３６２は、正常に終了したコンポーネントの処理結果として出力されるデータである。これにより、サブフロー生成部１３５Ａにより生成された処理内容を再開用データ１３６２に対して実行することにより、処理の実行を再開させることができる。
【０１４７】
以上のように、本実施形態に係るサービス提供システム１０は、処理内容に定義されたオペレーションの実行状況を管理するとともに、正常に実行されたオペレーションの処理結果を再開用データ１３６２として記憶する。これにより、サービス提供システム１０は、処理内容に定義されたオペレーションに従って実行されたコンポーネントの処理にエラー等が発生した場合、当該エラー等が発生したコンポーネントに対応するオペレーションの処理の実行を再開することができる。
【０１４８】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０１４９】
≪スキャン配信サービスの全体処理≫
まず、画像形成装置２０のユーザが本実施形態に係るスキャン配信サービスを利用する場合の全体的な処理について説明する。図２４は、第４の実施形態に係るスキャン配信サービスの全体処理の一例のシーケンス図である。
【０１５０】
ブラウザ２１０は、アプリ管理部１２０から受け取ったアプリ画面を受信すると、例えば図２５に示すようなアプリ画面Ｇ４００を、操作パネル２２に表示させる（ステップＳ２４０１）。図２５は、本実施形態に係るスキャン配信するスキャン配信サービスを利用するためのアプリ画面Ｇ４００である。
【０１５１】
次に、ユーザは、図２５に示すアプリ画面Ｇ４００において、ファイル名入力欄Ｇ４０２に、スキャンにより生成される電子ファイルに付与する所望のファイル名を入力する。また、ユーザは、保存先フォルダＩＤ入力欄Ｇ４０３に、スキャンにより生成される電子ファイルを保存するストレージサービスＡのフォルダのフォルダＩＤを入力する。なお、図２５に示すアプリ画面Ｇ４００では、ＯＣＲ言語選択欄Ｇ４０１には英語でＯＣＲ処理を行うことを示す「English」が選択されているが、ユーザが所望の言語をしてもよい。
【０１５２】
また、図２５に示すアプリ画面Ｇ４００では、ストレージサービスＡにおける保存先フォルダのフォルダＩＤをユーザが直接入力するものとしたが、保存先フォルダをフォルダ一覧からユーザが選択できるようにしてもよい。すなわち、例えばデータＩ／Ｆ部１４０がデータ処理部１８０を介してストレージサービスＡのフォルダ一覧を取得し、取得されたフォルダ一覧からユーザが保存先フォルダを選択できるようにしてもよい。
【０１５３】
そして、ユーザは、画像形成装置２０のスキャナ２５に原稿をセットした上で、スキャン実行ボタンＧ４０４を押下する。すると、ブラウザ２１０は、スキャン実行ボタンＧ４０４の押下を受け付ける（ステップＳ２４０２）。これにより、画像形成装置２０のスキャナ２５により原稿が読み取られ、ファイル名入力欄Ｇ４０２に入力されたファイル名の電子ファイルが生成される（ステップＳ２４０３）。
【０１５４】
続いて、画像形成装置２０は、生成された電子ファイルをストレージサービスＡに配信するための配信実行処理を行う（ステップＳ２４０４）。この配信実行処理について、図２６を用いて詳細に説明する。ただし、図２６に示す配信実行処理では、ストレージサービスＡへの電子ファイルの配信（アップロード）が失敗する（エラーとなる）場合について説明する。
【０１５５】
≪配信実行処理≫
図２６は、第４の実施形態に係る配信実行処理の一例のシーケンス図である。
【０１５６】
まず、ブラウザ２１０は、スキャン配信サービスの処理の実行要求をフロー実行部１３１に送信する（ステップＳ２６０１）。ここで、当該実行要求には、アプリＩＤ「app001」、本実施形態に係るスキャン配信サービスを実現するための一連の処理に関する情報を示す処理内容のフローＩＤ「flow2」が含まれる。また、当該実行要求には、スキャンにより生成された電子ファイル、保存先フォルダのフォルダＩＤ等が含まれる。
【０１５７】
そして、フロー実行部１３１は、処理の実行要求を受け付けると、アプリ管理部１２０を介して、当該処理の実行要求に含まれるアプリＩＤ「app001」のアプリ情報１０００１からフローＩＤ「flow2」の処理内容を取得する（ステップＳ２６０２）。
【０１５８】
ここで、アプリ情報１０００１から取得された処理内容１２００（フローＩＤ「flow2」）を図２７に示す。図２７は、処理内容の他の例を示す図である。
【０１５９】
図２７に示す処理内容１２００は、スキャンして生成された電子ファイルをＯＣＲ処理した後、ストレージサービスＡの指定されたフォルダに配信する一連の処理に関する情報である。図２７に示す処理内容１２００の「flowId」にはアプリ情報１０００１において処理内容を一意に識別するためのフローＩＤ「flow2」が定義されている。また、図２７に示す処理内容１２００の「flowDetails」には、オペレーション１２０１及び１２０２が定義されている。
【０１６０】
図２７に示す処理内容１２００は、ＯＣＲ処理を実行するオペレーション１２０１及びストレージサービスＡへの配信（アップロード）処理を実行するオペレーション１２０２で構成されている。より具体的には、オペレーション１２０１には、英語でＯＣＲ処理を実行してＰＤＦ形式で処理結果を出力する処理が定義されている。また、オペレーション１２０２には、ストレージサービスＡの指定されたフォルダＩＤのフォルダに電子ファイルを配信（アップロード）する処理が定義されている。
【０１６１】
なお、図２７に示す処理内容１２００は、本実施形態に係るスキャン配信サービスを実現するための一例である。本実施形態に係るスキャン配信サービスは、例えば、ドキュメントサービス部１５０に含まれるプログラムにより実現される各種処理を、さらに組み合わせた一連の処理により実現されてもよい。例えば、本実施形態に係るスキャン配信サービスは、「スキャンされた電子ファイルについて、ＯＣＲ処理を行った後、日本語に翻訳して、ストレージサービスＡの指定されたフォルダに配信する」等であってもよい。
【０１６２】
図２６の説明に戻る。フロー実行部１３１は、ステップＳ２６０２で取得した処理内容１２００に基づき実行されるジョブを一意に識別するためのジョブＩＤを発行する（ステップＳ２６０３）。ここでは、ジョブＩＤ「Job101」が発行されたものとする。
【０１６３】
次に、フロー実行部１３１は、取得した処理内容１２００に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ２６０４）。より具体的には、フロー実行部１３１は、図２７に示す処理内容１２００のオペレーション１２０１に基づき、ＯＣＲコンポーネント１３３３の取得をコンポーネント管理部１３２に要求する。
【０１６４】
コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３３の取得要求を受け付けると、ＯＣＲコンポーネント１３３３を生成する（ステップＳ２６０５）。ＯＣＲコンポーネント１３３３の生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。そして、ＯＣＲコンポーネント１３３３が生成されると、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３３をフロー実行部１３１に返却する。これは、例えば、コンポーネント管理部１３２は、ＯＣＲコンポーネント１３３３が展開されたメモリ（例えばＲＡＭ１４）上のアドレスを、フロー実行部１３１に返却すればよい。
【０１６５】
フロー実行部１３１は、生成されたＯＣＲコンポーネント１３３３に対して、データを指定して処理の実行を要求する（ステップＳ２６０６）。なお、ここで指定されるデータは、データ型が「InputStream」としてブラウザ２１０から渡される電子ファイルである。すなわち、フロー実行部１３１は、ブラウザ２１０からデータ型「InputStream」として渡される電子ファイルを、「データ」として、ＯＣＲコンポーネント１３３３に渡して処理の実行を要求する。
【０１６６】
ＯＣＲコンポーネント１３３３は、型変換管理部１４１に対して、型変換を要求する（ステップＳ２６０７）。ここで、当該型変換要求には、データと、ＯＣＲコンポーネント１３３３が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
【０１６７】
型変換管理部１４１は、受け取った型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする（ステップＳ２６０８）。ここでは、受け取った型変換要求に含まれるデータのデータ型は「InputStream」である一方、指定されたデータ型は「LocalFilePath」であるから、一致しないものと判断される。
【０１６８】
すると、型変換管理部１４１は、データ型を「InputStream」から「LocalFilePath」に変換するための型変換１４２１を生成する（ステップＳ２６０９）。
【０１６９】
そして、型変換管理部１４１は、生成された型変換１４２１に対して、データを指定して型変換処理の実行を要求する（ステップＳ２６１０）。型変換１４２１は、指定されたデータのデータ型を「InputStream」から「LocalFilePath」に変換して（ステップＳ２６１１）、当該変換後のデータを型変換管理部１４１に返信する。その後、型変換管理部１４１は、型変換後のデータをＯＣＲコンポーネント１３３３に送信する（ステップＳ２６１２）。
【０１７０】
ＯＣＲコンポーネント１３３３は、型変換後のデータを受け取ると、処理を実行する（ステップＳ２６１３）。すなわち、ＯＣＲコンポーネント１３３３は、データ型「LocalFilePath」のデータ（すなわち、パス又はアドレス）により示される電子ファイルに対して、ＯＣＲ処理を実行する。
【０１７１】
ここで、より具体的には、ＯＣＲコンポーネント１３３３は、ドキュメントサービス部１５０のＯＣＲ処理１５１に処理を要求し、ＯＣＲ処理１５１が当該電子ファイルに対して処理を実行する。そして、ＯＣＲコンポーネント１３３３は、処理結果をフロー実行部１３１に返信する。なお、ここで返信される処理結果は、ＯＣＲ処理後のデータである。ここで、ＯＣＲ処理後のデータは、電子ファイルを示すパス又はアドレスである（すなわち、ＯＣＲ処理後のデータのデータ型は「LocalFilePath」である。）。
【０１７２】
次に、フロー実行部１３１は、フロー経過情報の格納をフロー経過管理部１３４Ａに要求する（ステップＳ２６１４）。ここで、フロー経過情報には、ステップＳ２６０３で発行されたジョブＩＤ「Job101」と、実行されたＯＣＲコンポーネント１３３３に対応するオペレーション１２０１のオペレーション名「ocr」と、ＯＣＲ処理後のデータとが含まれる。
【０１７３】
そして、フロー経過管理部１３４Ａは、フロー経過情報に含まれるジョブＩＤと、オペレーション名とに基づき、フロー経過情報記憶部１３６Ａのフロー経過情報テーブル１３６１を更新する。また、フロー経過管理部１３４Ａは、コンポーネントにより処理された後のデータを、再開用データ１３６２としてフロー経過情報記憶部１３６Ａに格納する（ステップＳ２６１５）。
【０１７４】
より具体的には、フロー経過管理部１３４Ａは、フロー経過情報に含まれるジョブＩＤ「Job101」と、オペレーション名「ocr」とに基づき、図２８に示すように、フロー経過情報テーブル１３６１を更新する。すなわち、フロー経過管理部１３４Ａは、ジョブＩＤ「Job101」で特定されるレコードにおいて、オペレーション「ocr」の実行区分を、実行済みであることを示す「済」に更新する。これにより、ステップＳ２６０２で取得した処理内容１２００に定義されたオペレーションのうち、オペレーション１２０１が実行済み（すなわち、正常に処理された）ことが管理される。
【０１７５】
また、フロー経過管理部１３４Ａは、フロー経過情報に含まれるＯＣＲ処理後のデータを、再開用データ１３６２として、ジョブＩＤと関連付けてフロー経過情報記憶部１３６Ａに格納する。
【０１７６】
次に、フロー実行部１３１は、ステップＳ２６０２で取得した処理内容１２００に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ２６１６）。より具体的には、フロー実行部１３１は、図２７に示す処理内容１２００のオペレーション１２０１の次に定義されたオペレーション１２０２に基づき、配信コンポーネント１３３１の取得をコンポーネント管理部１３２に要求する。
【０１７７】
コンポーネント管理部１３２は、配信コンポーネント１３３１の取得要求を受け付けると、配信コンポーネント１３３１を生成する（ステップＳ２６１７）。そして、配信コンポーネント１３３１が生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１をフロー実行部１３１に返却する。
【０１７８】
フロー実行部１３１は、生成された配信コンポーネント１３３１に対して、データを指定して処理の実行を要求する（ステップＳ２６１８）。なお、ここで指定されたデータのデータ型は「LocalFilePath」である。
【０１７９】
配信コンポーネント１３３１は、型変換管理部１４１に対して、型変換を要求する（ステップＳ２６１９）。ここで、当該型変換要求には、データと、配信コンポーネント１３３１が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
【０１８０】
型変換管理部１４１は、受け取った型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする（ステップＳ２６２０）。ここでは、受け取った型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」であるから、一致するものと判断される。
【０１８１】
すると、型変換管理部１４１は、型変換要求に含まれていたデータを、そのまま配信コンポーネント１３３１に送信する（ステップＳ２６２１）。このように、データ型チェック（ステップＳ２６２０の処理）で両者のデータ型が一致する場合には、型変換管理部１４１は型変換の生成を行わない。
【０１８２】
配信コンポーネント１３３１は、型変換管理部１４１からデータを受け取ると、処理を実行する（ステップＳ２６２２）。そして、配信コンポーネント１３３１は、データの配信処理の結果をフロー実行部１３１に送信する。
【０１８３】
より具体的には、配信コンポーネント１３３１は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、図５（ａ）に示すＡＰＩとして「service-a/process/folder」を用いて、図２５に示すアプリ画面Ｇ４００の保存先フォルダＩＤ入力欄Ｇ４０３で入力されたフォルダＩＤにデータの配信処理の実行を要求する。
【０１８４】
ここで、上述したように、本実施形態では、ステップＳ２６２２の処理においてエラー等が発生したものとする。すなわち、配信コンポーネント１３３１は、ストレージサービスＡへの電子ファイルの配信が失敗したものとする。このような場合、フロー実行部１３１は、配信コンポーネント１３３１で発生したエラーのエラーコード等を示す情報（エラー情報）を処理結果として受信する。
【０１８５】
なお、以降では、フロー実行部１３１が受信したエラー情報は、図２５に示すアプリ画面Ｇ４００の保存先フォルダＩＤ入力欄Ｇ４０３で入力されたフォルダＩＤがストレージサービスＡに存在しない場合のエラー情報（例えば、「invalid_folder_id」）であるとする。
【０１８６】
すると、フロー実行部１３１は、ステップＳ２６０３で発行したジョブＩＤを指定して、エラー等が発生したコンポーネントの処理を再開するための処理内容（これを「再開処理内容」と表す）の生成をサブフロー生成部１３５Ａに要求する（ステップＳ２６２３）。そして、サブフロー生成部１３５Ａは、フロー経過情報テーブル１３６１を参照し、例えば図２９に示すような再開処理内容４０００を生成する（ステップＳ２６２４）。ただし、フロー実行部１３１は、ステップＳ２６０２で取得した処理内容１２００において再開処理内容の生成を行わないことを示す情報（例えば、「createsubFlow=false」）が定義されている場合、ステップＳ２６２３の処理を行わないようにしてもよい。
【０１８７】
図２９に示す再開処理内容４０００の「isSubFlow」には、再開処理内容であることを示す「true」が定義されている。また、図２９に示す再開処理内容４０００の「flowDetails」には、再開処理内容４０００のオペレーション４１００及び４２００が定義されている。
【０１８８】
ここで、オペレーション４１００は、エラーが発生したジョブＩＤ「Job101」のジョブの再開用データ１３６２を取得するための処理が定義されている。また、オペレーション４２００は、エラーが発生した配信コンポーネント１３３１を実行するための処理が定義されている。このように、再開処理内容４０００は、エラー等が発生したジョブの再開用データ１３６２を取得するための処理と、当該ジョブの処理内容のうちエラー等が発生した処理以降の一連の処理とが定義されたものである。換言すれば、再開処理内容４０００は、エラーが発生するまでに正常に処理された再開用データ１３６２を取得する処理と、エラー等が発生したジョブにおいてオペレーションの実行区分が「未済」の処理とが定義されたものである。
【０１８９】
ここで、より一般的には、図３０（ａ）に示すように、例えば、オペレーションＡ〜Ｄの順に定義されている処理内容のジョブにおいて、オペレーションＣでエラーが発生した場合、次のような再開処理内容が生成される。すなわち、再開処理内容は、再開用データ１３６２を取得するための処理（ｇｅｔＤａｔａ）に続いて、オペレーションＣ〜Ｄが定義される。これにより、エラーが発生したジョブにおいて既に実行されたオペレーションＡ〜Ｂを再度実行させることなく、オペレーションＣ〜Ｄの処理を実行させることができる。
【０１９０】
なお、複数のオペレーション間に特定の関係がある場合に、サブフロー生成部１３５Ａは、このような特定の関係を考慮して再開処理内容を生成してもよい。例えば、オペレーションＤの前にオペレーションＸが定義されている必要があるという関係がある場合、次のような再開処理内容が生成される。すなわち、図１３（ｂ）に示すように、オペレーションＣでエラーが発生した場合、再開処理内容には、オペレーションＣの前にオペレーションＸが定義される。これは、例えば、オペレーションＤが予め認証処理が必要なストレージサービスへの配信処理の実行であり、オペレーションＸがストレージサービスへの認証処理であるような場合が挙げられる。
【０１９１】
続いて、サブフロー生成部１３５Ａは、生成した再開処理内容４０００の登録をアプリ管理部１２０に要求する（ステップＳ２６２５）。アプリ管理部１２０は、生成された再開処理内容４０００を、エラー等が発生したジョブのアプリＩＤ「app001」と関連付けてアプリ情報記憶部１９０に記憶させる。また、このときアプリ管理部１２０は、再開処理内容４０００を一意に識別するフローＩＤを発行する。
【０１９２】
そして、アプリ管理部１２０は、発行したフローＩＤをフロー実行部１３１に送信する。なお、ここで発行された再開処理内容４０００のフローＩＤを「subflow1」とする。
【０１９３】
フロー実行部１３１は、再開処理内容４０００のフローＩＤ「subflow1」を受信すると、当該フローＩＤ「subflow1」とエラー情報とを画像形成装置２０のブラウザ２１０に送信する（ステップＳ２６２６）。このとき、フロー実行部１３１は、例えば図３１に示すエラー画面Ｇ５００を表示させるための画面情報を、アプリ管理部１２０を介してアプリ情報記憶部１９０から取得し、取得した画面情報に基づくエラー画面Ｇ５００をブラウザ２１０に送信する。以降では、図３１に示すエラー画面Ｇ５００におけるユーザの指示により、配信実行処理の再開処理を行う場合について、図３２を用いて説明する。
【０１９４】
≪配信実行処理の再開処理≫
図３２は、第４の実施形態に係る配信実行処理の再開処理の一例のシーケンス図である。
【０１９５】
ユーザは、図３１に示すエラー画面Ｇ５００において、保存先フォルダＩＤ入力欄Ｇ５０１に、ストレージサービスＡの保存先フォルダのフォルダＩＤを入力し、実行ボタンＧ５０２を押下する。すると、画像形成装置２０のブラウザ２１０は、保存先フォルダＩＤ入力欄Ｇ５０１に入力されたフォルダＩＤに電子ファイルを配信するための実行要求をフロー実行部１３１に送信する（ステップＳ３２０１）。
【０１９６】
ここで、当該実行要求には、アプリＩＤ「app001」、再開処理内容４０００のフローＩＤ「subflow1」、図３１に示すエラー画面Ｇ５００で入力された保存先フォルダのフォルダＩＤ等が含まれる。
【０１９７】
そして、フロー実行部１３１は、処理の実行要求を受け付けると、アプリ管理部１２０を介して、当該処理の実行要求に含まれるアプリＩＤ「app001」のアプリ情報１０００１からフローＩＤ「subflow1」の再開処理内容４０００を取得する（ステップＳ３２０２）。すなわち、フロー実行部１３１は、図２９に示す再開処理内容４０００を取得する。
【０１９８】
フロー実行部１３１は、ステップＳ３２０２で取得した再開処理内容４０００に基づき実行されるジョブを一意に識別するためのジョブＩＤを発行する（ステップＳ３２０３）。ここでは、ジョブＩＤ「Job103」が発行されたものとする。
【０１９９】
次に、フロー実行部１３１は、取得した再開処理内容４０００に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ３２０４）。より具体的には、フロー実行部１３１は、図２９に示す再開処理内容４０００のオペレーション４１００に基づき、フロー経過情報取得コンポーネント１３３４の取得をコンポーネント管理部１３２に要求する。
【０２００】
コンポーネント管理部１３２は、フロー経過情報取得コンポーネント１３３４の取得要求を受け付けると、フロー経過情報取得コンポーネント１３３４を生成する（ステップＳ３２０５）。フロー経過情報取得コンポーネント１３３４の生成は、コンポーネント共通Ｉ／Ｆ１３３０に定義されたコンポーネントを生成するためのＡＰＩを用いて行うことができる。そして、フロー経過情報取得コンポーネント１３３４が生成されると、コンポーネント管理部１３２は、フロー経過情報取得コンポーネント１３３４をフロー実行部１３１に返却する。
【０２０１】
フロー実行部１３１は、生成されたフロー経過情報取得コンポーネント１３３４に対して、エラーが発生したジョブのジョブＩＤ「Job101」を指定して処理の実行を要求する（ステップＳ３２０６）。
【０２０２】
すると、フロー経過情報取得コンポーネント１３３４は、フロー経過管理部１３４Ａを介して、指定されたジョブＩＤ「Job101」に関連付けてフロー経過情報記憶部１３６Ａに記憶されている再開用データ１３６２を取得する（ステップＳ３２０７）。そして、フロー経過情報取得コンポーネント１３３４は、取得した再開用データ１３６２をフロー実行部１３１に送信する。ここで取得された再開用データ１３６２は、具体的には、図２６のステップＳ２６１３でＯＣＲ処理された後のデータである。以降の図３２の説明において、ここで取得された再開用データ１３６２を、単に「データ」と表す。
【０２０３】
次に、フロー実行部１３１は、ステップＳ３２０２で取得した再開処理内容４０００に定義されたオペレーションに従って、コンポーネントの取得をコンポーネント管理部１３２に要求する（ステップＳ３２０８）。より具体的には、フロー実行部１３１は、図２９に示す再開処理内容４０００のオペレーション４１００の次に定義されたオペレーション４２００に基づき、配信コンポーネント１３３１の取得をコンポーネント管理部１３２に要求する。
【０２０４】
コンポーネント管理部１３２は、配信コンポーネント１３３１の取得要求を受け付けると、配信コンポーネント１３３１を生成する（ステップＳ３２０９）。そして、配信コンポーネント１３３１が生成されると、コンポーネント管理部１３２は、配信コンポーネント１３３１をフロー実行部１３１に返却する。
【０２０５】
なお、ステップＳ３２０９において、配信コンポーネント１３３１が既に生成されている場合には、コンポーネント管理部１３２は、配信コンポーネント１３３１を生成しなくてもよい。
【０２０６】
フロー実行部１３１は、生成された配信コンポーネント１３３１に対して、データを指定して処理の実行を要求する（ステップＳ３２１０）。なお、ここで指定されたデータのデータ型は「LocalFilePath」である。
【０２０７】
配信コンポーネント１３３１は、型変換管理部１４１に対して、型変換を要求する（ステップＳ３２１１）。ここで、当該型変換要求には、データと、配信コンポーネント１３３１が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
【０２０８】
型変換管理部１４１は、受け取った型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする（ステップＳ３２１２）。ここでは、受け取った型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」であるから、一致するものと判断される。すると、型変換管理部１４１は、型変換要求に含まれていたデータを、そのまま配信コンポーネント１３３１に送信する（ステップＳ３２１３）。
【０２０９】
配信コンポーネント１３３１は、型変換管理部１４１からデータを受け取ると、処理を実行する（ステップＳ３２１４）。そして、配信コンポーネント１３３１は、データの配信処理の結果をフロー実行部１３１に送信する。ここでは、配信コンポーネント１３３１は、正常にデータの配信処理が行われたことを示す結果をフロー実行部１３１に送信したものとする。
【０２１０】
より具体的には、配信コンポーネント１３３１は、ストレージサービスＡ連携部１６０１のファイル処理部１７０１に対して、図５（ａ）に示すＡＰＩとして「service-a/process/folder」を用いて、図３１に示すエラー画面Ｇ５００の保存先フォルダＩＤ入力欄Ｇ５０１で入力されたフォルダＩＤのフォルダにデータの配信処理の実行を要求する。
【０２１１】
フロー実行部１３１は、再開処理内容４０００のフローＩＤ「subflow1」を指定して、当該再開処理内容４０００の削除をアプリ管理部１２０に要求する（ステップＳ３２１５）。そして、アプリ管理部１２０は、フロー実行部１３１から当該削除要求を受信すると、アプリＩＤ「app001」と関連付けてアプリ情報記憶部１９０に記憶されているフローＩＤ「subflow1」の再開処理内容４０００を削除する。
【０２１２】
最後に、フロー実行部１３１は、ジョブＩＤ「Job101」を指定して、フロー経過情報テーブル１３６１のジョブＩＤ「Job101」で特定されるレコード及び再開用データ１３６２の削除をフロー経過管理部１３４Ａに要求する（ステップＳ３２１６）。そして、フロー経過管理部１３４Ａは、フロー実行部１３１から当該削除要求を受信すると、ジョブＩＤ「Job101」で特定されるレコードをフロー経過情報テーブル１３６１から削除する。また、フロー経過管理部１３４Ａは、ジョブＩＤ「Job101」と関連付けてフロー経過情報記憶部１３６Ａに記憶されている再開用データ１３６２を削除する。これにより、配信実行処理の再開処理が完了する。
【０２１３】
［第５の実施形態］
次に、第５の実施形態について説明する。第５の実施形態に係るサービス提供システム１０は、処理内容に基づき実行されたジョブにおいてエラー等が発生した場合に、自動でリカバリ可能なエラー等であるか否かを判定する。そして、第５の実施形態に係るサービス提供システム１０は、自動でリカバリ可能なエラー等であると判定した場合には、自動で再開処理内容に基づくジョブを実行する。
【０２１４】
また、第５の実施形態に係るサービス提供システム１０では、処理内容に定義されたオペレーション毎に発生したエラーのエラー情報を管理して、例えば入力ミス等に起因するエラーが多発している場合には、ユーザに注意を喚起するものである。なお、以降では、第４の実施形態と実質的に同一の機能を有する箇所及び同一の処理を行う箇所については、第４の実施形態と同一の符号を用いて、その説明を省略する。
【０２１５】
＜ソフトウェア構成＞
まず、第５の実施形態に係る情報処理システム１の処理ブロックについて、図３３を用いて説明する。図３３は、第５の実施形態に係る情報処理システムの一例の処理ブロック図である。第５の実施形態に係るサービス提供システム１０は、エラー情報管理記憶部１９１を有する。
【０２１６】
エラー情報管理記憶部１９１は、図３４に示すようなエラー情報管理テーブル５０００を記憶する。図３４に示すエラー情報管理テーブル５０００は、アプリＩＤ毎及び当該アプリＩＤのアプリ情報１０００に含まれる処理内容毎に、エラーが発生したオペレーション及びコンポーネントと、発生したエラーのエラー情報と、発生回数とを管理している。
【０２１７】
例えば、図３４では、アプリＩＤ「app001」のアプリ情報１０００１に含まれるフローＩＤ「flow2」の処理内容１２００に定義されたオペレーション「uploadFile」（配信コンポーネント）では、「invalid_folder_id」が累積５０回発生していることが示されている。
【０２１８】
次に、第５の実施形態に係るロジック処理部１３０の処理ブロックについて、図３５を用いて説明する。図３５は、第５の実施形態に係るロジック処理部の一例の処理ブロック図である。第５の実施形態に係るロジック処理部１３０は、フロー実行部１３１Ｂと、自動リカバリ可能エラー情報記憶部１３９とを有する。
【０２１９】
フロー実行部１３１Ｂは、コンポーネントからエラー情報を処理結果として受信した場合、自動リカバリ可能エラー情報テーブル６０００を参照し、当該エラー情報が自動でリカバリ可能なエラー情報であるか否かを判定する。そして、フロー実行部１３１Ｂは、自動でリカバリ可能なエラー情報であると判定した場合は、再開処理内容に従った処理を実行する。
【０２２０】
自動リカバリ可能エラー情報記憶部１３９は、図３６に示すような自動リカバリ可能エラー情報テーブル６０００を記憶する。図３６に示す自動リカバリ可能エラー情報テーブル６０００は、フロー実行部１３１Ｂが自動で再開処理内容に従った処理を実行することで、自動でリカバリが可能なエラー情報が予め定義されている。ここで、自動でリカバリが可能なエラー情報とは、例えば、ネットワークの輻輳等による一時的な通信不可を示すエラー情報（例えば、エラー情報「network_error」や「network_timeout」）等である。また、外部ストレージシステム３０の一時的な利用不可を示すエラー情報（例えば、エラー情報「service_unavable」）等である。このような一時的な通信不可や利用不可によるエラーの場合、再度の処理実行により正常に処理が行われることが多いからである。
【０２２１】
＜処理の詳細＞
次に、本実施形態に係る情報処理システム１の処理の詳細について説明する。
【０２２２】
≪スキャン配信サービスの全体処理≫
まず、画像形成装置２０のユーザは、ブラウザ２１０を用いて、サービス提供システム１０により提供されるサービスの一覧を取得するための操作を行う。すると、画像形成装置２０のブラウザ２１０は、サービスの一覧の取得要求をサービス提供システム１０のサービス処理部１１０に送信する（ステップＳ３７０１）。そして、サービス処理部１１０のアプリ管理部１２０は、当該取得要求を受信すると、サービス提供システム１０により提供されるサービスの一覧を画像形成装置２０に送信する。これにより、画像形成装置２０の操作パネル２２には、ブラウザ２１０により、サービス提供システム１０により提供されるサービスの一覧が表示される。
【０２２３】
なお、サービスの一覧には、サービス提供システム１０により提供されるサービスのサービス名と、このサービスを実現するためのアプリ情報１０００のアプリＩＤと、このアプリ情報１０００に含まれる処理内容のフローＩＤとが含まれる。また、サービスの一覧には、アプリＩＤ及びフローＩＤ毎のエラー情報及びエラー発生回数が含まれる。このように、本実施形態では、アプリＩＤ及びフローＩＤ毎に発生したエラーのエラー情報と、エラー発生回数とをブラウザ２１０に送信する。
【０２２４】
ブラウザ２１０は、アプリ管理部１２０から受け取ったアプリ画面を受信すると、例えば図３８に示すようなアプリ画面Ｇ６００を、操作パネル２２に表示させる（ステップＳ３７０２）。図３８は、本実施形態に係るスキャン配信するスキャン配信サービスを利用するためのアプリ画面Ｇ６００である。画像形成装置２０では、ステップＳ３７０１で受信したアプリＩＤ及びフローＩＤ毎のエラー情報及びエラー発生回数に基づき、例えば、エラー発生回数が所定以上のエラーに対して注意を喚起するためのメッセージを表示させる。
【０２２５】
図３８に示す例では、保存先フォルダＩＤ入力欄Ｇ４０３におけるフォルダＩＤの指定ミスを原因とするエラー情報「invalid_folder_id」に対して注意を喚起するためのメッセージＧ６０１が表示されている。このように、画像形成装置２０のブラウザ２１０に表示されるアプリ画面Ｇ６００において、例えば、エラー発生回数が多いエラーに対する注意を喚起するためのメッセージを表示させることで、エラーの発生を抑止させることができる。
【０２２６】
なお、上記では注意を喚起するためのメッセージＧ６０１が画像形成装置２０において生成される例について説明したが、これに限られず、サービス提供システム１０のサービス処理部１１０において生成されてもよい。
【０２２７】
≪配信実行処理≫
次に、第５の実施形態に係る配信実行処理について、図３９を用いて説明する。図３９は、第５の実施形態に係る配信実行処理の一例のシーケンス図である。以降で説明する図３９の配信実行処理では、第４の実施形態と同様に、ストレージサービスＡへの電子ファイルの配信（アップロード）が失敗する（エラーとなる）ものとする。
【０２２８】
フロー実行部１３１Ｂは、自動リカバリ可能エラー情報テーブル６０００と、配信コンポーネント１３３１から受信したエラー情報とに基づき、自動リカバリが可能なエラー情報か否かを判定する（ステップＳ３９０１）。すなわち、フロー実行部１３１Ｂは、配信コンポーネント１３３１から受信したエラー情報が自動リカバリ可能エラー情報テーブル６０００に存在するか否かを判定する。
【０２２９】
そして、フロー実行部１３１Ｂは、受信したエラー情報が自動リカバリ可能エラー情報テーブル６０００に存在する場合、自動リカバリが可能なエラー情報であると判定する。一方で、フロー実行部１３１Ｂは、受信したエラー情報が自動リカバリ可能エラー情報テーブル６０００に存在しない場合、自動リカバリが不可能なエラー情報であると判定する。
【０２３０】
フロー実行部１３１Ｂは、自動リカバリが可能なエラー情報であると判定した場合、再開処理内容に従って、当該再開処理内容に基づくジョブを実行する（ステップＳ３９０２）。すなわち、フロー実行部１３１Ｂは、図３２のステップＳ３２０２〜ステップＳ３２１６の処理を実行する。
【０２３１】
＜まとめ＞
以上により、第１の実施形態に係るサービス提供システム１０では、処理内容に定義されるオペレーションに従って実行されるコンポーネントが正常に実行されたか否かを管理する。これにより、処理内容に定義されるオペレーションに従って実行されるコンポーネントの処理にエラー等が発生して異常に終了した場合、エラー等が発生するまでに実行されたコンポーネントの処理結果を復元させることができる。
【０２３２】
また、第２の実施形態に係るサービス提供システム１０では、復元処理内容に定義される復元オペレーションに従って実行される処理において外部サービスが一時的に利用できないことを示すエラーが発生した場合、所定の時間経過後に復元処理内容を再実行させる。また、第２の実施形態に係るサービス提供システム１０では、復元処理内容に定義される復元オペレーションに従って実行される処理において対処不要なエラーが発生した場合、後続の処理を実行させる。このように、第２の実施形態では、復元処理において発生したエラーに応じて、復元処理の継続、所定の時間経過後に再実行、異常終了等を動的に行うことができる。
【０２３３】
また、第３の実施形態に係るサービス提供システム１０では、復元処理内容に定義される復元オペレーションのうち、ユーザにより選択された復元オペレーションに従った処理が実行される。このように、ユーザは、復元させたい処理及び復元させたくない処理を選択することができる。このため、例えば、エラー等が発生したジョブにおいて新規作成したフォルダをそのまま残しておきたいと考えるユーザ等にとって便宜である。
【０２３４】
また、第４の実施形態に係るサービス提供システム１０は、処理内容に定義されるオペレーションに従って実行されるコンポーネントにより正常に処理された後のデータを管理する。これにより、処理内容に定義されるオペレーションに従って実行されるコンポーネントの処理にエラー等が発生して異常に終了した場合、正常に終了したコンポーネントを再度実行させることなく、異常に終了したコンポーネントの処理を再開させることができる。
【０２３５】
さらに、第５の実施形態に係るサービス提供システム１０は、発生したエラー等に応じて異常に終了したコンポーネントの処理を自動で再開させることができる。これにより、ユーザは、処理内容に定義されるオペレーションに従って実行されるコンポーネントの処理にエラー等が発生した場合であってもエラー等を意識することなく、処理を完了させることができる。
【０２３６】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０２３７】
１        情報処理システム
１０      サービス提供システム
２０      画像形成装置
３０      外部ストレージシステム
１１０    サービス処理部
１２０    アプリ管理部
１３０    ロジック処理部
１３１    フロー実行部
１３２    コンポーネント管理部
１３３    コンポーネント群
１３４    フロー経過管理部
１３５    サブフロー生成部
１３６    フロー経過情報記憶部
１４０    データＩ／Ｆ部
１５０    ドキュメントサービス部
１５１    ＯＣＲ処理
１６０    ストレージサービス連携部
１７０    ファイル処理部
１８０    データ処理部
１９０    アプリ情報記憶部
【先行技術文献】
【特許文献】
【０２３８】
【特許文献１】特許第５１１２０８５号公報
【図１】
0006642009.tif 000002
【図２】
0006642009.tif 000003
【図３】
0006642009.tif 000004
【図４】
0006642009.tif 000005
【図５】
0006642009.tif 000006
【図６】
0006642009.tif 000007
【図７】
0006642009.tif 000008
【図８】
0006642009.tif 000009
【図９】
0006642009.tif 000010
【図１０】
0006642009.tif 000011
【図１１】
0006642009.tif 000012
【図１２】
0006642009.tif 000013
【図１３】
0006642009.tif 000014
【図１４】
0006642009.tif 000015
【図１５】
0006642009.tif 000016
【図１６】
0006642009.tif 000017
【図１７】
0006642009.tif 000018
【図１８】
0006642009.tif 000019
【図１９】
0006642009.tif 000020
【図２０】
0006642009.tif 000021
【図２１】
0006642009.tif 000022
【図２２】
0006642009.tif 000023
【図２３】
0006642009.tif 000024
【図２４】
0006642009.tif 000025
【図２５】
0006642009.tif 000026
【図２６】
0006642009.tif 000027
【図２７】
0006642009.tif 000028
【図２８】
0006642009.tif 000029
【図２９】
0006642009.tif 000030
【図３０】
0006642009.tif 000031
【図３１】
0006642009.tif 000032
【図３２】
0006642009.tif 000033
【図３３】
0006642009.tif 000034
【図３４】
0006642009.tif 000035
【図３５】
0006642009.tif 000036
【図３６】
0006642009.tif 000037
【図３７】
0006642009.tif 000038
【図３８】
0006642009.tif 000039
【図３９】
0006642009.tif 000040