以下、図面に基づいて本発明の実施の形態を説明する。図3は、本発明の実施の形態における印刷システムの構成例を示す図である。図3に示されるように、本実施の形態における印刷システム1は、印刷サーバ10、文書管理サーバ20、Webサーバ30、及び端末40等を有しており、それぞれはインターネットやLAN等のネットワーク(有線、無線の別を問わない)を介して接続されている。
印刷サーバ10は、文書データ等をプリンタ50に印刷させる機能等をWebサービスとして提供するコンピュータであり、かかる機能が実装されている印刷サービス11を有している。
文書管理サーバ20は、文書データの管理機能をWebサービスとして提供するコンピュータであり、かかる文書管理機能が実装されている文書管理サービス24を有している。文書管理サービス24は、SOAPリスナ21、文書管理手段22、及び文書管理DB23等から構成されている。SOAPリスナ21は、文書管理手段22の機能をSOAPのRPCによって呼び出せるようにするための機能が実装されているモジュールである。文書管理手段22は、文書管理DB23に格納されている文書情報を操作するためのインタフェースを提供するモジュールである。例えば、文書管理手段22は、文書管理DB23より文書データを取得するための文書取得メソッド、文書データの一覧情報を取得すための文書一覧取得メソッド、及び文書管理DB23に文書データを登録するための文書登録メソッド等を有している。文書管理DB23は、文書データが格納されているデータベースである。
Webサーバ30は、印刷サーバ10や文書管理サーバ20等の機能を利用させるためのWebページを提供するいわゆるWebサーバであり、httpd31、Webアプリ32、及びSOAPプロキシ33等から構成されている。httpd31は、端末40との間におけるHTTPによる通信を制御するデーモンプログラムである。httpd31は、端末40からのHTTPリクエストを受信すると、HTTPリクエストにおいて指定されたURLに対応するWebアプリ32を呼び出し、Webアプリ32が処理結果として出力したWebページを端末40に送信する。
Webアプリ32は、Webページの生成を主な機能とするいわゆるWebアプリケーションである。Webアプリ32は、必要に応じて印刷サーバ10や文書管理サーバ20に対して所定の処理要求を行い、その結果を表示するWebページを生成する。例えば、Webアプリ32は、文書管理サーバ20の文書管理DB23に管理されている文書データの一覧を表示するWebページ(以下、「文書一覧ページ」という。)等を生成する。
SOAPプロキシ33は、印刷サーバ10や文書管理サーバ20に実装されている各種メソッドをSOAPのRPCによって呼び出すためのインタフェースをWebアプリ32に対して提供するモジュールである。SOAPプロキシ33により、Webアプリ32は、印刷サーバ10や文書管理サーバ20の機能をネットワーク通信を意識することなく透過的にメソッド呼び出しすることが可能となっている。
なお、図中においては、Webアプリ32は一つのブロックとして示されているが、インスタンスとしては複数存在する。例えば、文書一覧ページを生成するためのモジュールや、その他のWebページを生成するモジュール毎にソースコードが実装されている。
端末40は、ユーザが印刷システム1利用するためのインタフェース(Webページ)をWebブラウザ41によって提供するPC(Personal Computer)、PDA(Personal Digital(Data) Assistants)、又は携帯電話等の通信機能を有する端末である。
なお、図中、端末40やプリンタ50は、一つのブロックとして示されているが、物理的に一台の端末やプリンタに限定されるという趣旨ではない。一般的な情報システムと同様、多数の端末やプリンタを接続することが可能である。
次に、印刷サーバ10のハードウェア構成例について説明する。図4は、本発明の実施の形態における印刷サーバのハードウェア構成例を示す図である。図4の印刷サーバ10は、それぞれバスBで相互に接続されているドライブ装置100と、補助記憶装置102と、メモリ装置103と、演算処理装置104と、インタフェース装置105とを有するように構成される。
印刷サーバ10における処理を実現するプログラムは、CD―ROM等の記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。
補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。メモリ装置103は、プログラムの起動指示があったときに、補助記憶装置102からプログラムを読み出して格納する。演算処理装置104は、メモリ装置103に格納されたプログラムに従って印刷サーバ10に係る機能を実行する。インタフェース装置105は例えばモデム、ルータ等で構成され、ネットワークに接続するために用いられる。なお、文書管理サーバ20やWebサーバ30についても図4に示される印刷サーバ10と同様のハードウェア構成をとることができる。
次に、印刷サーバ10における印刷サービス11の詳細について説明する。図5は、印刷サーバにおける印刷サービスの機能構成例を示す図である。図5に示されるように、印刷サービス11は、SOAPリスナ111、印刷要求受付手段112、印刷指示手段113、文書アプリ114、プリンタドライバ115、スプーラ116、ポートプログラム117、プリンタ制御手段118、イベント監視手段119、非同期管理手段120、文書管理接続手段121、印刷ジョブキュー131、及びジョブ管理ファイル132等から構成される。
SOAPリスナ111は、印刷要求受付手段112が有する後述するメソッドを、Webサーバ30等からSOAPのRPCによって呼び出せるようにするための機能を提供するモジュールである。
印刷要求受付手段112は、印刷サービス11の機能を提供するためのメソッドが実装されているモジュールである。例えば、印刷要求受付手段112には、文書データの印刷要求を受け付けるための印刷メソッドや、印刷ジョブの一覧情報の取得要求を受け付けるためのジョブ一覧取得メソッド等が実装されている。印刷サービス11の機能をSOAPのRPCによって呼び出せるようにすることで、インターネット環境におけるシステム構築において、クライアント側の実装を容易にすることができる。
印刷指示手段113は、印刷要求受付手段112における印刷メソッドからの印刷要求に応じて、文書アプリ114に対して文書データの印刷指示を行うモジュールである。但し、印刷指示手段113は、印刷メソッドから印刷要求を受けたときに直ちに印刷ジョブを実行するわけではない。印刷指示手段113は、後述する非同期管理手段120と印刷ジョブキュー131とを利用することによって、印刷要求とは非同期に印刷ジョブを実行する。
非同期管理手段120は、印刷指示手段113に対し定期的に印刷ジョブの実行を促すためのプログラムであり、独立したプロセスとして起動されている。印刷ジョブキュー131は、印刷指示手段113が印刷メソッドから受けた印刷要求に含まれている、印刷ジョブの内容を規定する情報(以下、「ジョブ情報」という。)を一時的に保存しておくためのファイルである。文書アプリ114は、文書データの生成や編集に利用されるアプリケーションであり、例えば、ワープロソフト、表計算ソフト等の各種アプリケーションが該当する。プリンタドライバ115は、プリンタを購入すると当該プリンタに添付されて提供されるいわゆるプリンタドライバであり、文書データを印刷先となるプリンタ50が処理可能な形式の印刷データに変換するためのモジュールである。
スプーラ116は、Windows(登録商標)等のOS(Operating System)によって提供されるいわゆるスプーラであり、プリンタドライバ115によって生成された印刷データを一時的に保存し、保存されている印刷データを順次ポートプログラム117に対して出力する。
ポートプログラム117は、一般的にポートモニタと呼ばれるモジュールの位置づけに相当するものであるが、本実施の形態においては予めOSによって提供されているポートモニタに代えて、独自に実装されたものが用いられている。すなわち、一般的なポートモニタは、スプーラから出力された印刷データをプリンタに対して出力することをその機能としているが、ポートプログラム117は、プリンタに対してではなく、プリンタ制御手段118に対して印刷データを出力するように実装されている。
なお、Windows(登録商標)においては、予め提供されているポートモニタではなく、独自に実施したモジュールをスプーラに呼び出させるように設定するための機能が提供されている。かかる機能を利用して、スプーラ116からポートプログラム117が呼び出されるようにしてもよい。
プリンタ制御手段118は、ポートプログラム117から出力された印刷データをプリンタ50に対して送信するとともに、プリンタ50における印刷処理の状態を常時監視するプログラムである。プリンタ制御手段118は、プリンタ50における印刷処理の状態が変化したとき等に、かかる旨を示すイベントを発生させる。イベント監視手段119は、プリンタ制御手段118が発生させたイベントに基づいて、当該イベントの種類に応じた処理(詳細については後述する。)を実行するプログラムである。
文書管理接続手段15は、文書管理サーバ20における文書管理手段22の機能をSOAPのRPCによって呼び出すためのインタフェースを提供するモジュールである。
ジョブ管理ファイル132は、印刷ジョブに関する各種情報(ジョブ管理情報)を保持するためのファイルであり、印刷ジョブが発生するときに、印刷ジョブごとに生成される。
以下、印刷システム1の処理手順について説明する。図6〜図8は、印刷システムにおける文書データの印刷処理を説明するためのシーケンス図である。
ステップS111において、端末40のユーザが、Webブラウザ41に表示された文書一覧ページにおいて、印刷対象とする文書データ(以下、「対象データ」という。)を複数選択し、更に設定ページにおいて印刷処理を規定するパラメータ(以下、「印刷パラメータ」という。)を設定すると、Webブラウザ41は、Webサーバ30に対し複数の対象データの印刷要求を送信する。
図9は、文書一覧ページの表示例を示す図である。文書一覧ページ410は、文書一覧ページ410のURLをWebブラウザ41に入力することにより、Webブラウザ41に表示させることができる。すなわち、ユーザによるURLの入力に基づいて、Webブラウザ41が文書一覧ページ410の送信要求をWebサーバ30に送信すると、Webサーバ30のWebアプリ32が、文書管理サーバ20の文書管理手段22を介して、文書管理DB23の所定のフォルダの文書の一覧情報を取得する。Webアプリ32は、取得した文書データの一覧情報を掲載したWebページ(文書一覧ページ410)を生成する。Webアプリ32によって生成された文書一覧ページ410は、httpd31によって端末40に送信され、Webブラウザ41に表示される。
文書一覧ページ410では、領域411に各文書データがサムネール表示されている。ここで、一つの文書データが表示されている矩形領域を「セル(cell)」と呼ぶこととすると、各セルは、文書データを選択させるためのチェックボタンと、文書データの名前(文書名)を表示する文書名表示領域と、アイコン表示領域とを有している。例えば、文書名が「文書3」の文書データが表示されているセルについては、チェックボタン413、文書名表示領域414、及びアイコン表示領域415がある。
ユーザが、印刷対象とする文書データに対応するチェックボタンをチェックし(図9においては、文書1及び文書2をチェック)、文書出力メニュー412をクリックすることにより表示される図示しないメニュー項目「印刷」を選択すると、Webブラウザ41には、設定ページが表示される。
図10は、設定ページの表示例を示す図である。図10の設定ページ420は、対象文書表示領域421と、印刷パラメータ設定領域422とから構成されている。対象文書表示領域421においては、文書一覧ページ410において印刷対象として選択された対象データの文書名の一覧(文書1、文書2)が表示されている。印刷パラメータ設定領域422においては、印刷先とするプリンタ、原稿のサイズ、印刷方向、及び印刷開始位置等の印刷パラメータの設定が可能である。
ユーザが、設定ページ420において印刷パラメータを設定し、OKボタン423をクリックすると、Webブラウザ41は、上述したステップS11における印刷要求を、印刷パラメータを伴ってWebサーバ30に対して送信する。
ステップS111に続いてステップS112に進み、Webサーバ30のWebアプリ32は、印刷サーバ10の印刷要求受付手段112の印刷メソッドをSOAPのRPCによって呼び出すためのSOAPメッセージを印刷サーバ10に送信することにより、対象データの印刷を印刷サーバ10に要求する。
図11は、印刷メソッドを呼び出すときのSOAPメッセージの例を示す図である。図11のSOAPメッセージ710において、タグ711のタグ名である「docPrintAsync」が、印刷メソッドのメソッド名である。また、記述712は、引数情報である。例えば、<sessionId>タグで囲まれた記述7121は、印刷サーバ10とのセッションのセッションIDが指定された引数である。なお、セッションIDには、印刷要求に係るユーザ名を特定するための情報も含まれている。<jobName>タグで囲まれた記述7122は、印刷要求に係る印刷ジョブのジョブ名が指定された引数である。<printerName>タグで囲まれた記述7123は、印刷先のプリンタ名が指定された引数である。また、<documentList>タグで囲まれた記述713は、印刷対象として指定された文書データのリストが指定された引数である。すなわち、それぞれ<Doument>タグで囲まれた記述714及び記述715が、印刷対象とされた各文書を特定する情報を示す。例えば、記述714において、<documentName>タグで囲まれた記述7141は、文書データの文書名(「文書1」)を示す。また、<documentId>タグで囲まれた記述7142は、文書データの文書Id(「1_2_1_3」)を示す。また、<repositoryUrl>で囲まれた記述7143は、当該文書データの取得先となる文書管理サービス24のURLを示す。
ステップS112に続いてステップS113に進み、印刷メソッドが呼び出された印刷サーバ10の印刷要求受付手段112は、印刷指示手段113に対し対象データの印刷を要求する。ステップS113に続いてステップS114に進み、印刷指示手段113は、印刷要求に応じて実行すべき印刷ジョブを一意に識別するための情報であるジョブIDを一つの印刷要求に対して一つ採番する。ここでは、ジョブIDとして「001」が採番されたこととし、ジョブIDが001である印刷ジョブを「印刷ジョブ001」と呼ぶこととする。
ステップS114に続いてステップS115に進み、印刷指示手段113は、印刷ジョブ001のジョブ管理情報を保存するジョブ管理ファイル132を生成し、生成したジョブ管理ファイル132に印刷ジョブ001のジョブ管理情報の初期値として印刷メソッドの引数に指定された情報等を登録する。
図12は、印刷ジョブのジョブ管理情報の構成例を示す図である。図12に示されるように、本実施の形態における印刷ジョブのジョブ管理情報は、一つの親ジョブ情報1321と、当該印刷ジョブにおいて印刷対象とされている文書データごとの子ジョブ情報1322及び1323とから構成される。すなわち、印刷指示手段113は、一つの印刷ジョブを、印刷要求に一対一に対応する親ジョブと、当該印刷ジョブにおいて印刷対象とされている文書ごとに対応する子ジョブとから構成されるものとし、それぞれを親ジョブ情報と子ジョブ情報とによって管理するというわけである。なお、以下において、親ジョブと子ジョブとの区別を要しない場合は、両者を総称して単に「ジョブ」という。
親ジョブ情報1321は、一つの親ジョブを表現する情報であり、親ジョブID、子ジョブIDの配列、ジョブ名、プリンタ名、対象データ取得先URLの配列、ジョブステータス、及びユーザ名等の項目から構成される。親ジョブIDは、ステップS114において採番された当該印刷ジョブのジョブIDである。子ジョブIDの配列は、当該印刷ジョブに属する子ジョブのジョブID(子ジョブID)の配列である。ジョブ名は、印刷ジョブの名前である。プリンタ名は、出力先として指定されたプリンタの名前である。対象データ取得先URLは、対象データ取得先URLの配列は、各対象データの取得先として指定された文書管理サービス24のURLの配列である。ジョブステータスは、親ジョブのジョブの状態を示す文字列であり、親ジョブに属する全ての文書データに対する印刷処理の状態を総合して表す。ユーザ名は、印刷を要求したユーザのユーザ名である。
一方、子ジョブ情報は、各子ジョブを表現する情報であり、子ジョブID、文書Id、文書名、及びジョブステータス等から構成される。子ジョブIDは、各子ジョブを識別するためのIDである。すなわち、印刷指示手段113は、ジョブ管理情報の登録にあたり、印刷対象とされている文書データごとに子ジョブIDを採番し、その子ジョブIDを子ジョブ情報に登録する。文書Id及び文書名は、当該子ジョブが対応する文書データの文書Id又は文書名である。ジョブステータスは、当該子ジョブが対応する文書データの印刷処理の状態を示す文字列である。初期値としては、待機中を示す「pending」が登録される。
このように、本実施の形態における印刷サーバ10においては、印刷要求を受けた直後から、当該印刷要求において印刷対象とされている文書データごとに独立して印刷処理の状態が管理される。また、同一の印刷要求に基づく親ジョブ情報及び子ジョブ情報は、同一のジョブ管理ファイル132に保存されることによって関連付けられる。但し、この関連付けは、他の方法によって行ってもよい。例えば、親ジョブ情報と各子ジョブ情報とを別個のジョブ管理ファイル132に保存し、親ジョブ情報内に各子ジョブ情報が保存されたジョブ管理ファイル132のファイル名を登録するようにしてもよい。
ステップS115に続いてステップS116に進み、印刷指示手段113は、待機中の印刷ジョブを管理するため、親ジョブIDと当該印刷ジョブのジョブ管理ファイル132の識別情報(例えば、ファイル名)とを関連づけて印刷ジョブキュー131に登録する。
図13は、印刷ジョブキューにおけるジョブ情報の構成例を示す図である。図13に示されるようにジョブ情報1310は、親ジョブID及びジョブ管理ファイル名等から構成されている。印刷ジョブキュー131には、印刷処理が開始されていない印刷ジョブのそれぞれについてジョブ情報1310が管理される。
ステップS116に続いてステップS117に進み、印刷指示手段113は、ここでは印刷処理は実行せずに、親ジョブIDを印刷要求受付手段112に対して出力する。ステップS117に続いてステップS118に進み、印刷要求受付手段112は、印刷メソッドの返却情報として、親ジョブID及び子ジョブID等を含むSOAPメッセージをWebアプリ32に対して送信する。
図14は、印刷メソッドの返却情報を含むSOAPメッセージの例を示す図である。図14のSOAPメッセージ720において、<returnValue>タグで囲まれた記述721は、印刷メソッドの戻り値であり、「0」は正常に処理されたことを示す。記述722には、印刷要求に応じて生成された印刷ジョブの親ジョブIDが返却情報として含まれている。更に、<subJobIds>タグに囲まれた記述723には、子ジョブIDのリストが返却情報として含まれている。すなわち、それぞれ<item>タグで囲まれた記述7231及び記述7232は、各子ジョブIDを示す。
なお、SOAPメッセージ720に含まれて返却された親ジョブID及び子ジョブIDは、Webアプリ32によってWebサーバ30にユーザごとに保存され、Webアプリ32が印刷ジョブの一覧情報取得する際(後述される)等において用いられる。
ステップS118に続いてステップS119に進み、Webアプリ32は、印刷要求に対する応答として、印刷要求を受け付けた旨を表示するWebページ(以下、「応答ページ」という。)をhttpd31を介してWebブラウザ41に送信する。応答ページは、Webブラウザ41によって表示され、ユーザは、印刷要求が正常に受け付けられたことを確認することができる。
一方、印刷サーバ10においては、非同期管理手段120が定期的に印刷指示手段113に対して印刷ジョブの実行を促している(S120)。非同期管理手段120からの呼び出しに応じて、印刷指示手段113は、印刷ジョブキュー131を参照し、印刷ジョブキュー131にジョブ情報1310が登録されているか否か、すなわち、待機中の印刷ジョブが存在するか否かを確認する(S121)。
印刷ジョブキュー131にジョブ情報1310が登録されているときは、ステップS122に進み、印刷指示手段113は、ジョブ情報1310におけるジョブ管理ファイル名より、当該印刷ジョブのジョブ管理ファイル132を特定し、そのジョブ管理ファイル132における親ジョブ情報1321と一つの子ジョブ情報(以下「カレント子ジョブ情報」といい、カレント子ジョブ情報に係る子ジョブを「カレント子ジョブ」という。)とを取得し、カレント子ジョブを処理対象にすると共に、ジョブ管理ファイル132におけるカレント子ジョブ情報のジョブステータスの値を印刷処理中であることを示す「processing」に更新する(S122)。なお、ここで、印刷指示手段113は、子ジョブ情報におけるジョブステータスが「pending」以外である子ジョブについては処理対象とはしない。したがって、例えば、後述される印刷処理のキャンセル指示等によって、キャンセルされた子ジョブについては印刷処理は実行されない。
図15は、子ジョブのジョブステータスがprocessingに更新されたジョブ管理ファイルにおけるジョブ管理情報の例を示す図である。図15に示されるように子ジョブ情報1322におけるジョブステータスの値が、「pending」から「processing」に更新されている。
ステップS122続いてステップS123に進み、印刷指示手段113は、親ジョブ情報1321における「対象データ取得先URLの配列」によって特定される文書管理サービス24の文書管理手段22から、カレント子ジョブ情報の「文書Id」によって特定される対象データを取得するため、文書管理手段22のセッション開設メソッドをSOAPのRPCによって呼び出すことにより、文書管理手段22に対しセッションの開設を要求する。
ステップS123に続いてステップS124に進み、文書管理手段22は、印刷指示手段113とのセッションを開設し、セッション開設メソッドの戻り値として当該セッションを一意に識別するセッションIDを印刷指示手段113に対して送信する。(S125)。
ステップS125に続いてステップS126に進み、印刷指示手段113は、文書管理手段22の文書取得メソッドを呼び出すことにより、文書管理手段22に対し対象データの送信を要求する。なお、文書取得メソッドの引数には対象データを特定するための情報として文書Idが指定される。文書管理手段22は、文書管理DB23より対象データを検索し(S127)、当該対象データを印刷指示手段113に対して送信する(S128)。
ステップS128に続いてステップS129(図7)に進み、印刷指示手段113は、文書管理サーバ20より取得した対象データの種別に対応する文書アプリ114に対して対象データの印刷を要求する。文書アプリ114が、プリンタドライバ115に対し対象データの印刷を要求すると(S130)、プリンタドライバ115は、対象データを印刷データに変換し、その印刷データを所定のフォルダに保存する(S131)。印刷データが保存されると、処理の制御が文書アプリ114を経て印刷指示手段113に復帰する(S132、S133)。
ステップS133に続いてステップS134に進み、印刷指示手段113は、一時的に保存されている印刷データを取得し、当該印刷データをスプーラ116に対して出力することによりスプーラ116に対して印刷要求を行う。ステップS134に続いてステップS135に進み、スプーラ116は、印刷要求に対する応答を印刷指示手段113に対して行う。スプーラ116は、周知なように印刷要求に対して非同期に印刷処理を実行するため、ステップS135における応答は、後述する印刷処理(S138)が実行される前に行われる。
上記ステップS122からステップS135までの処理は、子ジョブの数、すなわち印刷ジョブにおいて印刷対象とされている文書データの数だけ繰り返される(S136)。したがって、処理が繰り返されるたびに各子ジョブの子ジョブ情報におけるジョブステータスがprocessingに更新され、全ての子ジョブのジョブステータスがprocessingに更新されたときに、親ジョブ情報1321におけるジョブステータスがprocessingに更新される。すなわち、親ジョブのジョブステータスは、全ての子ジョブのジョブステータスが同じ段階を示す値に更新されたときに当該段階を示す値に更新されるというわけである。
ジョブステータスが「pending」であった全ての子ジョブについてステップS122からステップS135までの処理が完了すると、処理の制御が印刷指示手段113から非同期管理手段14に復帰し、ステップS120において非同期管理手段14によって開始された処理が終了する(S137)。
一方、子ジョブごとに印刷データが入力されたスプーラ116は、印刷指示手段113からの要求とは非同期に一の子ジョブに係る印刷データの印刷要求をポートプログラム117に対して行う(S138)。ステップS138に続いてステップS139に進み、ポートプログラム117は、ジョブ管理ファイル132において当該一の子ジョブに対する子ジョブ情報のジョブステータスの値を、、プリンタ50によって処理中であることを示す「executing」に更新する。なお、厳密にはこのタイミングにおいてプリンタ50における処理は開始されていないが、後述するように、この直後にプリンタ50に対して印刷要求がなされるため、本実施の形態においては、このタイミングにおいてジョブステータスの値を「executing」に更新している。
図16は、子ジョブのジョブステータスがexecutingに更新されたジョブ管理ファイルにおけるジョブ管理情報の例を示す図である。図16に示されるように子ジョブ情報1322におけるジョブステータスの値が、「processing」から「executing」に更新されている。
上記ステップS138及びステップS139の処理は、子ジョブの数だけ繰り返される(S140)。したがって、処理が繰り返されるたびに、各子ジョブの子ジョブ情報におけるジョブステータスが「executing」に更新され、全ての子ジョブのジョブステータスが「executing」に更新されたときに、親ジョブ情報1321におけるジョブステータスが「executing」に更新される。
全ての子ジョブについてステップS138及びステップS139の処理が完了すると、ステップS141(図8)に進み、ポートプログラム117は、プリンタ制御手段118に対して印刷要求を行う。ステップS141に続いてステップS142に進み、プリンタ制御手段118は、プリンタ50に対して印刷データを送信し、当該印刷データの印刷を要求する。プリンタ50は、印刷要求を受け付け、当該印刷要求に応じてプリンタ50において実行されるジョブ(以下、「機器ジョブ」という。)を一意に識別するためのID(機器ジョブID)を採番し、当該機器ジョブIDをプリンタ制御手段118に対して送信する(S143)。機器ジョブIDは、更に、プリンタ制御手段118からポートプログラム117に出力される(S144)。一方、印刷要求を受けたプリンタ50は、所定のタイミングで機器ジョブ、すなわち、印刷データの印刷処理を実行する(S146)。
なお、ステップS141からステップS144までの処理は、子ジョブの数だけ繰り返される(S140)。したがって、各子ジョブ係る印刷データが順次プリンタ50に送信され、各印刷データについてプリンタ50による印刷が実行される(S146)。
プリンタ制御手段118は、機器ジョブIDをポートプログラム117に対して通知した後(S144)、プリンタ50に対して各子ジョブに係る印刷処理の状態の問い合わせを行う(S43)。この問い合わせは、プリンタ50における印刷処理が完了するまで繰り返し行われる。なお、本実施の形態において印刷処理の「完了」とは、印刷処理が正常終了した状態だけでなく、中止された状態又は中断されている状態等、ユーザによってなんらかの操作が行われなければ処理が再開されないような状態をも意味する。
プリンタ50から印刷処理の状態が返信されると(S148)、プリンタ制御手段118は、プリンタ50における印刷処理の状態を示すイベントを発生させる。当該イベントは、イベント監視手段119によって検出される(S149)。なお、当該イベントに伴って、子ジョブの子ジョブIDと機器ジョブIDとがイベント監視手段119に通知される。
ここで、イベントの具体的な実装方法としては、例えば、第一の方法として、プリンタ制御手段118が、UNIX(登録商標)OS等においてプロセス間通信の一種として用いられているシグナルを発生させるようにしてもよい。この場合、イベント監視手段119は、当該シグナルをフェッチできるように実装しておけばよい。
また、第二の方法として、プリンタ制御手段118が、印刷処理の状態を所定のファイルに出力するようにしてもよい。この場合は、イベント監視手段119は、当該所定のファイルの更新をポーリングなどによって監視するように実装しておけばよい。
更に、第三の方法として、プリンタ制御手段118が、イベント監視手段119の所定のメソッドを呼び出すようにしてもよい。
ステップS149に続いてステップS150に進み、イベント監視手段119は、印刷処理の状態が通知された子ジョブについてジョブ管理ファイル132におけるジョブステータスの値を、プリンタ制御手段118が発生させたイベントの内容に従って更新する。例えば、当該イベントが、印刷処理が正常終了していることを示しているときは、イベント監視手段119は、ジョブステータスの値を「completed」に更新する。また、当該イベントが、エラーの発生により印刷処理が中止されたことを示しているときは、イベント監視手段119は、ジョブステータスの値を「aborted」に更新する。また、当該イベントが、エラーの発生により印刷処理が中断していることを示しているときは、イベント監視手段119は、ジョブステータスの値を「stopped−error」に更新する。
図17は、子ジョブのジョブステータスがcompletedに更新されたジョブ管理ファイルにおけるジョブ管理情報の例を示す図である。図17に示されるように子ジョブ情報1322におけるジョブステータスの値が、「executing」から「completed」に更新されている。
上記ステップS147からステップS150までの処理は、子ジョブの数だけ繰り返される。したがって、処理が繰り返されるたびに、各子ジョブの子ジョブ情報におけるジョブステータスが「completed」に更新され、全ての子ジョブのジョブステータスが「completed」に更新されたときに、親ジョブ情報1321におけるジョブステータスが「completed」に更新される。以上で印刷要求に基づく印刷処理が終了する。
次に、端末40からWebサーバ30に対して印刷ジョブの一覧情報(以下「ジョブ一覧」という。)の提供が要求された場合の処理について説明する。図18は、ジョブ一覧の提供処理を説明するためのシーケンス図である。
ステップS201において、ユーザが、印刷サーバ10における印刷ジョブの一覧情報を表示するWebページ(以下、「ジョブ一覧ページ」という。)のURLをWebブラウザ41に入力すると、Webブラウザ41は、Webサーバ30に対してジョブ一覧ページの送信を要求する。ステップS201に続いてステップS202に進み、Webアプリ32は、印刷サーバ10の印刷要求受付手段112のジョブ一覧取得メソッドをSOAPのRPCにより呼び出すためのSOAPメッセージを印刷サーバ10に送信することにより、印刷ジョブの一覧情報の提供を印刷サーバ10に要求する。
図19は、ジョブ一覧取得メソッドを呼び出すときのSOAPメッセージの例を示す図である。図19のSOAPメッセージ730において、タグ731のタグ名である「getJobList」が、ジョブ一覧取得メソッドのメソッド名である。また、記述732は、引数情報である。例えば、<fromId>タグで囲まれた記述7321は、一覧情報の対象とする印刷ジョブのうち起点とされる親ジョブIDが指定された引数である。すなわち、印刷サーバ10においては、複数の印刷ジョブが所定の順番(例えば、印刷要求がされた順)によって管理されておりその順番において起点となる印刷ジョブが指定される。なお、ジョブ一覧取得メソッドを最初に呼び出す場合は、この引数には何も指定されない。
<jobCount>タグで囲まれた記述7322は、一覧情報の対象とする印刷ジョブの個数が指定された引数である。<jobType>タグで囲まれた記述7323は、親ジョブのみを対象とするか子ジョブも含めて対象とするかが指定された引数である。例えば、前者の場合は「Parent」が指定され、後者の場合は「Subjob」が指定される。<jobStatus>タグで囲まれた記述7324は、処理が完了したジョブのみを対象とするか(Completed)、未完了のジョブのみを対象とするか(NotCompleted)、又は全てのジョブを対象とするか(ALL)が指定された引数である。<order>タグで囲まれた記述7325は、起点とされたジョブから降順で取得するか(Descend)昇順で取得するか(Ascend)が指定された引数である。<maskType>タグで囲まれた記述7326は、自分(カレントユーザ)のジョブのみを対象とするのか(MyJob)、全てのジョブを対象とするのか(All)が指定された引数である。
ステップS202に続いてステップS203に進み、ジョブ一覧取得メソッドが呼び出された印刷要求受付手段112は、ジョブ一覧取得メソッドの入力引数において一覧情報の対象とされた印刷ジョブのそれぞれのジョブ管理ファイル132からジョブ管理情報を取得する。取得された各ジョブ管理情報は、ジョブ一覧取得メソッドの返却情報としてWebアプリ32に対して送信される(S204)。
図20は、ジョブ一覧取得メソッドの返却情報を含むSOAPメッセージの例を示す図である。図20のSOAPメッセージ740において、<jobList>タグで囲まれた記述741には、印刷ジョブの一覧情報が含まれている。すなわち、それぞれ<item>タグで囲まれた記述742及び記述743には、ジョブ管理ファイル132から取得された情報が印刷ジョブごとに含まれている。
例えば、記述742において、<jobId>タグで囲まれた記述7421は、親ジョブIdを示す。<jobStatus>タグで囲まれた記述7422は、親ジョブのジョブステータスを示す。<jobName>タグで囲まれた記述7423は、親ジョブのジョブ名を示す。<userName>タグで囲まれた記述7424は、当該印刷ジョブを要求したユーザのユーザ名を示す。<subJobCount>タグで囲まれた記述7425は、子ジョブの数を示し、<subJobList>タグで囲まれた記述744に子ジョブ情報の一覧が含まれている。すなわち、それぞれ<item>タグで囲まれた記述745及び記述746には、子ジョブごとに子ジョブ情報が含まれている。
例えば、記述745において、<jobId>タグで囲まれた記述7451は、子ジョブIDを示す。<jobName>タグで囲まれた記述7452は、子ジョブのジョブ名を示す。<jobStatus>タグで囲まれた記述7453は、子ジョブのジョブステータスを示す。
以上、ステップS202〜ステップS204までの処理は、一覧の対象とされる全てのジョブの情報が取得されるまで繰り返される(S205)。
ステップS206に進み、Webアプリ32は、ジョブ一覧取得メソッドを呼び出すことによって取得した情報に基づいてジョブ一覧ページを生成し(S206)、生成されたジョブ一覧ページをWebブラウザ41に送信する(S207)。ジョブ一覧ページ41は、Webブラウザ41によって表示される。
図21は、ジョブ一覧ページの表示例を示す図である。図21に示されるようにジョブ一覧ページ430は、ジョブ一覧表示領域431、ボタン432及びボタン433等から構成される。ジョブ一覧表示領域431において、列431bは、親ジョブのジョブ名の一覧が表示される列である。列431dは、各印刷ジョブにおいて印刷対象とされている文書データの文書名の一覧、すなわち各子ジョブに係る文書データの文書名の一覧が表示される列である。列431e、列431fは、各子ジョブに係るユーザ名又は各子ジョブのジョブステータスが表示される列である。このように、ユーザは、複数の文書データを印刷対象として印刷要求を行った場合であっても、その印刷要求に対応する印刷ジョブ単位だけでなく、印刷対象とした文書データごとにそれぞれのジョブステータスを確認することができる。
ボタン432及びボタン433は、親ジョブ又は子ジョブ単位でジョブのキャンセル又はジョブの一時停止等のジョブに対する操作を指定させるためのボタンである。操作対象とするジョブは、ジョブ一覧表示領域431における列431a及び列431cに配置されたチェックボタンによって指定させることができる。
なお、親ジョブ単位での操作が必要でない場合は、例えば、ジョブ一覧ページの構成を図22のようにしてもよい、図22は、ジョブ一覧ページの他の表示例を示す図である。図22のジョブ一覧ページ440におけるジョブ一覧表示領域441には、図21における列431a及び列431bに相当する列が無い。したがって、親ジョブ単位による操作を行うことはできないが、文書データごと(子ジョブごと)にジョブステータスの確認やジョブの操作ができるといった効果については、図21におけるジョブ一覧ページ430と同様である。
以下、図21のジョブ一覧ページ430において、列431a又は列431cにおけるいずれかのチェックボタンがチェックされ、ボタン432がクリックされた場合、すなわち、印刷ジョブ単位又は子ジョブ単位でのジョブのキャンセルが要求された場合の処理について説明する。図23は、ジョブのキャンセル処理を説明するためのシーケンス図である。
ユーザがジョブ一覧ページ430において、いずれかの親ジョブ又は子ジョブに対するチェックボタンをチェックすることにより、キャンセル対象のジョブを選択し、ボタン432をクリックすると、Webブラウザ41は、Webアプリ32に対してジョブのキャンセルを要求するHTTPリクエストを送信する(S301)。ステップS301に続いてステップS302に進み、Webアプリ32は、印刷要求受付手段112におけるキャンセルメソッドをSOAPのRPCによって呼び出すためのSOAPメッセージを印刷サーバ10に送信することにより、ジョブのキャンセルを印刷サーバ10に要求する。
図24は、キャンセルメソッドを呼び出すときのSOAPメッセージの例を示す図である。図24のSOAPメッセージ750において、タグ751のタグ名である「cancelJob」が、キャンセルメソッドのメソッド名である。記述752は、引数情報である。例えば、<jobId>タグで囲まれた記述7521は、キャンセルの対象とする親ジョブの親ジョブIDが指定された引数である。<subjobId>タグで囲まれた記述7522は、キャンセルの対象とする子ジョブの子ジョブIDが指定された引数である。なお、親ジョブ単位でキャンセル対象が指定されている場合は、子ジョブIDの値は指定されない。
ステップS302に続いてステップS303に進み、キャンセルメソッドを呼び出された印刷要求受付手段112は、キャンセルメソッドに実装された処理を実行する。図25は、キャンセルメソッドにおける処理を説明するためのフローチャートである。
まず、印刷要求受付手段112は、キャンセルの対象とされたジョブが親ジョブであるか否かを判断する(S501)。この判断は、キャンセルメソッドの引数に子ジョブIDが指定されているか否かによって行うことができる。キャンセル対象が親ジョブであった場合は、対応するジョブ管理ファイル132を参照することにより当該親ジョブに属する全ての子ジョブを確認し、その全ての子ジョブに対して後述されるキャンセル処理(S503〜S506)を繰り返した後、ジョブ管理ファイル132における親ジョブのジョブステータスの値を「canceled」に更新する。
一方、キャンセルの対象とされたジョブが子ジョブである場合は、印刷要求受付手段112は、対応するジョブ管理ファイル132を参照することにより、当該子ジョブのジョブステータスを確認し(S503)、ジョブステータスに応じたキャンセル処理を実行する(S504〜S506)。
すなわち、ジョブステータスが「pending」のときは、印刷要求受付手段112が、ジョブ管理ファイル132におけるジョブステータスの値を「canceled」(キャンセル)とすることにより、対象ジョブのキャンセルが実現される(S504)。上述したように印刷指示手段113は、ジョブステータスの値が「canceled」である印刷ジョブについては印刷処理を行わないからである。
また、ジョブステータスがprocessing又はexecutingときは、印刷要求受付手段112が、スプーラ116又はプリンタ制御手段118に対してジョブのキャンセルを指示し(APIの呼び出し等)(S505、S506)、更に、ジョブ管理ファイル132における対象ジョブのジョブステータスの値を「canceled」とすることにより、対象ジョブのキャンセルが実現される。
図23に戻る。ステップS304に進み、印刷要求受付手段112は、キャンセルメソッドの返却情報として、キャンセル処理の成否を示す情報を含むSOAPメッセージをWebアプリ32に対して送信する。
図26は、キャンセルメソッドの返却情報を含むSOAPメッセージの例を示す図である。図26のSOAPメッセージ760において、<returnValue>タグで囲まれた記述741は、キャンセルメソッドの戻り値であり、「0」はキャンセル処理が正常に実行されたことを示す。
ステップS304に続いてステップS305に進み、キャンセルが正常に実行された場合は、Webアプリ32は、キャンセルされたジョブの行が削除されたジョブ一覧ページ430を生成する。生成されたジョブ一覧ページ430は、Webブラウザ41に送信され、Webブラウザ41によって表示される。以上でジョブのキャンセル処理が終了する。
上述したように本実施の形態における印刷サーバ10によれば、ユーザは、文書管理サーバ20において管理されている複数の文書データを対象とした印刷要求を行った場合であっても、文書データごとにジョブステータスの確認やジョブの操作等を行うことができる。特に、スプーラにジョブが投入される前においても文書データごとに操作を行うことができるため、印刷要求をした直後においても文書データごとにジョブのキャンセル等の操作を行うことができる。
以上、本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。