以下、本発明を実施するための一形態である営業情報管理システム1(営業情報同期システム)について、図面を参照しつつ説明する。本実施形態の営業情報管理システム1は、美容室やエステサロンなどの美容業に係るサービスを提供する業者への利用が想定されている。
営業情報管理システム1は、図1に示すように、管理サーバシステム100(サーバ側システム)、店舗端末200(業者側端末)及びエンドユーザ端末300を有している。これらはいずれもインターネット99(通信ネットワーク)に接続されており、インターネット99を介して互いに通信可能である。管理サーバシステム100、店舗端末200及びエンドユーザ端末300は、それぞれ、サーバやパーソナルコンピュータ、携帯端末などを有している。これらの装置は、CPU、ROM、RAM、ハードディスク、I/Oインタフェースなどのハードウェアと、ROM、RAM、ハードディスクなどの記憶装置に格納されたプログラムやデータベースなどのソフトウェアとを含んでいる。以下に説明する各装置の種々の機能は、ソフトウェアがそのような機能を発揮するようにハードウェアを機能させることによって実現されている。
営業情報管理システム1は、顧客情報、顧客の予約状況、商品情報、在庫情報、売上情報、提供可能なサービスなど、業者における営業情報を管理する。管理サーバシステム100及び店舗端末200には、営業情報を格納するデータベースが設けられる。管理サーバシステム100及び店舗端末200は、それぞれ独立にデータベースの内容を更新することがある。このため、データベース間で営業情報が齟齬をきたさないように、データベース間の同期を確保する必要がある。以下、営業情報管理システム1において、データベース間の同期を取る処理を「同期処理」とする。本システムでは、少なくとも、店舗端末200側のデータベースがクライアント・サーバ型のデータベースとして設計されていない。したがって、同期処理は、データベース管理手段の内部処理として実行することはできない。本実施形態の同期処理においては、管理サーバシステム100及び店舗端末200間で、データベース内に含まれる各種のテーブルのうちの少なくとも一部が、所定のテーブルリストに基づいて順に送信される。テーブルリストは、同期処理の対象となるのがいずれのテーブルであるかと同期の順序とを示す。
管理サーバシステム100は、データベース110、データベース管理サーバ120(サーバ側データベース管理手段)及び営業情報管理サーバ130を有している。サーバ同士はLAN(Local Area Network)で互いに通信可能に接続されている。データベース110はハードディスクに格納されており、このハードディスクは、データベース管理サーバ120にシリアルインタフェースやLAN等によって接続されるか、データベース管理サーバ120内に内蔵される。データベース110は、業者の顧客情報などの営業情報を示すデータを含んでいる。
例えば、顧客情報は、各顧客の名前、住所、電話番号等からなる。データベース110は、顧客情報を示す顧客テーブルを含んでいる。顧客テーブルは、図2(a)に示すように、「顧客名」「住所」「電話番号」をカラムとして含んでいると共に、各カラムに関して「A子」「A市B町」「xxx−xxx−xxxx」等の値を含んでいる。また、顧客の予約状況は、顧客、予約日時、サービス内容、担当等を含んでいる。データベース110は、予約状況を示す予約状況テーブルを含んでいる。予約状況テーブルは、図2(b)に示すように、「顧客」「予約日時」「サービス内容」「担当」をカラムとして含んでいると共に、各カラムに関して「A子」「9月30日10時」「カット」「店長」等の値を含んでいる。予約状況テーブルは、顧客テーブルを親テーブルとして参照する子テーブルとしてデータベース110内に含まれる。子テーブルである予約状況テーブルにおいて顧客名に含まれる値は、親テーブルである顧客テーブルの顧客名にも含まれる。また、データベース110内には、提供可能なサービス内容を示すサービステーブルが含まれている。
データベース管理サーバ120は、外部からの要請に基づいて、データベース110中のデータに対して、データの検索、追加、変更などの処理を実行する。また、データベース管理サーバ120は、外部から受け取ったデータに基づいて、データベース110中のデータを更新する。また、データベース管理サーバ120は、外部からの要請を受けて、データベース110中のデータを取り出し、要請元へと引き渡す。データベース管理サーバ120は、複数のトランザクション処理に関する同時実行制御が可能である。同時実行制御が可能なデータベースが採用されているのは、店舗端末200やエンドユーザ端末300からなる複数のクライアント端末からデータが送信され、送信されたデータに基づいてデータベース110が更新されることが想定されているためである。
営業情報管理サーバ130は、データ更新部131(サーバ側データ更新手段)、データ生成部132(サーバ側データ生成手段)及び同期データ通信部133(サーバ側データ受信手段及びサーバ側データ送信手段)を有している。データ更新部131は、店舗端末200又はエンドユーザ端末300から営業情報を示すデータが送信された場合に、その営業情報を示すデータに基づいて、データベース管理サーバ120にデータベース110のデータを更新させる。例えば、店舗端末200からは、後述の通り、同期処理用のデータが送信されてくる。これに応じ、データ更新部131は、同期処理の対象となるテーブルに関して、店舗端末200からの同期処理用のデータが示す内容にデータベース110のデータを更新するように、データベース管理サーバ120に要請する。また、エンドユーザ端末300からは、後述の通り、予約情報を更新するためのデータが送信されてくる。これに応じ、データ更新部131は、エンドユーザ端末300からの予約更新用のデータが示す更新内容に従ってデータベース110の予約状況テーブルを更新するように、データベース管理サーバ120に要請する。
店舗端末200からの同期処理用のデータは、データ送信用の所定のフォーマット(第2のデータフォーマット)で生成されている。本実施形態では、このフォーマットとして、JSON(JavaScript(登録商標) Object Notation)形式が用いられる。JSON形式は、JavaScript(登録商標)におけるオブジェクトの表記法をベースにしたデータ記述形式である。JSON形式は、サーバ・クライアント間のデータ通信等に用いる場合、通信トラフィックが低下したり、データ変換の負担が小さくなったりといったメリットがある。
図3は、JSON形式で記述されたデータテーブルの一例である。この図に示すように、オブジェクトにおけるキーとその値がコロン(“:”)を挟んで対とされる。また、“[a,b,c,…]”の形式で配列値が記述される。図3の例では、“allDataList”、“columnList”、“syncDate”、“tableName”及び“typeList”がキーであり、コロンを挟んで次の行がその値である。キー“allDataList”は、データテーブルのデータ値を示す。“columnList”はデータベースにおけるカラム名を示す。“syncDate”は、データベースの同期処理を実行したタイミングを示す。“tableName”は、当該JSON形式のデータテーブルに対応するデータベースのテーブル名を示す。“typeList”は、“allDataList”におけるデータ値の型名を示す。
図2(a)の顧客テーブルについて生成されるJSON形式のデータの記述例は以下のとおりである。“allDataList”の値として「A子」「A市B町」「xxx−xxx−xxxx」…が記述される。“columnList”の値として「顧客名」「住所」「電話番号」に対応するカラム名が記述される。“syncDate”の値として、店舗端末200にデータが送信されるタイミングが記述される。“tableName”の値として、「顧客テーブル」に対応するテーブル名が記述される。“typeList”の値として、「顧客名」の値の型名、「住所」の値の型名、「電話番号」の値の型名が記述される。
データ更新部131は、このフォーマットに従って店舗端末200からのデータを解釈すると共に、その解釈結果に基づいて、データベース110のデータを更新するようにデータベース管理サーバ120に要請する。例えば、店舗端末200からのデータが顧客テーブルに対応するJSON形式のデータであった場合には、データ更新部131は、かかるデータをJSON形式のフォーマットに従って解釈することにより、図2(a)に示すような顧客テーブルのテーブル名、カラム名、各カラムの値、及び、各カラムの型名を取得する。そして、データ更新部131は、取得したテーブル名やカラム名等に基づき、その内容に沿ってデータベース110のデータを更新するようにデータベース管理サーバ120に要請する。
データ生成部132は、店舗端末200へと同期処理用のデータを送信するために、データベース110に格納された営業情報を示すデータを所定のフォーマット(第1のデータフォーマット)に変換する。本実施形態では、このフォーマットにもJSON形式が用いられる。なお、管理サーバシステム100から店舗端末200へとデータが送信される場合と、その逆方向にデータが送信される場合とで、データフォーマットが異なっていてもよい。同期処理の対象となるデータテーブルはあらかじめ定められており、営業情報の全部に相当してもよいし、一部に相当してもよい。本実施形態では、同期処理対象となる営業情報に、顧客テーブル及び予約状況テーブルが含まれる。データ生成部132は、データベース管理サーバ120から営業情報を、同期処理の対象となるテーブルごとに受け取ると共に、受け取った営業情報のテーブルを示すデータを上記フォーマットで生成する。
同期データ通信部133は、データ生成部132が生成したデータをHTML(Hyper Text Markup Language)通信で、店舗端末200へと送信する。また、同期データ通信部133は、店舗端末200から送信される同期処理用のデータをHTML通信で受信する。受信した同期処理用のデータは、上記の通り、データ更新部131によってデータベース110のデータの更新に用いられる。
管理サーバシステム100には、店舗端末200やエンドユーザ端末300などの複数のクライアント端末からデータが送信される。このため、データ更新部131によるデータベース110の更新要請が立て続けに発生する場合がある。これについては、上記の通り、データベース管理サーバ120が同時実行制御に対応している。したがって、例えば、店舗端末200から送信されたデータに基づき、データ更新部131からデータの更新要請があった場合に、データベース管理サーバ120が更新のためのトランザクションを開始したとする。このトランザクション処理が完了する(つまり、コミットがなされる)までに、エンドユーザ端末300から送信されたデータに基づいて、データ更新部131からデータの更新要請があった場合に、データベース管理サーバ120は、かかるデータの更新要請に関する新たなトランザクションを開始する。そして、データベース管理サーバ120は、先に立ち上げたトランザクションと後に立ち上げたトランザクションとに関して同時実行制御を行う。
店舗端末200は、データベース210(端末側データベース)、データベース管理部220(端末側データベース管理手段)、タッチパネル式ディスプレイ230、情報入力処理部240、データ更新部250(端末側データ更新手段)、データ生成部260(端末側データ生成手段)及び同期データ通信部270(端末側データ送信手段及び端末側データ受信手段)を有している。データベース210は、店舗端末200に内蔵されたハードディスク内に、単一のデータファイルとして格納されている。なお、複数のデータファイルとして格納されていてもよいし、その他の形式でハードディスク以外の記憶装置に格納されていてもよい。データベース210は、営業情報を示すデータを含んでいる。データベース210のうち、同期処理の対象となるテーブルについては、管理サーバシステム100におけるデータベース110と共通のカラムを含んでいる。
データベース管理部220は、外部からの要請に基づいて、データベース210中のデータに対して、データの検索、追加、変更などの処理を実行する。また、データベース管理部220は、外部から受け取ったデータに基づいて、データベース210中のデータを更新する。また、データベース管理部220は、外部からの要請を受けて、データベース210中のデータを取り出し、要請元へと引き渡す。データベース管理部220は、複数のトランザクション処理に関する同時実行制御に対応していない。何らかのトランザクションを開始し、それがまだ完了していない間に、外部から新たな要請があったときには、データベース管理部220は、処理中のトランザクションが完了するまで、新たな要請に関するトランザクションを開始しない。なおこの場合、処理中のトランザクションが完了してから新たな要請に関するトランザクションが開始されてもよい。また、データベース管理部220は、処理中のトランザクションが完了した後に新たな要請がなされるまでは要請に応えないように構成されていてもよいし、別途の要請がなくても処理中のトランザクション処理が完了したら要請に基づくトランザクション処理を実行するように構成されていてもよい。
このように、データベース管理部220が同時実行制御に対応していないことにより、データベース210やデータベース管理部220を実現するためのアプリケーションなどのソフトウェア自体がコンパクトなもので済む。また、データベース管理部220の機能を担う店舗端末200にもそれほど高い性能が要求されなくて済む。したがって、店舗端末200は、ハードウェア及びソフトウェアのいずれの観点においても、比較的コンパクトに設計され得る。
タッチパネル式ディスプレイ230(以下、ディスプレイ230とする)は、ユーザに対してGUI(Graphical User Interface;グラフィカルユーザインタフェース)を提供する。一例としてディスプレイ230には、図4に示すGUI画面が表示される。この画面には、日付、時間帯、担当者及び予約状況が表形式で表示される。担当者と予約状況は、データベース管理部220を通じてデータベース210から取得された営業情報に基づいて表示される。
情報入力処理部240は、ディスプレイ230の画面においてユーザがタッチした位置に基づいて所定の処理を実行する。例えば、タッチ位置がいずれかの担当者のいずれかの時間帯に対応する箇所である場合には、情報入力処理部240は、タッチ位置がいずれの担当者及びいずれの時間帯に対応するかを判定する。そして、情報入力処理部240は、データベース管理部220を通じてデータベース210から取得した顧客テーブルやサービステーブルに基づき、ディスプレイ230に顧客リスト及びサービスリストを表示させる。この状態でユーザが画面上の顧客リスト及びサービスリストに対応する箇所をタッチすると、情報入力処理部240は、タッチ位置に対応した顧客及びサービスを選択する。また、情報入力処理部240は、登録された予約を削除するための手順でユーザが画面をタッチしたか否かを判定する。
データ更新部250は、情報入力処理部240が判定した担当者及び時間帯に関して、情報入力処理部240が選択した顧客及びサービスについての予約を新規に登録する。具体的には、データ更新部250は、情報入力処理部240の処理内容に基づき、データベース110の予約状況テーブルを更新するように、データベース管理部220に要請する。これにより、新たな予約情報がデータベース210に登録される。また、予約削除の手順でユーザが画面をタッチしたと情報入力処理部240が判定した場合には、データ更新部250は、情報入力処理部240の判定内容に基づき、データベース110の予約状況テーブルから所定の予約情報を削除するように、データベース管理部220に要請する。
また、データ更新部250は、管理サーバシステム100から送信された同期処理用のデータに基づき、同期処理の対象となるテーブルに関して、当該同期処理用のデータが示す内容にデータベース210のデータを更新するように、データベース管理部220に要請する。例えば、管理サーバシステム100からのデータが予約状況テーブルに対応するJSON形式のデータであった場合には、データ更新部250は、かかるデータをJSON形式のフォーマットに従って解釈することにより、図2(b)に示すような予約状況テーブルのテーブル名、カラム名、各カラムの値、及び、各カラムの型名を取得する。そして、データ更新部250は、取得したテーブル名やカラム名等に基づき、その内容に沿ってデータベース210のデータを更新するようにデータベース管理部220に要請する。
データ生成部260は、管理サーバシステム100へと同期処理用のデータを送信するために、データベース210に格納された営業情報を示すデータをJSON形式に変換する。データ生成部260は、データベース管理部220から営業情報を、同期処理の対象となるテーブルごとに受け取ると共に、受け取った営業情報のテーブルを示すデータをJSON形式で生成する。
同期データ通信部270は、データ生成部260が生成したデータをHTML通信で、管理サーバシステム100へと送信する。また、同期データ通信部270は、管理サーバシステム100から送信される同期処理用のデータをHTML通信で受信する。受信した同期処理用のデータは、上記の通り、データ更新部250によってデータベース210のデータの更新に用いられる。
エンドユーザ端末300は、業者にとっての顧客(以下、「エンドユーザ」とする)が所持する端末である。エンドユーザ端末300としては、スマートフォンやタブレットPCなどの携帯端末や、デスクトップPCなどが想定される。エンドユーザ端末300は、インターネット99を介し、営業情報を示すデータを管理サーバシステム100に送信する。このデータ通信は、エンドユーザ端末300に搭載されたウェブブラウザを利用してブラウザベースで行われてもよいし、エンドユーザ端末300にインストールされた専用アプリケーション(以下、「アプリ」とする)を利用して行われてもよい。アプリは、アプリダウンロードサーバからインターネット99を介してエンドユーザ端末300にダウンロードされ、インストールされてもよい。
本実施形態のエンドユーザ端末300は、営業情報を示すデータとして、予約状況テーブルを更新するためのデータを管理サーバシステム100に送信する。予約状況テーブルを更新するためのデータは、エンドユーザによってエンドユーザ端末300に入力される情報に基づき、端末において実行されるアプリやブラウザソフトのプロセスによって生成される。例えば、エンドユーザ端末300に搭載された、又は接続されたディスプレイに図4と同様の画面が表示され、この画面を介してエンドユーザ端末300に予約情報が入力されてもよい。また、エンドユーザ端末300側の画面は、図4とは異なる画面であってもよい。これにより、エンドユーザは、自身が所持する端末を用いて、業者が提供する各種サービスの予約を登録することができる。
以下、同期処理について、図5〜図7を参照しつつより詳細に説明する。店舗端末200は、フォアグランドでメインプロセスを実行するのに対して、図5に示すように、サブプロセスとしてバックグランドで同期処理を実行する。つまり、メインプロセスの実行経過はディスプレイ230に表示されるのに対し、バックグラウンドでサブプロセスとして実行される同期処理の実行経過はディスプレイ230に表示されない。同期処理においては、上記の通り、データベース管理部220がトランザクション処理を実行する必要がある。一方、データベース管理部220は同時実行制御に対応していない。このため、店舗端末200は、メインプロセスにおいてデータベース管理部220にトランザクション処理を実行させない期間に限り、サブプロセスにおいて同期処理のためのトランザクション処理をデータベース管理部220に実行させることができる。
ところが、サブプロセスでの同期処理の実行中に、メインプロセスにおいてデータベース管理部220にトランザクションを開始させることが必要になることがある。例えば、同期処理の実行中にユーザが図4のGUI画面にアクセスすることにより、予約状況テーブルの更新が必要になる場合などである。以下、GUIなどのユーザインタフェースを介したユーザ入力に起因する処理であって、データベース管理部220にトランザクションを開始させることが必要になる処理を「ユーザ起因処理」とする。ユーザ起因処理の要請が発生した場合、店舗端末200は、メインプロセスにおいてユーザ起因処理を実行する。ユーザ起因処理の一例としては、上記のように、情報入力処理部240の処理に応じてデータ更新部250がデータベース管理部220に予約状況テーブルを更新させる処理がある。この場合、ユーザ起因処理の要請は、情報入力処理部240がユーザ入力に基づいて、担当者や時間帯を判定したり、顧客やサービスを選択したり、登録された予約を削除するための手順でユーザが画面をタッチしたことを判定したりした際に発生する。このように、情報入力処理部240及びデータ更新部250は、協働してユーザ起因処理を実行する。したがって、情報入力処理部240及びデータ更新部250は、協働で、本発明のユーザ起因処理実行手段の機能を実行する。
ユーザ起因処理の要請が発生した場合に、サブプロセスの同期処理をどのように取り扱えばよいかについては、2つの方法が考えられる。1つ目の方法は、メインプロセスにおいてすぐにはユーザ起因処理を開始せず、サブプロセスにおいて同期処理が完了したら、ユーザ起因処理を開始する方法である。しかしながら、ユーザ起因処理は、ユーザがGUI等にアクセスすることで、意図的に店舗端末200に実行させようとする処理である。したがって、ユーザは、インタフェースにアクセスした直後にユーザ起因処理が開始されることを期待する。このため、同期処理を完了してからユーザ起因処理を実行すると、ユーザを待たせることになり、ユーザビリティの観点で好ましくない。また、同期処理はサブプロセスとしてメインプロセスのバックグラウンドで実行される。このため、ユーザは、ユーザ起因処理が開始されない理由をディスプレイ230の表示からは把握できない。したがって、ユーザにとっては待機を強いられる理由が分かりにくいため、ますますユーザビリティが損なわれやすい。
そこで、本実施形態では、図5に示す2つ目の方法が採用される。まず、店舗端末200は、メインプロセスにおいて、同期処理を開始する要請を発生させる(S1)。同期処理を開始する要請は、例えば、あらかじめ設定されたスケジュールに基づき、定期的に発生してもよい。これに応じ、同期処理ルーチンが呼び出され、サブプロセスとしてその実行が開始される。次に、ユーザがユーザインタフェースにアクセスすることによりユーザ起因処理の要請が発生する(S2)と、店舗端末200は、メインプロセスにおいて、サブプロセスに対して同期処理を中断する要請を発生させる(S3)。そして、店舗端末200はサブプロセスを中断する。本実施形態では、店舗端末200は、サブプロセスの同期処理ルーチンにおいていずれのステップが実行中であっても、同期処理ルーチンの実行を強制的に終了する。次に、店舗端末200は、メインプロセスにおいてユーザ起因処理を実行する(S4)。ユーザ起因処理が終了すると、店舗端末200は、メインプロセスにおいて、同期処理を再開する要請を発生させる(S5)。そして、店舗端末200は、サブプロセスにおいて同期処理を再開する。本実施形態では、同期処理ルーチンが呼び出されると共に、その最初のステップから実行が再開される。
この2つ目の方法を採用することにより、同期処理が実行中であっても、ユーザ起因処理が優先的に開始される。このため、ユーザビリティが損なわれにくい。なお、この2つ目の方法により、同期処理を停止してユーザ起因処理を優先的に実行する処理が、本発明におけるユーザ起因処理優先化処理に対応する。
以下、店舗端末200において実行される同期処理ルーチンについて図6を参照しつつ説明する。この同期処理においては、同期処理の対象となるテーブルを示すデータが、所定のテーブルリストで設定された順序で処理される。本実施形態では、上記の通り、同期処理が最初から実行される場合(図5のS1)と、一旦中断された同期処理が再開される場合(図5のS5)とがある。図6の同期処理ルーチンは、いずれの場合においても共通に呼び出され、最初のステップから実行される。したがって、同期処理ルーチンは、同期処理を最初のテーブルから実行する場合と中断されたものから再開する場合との両方に対応している必要がある。そこで、店舗端末200は、処理対象のテーブルを示す同期テーブルステータスを保持している。同期テーブルステータスは、デフォルトの状態ではテーブルリストの最初のテーブルを示す。一方、同期処理が再開された場合には、同期テーブルステータスは、後述の通り、同期処理の中断直前まで処理していたテーブルを示す。このステータスは、店舗端末200に搭載された、又は接続されたいずれかの記憶装置内に格納されている。
店舗端末200は、同期テーブルステータスが子テーブルを示しているか否かを判定する(T1)。ステータスが子テーブルを示している場合、同期処理の中断時に子テーブルに関して同期処理が実行中であったことになる。そこで、同期テーブルステータスが子テーブルを示していると判定すると(T2、子テーブル)、店舗端末200は、その子テーブルに対する親テーブルを示す内容にステータスの内容を更新する(T2)。そして、店舗端末200は、T3の処理に移る。ステータスがこのように更新される理由については後述する。なお、その子テーブルの親テーブルにさらに親テーブルがある場合など、3つ以上の階層で親子関係がある場合には、最も上位の親テーブルを示すようにステータスの内容が更新されることが好ましい。一方、同期テーブルステータスが子テーブルを示していないと判定すると(T2、その他)、店舗端末200は、そのままT3の処理に移る。
T3において、店舗端末200のデータ生成部260は、同期テーブルステータスが示すテーブルに関して、データベース管理部220からテーブルを示すデータを受け取る(T3)。そして、データ生成部260は、管理サーバシステム100に送信するべきデータがあるか否かを判定する(T4)。この判定は、前回の同期処理において管理サーバシステム100に送信したデータテーブルとデータベース管理部220から今回受け取ったデータとを照合し、今回受け取ったデータに前回送信したデータと異なるデータが含まれるか否かに基づいて行われる。今回受け取ったデータに前回送信したデータと異なるデータが含まれる場合には、データ生成部260は、管理サーバシステム100に送信するべきデータがあると判定する。今回受け取ったデータに前回送信したデータと異なるデータが含まれていない場合には、データ生成部260は、管理サーバシステム100に送信するべきデータがないと判定する。管理サーバシステム100に送信するべきデータがないと判定された場合(T4、No)には、店舗端末200は、同期すべきデータがない旨を管理サーバシステム100に送信する(T15)と共に、T7の処理に移る。これにより、前回からデータの変更がないテーブルに関しては、管理サーバシステム100へのデータ送信がなされない。
管理サーバシステム100に送信するべきデータがあると判定された場合(T4、Yes)には、データ生成部260は、T3において取得したテーブルを示すデータに基づいてJSON形式のデータを生成する(T5)。同期データ通信部270は、T5で生成されたJSON形式のデータを管理サーバシステム100に送信する(T6)。次に、店舗端末200は、同期テーブルステータスが示すテーブルについて同期処理用のデータを送信するように要請するリクエストを管理サーバシステム100に送信する(T7)。同期データ通信部270は、これに応じて管理サーバシステム100から送信されてくる同期処理用のデータを受信する(T8)。そして、データ更新部250は、T8において同期データ通信部270が受信したデータに基づき、データベース管理部220にデータベース210を更新させる(T9)。なお、T8において、同期すべきデータがない旨を管理サーバシステム100から同期データ通信部270が受信した場合には、T9において、データ更新部250はデータベース210の更新を実行しない。
次に、店舗端末200は、同期テーブルステータスに基づき、同期処理の対象となるテーブルでまだ同期処理を実行していないものがあるかを判定する(T10)。そして、まだ同期処理を実行していないテーブルがあると判定した場合(T10、Yes)、店舗端末200は、同期テーブルステータスをテーブルリストにおける次のテーブルを示す内容に更新する(T13)。そして、店舗端末200は、管理サーバシステム100に完了報告を送信する(T14)と共に、T3からの処理に移る。これにより、同期処理の対象となる一連のテーブルに関して順番に同期処理が実行される。本実施形態では、親子関係のあるテーブルに関しては、先に親テーブルについて同期処理が実行され、その後に子テーブルについて同期処理が実行される。
一方、同期処理を実行していないテーブルがないと判定した場合(T10、No)、店舗端末200は、同期テーブルステータスをリセットする(T11)。これにより、ステータスは、デフォルトの状態、つまり、テーブルリストの最初のテーブルを示す状態になる。そして、店舗端末200は、管理サーバシステム100に完了報告を送信する(T12)と共に、同期処理を完了する。
以上の同期処理ルーチンがサブプロセスとして実行されるに当たり、メインプロセスにおいて同期処理を中断する要請が発生した場合(図5のS3)には、T1〜T12のいずれのステップが実行中であっても、一旦ルーチンが強制的に終了される。このとき、同期テーブルステータスは、ルーチンが終了される直前に処理中であったテーブルを示すことになる。したがって、次に同期処理ルーチンが呼び出されたときには、同期テーブルステータスが子テーブルを示すものでなければ、中断直前に処理中であったテーブルから同期処理が再開されることになる(T1、その他→T3)。
これに対し、同期処理の再開時に同期テーブルステータスが子テーブルを示している場合には、ステータスの内容が、その子テーブルの親テーブルを示すように更新される(T2、子テーブル→T2)。したがって、同期処理は、中断時に処理中であった子テーブルではなく、その親テーブルから再開されることになる(T3〜)。
このようにステータスが更新されるのは以下の理由による。同期処理が中断してから再開するまでに、ユーザ起因処理が実行されることから、ある程度の時間が経過する。したがって、同期処理が中断してから再開するまでの間には、管理サーバシステム100や店舗端末200において、データベースの内容が変更されているおそれがある。よって、子テーブルを処理中に同期処理が中断された後、仮にその子テーブルから同期処理を再開する場合には、それより以前に同期処理がなされた親テーブルとこれから同期処理を行おうとする子テーブルとの間に不整合が生じるおそれがある。なぜなら、この場合、親テーブルに関して同期処理を実行する時点と子テーブルに関して同期処理を再開する時点とが時間的に離れることになり、これによって、その間に親テーブルの内容が変更される可能性が高まるからである。これに対して上記の通り、同期処理の再開時に同期テーブルステータスが子テーブルを示している場合には、その子テーブルの親テーブルにさかのぼって同期処理が再開される。これにより、同期処理が中断している間に親テーブルに変更があったとしても、その親テーブルから同期処理が再開される。そして、その後にすぐに子テーブルに関して同期処理がなされるので、親テーブルの同期処理から子テーブルの同期処理までが時間的に離れない。したがって、親テーブルと子テーブルとの間に不整合が生じにくくなる。
次に、管理サーバシステム100(営業情報管理サーバ130)において実行される同期処理ルーチンについて図7を参照しつつ説明する。営業情報管理サーバ130は、店舗端末200からデータ送信があったか否か判定し(T21)、データ送信があるまで待機する(T21、No)。データ送信があったと判定すると(T21,Yes)、営業情報管理サーバ130の同期データ通信部133は、店舗端末200からのデータを受信する(T22)。このとき、同期データ通信部133は、データ受信が正常に完了したか否かを判定する(T23)。店舗端末200において、同期処理が中断する場合もあるからである。
データ受信が正常に完了していないと判定された場合には(T23、No)、管理サーバシステム100は、T21の処理に戻る。データ受信が正常に完了したと判定された場合には(T23、Yes)、営業情報管理サーバ130は、同期処理用のデータを送信するように要請するリクエストが、T22におけるデータ受信の完了から所定時間内に店舗端末200から送信されたか否かを判定する(T24)。データ受信の完了から所定時間内に店舗端末200からリクエストが送信されていないと判定した場合に(T24、No)、営業情報管理サーバ130は、T21の処理に戻る。データ受信の完了から所定時間内に店舗端末200からリクエストが送信されたと判定した場合に(T24、Yes)、営業情報管理サーバ130のデータ生成部132は、リクエストに係るテーブルに関してデータベース管理サーバ120からデータテーブルを受け取る(T25)。
次に、データ生成部132は、店舗端末200に送信するべきデータがあるか否かを判定する(T26)。この判定は、前回の同期処理において店舗端末200に送信したデータテーブルとデータベース管理サーバ120から今回受け取ったデータとを照合し、今回受け取ったデータに前回送信したデータと異なるデータが含まれるか否かに基づいて行われる。今回受け取ったデータに前回送信したデータと異なるデータが含まれる場合には、データ生成部132は、店舗端末200に送信するべきデータがあると判定する。今回受け取ったデータに前回送信したデータと異なるデータが含まれていない場合には、データ生成部132は、店舗端末200に送信するべきデータがないと判定する。
店舗端末200に送信するべきデータがないと判定された場合(T26、No)には、営業情報管理サーバ130は、同期すべきデータがない旨を店舗端末200に送信し(T31)、T29の処理に移る。店舗端末200に送信するべきデータがあると判定された場合(T26、Yes)には、営業情報管理サーバ130のデータ生成部132は、T25において取得したテーブルを示すデータに基づいてJSON形式のデータを生成する(T27)。同期データ通信部270は、T27で生成されたJSON形式のデータを店舗端末200に送信する(T28)。
次に、営業情報管理サーバ130は、店舗端末200から完了報告があったか否かを判定する(T29)。店舗端末200から完了報告がないと判定した場合には(T29、No)、営業情報管理サーバ130は、T21の処理に戻る。店舗端末200から完了報告があったと判定した場合には(T29,Yes)、営業情報管理サーバ130のデータ更新部131は、T22において同期データ通信部133が受信したデータに基づき、データベース管理サーバ120にデータベース110を更新させる(T30)。なお、T22において、同期すべきデータがない旨を店舗端末200から同期データ通信部133が受信した場合には、T30において、データ更新部131は、データベース110の更新を実行しない。
このように、T23、T24又はT29において、店舗端末200からのデータ受信が正常に完了しなかったり、店舗端末200からリクエストや完了報告が送信されなかったりする場合には、T30におけるデータベース110の更新がなされない。これは、このような場合には店舗端末200において同期処理が途中で中断したと考えられるためである。店舗端末200において同期処理が途中で中断すると、上記の通り、ユーザ起因処理が終了してから同期処理が再開される。そして、同期処理が再開される場合には、少なくとも中断時に処理中であったテーブルについて同期処理が実行される。このため、店舗端末200において同期処理が途中で中断したのであれば、営業情報管理サーバ130においては、T2でデータを受信していたとしてもデータベース110を更新する必要がない。
本実施形態の営業情報管理システム1では、以上のように、店舗端末200から管理サーバシステム100へのデータ送信がトリガーとなり、一連の同期処理が実行されるが、管理サーバシステム100から店舗端末200へのデータ送信がトリガーとなってもよい。
以上説明した本実施形態の概要は以下のとおりである:(1)店舗端末200側のデータベース管理部220が同時実行制御に対応していないため、店舗端末200をコンパクトに設計できる。(2)店舗端末200において同期処理中にユーザ起因処理の要請が発生した場合に、同期処理を一旦中断してユーザ起因処理を実行してから同期処理を再開する。このため、ユーザを待たせることが少なくなり、ユーザビリティが向上する。(3)店舗端末200において同期処理を一旦中断した後に再開する際に、同期テーブルステータスが子テーブルを示していた場合、その子テーブルから同期処理を再開せず、その子テーブルの親テーブルから同期処理を再開する。このため、子テーブルに関して処理中に同期処理が中断された場合であって、同期処理を中断していた間に親テーブルが変更された場合でも、親テーブルと子テーブルとの間の整合が確保される。(4)店舗端末200において、中断された同期処理が再開される際、テーブルリストの最初から同期処理が実行されるとは限らず、同期テーブルステータスが示すテーブル(又は、その親テーブル)、つまり、中断直前に処理中であったテーブルから同期処理が再開される。このため、中断によって同期処理が実行されなかったテーブルについて同期処理を確保できると共に、テーブルリストの最初から再開される場合と比べて、重複して処理されるテーブルを少なくできる。なお、このように、同期テーブルステータスが示すテーブル(又は、その親テーブル)から同期処理を再開することが、本発明における「別の処理を途中から実行する」ことに対応する。
<変形例>
以上は、本発明の好適な実施形態についての説明であるが、本発明は上述の実施形態に限られるものではなく、課題を解決するための手段に記載された範囲の限りにおいて様々な変更が可能なものである。
例えば、上述の実施形態では、ユーザ起因処理が完了してから同期処理が再開される。しかし、ユーザ起因処理が実行中であっても、データベース管理部220によるトランザクション処理が完了すれば、同期処理が再開されてもよい。例えば、1回のユーザ入力がなされた場合であって、当該入力によって必要なトランザクション処理がすべて終了した場合には、ユーザ起因処理として必要な処理がまだ残っていても、同期処理が再開されてもよい。
また、上述の実施形態では、メインプロセスにおいて中断要請が発生すれば、図6のいずれのステップにおいても一旦ルーチンが中断される。しかし、メインプロセスにおいて中断要請が発生しても、図6のいずれかのステップを実行してから同期処理が中断されてもよい。例えば、中断要請が発生した際に同期処理中であったテーブルに関して、T9までの処理がすべて完了してから、同期処理が中断されてもよい。この場合、中断の際に、同期テーブルステータスが次のテーブルを示すように更新されてもよい。
また、上述の実施形態では、ユーザ起因処理の要請が発生した時点で同期処理が実行中であった場合に、同期処理が中断されると共にユーザ起因処理が優先的に実行される。しかし、ユーザ起因処理の要請が発生した時点で同期処理以外の処理が実行中であった場合に、その同期処理以外の処理が中断されると共にユーザ起因処理が優先的に実行されてもよい。ここで想定される同期処理以外の処理は、少なくとも、データベース管理部220にトランザクション処理の実行を要求する処理であればよい。例えば、その処理は、(イ)店舗端末200が外部からデータを受信する処理、(ロ)データベース210を更新する必要がある処理、(ハ)データベース管理部220からデータベース210の営業情報を受け取る処理、及び、(ニ)データベース管理部220から受け取った営業情報から何らかのデータを生成する処理の少なくともいずれかを含んだ処理である。処理が中断された場合には、ユーザ起因処理の完了後に、中断によって実行されなかった処理が少なくとも実行されればよい。
また、上述の実施形態では、管理サーバシステム100から店舗端末200にデータが送らされる際にも、その逆方向にデータが送られる際にも、JSON形式が用いられる。しかし、いずれか一方にJSON形式が用いられ、他方にはその他の形式が用いられてもよい。また、いずれの場合にもJSON形式以外の形式が用いられてもよい。この場合にも、管理サーバシステム100から店舗端末200への方向とその逆方向とで互いに異なる形式が用いられてもよい。
また、上述の実施形態の営業情報管理システム1において、複数の店舗端末200や複数のエンドユーザ端末300が管理サーバシステム100に接続されてもよい。例えば、業者がチェーン展開している場合には、店舗端末200は、店舗ごとに設けられることになる。この場合には、複数の店舗端末200が管理サーバシステム100に接続される。また、エンドユーザ端末300も、複数のエンドユーザのそれぞれが所持することになる。この場合には、複数のエンドユーザ端末300が管理サーバシステム100に接続される。
また、上述の実施形態では、ユーザ起因処理は、GUIを介したユーザ入力に起因する処理である。しかし、その他のユーザインタフェースを介したユーザ入力に起因する処理であってもよい。ユーザインタフェースは、マウスやキーボードなどの入力装置を介したインタフェースも考えられる。
本発明の営業情報同期システムは、営業情報に関するサーバ側データベースをサーバ側データベース管理手段に管理させるサーバ側システムと、営業情報に関する端末側データベースを端末側データベース管理手段に管理させる業者側の端末を含む1又は複数のクライアント端末とを備え、前記サーバ側システムと前記1又は複数のクライアント端末とを結ぶ通信ネットワークを介して、前記サーバ側データベースと前記端末側データベースの間において営業情報の少なくとも一部に関してデータの同期を確保する営業情報同期システムであって、前記サーバ側データベース管理手段が、複数のトランザクション処理の要請に対する同時実行制御に対応しており、前記端末側データベース管理手段が、前記同時実行制御に対応しておらず、前記サーバ側システムが、前記クライアント端末から送信されたデータを受信するサーバ側データ受信手段と、前記サーバ側データ受信手段が受信したデータが示す営業情報に基づいて前記データベース管理手段に前記サーバ側データベースを更新させるサーバ側データ更新手段と、前記サーバ側データベースに格納された営業情報の少なくとも一部を前記サーバ側データベース管理手段から受け取ると共に、当該受け取った情報を示すデータを前記業者側端末に送信するための第1のデータフォーマットに従って生成するサーバ側データ生成手段と、前記サーバ側データ生成手段が生成したデータを前記業者側端末へと送信するサーバ側データ送信手段とを備えており、前記業者側端末が、ユーザインタフェースと、前記データ送信手段から送信されたデータを受信する端末側データ受信手段と、前記端末側データ受信手段が受信したデータが示す営業情報に基づいて前記端末側データベース管理手段に前記端末側データベースを更新させる端末側データ更新手段と、前記端末側データベースに格納された営業情報の少なくとも一部を前記端末側データベース管理手段から受け取ると共に、当該受け取った情報を示すデータを前記サーバ側システムに送信するための第2のデータフォーマットに従って生成する端末側データ生成手段と、前記端末側データ生成手段が生成したデータを前記サーバ側システムへと送信する端末側データ送信手段と、前記ユーザインタフェースを介したユーザ入力に起因する処理であって前記端末側データベース管理手段によるトランザクション処理が必要な処理であるユーザ起因処理を実行するユーザ起因処理実行手段とを備えており、前記サーバ側システム及び前記業者側端末が、前記サーバ側データベース及び前記業者側データベースに格納されたデータを、その一部ずつを互いに送信し合うことにより同期させる同期処理を実行し、前記業者側端末において前記ユーザ起因処理の要請が発生した際に前記同期処理を実行中であった場合に、(イ)前記サーバ側システム及び前記業者側端末が当該同期処理を中断すると共に、(ロ)前記業者側端末が、前記ユーザ起因処理に必要なトランザクション処理を前記同期処理に係るトランザクション処理より優先的に実行し、(ハ)前記端末側データベース管理手段が前記ユーザ起因処理に必要なトランザクション処理の実行を完了した後に、前記サーバ側システム及び前記業者側端末が、同期対象となるデータのうちの中断によって同期が完了していない部分に関する処理を含むように当該同期処理を途中から実行する。別の観点では、本発明の営業情報同期システムは、営業情報に関するサーバ側データベースをサーバ側データベース管理手段に管理させるサーバ側システムと、営業情報に関する端末側データベースを端末側データベース管理手段に管理させる業者側の端末を含む1又は複数のクライアント端末とを備え、前記サーバ側システムと前記1又は複数のクライアント端末とを結ぶ通信ネットワークを介して、前記サーバ側データベースと前記端末側データベースの間において営業情報の少なくとも一部に関してデータの同期を確保する営業情報同期システムであって、前記サーバ側データベース管理手段が、複数のトランザクション処理の要請に対する同時実行制御に対応しており、前記端末側データベース管理手段が、前記同時実行制御に対応しておらず、前記サーバ側システムが、前記クライアント端末から送信されたデータを受信するサーバ側データ受信手段と、前記サーバ側データ受信手段が受信したデータが示す営業情報に基づいて前記データベース管理手段に前記サーバ側データベースを更新させるサーバ側データ更新手段と、前記サーバ側データベースに格納された営業情報の少なくとも一部を前記サーバ側データベース管理手段から受け取ると共に、当該受け取った情報を示すデータを前記業者側端末に送信するための第1のデータフォーマットに従って生成するサーバ側データ生成手段と、前記サーバ側データ生成手段が生成したデータを前記業者側端末へと送信するサーバ側データ送信手段とを備えており、前記業者側端末が、ユーザインタフェースと、前記データ送信手段から送信されたデータを受信する端末側データ受信手段と、前記端末側データ受信手段が受信したデータが示す営業情報に基づいて前記端末側データベース管理手段に前記端末側データベースを更新させる端末側データ更新手段と、前記端末側データベースに格納された営業情報の少なくとも一部を前記端末側データベース管理手段から受け取ると共に、当該受け取った情報を示すデータを前記サーバ側システムに送信するための第2のデータフォーマットに従って生成する端末側データ生成手段と、前記端末側データ生成手段が生成したデータを前記サーバ側システムへと送信する端末側データ送信手段と、前記ユーザインタフェースを介したユーザ入力に起因する処理であって前記端末側データベース管理手段によるトランザクション処理が必要な処理であるユーザ起因処理を実行するユーザ起因処理実行手段とを備えており、前記業者側端末が、前記ユーザ起因処理の要請が発生した際に、前記端末側データベース管理手段によるトランザクション処理が必要な別の処理が実行中であった場合に、当該別の処理の実行を停止すると共に、前記端末側データベース管理手段が前記ユーザ起因処理に必要なトランザクション処理の実行を完了した後に、前記別の処理を実行させるユーザ起因処理優先化処理を実行し、前記サーバ側データベース及び前記端末側データベースのそれぞれにおいて、営業情報を示すデータが、親データテーブル、及び、当該親データテーブルを参照する子データテーブルを含んでおり、前記ユーザ起因処理優先化処理が、前記別の処理を中断する時点で前記子データテーブルに係る処理が実行中であった場合に、前記ユーザ起因処理に必要なトランザクション処理の実行を完了した後に、前記親データテーブルに係る処理から前記別の処理を実行する処理である。