以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
<システム構成>
まず、本実施形態に係る情報処理システム1のシステム構成について、図1を参照しながら説明する。図1は、本実施形態に係る情報処理システム1の一例のシステム構成を示す図である。
図1に示す情報処理システム1は、サービス提供システム10と、機器20と、外部ストレージシステム30とを含み、インターネット等の広域的なネットワークN1を介して通信可能に接続されている。
サービス提供システム10は、一台以上の情報処理装置で実現され、ネットワークN1を介して、クラウドサービス等の外部サービスと連携した各種のサービスを提供する。本実施形態に係るサービス提供システム10が提供するサービスの具体例については後述する。
なお、本実施形態では、外部サービスの具体例としてクラウドサービスを採用して説明するが、これに限られない。本実施形態は、例えば、ASP(Application Service Provider)によって提供されるサービスやWebサービス等のネットワークを介して提供される各種の外部サービスに関して適用されても良い。
機器20は、ユーザが使用する各種の電子機器である。すなわち、機器20は、例えば、MFP(Multifunction Peripheral)等の画像形成装置、PC(パーソナルコンピュータ)、プロジェクタ、電子黒板、デジタルカメラ等である。ユーザは、機器20を用いて、サービス提供システム10が提供する各種のサービスを利用することができる。
なお、以降では、複数の機器20について、各々を区別するときは、「機器201」、「機器202」等と添え字を用いて記載する。
外部ストレージシステム30は、ネットワークN1を介してストレージサービス(又はオンラインストレージ)と呼ばれるクラウドサービスを提供するコンピュータシステムである。ストレージサービスとは、外部ストレージシステム30のストレージの記憶領域を貸し出すサービスである。
なお、以降では、複数の外部ストレージシステム30について、各々を区別するときは、「外部ストレージシステム301」、「外部ストレージシステム302」等と添え字を用いて記載する。また、外部ストレージシステム301により提供されるストレージサービスの名称を「ストレージA」、外部ストレージシステム301により提供されるストレージサービスの名称を「ストレージB」等とする。
なお、外部ストレージシステム30は、複数台の情報処理装置によって実現されるシステムであっても良い。
また、図1に示す情報処理システム1の構成は一例であって、他の構成であっても良い。例えば、本実施形態に係る情報処理システム1には、電子データの入力及び出力の少なくとも一方を行う各種機器が含まれ、これらの機器がサービス提供システム10により提供される各種サービスを利用しても良い。
<ハードウェア構成>
次に、本実施形態に係る情報処理システム1に含まれるサービス提供システム10のハードウェア構成について、図2を参照しながら説明する。図2は、本実施形態に係るサービス提供システム10の一例のハードウェア構成を示す図である。
図2に示すサービス提供システム10は、入力装置11と、表示装置12と、外部I/F13と、RAM(Random Access Memory)14とを有する。また、サービス提供システム10は、ROM(Read Only Memory)15と、CPU(Central Processing Unit)16と、通信I/F17と、HDD(Hard Disk Drive)18とを有する。これらの各ハードウェアは、それぞれがバスBで接続されている。
入力装置11は、キーボードやマウス、タッチパネル等を含み、ユーザが各操作信号を入力するのに用いられる。表示装置12は、ディスプレイ等を含み、サービス提供システム10による処理結果を表示する。なお、入力装置11及び表示装置12の少なくとも一方は、必要なときにサービス提供システム10に接続して利用する形態であっても良い。
通信I/F17は、サービス提供システム10をネットワークN1に接続するインタフェースである。これにより、サービス提供システム10は、通信I/F17を介して通信を行うことができる。
HDD18は、プログラムやデータを格納している不揮発性の記憶装置である。HDD18に格納されるプログラムやデータには、サービス提供システム10全体を制御する基本ソフトウェアであるOS(Operating System)、OS上において各種機能を提供するアプリケーションソフトウェア等がある。
なお、サービス提供システム10は、HDD18に代え、記憶媒体としてフラッシュメモリを用いるドライブ装置(例えばソリッドステートドライブ:SSD)を利用するものであっても良い。また、HDD18は、格納しているプログラムやデータを所定のファイルシステム及び/又はDBにより管理している。
外部I/F13は、外部装置とのインタフェースである。外部装置には、記録媒体13a等がある。これにより、サービス提供システム10は、外部I/F13を介して記録媒体13aの読み取りや書き込みを行うことができる。記録媒体13aには、フレキシブルディスク、CD、DVD、SDメモリカード、USBメモリ等がある。
ROM15は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ROM15には、サービス提供システム10の起動時に実行されるBIOS(Basic Input/Output System)、OS設定、及びネットワーク設定等のプログラムやデータが格納されている。RAM14は、プログラムやデータを一時保持する揮発性の半導体メモリである。
CPU16は、ROM15やHDD18等の記憶装置からプログラムやデータをRAM14上に読み出し、処理を実行することで、サービス提供システム10全体の制御や機能を実現する演算装置である。
本実施形態に係るサービス提供システム10は、図2に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
次に、本実施形態に係る情報処理システム1に含まれる機器20が画像形成装置である場合のハードウェア構成について、図3を参照しながら説明する。図3は、本実施形態に係る機器20の一例のハードウェア構成を示す図である。
図3に示す機器20は、コントローラ21と、操作パネル22と、外部I/F23と、通信I/F24と、プリンタ25と、スキャナ26とを有する。また、コントローラ21は、CPU31と、RAM32と、ROM33と、NVRAM34と、HDD35とを有する。
ROM33は、各種プログラムやデータを格納している不揮発性の半導体メモリである。RAM32は、プログラムやデータを一時保持する揮発性の半導体メモリである。NVRAM34は、例えば設定情報等を格納している。また、HDD35は、各種プログラムやデータを格納している不揮発性の記憶装置である。
CPU31は、ROM33やNVRAM34、HDD35等からプログラムやデータ、設定情報等をRAM32上に読み出し、処理を実行することで、機器20全体の制御や機能を実現する演算装置である。
操作パネル22は、ユーザからの入力を受け付ける入力部と、表示を行う表示部とを備えている。外部I/F23は、外部装置とのインタフェースである。外部装置には、記録媒体23a等がある。これにより、機器20は、外部I/F23を介して記録媒体23aの読み取り及び/又は書き込みを行うことができる。なお、記録媒体23aには、例えば、ICカード、フレキシブルディスク、CD、DVD、SDメモリカード、USBメモリ等がある。
通信I/F24は、機器20をネットワークに接続するインタフェースである。これにより、機器20は、通信I/F24を介して通信を行うことができる。プリンタ25は、印刷データを印刷する印刷装置である。スキャナ26は、原稿を読み取って電子ファイル(画像ファイル)を生成する読取装置である。
本実施形態に係る機器20は、図3に示すハードウェア構成を有することにより、後述するような各種処理を実現できる。
<サービス提供システムが提供するサービス>
ここで、本実施形態に係るサービス提供システム10が提供するサービスについて説明する。
本実施形態に係るサービス提供システム10は、外部ストレージシステム30における電子ファイルの格納先リストを取得した上で、当該リストに基づいて取得した電子ファイルをOCR(Optical Character Recognition)処理して、メール配信するサービスを提供する。
本実施形態に係るサービス提供システム10は、上述したサービス(以降では、「OCR配信」サービス、又は、単に「OCR配信」とも表す。)を提供するものとして説明する。
ただし、サービス提供システム10により提供されるサービスは、これに限られない。例えば、サービス提供システム10は、外部ストレージシステム30における電子ファイルの格納先リストを取得した上で、当該リストに基づいて取得した電子ファイルを編集(例えば、所定の情報の追加や削除等)して、メール配信するサービスを提供しても良い。
また、例えば、サービス提供システム10は、外部ストレージシステム30における電子ファイルの格納先リストを取得した上で、当該リストに基づいて取得した電子ファイルを圧縮して、メール配信するサービスを提供しても良い。
<機能構成>
次に、本実施形態に係る情報処理システム1の機能構成について、図4を参照しながら説明する。図4は、本実施形態に係る情報処理システム1の一例の機能構成を示す図である。
図4に示す機器20は、例えばCPU31等により実行されるブラウザ210を有する。機器20のユーザは、ブラウザ210を介して、サービス提供システム10が提供するサービスを利用することができる。このように、本実施形態に係る機器20は、ブラウザ210が搭載されていれば良い。
図4に示すサービス提供システム10は、入出力サービス処理部110と、Webサービス処理部120と、ドキュメントサービス部130と、外部サービス連携部140とを有する。これら各部は、サービス提供システム10にインストールされた1以上のプログラムが、CPU16に実行させる処理により実現される。
また、図4に示すサービス提供システム10は、アプリ情報記憶部150と、画面情報記憶部160と、リソース管理情報記憶部170とを有する。これら各記憶部は、HDD18により実現可能である。なお、アプリ情報記憶部150、画面情報記憶部160、及びリソース管理情報記憶部170の少なくとも1つの記憶部が、サービス提供システム10とネットワークN1を介して接続される記憶装置等により実現されていても良い。
入出力サービス処理部110は、サービス提供システム10が提供するサービスに関する処理を行う。ここで、入出力サービス処理部110は、アプリ管理部111と、ロジック処理部112と、データI/F部113とを有する。
アプリ管理部111は、アプリ情報記憶部150に記憶されているアプリ情報1000を管理する。なお、アプリ情報1000とは、各種のサービスを提供するアプリケーションである。すなわち、サービス提供システム10が提供する各種のサービスは、アプリ情報1000により提供される。
また、アプリ管理部111は、ロジック処理部112からの要求に応じて、アプリ情報1000に含まれる処理フロー情報1100を返信する。なお、処理フロー情報1100は、アプリ情報1000により提供されるサービスを実現する一連の処理(以降では、一連の処理を「処理フロー」とも表す。)が定義された情報である。
ロジック処理部112は、Webサービス処理部120からの要求に応じて、アプリ管理部111から処理フロー情報1100を取得する。そして、ロジック処理部112は、取得した処理フロー情報1100に基づいて、サービスを実現する処理フローを実行する。これにより、本実施形態に係る情報処理システム1では、サービス提供システム10により各種のサービスが提供される。なお、ロジック処理部112の詳細については後述する。
データI/F部113は、Webサービス処理部120やロジック処理部112からの要求に応じて、外部サービス連携部140のデータ処理部142に各種の要求を行う。例えば、データI/F部113は、外部サービス連携部140のデータ処理部142に、電子ファイルの格納先の一覧(すなわち、電子ファイルの格納先リスト)を示すファイル一覧の取得要求を行う。
Webサービス処理部120は、ブラウザ210からの要求に応じて、画面情報記憶部160に記憶されている画面情報2000を返信する。なお、画面情報2000は、ブラウザ210に表示される画面を定義した情報であり、例えばHTML(HyperText Markup Language)やCSS(Cascading Style Sheets)等の形式で定義されている。
これにより、機器20の操作パネル22には、ブラウザ210により、サービス提供システム10が提供するサービスを選択するためのサービス一覧画面や、サービスを利用するためのサービス画面等が表示される。
また、Webサービス処理部120は、ブラウザ210からの要求に応じて、入出力サービス処理部110に各種の要求を行う。例えば、Webサービス処理部120は、ブラウザ210からの要求に応じて、「OCR配信」サービスを実現する処理フローの実行要求を、入出力サービス処理部110のロジック処理部112に行う。
ドキュメントサービス部130は、処理フロー情報1100に基づく一連の処理(処理フロー)に含まれる処理を実行する。ここで、ドキュメントサービス部130は、メール配信部131と、OCR処理部132とを有する。
メール配信部131は、電子ファイルを添付したメールを作成して、当該メールを指定されたメールアドレス宛に配信する。OCR処理部132は、電子ファイルをOCR処理する。
なお、ドキュメントサービス部130は、例えば、電子ファイルのデータ形式を所定のデータに変換するデータ変換部、電子ファイルを圧縮又は解凍する圧縮・解凍部等を有していても良い。
このように、ドキュメントサービス部130には、一連の処理(処理フロー)に含まれる処理を実行する種々の機能部が含まれる。したがって、ドキュメントサービス部130は、これら種々の機能を提供するプログラム(モジュール)群により実現される。
外部サービス連携部140は、ロジック処理部112やデータI/F部113からの要求に応じて、外部ストレージシステム30に各種の要求を行う。
本実施形態に係るサービス提供システム10は、外部ストレージシステム30毎に、当該外部ストレージシステム30に対応する外部サービス連携部140を有する。すなわち、本実施形態に係るサービス提供システム10は、外部ストレージシステム301に各種の要求を行うための外部サービス連携部1401、外部ストレージシステム302に各種の要求を行うための外部サービス連携部1402等を有する。
このように、本実施形態に係るサービス提供システム10は、当該サービス提供システム10と連携して処理を行う外部ストレージシステム30毎に、それぞれ対応する外部サービス連携部140を有する。なお、以降では、複数の外部サービス連携部140について、各々を区別するときは、上記のように、「外部サービス連携部1401」、「外部サービス連携部1402」等と添え字を用いて記載する。
ここで、外部サービス連携部140は、ロジック処理部112からの要求を受信するファイル処理部141と、データI/F部113からの要求を受信するデータ処理部142とを有する。
ファイル処理部141は、外部ストレージシステム30に保存されている電子ファイルに対する操作(例えば、取得、保存、編集等)を行うためのAPI(Application Programming Interface)が定義された共通I/F1411及び固有I/F1412を有する。
共通I/F1411は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(a)に示すAPIが挙げられる。すなわち、ファイル処理部141の共通I/F1411は、全ての外部ストレージシステム30が利用できるファイル操作に関する機能(例えば、電子ファイルの取得、保存等)を利用するためのAPI群である。
一方、固有I/F1412は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(b)に示すAPIが挙げられる。すなわち、ファイル処理部141の固有I/F1412は、特定の外部ストレージシステム30において利用できるファイル操作に関する機能(例えば、電子ファイルの編集等)を利用するためのAPI群である。
したがって、共通I/F1411は、全ての外部サービス連携部140に対して同様に定義される。一方で、固有I/F1412は、当該固有I/F1412で定義されるAPIが利用可能な特定の外部ストレージシステム30に対応する外部サービス連携部140に対して定義される。
また、データ処理部142は、外部ストレージシステム30に保存されている電子ファイルの書誌情報等のメタデータ(例えば、ファイル一覧やフォルダ一覧等)を取得等するためのAPIが定義された共通I/F1421及び固有I/F1422を有する。
共通I/F1421は、複数の外部ストレージシステム30間で共通に利用できるAPIであり、例えば図5(c)に示すAPIが挙げられる。すなわち、データ処理部142の共通I/F1421は、全ての外部ストレージシステム30で利用できるメタデータ取得等の機能(例えば、ファイル一覧やフォルダ一覧の取得等)を利用するためのAPI群である。
一方、固有I/F1422は、特定の外部ストレージシステム30において利用できるAPIであり、例えば図5(d)に示すAPIが挙げられる。すなわち、データ処理部142の固有I/F1422は、特定の外部ストレージシステム30において利用できるメタデータ取得等の機能(例えば、画像ファイル一覧の取得等)を利用するためのAPI群である。
したがって、共通I/F1421は、全ての外部サービス連携部140に対して同様に定義される。一方で、固有I/F1422は、当該固有I/F1422で定義されるAPIが利用可能な特定の外部ストレージシステム30に対応する外部サービス連携部140に対して定義される。
このように、本実施形態に係るサービス提供システム10は、当該サービス提供システム10と連携して処理を行う外部ストレージシステム30毎に、それぞれの外部ストレージシステム30に対応する外部サービス連携部140を有する。このため、例えば、サービス提供システム10の連携先となる外部ストレージシステム30を追加や削除(以降、「追加等)と表す。)する場合には、この外部ストレージシステム30に対応する外部サービス連携部140を追加等すれば良い。
したがって、本実施形態に係るサービス提供システム10では、連携先となる外部ストレージシステム30の追加等に伴う影響を局所化することができる。換言すれば、本実施形態に係るサービス提供システム10では、他の機能構成(例えば、入出力サービス処理部110やWebサービス処理部120等)に影響を与えることなく、連携先となる外部ストレージシステム30の追加等を行うことができる。
このため、本実施形態に係るサービス提供システム10では、当該サービス提供システム10の連携先となる外部ストレージシステム30を追加等した場合における開発工数を削減することができる。なお、外部サービス連携部140の追加等は、SDK(Software Development Kit)を用いて行うことができる。
また、外部サービス連携部140は、共通I/F1411と固有I/F1412とを異なるモジュール等により実現している。また、共通I/F1411と固有I/F1412で定義されるAPIは、外部サービス名(ストレージサービス名)を指定することで利用することができる(すなわち、「外部サービス名」が可変部分となっている。)。
したがって、本実施形態に係るサービス提供システム10では、当該サービス提供システム10の連携先となる外部ストレージシステム30を追加する場合には、他の外部サービス連携部140に含まれる共通I/F1411を再利用することができる。換言すれば、連携先となる外部ストレージシステム30を追加する場合には、固有I/F1412のみ開発すれば良い。これにより、本実施形態に係るサービス提供システム10では、連携先となる外部ストレージシステム30を追加する場合における開発工数をさらに削減することができる。なお、このことは共通I/F1421と固有I/F1422に関しても同様である。
アプリ情報記憶部150は、アプリ情報1000を記憶する。アプリ情報1000は、当該アプリ情報1000(アプリケーション)を一意に識別するアプリIDと関連付けてアプリ情報記憶部150に記憶されている。
ここで、アプリ情報1000には、処理フロー情報1100が含まれる。例えば、「OCR配信」サービスを提供するアプリ情報1000には、当該サービスを実現する一連の処理(処理フロー)が定義された処理フロー情報1100が含まれる。なお、アプリ情報1000には、2以上の処理フロー情報1100が含まれていても良い。
処理フロー情報1100は、上述したように、アプリ情報1000により提供されるサービスを実現する一連の処理(処理フロー)が定義された情報である。なお、処理フロー情報1100の詳細については後述する。
画面情報記憶部160は、画面情報2000を記憶する。画面情報2000は、上述したように、ブラウザ210に表示される画面を定義した情報である。なお、アプリ情報1000により提供されるサービスを利用するためのサービス画面の画面情報2000は、当該アプリ情報1000のアプリIDと関連付けて画面情報記憶部160に記憶されている。
リソース管理情報記憶部170は、処理フロー情報1100に基づく一連の処理(処理フロー)に含まれる各処理の処理結果等を管理するリソース管理情報170Dを記憶する。なお、リソース管理情報170Dの詳細については後述する。
ここで、ロジック処理部112の詳細な機能構成について、図6を参照しながら説明する。図6は、本実施形態に係るロジック処理部112の一例の機能構成を示す図である。
図6に示すロジック処理部112は、フロー実行部301と、コンポーネント管理部302と、コンポーネント群303と、型変換管理部304と、型変換群305と、リソース管理部306と、パラメータ置換部307とを有する。また、ロジック処理部112は、型変換情報テーブル3000を有する。
フロー実行部301は、Webサービス処理部120を介して、ブラウザ210から処理実行要求を受信すると、アプリ情報1000に含まれる処理フロー情報1100をアプリ管理部111から取得する。そして、フロー実行部301は、取得した処理フロー情報1100に基づく一連の処理(処理フロー)を実行する。
ここで、処理フロー情報1100に基づく一連の処理は、当該一連の処理に含まれる各処理を実行するためのコンポーネントを組み合わせることにより実行される。なお、コンポーネントは、所定の機能を提供するプログラムやモジュール等により実現され、例えばクラスや関数等で定義される。
コンポーネント管理部302は、コンポーネントを管理する。コンポーネント管理部302は、フロー実行部301からの要求に応じて、コンポーネントを生成すると共に、生成したコンポーネントをフロー実行部301に返信する。なお、コンポーネントの生成とは、例えばクラスや関数等で定義されたコンポーネントを、メモリ(例えばRAM14)上に展開することである。
コンポーネント群303は、コンポーネントの集合である。コンポーネント群303には、反復コンポーネント401と、リスト取得コンポーネント402と、メール配信コンポーネント403と、ファイル取得コンポーネント404と、OCRコンポーネント405とが含まれる。
反復コンポーネント401は、1以上の処理の反復を実現するためのコンポーネントである。すなわち、反復コンポーネント401は、1以上の処理を含む他の処理フローを繰り返し実行させることで、当該1以上の処理の反復を実現する。
このとき、反復コンポーネント401は、当該反復コンポーネント401に対するパラメータ情報に置換指定が含まれるか否かを判定する。そして、反復コンポーネント401は、パラメータ情報に置換指定が含まれると判定した場合、パラメータ情報の置換をパラメータ置換部307に要求する。なお、置換指定とは、パラメータ情報に含まれるパラメータ値を、例えば、他のコンポーネントの処理結果等を示すリソースに置換するための指定である。
リスト取得コンポーネント402は、指定された外部ストレージシステム30から電子ファイルの格納先リストを取得するためのコンポーネントである。メール配信コンポーネント403は、指定されたメールアドレス宛にメール配信するためのコンポーネントである。
ファイル取得コンポーネント404は、外部ストレージシステム30から電子ファイルを取得(ダウンロード)するためのコンポーネントである。OCRコンポーネント405は、電子ファイルをOCR処理するためのコンポーネントである。
なお、コンポーネント群303には、これら以外にも、例えば、電子ファイルの圧縮するための圧縮コンポーネント、電子ファイルのデータ形式を変換するためのコンポーネント等の各種のコンポーネントが含まれる。
また、コンポーネント群303に含まれる各コンポーネントは、コンポーネント共通I/F400を有する。コンポーネント共通I/F400は、各コンポーネントに対して共通に定義されたAPIであり、コンポーネントを生成するためのAPIと、コンポーネントの処理を実行するためのAPIとが含まれる。
このように、各コンポーネントがコンポーネント共通I/F400を有することで、コンポーネントの追加等に伴う影響を局所化することができる。すなわち、例えば、フロー実行部301やコンポーネント管理部302等に影響を与えることなく、コンポーネントの追加等を行うことができる。これにより、本実施形態に係るサービス提供システム10では、所定の機能の追加等(すなわち、当該機能を実現する処理を実行するためのコンポーネントの追加等)に伴う開発工数を削減することができる。
なお、コンポーネント管理部302は、例えば、サービス提供システム10の起動時に、コンポーネント共通I/F400により、コンポーネント群303に含まれる各コンポーネントを生成しても良い。
型変換管理部304は、データ型の型変換を管理する。ここで、各コンポーネントは、自身が扱えるデータ型が予め決まっている。したがって、型変換管理部304は、コンポーネントからの要求に応じて、例えば図7に示す型変換情報テーブル3000を参照して、型変換群305に含まれる型変換を生成する。
そして、型変換管理部304は、生成された型変換に型変換処理の実行を要求する。なお、型変換は、データ型の型変換処理を実行するプログラムやモジュール等により実現され、例えばクラスや関数等で定義される。また、型変換の生成とは、例えばクラスや関数等で定義された型変換を、メモリ(例えばRAM14上)に展開することである。
なお、データ型には、例えば、ストリームデータを示すデータ型「InputStream」、記憶装置等に格納されている電子ファイルのパス(アドレス)を示す「LocalFilePath」、及び電子ファイルの実体を示す「File」等が挙げられる。
ここで、型変換情報テーブル3000について、図7を参照しながら説明する。図7は、型変換情報テーブルの一例を示す図である。
図7に示す型変換情報テーブル3000は、データ項目として、変換前のデータ型と、変換後のデータ型と、生成する型変換とを有する。すなわち、型変換情報テーブル3000に格納されている型変換情報は、変換前のデータ型及び変換後のデータ型毎に、当該変換前のデータ型を、当該変換後のデータ型に変換するための型変換が関連付けられた情報である。
型変換群305は、型変換の集合である。型変換群305には、データ型「InputStream」を「LocalFilePath」に変換するための第1の型変換501が含まれる。なお、型変換群305には、これ以外にも、例えば、データ型「LocalFilePath」を「File」に変換するための第2の型変換等が含まれる。
また、型変換群305に含まれる各型変換は、型変換共通I/F500を有する。型変換共通I/F500は、各型変換に対して共通に定義されたAPIであり、型変換を生成するためのAPIと、型変換の型変換処理を実行するためのAPIとが含まれる。
このように、各型変換が型変換共通I/F500を有することで、型変換の追加等に伴う影響を局所化することができる。すなわち、例えば、型変換管理部304等に影響を与えることなく、型変換の追加等を行うことができる。これにより、本実施形態に係るサービス提供システム10では、型変換の追加等に伴う開発工数を削減することができる。
リソース管理部306は、リソース管理情報記憶部170に記憶されたリソース管理情報170Dを管理する。すなわち、リソース管理部306は、各コンポーネントからの要求に応じて、当該コンポーネントの処理結果を、リソース管理情報170Dとしてリソース管理情報記憶部170に記憶させる。
パラメータ置換部307は、各コンポーネントに対するパラメータ情報を置換する。すなわち、パラメータ置換部307は、反復コンポーネント401からの要求に応じて、パラメータ情報に含まれるパラメータ値を、当該パラメータ値として定義されている置換指定に対応するリソースに置換する。
ここで、「OCR配信」サービスを提供するアプリ情報1000に含まれる処理フロー情報1100について、図8を参照しながら説明する。図8は、処理フロー情報の一例を示す図である。
図8に示す処理フロー情報1100は、「OCR配信」サービスを実現する一連の処理(処理フロー)が定義された情報である。
図8に示す処理フロー情報1100には、処理フロー情報1100を一意に識別する識別情報を示すフローID1101と、処理フローに含まれる各処理の処理内容が定義されたフロー詳細1102とが含まれる。
フロー詳細1102には、処理フローに含まれる各処理をそれぞれ定義した処理定義1111〜1113が含まれる。各処理定義1111〜1113には、処理を実行するためのコンポーネントのコンポーネント名を示す「"component"」と、当該コンポーネントに対するパラメータ情報が定義される「"parameters"」とが含まれる。
具体的には、処理定義1111の「"component"」には、リスト取得コンポーネント402のコンポーネント名「"getFileList"」が定義されている。また、「"parameters"」には、リスト取得コンポーネント402に対するパラメータ情報として、パラメータ名「"storage"」と、パラメータ値「null」とが定義されておいる。なお、パラメータ名「"storage"」のパラメータ情報には、電子ファイルの格納先リストを取得する外部ストレージシステム30の識別情報がパラメータ値として定義される。
同様に、処理定義1113の「"component"」には、メール配信コンポーネント403のコンポーネント名「"sendMail"」が定義されている。また、「"parameters"」には、メール配信コンポーネント403に対するパラメータ情報として、パラメータ名「"to"」と、パラメータ値「null」とが定義されている。なお、パラメータ名「"to"」のパラメータ情報には、メールの配信先となるメールアドレスがパラメータ値として定義される。
同様に、処理定義1112の「"component"」には、反復コンポーネント401のコンポーネント名「"iterate"」が定義されている。また、「"parameters"」には、反復コンポーネント401に対するパラメータ情報1121〜パラメータ情報1123が定義されている。
ここで、パラメータ情報1121は、パラメータ名「"flowid"」のパラメータ情報であり、パラメータ値として、反復コンポーネント401が繰り返し実行させる他の処理フローのフローIDが定義される。
また、パラメータ情報1122は、パラメータ名「"flowDetails"」のパラメータ情報であり、パラメータ値として、当該他の処理フローのフロー詳細が定義される。すなわち、パラメータ情報1122のパラメータ値には、当該他の処理フローに含まれる各処理をそれぞれ定義した処理定義1131及び処理定義1132が定義されている。
さらに、パラメータ情報1123は、パラメータ名「"numberOfIterations"」のパラメータ情報であり、パラメータ値として、当該他の処理フローを繰り返し実行させる回数(反復回数)が定義される。
このように、反復コンポーネント401による処理を定義した処理定義1112には、繰り返し実行させる他の処理フローのフロー詳細と、当該他の処理フローを繰り返し実行させる回数とが定義されている。これにより、後述するように、反復コンポーネント401により、他の処理フローが繰り返し実行され、1以上の処理の反復を実現することができる。
なお、各処理定義に定義された処理の実行順は、フロー詳細1102において、上から順に定義される。すなわち、図8に示す処理フロー情報1100に基づく一連の処理(処理フロー)では、処理定義1111に定義された処理、処理定義1112に定義された処理、処理定義1113に定義された処理の順で実行される。ただし、これに限られず、処理フロー情報1100には、例えば、各処理定義に定義された処理の実行順を示す情報が定義されていても良い。
ここで、図8に示す処理フロー情報1100に基づく処理フロー(すなわち、「OCR配信」サービスを実現する処理フロー)を、図9に示す。図9は、「OCR配信」サービスを実現する処理フローの一例を説明するための図である。なお、以降では、処理フロー情報1100に基づく処理フローを「親フロー」、反復コンポーネント401により繰り返し実行させる他の処理フローを「子フロー」とも表す。
図9に示すように、「OCR配信」サービスを実現する処理フローでは、まず、リスト取得コンポーネント402により、外部ストレージシステム30に格納されている電子ファイルの格納先リストが取得される。
次に、反復コンポーネント401により、格納先リストに含まれる格納先毎に、ファイル取得コンポーネント404による処理と、OCRコンポーネント405による処理とを繰り返し実行させる。これにより、格納先リストに含まれる格納先毎に、電子ファイルの取得(ダウンロード)及び当該電子ファイルのOCR処理が行われる。
最後に、メール配信コンポーネント403により、OCR処理後の電子ファイルがメール配信される。
このように、「OCR配信」サービスでは、親フローの反復コンポーネント401が子フロー(他の処理フロー)を繰り返し実行させることで、1以上の処理の反復を実現している。なお、子フローに反復コンポーネント401が含まれる場合には、他の処理フロー(孫フロー)を繰り返し実行させれば良い。
<処理の詳細>
次に、本実施形態に係る情報処理システムの処理の詳細について説明する。
以降では、機器20のユーザUが、ブラウザ210を用いて、サービス提供システム10により提供されるサービスを利用する場合の処理について、図10を参照しながら説明する。図10は、本実施形態に係るサービス利用の全体処理の一例を示すシーケンス図である。
ユーザUは、機器20のブラウザ210を用いて、アプリ情報1000により提供されるサービスの一覧を表示させるための表示操作を行う(ステップS1001)。
機器20のブラウザ210は、サービスの一覧を表示させるための表示操作を受け付けると、サービス一覧画面の取得要求を、サービス提供システム10のWebサービス処理部120に送信する(ステップS1002)。
Webサービス処理部120は、サービス一覧画面の取得要求を受信すると、当該サービス一覧画面の画面情報2000を画面情報記憶部160から取得する(ステップS1003)。そして、Webサービス処理部120は、サービス一覧画面の画面情報2000をブラウザ210に返信する。
なお、サービス一覧画面の画面情報2000には、サービス毎に、当該サービスを提供するアプリ情報1000のアプリIDと、当該アプリ情報1000に含まれる処理フロー情報1100のフローIDとが含まれる。
機器20のブラウザ210は、サービス一覧画面の画面情報2000を受信すると、当該画面情報2000に基づいて、例えば図11(a)に示すサービス一覧画面4100を操作パネル22に表示させる(ステップS1004)。
図11(a)に示すサービス一覧画面4100には、サービス提供システム10により提供されるサービス名の一覧であるサービス名一覧4101が含まれる。
次に、ユーザUは、サービス一覧画面4100のサービス名一覧4101から、所望のサービスを選択する操作を行う(ステップS1005)。ここで、以降では、サービス一覧画面4100のサービス名一覧4101から「OCR配信」が選択されたものとして説明する。
機器20のブラウザ210は、サービスの選択操作を受け付けると、サービス画面の取得要求をWebサービス処理部120に送信する(ステップS1006)。なお、当該取得要求には、ユーザUにより選択された「OCR配信」サービスを提供するアプリ情報1000のアプリIDが含まれる。
Webサービス処理部120は、サービス画面の取得要求を受信すると、当該取得要求に含まれるアプリIDに関連付けて画面情報記憶部160に記憶されている画面情報2000(サービス画面の画面情報2000)を取得する(ステップS1007)。そして、Webサービス処理部120は、取得した画面情報2000をブラウザ210に返信する。
機器20のブラウザ210は、サービス画面の画面情報2000を受信すると、当該画面情報2000に基づいて、例えば図11(b)に示すサービス画面4200を操作パネル22に表示させる(ステップS1008)。
図11(b)に示すサービス画面4200は、ユーザUにより選択された「OCR配信」サービスを利用するための画面である。図11(b)に示すサービス画面4200には、ストレージ指定欄4201と、メールアドレス指定欄4202と、実行ボタン4203とが含まれる。
ここで、ストレージ指定欄4201は、電子ファイルの格納先リストを取得する外部ストレージシステム30のストレージサービス名を指定する欄である。メールアドレス指定欄4202は、OCR処理された電子ファイルをメール送信する宛先(メールアドレス)を指定する欄である。なお、サービス画面4200には、例えば、OCR処理された電子ファイルをCCやBCCでメール送信する宛先を指定するためのCC指定欄やBCC指定欄等が含まれていても良い。
次に、ユーザUは、サービス画面4200において、ストレージ指定欄4201に所望のストレージサービス名を指定すると共に、メールアドレス指定欄4202に所望のメールアドレスを指定した上で、実行ボタン4203を押下する(ステップS1009)。
ここで、以降では、ユーザUにより、ストレージ指定欄4201に「ストレージA」が指定されると共に、メールアドレス指定欄4202にメールアドレス「hoge@fuga.com」が指定された上で、実行ボタン4203が押下されたものとして説明する。
機器20のブラウザ210は、実行ボタン4203の押下操作を受け付けると、「OCR配信」サービスを実現する処理フローの実行要求をWebサービス処理部120に送信する(ステップS1010)。
なお、当該実行要求には、「OCR配信」サービスを提供するアプリ情報1000のアプリIDと、当該サービスを実現するための処理フロー情報1100のフローIDが含まれる。また、当該実行要求には、サービス画面4200においてユーザUにより入力された入力情報(すなわち、ストレージサービス名及びメールアドレス)が含まれる。
Webサービス処理部120は、処理フローの実行要求を受信すると、当該実行要求を、入出力サービス処理部110のロジック処理部112に送信する(ステップS1011)。
入出力サービス処理部110のロジック処理部112は、処理フローの実行要求を受信すると、当該実行要求に含まれるアプリID及びフローIDに対応する処理フロー情報1100に基づく一連の処理(すなわち、親フロー)を実行する(ステップS1012)。
そして、ロジック処理部112は、当該一連の処理の処理結果を、Webサービス処理部120を介して、機器20のブラウザ210に返信する。
これにより、本実施形態に係るサービス提供システム10において、「OCR配信」サービスを実現する一連の処理が実行され、機器20に対して当該サービスが提供される。
ここで、上記のステップS1012の処理フローの実行処理(親フローの実行処理)の詳細について、図12を参照しながら説明する。図12は、本実施形態に係る親フローの実行処理の一例を示すシーケンス図である。
フロー実行部301は、処理フローの実行要求を受信すると、処理フロー情報の取得要求をアプリ管理部111に送信する(ステップS1201)。なお、当該取得要求には、Webサービス処理部120から受信した処理フローの実行要求に含まれるアプリIDと、フローIDとが含まれる。
アプリ管理部111は、処理フロー情報の取得要求を受信すると、当該取得要求に含まれるアプリID及びフローIDに対応する処理フロー情報1100をアプリ情報記憶部150から取得する(ステップS1202)。そして、アプリ管理部111は、取得した処理フロー情報1100をフロー実行部301に返信する。これにより、フロー実行部301には、図8に示す処理フロー情報1100が返信される。
フロー実行部301は、アプリ管理部111から処理フロー情報1100を受信すると、当該処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1203)。
すなわち、フロー実行部301は、図8に示す処理フロー情報1100の処理定義1111に含まれる「"component"」に定義されているコンポーネント名「"getFileList"」のコンポーネントの取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、コンポーネント名「"getFileList"」のコンポーネント(すなわち、リスト取得コンポーネント402)を生成する(ステップS1204)。なお、リスト取得コンポーネント402の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したリスト取得コンポーネント402をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、リスト取得コンポーネント402が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
次に、フロー実行部301は、コンポーネント実行要求をリスト取得コンポーネント402に送信する(ステップS1205)。なお、当該実行要求には、データと、パラメータ情報とが含まれる。
ここで、データは、データ型「InputStream」として、ブラウザ210から受信した入力情報(すなわち、ストレージサービス名「ストレージA」)である。すなわち、フロー実行部301は、ブラウザ210からデータ型「InputStream」として渡された入力情報に含まれるストレージサービス名を、単に「データ」として(データ型を意識することなく)、リスト取得コンポーネント402に渡して処理の実行を要求する。本実施形態では、このようにデータ型を意識しない各種の情報(例えば、入力情報や電子ファイル等)を、単に「データ」と表す。
また、パラメータ情報は、図8に示す処理フロー情報1100の処理定義1111に含まれる「"parameters"」に定義されている「"storage":null」である。
リスト取得コンポーネント402は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1206)。そして、リスト取得コンポーネント402は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
なお、ここで返信されるデータには、例えば、リスト取得コンポーネント402の実行処理が正常に終了したことを示す情報が含まれる。
ここで、リスト取得コンポーネント402の実行処理について、図13を参照しながら説明する。図13は、本実施形態に係るリスト取得コンポーネント402の実行処理の一例を示すシーケンス図である。
まず、リスト取得コンポーネント402は、型変換要求を型変換管理部304に送信する(ステップS1301)。なお、当該型変換要求には、データと、リスト取得コンポーネント402が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1302)。
ここで、受信した型変換要求に含まれるデータのデータ型は「InputStream」である一方、指定されたデータ型は「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致しないものと判断する。
すると、型変換管理部304は、型変換情報テーブル3000を参照して、「InputStream」を「LocalFilePath」に変換するための第1の型変換501を特定して、当該特定した第1の型変換501を生成する(ステップS1303)。なお、第1の型変換501の生成は、型変換共通I/F500に定義されたAPIを用いて行うことができる。
次に、型変換管理部304は、生成された第1の型変換501に対して、型変換要求を送信する(ステップS1304)。なお、当該型変換要求には、データが含まれる。
第1の型変換501は、型変換要求を受信すると、当該要求に含まれるデータのデータ型を「InputStream」から「LocalFilePath」に変換する(ステップS1305)。そして、第1の型変換501は、当該変換後のデータを、型変換管理部304を介して、リスト取得コンポーネント402に返信する。
リスト取得コンポーネント402は、型変換後のデータを受信すると、パラメータ情報を用いて処理を実行する(ステップS1306)。すなわち、リスト取得コンポーネント402は、パラメータ情報に含まれるパラメータ名「"storage"」のパラメータ値に、データに含まれる「ストレージA」を指定して、リスト取得処理を実行する。
より具体的には、リスト取得コンポーネント402は、データI/F部113を介して、外部サービス連携部1401のデータ処理部142に対して、図5(c)に示すAPI「/外部サービス名/data/files」を用いて、ファイル一覧を取得する。これにより、リスト取得コンポーネント402により、ストレージAにおける電子ファイルの格納先リストが取得される。
次に、リスト取得コンポーネント402は、処理を実行すると、処理結果の保存要求をリソース管理部306に送信する(ステップS1307)。なお、当該保存要求には、リスト取得コンポーネント402の処理の結果を示すデータ(すなわち、電子ファイルの格納先リスト)が含まれる。
リソース管理部306は、処理結果の保存要求を受信すると、当該保存要求に含まれるデータに基づいて、リソース管理情報記憶部170に記憶されているリソース管理情報170Dに処理結果を保存する(ステップS1308)。そして、リソース管理部306は、保存結果をリスト取得コンポーネント402に返信する。
ここで、リソース管理情報170Dに保存されたリスト取得コンポーネント402の処理結果について、図14を参照しながら説明する。図14は、リソース管理情報の一例を示す図である。
図14に示すように、リソース管理情報170Dには、リスト取得コンポーネント402の処理結果171が保存されている。すなわち、処理結果171には、電子ファイルの格納先URL(Uniform Resource Locator)を示す「"url[0]"」〜「"url[N−1]"」と、格納先リストのサイズ(すなわち、格納先URLの数)を示す「"size"」とが含まれる。換言すれば、処理結果171には、電子ファイルの格納先URLがそれぞれ格納された配列「"url[0]"」〜「"url[N−1]"」と、当該配列の個数「"size"」とが含まれる。
このように、リソース管理情報170Dには、一連の処理に含まれる各処理を実行するためのコンポーネントの処理結果が保存される。
図12に戻る。フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1207)。
すなわち、フロー実行部301は、図8に示す処理フロー情報1100の処理定義1112に含まれる「"component"」に定義されているコンポーネント名「"iterate"」のコンポーネントの取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、コンポーネント名「"iterate"」のコンポーネント(すなわち、反復コンポーネント401)を生成する(ステップS1208)。なお、反復コンポーネント401の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成した反復コンポーネント401をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、反復コンポーネント401が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
次に、フロー実行部301は、コンポーネント実行要求を反復コンポーネント401に送信する(ステップS1209)。なお、当該実行要求には、データと、パラメータ情報とが含まれる。
ここで、パラメータ情報は、図8に示す処理フロー情報1100の処理定義1112に含まれる「"parameters"」に定義されているパラメータ情報1121〜パラメータ情報1123である。
反復コンポーネント401は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1210)。そして、反復コンポーネント401は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。なお、反復コンポーネント401の実行処理の詳細については後述する。
以降では、反復コンポーネント401の実行処理により、電子ファイルの格納先URLを示す「"url[0]"」〜「"url[N−1]"」に基づいて、それぞれ、電子ファイルが取得されて、OCR処理が行われたものとして説明する。
なお、ここで返信されるデータには、例えば、反復コンポーネント401の実行処理が正常に終了したことを示す情報と、OCR処理後のN個(Nは、格納先リストのサイズ)の電子ファイルとが含まれる。
フロー実行部301は、コンポーネントの実行処理の処理結果を示すデータを受信すると、処理フロー情報1100に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1211)。
すなわち、フロー実行部301は、図8に示す処理フロー情報1100の処理定義1113に含まれる「"component"」に定義されているコンポーネント名「"sendMail"」のコンポーネントの取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、コンポーネント名「"sendMail"」のコンポーネント(すなわち、メール配信コンポーネント403)を生成する(ステップS1212)。なお、メール配信コンポーネント403の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したメール配信コンポーネント403をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、メール配信コンポーネント403が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
次に、フロー実行部301は、コンポーネント実行要求をメール配信コンポーネント403に送信する(ステップS1213)。なお、当該実行要求には、データと、パラメータ情報とが含まれる。
ここで、データには、入力情報に含まれるメールアドレス「hoge@fuga.com」が含まれる。
また、パラメータ情報は、図8に示す処理フロー情報1100の処理定義1113に含まれる「"parameters"」に定義されている「"to":null」である。
メール配信コンポーネント403は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1214)。そして、メール配信コンポーネント403は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。
なお、ここで返信されるデータには、例えば、メール配信コンポーネント403の実行処理が正常に終了したことを示す情報が含まれる。
ここで、メール配信コンポーネント403の実行処理について、図15を参照しながら説明する。図15は、本実施形態に係るメール配信コンポーネント403の実行処理の一例を示すシーケンス図である。
まず、メール配信コンポーネント403は、型変換要求を型変換管理部304に送信する(ステップS1501)。なお、当該型変換要求には、データと、メール配信コンポーネント403が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1502)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、メール配信コンポーネント403に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
メール配信コンポーネント403は、データを受信すると、パラメータ情報を用いて処理を実行する(ステップS1503)。すなわち、メール配信コンポーネント403は、まず、パラメータ情報に含まれるパラメータ名「"to"」のパラメータ値に、データに含まれるメールアドレス「hoge@fuga.com」を指定する。そして、メール配信コンポーネント403は、データに含まれる電子ファイルを添付したメールを作成した上で、指定されたメールアドレス宛にメールを送信する。なお、メール配信コンポーネント403は、ドキュメントサービス部130のメール配信部131により、メールの作成及び送信処理を実行する。
ここで、上記のステップS1210における反復コンポーネント401の実行処理について、図16を参照しながら説明する。図16は、本実施形態に係る反復コンポーネントの実行処理の一例を示すシーケンス図である。
まず、反復コンポーネント401は、型変換要求を型変換管理部304に送信する(ステップS1601)。なお、当該型変換要求には、データと、反復コンポーネント401が扱うことができるデータ型を示す「LocalFilePath」の指定とが含まれる。
型変換管理部304は、型変換要求を受信すると、当該型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するか否かをチェックする(ステップS1602)。
ここで、受信した型変換要求に含まれるデータのデータ型は「LocalFilePath」であり、指定されたデータ型も「LocalFilePath」である。したがって、型変換管理部304は、型変換要求に含まれるデータのデータ型と、指定されたデータ型とが一致するものと判断する。
すると、型変換管理部304は、型変換要求に含まれるデータを、反復コンポーネント401に返信する。このように、データ型のチェックにおいてデータ型が一致するものと判断された場合、型変換管理部304は、型変換の生成を行わない。
反復コンポーネント401は、データを受信すると、子フローを実行させた回数(実行済回数)を示す変数「index」を「0」に設定する(ステップS1603)。なお、変数「index」は、例えば、予約語として、反復コンポーネント401に定義されている。
次に、反復コンポーネント401は、パラメータ情報1123を評価する(ステップS1604)。すなわち、反復コンポーネント401は、パラメータ情報1123に置換指定が含まれるか否かを判定する。換言すれば、反復コンポーネント401は、他の処理フローの反復回数を示すパラメータ名(すなわち、「"numberOfIterations"」)のパラメータ値に置換指定が定義されているか否かを判定する。
ここで、パラメータ情報1123には、パラメータ名「"numberOfIterations"」のパラメータ値に置換指定「"#{result.getFileList.size}"」が定義されている。したがって、本実施形態では、反復コンポーネント401は、パラメータ情報1123に置換指定が含まれると判定する。
ステップS1604において、パラメータ情報1123に置換指定が含まれると判定された場合、反復コンポーネント401は、パラメータ情報の置換要求をパラメータ置換部307に送信する(ステップS1605)。なお、当該置換要求には、パラメータ情報1123(すなわち、「"numberOfIterations":"#{result.getFileList.size}"」)が含まれる。
次に、パラメータ置換部307は、パラメータ情報の置換要求を受信すると、リソースの取得要求をリソース管理部306に送信する(ステップS1606)。なお、当該取得要求には、置換指定「"#{result.getFileList.size}"」が含まれる。
リソース管理部306は、リソースの取得要求を受信すると、当該取得要求に含まれる置換指定に対応するリソースを、リソース管理情報記憶部170に記憶されているリソース管理情報170Dから取得する(ステップS1607)。そして、リソース管理部306は、取得したリソースをパラメータ置換部307に返信する。
すなわち、リソース管理部306は、図14に示すリソース管理情報170Dに保存されている処理結果171に含まれる「"size"」に対応するリソース(すなわち、「"N"」)を取得する。そして、リソース管理部306は、リソース「"N"」をパラメータ置換部307に返信する。
次に、パラメータ置換部307は、リソース管理部306からリソースが返信されると、パラメータ情報1123に含まれるパラメータ値に定義されている置換指定を、当該リソースで置換する(ステップS1608)。
すなわち、パラメータ置換部307は、パラメータ情報1123の置換指定「"#{result.getFileList.size}"」を、リソース「"N"」で置換する。そして、パラメータ置換部307は、置換後のパラメータ情報1123(すなわち、パラメータ情報「"numberOfIterations":"N"」)を反復コンポーネント401に返信する。
ここで、反復コンポーネント401は、実行済回数を示す変数「index」の値が、パラメータ名「"numberOfIterations"」のパラメータ値より小さい間、以降のステップS1609〜ステップS1618の処理を実行する。本実施形態では、上述したように、パラメータ名「"numberOfIterations"」のパラメータ値は、パラメータ置換部307により置換された結果、「"N"」である。したがって、本実施形態では、反復コンポーネント401は、変数「index」の値が、「"N"」より小さい間、以降のステップS1609〜ステップS1618の処理を実行する。
反復コンポーネント401は、パラメータ情報1122を評価する(ステップS1609)。すなわち、反復コンポーネント401は、パラメータ情報1122に置換指定が含まれるか否かを判定する。換言すれば、反復コンポーネント401は、子フローのフロー詳細を示すパラメータ情報1122に置換指定が含まれるか否かを判定する。
ここで、パラメータ情報1122には、パラメータ名「"location"」のパラメータ情報に、置換指定「"#{result.getFileList.url[index]}"」がパラメータ値として定義されている。したがって、本実施形態では、反復コンポーネント401は、パラメータ情報1122に置換指定が含まれると判定する。
ステップS1609において、パラメータ情報1122に置換指定が含まれると判定された場合、反復コンポーネント401は、パラメータ情報の置換要求をパラメータ置換部307に送信する(ステップS1610)。なお、当該置換要求には、置換指定が含まれるパラメータ情報「"location":"#{result.getFileList.url[index]}"」が含まれる。
次に、パラメータ置換部307は、パラメータ情報の置換要求を受信すると、リソースの取得要求をリソース管理部306に送信する(ステップS1611)。なお、当該取得要求には、置換指定「"#{result.getFileList.url[index]}"」が含まれる。
リソース管理部306は、リソースの取得要求を受信すると、当該取得要求に含まれる置換指定に対応するリソースを、リソース管理情報記憶部170に記憶されているリソース管理情報170Dから取得する(ステップS1612)。そして、リソース管理部306は、取得したリソースをパラメータ置換部307に返信する。
すなわち、リソース管理部306は、図14に示すリソース管理情報170Dに保存されている処理結果171に含まれる「"url[0]"」〜「"url[N−1]"」のうち、変数「index」の値に対応するリソースを取得する。例えば、変数「index」の値が「1」である場合、リソース管理部306は、「"url[1]"」に対応するリソース(すなわち、「"http://service_a.com/user1/file1.jpg"」)を取得する。同様に、例えば、変数「index」の値が「2」である場合、リソース管理部306は、「"url[2]"」に対応するリソース(すなわち、「"http://service_a.com/user1/file2.jpg"」)を取得する。
そして、リソース管理部306は、取得したリソースをパラメータ置換部307に返信する。
次に、パラメータ置換部307は、リソース管理部306からリソースが返信されると、パラメータ情報に含まれるパラメータ値に定義されている置換指定を、当該リソースで置換する(ステップS1613)。
すなわち、パラメータ置換部307は、例えば、変数「index」の値が「1」である場合、パラメータ情報「"location":"#{result.getFileList.url[index]}"」に含まれる置換指定を、リソース「"http://service_a.com/user1/file1.jpg"」で置換する。同様に、パラメータ置換部307は、例えば、変数「index」の値が「2」である場合、パラメータ情報「"location":"#{result.getFileList.url[index]}"」に含まれる置換指定を、リソース「"http://service_a.com/user1/file2.jpg"」で置換する。
そして、パラメータ置換部307は、置換後のパラメータ情報を反復コンポーネント401に返信する。
次に、反復コンポーネント401は、処理フローの実行要求をフロー実行部301に送信する(ステップS1614)。なお、当該実行要求には、パラメータ情報1121のパラメータ値として定義されたフローIDと、型変換管理部304から受信したデータと、置換後のパラメータ情報1122とが含まれる。
ここで、置換後のパラメータ情報1122は、パラメータ置換部307により置換指定が置換された後のパラメータ情報1122である。ただし、上記のステップS1609において、パラメータ情報1122に置換指定が含まれないと判定された場合、反復コンポーネント401は、当該パラメータ情報122を、処理フローの実行要求に含めれば良い。
このように、反復コンポーネント401は、子フローのフロー詳細を示すパラメータ情報に含まれるパラメータ値に置換指定が定義されている場合には、当該置換指定に対応するリソースに置換した上で、置換後のパラメータ情報をフロー実行部301に送信する。
次に、フロー実行部301は、処理フローの実行要求を受信すると、当該実行要求に含まれるパラメータ情報1122により示されるフロー詳細に基づく一連の処理(すなわち、子フロー)を実行する(ステップS1615)。そして、フロー実行部301は、当該一連の処理の処理結果を示すデータを反復コンポーネント401に返信する。
次に、反復コンポーネント401は、一連の処理(子フロー)の処理結果を示すデータをフロー実行部301から受信すると、処理結果の保存要求をリソース管理部306に送信する(ステップS1616)。なお、当該保存要求には、一連の処理結果を示すデータが含まれる。
リソース管理部306は、処理結果の保存要求を受信すると、当該保存要求に含まれるデータに基づいて、リソース管理情報記憶部170に記憶されているリソース管理情報170Dに処理結果を保存する(ステップS1617)。そして、リソース管理部306は、保存結果を反復コンポーネント401に返信する。
ここで、リソース管理情報170Dに保存された子フローの処理結果について、図17を参照しながら説明する。図17は、子フローの処理結果が保存されたリソース管理情報の一例を示す図である。
図17に示すように、リソース管理情報170Dには、子フローの処理結果172が保存されている。すなわち、処理結果172には、1回目(変数「index」の値が「0」のとき)に実行された子フローの処理結果を示す「"self[0]"」が含まれる。同様に、2回目(変数「index」の値が「1」のとき)の子フローが実行された場合、処理結果172には、2回目に実行された子フローの処理結果を示す「"self[1]"」が含まれる。以降も同様に、N回目(変数「index」の値が「N−1」のとき)の子フローが実行された場合、処理結果172には、2回目に実行された子フローの処理結果を示す「"self[N−1]"」が含まれる。
このように、処理結果172には、反復実行された子フローの処理結果が格納される配列「"self"」が含まれる。したがって、本実施形態に係るサービス提供システム10は、例えば、「"self"」を用いてパラメータ情報を定義することで、各コンポーネントは、子フローの処理結果を用いた処理を実行することができるようになる。
図16に戻る。反復コンポーネント401は、子フローの処理結果を示すデータをフロー実行部301から受信すると、実行済回数を示す変数「index」の値に「1」を加算する(ステップS1618)。
このように、反復コンポーネント401は、処理フロー(子フロー)の実行要求を繰り返しフロー実行部301に送信することで、当該子フローを繰り返し実行させる。これにより、本実施形態に係るサービス提供システム10では、反復コンポーネント401により、処理フローに含まれる1以上の処理の反復を実現することができる。
ここで、上記のステップS1615における子フローの実行処理について、図18を参照しながら説明する。図18は、本実施形態に係る子フローの実行処理の一例を示すシーケンス図である。
フロー実行部301は、処理フローの実行要求を受信すると、当該実行要求に含まれる置換後のパラメータ情報1122に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1801)。
すなわち、フロー実行部301は、置換後のパラメータ情報1122の処理定義1131に含まれる「"component"」に定義されているコンポーネント名「"getFile"」のコンポーネントの取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、コンポーネント名「"getFile"」のコンポーネント(すなわち、ファイル取得コンポーネント404)を生成する(ステップS1802)。なお、ファイル取得コンポーネント404の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したファイル取得コンポーネント404をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、ファイル取得コンポーネント404が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
次に、フロー実行部301は、コンポーネント実行要求をファイル取得コンポーネント404に送信する(ステップS1803)。なお、当該実行要求には、データと、パラメータ情報とが含まれる。
ここで、パラメータ情報は、置換後のパラメータ情報1122の処理定義1131に含まれる「"parameters"」に定義されているパラメータ名「"location"」のパラメータ情報である。
すなわち、例えば、変数「index」の値が「0」である場合、当該パラメータ情報は、「"location":"http://service_a.com/user1/file1.jpg"」である。同様に、例えば、変数「index」の値が「1」である場合、当該パラメータ情報は、「"location":"http://service_a.com/user1/file2.jpg"」である。同様に、例えば、変数「index」の値が「N−1」である場合、当該パラメータ情報は、「"location":"http://service_a.com/ user1/fileN−1.jpg"」である。
ファイル取得コンポーネント404は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1804)。すなわち、ファイル取得コンポーネント404は、当該実行要求に含まれるパラメータ情報のパラメータ値により示される格納先URLから電子ファイルを取得(ダウンロード)する。
そして、ファイル取得コンポーネント404は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。なお、ここで返信されるデータには、パラメータ情報のパラメータ値により示される格納先URLから取得(ダウンロード)された電子ファイルが含まれる。
次に、フロー実行部301は、当該データを受信すると、処理フローの実行要求に含まれる置換後のパラメータ情報1122に基づくコンポーネントの取得要求をコンポーネント管理部302に送信する(ステップS1805)。
すなわち、フロー実行部301は、置換後のパラメータ情報1122の処理定義1132に含まれる「"component"」に定義されているコンポーネント名「"ocr"」のコンポーネントの取得要求をコンポーネント管理部302に送信する。
コンポーネント管理部302は、コンポーネントの取得要求を受信すると、コンポーネント名「"ocr"」のコンポーネント(すなわち、OCRコンポーネント405)を生成する(ステップS1806)。なお、OCRコンポーネント405の生成は、コンポーネント共通I/F400に定義されたコンポーネントを生成するためのAPIを用いて行うことができる。
そして、コンポーネント管理部302は、生成したOCRコンポーネント405をフロー実行部301に返信する。すなわち、コンポーネント管理部302は、例えば、OCRコンポーネント405が展開されたメモリ(例えばRAM14)上のアドレスをフロー実行部301に返信する。
次に、フロー実行部301は、コンポーネント実行要求をOCRコンポーネント405に送信する(ステップS1807)。なお、当該実行要求には、データと、パラメータ情報とが含まれる。
ここで、パラメータ情報は、置換後のパラメータ情報1122の処理定義1132に含まれる「"parameters"」に定義されているパラメータ名「"language"」のパラメータ情報(すなわち、「"language": "English"」)である。
OCRコンポーネント405は、コンポーネント実行要求を受信すると、コンポーネントの実行処理を行う(ステップS1808)。すなわち、OCRコンポーネント405は、パラメータ情報を用いて、データに含まれる電子ファイルにOCR処理を行う。なお、OCRコンポーネント405は、ドキュメントサービス部130のOCR処理部132により、電子ファイルにOCR処理を実行する。
そして、OCRコンポーネント405は、当該実行処理の処理結果を示すデータをフロー実行部301に返信する。なお、ここで返信されるデータには、OCR処理後の電子ファイルが含まれる。
以上のように、本実施形態に係るサービス提供システム10では、反復コンポーネント401により、他の処理フロー(子フロー)を繰り返し実行させる。これにより、本実施形態に係るサービス提供システム10では、1以上の処理の反復を実現することができる。
しかも、本実施形態に係るサービス提供システム10は、処理フローに含まれる処理の処理結果(すなわち、他のコンポーネントの処理結果)に応じて、反復コンポーネント401が他の処理フローを繰り返し実行させる回数を動的に制御することができる。
また、本実施形態に係るサービス提供システム10は、子フローが用いるパラメータ情報のパラメータ値を、処理フローに含まれる処理の処理結果等を示すリソースに置換することで、当該処理結果に応じて、子フローの処理内容を動的に制御することができる。
ここで、「OCR配信」サービスを実現する処理フローの他の例について、図19を参照しながら説明する。図19は、「OCR配信」サービスを実現する処理フローの他の例を説明するための図である。
図19に示す処理フローは、反復コンポーネント401により子フローを実行させる毎に、異なるパラメータ情報を用いるものである。すなわち、図19に示す処理フローでは、反復コンポーネント401は、1回目に子フローを実行させるときには、「パラメータ情報1」を用いる一方、2回目に子フローを実行させるときには、「パラメータ情報2」を用いる。
このように、図19に示す処理フローでは、反復コンポーネント401は、実行済回数に応じたパラメータ情報を用いて子フローを実行させる。
ここで、図19に示す処理フローの処理フロー情報1100について、図20を参照しながら説明する。図20は、処理フロー情報の他の例を示す図(その1)である。
図20に示すように、反復コンポーネント401の処理定義1112に含まれる「"parameters"」には、パラメータリスト1124が定義されている。また、パラメータリスト1124には、実行済回数(変数「index」の値)が「0」であるときに用いるパラメータ情報1125と、実行済回数(変数「index」の値)が「1」であるときに用いるパラメータ情報1126とが定義されている。
すなわち、パラメータリスト1124に含まれるパラメータ情報1125及びパラメータ情報1126は、それぞれ、1回目に子フロー実行させるときに用いるパラメータ情報及び2回目に子フローを実行させるときに用いるパラメータ情報である。
このように、パラメータリスト1124には、子フローの実行済回数毎に、パラメータ情報が定義されている。これにより、反復コンポーネント401は、子フローの実行済回数毎に、異なるパラメータ情報を用いて子フローを実行させることができる。
なお、図20に示す処理フロー情報1100には、処理定義1112に子フローに用いるデータを指定するパラメータ情報1127が定義されている。パラメータ情報1127のパラメータ値が「"true"」である場合には、図16に示す反復コンポーネントの実行処理で説明したように、反復コンポーネント401は、リスト取得コンポーネント402の実行処理の処理結果を示すデータを用いて、子フローを実行させる。
一方、パラメータ情報1127のパラメータ値が「"false"」である場合には、反復コンポーネント401は、実行済回数が1以上のときに、1つ前に実行された子フローの実行処理の処理結果を示すデータを用いて、次の子フローを実行させる。すなわち、この場合、子フローは、データとして、「"self[index−1]"」により示される処理結果を用いて処理を実行する。
このように、反復コンポーネント401は、実行済回数が1以上である場合において、1つ前の子フローの実行処理の処理結果を示すデータを用いて、次の子フローの実行処理を行うようにすることもできる。
ここで、図19に示す処理フローにおける反復コンポーネント401の実行処理について、図21を参照しながら説明する。図21は、本実施形態に係る反復コンポーネントの実行処理の他の例を示すシーケンス図(その1)である。以降では、反復コンポーネント401が子フローを実行させる回数(反復回数)は「2」であるものとして説明する。なお、ステップS1601〜ステップS1602及びステップS1615の処理は、図16と同様であるため、その説明を省略する。
ステップS1602に続いて、反復コンポーネント401は、パラメータリスト1124に含まれるパラメータ情報1125及びパラメータ情報1126を評価する(ステップS2101)。すなわち、反復コンポーネント401は、パラメータ情報1125及びパラメータ情報1126の少なくとも一方に置換指定が含まれるか否かを判定する。
ここで、パラメータ情報1125には、パラメータ名「"location"」のパラメータ情報に、置換指定「"#{result.getFileList.url[0]}"」がパラメータ値として定義されている。同様に、パラメータ情報1126には、パラメータ名「"location"」のパラメータ情報に、置換指定「"#{result.getFileList.url[1]}"」がパラメータ値として定義されている。したがって、本実施形態では、反復コンポーネント401は、パラメータ情報1125及びパラメータ情報1126に置換指定が含まれると判定する。
ステップS2102において、パラメータ情報1125及びパラメータ情報1126の少なくとも一方に置換指定が含まれると判定された場合、反復コンポーネント401は、パラメータ情報の置換要求をパラメータ置換部307に送信する(ステップS2102)。なお、当該置換要求には、置換指定が含まれるパラメータ情報「"location":"#{result.getFileList.url[0]}"」及び「"location":"#{result.getFileList.url[1]}"」が含まれる。
次に、パラメータ置換部307は、パラメータ情報の置換要求を受信すると、リソースの取得要求をリソース管理部306に送信する(ステップS2103)。なお、当該取得要求には、置換指定「"#{result.getFileList.url[0]}"」及び「"#{result.getFileList.url[1]}"」が含まれる。
リソース管理部306は、リソースの取得要求を受信すると、当該取得要求に含まれる置換指定に対応するリソースを、リソース管理情報記憶部170に記憶されているリソース管理情報170Dから取得する(ステップS2104)。そして、リソース管理部306は、取得したリソースをパラメータ置換部307に返信する。
すなわち、リソース管理部306は、図14に示すリソース管理情報170Dに保存されている処理結果171に含まれる「"url[0]"」〜「"url[N−1]"」のうち、「url[0]」及び「url[1]」のリソースを取得する。そして、リソース管理部306は、取得したリソースをパラメータ置換部307に返信する。
次に、パラメータ置換部307は、リソース管理部306からリソースが返信されると、パラメータ情報に含まれるパラメータ値に定義されている置換指定を、当該リソースで置換する(ステップS2105)。
すなわち、パラメータ置換部307は、置換指定「"#{result.getFileList.url[0]}"」をリソース「"http://service_a.com/user1/file1.jpg"」で置換する。同様に、パラメータ置換部307は、置換指定「"#{result.getFileList.url[1]}"」をリソース「"http://service_a.com/user1/file2.jpg"」で置換する。
そして、パラメータ置換部307は、置換後のパラメータ情報を反復コンポーネント401に返信する。
次に、反復コンポーネント401は、処理フローの実行要求をフロー実行部301に送信する(ステップS2106)。なお、当該実行要求には、パラメータ情報1121のパラメータ値として定義されたフローIDと、データと、パラメータ情報1とが含まれる。
ここで、パラメータ情報1は、パラメータ置換部307より返信された置換後のパラメータ情報1125である。
これにより、フロー実行部301により、パラメータ情報1(置換後のパラメータ情報1125として定義されたフロー詳細)に基づく一連の処理が実行される。
また、反復コンポーネント401は、1回目の処理フロー(子フロー)の実行処理の処理結果を示すデータを受信すると、2回目の処理フロー(子フロー)の実行要求をフロー実行部301に送信する(ステップS2106)。なお、当該実行要求には、パラメータ情報1121のパラメータ値として定義されたフローIDと、当該データと、パラメータ情報2とが含まれる。
ここで、パラメータ情報1は、パラメータ置換部307より返信された置換後のパラメータ情報1126である。
これにより、フロー実行部301により、パラメータ情報2(置換後のパラメータ情報1126として定義されたフロー詳細)に基づく一連の処理が実行される。
このように、反復コンポーネント401は、実行済回数毎に、異なるパラメータ情報を指定した子フローの実行要求をフロー実行部301に送信することができる。
ここで、「OCR配信」サービスを実現する処理フローの処理フロー情報1100の他の例について、図22を参照しながら説明する。図22は、処理フロー情報の他の例を示す図(その2)である。
図22に示すように、反復コンポーネント401の処理定義1112に含まれる「"parameters"」には、次の子フローの実行をスキップさせる否かを判定するためのパラメータ情報1128が定義されている。パラメータ情報1128には、次の子フローを実行させるための「"(条件式)"」(例えば、論理式)が定義されている。
これにより、反復コンポーネント401は、「"(条件式)"」を満たす場合に次の子フローを実行させる一方で、「"(条件式)"」を満たさない場合には次の子フローの実行をスキップさせることができる。
なお、パラメータ情報1128には、例えば、子フローの繰り返し実行を中止させるか否かを示す「"breakCondition":"(条件式)"」が定義されていても良い。この場合、「"(条件式)"」には、子フローの繰り返し実行を中止させるための条件式が定義される。これにより、反復コンポーネント401は、パラメータ情報1128に定義された「"(条件式)"」を満たす場合に、子フローの繰り返し実行を中止させることができる。
ここで、図22に示す処理フロー情報1100における反復コンポーネント401の実行処理について、図23を参照しながら説明する。図23は、本実施形態に係る反復コンポーネントの実行処理の他の例を示すシーケンス図(その2)である。なお、ステップS1601〜ステップS1608、ステップS1609〜ステップS1618の処理は、図16と同様であるため、その説明を省略する。
ステップS1604又はステップS1608に続いて、反復コンポーネント401は、パラメータ情報1128に定義された「"(条件式)"」を満たすか否かを判定する(ステップS2301)。
ステップS2301において、「"(条件式)"」を満たすと判定した場合、反復コンポーネント401は、ステップS1609〜ステップS1617の処理を実行させる。
一方で、ステップS2301において、「"(条件式)"」を満たさないと判定した場合、反復コンポーネント401は、ステップS609〜ステップS1617の処理を実行させない。すなわち、反復コンポーネント401は、子フローを実行させずに、実行済回数を示す変数「index」に「1」を加算する。
これにより、反復コンポーネント401は、例えば、実行済回数を示す変数「index」が「n」である場合において、「"(条件式)"」を満たさないときは、n+1回目の子フローの実行をスキップすることができる。
以上のように、本実施形態に係るサービス提供システム10は、サービスを実現する一連の処理において、1以上の処理を反復実行することができる。
しかも、本実施形態に係るサービス提供システム10では、当該1以上の処理を反復実行させる回数を、他の処理の処理結果に応じて動的に異なるようにすることができる。また、本実施形態に係るサービス提供システム10では、当該1以上の処理に用いるデータやパラメータ等を、当該1以上の処理の実行回数に応じて動的に決定することができる。
さらに、本実施形態に係るサービス提供システム10は、子フローが用いるパラメータ情報のパラメータ値を、処理フローに含まれる処理の処理結果等を示すリソースに置換することで、当該処理結果に応じて、子フローの処理内容を動的に制御することができる。
これにより、本実施形態に係るサービス提供システム10では、1以上の処理の反復により実現される種々のサービスを提供することができるようになる。
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。