JP2024076011A - 情報処理システム、情報処理システムの制御方法、及びプログラム - Google Patents

情報処理システム、情報処理システムの制御方法、及びプログラム Download PDF

Info

Publication number
JP2024076011A
JP2024076011A JP2022187341A JP2022187341A JP2024076011A JP 2024076011 A JP2024076011 A JP 2024076011A JP 2022187341 A JP2022187341 A JP 2022187341A JP 2022187341 A JP2022187341 A JP 2022187341A JP 2024076011 A JP2024076011 A JP 2024076011A
Authority
JP
Japan
Prior art keywords
developer
action
information
screen
displayed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022187341A
Other languages
English (en)
Inventor
文洋 柴本
Fumihiro Shibamoto
光広 清野
Mitsuhiro Kiyono
智子 鈴木
Tomoko Suzuki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Marketing Japan Inc
Canon IT Solutions Inc
Original Assignee
Canon Marketing Japan Inc
Canon IT Solutions Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Marketing Japan Inc, Canon IT Solutions Inc filed Critical Canon Marketing Japan Inc
Priority to JP2022187341A priority Critical patent/JP2024076011A/ja
Publication of JP2024076011A publication Critical patent/JP2024076011A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】表に含まれる各カラムに対して、より操作性良くアクションの入力操作を行うことができる仕組みを提供する。【解決手段】 表の選択を受け付ける受付手段と、選択された表に含まれる複数のカラム毎のアクションの入力領域にそれぞれ対応する複数の選択肢を表示するように制御する表示制御手段と、前記複数の選択肢のうちいずれかが選択されたことに応じて、選択された選択肢に対応するカラムのアクションの入力領域を表示し、ユーザーからのアクションの入力操作を受け付けるように制御する制御手段とを有することを特徴とする。【選択図】図32

Description

情報処理システム、情報処理システムの制御方法、及びプログラム関し、特に、アプリケーションソフトウェアの構築のために用いて好適な技術に関する。
従来、プログラミング言語によるコード記述が不要または少なくてよいノーコード開発ツール/ローコード開発ツールとして、定義に従ってアプリケーションソフトウェア(以下、アプリケーションと称する)を構築するアプリケーション構築ツールが存在する。
特許文献1には、構築するアプリケーションに表(データグリッド)を配置する方法が提案されている。具体的には、以下が開示されている。画面エディタ上にデータグリッドの部品(コンポーネント)をドラッグアンドドロップ操作等により配置する。データグリッドの部品を配置したタイミングでは、単なる格子状のグリッドが表示されるため、この表にどのデータモデルのどの項目を表示させるかを設定する。この項目の設定もデータモデルをドラッグアンドドロップすることにより設定される。
特開2018-010616号公報
表の各カラムに対してアクションを設定することができる。例えば、表の1列目の数値に変更があった場合に、同じ行の3列目に、変更後の1列目の数値と2列目の数値の合計を表示するように表示を更新する、といったアクションである。このようなカラム毎のアクションの設定が、各カラムの詳細設定画面を開いて設定するという操作方法であると、ユーザーは、カラムに対してアクションを設定できることが認識し難く、カラムに対するアクションの設定漏れなどが発生する可能性がある。特許文献1には表のカラムに対してアクションをどうのように設定するのかについては考慮されていない。
そこで本発明は、上記課題の少なくとも1つに鑑み、表に含まれる各カラムに対して、より操作性良くアクションの入力操作を行うことができる仕組みを提供することを目的とする。
本発明の情報処理システムは、
表の選択を受け付ける受付手段と、
選択された表に含まれる複数のカラム毎のアクションの入力領域にそれぞれ対応する複数の選択肢を表示するように制御する表示制御手段と、
前記複数の選択肢のうちいずれかが選択されたことに応じて、選択された選択肢に対応するカラムのアクションの入力領域を表示し、ユーザーからのアクションの入力操作を受け付けるように制御する制御手段と
を有することを特徴とする。
本発明によれば、表に含まれる各カラムに対して、より操作性良くアクションの入力操作を行うことができる。
情報処理システムのシステム構成図である。 開発者用端末100、アプリユーザー用端末200、アプリユーザー用端末201のハードウェアブロック図である。 ログイン処理のフローチャートである。 UIエディタ処理のフローチャートである。 ログイン処理とUIエディタ処理における表示例である。 UIエディタ処理におけるタブ部品とAppBarの表示例である。 コンテキストメニュー処理のフローチャートである。 アクションボード処理のフローチャートである。 アクションボード処理を説明するための表示例である。 アクションボード処理における表示例である。 開発環境300が生成するソースコードの例である。 画面切替処理のフローチャートである。 アプリのユーザー情報の表示にかかる、開発者用端末100、開発環境300、実行環境400においてそれぞれ実行される処理のフローチャートである。 (a)開発者情報301の具体例である。(b)マルチテナント実行環境のユーザー情報411の具体例である。(c)シンブルテナント実行環境のユーザー情報の具体例である。 ユーザー情報の表示例である。 ワークフロー処理のフローチャートである。 ワークフロー処理にかかる表示例である。 ワークフロー処理によって生成されるデータベース、UI部品、アクションの表示例である。 キャンバスのコンテキストメニュー処理のフローチャートである。 CRUD生成処理にかかる表示例である。 CRUD生成処理によって生成されるデータベース、アクション、関数の表示例である。 開発者アカウント登録処理のフローチャートである。 実行環境におけるDBセットの詳細である。 デプロイ処理のフローチャートである。 モバイル用アプリをデプロイする場合の表示例である。 テンプレート画面に関するUIエディタ画面における表示例である。 テンプレート画面のキャンバスにおける表示例である。 プロパティボックスの表示例である。 アクションが入力されたアクションボートの表示例である。 データグリッドのコンテキストメニュー処理のフローチャートである。 データグリッドのプロパティボックスにかかる表示例である。 データグリッドのアクションボードにかかる表示例である。 アクションの実行にかかるフローチャートである。 アクションの情報を含むUI定義情報の遷移図である。 変形例におけるアクションの実行にかかるフローチャートである。 変形例におけるアクションの情報を含むUI定義情報の遷移図である。
以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態で説明されている特徴の組み合わせの全てが発明に必須のものとは限らない。実施形態で説明されている複数の特徴のうち二つ以上の特徴が任意に組み合わされてもよい。また、同一若しくは同様の構成には同一の参照番号を付し、重複した説明は省略する。
以下に示す実施形態中で示した各種特徴事項は、互いに組み合わせ可能である。なお、以下において、「アプリケーション」、「アプリ」は、いずれも、アプリケーションソフトウェアを意味するものとする。
<システム構成>
図1に、本発明の実施形態としての情報処理システムのシステム構成図を示す。図1には、ソフトウェア開発を行うためのシステムと、開発されたソフトウェアを使用するためのシステムとを示す。
開発者用端末100は、パーソナルコンピュータ(以下、PC)やスマートフォンなどで構成可能な開発者ユーザーが操作する情報処理装置(情報処理端末)である。すなわち、開発者ユーザーのユーザー端末である。開発者用端末100は、開発するアプリケーションの設計操作を開発者から受け付け、設計された内容であるアプリケーションの各種定義情報を開発環境300に送信する。
開発環境300はネットワーク上(クラウド上、インターネット上)に構築された少なくとも1つのハードウェア資源を用いた環境である。開発環境300はマルチテナントの環境であり、複数の開発者ユーザーがログイン可能な環境である。開発環境300は、開発者情報301、実行エンジン302、ストレージ320を含む。開発環境300は、複数のWebサービス(クラウドサービス)を組み合わせて構築される。
開発者情報301は、開発者のアカウントIDとなるメールアドレス(ユーザーID)、パスワードなどの、開発環境300にログイン可能な開発者のアカウントを記録した情報である。開発者情報301は開発環境300に含まれる少なくとも1つの記録媒体に記録されている。開発者情報301の詳細については図14(a)を用いて後述する。
実行エンジン302は、開発環境300で実行すべき処理を実行するための少なくとも1つのハードウェア資源であり、プロセッサ303とメモリ304を含む。プロセッサ303は少なくとも1つのプロセッサからなり、クラウド上の1つのプロセッサでもよいし、複数のプロセッサを組み合わせたプロセッサ群としても良い。メモリ304は、プロセッサ303が実行すべきプログラムを記録した少なくとも1つの記録媒体である。後述する各種フローチャートのうち、開発環境300が実行するものとして説明するものは、実行エンジン302が実行する。すなわち、メモリ304に記録されたプログラムを、プロセッサ303が開発環境300のうちワークメモリとなる領域に展開して実行することにより実現する。
配信エンジン305は、開発環境300にアクセスした開発者用端末100に対して、開発者用端末100において実行すべきクライアント用プログラム322(HTMLのソースコードやJavaScriptのソースコードなど)を送信する。クライアント用プログラム322は、開発環境300に含まれるストレージ320に予め記録されている。
ストレージ320は、少なくとも1つの記録媒体の記憶領域であり、少なくとも、各開発者に共通であるクライアント用プログラム322を記憶している。また、開発者のアカウント毎の記憶領域である開発者用領域を有している。例えば、ログイン可能な開発者として開発者A、開発者B、開発者Cがいる場合には、開発者Aのための領域である開発者A領域323、開発者Bのための領域である開発者B領域324、開発者Cのための領域である開発者C領域325が含まれる。各開発者用領域には、各開発者が開発したアプリの定義情報を記憶している。例えば、既発者A領域323にはアプリ定義323a(図34で後述するアプリのUI定義情報、アプリの実行環境用プログラム含む)が記録されている。
開発者は、開発者用端末100のブラウザソフトから、開発環境300にアクセスするためのURLにアクセスすることで開発環境300にアクセスし、開発環境にログインする。開発環境にログインすると、開発環境から、クライアント用プログラム322と、過去に開発作業を行って保存していた内容であるアプリ定義(UI定義情報)を受信する。そして、新規にアプリケーションを設計する操作、あるいは、既存の(作りかけの)アプリケーションの更新設計をする操作を行い、その結果であるアプリの定義情報(アプリ定義、UI定義情報)を開発環境300に送信する。開発環境300は受信したアプリ定義を、その開発者用領域に保存する。このように、本実施形態では、クラウド上の開発環境300にアクセスすることが可能な端末であればどのような端末であっても開発者用端末100として利用してアプリケーションの設計を行うことができる。従って、インターネットに接続することが可能な端末さえあれば、開発者は場所を選ばずにアプリケーションの開発を行うことができる。
実行環境400は、ネットワーク上(クラウド上、インターネット上)に構築された少なくとも1つのハードウェア資源を用いた環境である。実行環境400はマルチテナント実行環境410と、複数のシングルテナント実行環境(例えば、シングルテナント実行環境450、460、470)を含む。実行環境400は、複数のWebサービス(クラウドサービス)を組み合わせて構築される。実行環境400には、開発者用端末100と開発環境300を用いて開発されたアプリケーションの定義情報(アプリ定義)がデプロイされるための環境である。そして、アプリケーションを使用するユーザーが用いるアプリユーザー用端末200、201は、アプリケーションの実行のためのURLにアクセスすることで、実行環境400にアクセスする。そして、アプリユーザー用端末200、201で行われた操作に応じた各種アクションを実行環境400が実行することで、開発されたアプリケーションが実行され、アプリユーザーにアプリケーションの機能が提供される。ネットワーク上にある実行環境400に構築されるアプリケーションはいわゆるWEBアプリケーションである。
マルチテナント実行環境410は、複数の開発者に共用されるマルチテナント環境の実行環境であり、複数の開発者によって開発されたアプリケーションがデプロイされる。すなわち、複数の開発者によって共有される環境であり、複数の開発者の複数のアプリを構築可能な環境である。マルチテナント実行環境410には、ユーザー情報411、実行エンジン412、配信エンジン415、ストレージ420、DBセット433を含む。
ユーザー情報411は、デプロイされたアプリケーション(構築されたアプリケーション)のユーザーアカウントIDとなるメールアドレス(ユーザーネーム)、パスワードなどの、アプリケーションにログイン可能なアプリユーザーのアカウントを記録した情報である。ユーザー情報411はマルチテナント実行環境410に含まれる少なくとも1つの記録媒体に記録されている。
実行エンジン412は、マルチテナント実行環境410で実行すべき処理を実行するための少なくとも1つのハードウェア資源であり、プロセッサ413とメモリ414を含む。プロセッサ413は少なくとも1つのプロセッサからなり、クラウド上の1つのプロセッサでもよいし、複数のプロセッサを組み合わせたプロセッサ群としても良い。メモリ414は、プロセッサ413が実行すべきプログラムを記録した少なくとも1つの記録媒体である。後述する各種フローチャートのうち、マルチテナント実行環境410が実行するものとして説明するものは、実行エンジン412が実行する。すなわち、メモリ414に記録されたプログラムを、プロセッサ413がマルチテナント実行環境410のうちワークメモリとなる領域に展開して実行することにより実現する。ここで実行されるプログラムは、アプリケーションのアクションを実行するプログラムを含む。
配信エンジン415は、マルチテナント実行環境410にアクセスしたアプリユーザー用端末200、201に対してアプリユーザー用端末200、201において実行すべきクライアント用プログラム422(HTMLのソースコードやJavaScriptのソースコードなど)を送信する。クライアント用プログラム422は、実行環境410に含まれるストレージ420に予め記録されている。
ストレージ420は、少なくとも1つの記録媒体の記憶領域であり、少なくとも、複数のアプリケーションで共通であるクライアント用プログラム422を記憶している。また、ストレージ420の所定の領域(所定のフォルダ、所定のバケット、所定の階層下)には、当該実行環境(マルチテナント実行環境410)へアクセスするためのアクセス先情報421が記録されている。また、開発者のアカウント毎の記憶領域である開発者用領域を有している。例えば開発者Aのための領域である開発者A領域423、開発者Bのための領域である開発者B領域424、開発者Cのための領域である開発者C領域425が含まれる。各開発者用領域には、各開発者が開発して、開発環境300からデプロイされたアプリの定義情報を記憶している。例えば、既発者A領域423にはアプリ定義423aが記録されている。
DBセット430は、実行環境410にデプロイされたアプリケーションが用いるデータベースに関する情報群である。DBセット430は、少なくとも1つの記録媒体の記憶領域に記憶される。DBセット430の詳細に関しては図23を用いて後述する。
シングルテナント実行環境1(450)、2(460)、3(470)は、それぞれ1人の開発者(1つの開発者アカウント)に専用の実行環境であり、所有者である開発者によって開発環境300を用いて開発されたアプリケーションがデプロイされる。本実施形態では例として、シングルテナント実行環境1(450)の所有者は開発者A、シングルテナント実行環境2(460)の所有者も開発者A、シングルテナント実行環境3(470)の所有者は開発者B、としている。このように、1人の開発者が複数のシングルテナント実行環境を所有することもできる。シングルテナント実行環境1(450)、2(460)、3(470)はそれぞれ、ユーザー情報451、461、471、実行エンジン452、462、472、配信エンジン455、465、475、ストレージ456、466、476、DBセット457、467、477を含む。これらは、1人の開発者に専用であることを除いては、前述したマルチテナント実行環境410の、ユーザー情報411、実行エンジン412、配信エンジン415、ストレージ420、DBセット433と同様の機能であるため、詳細な説明は省略する。シングルテナント実行環境は図示した3つだけでなく、更に数多く構築することが可能である。
図1のシステムを用いて、例えば、運用者が、マルチテナント実行環境410を開発者に無償提供し、シングルテナント実行環境を有償提供するという運用とすることが考えられる。マルチテナント実行環境410も、各シングルテナント実行環境も、リソースとサービスの提供業者(クラウドサービス事業者)に対して本システムの運用者が維持費用を支払う必要がある。マルチテナント実行環境410の維持費用は、運用者が負担して複数の開発者に無償提供することにより、開発者が本システムの試用のために費用負担をする必要がないため、多くの開発者が利用しやすく、本システムの普及を促進することができる。運用者は、シングルテナント実行環境に対して開発者に課金することで費用回収する。
1つの実行環境で単位時間あたりに処理できる処理リクエストの数に上限があり、数多くのアプリケーションがマルチテナント実行環境に構築され、多くのアプリユーザーが同時にアクセスした場合、リクエストが処理しきれず、アプリケーションの動作が遅くなるなどの状況になる可能性がある。他にも、マルチテナント実行環境に多くの開発者が開発した多くのアプリケーションがデプロイされて実行されることに対して、いくらかの制限があり、その制限のためにアプリケーションが十分なパフォーマンスを発揮できない場合がある。開発者が、有償で専用のシングルテナント実行環境を所有することで、このようなマルチテナント実行環境の制限による問題は回避(あるいは低減)することができる。すなわち、アプリケーションをシングルテナント実行環境に構築することで、十分なパフォーマンスを発揮するアプリケーションを構築することができる。
このようなマルチテナントシングル環境とシングルテナント実行環境の双方の特徴を踏まえ、開発者は、本システムを次のように活用できる。例えば、本システムを初めて使う場合にはマルチテナント実行環境410に本システムを用いて開発したアプリケーションを構築して試用を行った後に、本システムが開発者のソフトウェア開発に資すると判断したうえで、シングルテナント実行環境を有償で導入するといった使い方ができる。また、開発者が特定のアプリケーションXを開発する際に、一般ユーザーに公開する前に、人数の限られたテストユーザーに試用してもらうためのアプリケーションXのα版をマルチテナント実行環境410に構築する。そこでアプリケーションXのテスト行い、アプリケーションXの修正などを行い、更に開発を進める。そして、一般ユーザーへ公開しても問題ないレベルまで開発が完了した後に、アプリケーションXの本運用版をシングルテナント実行環境に構築して、一般ユーザーに公開する。このような使い方をすれば、開発者は、開発期間の開発費用を抑え、かつ、多数の一般ユーザーが利用しても問題の無いアプリケーションの運用を行うことができる。
図2に、開発者用端末100、アプリユーザー用端末200、アプリユーザー用端末201として適用可能な装置(電子機器)の一例としての情報処理装置のハードウェアブロック図を示す。図2において、内部バス150に対してCPU101、メモリ102、不揮発性メモリ103、画像処理部104、ディスプレイ105、操作部106、記録媒体I/F107、外部I/F109、通信I/F110が接続されている。内部バス150に接続される各部は、内部バス150を介して互いにデータのやりとりを行うことができるようにされている。
メモリ102は、例えばRAM(半導体素子を利用した揮発性のメモリなど)からなる。CPU101は、例えば不揮発性メモリ103に格納されるプログラムに従い、メモリ102をワークメモリとして用いて、情報処理装置の各部を制御する。不揮発性メモリ103には、画像データや音声データ、その他のデータ、CPU101が動作するための各種プログラムなどが格納される。不揮発性メモリ103は例えばハードディスク(HD)やROMなどで構成される。
画像処理部104は、CPU101の制御に基づいて、不揮発性メモリ103や記録媒体108に格納された画像データや、外部I/F109を介して取得した映像信号、通信I/F110を介して取得した画像データ、撮像された画像などに対して各種画像処理を施す。画像処理部104が行う画像処理には、A/D変換処理、D/A変換処理、画像データの符号化処理、圧縮処理、デコード処理、拡大/縮小処理(リサイズ)、ノイズ低減処理、色変換処理などが含まれる。画像処理部104は特定の画像処理を施すための専用の回路ブロックで構成しても良い。また、画像処理の種別によっては画像処理部104を用いずにCPU101がプログラムに従って画像処理を施すことも可能である。
ディスプレイ105は、CPU101の制御に基づいて、画像やGUI(Graphical User Interface)を構成するGUI画面などを表示する。CPU101は、プログラムに従い表示制御信号を生成し、ディスプレイ105に表示するための映像信号を生成してディスプレイ105に出力するように情報処理装置の各部を制御する。ディスプレイ105は出力された映像信号に基づいて映像を表示する。なお、情報処理装置自体が備える構成としてはディスプレイ105に表示させるための映像信号を出力するためのインターフェースまでとし、ディスプレイ105は外付けのモニタ(テレビなど)で構成してもよい。以下、開発者用端末100、アプリユーザー用端末200、アプリユーザー用端末201が実行する処理においての表示先は、特に断りが無い場合には、各動作主のディスプレイ105であるものとする。
操作部106は、キーボードなどの文字情報入力デバイスや、マウスやタッチパネルといったポインティングデバイス、ボタン、ダイヤル、ジョイスティック、タッチセンサ、タッチパッドなどを含む、ユーザー操作を受け付けるための入力デバイスである。なお、タッチパネルは、ディスプレイ105に重ね合わせて平面的に構成され、接触された位置に応じた座標情報が出力されるようにした入力デバイスである。
記録媒体I/F107は、メモリーカードやCD、DVDといった記録媒体108が装着可能とされ、CPU101の制御に基づき、装着された記録媒体108からのデータの読み出しや、当該記録媒体108に対するデータの書き込みを行う。外部I/F109は、外部機器と有線ケーブルや無線によって接続し、映像信号や音声信号の入出力を行うためのインターフェースである。通信I/F110は、外部機器やインターネット111などと通信して、ファイルやコマンドなどの各種データの送受信を行うためのインターフェースである。開発者用端末100は通信I/F110を用いて、インターネット111上にある開発環境300と通信可能(情報の送受信可能)である。アプリユーザー用端末200、201は通信I/F110を用いて、インターネット111上にある実行環境400と通信可能(情報の送受信可能)である。
<ログイン処理>
図3(a)、(b)に、ログイン処理のフローチャートを示す。この処理は、開発者用端末100から開発環境300にログインしてUIエディタを表示するまでの処理である。開発者用端末100において、インターネットブラウザソフトを立ち上げ、本実施形態の開発システム(アプリケーション開発プラットフォーム)のURLを指定してアクセスする指示があると、図3(a)の処理を開始する。図3(a)の処理は、開発者用端末100のCPU101が、インターネットブラウザソフトを実行するための不揮発性メモリ103に記録されたプログラムと、開発環境300から受信したクライアント用プログラム322とを、メモリ102に展開して実行することにより実現する。以降、単に開発者用端末100が実行する処理として記載したものは、開発者用端末100のCPU101が、インターネットブラウザソフトを実行するための不揮発性メモリ103に記録されたプログラムと、開発環境300から受信したクライアント用プログラム322とを、メモリ102に展開して実行する処理であるものとする。
開発者用端末100において、インターネットブラウザソフトを立ち上げ、本実施形態の開発システム(アプリケーション開発プラットフォーム)のURLを指定してアクセスすると、開発環境300の配信エンジン305がアクセスを検知し、アクセス元の開発者用端末100にクライアント用プログラム322を送信する。
S301では、開発者用端末100は、開発環境300から送信されたクライアント用プログラム322を受信したか否かを判定する。受信していなければS301で受信を待ち、受信したらS302に進む。
S302では、開発者用端末100は、開発環境300から受信したクライアント用プログラム322をメモリ102に記録する。
S303では、開発者用端末100は、クライアント用プログラム322に従い、ログイン画面をディスプレイ105に表示する。ログイン画面には、本実施形態の開発システムへのログイン画面である旨と、開発者IDとパスワードの入力欄、新規登録ボタン(アイコン)、ログインボタン(アイコン)が表示される。
S304では、開発者用端末100は、ログイン画面の開発者IDとパスワードの入力欄への入力操作を受け付ける。ユーザーの入力操作は操作部106を用いて行われる。開発者IDは開発者ユーザーを識別(特定)するためのユーザー識別情報である。本実施形態では開発者ID(ユーザーネーム)は、メールアドレスであるものとする。また、暗証情報として用いるパスワードは任意の文字列であるものとするが、生体認証情報(指紋認証は顔認証に用いる情報)や、パターン認証の情報(画面に入力された軌跡パターンの情報)など、他の暗証情報としてもよい。
S305では、開発者用端末100は、ログイン画面の新規登録ボタンを指示する操作(例えばクリック)されたか否かを判定する。なお、以下、表示アイテム(ボタン、アイコンなどの表示物、表示項目)に対して、操作部106に含まれるマウスでクリックする、タッチパネルへタッチする、といった方法で指示する操作を、単に「押下」と記載する。新規登録ボタンが押下された場合にはS306に進み、そうでない場合にはS307に進む。
S306では、開発者用端末100は、開発者アカウント登録処理を行う。開発者アカウント登録処理の詳細は図22(a)を用いて後述する。
S307では、開発者用端末100は、ログイン画面のログインボタンが押下されたか否かを判定する。ログインボタンが押下された場合にはS308に進み、そうでない場合にはS304に戻る。
S308では、開発者用端末100は、ログイン情報として、ログイン画面の開発者IDとパスワードの入力欄へ入力された情報(入力された開発者IDとパスワード)を開発環境300に送信する。送信後、開発環境300において認証処理が行われるため、その結果を待つ。
S309では、開発者用端末100は、開発環境300からログインエラーの旨の情報を受信したか否かを判定する。ログインエラーの旨の情報を受信した場合はS304に戻って再度ログイン情報の入力を受け付け、そうでない場合にはS310へ進む。
S310では、開発者用端末100は、開発環境300から実行環境リストを受信したか否かを判定する。開発環境300はログイン認証が成功すれば実行環境リストを開発者用端末100に送信するため、実行環境リストを受信したということは、ログイン認証に成功した(ログインできた)ということである。実行環境リストを受信した場合にはS311に進み、そうでない場合にはS309に戻る。
S311では、開発者用端末100は、ログイン後のアプリの開発画面として、S310で受信した実行環境リストをメモリ102に記録するとともに、受信した実行環境リストに基づいて実行環境の選択肢をディスプレイ105に表示する。実行環境リストはログインした開発者がアクセス可能な実行環境を示している。なお、S311以降に開発者用端末100で表示される画面であって、構築後のアプリの画面とは異なる画面を総称して開発画面と称するものとする。
図5(a)に、S311での実行環境の選択肢の表示例を示す。図5(a)の表示例では、ログインした開発者がアクセス可能な実行環境として、マルチテナント実行環境410に対応する選択肢551と、シングルテナント実行環境に対応する選択肢552の2つの選択肢が表示されている。開発者ユ―ザーはこれらの選択肢のいずれかを押下することにより選択して、SAVEボタン553を押下することで選択を確定することができる。ここで選択されるのは、今回のログインにおいてこの後の作業で更新したアプリケーションをデプロイする先である。この時点で実行環境にアクセスするわけではない。また、ここで選択した実行環境は後述する操作によって変更可能である。
S312では、開発者用端末100は、実行環境の選択が行われたか否かを判定する。実行環境の選択肢のいずれかが押下され、SAVEボタン553が押下された場合にはS313に進み、そうでない場合にはS312で実行環境の選択を待つ。
S313では、開発者用端末100は、S312で選択された実行環境を特定する情報(実行環境IDなど)を「選択中実行環境」としてメモリ102に記録するとともに、開発環境300に送信する。開発環境300では、選択中実行環境(選択環境)を特定する情報を受信したことに応じて、アプリ情報として、ログイン開発者が所有する全てのアプリケーション(過去に生成され、ストレージ320に記録されているアプリケーション)を特定する情報(アプリIDやアプリ名など)を送信する。
S314では、開発者用端末100は、開発環境300からアプリ情報を受信したか否かを判定する。アプリ情報を受信した場合にはS315に進み、そうでない場合にはS314でアプリ情報の受信を待つ。
S315では、開発者用端末100は、受信したアプリ情報をメモリ102に記録するとともに、アプリ情報に基づき、ログインユーザーが所有する(開発中の)アプリケーションの一覧(アプリ一覧)をディスプレイ105に表示する。
S316では、開発者用端末100は、アプリ一覧に表示されたアプリケーションの一覧のうち、いずれかのアプリケーションが選択されたか否かを判定する。いずれかのアプリが選択された場合にはS317に進み、そうでない場合はS320に進む。
S317では、開発者用端末100は、アプリ一覧から選択されたアプリケーションを「選択中アプリ」として、選択中アプリを特定する情報(アプリIDやアプリ名など)をメモリ102に記録するとともに、開発環境300に送信する。開発環境300では、選択中アプリを特定する情報を受信すると、ストレージ320のうち、ログインしている開発者の領域から選択中アプリの定義情報(アプリ定義)を取得し、開発者用端末100に送信する。
S318では、開発者用端末100は、開発環境300から選択中アプリの定義情報(UI定義情報)を受信したか否かを判定する。選択中アプリの定義情報を受信した場合には、受信した選択中アプリの定義情報をメモリ102に記録してS319に進み、そうでない場合にはS318で定義情報の受信を待つ。本実施形態では、この定義情報は、Json形式でアプリケーションに関する各種定義が記述されたJsonファイルであるものとする。以降、選択中アプリに関してディスプレイ105に表示を行う場合には、メモリ102に記録した定義情報に基づいて表示を行う。後述するUIエディタ処理などで選択中アプリについて更新する操作(例えば、UI部品の配置を変更するなど)が行われると、このメモリ102の定義情報を更新後の内容を定義するように更新する。そして保存の指示があった場合に、メモリ102に記録された最新の定義情報を開発環境300に送信し、ストレージ320のうちログイン開発者の領域に保存させる。このようにすることで、開発環境300との通信頻度の増大を抑え、通信のためにレスポンスが低下することを抑止して快適な更新作業を行うことができる。
S319では、開発者用端末100は、ディスプレイ105にUIエディタ画面を表示するとともに、受信した定義情報に基づく表示を行う。例えば、選択中アプリがデスクトップ用であるか用であるかに応じた形状(すなわち、アプリを利用するデバイスの種別に応じた形状)のキャンバス(UI画面の編集領域)を表示する。テスクトップ用であれば16:9の矩形のキャンバスとし、モバイル用であればスマートフォンを模した縦長のアスペクト比のキャンバスとする。サブメニュー領域(後述)には選択中アプリが有する(選択中アプリに属する)UI画面の一覧を表示する(この処理は厳密には後述する図4のS401で行われる)。また、キャンバスには、デフォルトで選択されるUI画面(イニシャルUIや最後に保存した際に編集していたUI画面)に配置されるコンポーネント(UI画面に配置されるUI部品)を表示する。なお、編集対象のUI画面をデフォルトで選択することをせず、この時点ではキャンバスには何も表示しないようにしても良い。S319の処理でログイン処理を終了し、続いて、図4のS401へ進む。
一方、S320では、開発者用端末100は、アプリ一覧を表示した画面に表示された、アプリケーションを新規に作成するためのアイコン(+マーク、不図示)が押下され、新規アプリケーションの作成が指示されたか否かを判定する。新規アプリケーションの作成が指示されたと判定した場合にはS321に進み、そうでない場合にはS316に戻る。
S321では、開発者用端末100は、新規作成するアプリケーションを、デスクトップ用(PC用)とするかモバイル用とするかの選択画面を表示し、いずれかを選択する操作を受け付ける。デスクトップ用アプリケーションとは、デスクトップPC、ノートPCなどのアプリユーザー用端末200からアクセスされ、操作されることを想定したアプリケーションである。モバイル用アプリケーションとは、スマートフォンなどのアプリユーザー用端末201からアクセスされ、操作されることを想定したアプリケーションである。
S322では、開発者用端末100は、新規作成するアプリケーションに関する基本となるアプリ情報(少なくともアプリ名、アプリID)の入力を受け付けるための画面を表示し、アプリ情報を設定する入力操作を受け付ける。アプリ情報の入力を受け付けると、S321で受け付けたデスクトップ用(PC用)かモバイル用かの情報と、S322で入力を受け付けたアプリ情報を開発環境300に送信する。こうして、新規作成されたアプリケーションの定義情報として、開発環境300のストレージ320に、新規のアプリケーションの定義情報が作成され、デスクトップ用(PC用)かモバイル用かの情報と、アプリ名、アプリIDが記録される。過去に作成済みのアプリケーションの定義情報にも、このようにして、デスクトップ用(PC用)かモバイル用かの情報と、アプリ名、アプリIDが記録されている。
S323では、開発者用端末100は、新規作成されたアプリケーションの編集画面としてUIエディタ画面を表示する。この場合、キャンバスはS321で選択されたデスクトップ用であるかモバイル用であるかに応じた形状で表示される。また、キャンバスはコンポーネントが1つも配置されていない空白情報で表示される。S323の処理でログイン処理を終了し、続いて、図4のS401へ進む。
図3(b)に、図3(a)の開発者用端末100側でのログイン処理と協働する開発環境300側のログイン処理を示す。図3(b)の処理は、開発環境300のプロセッサ303が、メモリ304に記録されたプログラムを、プロセッサ303が開発環境300のうちワークメモリとなる領域に展開して実行することにより実現する。以降、単に開発環境300が実行する処理として記載したものは、開発環境300の実行エンジン302が、より詳しくはプロセッサ303が実行する処理であるものとする。
S331では、開発環境300は、S308で開発者用端末100から送信されたログイン情報を受信したか否かを判定する。ログイン情報を受信した場合にはS332に進み、そうでない場合にはログイン情報の受信を待つ。
S332では、開発環境300は、受信したログイン情報と、開発者情報301を比較し、ログイン認証(ユーザー認証)を行う。より具体的には、受信したログイン情報に含まれる開発者IDとパスワードの組と一致する情報が、開発者情報301(ユーザー情報)に含まれているかを判定する。含まれていれば認証は成功する。
S333では、開発環境300は、S332の認証処理の結果、ログインOKである(認証に成功した、認証された、認証OKである)か否かを判定する。ログインOKである場合にはS335に進み、ログインOKでない場合にはS334に進み、ログインエラーである旨の情報を開発者用端末100に送信する。
S335では、開発環境300は、開発者情報301に含まれる、ログインOKとなった開発者(ログイン開発者)の実行環境リストを開発者用端末100に送信する。開発者情報301には、図14(a)に示す通り、各開発者について、メールアドレス(ユーザーネーム、開発者ID)とパスワードに加えて、アクセス可能な実行環境IDが記録されている。各実行環境IDはクラウドサービス(Webサービス)におけるアカウントIDであり、本実施形態では12桁のIDであるものとする。複数の実行環境にアクセス可能な開発者の場合は、12桁の実行環境IDがカンマで区切られて記録されている。S335では、ログイン開発者についての、このアクセス可能な実行環境ID(カンマで区切られた1つ以上の実行環境ID)を開発者用端末100に送信する。すなわち、S335において、開発者情報301を参照することにより、ログイン開発者がアクセス可能な実行環境が特定される。このように、各開発者のアクセス可能な実行環境(各開発者が利用可能な実行環境)は、開発環境300に記録された開発者情報301に記録されている。そして、このログイン可能な実行環境は、ログインOKとなった開発者でなければ取得できない。また、ログインOKとなった開発者自身のアクセス可能実行環境しか取得できない。このようにすることで、開発者が、自身のアクセス可能な実行環境へアクセスするための情報を、開発環境300にログインするための情報と別途に管理する必要がない。また、他のユーザーが不正に実行環境へアクセスすることも抑止できる。
S336では、開発環境300は、S313で開発者用端末100から送信された選択中実行環境を特定する情報(環境特定情報)を受信したか否かを判定する。選択中実行環境を特定する情報を受信した場合にはS337に進み、そうでない場合には選択中実行環境を特定する情報の受信を待つ。
S337では、開発環境300は、S336で受信した選択中実行環境を特定する情報に基づいて、選択中実行環境を、ストレージ320のログイン開発者用の領域に保存されている、設定管理用のファイルに記録する。
S338では、開発環境300は、ストレージ320のうち、ログイン開発者の領域から、ログイン開発者が所有する(ログイン開発者が作成した)全てのアプリケーションを示すアプリ情報を取得し、開発者用端末100に送信する。ここで送信するアプリ情報は、アプリの定義情報のうち、S315で前述したアプリ一覧を表示するために必要な情報までであり、各アプリに関する詳細な定義情報(コンポーネントの配置や後述するアクションを示す情報など)は含まれない。
S339では、開発環境300は、S322で開発者用端末100から送信された新規アプリに関する情報(デスクトップ用(PC用)かモバイル用かの情報と、アプリ名、アプリIDを含む情報)を受信したか否かを判定する。新規アプリに関する情報を受信した場合にはS340に進み、そうでない場合にはS341へ進む。
S340では、開発環境300は、ストレージ320のうち、ログイン開発者の領域に、S339で受信した新規アプリに関する情報に基づき、新規のアプリケーションの定義情報を作成して記録する。ここで記録される定義情報には、デスクトップ用(PC用)かモバイル用かの情報と、アプリ名、アプリIDが含まれる。なお、開発環境300では、マルチテナント実行環境410において他のユーザーのアプリと区別するために、アプリIDとして、S322で開発者から入力されたIDの直前に、アプリを所有する開発者の開発者IDに一意に対応する開発者コード8桁を付して記録する。そして、ログイン処理を終了する。以降、内部処理を行う場合とアクションボードにプログラミング言語で表示する場合にはアプリIDを用いる場合にはログイン開発者の開発者コードを付したIDで処理を行う。また、UIエディタなどにアプリIDとして表示をする際には開発者コードを除く、S322で開発者から入力されたID部分だけを表示する。
S341では、開発環境300は、S317で開発者用端末100から送信された選択中アプリを特定する情報を受信したか否かを判定する。選択中アプリを特定する情報を受信した場合にはS342に進み、そうでない場合はS339に戻る。
S342では、開発環境300は、S341で受信した選択中アプリを特定する情報に基づき、ストレージ320のうち、ログイン開発者の領域から、選択中アプリの定義情報(アプリ定義)を取得し、開発者用端末100に送信する。ここで送信する定義情報は、選択中アプリに関する詳細な定義情報(コンポーネントの配置や後述するアクションを示す情報など)を含む。そして、ログイン処理を終了する。
<UIエディタ処理>
図4、図5(b)を用いて、UIエディタ処理について説明する。UIエディタ処理は、UIエディタ画面(アプリケーション開発画面)に対する開発者(ユーザー)からの操作に応じて、構築するアプリケーションの各種定義(UI部品の定義、アクション定義)を行う処理である。
図5(b)に、ディスプレイ105におけるUIエディタ処理で表示されるレイアウト編集画面の表示例を示す。図5(b)の画面には、ヘッダーメニュー領域500、メインメニュー領域510、サブメニュー領域520、キャンバス530(UI画面の編集受付領域)が含まれる。
ヘッダーメニュー領域500には、選択中実行環境ボックス501、選択中アプリボックス502、選択中UI画面ボックス503、保存ボタン504、プレビューボタン505、デプロイボタン506が表示される。
選択中実行環境ボックス501には、選択中実行環境を表す情報として、選択中実行環境IDが表示される。選択中実行環境ボックス501の右端にある矢印アイコンを押下することで、プルダウンメニューとしてS310で取得したログイン開発者がアクセス可能な実行環境の一覧が表示され、一覧から任意の実行環境を選択することで、選択中実行環境を変更することが可能である。選択中実行環境が変更されても、選択中アプリは変更されず、メインメニュー領域510、サブメニュー領域520、キャンバス530に表示される内容は変更されない。このように、同じアプリケーションに関してデプロイする先である選択中実行環境を変更することで、同じアプリケーションを任意の複数の実行環境にデプロイすることが可能である。
選択中アプリボックス502には、選択中アプリを表す情報として、選択中アプリのアプリ名が表示される。選択中アプリボックス502の右端にある矢印アイコンを押下することで、プルダウンメニューとしてS314で取得したログイン開発者の所有するアプリ一覧が表示され、一覧から任意のアプリを選択することで、選択中アプリを変更することが可能である。選択中アプリが変更されると、サブメニュー領域520、キャンバス530に表示すべき内容が変わる。
選択中UI画面ボックス503には、キャンバス530で編集中のUI画面を表す情報として、編集中のUI画面名が表示される。選択中UI画面ボックス504にある矢印アイコンを押下することで、プルダウンメニューとして、S318で取得した選択中アプリの定義情報に基づき、選択中アプリに属するUI画面の一覧が表示され、一覧から任意のUI画面を選択することで、キャンバス530に表示する編集対象のUI画面を変更することが可能である。
メインメニュー領域510には、メインメニューのメニュー項目としての選択肢アイコンとして、アプリ一覧ボタン511、UI画面ボタン512、ワークフローボタン513、設定ボタン514、環境一覧ボタン515、データベースボタン516、ファイルマネージャーボタン517、ユーザー管理ボタン518、スナップショットボタン519が表示される。これらの選択肢の押下に応じた処理については図12の画面切替処理で後述する。
サブメニュー領域520には、メインメニューで選択された項目に応じたサブメニューが表示される。図5(b)の例では、UI画面ボタン512の下位階層メニューとしてUIコンポーネント一覧(UI部品一覧)が表示されている例である。
キャンバス530は、選択中アプリの選択中のUI画面(選択中UI画面ボックス503に表示されているUI画面名のUI画面)のレイアウト編集領域である。図5(b)のキャンバス530は、デスクトップ用アプリケーションのキャンバスの表示例であり、デスクトップ用の形状で表示されている。ユーザーは、サブメニュー領域520に表示されたUI部品一覧の中から任意のUI部品(UIコンポーネント)を選び、キャンバス領域530にドラッグアンドドロップで配置することができる。キャンバス領域530に配置されたUI部品を選択してサイズや位置の調整ができる。また、キャンバス領域530に配置されたUI部品を選択して右クリックして表示される右クリックメニュー(コンテキストメニュー)に含まれるプロパティを選択することで、配色などのより詳細な設定を行える。さらに、同じくコンテキストメニューに含まれるアクションを選択することで、アクションボードが表示され、そのUI部品が操作された場合に実行すべきアクションを設定することができる。キャンバス530の空白領域にカーソルがある状態で右クリックを行うことで、キャンバスのコンテキストメニューを表示させることができ、そこに含まれるアクションを選択することにより、構築されたアプリケーションにおいてそのキャンバスのUI画面がロードされた場合に実行(そのUI画面を表示する際に実行)すべきアクションを設定することができる。
図5(b)は、アプリ名「UI1」のアプリの、UI画面名「ui1」のキャンバス530に、UI部品として、パイチャート531(pie chart、円グラフ)、ボタン532、テキストフィールド533、534、アウトプットフィールド535、(Output Field)、タブ部品536を配置した例である。操作パス531aは、選択されているUI部品を示す選択枠かつ拡大縮小の指示を受け付ける操作パス(操作ハンドル)であり、パイチャート531が選択されていることを示している。
図4に、UIエディタ処理のフローチャートを示す。この処理は、開発者用端末100が実行する処理であり、図3のS319またはS323の後に続けて行われる処理である。
S401では、開発者用端末100は、選択中アプリの定義情報に基づき、サブメニュー領域520に選択中アプリのUI画面一覧を選択肢として表示する。このUI画面一覧に表示される各画面は、選択中アプリを実行環境にデプロイして構築し、アプリユーザー用端末200、201からアクセスしてアプリを実行した場合に表示する画面として設計している画面である。このUI画面一覧では、新規UI画面を追加する操作や、UI画面の削除操作も受付可能である。
S402では、開発者用端末100は、S401で表示されたUI画面一覧のうちいずれかのUI画面を選択する操作があったか否かを判定する。いずれかのUI画面が選択された場合はS404に進み、そうでない場合にはS403に進む。
S403では、メインメニュー領域510に表示されたいずれかの選択肢を選択する操作があったか否かを判定する。メインメニュー領域510に表示された選択肢が選択された場合にはUIエディタ処理を終了し、112で後述する画面切替処理へ進む。そうでない場合にはS402に戻る。
S404では、開発者用端末100は、メモリ102に記録した選択中アプリの定義情報に基づいて、キャンバス530にS402で選択されたUI画面を表示する。過去にUI部品が配置済みのUI画面であれば、定義情報に従って過去に配置されたUI部品がキャンバス530に表示される。すなわち、過去に途中まで作成したUI画面であれば続きから開発できる。S402で選択されたUI画面が新規に作成されたUI画面であれば、キャンバス530はUI部品が配置されていない空白の状態で表示される。S402で選択されたUI画面が、テンプレ―トとして予め用意されているUI画面(テンプレート画面)である場合には、ユーザーがそのUI画面に過去にUI部品を配置していなくても、予め定められたアクションが定義された雛形コンポーネントがキャンバス530の予め決まった位置に表示される。
S405では、開発者用端末100は、サブメニュー領域520に、UI部品の一覧を表示する。すなわち、選択中アプリのUI画面一覧から、UI部品一覧の表示に切り替える。キャンバス530に配置可能なUI部品としては、種別としてINPUT、Button(ボタン)、Display(情報表示用部品)、Navigation、Layout、Chartが含まれ、それぞれに種別に複数のUI部品が分類されている。UI部品一覧では、まず、図5(c)に図示するように、UI部品の種別の一覧が表示され、表示された種別のいずれかを選択する操作があったことに応じて、選択された種別に分類されるUI部品が展開表示される。前述した図5(b)は、INPUTに対応する種別の選択肢522が選択され、INPUTに分類されたUI部品の一覧が表示された例である。INPUTに分類されたUI部品には、例えばテキストフィールド523、テキストエリア524が含まれる。サブメニュー領域520はスクロール可能であり、表示しきれない選択肢(展開している種別のUI部品の選択肢や、他の種別の選択肢)はスクロールして表示させることができる。図5(b)のように展開している種別の選択肢522が操作されると、展開していた種別のUI部品一覧が折りたたまれ、UI部品の種別の一覧が表示される。
S406では、開発者用端末100は、サブメニュー領域520に表示されたUI部品が選択されたか否かを判定する。より詳しくは、サブメニュー領域520に表示されたUI部品をドラッグする操作が行われたか否かを判定する。サブメニュー領域520に表示されたUI部品が選択された場合にはS407に進み、そうでない場合にはS411へ進む。
S407では、開発者用端末100は、キャンバス530上の位置を指定する操作があったか否かを判定する。より詳しくは、ドラッグしていたUI部品をキャンバス530上にドロップする操作があったか否か判定する。キャンバス530上を指定する操作があった場合はS408へ進み、そうでない場合にはS407でキャンバス530上の位置の指定を待つ。なお、本実施形態ではドラッグアンドドロップの例を説明するが、サブメニュー領域520からUI部品を選択してキャンバス530上の指定位置に配置するための操作であれば操作方法はこれに限るものではない。
S408では、開発者用端末100は、S407で指定されたキャンバス上の位置が、既に配置されているタブ部品(UI部品の一種)の領域に含まれるか否かを判定する。タブ部品の領域に含まれていない場合にはS409に進み、タブ部品の領域に含まれている場合にはS410へ進む。タブ部品は、例えば図5(b)に示すタブ部品536である。タブ部品は複数のタブを有し(図5(b)の例ではITEM1、ITEM2、ITEM3と表示された3つのタブ)、いずれかのタブが選択されたことに応じて、タブ部品で表示する表示内容を、選択されたタブに対応する要素画面に切り替える。
図6(a)、(b)を用いて、タブ部品について説明する。図6(a)は、図5(b)とは異なるUI画面を表示したキャンバス530にタブ部品601を配置した場合のディスプレイ105における表示例である。タブ部品601の操作バス601aで示される範囲が、タブ部品601の占有領域である。操作バス601aを操作することで、要素画面を含むタブ部品601の全体の表示位置、全体の表示サイズを変更することができる。タブ部品601は、タブ610、タブ620、タブ630の3つのタブを持っている。各タブには、タブ部品のプロパティ設定で開発者によって設定可能なラベルがタブ名として表示されている。図示の例では、それぞれ、Tab0、Tab1、Tab2と表示されている。タブの数、順序はタブ部品のプロパティ設定から変更可能である。タブのプロパティ設定は、図7で後述するコンテキストメニュー処理のS706において、タブのコンテキストメニューからタブのプロパティボックスを開く操作があり、それに応じて表示されるタブのプロパティボックス(設定画面)に対する設定操作によって行われる。一点破線(説明のために図示したものであって表示されるものではない)で示す要素画面領域602は、選択されたタブに応じて表示内容が切り替わる領域である。要素画面領域602に表示される各タブに対応する表示内容を、各タブに対応する要素画面と称する。各タブに対応する要素画面にはそれぞれ異なるUI部品を配置可能である。図6(a)の例は、タブ610が選択され、タブ610に対応する要素画面が表示された例である。図示の例では、タブ610に対応する要素画面には、UI部品611とUI部品612が配置されている。図6(b)の例は、図6(a)の状態からタブ620がクリックされ、選択タブがタブ610からタブ620に変更された場合の表示例である。図6(b)では、要素画面領域602には選択されているタブ620に対応する要素画面が表示されている。図示の例では、タブ620に対応する要素画面には、UI部品621が配置されている。図6(a)、図6(b)の例では、定義情報には少なくとも、キャンバス530で編集中のUI画面のID(UI画面の識別情報)に対応付けて、タブ部品601のUI部品ID(UI部品の識別情報)とUI画面中におけるタブ部品601の位置が記録される。また、タブ部品601のタブ610のID(要素画面の識別情報)に対応付けて、UI部品611とUI部品612のIDと、タブ610の要素画面中におけるUI部品611とUI部品612のそれぞれの位置が記録される。また、タブ部品601のタブ620のIDに対応付けて、UI部品621のIDと、タブ620の要素画面中におけるUI部品621の位置が記録される。図4の説明に戻る。
S409では、開発者用端末100は、サブメニュー領域520からS406で選択されたUI部品を、キャンバス530上の指定位置にデフォルトのサイズで配置し、そのことを定義する情報をメモリ102に記録した定義情報に記録する。すなわち、定義情報において、配置先のUI画面(編集中のUI画面)のIDに、S410で配置したUI部品の種別、UI部品ID、配置座標、配置サイズなどを関連付けて記録する。
S410では、開発者用端末100は、サブメニュー領域520からS406で選択されたUI部品を、キャンバス530上の指定位置のタブ部品のうち、選択中のタブに対応する要素画面(現在表示中の要素画面)にデフォルトのサイズで配置し、そのことを定義する情報をメモリ102に記録した定義情報に記録する。すなわち、定義情報において、配置先のUI画面(編集中のUI画面)のIDに、S410で配置したUI部品の種別、UI部品IDとしてタブ部品のID、および、そのタブ部品において選択中だったタブのID、選択中だったタブに対応する要素画面中における配置座標、配置サイズなどを関連付けて記録する。このようにすることで、本実施形態ではタブ部品の各タブに対応する各要素画面に、それぞれ異なるUI部品を配置してレイアウトすることが可能である。またこのとき、UI部品の配置先の要素画面のタブを定義するために複雑な操作をする必要はなく、単に、配置したいUI部品をドラッグアンドドロップで配置する際に、配置先の要素画面を選択して表示させておけばよい。
S411では、開発者用端末100は、キャンバス530に配置済みのUI部品がクリックなどで選択されたか否かを判定する。配置済みのUI部品がクリックされた(選択された)場合にはS412に進み、そうでない場合にはS415に進む。
S412では、開発者用端末100は、S411でクリックされたUI部品に操作パスを表示する。操作パスの表示例が前述の操作パス531aや操作パス601aである。
S413では、開発者用端末100は、S411においてクリックで指定された位置が、タブ部品のタブ部分の領域内であるか否かを判定する。タブ部分でない場合にはS431に進み、タブ部分である場合にはS414に進む。タブ部分は、対応する要素画面への切り替えを指示する指示領域である。
S414では、開発者用端末100は、タブ部品の要素画面領域の表示を、S411においてクリックで指定された位置のタブに対応する要素画面に切り替える。例えば、S411でタブ部品536のうち、ITEM1、ITEM2、ITEM3と表示された3つのタブのいずれかの位置がクリックされたことに応じて、S412でタブ部品536に対して操作パスを表示するとともに、要素画面領域436aの表示内容を、クリックされたタブに対応する要素画面のものに切り替える。また、例えば図6(a)のように表示されていた場合に、タブ620が指定されたことに応じて図6(b)の表示に切り替える。すなわち、クリック前に表示されていた要素画面に配置されていたUI部品611、612が非表示となり、代わりに、クリックされたタブ620に対応する要素画面に配置されているUI部品621が表示される。このような制御をするのは、開発者がタブ部品の所望のタブの要素画面に他のUI部品を配置したい場合に、配置先とする所望のタブの要素画面を定義する操作を簡単にするためである。開発者は、タブ部品の所望のタブの要素画面に他のUI部品を配置したい場合、配置したいUI部品をドラッグアンドドロップで配置する前に、所望のタブを単にクリックして所望の要素画面を表示させておけばよい。
なお、本実施形態では説明の簡略化のため、S409、S410、S413、S414の処理についてタブ部品を例にして説明したが、これに限るものではない。タブ部品以外でも、アプリケーションの構築後に、UI部品内の一部の表示内容が当該UI部品への操作に応じて切り替わる所定種別のUI部品であれば、タブ部品と同様にS409、S410、S413、S414の処理を適用可能である。
一方、タブ部品などの所定種別のUI部品ではない他のUI部品の場合には、キャンバス530上でUI部品が選択されたことに応じて当該UI部品内の表示内容を切り替えることはしない。UI部品の選択に応じて行うのは操作バスの表示に係る処理だけであり、他のアクションは行わない。例えば、図5(b)のキャンバス530でボタン532が選択された場合には操作パスが表示されるのみで、ボタン532のアクション(構築されたアプリでボタン532が押下された場合に実行される処理)は実行しない。また、キャンバス530でテキストフィールド533が選択された場合には操作パスが表示されるのみで、テキストフィールド533内に文字入力カーソルを表示するなどの処理は行われない。
図6(c)、図6(d)、図6(e)を用いて、タブ部品と同様にS409、S410、S413、S414の処理を適用可能な種別のUI部品の例としてAppBarの例を説明する。図6(c)は、キャンバス530に、それぞれUI部品であるAppBar650、TextField661、Button662を配置した場合の例である。AppBar650は1つのUI部品であり、AppBar650の中に要素アイコン651と要素アイコン652が含まれる。要素アイコン651は、構築されたアプリケーションにおいては、ドロワーメニューを表示させるための指示を受け付ける表示アイテムである。要素アイコン652は、構築されたアプリケーションにおいては、ポップアップメニューを表示させるための指示を受け付ける表示アイテムである。キャンバス530において、配置済みのAppBar650のうち、要素アイコン651と要素アイコン652の位置がクリックされた場合にも、タブ部品のタブ部分と同様に制御する。より詳しくは以下のように制御する。
配置済みのAppBar650のうち、要素アイコン651の位置がクリックされた場合(S411でYes)、AppBar650に対する操作パスを表示する(S412)とともに、S413でYesと判定され、要素画面としてのドロワーメニューを表示する(S414)。これによって、図6(c)の表示状態から図6(d)の表示状態へ遷移する。図6(d)において、AppBar650に対する操作パス650aが表示され、かつ、要素アイコン651に対応する要素画面であるドロワーメニュー651aが表示されている。ドロワーメニュー651aは、画面左端から右側に引き出すようにして表示される領域であり、1つ以上のメニュー項目が表示される。ドロワーメニュー651aを表示させた状態で、サブメニュー領域520から他のUI部品をドラッグしてドロワーメニュー651aにドロップすることで、タブ部品を例にしてS408、S410で説明した処理と同様、ドロワーメニュー651aに対して他のUI部品を配置可能である。
配置済みのAppBar650のうち、要素アイコン652の位置がクリックされた場合(S411でYes)、AppBar650に対する操作パスを表示する(S412)とともに、S413でYesと判定され、要素画面としてのポップアップメニューを表示する(S414)。これによって、図6(c)の表示状態から図6(e)の表示状態へ遷移する。図6(e)において、AppBar650に対する操作パス650aが表示され、かつ、要素アイコン652に対応する要素画面であるポップアップメニュー652aが表示されている。ポップアップメニュー652aは、要素アイコン652の付近に表示される領域であり、1つ以上のメニュー項目(選択肢)が表示される。ポップメニュー652aを表示させた状態で、サブメニュー領域520から他のUI部品をドラッグしてポップアップメニュー652aにドロップすることで、タブ部品を例にしてS408、S410で説明した処理と同様、ポップメニュー652aに対して他のUI部品を配置可能である。図4の説明に戻る。
S415では、開発者用端末100は、キャンバス530上で配置済みのUI部品をドラッグする操作があったか否かを判定する。配置済みのUI部品をドラッグする操作があった場合にはS416に進み、そうでない場合にはS417へ進む。S416では、開発者用端末100は、ドラッグ操作に応じてドラッグされたUI部品(選択部品)の配置される位置を変更する。具体的には、ドロップされた位置に配置する。配置を変更すると、メモリ102に記録している定義情報も変更後の位置を表すように更新する。
S417では、開発者用端末100は、キャンバス530上で配置済みのUI部品の操作パスに対する操作があったか否かを判定する。操作パスへの操作があった場合にはS418に進み、そうでない場合にはS419へ進む。S418では、開発者用端末100は、操作パスへの操作に応じて操作パスが付されたUI部品(選択部品)のサイズを変更する。サイズを変更すると、メモリ102に記録している定義情報も変更後のサイズを表すように更新する。
S419では、開発者用端末100は、キャンバス530のいずれかの領域でコンテキストメニューを表示させる指示操作(本実施形態ではマウスの右クリック)があったか否かを判定する。右クリックがあった場合にはS420に進み、そうでない場合にはS421に進む。S420では、右クリックがあった際のマウスカーソルの位置に応じてコンテキストメニュー(右クリックメニュー)を表示し、コンテキストメニューに対する操作に応じた処理を行うコンテキストメニュー処理を行う。例えば、図5(b)のボタン532上にマウスカーソルがある状態で右クリックが行われた場合には、図5(d)に示すようなボタン532(指定UI部品)に関するコンテキストメニュー540を表示する。コンテキストメニュー540には、選択肢となるメニュー項目としてプロパティ541、アクション542、消去543が表示される。プロパティ541が選択されると、ボタン532に関するプロパティボックス(詳細設定ダイアログ)が表示され、ボタン532に表示するボタン名(ラベル)、ボタン532の色、数値指定でのサイズ、等の詳細な設定を行える。アクション542が選択されると、ボタン532に関するアクションボードが表示され、アクションボードに対してプログラミング言語であるJavaScriptでのアクションの入力が行える。ここで入力されるアクションは、構築されたアプリケーションにおいてボタン532(指定UI部品)が押下された場合に実行すべき処理である。消去543が選択されると、キャンバス530からボタン532を消去(削除)する。コンテキストメニュー処理の詳細については図7を用いて後述する。
S421では、開発者用端末100は、保存ボタン504が押下されたか否かを判定する。保存ボタン504が押下された場合にはS422に進み、そうでない場合にはS423へ進む。S422では、開発者用端末100は、メモリ102に記録している編集中のアプリケーションの定義情報を開発環境300に送信する。開発環境300は、定義情報を受信すると図33(a)または図35(a)で後述する保存処理を行う。
S423では、開発者用端末100は、プレビューボタン505が押下されたか否かを判定する。プレビューボタン505が押下されたと判定した場合にはS424へ進み、そうでない場合にはS425へ進む。S424では、開発者用端末100は、プレビュー処理を行う。プレビュー処理では、キャンバス503を非表示とし、メモリ102に記録している定義情報または開発環境300に記録されている定義情報に基づいて、キャンバス503で編集しているUI画面について、構築されたアプリケーションでそのUI画面を見た場合と同じ見た目となるようなプレビューを表示する。プレビューでは、UI部品を操作するための操作パスは表示されない。また、UIエディタ画面では実行されない(キャンバス530への操作では実行されない)一部の動作について、プレビューでは実行される。例えば、画面遷移用のUI部品やリンク部分を操作した場合に、画面遷移やリンク先への遷移が実行される。また、項目に対する選択枠の移動をキーボードのタブキーの操作によって行うといった動作も実行される。なお、アクションボートに開発者が入力したアクションやデータベースの参照といった動作は行われない。その分、プレビュー処理は実際にデプロイして確認する場合よりも高速に表示することができる。
S425では、開発者用端末100は、デプロイボタン506が押下されたか否かを判定する。デプロイボタン506が押下された場合にはS426へ進み、そうでない場合にはS427へ進む。S426では、開発者用端末100は、デプロイ処理を実行する。デプロイ処理については図24(a)を用いて後述する。なおデプロイボタン506が押下されてデプロイ処理を行う時には開発者はデプロイ先となる実行環境を選択する操作はする必要がなく、予め選択してあって、選択中実行環境ボックス501に表示されている選択中実行環境へデプロイが行われる。開発者は、特定の1つの実行環境にデプロイすべき内容をまとめて更新するように作業する場合が多い。そのため、本システムでは、更新すべきアプリケーションの選択より前にデプロイ先となる実行環境を選択させ(図3のS311)、アプリケーションをデプロイする際に都度実行環境を選択させることはない。従って、誤って意図しない実行環境にデプロイしてしまうという操作ミスを抑止し、また、作業を効率かすることができる。また、開発環境300にログインする際に認証処理をするための操作を行ったものの、デプロイする実行環境に対して別途、アカウント認証処理するための操作をする必要は無い。従って作業手数の増大を防ぎ効率的に作業することが可能である。すなわち、開発者用端末100は、デプロイ先の実行環境に関する認証情報を開発者ユーザーから取得することはない。
S427では、開発者用端末100は、選択中実行環境を変更する操作があったか否かを判定する。具体的には、選択中実行環境ボックス501に対して、選択中実行環境を変更する操作があったか否かを判定する。選択中実行環境を変更する操作があった場合にはS428へ進み、そうでない場合にはS429へ進む。S428では、開発者用端末100は、選択された実行環境を特定する情報(実行環境IDなど)を「選択中実行環境」としてメモリ102に記録するとともに、開発環境300に送信する。また、選択中実行環境ボックス501の表示内容を、変更後の選択中実行環境を表すように更新する。開発環境300では、選択中実行環境を特定する情報を受信すると、それに基づき、選択中実行環境を、ストレージ320のログイン開発者用の領域に保存されている、設定管理用のファイルに記録する。
S429では、開発者用端末100は、編集対象のアプリケーションを変更する操作があったか否かを判定する。具体的には、選択中アプリボックス502に対して選択中アプリを変更する操作があったか否かを判定する。選択中アプリを変更する操作があった場合には図3のS317に進み、変更後の選択中アプリに基づいてS317以降の処理を実行する。すなわち、サブメニュー領域520、キャンバス530の表示内容が更新される。選択中アプリを変更する操作がなかった場合には処理はS430へ進む。
S430では、開発者用端末100は、編集対象のUI画面を変更する操作があったか否かを判定する。具体的には、選択中UI画面ボックス503に対して、選択中UI画面を変更する操作があったか否かを判定する。選択中UI画面を変更する操作があった場合にはS404に進み、変更後の選択中UI画面に基づいて処理を行う。すなわち、キャンバス530の表示内容は変更後の選択中UI画面の内容に更新される(切り替わる)。選択中UI画面を変更する操作がなかった場合には処理はS431へ進む。
S431では、開発者用端末100は、メインメニュー領域510に表示されたいずれかの選択肢を選択する操作があったか否かを判定する。メインメニュー領域510に表示された選択肢が選択された場合にはUIエディタ処理を終了し、図12で後述する画面切替処理へ進む。そうでない場合にはS406に戻る。
<コンテキストメニュー処理>
図7に、コンテキストメニュー処理のフローチャートを示す。この処理は、図5のS420の詳細フローチャートである。
S701では、開発者用端末100は、表示すべきコンテキストメニューが、ボタン(Button)の種別のUI部品に関するものであるか否かを判定する。より詳しくは、S419で右クリックを受け付けた際にマウスで指定していたUI部品(指定UI部品)の種別がボタンであるか否かを判定する。ボタンである場合にはS710に進み、そうでない場合にはS702に進む。
S702では、開発者用端末100は、表示すべきコンテキストメニューが、キャンバスに関するものであるか否かを判定する。より詳しくは、S419で右クリックを受け付けた際にマウスで指定していた位置が、キャンバス530のうちUI部品が配置されていない空白領域であったか否かを判定する。空白領域であった場合(表示すべきコンテキストメニューが、キャンバスに関するものである場合)はS703に進み、そうでない場合にはS704に進む。
S703では、開発者用端末100は、キャンバスのコンテキストメニュー処理を行う。キャンバスのコンテキトメニュー処理については図19を用いて後述する。
S704では、開発者用端末100は、表示すべきコンテキストメニューが、データグリッド(表)の種別のUI部品に関するものであるか否かを判定する。より詳しくは、S419で右クリックを受け付けた際にマウスで指定していたUI部品(指定UI部品)の種別がデータグリッドであるか否かを判定する。データグリッドである場合にはS705に進み、そうでない場合にはS706に進む。
S705では、開発者用端末100は、データグリッドのコンテキストメニュー処理を行う。データグリッドのコンテキトメニュー処理については図30を用いて後述する。
S706では、開発者用端末100は、その他の処理として、指定された位置に対応する指定対象に関するコンテキストメニューを表示し、操作に応じた処理を行う。詳細は省略する。
S710では、開発者用端末100は、編集対象のUI画面(選択中UI画面)がテンプレート画面であるか否かを判定する。テンプレート画面である場合にはS721に進み、そうでない場合にはS711に進む。
S711では、開発者用端末100は、指定UI部品に関するコンテキストメニューとして、図5(d)に示したボタン用のコンテキストメニューを指定位置(マウスカーソル位置)の近傍に重畳表示する。
S712では、開発者用端末100は、コンテキストメニューに含まれる選択肢のうち、プロパティ(図5(d)のプロパティ541)が選択されたか否かを判定する。プロパティが選択された場合にはS713に進み、そうでない場合にはS714へ進む。
S713では、開発者用端末100は、指定UI部品に関するプロパティボックス(詳細設定ダイアログ)として、ボタン用のプロパティボックスをキャンバス530に重畳して表示する。そして、プロパティボックスに対する各種設定操作を受け付ける。ここで、例えば、指定UI部品であるボタンに表示するボタン名(ラベル)、ボタンの色、数値指定でのサイズ、等の詳細な設定を行える。設定を行って反映操作を行うと、キャンバス530において、設定を反映した表示形態で指定UI部品が表示される。
S714では、開発者用端末100は、コンテキストメニューに含まれる選択肢のうち、アクション(図5(d)のプロパティ542)が選択されたか否かを判定する。アクションが選択された場合にはS715に進み、そうでない場合にはS716へ進む。
S715では、開発者用端末100は、指定UI部品であるボタンに関するアクションボード処理を行う。アクションボード処理については図8を用いて後述する。
S716では、開発者用端末100は、コンテキストメニューに含まれる選択肢のうち、消去(図5(d)の消去543)が選択されたか否かを判定する。消去が選択された場合にはS717に進み、そうでない場合にはS718へ進む。
S717では、開発者用端末100は、指定UI部品を消去し、メモリ102に記録した定義情報のうち、指定UI部品に関する情報(位置やサイズなどの定義、プロパティやアクションなど)を消去する。これによって、キャンバス530において指定UI部品は消去(削除)されて非表示となる。
S718では、開発者用端末100は、コンテキストメニューに含まれる選択肢のうち、他の選択肢が選択されたか否かを判定する。他の選択肢が選択された場合にはS719に進み、選択された選択肢に応じた処理を行う。そうでない場合にはS720へ進む。
S720では、開発者用端末100は、コンテキストメニューを閉じる操作(例えば、コンテキストメニューが表示された領域外をクリックする操作)があったか否かを判定する。コンテキストメニューを閉じる操作があった場合には、コンテキストメニューを非表示とし、図7の処理を終了する。閉じる操作がない場合にはS712に戻る。
一方、S721では、開発者用端末100は、指定UI部品に関するコンテキストメニューとして、図26(d)に示す、テンプレート画面用で、かつ、ボタン用のコンテキストメニューを指定位置(マウスカーソル位置)の近傍に重畳表示する。テンプレート画面用のコンテキストメニュー(図26(d)の雛形部品2634)には、通常のUI画面用のコンテキストメニュー(図5(d)に示したコンテキストメニュー540)と異なり、選択肢としてアクション、消去は表示されず、プロパティだけが表示される。すなわち、UI画面のうち、テンプレートの画面に配置されたUI部品に関しては、当該UI部品が操作された場合のアクションを開発者が設定できないようにしている。この理由については後述する。
S722では、開発者用端末100は、コンテキストメニューに含まれる選択肢のうち、プロパティが選択されたか否かを判定する。プロパティが選択された場合にはS723に進み、そうでない場合にはS724へ進む。S723の処理はS713と同様である。
S724では、開発者用端末100は、コンテキストメニューを閉じる操作(例えば、コンテキストメニューが表示された領域外をクリックする操作)があったか否かを判定する。コンテキストメニューを閉じる操作があった場合には、コンテキストメニューを非表示とし、図7の処理を終了する。閉じる操作がない場合にはS722に戻る。
<アクションボード処理>
アクションボードに関する処理について説明する。キャンバスに配置しているUI部品を指定してコンテキストメニューからアクションを選択すると、指定されたUI部品に関するアクションを設定するためのアクションボートを表示する。例えば、図9(a)に示すようなUI画面を編集していた場合を考える。図9(a)は、ディスプレイ105におけるUIエディタ画面の一部を示す図である。図9(a)では、サブメニュー領域520にUI部品一覧が表示され、キャンバス900に編集対象のUI画面が表示されている。キャンバス900には、ボタンであるUI部品901と、その他のUI部品が配置されている。UI部品901が指定され、コンテキストメニューよりアクションの選択肢が選択されたことに応じて、図9(b)に示すようなアクションボードが表示される。
図9(b)は、UI部品901に関するアクションボードの表示例である。アクションボード910は、キャンバス900が表示されていた領域に、キャンバスに代えて表示される。テンプレート画面に予め配置される雛形部品(雛形コンポーネント)でなければ、開発者が過去に指定UI部品に対してアクションを設定していなければ、アクションボート910は図9(b)のように空白で表示される。なお、アクションボード910に「1」と表示されているのは行数を示すガイド表示であって、アクションの内容ではない。開発者はこのアクションボード910に、操作部106に含まれるキーボードを操作して、プログラム言語であるJavaScriptで任意の文字列を入力することにより、任意のアクションを設定することができる。アクションボードで設定された内容を実行するトリガーは予め定められており、指定UI部品が操作されたことである。従って開発者は、アクションを実行するトリガーが何かというのは設定する必要がない(JavaScriptで記述する必要はない)。例えば、指定UI部品がボタンである場合は、構築後のアプリにおいてそのボタンが押下されたことがトリガーであり、トリガーの発生に応じて、そのボタンのアクションボードに設定したアクションが実行される。
また、アクションボード910とともに、サブメニュー領域には、UIエディタ画面で表示されていた図9(a)のようなUI部品一覧、あるいはUI画面一覧に代えて、関数(Function)一覧920が表示される。関数一覧920には、アクションボード910の表示を指示する選択肢922と、関数のそれぞれを表示させる指示をする関数の選択肢とが表示される。なお、予め用意された関数ではなく、開発者(ユーザー)が後述する関数追加ボタン921を押下して作成(追加)した関数を創作関数(作成関数、追加関数、自作関数)と称するものとする。自動的に作成された関数や予め用意された関数が無く、開発者が過去に指定UI部品に対して創作関数を作成していなければ、関数一覧920には、図9(b)に示すように、関数の選択肢は表示されず、選択肢922と関数追加ボタン921だけが表示される。
関数追加ボタン921が押下されると、創作関数を追加するためのダイアログボックス(追加ダイアログ930と称する)を表示する。図9(c)に追加ダイアログ930の表示例を示す。追加ダイアログ930には、関数の種別(Function Type)の選択を受け付ける種別選択欄931と、関数の名前(Function Name)の入力を受け付ける関数名入力欄932と、SAVEボタン933が表示される。追加ダイアログに対する入力が行われ、SAVEボタン933が押下されると、種別選択欄931で選択された種別に応じた関数の設定画面が表示されるとともに、関数一覧920に関数名入力欄932に入力された関数名が追加で表示される。
図9(d)は、種別選択欄931でRESTが選択された場合に表示されるREST関数設定画面の表示例である。アクションボード910に代えて、REST(REpresentational State Transfer)を用いた関数(REST関数)を作成するために必要な各種設定を受け付けるためのREST関数設定画面940が表示される。また、関数一覧920には、関数の選択肢として、関数名入力欄932に入力された関数名「rest01」の関数923が表示される。なお、「rest01」の前に表示されているアイコンは、関数923の種別がREST関数であることを示している。関数の設定画面で全ての必須設定項目が設定されていない場合(設定すべき情報が不足している場合)には、関数が未完成であることを示す未完マーク929が表示され、対応する関数923が未完成の状態であることが識別可能に表示される。
図9(d)のREST関数設定画面940には、設定欄941~944が表示される。設定欄941は、関数名の設定画面であり、初期状態では関数名入力欄932に入力された関数名が表示されるが、開発者からの入力操作に応じて変更可能である。設定欄942はarguments(引数)を設定するための変数名を設定する設定欄である。本実施形態ではparamがデフォルトで設定されており、変更できないものとする。変更できないことを示すためにグレーアウトして表示される。設定欄943は、REST関数のタイプを設定する設定欄である。この領域の右端の三角アイコンを操作することでプルダウンメニューに選択肢としてGET、POST、PUT、DELETEが表示され、いずれかの選択肢を選択して設定することができる。ここで設定される種別は、この関数が行うリクエストの種別である。設定欄944はこの関数が行うリクエストを送信する先となるURLの設定欄である。このように、REST関数設定画面940でREST関数を作成する場合には、開発者はプログラム言語でソースコードの文字列を記述する必要はない。
図10(a)~(d)に、更に創作関数の設定画面とアクションボードの表示例を示す。図10において、図9と同じものについては図10と同じ符号を付し、説明を省略する。
図10(a)は、種別選択欄931でSQLが選択された場合に表示されるSQL関数設定画面の表示例である。アクションボード910に代えて、SQL(Structured Query Language)を用いた関数(SQL関数)を作成するために必要な各種設定を受け付けるためのSQL関数設定画面950が表示される。また、関数一覧920には、関数の選択肢として、関数名入力欄932に入力された関数名「sql01」の関数924が未完マーク929とともに表示される。なお、「sql01」の前に表示されているアイコンは、関数924の種別がSQL関数であることを示している。設定欄951は、関数名の設定画面であり、初期状態では関数名入力欄932に入力された関数名が表示されるが、開発者からの入力操作に応じて変更可能である。設定欄952はarguments(引数)を設定するための変数名を設定する設定欄である。本実施形態ではparamがデフォルトで設定されており、変更できないものとする。変更できないことを示すためにグレーアウトして表示される。設定欄953は、コンピュータ言語の一種であるSQL(データベース言語であり、プログラミング言語ではない)で、データベースへ指示を出す文字列(SQL文、SQLステートメント)を入力するための入力欄である。開発者は、設定欄953に対して、操作部106に含まれるキーボードなどから、任意のSQL STATEMENTを入力することができる。このように、SQL関数設定画面950でSQL関数を作成する場合には、開発者はプログラム言語でソースコードの文字列を記述する必要はない。
図10(b)は、開発者が創作関数である関数923~925を作成した後に、アクションボード910に、開発者がある程度JavaScriptでコード(文字列)を入力(記述)した後に、「sq」と入力した段階の表示例である。本実施形態では、開発者ユーザーが文字列を入力した際に、入力された文字列が作成済みの創作関数の関数名(識別情報)と前方一致している場合には、コードアシスト欄911に、前方一致した関数名を入力候補の選択肢として表示する。図示の例では、入力された「sq」が、作成済みの創作関数である関数924の関数名「sql01」と前方一致するため、選択肢として「sql01」が表示される。ユーザーが、コードアシスト欄911に表示された「sql01」を選択する操作を行うと、「l01」を入力する操作を行わなくとも、図10(c)に示すように、アクションボード910に「sql01」が入力される。このコードアシスト機能により、開発者(ユーザー)が創作関数の関数名の文字の全てをキーボードで打たなくとも創作関数の関数名(識別情報)を入力することができ、操作手数の削減に寄与する。また、作成済みの創作関数の関数名に前方一致していればコードアシスト欄911にフルネームが表示され、一致していなければ(すなわち、その文字列で始まる関数が存在しなければ)コードアシスト欄911は表示されない。従って開発者は、自身が作成済みの創作関数の関数名として誤っていないことを確認して入力することができ、関数名の入力ミスを防止することができる。なお、前方一致する創作関数が複数ある場合には、コードアシスト欄911には、複数の選択肢が表示される。また、コードアシスト欄911に表示される創作関数の関数名は、アクションボード910の対象となっている指定UI部品(図示の例ではUI部品901)について作成された関数であって、他のUI部品について作成された創作関数については表示されない。従って、誤って他のUI部品について作成した創作関数の関数名であって、指定UI部品の創作関数としては存在しない関数名をアクションボード910に記述してしまうミスも防止することができる。
また、図10(c)に示す通り、アクションボード910とともに、関数一覧920には、開発者が作成した創作関数の関数923~925のそれぞれについて、関数の種別(文字列の前のアイコン)と、関数の名称が表示される。従って開発者ユーザーは、アクションボード910にアクションのコード(JavaScriptでの文字列)を入力(記述)しながら、どうような種別のどのような名称の創作関数を作成済みであるかを確認することができる。そのため、アクションボード910に記述できる有効な創作関数の確認や管理の手間(例えば、手元にメモしておく、別の画面を開いて確認する、といった手間)を削減することができる。また、関数名の入力ミスの防止にも寄与する。関数一覧920に表示される関数は、アクションボード910の対象となっている指定UI部品(図示の例ではUI部品901)について作成された関数であって、他のUI部品について作成された創作関数については表示されない。従って、誤って他のUI部品について作成した創作関数の関数名であって、指定UI部品の創作関数としては存在しない関数名をアクションボード910に記述してしまうミスも防止することができる。また、創作関数は、指定UI部品のアクションの定義の際にのみ有効であり、他のUI部品のアクションの定義には影響を及ぼさない。従って、指定UI部品について作成する創作関数の関数名が、他のUI部品について作成された創作関数と同じ関数名となった場合、アクションボード910にその関数名が記述されたとしても指定UI部品について設定された関数設定のみが反映され、他のUI部品について設定された関数設定は反映されない。従って、他のUI部品について作成済みの創作関数の関数名と同じ関数名を用いたとしてもエラーとなることはない。そのため、ユーザーは、他のUI部品について作成済みの創作関数との関数名の重複を気にすることなく創作関数の関数名を決め、アクションボード910に入力することができる。すなわち、アプリケーションの開発全体において多数の創作関数を作成することになるが、それらは指定UI部品に関連付けて自動的に管理・整理され、コードアシスト欄911や関数一覧920に表示されるため、開発者による多数の創作関数の管理が非常に容易になる。従って関数名の確認に係る手間・時間を削減することができる。また、関数名の入力ミスも抑制できる。そのため、関数名の入力ミスを犯した場合のデバック作業(バグ取りの作業)も抑制することができる。以て、ソフトウェア開発(アプリケーション開発)に掛かる負荷・工数を削減し、より効率的なソフトウェア開発(アプリケーション開発)を行うことができる。
図10(d)は、アクションボード910にアクションのコードをプログラミング言語で入力し終えた場合の表示例である。図示の例では、3行目の点線960で示した部分に、創作関数である「rest01」(関数一覧920の関数923)を用いている。図10(d)のアクションボード910に図示したコードの文字列では、創作関数であるrest01の詳細は定義されていない。また、開発者がrest01の設定をREST関数設定画面940で行った際にも、プログラミング言語でのrest01の詳細の定義は行っていない。この状態のアクションの定義を含む定義情報を開発環境300にアップロードして保存した場合、開発環境300が、後述する図33(a)または図35(a)の保存処理において、実行環境用プログラムとして、アップロードされた定義情報から、関数の設定内容とアクションボード910に記述された文字列に基づき、プログラミング言語での関数の定義を含むプログラミング言語でのソースコードを作成する。このように、開発環境300は、プログラミング言語で記述された創作関数の識別情報(関数名)が含まれる文字列を取得すると、関数設定画面で設定された情報に基づいて、創作関数の機能を含む文字列(アクションボードに記載されたアクション)で示される機能(アクション)を実行可能とする制御を行う。
図11に、図10(d)のアクションボード910に記載された文字列と、REST関数設定画面940で設定されたrest01の設定内容に基づいて、開発環境300が生成するプログラミング言語でのソースコードの例を示す。なお、図示の例において、左端に記載した1~75の数字は、行数を示すために図示したものであって、ソースコードの一部ではない。図11の例は、プログラミング言語でのrest01の詳細の定義を含む75行のソースコードである。しかし開発者自身は75行もの入力をする必要はない。REST関数設定画面940での設定を行い、図10(d)のアクションボード910に図示した分量(7行)の文字列を記述すれば、図11に示すソースコードの内容を定義できる。すなわち、ローコードで効率的な開発を行うことができる。
図8に、アクションボード処理のフローチャートを示す。この処理は、図7のS715で前述したアクションボード処理の詳細フローチャートであり、図9(b)~(d)、図10(a)~(d)の表示例を用いて説明した動作となるように制御する処理である。
S801では、開発者用端末100は、ディスプレイ105にアクションボードを表示する。指定UI部品に対してアクションが定義されていなければ、図9(b)で説明したような空白のアクションボート910を含む画面を表示する。指定UI部品に対して既にアクションが定義されていれば、図10(d)で説明したような、アクションの文字列が入力されたアクションボード910を含む画面を表示する。
S802では、開発者用端末100は、アクションボード910に対してアクションを記述する操作(記述操作)があったか否かを判定する。アクションを記述する操作とは、例えば、アクションボード910を選択した状態で操作部106に含まれるキーボードに対する操作や、タッチパネルに表示されるソフトキーボードをタッチする操作によって行われるテキスト入力操作である。アクションを記述する操作があった場合にはS803に進み、そうでない場合にはS810に進む。
S803では、開発者用端末100は、アクションを記述する操作によるアクションの入力操作を受け付け、アクションボード910に、入力された文字を表示する。
S804では、開発者用端末100は、S803で入力された文字と、その前までに入力された文字とによる文字列が、創作関数の関数名に前方一致する(すなわち、一部一致する)か否かを判定する。前方一致する場合にはS805に進み、そうでない場合にはS808に進む。
S805では、開発者用端末100は、S804で一致すると判定された創作関数の関数名をコードアシスト欄に選択肢として表示する。これによって、図10(b)で説明したようにコードアシスト欄911が表示される。なお、コードアシスト欄911には、創作関数だけでなく、プログラミング言語で一般的に利用可能な関数名などについても、入力された文字列に前方一致するものを表示しても良い。
S806では、開発者用端末100は、コードアシスト欄に表示された選択肢のいずれかが選択されたか否かを判定する。選択肢のいずれかが選択された場合にはS807に進み、選択された選択肢の関数名をコードアシスト欄911に表示する。例えば、図10(b)の状態からコードアシスト欄911の選択肢が選択されたことに応じて、アクションボード910の5行目に示すように、「sql01」と入力して表示する。選択肢のいずれも選択されなかった場合には処理はS808に進む。
S808では、開発者用端末100は、アクションを記述する操作が継続して行われたか否かを判定する。アクションを記述する操作が継続して行われた場合にはS803に進み、そうでない場合にはS802に進む。
S810では、開発者用端末100は、関数を追加する指示をする操作が行われたか否かを判定する。具体的には、関数追加ボタン921が押下されたか否かを判定する。関数追加ボタン921が押下された場合にはS811に進み、そうでない場合にはS820に進む。
S811では。開発者用端末100は、創作関数を追加するための追加ダイアログ930を表示し、追加ダイアログ930に対する入力を受け付ける。追加ダイアログで入力を受け付ける内容は図9(c)を用いて前述したとおりである。追加ダイアログへの入力が行われ、SAVEボタン933が押下されるとS812に進む。
S812では、開発者用端末100は、サブメニュー領域の関数一覧920に、追加ダイアログの関数名入力欄932に入力された関数名を追加で、未完マーク929を付した状態で表示する。
S813では、開発者用端末100は、追加ダイアログの種別選択欄931で選択された種別がスクリプトであるか否かを判定する。スクリプトである場合にはS814に進み、そうでない場合にはS815に進む。S814では、開発者用端末100は、スクリプト関数の設定画面(不図示)を表示し、開発者ユーザーからの設定操作を受け付ける。
S815では、開発者用端末100は、追加ダイアログの種別選択欄931で選択された種別がSQLであるか否かを判定する。SQLである場合にはS816に進み、そうでない場合(すなわち、追加ダイアログの種別選択欄931で選択された種別がRESTである場合)にはS817に進む。S816では、開発者用端末100は、SQL関数設定画面を表示し、開発者ユーザーからの設定操作を受け付ける。SQL関数設定画面で受け付ける設定内容は図10(a)を用いて前述したとおりである。
S817では、開発者用端末100は、REST関数設定画面を表示し、開発者ユーザーからの設定操作を受け付ける。REST関数設定画面で受け付ける設定内容は図9(d)を用いて前述したとおりである。
S818では。開発者用端末100は、それぞれの種別の関数設定画面において、必須項目として予め定められた設定項目への入力が完了したか(設定が完了したか)を判定する。必須項目への入力が完了した場合にはS819に進み、そうでない場合にはS802に進む。
S819では、開発者用端末100は、設定中の創作関数に関して関数一覧920に表示された関数名に対応付けて表示していた未完マークを非表示とする。これによってユーザー(開発者)は、設定中の創作関数が、アクションボード910で使える有効な設定状態であることを認識することができる。
S820では、開発者用端末100は、関数一覧920に表示されたいずれかの創作関数が選択(押下)されたか否かを判定する。関数一覧920で創作関数が選択された場合には、S813に進み、S814、S816、S817のいずれかで、選択された創作関数の種別に応じた設定画面を、既に設定済みの内容を反映して表示する。ユーザー(開発者)は、設定画面に対して設定内容の変更や追加の設定を行うことができる(すなわち、創作関数の編集を行うことができる)。
S821では、開発者用端末100は、保存の指示操作(例えば保存ボタン915の押下)があったか否かを判定する。保存の指示操作があった場合にはS822に進み、そうでない場合にはS823へ進む。
S822では、開発者用端末100は、現在までにアクションボード処理で行われた内容をメモリ102に保持した定義情報に記録するとともに、開発環境300に送信する。
S823では、開発者用端末100は、関数一覧920に表示された、アクションボード910の表示を指示する選択肢922が押下されたか否かを判定する。選択肢922が押下された場合はS801に進み、指定UI部品のアクションボードを表示する。これによって、関数の設定画面を表示していた場合には、アクションボードの表示に切り替わる。選択肢922が押下されていない場合にはS824へ進む。
S824では、開発者用端末100は、アクションボードを閉じる操作(アクションボード処理を終了する操作)があったか否かを判定する。アクションボードを閉じる操作が無い場合にはS802に進んで処理を繰り返す。アクションボードを閉じる操作があった場合にはアクションボードを非表示とし、選択中UI画面のキャンバスの表示に切り替え、UIエディタ処理へ戻る。
<画面切替処理>
図12に、画面切替処理のフローチャートを示す。この処理は、図5(b)の表示例で前述したメインメニュー領域510に表示された選択肢の選択に応じた処理である。
S1201では、開発者用端末100は、アプリ一覧ボタン511が押下されたか否かを判定する。アプリ一覧ボタン511が押下された場合は図3のS315に進み、そうでない場合はS1202に進む。
S1202では、開発者用端末100は、UI画面ボタン512が押下されたか否かを判定する。UI画面ボタン512が押下された場合はS1203に進み、そうでない場合はS1204へ進む。S1203では、図4のUIエディタ処理を行う。
S1204では、開発者用端末100は、ワークフローボタン513が押下されたか否かを判定する。ワークフローボタン513が押下されたと判定した場合はS1205に進み、そうでない場合はS1206に進む。
S1205では、開発者用端末100は、ワークフロー作成処理を行う。ワークフロー作成処理は図16を使って後述する。
S1206では、開発者用端末100は、設定ボタン514が押下されたか否かを判定する。設定ボタン514が押下された場合にはS1207に進み、そうでない場合はS1209へ進む。
S1207では、開発者用端末100は、アプリ設定画面を表示する。アプリ設定画面は、選択中アプリに関する設定操作を受け付ける画面である。S1208では、開発者用端末100は、アプリ設定画面への設定操作を受け付け、設定に基づいてメモリ102に記録した定義情報を更新する。S1208で受け付け可能な設定には、例えば、表示言語の設定や、PWA(Progressive Web Apps)としての利用を可とするアプリを構築するか否かの設定がある。また、アプリに所属する複数のUI画面のうち、どのUI画面をイニシャルUIとするかの設定がある。イニシャルUIとは、実行環境にデプロイされた構築済みアプリにアクセスした際に最初に表示される画面、あるいは構築済みアプリにアクセスした後にアプリの認証画面において認証OKになった後に最初に表示される画面である。
S1209では、開発者用端末100は、環境一覧ボタン515が押下されたか否かを判定する。環境一覧ボタン515が押下された場合には図3のS311に進み、そうでない場合にはS1210へ進む。
S1210では、開発者用端末100は、データベースボタン516が押下されたか否かを判定する。データベースボタン516が押下された場合にはS1211に進み、そうでない場合にはS1215へ進む。データべ―スボタン516の押下はデータベースへの接続要求である。
S1211では、開発者用端末100は、選択中実行環境がマルチテナント実行環境410であるか否かを判定する。マルチテナント実行環境410である場合にはS1213に進み、そうでない場合(シングルテナント実行環境である場合)にはS1212に進む。
S1212では、開発者用端末100は、開発環境300が選択中実行環境から取得したデータベースの情報を取得する。より詳しくは、開発環境300が、選択中実行環境がマルチテナント実行環境であるかシングルテナント実行環境であるかを判定し、シングルテナント実行環境である場合には、開発環境300が選択中実行環境であるシングルテナント実行環境のDBセット(DBセット457、467、477などのうちいずれか)にアクセスし、データベースに記録されている内容を取得する。そして、開発環境300が選択中実行環境から取得したデータベースの情報を開発者用端末100に送信する。開発者用端末100から、開発環境300を介さずにシングルテナント実行環境にアクセスすることは無い。
S1213では、開発者用端末100は、ログイン開発者の開発者情報(開発者情報301のうち、ログイン開発者について登録された情報)に記録されたDBインスタンス名を参照する。そして、開発環境300が選択中実行環境であるマルチテナント実行環境410に含まれるDBセット430のうち、ログイン開発者の開発者情報を参照して得たDBインスタンス名が示すDBインスタンスのデータベースに記録されている内容を取得する。そして、開発環境300が選択中実行環境から取得したデータベースの情報を開発者用端末100に送信する。開発者用端末100から、開発環境300を介さずにマルチテナント実行環境410にアクセスすることは無い。
S1214では、開発者用端末100は、データベースの管理画面を表示し、S1212またはS1213で取得したデータベースの情報を表示する。そして、選択中実行環境のデータベースに関する各種設定や、内容の更新の指示を行うDB管理操作を受け付ける。
S1215では、開発者用端末100は、ファイルマネージャーボタン517が押下されたか否かを判定する。ファイルマネージャーボタン517が押下された場合にはS1216に進み、そうでない場合にはS1218に進む。
S1216では、開発者用端末100は、選択中実行環境に保存するファイルを管理するファイル管理画面を表示し、S1217で、選択中実行環境に保存するファイルを管理する操作を受け付ける。例えば、構築されるアプリケーションの画面に表示すべき画像ファイルを選択中実行環境の開発者領域にアップロードして保存することができる。開発者用端末100のローカル保存領域(記録媒体108など)から選択中実行環境に保存すべきファイルが選択され保存の指示がされると、開発者用端末100は、選択されたファイルを開発環境300に送信する。開発環境300は、選択されたファイルを受信すると、選択中実行環境の開発者領域に送信することで、選択中実行環境に保存させる。各種実行環境は、開発環境300からのアクセスだけを受け付ける。そのため、ファイル管理のためには、開発者用端末100から、開発環境300を介して各種実行環境にアクセスする。開発者用端末100から、開発環境300を介さずにマルチテナント実行環境410にアクセスすることは無い。前述のログイン処理で説明した取り、開発者は、開発環境300へは認証を行ってログインする必要がある。従って開発環境300を介してでないと各種実行にアクセスできないようにすることで、開発環境300にログインできない他のユーザーが不正に実行環境にアクセスすることは出来ず、その分、セキュリティが向上する。
また、開発者ユーザーは開発環境300にログインするための認証に掛かる操作だけを行えばよく、実行環境毎にログインするための認証にかかる操作をする必要がない。そのため、操作手数の増大を抑制することができる。
S1218では、開発者用端末100は、ユーザー管理ボタン518が押下されたか否かを判定する。ユーザー管理ボタン518が押下されたと判定した場合はS1219に進み、そうでない場合はS1220に進む。
S1219では、開発者用端末100は、ユーザー情報表示処理を行う。ユーザー情報表示処理は、選択中実行環境に構築されるアプリケーションにログイン可能なアプリユーザー(開発者とは別途管理される情報)の情報であるユーザー情報(図1に図示した各実行環境におけるユーザー情報411、451、461、471など)を表示し、開発者からの管理操作を受け付ける処理である。ユーザー情報表示処理については図14を用いて後述する。
S1220では、開発者用端末100は、スナップショットボタン519が押下されたか否かを判定する。スナップショットボタン519が押下された場合にはS1221に進んでスナップ処理を行い、そうでない場合にはS1222に進む。
S1222では、開発者用端末100は、終了操作が行われたか否かを判定する。終了操作が行われていない場合にはS1201に進んで処理を繰り返し、終了操作があった場合には画面切替処理を終了する。
<ユーザー情報表示処理>
図14(a)に、開発環境300に保持している開発者情報301の具体例を示す。開発者情報301には、図示の各行の通り、開発者毎のアカウント情報として次の情報が開発者毎に関連付けて記録されている。開発者のアカウントID(開発者ID)となるメールアドレス(ユーザーネーム)、パスワード、氏、名、アクセス可能な実行環境ID、Verify、マルチテナント実行環境でのアクセス可能DBインスタンス名。アクセス可能な実行環境IDは、本実施形態ではクラウドサービスのアカウントIDであるものとする。1人の開発者が複数の実行環境にアクセス可能である場合、アクセス可能な実行環境IDには、複数の実行環境IDがカンマで区切って連続的に記載された文字列が記録される。Verifyは有効なアカウントであうかどうかを示す情報である。なお、1つのアカウントに関連付けて記録する情報は、図14(a)に示す情報以外にあっても良い。
図14(b)に、マルチテナント実行環境410に保持しているユーザー情報411の具体例を示す。ユーザー情報411には、図示の各行の通り、アプリのユーザー毎のアカウント情報として次の情報がアプリユーザー毎に関連付けて記録されている。アプリのユーザー毎のアカウント情報は、アプリユーザーのアカウントIDとなるメールアドレス(ユーザーネーム)、パスワード、氏、名、Eメールの承認済みであるか否かの情報、オーナーIDを含む。マルチテナント実行環境には、複数の開発者をオーナーとする複数のアプリケーションが混在してデプロイされている。そのため、アプリの各ユーザーがどの開発者(オーナー)の作ったアプリのユーザーであるかを識別するために、オーナーIDとして開発者IDも記録されている。なお、1つのアカウントに関連付けて記録する情報は、図14(b)に示す情報以外にあっても良い。例えば、生成日時、更新日時などが記録されていてもよい。
図14(c)に、シングルテナント実行環境に保持しているユーザー情報(ユーザー情報451、461、471など)の具体例を示す。シングルテナント実行環境のユーザー情報には、図14(c1)に示すユーザー別情報と、図14(c2)に示すグループ情報の2種類が記録される。
図14(c1)に示すユーザー別情報には、図示の各行の通り、アプリのユーザー毎のアカウント情報として次の情報がアプリユーザー毎に関連付けて記録されている。アプリのユーザー毎のアカウント情報は、アプリユーザーのアカウントIDとなるメールアドレス(ユーザーネーム)、パスワード、氏、名、Eメールの承認済みであるか否かの情報を含む。一方、シングルテナント実行環境では、複数の開発者をオーナーとする複数のアプリケーションが混在することは無いため、オーナーIDは記録されない。なお、1つのアカウントに関連付けて記録する情報は、図14(c1)に示す情報以外にあっても良い。例えば、生成日時、更新日時などが記録されていてもよい。
図14(c2)に示すグループ情報には、図示の各行の通り、複数のグループIDのそれぞれに対して、1人以上の所属ユーザーのユーザーネームが関連付けて記録されている。
図13(a)に、開発者用端末100におけるユーザー情報表示処理のフローチャートを示す。この処理は、前述した図12のS1218の詳細フローチャートである。
S130では、開発者用端末100は、開発環境300のユーザー情報取得指示(選択中実行環境のユーザー情報の取得を指示する旨の情報)を送信する。
S1302では、開発者用端末100は、S1301で送信したユーザー情報取得指示に応じた情報であって、開発環境300から送信されたユーザー情報を受信したか否かを判定する。ユーザー情報を受信していない場合にはS1302でユーザー情報の受信を待ち、ユーザー情報を受信した場合にはS1303に進む。取得されるユーザー情報は、選択中実行環境がマルチテナント実行環境であれば図14(b)に示したような情報であり、選択中実行環境がシングルテナント実行環境であれば図14(c1)、図14(c2)に示したような情報である。
S1303では、開発者用端末100は、S1302で受信したユーザー情報に基づいて、ディスプレイ105にユーザー情報を表示する。図15に、S1303で表示される、開発者用端末100におけるユーザー情報の表示例を示す。図15において、前述した図5(b)の表示例と同じ表示項目については同じ符号を付して説明を省略する。表示アイテム1501は、図14(c1)に示すユーザー別情報に基づいた表示を指示するための指示アイテムである。表示アイテム1502は、図14(c2)に示すグループ情報に基づいた表示を指示するための指示アイテムである。表示アイテム1501、1502はいずれかを切り替えて選択可能である。また、選択中実行環境がマルチテナント実行環境であった場合には表示アイテム1501、1502は表示されず、グループ情報への表示へは切り替えられないようになっている。グループ情報1505は、S1302で受信したユーザー情報(図示の例では、図14(c1)に示したユーザー別情報に基づいてユーザー情報を表示した例である。グループ情報1505において、Username、Email Verifiedの列はそれぞれ、図14(c1)に示したユーザー別情報におけるメールアドレス(ユーザーネーム)、Eメールの承認済みであるか否かの列の情報に対応する。Deleteの列には、各行に、その行のユーザーアカウントを削除する指示を受け付けるボタンアイコンが表示される。ユーザー追加ボタン1503は、グループ情報1505に1行追加して新たなアプリユーザーの情報の登録を指示する操作アイコンである。保存ボタン1504は図15の画面で編集された内容のグループ情報1505を、選択中実行環境へ保存する指示を行うための操作アイコンである。
S1304では、開発者用端末100は、S1303で表示したユーザー情報の編集操作を受け付ける。例えば、ユーザー追加ボタン1503の押下によるユーザーアカウントの追加や、Deleteの列に表示されたボタンアイコンの押下によるユーザーカウントの削除、キーボードを操作しての編集可能項目に対する内容の編集などである。
S1305では、開発者用端末100は、保存ボタン1504が押下されたか否かを判定する。保存ボタン1504が押下された場合はS1306に進み、そうでない場合にはS1307へ進む。
S1306では、開発者用端末100は、開発環境300に対して、S1304で受け付けた編集操作を反映した内容でのユーザー情報の更新指示を送信する。
S1307では、開発者用端末100は、実行環境変更操作があったか否かを判定する。実行環境変更操作があった場合(選択中実行環境ボックス501に対する操作があった場合)にはS1308に進み、そうでない場合にはS1309に進む。
S1308では、開発者用端末100は、変更後の選択中実行環境をメモリ102に記録するとともに、開発環境300に送信する。選択中実行環境が変わると、表示すべき編集対象のユーザー情報も変わるので、S1301に戻って再度処理を行う。
S1309では、開発者用端末100は、メインメニュー領域510に表示されたいずれかの選択肢を選択する操作である、画面切替操作があったか否かを判定する。画面切替操作が無い場合にはS1304に戻り、画面切替操作があった場合にはユーザー情報表示処理を終了して前述した画面切替処理へ進む。
図13(b)に、図13(a)のユーザー情報表示処理に応答した処理である、開発環境300におけるユーザー情報取得処理のフローチャートを示す。
S1311では、開発環境300は、S1301で開発者用端末100から送信されたユーザー情報取得指示を受信したか否かを判定する。ユーザー情報取得指示を受信した場合はS1312に進み、そうでない場合にはS1316に進む。
S1312では、開発環境300は、選択中実行環境からアクセス先情報(接続先情報)を取得する。ここで取得するアクセス先情報は、選択中実行環境が図1のマルチテナント実行環境410であればアクセス先情報421であり、選択中実行環境が図1のシングルテナント実行環境であれば、アクセス先情報456b、466b、476b…などのうち、選択中実行環境のものである。より詳しくは、開発環境300は、選択中実行環境として、開発者情報301のうちログイン中の開発者のアカウント情報から選択中実行環境(特定環境)の実行環境IDを取得してメモリ304に記憶している。その選択中実行環境のうち、所定のパス(実行環境IDがわかれば確定するパス)に記録されたファイルにアクセスし、アクセス先情報としてそのファイルに記憶されたアクセス先のURLを取得する。所定のパスは例えば、所定の領域(フォルダ、バケット、ディレクトリ)の名称と、所定のファイル名からなる。所定の領域の名称は例えば、「固定の文字列+実行環境ID」である。所定のファイル名は例えば、全実行環境で共通の予め定められた共通ファイル名である。この場合、所定のパスは、「固定の文字列+実行環境ID/共通ファイル名.json」となる。すなわち、実行環境IDがわかれば確定する所定の領域にある所定のファイル(アクセス先情報ファイル)を取得し、そのファイルの中からアクセス先情報を取得し、メモリ304に記録する。アクセス先情報のURLは、当該実行環境中のアドレスを示しており、実行環境に保存されたユーザー情報の取得、更新を要求(リクエスト)する要求先となるURLである。このURLにリクエストしなければ、実行環境に保存されたユーザー情報の取得、更新はできない。このように、実行環境IDがわからなければ、ユーザー情報の取得・更新のためのアクセス先情報は取得できない。実行環境IDは、開発者が開発環境300に認証処理を行った上でログインしないと得られない情報である。また、開発環境300にログインできる開発者が自身のアクセス可能な実行環境IDしか取得することはできない。従って開発環境300にログインできない人物や、開発環境300にログインできてもアクセス可能実行環境が異なる人物が不正に実行環境にアクセスしてユーザー情報が漏洩することは抑制される。すなわち、セキュリティを向上させている。
S1313では、開発環境300は、S1312で取得したアクセス先情報が示すアクセス先に、ユーザー情報取得要求(ユーザー情報を開発環境300へ送信する処理の実行要求)と、開発者情報を送信する(送信制御)。アクセス先に送信する開発者情報は、開発者情報301から、暗号化されたログイン中の開発者のアカウント情報を取得する。取得するアカウント情報は、図14(a)に示した開発者情報301の表のうち、ログイン中の開発者の1行分の情報である。すなわち、メールアドレス、パスワード、氏、名、アクセス可能な実行環境IDの情報を含む。これらが暗号化され1つのデータ列となった情報を取得する。この暗号化された情報だけが漏洩したとしても、暗号化されているため、メールアドレス、パスワード、氏、名、アクセス可能な実行環境IDは漏洩しない。
S1314では、開発環境300は、選択中実行環境から、S1313で送信したユーザー情報取得要求に応じたユーザー情報を受信したか否かを判定する。このユーザー情報は、後述するS1325またはS1326で実行環境から送信されるものである。ユーザー情報を受信した場合はS1315に進み、そうでない場合にはS1314でユーザー情報の受信を待つ。
S1315では、開発環境300は、S1314で受信したユーザー情報を開発者用端末100に送信する。ここで送信したユーザー情報が、前述したS1302で受信される。
S1316では、開発環境300は、開発者用端末100からユーザー情報更新指示を受信したか否かを判定する。ここで受信するユーザー情報更新指示は、前述したS1306で開発者用端末100から送信されるものである。ユーザー情報更新指示を受信した場合はS1317に進み、そうでない場合は1318に進む。
S1317では、開発環境300は、S1312で取得したアクセス先情報が示すアクセス先に、ユーザー情報更新要求(ユーザー情報の更新処理の実行要求)と開発者情報を送信する。アクセス先に送信する開発者情報は、S1313で説明したものと同様であり、開発者情報301から取得した、暗号化されたログイン中の開発者のアカウント情報である。
S1318では、開発環境300は、開発者用端末100から選択中実行環境の変更指示を受信したか否かを判定する。この変更指示は前述したS1308で開発者用端末100から送信されるものである。選択中実行環境の変更指示を受信した場合はS1319に進み、そうでない場合にはS1311に進んで処理を繰り返す。
S1319では、開発環境300は、変更後の選択中実行環境として、変更後の選択中実行環境の実行環境IDをメモリ304に記憶する。
図13(c)に、図13(b)のユーザー情報取得処理に応答した処理である、実行環境400のうち選択中実行環境におけるユーザー情報管理処理のフローチャートを示す。この処理の動作主について、以下では、単に実行環境400と記載するが、実際には、実行環境400のうち選択中実行環境における実行エンジンが実行するものとする。すなわち、例えば選択中実行環境がマルチテナント実行環境410であれば動作主は実行エンジン412であり、実行エンジン412に含まれるプロセッサ413が、メモリ414をワークメモリとしてプログラムを実行することにより実現する。また、例えば、選択中実行環境がシングルテナント実行環境450であれば動作主は実行エンジン452であり、実行エンジン452に含まれるプロセッサ453が、メモリ454をワークメモリとしてプログラムを実行することにより実現する。
S1321では、実行環境400は、開発環境300から送信されたユーザー情報取得要求を受信したか否かを判定する。ここで受信するユーザー情報取得要求は、前述したS1313で開発環境300から送信されたものである。ユーザー情報取得要求を受信した場合にはS1322に進み、そうでない場合にはS1327に進む。
S1322では、実行環境400は、アクセス権確認処理を行う。この処理は、ユーザー情報取得要求の送信元が正当なアクセス権を有する開発者からのアクセスであるかを判定するための処理であり、この処理によって、正当なアクセス権を有する開発者以外にユーザー情報が漏洩する可能性が低減し、セキュリティが向上する。アクセス権確認処理については図13(d)を用いて後述する。
S1323では、実行環境400は、アクセス権確認処理の結果がエラーであるか否かを判定する。エラーであった場合には、ユーザー情報取得要求の要求元に自身の環境に保持しているユーザー情報を送信することなく、S1321に進む。エラーでない場合にはS1324へ進む。
S1324では、実行環境400は、自身がマルチテナント実行環境410であるか否かを判定する。マルチテナント実行環境410である場合にはS1326へ進み、そうではなくシングルテナント実行環境である場合にはS1325へ進む。
S1325では、実行環境400は、自身の実行環境に保持しているユーザー情報を開発環境300に送信する。シングルテナント実行環境であれば、その環境自体のオーナーが単一の開発者であるため、ユーザー情報は単一の開発者がオーナーであるアプリケーションのものしかない。従って後述するS1326のマルチテナント実行環境での処理のように、ユーザー情報のうちログイン開発者がオーナーである一部分を送信するのではなく、全体を送信する。例えば、選択中実行環境がシングルテナント実行環境450であれば、ユーザー情報451を開発環境300に送信する。ここで送信したユーザー情報が、開発環境300にS1314で受信され、S1315で開発者用端末100に送信される。
S1326では、実行環境400は、自身の実行環境に保持しているユーザー情報のうち、オーナーIDが受信した開発者情報に一致する部分を開発環境300に送信する。暗号化された開発者情報が開発環境300から送信され、後述するS1341で受信され、S1343でデコード(暗号化解除)され、メモリ414に記憶されている。これが受信した開発者情報である。図14(b)に示したマルチテナント実行環境410のユーザー情報411のうち、受信した開発者情報に含まれる開発者ID(メールアドレス)と同じオーナーIDを持つ行の情報を取得し、開発環境300に送信する。マルチテナント実行環境410のユーザー情報411のうち、受信した開発者情報に含まれる開発者ID(メールアドレス)と同じオーナーIDを持たない行の情報は開発環境300に送信しない。マルチテナント実行環境であれば、複数の開発者がオーナーとなるユーザー情報が混在して記録されているため、ユーザー情報のうちログイン開発者がオーナーである一部分を送信する。ここで送信したユーザー情報が、開発環境300にS1314で受信され、S1315で開発者用端末100に送信される。
S1327では、実行環境400は、ユーザー情報更新要求を受信したか否かを判定する。ここで受信するユーザー情報更新要求は、前述したS1317で開発環境300から送信されたものである。ユーザー情報更新要求を受信した場合にはS1328に進み、そうでない場合にはS1321に進む。
S1328では、実行環境400は、アクセス権確認処理を行う。この処理は、ユーザー情報更新要求の送信元が正当なアクセス権を有する開発者からのアクセスであるかを判定するための処理であり、この処理によって、正当なアクセス権を有する開発者以外からの要求によってユーザー情報が書き換えられる(更新される)可能性が低減し、セキュリティが向上する。アクセス権確認処理については図13(d)を用いて後述する。
S1329では、実行環境400は、アクセス権確認処理の結果がエラーであるか否かを判定する。エラーであった場合には、ユーザー情報更新要求に従った更新をすることなく、S1321に進む。エラーでない場合にはS1330へ進む。
S1330では、実行環境400は、ユーザー情報更新要求に従って自信の環境に記憶しているユーザー情報を更新する。この際、新規にユーザーを登録する場合は、マルチテナント実行環境であればログイン開発者の開発者IDがオーナーIDとして新規ユーザーのアカウント情報に関連付けて登録される。
図13(d)にアクセス権確認処理のフローチャートを示す。この処理は、前述した図13(c)のS1322、S1328の詳細フローチャートである。
S1341では、実行環境400は、開発環境300から暗号化された開発者情報を受信したか否かを判定する。ここで受信する開発者情報は、前述したS1313またはS1317で開発環境300から送信されたものである。暗号化された開発者情報を受信した場合にはS1343に進み、そうでない場合にはS1342に進む。
S1342では、実行環境400は、アクセス権確認処理の結果としてエラーである旨を記録(出力)する。この場合、前述したS1323またはS1329ではエラーと判定される。このように、ユーザー情報取得要求またはユーザー情報更新要求を受信したとしても、暗号化された開発者情報を受信しない場合にはエラーとして、要求に応じた処理は行わない(要求を許可しない)ような要求制御が行われる。従って不正なアクセスに応じた処理を抑制することができる。
S1343では、実行環境400は、S1341で受信した開発者情報を、予め保持している復号化キーを用いてデコード(暗号化解除、復号化)する。復号化された開発者情報は、実行環境から外に送信されることはないので、漏洩する可能性は低い。
S1344では、実行環境400は、S1342でデコードした開発者情報のうち、アクセス可能実行環境を示す部分に、自身の実行環境(当該実行環境)の実行環境IDが含まれているか否かを判定する。含まれている場合には処理を終了し(このケースはアクセスが正当であると見なされる)、含まれていない場合にはS1342に進み、アクセス権確認処理の結果としてエラーである旨を記録(出力)する。これによって、当該実行環境に対してアクセス権のない開発者からのユーザー情報取得要求またはユーザー情報更新要求に応じた処理を行ってしまうことを防止している。従って不正なアクセスに応じた処理を抑制することができる。
なお、実行環境400は、開発環境300以外からのアクセスは受け付けず、開発環境300以外を送信元とするユーザー情報取得要求またはユーザー情報更新要求があっても要求に応じた処理は行わないように制御する。これによって、開発環境300以外の装置によって暗号化された開発者情報とユーザー情報取得要求またはユーザー情報更新要求が捏造されて送信されたとしてもそれに応じた処理は行わない。従ってセキュリティが向上する。
以上説明したユーザー情報表示処理によれば、実行環境400に対する不正なアクセスによる不正な処理を抑止し、情報漏洩のリスクを低減し、セキュリティを向上させることができる。なお、上述したユーザー情報表示処理では、実行環境に保持されたユーザー情報に関しての処理を説明したが、ユーザー情報に関しての処理以外の、実行環境に関する他の処理についても同様に適用可能である。例えば。実行環境400に保持されたデータベースやファイルに関する処理の際にも同様の処理を適用してセキュリティを向上させることができる。
例えば図12のS1210~S1214で説明したデータベースの表示・更新に係る処理に関して適用可能である。この場合、開発者用端末100からのDB操作指示に応じて、開発環境300がS1312と同様に選択中実行環境からアクセス先情報ファイルを取得する。アクセス先情報ファイルには、DB操作要求を受け付けるためのリクエスト先となるDB操作要求受付URLが記録されているので、そこに対して、S1313と同様に、DB操作要求と開発者情報を送信する。実行環境400は、図13(c)、図13(d)で説明した処理と同様に、DB操作要求の送信元が正当かどうかを判定する処理を行い、正当な場合にのみ、DB操作要求に応じて自身の実行環境に保持したDBセットに関する処理を行う。
また例えば、図12のS1215~S1217で説明したファイル管理に係る処理に関して適用可能である。この場合、開発者用端末100からのファイル管理指示に応じて、開発環境300がS1312と同様に選択中実行環境からアクセス先情報ファイルを取得する。アクセス先情報ファイルには、ファイル管理要求を受け付けるためのリクエスト先となるファイル管理要求受付URLが記録されているので、そこに対して、S1313と同様に、ファイル管理要求と開発者情報を送信する。実行環境400は、図13(c)、図13(d)で説明した処理と同様に、ファイル管理要求の送信元が正当かどうかを判定する処理を行い、正当な場合にのみ、ファイル管理要求に応じて自身の実行環境に保持したファイルに関する処理を行う。
<ワークフロー処理>
図16に、ワークフロー処理のフローチャートを示す。この処理は、図12のS1205の詳細フローチャートである。この処理は開発者用端末100が実行する。
S1601では、開発者用端末100は、ディスプレイ105にワークフロー(WF)作成画面を表示する。図17(a)に、WF作成画面の表示例を示す。サブメニュー領域510にはノード一覧1710が表示される。ノード一覧1710には、ノードの選択肢として、始点であるスタート1711、終点であるエンド1712、中間点であるステータス1713が含まれる。キャンバス530が表示されていた領域には、キャンバス530に代えてWF配置領域1700が表示される。WF配置領域1700は、配置前は空白の領域である。ノード一覧1710に表示された複数の選択肢(ノードの選択肢)のいずれかを選択してWF配置領域1700に配置することができる。本実施形態では、ドラッグアンドドロップで配置するものとする。すなわち、ノード一覧1710に表示された複数の選択肢のいずれかをドラッグし、WF配置領域1700にドロップすることで配置することができる。
S1602では、開発者用端末100は、ノードを配置する操作があったか否かを判定する。具体的には、ノード一覧1710に表示された複数の選択肢のいずれかドラッグし、WF配置領域1700にドロップすることで配置する操作があったか否かを判定する。ノードを配置する操作があった場合にはS1603に進み、そうでない場合にはS1604に進む。
S1603では、開発者用端末100は、ノードを配置する操作に応じてWF配置領域1700に選択されたノードを配置する。
S1604では、開発者用端末100は、矢印を描画する操作があったか否かを判定する。矢印は、配置済みのノードとノードとを繋ぐ矢印であり、矢印の元のノードから先のノードに遷移する際の処理内容を示すものである。配置済みのノードを選択すると、選択されたノードに対して操作パスが表示され、その操作パスにマウスカーソルがある状態でドラッグを開始し(すなわち、マウスの左ボタンを押下してマウスの移動を開始し)、他のノード上でドロップする(すなわち、左ボタンの押下を放す)ことで、矢印を描画することができる。ドラッグの開始元のノードが矢印の元となり、ドロップした位置のノードが矢印の先となる。矢印を描画する操作があった場合にはS1605に進み、そうでない場合にはS1606に進む。
S1605では、開発者用端末100は、矢印を描画する操作に応じてWF配置領域1700に配置済みの2つのノード間に矢印オブジェクトを描画する。
図17(b)に、WF配置領域1700にノードと矢印が配置された後の表示例を示す。WF配置領域1700には、ノード1701~1705が配置されている。ノード1701は始点のノードである。ノード1702、1703、1704は中間点(ステータス)のノードである。ノード1705は終点のノードである。矢印1706は、ノード1701からノード1702までの矢印である。矢印1707は、ノード1702からノード1703までの矢印である。矢印1708は、ノード1703からノード1704までの矢印である。矢印1709は、ノード1704からノード1705までの矢印である。各ノードは複数の手順(ステップ)を含むワークフローのうち1つの手順(ステップ)を示しており、矢印は手順の前後関係を示している。すなわち、図示の例では、ノード1701~1705がそれぞれ、1~5番目の手順となることが示されている。
S1606では、開発者用端末100は、ノードのプロパティを設定する操作があったか否かを判定する。具体的には、WF配置領域1700に配置済みのノードを選択して右クリックをする操作があったか否かを判定する。ノードのプロパティを設定する操作があった場合にはS1607に進み、そうでない場合にはS1608に進む。
S1607では、開発者用端末100は、ノードに対してプロパティを設定するためのプロパティボックスを表示し、ノードのプロパティの設定操作を受け付ける。図17(c)に、ノードのプロパティボックスの表示例を示す。ノードのプロパティボックスでは、ノードのID(他のノードと重複しない初期値が設定されていて、変更可能)、ラベル(表示される名称)、生成したワークフローを配置するUI画面のIDの設定とを受け付ける。UI画面のIDの設定は、UI画面のIDの一覧が選択肢として表示され、その選択肢の中から選択して設定することができる。
S1608では、開発者用端末100は、矢印のプロパティを設定する操作があったか否かを判定する。具体的には、WF配置領域1700に描画済みの矢印を選択して右クリックをする操作があったか否かを判定する。矢印のプロパティを設定する操作があった場合にはS1609に進み、そうでない場合にはS1610に進む。
S1609では、矢印に対してプロパティを設定するためのプロパティボックスを表示し、矢印のプロパティであるオペレーションプロパティの設定操作を受け付ける。図17(e)に、矢印のプロパティボックスの表示例を示す。矢印のプロパティボックスでは、矢印のID(他の矢印と重複しない初期値が設定されていて、変更可能)、ラベル(表示される名称)、種別(タイプ)、ユーザーの設定とを受け付ける。種別は、承認(Update)、申請(Creat)、差戻(Remand)にそれぞれ対応する選択肢のうちいずれかをを選択して設定可能である。ユーザーはSelectUserとCurrentUserにそれぞれ対応する選択肢のうちいずれかを選択して設定可能である。種別は、当該矢印の元の手順から先の手順に遷移する際のアクションの種別を示している。この種別に基づいて、後述する自動的に配置されるUI部品のアクションが自動設定される。
S1610では、開発者用端末100は、ワークフロー生成ボタン1730が押下されたか否かを判定する。ワークフロー生成ボタン1730が押下された場合はS1611に進み、そうでない場合はS1615に進む。
S1611では、開発者用端末100は、図17(e)に示す選択受付フォーム(ダイアログボックス)をウィザードとして表示し、作成対象のステータスの選択を受け付ける。スタート、申請中、承認済み、未申請の中かから少なくとも1つを作成対象のステータスとして選択可能である。
S1612では、開発者用端末100は、図17(f)に示す選択受付フォーム(ダイアログボックス)をウィザードとして表示し、タスクテーブルを追加作成対象とするかの選択を受け付ける。ここでは、タスクテーブルを生成するか否か、及び、追加する対象となるUI画面のIDの選択が可能である。UI画面のIDの選択は、UI画面のIDの一覧が選択肢として表示され、その選択肢の中から選択することができる。
S1613では、開発者用端末100は、図17(g)に示す指定受付フォーム(ダイアログボックス)をウィザードとして表示し、データベースの指定(選択)を受け付ける。データベースの指定は、表示された選択肢から選択することで指定することができる。
S1614では、開発者用端末100は、WF配置領域1700に配置済みのノード、矢印と、それぞれのプロパティ、及び、S1611~S1614で選択肢から選択を行って設定された内容に基づいて、ワークフロー定義を作成し、メモリ102の定義情報に記録する。これによって、UI画面にワークフローに基づくUI部品(UIコンポーネント)が自動的に配置される。自動的に配置されたUI部品は自動的にワークフローに対応するアクションが設定されたものである。このように開発者ユーザーがプログラミング言語での記述をすることなく、選択肢を選択していく操作で生成したワークフローに基づいてアクションが自動的に定義されたUI部品が生成される。また、図17(g)に示す指定受付フォームで指定されたデータベースに、ワークフローで用いるテーブルが作成される。また、設定内容によってUI画面のキャンバスにもアクションが設定(定義)される。キャンバスに設定されたアクションは、構築されたアプリケーションにおいてそのUI画面がロード(読込)された場合に行う処理である。すなわち、画面表示の際に初期動作として行う処理である。
S1615では、開発者用端末100は、画面切替操作があったか否かを判定する。より詳しくは、メインメニュー領域510に含まれるいずれかの選択肢が選択されたか否かを判定する。メインメニュー領域510に含まれるいずれかの選択肢が選択された場合には図16の処理を終了し、図12で前述した画面切替処理へ進む。そうでない場合はS1602に進む。
図18(a)に、図16のS1614で追加されるデータベースのテーブルを、メインメニュー領域のデータベースボタン516を押下して表示させた場合の表示例を示す。すなわち、図18(a)は、図12のS1214で表示されるデータベースに関する画面の1つである。サブメニュー領域に表示されたテーブル一覧のうち、テーブル1801とテーブル1802が、ワークフローの生成に応じて自動的に追加されたテーブルである。S1613で指定を受け付けたデータベースに含まれる(従属する、下位階層となる)テーブルとして追加(生成)されている。
図18(b)に、図16のS1614で自動的にUI部品が配置されたUI画面のキャンバスの表示例を示す。キャンバス530に配置されたUI部品1811~1813がワークフローの生成に応じて自動的に配置されたUI部品である。すなわち、UI部品1811~1813は、サブメニュー領域のUI部品一覧から開発者がドラッグアンドドロップを行って配置したものではない。UI部品1813には自動的にアクションが設定(定義)されている。UI部品1813は、ワークフローにおける次の手順に遷移する際のアクションが定義された自動生成部品である。また、UI部品1813が配置されたUI画面は、UI部品1813に自動的に定義されたアクションの実行によるワークフローの次の手順への遷移における遷移元の画面である。
図18(c)に、ボタンであるUI部品1813を指定UI部品としてアクションボードを表示した場合の表示例を示す。すなわち、このアクションボードは、指定UI部品をUI部品1813とした場合に図8で前述したS801で表示されるものである。アクションボード910には、開発者がプログラミング言語でのアクションの記述を行っていない状態で、初期値として図18(c)のようなアクションの文字列がプログラミング言語で記述された状態で表示される。言い換えれば、アクションボード910には、開発者が当該アクションに関してプログラム言語でのソースコードの記述を行っていない状態で、初期値として図18(c)のような、アクションを定義したプログラミング言語でのソースコードが表示される。図18(c)のアクションボート910に表示されたアクションには、図16のワークフロー作成処理においてユーザーから受け付けた操作群に基づいて、少なくとも、データベース(3行目)、次に表示すべきUI画面(6行目)が定義されている。ユーザーは、このように自動的に定義されたアクションを前述したS802~S808の処理によって編集可能である。すなわち、自動的に定義されたアクションの文字列をベースとして、これを一部流用し、一部改変または文字列を追加するようにプログラミング言語を入力することができる。すなわち、自動的に定義されたアクションの文字列に対する修正操作を受け付けることができる。このように、自動的に生成されて表示されたアクションのプログラミング言語をベースとすることで、開発者がゼロからプログラミング言語でアクションを記述するよりも、少ない操作手数(テキスト入力量)で簡単にアクションを設定することができる。また、自動的に生成されたアクションをそのまま使うことなく修正を加えてカスタマイズできるため、より細かい要望に応えるアクションを生成可能である。
図18(d)に、ワークフローの生成に応じて自動的にアクションが設定されたUI画面のキャンバスのアクションボードを表示した場合の表示例を示す。このアクションボードは、キャンバスの空白領域を指定してコンテキストメニュー処理を行ってアクションボードの表示を指示した場合に表示されるものである。後述する図19のS1903で表示される。アクションボードには、開発者がプログラミング言語でのアクションの記述を行っていない状態で、初期値として図18(d)のようなアクションの文字列がプログラミング言語で記述された状態で表示される。言い換えれば、アクションボードには、開発者が当該アクションに関してプログラム言語でのソースコードの記述を行っていない状態で、初期値として図18(d)のような、アクションを定義したプログラミング言語でのソースコードが表示される。ユーザーは、このように自動的に定義されたアクションを後述するS1904の処理によって編集可能である。すなわち、図18(c)で説明したUI部品に自動的に設定されたアクションと同様、少ない操作手数(テキスト入力量)で簡単にアクションを設定することができ、かつ、より細かい要望に応えるアクションを生成可能である。
上述したワークフローの生成に応じて自動的に生成されるUI部品、アクションに対して、例えば以下のようなカスタマイズを加えることが可能である。
・キャンパスのアクションボードに、ワークフロー中における今の手順(ステップ)名を表示するアクションを設定する。
・申請理由のインプットフィールド(UI部品)を配置し、そこに入力されたデータを次のステップに送るようにUI部品1813のアクションボードに修正を加える。
・違うテーブルにデータを保存するように、部品1813のアクションボードに修正を加える。例えば、申請理由とケースIDなどを別のDBにも記録するようにカスタマイズする。
・キャンパスのアクションボードに、UI部品1812(コンボボックス)に初期入力するユーザーを、前回申請した人、というアクションをプログラミング限度で書くことにより設定する。あるいは、承認可能な人を選択肢として表示するというアクションを書く。
このように、本実施形態によれば、ワークフローの基本的な部分はワークフロー作成画面での操作とウィザードへの入力内容に沿って(すなわちプログラミング言語でソースコードを記述する操作を含まず、選択肢から選択する操作を含む操作群に基づいて)、簡単な操作で素早く作成することができる。なおかつ、自動的に作成されたUI部品やUI画面のキャンバスに設定されたアクションをプログラミング言語で修正可能に提示することで、より自由度の高い設計が可能となる。
<CRUD生成処理>
図19に、キャンバスのコンテキストメニュー処理のフローチャートを示す。この処理は、前述した図7のS703の詳細フローチャートである。この処理は開発者用端末100が実行する。キャンバスのコンテキストメニューには、CRUDを生成するための選択肢が含まれる。
本実施形態では、CRUDの生成の説明のための例として、CRUDの生成前(CRUDボタンの配置前)に、図20(a)に示すような選択中UI画面のキャンバスが表示されていた場合に、キャンバスの空白領域が右クリックされてキャンバスのコンテキストメニューが表示された場合の例を説明する。CRUDとは、ソフトウェアに要求される4つの基本機能である、データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の頭文字を繋げた語である。図20(a)のキャンバスには、UIエディタ処理において開発者によって配置されたUI部品2001~2003が表示されている。UI部品2001~2003はいずれも種別がInputのUI部品である。UI部品2001はラベルとして「ID」、UI部品2002は初期Valueとして「Name」、UI部品2003はラベルとして「age」、がそれぞれ表示されている。すなわち、図20(a)のキャンバスは、何らかのユーザー登録をするための画面を想定して設計されたUI画面のキャンバスである。UI部品2001は新規登録するユーザーのIDを、UI部品2002は新規登録するユーザーの名前を、UIの部品2003は新規登録するユーザーの年齢を、それぞれ入力してもらうための入力欄である。UI部品2001~2003のUI部品IDはそれぞれ、「number_field_ID」、「text_field_Name」、「number_field_age」であるものとする。
S1901では、開発者用端末100は、マウスカーソルの近傍にキャンバスのコンテキストメニューを重畳表示する。図20(b)に、キャンバスのコンテキストメニューの表示例を示す。キャンバスのコンテキストメニューには、メニュー項目である選択肢2011~2015が表示される。
S1902では、開発者用端末100は、キャンバスのコンテキストメニューのうちアクションボードの表示を指示するメニュー項目(選択肢2013)が押下されたか否かを判定する。アクションボードの表示を指示するメニュー項目(選択肢2013)が押下された場合はS1903に進み、そうでない場合はS1906に進む。
S1903では、開発者用端末100は、メモリ102に保持した定義情報に基づき、キャンバスのアクションボードを表示する。キャンバスのアクションボードの表示例は例えば前述した図18(d)に示したものである。図18(d)は自動的にアクションが設定されている例である。アクションが設定されていない場合は、アクションボードは空白の状態で表示される。過去に開発者がアクションボードにアクションを入力(設定)しており、定義情報にその内容が記録されている場合は、アクションボードには設定済みのアクションを示すプログラミング言語の文字列が表示される。
S1904では、開発者用端末100は、アクションボードに対する開発者ユーザーからのプログラミング言語での入力操作、編集操作、及び、関数の設定操作を受け付ける(編集受付)。この処理は、前述した図8のS802~S823の処理と同様の処理であるため、詳細は省略する。
S1905では、開発者用端末100は、アクションボードを閉じる操作(アクションボード処理を終了する操作)があったか否かを判定する。アクションボードを閉じる操作が無い場合にはS1904に進んで処理を繰り返す。アクションボードを閉じる操作があった場合にはアクションボードを非表示とし、図19の処理を終了して、選択中UI画面のキャンバスの表示に切り替え、UIエディタ処理へ戻る。
S1906では、開発者用端末100、キャンバスのコンテキストメニューのうちCRUDの生成を指示するメニュー項目(選択肢2015)が押下されたか否かを判定する。CRUDの生成を指示するメニュー項目(選択肢2015)が押下された場合はS1907に進み、そうでない場合はS1914に進む。
S1907では、開発者用端末100は、ウィザードとしてCRUDの入力フォーム1(ダイアログボックスである)を表示し、CRUDにおいてデータを取得する対象のUI部品を選択する操作を受け付ける。図20(c)に、CRUDの入力フォーム1の表示例を示す。領域2021には、選択中UI画面に配置されている全UI部品のUI部品IDが選択肢として表示される。ユーザー(開発者)は、領域2021に表示された選択肢のうち、データ取得の対象としたい選択肢を選択し、選択済み領域2022に表示させることで選択を行う。
S1908では、開発者用端末100では、入力フォーム1での選択操作が行われ、NEXTアイコン2023が押下されたか否かを判定する。NEXTアイコン2023が押下された場合はS1909に進み、そうでない場合はS1908でNEXTアイコン2023の押下を待つ。
S1909では、開発者用端末100は、CRUDの入力フォーム2(ダイアログボックスである)を表示し、CRUDの対象となるデータベースのテーブルに用意すべきカラムの選択を受け付ける。図20(d)に、CRUDの入力フォーム2の表示例を示す。領域2031には、入力フォーム1で選択されたUI部品のUI部品IDが選択肢として表示される。ユーザー(開発者)は、領域2031に表示された選択肢のうち、CRUDの対象カラムとしたい選択肢を選択し、選択済み領域2032に表示させることで選択を行う。
S1910では、開発者用端末100は、入力フォーム2での選択操作が行われ、NEXTアイコン2033が押下されたか否かを判定する。NEXTアイコン2033が押下された場合はS1911に進み、そうでない場合はS1910でNEXTアイコン2033の押下を待つ。
S1911では、開発者用端末100は、CRUDの入力フォーム3(ダイアログボックスである)を表示し、CRUDの対象となるデータベースとテーブルの選択操作を受け付ける。図20(e)に、CRUDの入力フォーム3の表示例を示す。領域2041は、データベースの選択を受け付けるための領域である。データベースの選択は、右端のアイコンを押下して表示される選択肢から選択することができる。領域2042は、テーブルの名称の入力を受け付けるための領域である。
S1912では、開発者用端末100は、入力フォーム3での選択/入力操作が行われ、FINISHアイコン2043が押下されたか否かを判定する。FINISHアイコン2043が押下された場合はS1913に進み、そうでない場合はS1912でFINISHアイコン2043の押下を待つ。
S1913では、開発者用端末100は、入力フォーム1~3に入力された内容(選択された内容)に基づいて、CRUDボタンを生成して選択中UI画面に自動的に配置する。また、CRUDボタンが押下されたことに応じて遷移して表示される画面であるNextUIとなるUI画面を生成する。すなわち、選択中アプリにUI画面が自動生成される。また、入力フォーム3に入力された内容のデータベースのテーブルを選択中実行環境のDBセットに自動的に生成する。
S1914では、開発者用端末100は、キャンバスのコンテキストメニューのうちその他のメニュー項目(選択肢2011、2012、2014のいずれか)が押下されたか否かを判定する。その他のメニュー項目が押下された場合はS1915に進み、そうでない場合はS1916に進む。
S1915では、開発者用端末100は、押下されたメニュー項目に応じた処理である、その他の処理を行う。
S1916では、開発者用端末100は、キャンバスのコンテキストメニューを閉じる操作(例えば、コンテキストメニューが表示された領域外をクリックする操作)があったか否かを判定する。コンテキストメニューを閉じる操作があった場合には、S1917でコンテキストメニューを非表示とし、図19の処理を終了する。閉じる操作がない場合にはS1902に戻る。
図20(f)に、S1913の処理によって自動的に配置されたCRUDボタン(自動生成部品)の表示例を示す。図20(f)は、図20(a)と同じUI画面のキャンバスの表示例であり、図20(a)と同じUI部品には同じ符号を付す。図20(f)では、図20(a)に対して、UI部品2051~2053が追加されている。このUI部品2051~2053がCRUDボタンである。CRUDボタンであるUI部品2051~2053には自動的にアクションが設定されている。CRUDボタンであるUI部品2051のアクションは、UI部品2051が押下されたことに応じて、入力フォーム3で設定されたデータベースのテーブルに、入力フォーム1で選択されたUI部品に入力されている値を保存する(更新または追加する)処理を行い、その後、NextUIに画面遷移する処理である。CRUDボタンであるUI部品2052のアクションは、UI部品2052が押下されたことに応じて、入力フォーム3で設定されたデータベースのテーブルのうち、入力フォーム1で選択されたUI部品に入力されている値を持つデータを削除する処理を行い、その後、NextUIに画面遷移する処理である。CRUDボタンであるUI部品2053のアクションは、UI部品2052が押下されたことに応じて、入力フォーム3で選択されたデータベースのテーブルのうち、入力フォーム1で選択されたUI部品に入力されている値と一致するデータを取得し、NextUIに画面遷移して取得したデータを表示する処理である。
図20(g)に、S1913の処理によって自動的に生成されたUI画面(UI画面IDはcrud-newui-UI01)の表示例を示す。図20(g)は、図20(a)と異なるUI画面のキャンバスの表示例であり、UI部品であるデータグリッド2061が配置されている。データグリッド2061は、「ID」、「number_field_ID」、「text_field_Name」、「number_field_age」の4つのカラムを有している。このうち、ID以外のカラムは、入力フォーム2で選択されたUI部品に対応するものである。また、ボタンであるUI部品2062が自動的に配置されている。このUI画面(crud-newui-UI01)には、キャンバスのアクションも自動的に設定されている。自動的に設定されたキャンバスのアクションは、入力フォーム3で設定されたデータベースのテーブルのうち、遷移元の画面の各種CRUDボタンが押下された場合の、CRUDの対象のなった行のデータをデータグリッド2061に表示するように制御するアクションである。このキャンバスのアクションも、前述したS1904の処理によって、自動的に設定されたアクションをベースとして開発者(ユーザー)がカスタマイズ可能である。
また、自動生成されたデータグリッド2061も後述するグリッドのプロパティボックスやアクションボードによって各種編集が可能である。例えば、グリッドの装飾を変更したり、カラム名として表示されているラベルを「text_field_Name」から「名前」に変更したりすることができる。また、例えば、一部のカラムを表示しないように修正することが可能である。アプリケーションをデプロイして運用を開始した後に、何らかの事情(例えば法規制や運用方法の変更など)でカラムを増減させたい場合があり得る。例えば、将来、データグリッド2061のうち、「number_field_age」のカラムを表示しないように変更したい場合が発生する可能性がある。この場合、UIエディタでカラムのプロパティから削除したいカラムを削除するだけで削除できる。従って改めてCRUDの入力フォーム1~3を入力しなおして生成しなおす必要がない。このように、CRUDの入力フォーム(フィザード)への入力に応じて自動的に生成されたUI部品や画面を編集できることで、アプリケーションの将来の運用の変更などにも少ない操作手数で簡単に、柔軟に対応することができる。
図21(a)に、S1913の処理によって自動的に追加されたデータベースのテーブルの例を示す。この表示例は、メインメニュー領域のデータベースボタン516を押下して表示させた場合の表示例である。すなわち、図21(a)は、図12のS1214で表示されるデータベースに関する画面の1つである。サブメニュー領域に表示されたデータベース「sample」に含まれるテーブル一覧(TABLES)のうち、テーブル2101(CRUD_T01)が、CRUDの生成に応じて自動的に追加されたテーブルである。テーブル2102は、テーブル2101(CRUD_T01)の詳細を表示したものであり、カラムとしてIDの他に、入力フォーム2で選択されたUI部品のUI部品IDをカラム名としたカラムがあることがわかる。これらのカラムについて、データ型などのプロパティも、入力フォーム2で選択されたUI部品のプロパティに応じて自動的に設定されている。
図21(b)に、図19のS1913の処理で自動的に配置されたCRUDボタンであるUI部品2051のアクションボードを表示した場合の表示例を示す。すなわち、このアクションボードは、指定UI部品をUI部品2051とした場合に図8で前述したS801で表示されるものである。アクションボード910には、開発者がプログラミング言語でのアクションの記述を行っていない状態で、初期値として図21(b)のようなアクションの文字列がプログラミング言語(JavaScript)で記述された状態で表示される。言い換えれば、アクションボード910には、開発者が当該アクションに関してプログラム言語でのソースコードの記述を行っていない状態で、初期値として図21(b)のような、アクションを定義したプログラミング言語でのソースコードが表示される。ユーザーは、このように自動的に定義されたアクションを前述したS802~S808の処理によって編集可能である。すなわち、自動的に定義されたアクションの文字列をベースとして、これを一部流用し、一部改変または文字列を追加するようにプログラミング言語を入力することができる。すなわち、自動的に定義されたアクションの文字列に対する修正操作を受け付けることができる。このように、自動的に生成されて表示されたアクションのプログラミング言語をベースとすることで、開発者がゼロからプログラミング言語でアクションを記述するよりも、少ない操作手数(テキスト入力量)で簡単にアクションを設定することができる。また、自動的に生成されたアクションをそのまま使うことなく修正を加えてカスタマイズできるため、より細かい要望に応えるアクションを生成可能である。
また、図21(b)において、サブメニュー領域の関数一覧920には、予め用意された関数の選択肢として関数2121と関数2122が表示される。関数2121と関数2122は図19のS1913の処理で自動的に生成された関数である。
図21(c)に、関数一覧920から関数2121を選択して関数の設定画面を表示した場合の表示例を示す。関数2121はSQL関数であり、SQL関数設定画面が表示される。SQL関数設定画面は図10(a)で前述したものと同じ構成であるため、図21(c)において、図10(a)と同じ設定欄/入力欄には同じ符号を付して説明を省略する。設定欄951には、関数名として「SQL_Save」が自動的に設定されている。また、設定欄953には、SQL文が予め入力されている。このSQL文のうち、「INSERT INTO」との文字列は、データベースへの処理種別が「INSERT」であり、テーブルに新たに行を追加する処理であることを示している。また、「sample.CRUD_T01」との文字列は、処理対象となるデータベースが「sample」であり、テーブルが「CRUD_T01」であることを示している。これは、入力フォーム3に入力された内容が反映されたものである。また、それ以降の文字列は追加する行に含まれるカラムの値を示しており、入力フォーム1に入力された内容が反映されたものである。設定欄951、953の内容は、自動的に生成されたものをベースとして、前述した図8のS813~S820の処理によって開発者が編集(修正、削除、加筆、カスタマイズ)可能である。
図21(d)に、関数一覧920から関数2122を選択して関数の設定画面を表示した場合の表示例を示す。関数2122はSQL関数であり、SQL関数設定画面が表示される。SQL関数設定画面は図10(a)で前述したものと同じ構成であるため、図21(d)において、図10(a)と同じ設定欄/入力欄には同じ符号を付して説明を省略する。設定欄951には、関数名として「SQL_Update」が自動的に設定されている。また、設定欄953には、SQL文が予め入力されている。このSQL文のうち、「UPDATE」との文字列は、データベースへの処理種別が「UPDATE」であり、テーブルの既存の行の値を更新する処理であることを示している。また、「sample.CRUD_T01」との文字列は、処理対象となるデータベースが「sample」であり、テーブルが「CRUD_T01」であることを示している。これは、入力フォーム3に入力された内容が反映されたものである。また、それ以降の文字列は更新するカラムの値を示しており、入力フォーム1に入力された内容が反映されたものである。設定欄951、953の内容は、自動的に生成されたものをベースとして、前述した図8のS813~S820の処理によって開発者が編集(修正、削除、加筆、カスタマイズ)可能である。
図21(b)のアクションボード910に図示した、自動的に生成されるアクションの内容について詳細に説明する。図21(b)のアクションボード910に記述されたJavaScriptの文字列の各行は、下記の意味である。
1行目…paramsという変数名で、2~5行目の値を含む値のセットを定義する。
2行目…IDとなる数字の定義。通し番号となる。
3~5行目…入力フォーム1で選択されたUI部品に入力されている値を取得する。なお、値を取得するという意味で、「=」の右側に「$ui.UI部品ID.対象となる情報の種別」が記載されているが、この記述方式自体はJavaScriptの標準の記載方法ではなく、本システム独自のものである。これについて詳細は後述する。
6行目…2~5行目で定義したparamsを引数として関数SQLUpdateを実行する。すなわち、入力フォーム1で選択されたUI部品に入力されている値で、入力フォーム3で設定したデータベースのテーブルを更新する。
7行目…Updateによって影響のある行(Row)を取得する。
8行目…7行目で取得できた行があるか判定する。すなわち、Updateできた行があるか判定する。
9行目…8行目が真であれば、「Successfully Updated」(更新できました)と表示する。
10行目…NextUIとしてUI画面IDが「crud-newui-UI01」であるUI画面へ遷移する。
12行目…7行目で取得できた行が0であるか判定する。これが真となる場合には、今回取得したparamsに対応する既存の行が無かったことを意味するため、新しい行を追加して新規登録することになる。
13行目…12行目が真である場合に、2~5行目で定義したparamsを引数として関数SQLSaveを実行する。すなわち、入力フォーム1で選択されたUI部品に入力されている値で、入力フォーム3で設定したデータベースのテーブルに行を追加して新規保存を行う。
14行目…13行目での新規保存で影響のあった行(すなわち、追加した行)を取得する。
15行目…14行目で取得できた行があるかを判定する。すなわち、行を追加しての新規登録が成功したかを判定する。
16行目…15行目が真であれば、「Successfully Inserted」(追加が成功した)と表示する。
17行目…NextUIとしてUI画面IDが「crud-newui-UI01」であるUI画面へ遷移する。
19、20行目…8行目も12行目も偽である場合は、「Insertion Failed」(失敗した)と表示する。
このように自動的に生成され、開発者(ユーザー)が修正できるようにプログラミング言語でアクションボードに提示された内容に対して、開発者(ユーザー)は、例えば、下記のようなカスタマイズを行うことができる。
・メッセージの内容(アクションの実行に応じて表示されるメッセージ)を変更したいので、9行目、16行目、20行目のメッセージ内容だけ書き換える。
・SAVEボタンの押下に応じて表示する画面(アクションの実行に応じて表示される画面)は自分で作ったものにしたいので、10行目、17行目のNextUIのUI画面IDの部分(crud-newui-UI01)だけ書き換える。
・年齢を登録しない運用に変更したいので5行目を削除する。すなわち、アクションの実行の際に情報を取得及び/または出力する対象となるコンポーネントを変更する。
・複数のデータベースに登録したいので、SQL関数(創作関数)を新たに作成(追加)し、書き加える。SQL関数を新たに作成する際には、設定欄953には、自動的に作成された「SQLSave」や「SQLUpdate」のSQL文をコピー&ペーストし、対象となるデータベースとテーブルの部分だけ修正する。
このように、プログラミング言語でのアクションの記述が全くない状態から開発者が所望するCRUDボタンのアクションを作成するよりは、自動的に生成されたものからカスタマイズする方が、大きく操作手数を削減することができる。また、自由にカスタマイズできるので、作成できるアクションの内容の自由度も大きい。本実施形態によれば、開発者(ユーザー)がプログラム言語での記述をすることなく定義されたアクション(入力フォーム1~3へ入力する操作群に基づいて定義されたアクション)を、より柔軟に修正して利用できる。
<開発者アカウント登録処理>
図22(a)に、開発者用端末100における開発者アカウント登録処理のフローチャートを示す。この処理は、前述した図3のS306の詳細フローチャートである。
S2201では、開発者用端末100は、新規に登録するアカウント情報として、メールアドレス、氏、名の入力を受け付ける入力欄をディスプレイ105に表示し、ユーザー(開発者)からの各入力欄への入力を受け付ける。
S2202では、開発者用端末100は、S2201で入力されたアカウント情報と、当該アカウント情報を新規に登録するリクエストである登録要求とを、開発環境300に送信する。
S2203では、開発者用端末100は、ワンタイムパスワードの入力を受け付ける受付画面をディスプレイ105に表示し、ユーザー(開発者)からのワンタイムパスワードの入力を受け付ける。開発環境300にアカウント情報の登録依頼を送信すると、開発環境300から、アカウント情報に含まれるメールアドレスに対し、当該メールアドレスが有効であることを確認するためにワンタイムパスワードが送られてくる。開発者は、そのメールアドレスの所有者であるため、そのメールアドレスに送られてきたワンタイムパスワードを見て、ディスプレイ105に表示されたワンタイムパスワードの受付画面へ入力する。
S2204では、開発者用端末100は、S2203で入力されたワンタイムパスワードを開発環境300に送信する。
S2205では、開発者用端末100は、開発環境300からログインOK通知を受信したか否かを判定する。ログインOK通知を受信した場合はS2209に進み、そうでない場合はS2206に進む。
S2206では、開発者用端末100は、ワンタイムパスワードの再送を開発環境300に要求するための再送指示画面を表示する。
S2207では、開発者用端末100は、開発者(ユーザー)からのワンタイムパスワードの再送指示操作があったか否かを判定する。再送指示操作があった場合にS2208に進む。再送指示操作がない場合に開発者用端末100は再送指示操作があるまで待機する。
S2208では、開発者用端末100は、開発環境300に、ワンタイムパスワードの再送要求を送信する。
S2209では、開発者用端末100は、パスワードの登録画面を開発者用端末100に送信し、パスワードの登録(パスワードとしたいデータの入力)を受け付ける。
S2210では、開発者用端末100では、S2209で受けつけたパスワードとしたいデータを開発環境300に送信する。
図22(b)に、開発環境300における開発者アカウント登録処理のフローチャートを示す。この処理は、図22(a)の開発者用端末100における開発者アカウント登録処理と連動する開発環境300側の処理である。
S2221では、開発環境300は、アカウント情報と、当該アカウント情報を新規に登録するリクエストである登録要求(登録指示)を開発者用端末100から受信したか否かを判定する。このアカウント情報と登録要求は図22(a)のS2202で開発者用端末100から送信されたものである。アカウント情報と、当該アカウント情報を新規に登録するリクエストである登録要求を開発者用端末100から受信した場合はS2222に進み、そうでない場合は受信するまで待機する。
S2222では、開発環境300は、開発者情報301に行を追加し、S2221で受信したアカウント情報を記録する。また、この行のカラム「Verify」の値は「unconfirmed」を記録する。開発者情報301にあるカラムは、図14(a)に示したものである。開発者情報301の1行分が1人分のアカウント情報であり、同じ行に記録された各カラム(列)の情報は互いに同じ開発者のアカウント情報として関連付けて記録されたものである。
S2223では、開発環境300は、外部のワンタイムパスワード発行システム(不図示)に対して、S2221で受信したアカウント情報に含まれるメールアドレスを送信先としてワンタイムパスワードの発行と送信をするように指示を行う。これによって、外部のワンタイムパスワード発行システムから、開発者のメールアドレス宛にワンタイムパスワードが送信される。なお、本実施形態では外部のワンタイムパスワード発行システムにワンタイムパスワードの送信を指示するものとしたが、開発環境300自体がワンタイムパスワードを送信するものとしても良い。
S2224では、開発環境300は、開発者用端末100からワンタイムパスワードを受信したか否かを判定する。ここで受信するワンタイムパスワードは、図22(a)のS2204で開発者用端末100から送信されたものである。ワンタイムパスワードを受信した場合にはS2225に進み、そうでない場合にはS2224で待機する。
S2225では、開発環境300は、外部のワンタイムパスワード発行システムに対して、S2225で受信したワンタイムパスワードを送信し、発行されたワンタイムパスワードと整合するかどうかの確認指示を送信する。すなわち、ワンタイムパスワードの照合を指示する。
S2226では、開発環境300は、外部のワンタイムパスワード発行システムから、正しいワンタイムパスワードであった旨(照合OKであった旨)の通知を受信したか否かを判定する。正であった場合(照合OKであった場合)にはS2228に進み、そうでない場合にはS227へ進む。
S2227では、開発環境300は、開発者用端末100から、ワンタイムパスワードの再送要求を受信したか否かを判定する。ここで受信する要求は、図22(a)のS2208で開発者用端末100から送信されたものである。ワンタイムパスワードの再送要求を受信した場合はS2223へ進み、そうでない場合はS2227で待機する。
S2228では、開発環境300は、S2222で開発者情報301に追加したアカウントを有効化する。具体的には、S2222で開発者情報301に追加したアカウント情報のうち、カラム「Verify」の値を「confirmed」に変更する。カラム「Verify」の値が「confirmed」であるアカウント情報は、登録されたメールアドレスがワンタイムパスワードの照合によって有効であることが確認されたものであり、登録済みの有効なアカウントとして見なされる。なお、本実施形態ではメールアドレスによる認証を行うが、アカウント情報として電話番号やSNSアカウントなどの開発者への他の連絡先が登録されるようにした場合には、他の連絡先を用いた認証としてもよい。
S2229では、開発環境300は、開発者情報301に登録された有効なアカウント数(「Verify」の値が「confirmed」であるアカウントの数)が予め定められた閾値2(例えば9000)より大きいかどうかを判定する。有効なアカウント数が閾値2より大きければS2230に進み、有効なアカウント数が閾値2以下であればS2232に進む。
S2230は、開発環境300は、マルチテナント実行環境410にDBインスタンスを追加済みであるか否かを判定する。DBインスタンスを追加済みであればS2232に進み、追加済みでなければS2231に進む。
S2231では、開発環境300は、マルチテナント実行環境410のDBセット430に、新たなDBインスタンスを追加する。DBインスタンスの新規追加(新規作成)には数十分の処理時間を要するため、有効アカウント数が後述する閾値1(>閾値2)を超えて接続先のDBインスタンスを変更する前に、閾値1を超えた時点で事前に準備しておく。このようにすることで、接続先のDBインスタンスの変更があった際に、遅延なく、すぐに新しいDBインスタンスに接続できる。
S2232では、開発環境300は、開発者情報301に登録された有効なアカウント数(「Verify」の値が「confirmed」であるアカウントの数)が予め定められた閾値1(閾値2より大きい値で、例えば開発者用端末10000)より大きいかどうかを判定する。有効なアカウント数が閾値1より大きければS2233に進み、有効なアカウント数が閾値1以下であればS2236に進む。
S2233では、開発環境300は、新たに追加されるアカウント情報に割り当てるマルチテナント実行環境のDBインスタンス名としてメモリ304に保持していたDBインスタンス名を、S2231で追加しておいた新たなDBインスタンスのDBインスタンス名に更新済であるか否かを判定する。更新済みである場合にはS2236へ進み、そうでない場合にはS2234へ進む。
S2234では、開発環境300は、新たに追加されるアカウント情報に割り当てるマルチテナント実行環境のDBインスタンス名としてメモリ304に保持していたDBインスタンス名を、S2231で追加しておいた新たなDBインスタンスのDBインスタンス名に更新する。DBインスタンス名は、データベース環境の識別子である。これによって、例えば、これ以前に追加されたアカウントには「DBインスタンス名1」を割当ててていたのが、これ以降に追加されるアカウントには「DBインスタンス名2」が割り当てられるようになる。1つのDBインスタンス(データベース環境)に接続するアカウント数が多くなると、1度にデータベースにアクセスされる数が増加し、アクセスが集中した場合にレスポンスが低下するなどのパフォーマンスの低下を招くことがある。これに対し、S2233の処理によって、アカウント数が閾値1を超えた場合には、それ以降に登録されたアカウントは、それ以前とは異なる新たなDBインスタンス(データベース環境)へ接続するように設定されるため、1つのDBインスタンスを使用する開発者の数が過大となりアクセスが集中してしまう可能性を低減することができる。従って、データベースへのアクセスに関してレスポンスが低下するなどのパフォーマンスが低下する可能性を低減することができる。
S2235では、開発環境300は、閾値1=閾値1+閾値1に更新する。また、閾値2=閾値2+閾値1に更新する。これによって、例えば、更新前の閾値1が開発者用端末10000、更新前の閾値2が9000であった場合には、閾値1=20000、閾値2=19000となる。すなわち、更に開発者用端末10000アカウント増える度(閾値1の数だけ有効なアカウント数が増える度)に、S2231の処理とS2234の処理が行われる。
S2236では、開発環境300は、S2222で追加されたアカウント情報(今回追加されたアカウント)の接続先DBインスタンスとしてメモリ304に保持されたDBインスタンス名を割当てる。より具体的には、開発者情報301のうち、今回追加されたアカウントの行の、接続先DBインスタンス名を示すカラム(図14(a)の一番右の列)に、接続先DBインスタンスとしてメモリ304に保持されたDBインスタンス名を記録する。S2232~S2235で説明した処理によって、例えば、閾値1が開発者用端末10000で、今回追加されたアカウントが9999個目の有効なアカウントであれば「DBインスタンス名1」が記録され。今回追加されたアカウントが開発者用端末10001個目の有効なアカウントであれば「DBインスタンス名2」が記録される。
S2237では、開発環境300は、開発者用端末100に、ログインOK通知を送信する。ここで送信したログインOK通知が、前述したS2205において開発者用端末100によって受信される。
S2238では、開発環境300は、前述したS2210で開発者用端末100から送信されたパスワードとしたいデータを受信し、今回追加したアカウント情報のパスワードとして登録する。より詳しくは、開発者情報301のうち、今回追加されたアカウントの行の、パスワードのカラムに記録する。
図23(a)に、マルチテナント実行環境410にあるDBセット430の詳細を示す。DBセット430には、最初は1つまたは複数である固定数のDB環境(DBインスタンス)が用意されている。本実施形態では固定数=1、つまり最初はDBインスタンス1(2310)だけが用意されているものとする。DBインスタンス1の中には、開発者情報DB2311と、開発者毎のDBが含まれる。開発者情報DB2311には、各開発者(各アカウント)に用意されるデータベースがどれであるかを示している。例えば、開発者AのDB情報2312は、開発者AのDBがDB1である、という対応付けを示す情報である。開発者毎のDBにはDB1(2314)、DB2(2315)、DB3(2316)…とあり、開発者情報301に有効なアカウントが登録されるたびに増える。ただし上限は閾値1と同じ数までであり、閾値1が開発者用端末10000の場合、DBmax(2317)が開発者用端末10000個目のDBであり、それ以降は別のDBインスタンスにDBが作られる。発明者毎のDBの中にはさらに1以上のテーブルが含まれる。例えばDB1(2314)にはテーブル1、テーブル2、…と、複数のテーブルが含まれる。なお、各DBインスタンス(データベース環境)は、書き込み可能なデータベースインスタンスである。
S2231の処理によって、DBインスタンス1のDBの数が上限(閾値1)に達する前に、次のDBインスタンス2が生成される。そして、DBインスタンス1にDBmax(2317)まで生成された状態から、更に有効な開発者アカウントが開発者情報301に追加登録された場合、S2232でYesとなり、追加登録された開発者はDBインスタンス2(2320)に接続するように開発者情報301に登録される。そして、DBインスタンス2(2320)にそれ以降追加されたアカウント(開発者)用のDBが生成されていく。なお、DBインスタンス2(2320)に入るDBの数も閾値1まで(通算、閾値1×2まで)であり、それ以降に登録されたアカウントは、同様にして次のDBインスタンスに接続するように制御される。
図23(b)に、シングルテナント実行環境のDBセット457の詳細を示す。シングルテナント実行環境は1つのアカウント(1人の開発者)に専用であるため、DBセット457も1つのアカウント(1人の開発者)に専用である。そのため、レスポンスが低下するほどのDBの増加、アクセスの集中が起こる可能性は低い。従って、DBセット457には、DB環境としてはDBインスタンス1(2350)の1つだけが用意される。また、開発者情報DB2351には1アカウント文の情報(例えば開発者AのDB情報2352)だけが記録される。格納されるDBの数にも上限となる閾値は用意されない。また、図22(b)で説明したように、登録されるアカウント情報に関連付けて、接続先となるシングルテナント実行環境のデータベース環境を決定する制御は、開発者の新規アカウントの登録(追加)の際には行わない。
<デプロイ処理>
図24(a)に、開発者用端末100におけるデプロイ処理のフローチャートを示す。この処理は、開発者用端末100が実行する処理であり、図4のS426の詳細フローチャートである。
図25(a)に、選択中アプリがモバイル用アプリである場合のUIエディタ画面の表示例を示す。キャンバス2501はモバイル用の形状のキャンバスであり、スマートフォンを模した形状としている。デプロイボタン506が押下されると図24(a)の処理が開始される。
S2401では、開発者用端末100は、開発環境300に対して、選択中アプリのデプロイを指示する情報を送信する。なお、デプロイ指示を行う前に開発者用端末100のメモリ102に保持された最新の定義情報を開発環境300に保存する保存処理を行ってからデプロイ指示を行うようにしてもよい。
S2402では、開発者用端末100は、処理待ち画面を表示する。処理待ち画面では、デプロイの処理中であることを示すガイド情報が表示される。
S2403では、開発者用端末100は、開発環境300からデプロイの失敗通知を受信したか否かを判定する。失敗通知を受信した場合にはS2404に進み、そうでない場合にはS2405へ進む。
S2404では、開発者用端末100は、デプロイが失敗した旨のエラー表示を行う。デプロイが失敗した場合は、後述のS2407、S2409の処理は行われない。
S2405では、開発者用端末100は、開発環境300からデプロイの成功通知を受信したか否かを判定する。成功通知には、デプロイ済のアプリにアクセスするためのアクセス先の情報(URL)が含まれる。成功通知を受信した場合にはS2406に進み、そうでない場合にはS2403へ進む。
S2406では、開発者用端末100は、選択中アプリ(デプロイしたアプリ)がモバイル用であるか否かを判定する。モバイル用である場合にはS2408に進み、そうでない場合(すなわちデスクトップ用である場合)にはS2407に進む。モバイル用でない場合には後述するS2409のQRコード(登録商標)の表示は行わない。
S2407では、開発者用端末100は、デプロイ指示を受け付ける前にブラウザソフトで表示していた画面(例えばキャンバスを含むUIエディタ画面)とは異なるブラウザソフトの新しいタブで、成功通知に含まれるデプロイ済みのアプリのURL(実行環境にアクセスするURL)にアクセスした画面を表示する。これによって、開発者は、デプロイが成功したことをすぐに認識することができる。また、新しいタブに、デプロイ済みアプリの認証画面またはイニシャルUIが表示され、新しいタブに対して操作することで、デプロイ済み(実行環境に構築済み)の実際のアプリの表示内容や動作をすぐさま確認・検証することができる。このS2407の処理によって、デプロイ済みのアプリのURL(実行環境にアクセスするURL)にアクセスして行うアプリの実行処理が行われる。アプリの実行処理の詳細については図33(c)または図35(c)のフローチャートを用いて説明する。
S2408では、開発者用端末100は、成功通知に含まれるアプリのURLをQRコード化する処理を行う。すなわち、アプリのURLの情報を含むQRコード(2次元コード)を生成する。
S2409では、開発者用端末100は、S2409で生成したQRコードを表示する。QRコードはデプロイの完了(成功)に応じて表示されるため、開発者は、デプロイが成功したタイミングを認識することができる。図25(b)に、S2409でのQRコードの表示例を示す。図25(b)は、図25(a)の状態からデプロイボタン506が押下されてデプロイ指示がなされ、デプロイが成功した場合に遷移する画面の表示例である。モバイル用のキャンバスに重畳して、QRコードダイアログ2510が表示される。QRコードダイアログ2510には、S2408で生成したQRコード2511と、閉じるボタン2512と、新しいタブで開くボタン2513が表示される。なお、QRコード2511が有する情報であるアプリのURLは、UIエディタ画面を表示しているブラウザのアドレスバーに表示されたURL2504(本実施形態の開発システム(アプリケーション開発プラットフォーム)のURLであって、開発者用端末100にアクセスするURL)とは別のURLである。QRコード2511は、デプロイが完了したことによって表示されるものであり、デプロイされたアプリを実行するためのアドレスであって、デプロイがされた場所(実行環境)を示すアクセス先情報である。
開発者(ユーザー)は、開発者用端末100のディスプレイ105に表示されたQRコード2511を、手持ちのスマートフォン(モバイル端末)で撮影して読み取ることで、手持ちのスマートフォンにおいて、デプロイ済みのアプリのURL(実行環境にアクセスするURL)にアクセスした画面を表示させることができる。従って少ない操作手数で容易にデプロイ済みのURLにアクセスすることができる。この場合の手持ちのスマートフォンは、アプリユーザー用端末201として機能する。これによって、手持ちのスマートフォンに、デプロイ済みアプリの認証画面またはイニシャルUIが表示され、手持ちのスマートフォンに対して操作することで、デプロイ済み(実行環境に構築済み)の実際のアプリの表示内容や動作をすぐさま確認・検証することができる。モバイル用アプリの動作を、開発者用端末100ではなくモバイル端末で確認・検証できるため、開発者用端末100で確認・検証するよりも、モバイル用アプリとして好適であるかを確認しやすい。なお、QRコード2511に加えて、あるいは代えて、成功通知に含まれるアプリのURLを読み取れるコード画像として、QRコード以外のコード画像を表示するようにしてもよい。例えば、バーコード、カメレオンコード(登録商標)などでもよい。また、QRコードダイアログ2510に、成功通知に含まれるアプリのURL自体を文字列で表示するようにしてもよい。
S2410では、開発者用端末100は、新しいタブで開くボタン2513が押下されたか否かを判定する。新しいタブで開くボタン2513が押下された場合はS2407に進み、そうでない場合にはS2411に進む。
S2411では、開発者用端末100は、閉じるボタン2512が押下されたか否かを判定する。閉じるボタン2512が押下された場合はS2412に進み、そうでない場合にはS2410に進む、
S2412では、開発者用端末100は、QRコードダイアログ2510を非表示とし、デプロイの指示の前に表示していた画面に戻る。
図24(b)に、デプロイ処理のフローチャートを示す。この処理は、開発環境300が実行する処理であり、図24(a)のS2401で開発者用端末100から送信されたデプロイ指示を開発環境300が受信すると開始される処理である。
S2421では、開発環境300は、開発環境300のストレージ320のうち、ログインしている開発者の開発者領域に保存されたアプリの定義情報のうち、デプロイ対象となる選択中アプリの定義情報を取得する。ここで取得する定義情報には、後述するUI定義情報(uiDef.json)と、実行環境用プログラム(JavaScript)が含まれる。
S2422では、開発環境300は、選択中実行環境がマルチテナント実行環境であるか否かを判定する。マルチテナント実行環境である場合にはS2423に進み、そうでない場合(シングルテナント実行環境である場合)にはS2424に進む。
S2423では、開発環境300は、マルチテナント実行環境410のストレージ420のうち、ログインしている開発者の開発者領域(専用フォルダ)に、S2421で取得した選択中アプリの定義情報を記憶させる。より具体的には、S2421で取得した選択中アプリの定義情報をマルチテナント実行環境410に送信し、ログインしている開発者の開発者領域(開発者毎のフォルダ)に記録するようにマルチテナント実行環境410に指示する。この記録が問題なく完了するとデプロイ成功となる。
S2424では、開発環境300は、選択中実行環境であるシングルナント実行環境のストレージ(シングルテナント実行環境のバケットの直下のフォルダ)に、S2421で取得した選択中アプリの定義情報を記憶させる。より具体的には、S2421で取得した選択中アプリの定義情報を選択中実行環境であるシングルナント実行環境に送信し、バケットの直下のフォルダに記録するようにマルチテナント実行環境410に指示する。この記録が問題なく完了するとデプロイ成功となる。
S2425では、開発環境300は、デプロイが失敗したか否かを判定する。デプロイが失敗した場合にはS2426に進み、そうでない場合にはS2427に進む。通信障害などで定義情報を実行環境に送信・記録できなかった場合にはデプロイ失敗となることがある。
S2426では、開発環境300は、デプロイが失敗した旨を示す失敗通知を開発者用端末100に送信する。
S2427では、開発環境300は、デプロイが完了(成功)したか否かを判定する。デプロイが完了した場合にはS2428に進み、そうでない場合にはS2425に進む。
S2428では、開発環境300は、デプロイ済みのアプリのURLの情報(実行環境にデプロイ済のアプリにアクセスするためのアクセス先の情報)を含むデプロイの成功通知を開発者用端末100に送信する。ここで送信した成功通知が、前述の図24(a)のS2405で開発者用端末100に受信される。
<UI画面のテンプレート>
UI画面のテンプレートについて説明する。UI画面には、ユーザーが作成したUI画面とは別に、テンプレ―トとして予め用意されているUI画面(テンプレート画面)がある。テンプレート画面は、ユーザーがそのUI画面に過去にUI部品を配置していなくても、予め定められたアクションが定義された少なくとも1つの雛形コンポーネントが予め決まった位置に配置された画面である。テンプレート画面は、予め用意された情報に対してカスタマイズが可能である。より詳しくは、UIエディタでキャンバスにテンプレート画面を表示させ、図4で説明したUIエディタ処理によって編集が可能である。
図26(a)に、サブメニュー領域520にUI画面一覧を選択肢として表示した場合の、テンプレート画面の選択肢の表示例を示す。この表示は、前述した図4のS401の処理によって行われるものである。図26(a)は、複数の種別に分類されたUI画面のうち、AuthenticationUI(認証用のUI画面、認証用画面)のグループに分類されるUI画面の選択肢の一覧を展開して表示した例である。グループ名2610は展開して表示しているグループがAuthenticationUIであることを示している。グループ名2610が押下されるとAuthenticationUIの選択肢の展開を折り畳み、他のグループのグループ名がサブメニュー領域520に表示される。選択肢2611~2622がそれぞれ1つのUI画面の選択肢であり、いずれもテンプレート画面として予め用意されたものである。
図26(b)に、選択肢2611を選択して、選択肢2611に対応するテンプレート画面(UI画面)である「Sign in ID」をキャンバス2630に表示した場合の表示例を示す。図26(b)の画面は、選択肢2611が押下されたことに応じて、前述した図4のS404で表示される。キャンバス2630には、雛形部品2631~2634が表示されている。雛形部品2631~2634は、ユーザー(開発者)がサブメニュー領域520のUI部品一覧からドラッグ&ドロップで配置したものではなく、予め表示位置(配置)や色、サイズ、表示内容が定義された雛形のUI部品である。雛形部品2631~2634はそれぞれ以下のようなUI部品である。
・雛形部品2631:Output Fieldで、「Sign In」と表示するためのUI部品。
・雛形部品2632:Inputの種別のTextFieldで、アプリのユーザーネーム(ユーザーID)であるメールアドレスの入力を受け付けるためのUI部品。すなわち、ユーザー特定情報の入力を受け付けるためのUI部品。
・雛形部品2633:ボタンのUI部品で、「CREATE ACCOUNT?」と表示する設定(ラベル)となっている。押下されたことに応じてテンプレート画面の一種である「Sign Up form」の画面(図27(c)に示す画面で、選択肢2614に対応するUI画面)に遷移するというアクションが予め設定されている(予め定義されている)。
・雛形部品2634:ボタンのUI部品で、「NEXT」と表示する設定(ラベル)となっている。押下されたことに応じて、雛形部品2632に入力された値(メールアドレス)を取得するとともに、テンプレ―ト画面の一種である「Sign in Password」の画面(図27(a)に示す画面で、選択肢2612に対応するUI画面)に遷移するというアクションが予め定められている(予め定義されている)。
図27(a)に、「Sign in Password」の画面のキャンバスにおける表示例を示す。なお、図27(a)~図27(k)はそれぞれ、テンプレート画面をキャンバスに表示した場合のキャンバスの部分だけを示した部分的な表示例である。「Sign in Password」の画面に配置される雛形部品2711~2715はそれぞれ以下のようなUI部品である。
・雛形部品2711:Inputの種別のTextFieldで、アプリのユーザーパスワードの入力を受け付けるためのUI部品。
・雛形部品2712:ボタンのUI部品で、「Forget Password?」と表示する設定となっている。押下されたことに応じて、テンプレ―ト画面の一種である「Reset Password Step1」の画面(図27(g)に示す画面で、選択肢2618に対応するUI画面)に遷移するというアクションが予め定められている(予め定義されている)。
・雛形部品2713:チェックボックスで、「Trust this device for 14 days」と表示される。
・雛形部品2714:「CHANGE EMAIL」と表示されるボタンで、押下されたことに応じて「Sign in ID」の画面に戻るというアクションが予め定められている(予め定義されている)。
・雛形部品2715:「SIGN IN」と表示されるボタンで、押下されたことに応じて、雛形部品2632に入力された値(メールアドレス)と、雛形部品2711に入力された値(パスワード)と、雛形部品2713のチェックボックスのチェックの有無とを、当該アプリが構築されている実行環境に送信するというアクションが予め定められている(予め定義されている)。
実際に構築されたアプリにおいては、アプリユーザー用端末201に表示された雛形部品2715に対応するボタンの押下に応じて、アプリユーザー用端末201から、ユーザーネームとなるメールアドレス、パスワード、チェックの有無が実行環境に送信される。実行環境では、受信したメールアドレスとパスワードの組が正しいかを、マルチテナント実行環境のユーザー情報411(図14(b)に示したもの)またはシングルテナント実行環境のユーザー別情報(図14(c1)に示したもの)と一致するか照合する。照合の結果、認証OKであれば、アプリへのログインがなされ、アプリユーザー用端末201にイニシャルUIが表示される。
同様に、以下の通りテンプレート画面のキャンバスにおける表示例を図示する。いずれも、アプリのユーザー認証に関する画面である。
・図27(b):選択肢2613に対応するUI画面。
・図27(c):選択肢2614に対応するUI画面。
・図27(d):選択肢2615に対応するUI画面。
・図27(e):選択肢2616に対応するUI画面。
・図27(f):選択肢2617に対応するUI画面。
・図27(g):選択肢2618に対応するUI画面。
・図27(h):選択肢2619に対応するUI画面。
・図27(i):選択肢2620に対応するUI画面。
・図27(j):選択肢2621に対応するUI画面。
・図27(k):選択肢2622に対応するUI画面。
上述した各テンプレート画面はカスタマイズが可能であり、図4のS405以降の処理で説明した通り、UIエディタで開発者が編集可能である。編集可能な内容としては、雛形部品(雛形コンポーネント)とは異なる他のUI部品の追加、雛形部品の配置位置、表示サイズの変更、雛形部品のプロパティの設定変更(表示される文字や色などの表示形態の変更)が可能である。また、テンプレート画面のキャンバスのアクションも設定・変更可能である。一方で、雛形部品のアクションの変更、削除、雛形部品の消去はできないものとする。また、テンプレート画面に追加した通常のUI部品(雛形部品ではないUI部品)に関しても、アクションの変更、削除は行えないものとする。このようにすることで、クラウドサービスを用いた認証処理に必要なアクションが修正されたことに起因する意図しないエラーが発生し、認証処理が上手く動作しなくなってしまうことを抑止することができる。すなわち、テンプレート画面では、ミスの無い認証に必要なアクションが雛形部品に予め定められており、修正不可となっているため、開発者がテンプレート画面のカスタマイズを行ったとしてもクラウドサービスを用いた認証処理は確実に上手く動作するようになっている。テンプレート画面に追加した通常のUI部品にもアクションが設定できないようにしているのは、認証が上手く動作しなくなるようなアクションが設定されてしまうのを防止するためである。例えば、図26(b)の「Sign in ID」のテンプレート画面に、新規にボタンを追加し、そのボタンに認証とは関係のないUI画面に遷移するようなアクションが設定されてしまうと、認証に必要なメールアドレスとパスワードを実行環境に送信することができなくなり、認証が動作しなくなってしまう。認証がOKとなっていない状態では遷移先のUI画面も表示されないため、アプリは正常に動作しない。このような問題を、テンプレート画面に追加した通常のUI部品にもアクションが設定できないようにすることで防止することができる。
図26(c)に、テンプレート画面ではないUI画面のキャンバスに配置されたボタン2654のコンテキストメニュー2655を表示した表示例を示す。このように、通常であれば、ボタンのコンテキストメニューにはアクション、消去の選択肢が含まれる。これは、図5(d)の表示例で説明したことと同様である。従って、図7のS711~S720で説明した通り、プロパティの編集、アクションの編集、部品の消去といった編集が可能である。
図26(d)に、テンプレート画面のキャンバスに配置されたボタン2634のコンテキストメニュー2635を表示した表示例を示す。このように、テンプレート画面に配置された雛形部品のコンテキストメニューにはアクション、消去の選択肢が表示されない。これによって、アクションの設定、雛形部品の消去ができないように制御している。すなわちアクションボードも表示されない。従って、図7のS721~S724で説明した通り、雛形部品についてはプロパティの編集(表示形態の変更)のみが行える。
図26(e)に、図26(b)に示したテンプレート画面のキャンバスに対して編集(カスタマイズ)を加えた後の表示例を示す。図26(b)と図26(e)とで同じUI部品には同じ符号を付す。UI部品2641は、開発者によって追加された出力の種別のUI部品であり、図12のS1217のファイル管理操作でアップロードされた画像ファイルを指定して表示したものである。この画像を、アプリを表すアイコンや画像にすれば、この認証画面がどのアプリの認証画面なのかをユーザーが把握しやすくなる。UI部品2642は、開発者によって追加された、テキストメッセージを出力する種別のUI部品である。また、この画面のキャンバスのアクションとして、今日の日付を取得して、月末であれば「月末締め日ですので、申請をお忘れなく」という文字列をUI部品2642に表示する、というアクションを、キャンバスのアクションボードを開いて開発者が設定したものとする。このように、この認証用の画面を表示する際の条件によって表示内容が変更されるUI部品(コンポーネント)を配置することも可能である。雛形部品2631は、図25(b)の雛形部品2631と同じUI部品(同じIDのUI部品)であるが、開発者のプロパティの編集操作によって表示する内容(ラベル)が変更され、「Login」と表示される。このように、認証に必須のアクション以外については画面設計の自由度が高い。従って例えば、アプリのユーザーが、何のアプリの認証画面(ログイン画面)なのかを容易に認識可能な画面にしたり、社内で取り決めた社内標準デザインに沿ったデザインにしたり、アプリの性質に合わせたより好適なデザインの画面にしたりすることが可能となる。
<プロパティボックスの表示例>
キャンバスに配置されたUI部品のコンテキストメニューからプロパティを選んで表示されるプロパティボックスについて説明する。
図28(a)に、パイチャートのプロパティボックスの表示例を示す。図28は、図5(b)に示した表示状態から、キャンバス530に配置されたUI部品であるパイチャート531を右クリックして表示されたコンテキストメニューのうち、プロパティを選択することで表示する画面である。この画面を表示する処理と、表示されたプロパティボックスに対する編集処理の受付は、前述した図7のS706で行われる。プロパティボックス2810が、パイチャート531のプロパティボックスである。プロパティボックス2810は、キャンバス530に表示されたパイチャート531とともに表示される。パイチャート531に表示される中身である円グラフの比率や色分けなどの表示形態は、プロパティボックス2810に設定された内容に基づいて表示される。プロパティボックス2801で設定内容が変更され、適用ボタン2811が押下されると、プロパティボックス2801の最新の設定値(変更された設定値)に基づいて、パイチャート531の表示形態が更新される。すなわち、開発者は、パイチャート531の表示形態がどのように変化するのかを確認しながら、プロパティボックス2810に対する設定操作を行うことができる。
UI部品一覧からパイチャートをドラッグ&ドロップでキャンバスに配置した際、何の値も設定されていないと、円グラフの比率毎の区域が表示されないため、ただの円のような表示となってしまう。これでは、開発者が配置されたUI部品を見て、それがパイチャート(円グラフ)であることを直感的に認識することができない。これを解決するため、パイチャートのプロパティとして予め定められた初期値(開発者が設定したものではないデフォルトの設定値)を設定しておくものとする。こうすることで、UI部品一覧からパイチャートをドラッグ&ドロップでキャンバスに配置した際、最初から比率別に区域分けされた円グラフが表示されるため、開発者は、配置したUI部品が円グラフであることを素早く直感的に把握することができる。
プロパティボックス2810のうち、Value入力領域2812は、パイチャート531が示す各区域のID、数値、色、ラベル(表示文字列)を入力する領域である。開発者が何も設定していない状況であれば、初期値が図示のように表示される。図示の例では、初期値の一部だけが表示されており、スクロールすることで最初から最後までを見ることができる。Value入力領域2812に表示される初期値の全文は以下の通りであるものとする。なお、「″」はダブルクォーテーションであるものとする
[{″id″:″Jan″,″value″:開発者用端末100.33,″color″:″#394E79″,″month″:″Jan″},{″id″:″Feb″,″value″:22.12,″color″:″#5E83BA″,″month″:″Feb″},{″id″:″Mar″,″value″:53.21,″color″:″#C2D2E9″,″month″:″Mar″},{″id″:″Apr″,″value″:34.25,″color″:″#9A8BA5″,″month″:″Apr″},{″id″:″May″,″value″:24.65,″color″:″#E3C5D5″,″month″:″May″}]
Value入力領域2810に表示された初期値は、プログラミング言語で記述する際の構造で表示されている。上記の初期値の全文のうち、「{」と「}」で囲まれた部分がパイチャートにおいて1つの区域に対応する1つのデータセットである。「″」で囲まれた文字列が「:」で対応付けられた1組の文字列は、キー名とキーの値の組である。例えば、「″id″:″Jan″」では、キー名が「id」であり、キーの値が「Jan」である。「,」が前のキーと次のキーとの区切りである。すなわち、上記の初期値の全文のうち、{″id″:″Jan″,″value″:開発者用端末100.33,″color″:″#394E79″,″month″:″Jan″}という複数組分を含む部分が1つのデータセット(1セット)であり、id、value、color、monthの4つのキー名と値の組が含まれている。同様のデータセットが全部で5つあることがわかる。このように、パイチャートの初期値は、それぞれデフォルトの設定値群を含むデータセットを複数含む設定値のセットである。
開発者は、プロパティボックス2810のValue入力領域2812に表示された初期値を、Value入力領域2812を選択してキーボードからの入力を行うことで自由に編集可能である。ただし、初期値として、上記のように構造がわかるように表示されているため、どこをどのように編集すれば良いのかを理解しやすい。また、適用ボタン2811を押下すれば編集した内容がパイチャート531に反映されるため、どこの構造の値を変更するとパイチャート531がどのように変化するかを確認できる。そのため、プログラミング言語で記述可能な構造で表示された文字列のうち、どこがどういう意味なのかというのも理解しやすい。
単にパイチャートの設定値を設定できるようにするのであれば、プロパティボックス2810において「区域1のID」、「区域1の値」、「区域1の色」、「区域1の表示ラベル」…といったように設定項目を分け、それぞれに対して開発者に入力あるいは選択させるという設定方法も考えられる。しかし、本実施形態ではそうはせず、プログラミング言語で記述する際の構造で初期値を表示し、開発者が編集する場合もプログラミング言語で記述する際の構造に沿った記述で入力させる。これは、パイチャートの設定値を、他のUI部品またはキャンバスのアクションボードにJavaScriptで入力するアクションによって変更可能であるためである。初期値をプログラミング言語で記述可能な構造で、コピー可能なテキスト(文字列)で表示しておけば、開発者は、この文字列を公知のコピーによってクリップボードにコピーし、アクションボードにペーストすることができる(コピーアンドペーストすることができる)。そして、アクションボード上で変更を加えたい部分の文字だけを修正すれば、パイチャートの表示内容を変更するアクションを容易に記述することができる。このようにすることで、開発者が、パイチャートの表示形態を変更するようなアクションを記述したい場合に、どのように記述すればよいかわからないために意図通りのアクションを記述できない、あるいは記述の仕方を調べるのに多大な時間を費やしてしまうことを抑制できる。すなわち、より効率的なソフトウェア開発を行うことができる。プログラミング言語であるため、その他の編集を加えたい場合にも自由度高く編集することができる。
図29に、開発者が配置した、パイチャート531とは異なる他のUI部品(ボタン)のアクションボードに、開発者によって、パイチャート531の表示形態(表示内容)を変更(指定)するアクションが入力された場合のアクションボードの表示例を示す。図示のアクションボード2900は、構築後のアプリにおいてボタンが押下された場合に実行すべきアクションをプログラミング言語で記述する記述領域(入力領域)である。アクションボード2900に表示された文字列(JavaScriptでの文字列)のうち、2行目から32行目は、プロパティボックス2810のValue入力領域2812に表示された初期値をコピーアンドペーストし、見やすさのための改行を加えたものをベースとして、数値2901~数値2951だけを編集(変更)したものである。もちろん、他の部分を変更してもよいし、データセット(「{}」で囲まれた部分)の追加や削除を行っても良い。このように、プログラミング言語でのアクションの入力が非常に容易となる。構築後のアプリにおいて、このアクションボードに対応するボタンが押下された場合、パイチャートは、初期値ではなく、このアクションボードに記述された内容に基づいた表示形態で表示される。
パイチャートと同様に、UI部品のうちリストにも初期値(デフォルトの設定値)が設定されており、プロパティボックスにおいて初期値がプログラミング言語で記述する場合の構造に則って表示される。図28(b)に、リスト2802のプロパティボックス2820の表示例を示す。Value入力領域2821には、図示の通り、初期値がプログラミング言語で記述する場合の構造に則って表示される。
パイチャートと同様に、UI部品のうちLINE CHART(ラインチャート、線グラフ)にも初期値(デフォルトの設定値)が設定されており、プロパティボックスにおいて初期値がプログラミング言語で記述する場合の構造に則って表示される。図28(c)に、LINE CHART2803のプロパティボックス2830の表示例を示す。入力領域2831~2834には、図示の通り、初期値がプログラミング言語で記述する場合の構造に則って表示される。
パイチャートと同様に、UI部品のうちデータグリッド(表)、コンボボックス、タブ部品、ステッパー、パンくずリスト(Breadcrumbs)にも初期値(デフォルトの設定値)が設定されており、プロパティボックスにおいて初期値がプログラミング言語で記述する場合の構造に則って表示される。図28(d)に、データグリッド2804のプロパティボックス2840の表示例を示す。入力領域2841には、図示の通り、初期値がプログラミング言語で記述する場合の構造に則って表示される。データグリッドの初期値は、データグリッドの1行毎の各カラムの値を1セットのデータセットとして、複数行分のデータセットを含む。
<データグリッドのプロパティとアクションの設定>
図30に、開発者用端末100におけるデータグリッドのコンテキストメニュー処理のフローチャートを示す。この処理は、前述した図7のS705の詳細フローチャートである。この処理は開発者用端末100が実行する。
S3001では、開発者用端末100は、データグリッド用のコンテキストメニューを表示する。図31(a)に、データグリッド用のコンテキストメニューの表示例を示す。キャンバス530に配置されたUI部品であるデータグリッド3110は、カラム3111~3116の6つのカラムを有している。なお、データグリッド3110を囲む点線はデータグリッド3110の全体を示すために図示した図面上の補助線であって、表示されるものではない。マウスカーソルの近傍に、データグリッド用のコンテキストメニュー3120が表示される。コンテキストメニュー3120には、メニュー項目となる選択肢として、少なくともプロパティ3121とアクション3122が表示される。
S3002では、開発者用端末100は、コンテキストメニュー3120に含まれる選択肢のうち、プロパティ3121が押下(選択)されたか否かを判定する。プロパティ3121が押下(選択)された場合はS3010に進み、そうでない場合にはS3003へ進む。
S3003では、開発者用端末100は、コンテキストメニュー3120に含まれる選択肢のうち、アクション3122が押下(選択)されたか否かを判定する。アクション3122が押下(選択)された場合はS3020に進み、そうでない場合にはS3004へ進む。
S3004では、開発者用端末100は、コンテキストメニュー3120に含まれる選択肢のうち、その他の選択肢が押下(選択)されたか否かを判定する。その他の選択肢が押下(選択)された場合はS3005に進み、そうでない場合にはS3006へ進む。
S3005では、開発者用端末100は、その他の選択肢の押下(選択)に応じたその他の処理を行う。例えば、消去する選択肢が選択された場合には指定UI部品であるデータグリッドをキャンバスから削除(消去)する。
S3006では、開発者用端末100は、コンテキストメニューを閉じる操作(例えば、コンテキストメニューが表示された領域外をクリックする操作)があったか否かを判定する。コンテキストメニューを閉じる操作があった場合には、S3007でコンテキストメニューを非表示とし、図30の処理を終了する。閉じる操作がない場合にはS3002に戻る。
S3010では、開発者用端末100は、指定UI部品であるデータグリッドのプロパティボックスを表示する。図31(b)~図31(f)に、データグリッドのプロパティボックスの表示例を示す。図31(b)~図31(f)において、同じ表示アイテムには同じ符号を付す。図31(b)の適用ボタン3131は、プロパティボックスに入力された内容(変更された設定内容)を反映することを指示するボタンアイコンである。適用ボタン3131が押下されると、プロパティボックスの最新の設定内容に基づいて、プロパティボックスとともに表示しているキャンバスに配置された指定UI部品であるデータグリッドの表示形態を変更する。カラム選択欄3132は、設定を変更したいカラムを選択するための選択タブである。データグリッドのプロパティボックスでは、カラム毎に設定を受け付ける画面を表示し、カラム毎のプロパティの設定を受け付ける。カラム追加ボタン3133は、指定UI部品であるデータグリッドにカラムを追加することを指示する表示アイテムである。
S3011では、開発者用端末100は、プロパティボックス内のカラム選択欄3132でいずれかのカラムに対応するタブが押下されたか否かを判定する。すなわち、設定対象としていずれかのカラムが選択されたか否かを判定する。いずれかのカラムに対応するタブが押下された場合にはS3012に進み、そうでない場合にはS3013に進む。なお、カラム選択欄3132に表示されたタブ(選択肢)のうち、最も左側に配置されるタブ(不図示)は、「DataGrid」と表記されたタブであり、指定UI部品であるデータグリッドの全体に関する設定を行う設定画面を表示させるためのタブである。この「DataGrid」のタブだけは、特定のカラムに関するものではない(特定のカラムを選択するものではない)。
S3012では、開発者用端末100は、プロパティボックスのうちカラム選択欄3132より下部の領域の表示内容を、選択されたカラムに関する設定画面(要素画面)に切り替える。図31(c)に、カラム選択欄3132のうち、タブ3132E(「CompanyE」と表記されたタブ)が選択された場合の表示例を示す。プロパティボックスのうちカラム選択欄3132より下側の領域には、タブ3132Eに対応するカラムの設定を受け付ける画面として、タブ3132Eの設定画面の上部領域3134tが表示される。ここには例えば、カラムの部品種別(コンポーネントのタイプ)を選択する種別設定欄3135が含まれる。タブ3132Eの設定画面は下側にさらに続いており、スクロールすることでさらに下側の方を表示することができる。図31(d)に、スクロールさせて、タブ3132Eの設定画面の下部領域3134dを表示させた場合の表示例を示す。下部領域3134dには、タブ3132Eに対応するカラム自体の削除を指示するためのカラム削除ボタン3136と、タブ3132Eの設定画面に設定した内容を適用してキャンバスに表示されているデータグリッドに反映する指示を行う適用ボタン3137とが含まれる。カラム選択欄3132はスクロールに伴って上側に移動し、プロパティボックス内で見えなくなっているが、上部領域3134tが表示されるようにスクロールを戻せば再度表示される。なお、S3011で「DataGrid」のタブが選択された場合は、プロパティボックスのうちカラム選択欄3132より下部の領域の表示内容を、データグリッドの全体に関する設定を行う設定画面に切り替える。
S3013では、開発者用端末100は、プロパティボックス内のカラム追加ボタン3133が押下されたか否かを判定する。カラム追加ボタン3133が押下された場合にはS3014に進み、そうでない場合にはS3015に進む。
S3014では、開発者用端末100は、カラムの追加処理を行う。カラムの追加処理では、まず、図31(e)に示すカラムの追加フォーム3138を表示し、開発者(ユーザー)から、追加するカラム(表の列)のIDとラベル(表示するカラムの名前)の設定を受け付ける。そして、ADD TO Valueボタンが押下されると、新しいカラムが追加され、カラム選択欄3132に新しいカラムに対応するタブが追加される。
図31(f)に、カラムが追加された場合のプロパティボックスの表示例を示す。図31(c)と比較して、カラム選択欄3132には、新しいカラムに対応するタブ3032F(「CompanyF」と表記されたタブ)が追加されている。追加した直後は追加したカラムが選択され、カラム選択欄3132より下側の領域には、追加したカラムに対応するタブ3032Fの設定画面の上部領域3139tが表示されている。このように、本実施形態では、データグリッド(表)へのカラムの追加は、データグリッドの設定画面であるプロパティボックスに対する操作によって行われる。
S3015では、開発者用端末100は、選択されているカラムについての設定操作があったか否かを判定する。具体的には、カラム選択欄3132より下側の領域に表示された設定画面への各種設定欄への入力操作があったか否かを判定する。設定欄への入力操作があった場合にはS3016へ進み、そうでない場合はS3017へ進む。
S3016では、開発者用端末100は、設定操作を受け付け、表示に反映する。例えば、種別設定欄3135に対する種別の設定を受け付ける。このように、データグリッドは、カラム毎にコンポーネント(部品)としての種別を選択できる。カラムに設定できるコンポーネントの種別の選択肢として、TextInput、NumberInput、ComboBox、Multi―Select、CheckBox、DataPicker、Link、Button、IconButtonが表示され、開発者はいずれかを選択して設定できる。また、その他の設定可能な項目(設定項目)の少なくとも一部が、選択されたコンポーネントの種別に応じて変わる。例えば、種別としてTextInputを選択した場合は、他の設定項目には以下が含まれる。ValueType、ID,Label(カラム名として表示される文字列)、Width(カラムの幅)、NumberFormat、DataFormat、Options、Footer、FooterText、Sorting、Visibility。また、「DataGrid」のタブに対応するデータグリッドの全体に関する設定画面で設定可能な設定項目には、以下が含まれる。ID(データグリッドのUI部品ID)、DataGrid全体のサイズ(幅、高さ)、デプロイ後のアプリにおいて編集可能とするか、デプロイ後のアプリにおいて当該データグリッドに行追加を指示する行追加ボタンを表示するか、データグリッドの削除ボタンを表示するか、データグリッドの更新ボタンを表示するか、等。
S3017では、開発者用端末100は、適用ボタン3131または適用ボタン3137が押下されたか否かを判定する。適用ボタン3131が押下された場合にはS3018に進み、そうでない場合にはS3019へ進む。
S3018では、開発者用端末100は、プロパティボックスにおいて設定された内容をメモリ102に保持している定義情報に記録するとともに、設定された内容を反映してUIエディタのキャンバスに表示された指定UI部品であるデータグリッドの表示形態を変更する。例えば、カラムが追加されていれば1列追加した表示形態でデータグリッドを表示し、カラムの幅が変更されていればキャンバス上のデータグリッドのカラムの幅を変更して表示する。
S3019では、開発者用端末100は、終了ボタン3140が押下されたか否かを判定する。終了ボタン3140が押下された場合は、プロパティボックスを非表示とし、図30の処理を終了する。終了ボタン3140が押下されていない場合はS3011に進む。
このように、データグリッド(表)に対するカラムの追加と、カラム毎の設定操作とを、より操作性良く行うことができる。特に、データグリッドに対してカラムの追加をする操作を、データグリッドのプロパティボックスに対する操作で行え、そのまま同じプロパティボックス内で追加したカラムに関する設定操作を行える。すなわち、カラムの追加と、追加したカラムの設定操作という一連の操作を、プロパティボックスへの操作という同様の操作感でスムーズに行うことができる。また、カラムを追加した後に、カラムのコンポーネントとして設定可能な選択肢の中から種別の設定を行うため、混乱なくカラムの追加と種別の設定とを行うことができる。
S3020では、開発者用端末100は、コンテキストメニューのサブメニューとして、カラム別のアクションの選択肢を表示する。図32(a)に、S3020での表示例を示す。図32(a)は、図31(a)の状態からアクション3122が押下された場合の表示例である。図31(a)と図32(a)とで同じ表示物には同じ符号を付す。サブメニュー3210がコンテキストメニュー3120のアクション3122のサブメニューとして表示される。サブメニュー3210には、選択肢3211~3217が含まれる。選択肢3211は、データグリッド3110の全体に対する操作に応じて実行するアクションのアクションボードを開くための選択肢である。選択肢3212~3217は、データグリッド3110の各カラムが操作された場合に実行するカラム毎のアクションのアクションボードを開くための選択肢である。選択肢3212~3217はそれぞれ、カラム3111~3116に対応する。このとき、指定UI部品のデータグリッドと異なるデータグリッドのカラムのアクションボードに対応する選択肢は表示しない。
S3021では、開発者用端末100は、データグリッド全体のアクションの選択肢(選択肢3211)またはカラム別のアクションの選択肢(3212~3217)のうちいずれかが選択されたか否を判定する。いずれかのアクションの選択肢が選択された場合にはS3022に進み、そうでない場合にはS3021で選択を待つ。
S3022では、開発者用端末100は、選択されたアクションの選択肢に対応するアクションボードを表示する。
図32(b)に、データグリッド全体のアクションの選択肢(選択肢3211)に対応するアクションボードの表示例を示す。全体またはカラムの選択領域3220で「DATA GRID」が選択されており、アクションボード3211aがデータグリッド全体のアクションを入力する領域であることを示している。アクションボード3211aで設定された内容を実行するトリガーは予め定められており、構築済みアプリにおいて指定UI部品であるデータグリッドの領域のカラム外に表示される全体に関するボタンの押下がトリガーとなる。言い換えれば、このトリガーは、指定UI部品であるデータグリッド(表)に関するトリガーであって、当該データグリッドのカラムにかかわらないトリガーである。全体に関するボタンとは、前述したプロパディボックスの「DataGrid」のタブに対応する設定画面への設定で、表示すると設定したことにより表示されるボタンである。例えば前述したデータグリッドの削除ボタン、データグリッドの更新ボタンなどである。従って開発者は、アクションを実行するトリガーが何かというのは設定する必要がない(JavaScriptで記述する必要はない)。このアクションボード3211aに例えば、特定のカラムの全ての行の合計を算出して他のUI部品内に表示するというアクション、データグリッドに表示された内容をデータベースに保存するというアクション、他のUI画面に画面遷移するというアクション等をJavaScriptで記述することで設定可能である。
図32(c)に、データグリッドの特定のカラムのアクションの選択肢(選択肢3212)に対応するアクションボードの表示例を示す。選択領域3220で「MONTH」が選択されており、アクションボード3212aがラベルまたはカラムIDが「MONTH」のカラム(カラム3111)のアクションを入力する領域であることを示している。カラムのアクションボード3212aで設定された内容を実行するトリガーは予め定められており、構築済みアプリにおいて、指定UI部品のうち、対応するカラムのいずれかの行のセルの値が変更された、あるいは、対応するカラムのいずれかの行のセルに表示されたボタンが押下されたことがトリガーとなる。従って開発者は、アクションを実行するトリガーが何かというのは設定する必要がない(JavaScriptで記述する必要はない)。このアクションボード3212aに例えば、アクションボード3212aに対応するカラムの変更のあった行の値と、同じ行の他の第1のカラムの値との合計を算出し、同じ行の他の第2のカラムに表示するといったアクションを設定可能である。このアクションの例は、表の1列目の数値に変更があった場合に、同じ行の3列目に、変更後の1列目の数値と2列目の数値の合計を表示する、といったアクションである。すなわち、選択した選択肢3212に対応するカラムとは異なる、指定UI部品であるデータグリッドのうちの他のカラムに影響を与えるアクションの設定を受け付け可能である。
なお、選択領域3220で他のカラムを選択することで、アクションボードを開いた後にも、他のカラムのアクションボードに切り替えて表示することが可能である。
S3023では、開発者用端末100は、表示されたアクションボードに対するアクションの入力操作を受け付ける。この処理は、前述した図8のS802~S823の処理と同様である。
S3024では、開発者用端末100は、アクションボードを閉じる操作(アクションボード処理を終了する操作)があったか否かを判定する。アクションボードを閉じる操作が無い場合にはS3023に進んで処理を繰り返す。アクションボードを閉じる操作があった場合にはアクションボードを非表示とし、選択中UI画面のキャンバスの表示に切り替え、UIエディタ処理へ戻る。
このように、データグリッド(表)に含まれる各カラムに対して、より操作性良くアクションの設定を行うことができる。特に、サブメニュー3210に示したように、データグリッド(表)に含まれる全てのカラムのアクションボードに対応する選択肢を一覧表示するため、開発者は、カラム毎にアクションを設定可能であることを認識することができ、カラムに対するアクションの設定漏れなどが発生する可能性を低減することができる。また、指定UI部品であるデータグリッドのコンテキストメニューのサブメニューとして表示されるため、指定UI部品であるデータグリッドとの関係を明確に把握できる。すなわち、アクションボードで設定するアクションがどのデータグリッドのどのカラムに関するものであるかというのを混乱なく把握しながら設計作業を行うことができる。
<アクション実行関連処理>
図33(a)に、定義情報の記録先となる開発環境300が実行する保存処理(記録制御処理)のフローチャートを示す。この処理は、前述の図4のS422において、開発者用端末100から送信された、定義情報を受信したことに連動して実行する処理である。
また、図34に、開発者用端末100、開発環境300、実行環境400、アプリユーザー用端末200、201に記録される情報の遷移を図示する。図34は、図33(a)~図33(c)のフローチャートの処理による情報の遷移の様子を模式的に表した図である。
図33(a)のS3301では、開発環境300は、開発者用端末100から選択中アプリの定義情報(UI定義情報)を受信したか否かを判定する。ここで受信する定義情報は、前述の図4のS422において、開発者用端末100から送信されたものである。UI定義を受信した場合にはS3302に進み、そうでない場合にはS3301で待機する。
図34において、開発者用端末100のメモリ102に記録されているUI定義情報3401が、S3301で受信する定義情報である。本実施形態では、UI定義情報は「uiDef.json」というファイル名の、JSONフォーマット で記述された、 テキスト形式のファイルであるものする。JsonはJavaScript Object Notificationの略であり、JavaScriptで値を取り扱うためのドキュメント規格であり、データ記述言語である。UI定義情報3401には、イニシャルUI等のアプリに関する各種設定内容や、UI画面毎のUIコンポーネント(UI部品)の情報(配置位置、サイズ、色など)を定義する情報が含まれる。また、UI定義情報3401には、アクション記述部分3402が含まれている。このアクション記述部分3402は、各UI部品やキャンバスのアクションボードや関数の設定画面(創作関数の設定画面を含む)に入力された文字列である。アクション記述部分3402には、JavaScriptで記述されたアクションと、JavaScriptを入力することなく関数の設定画面で設定された内容を記述したJsonフォーマットの関数定義などが含まれる。このUI定義情報3401が開発者用端末100から開発環境300に送信され(アップロードされ)、S3301で開発環境300によって受信される。
S3302では、開発環境300は、UI定義情報をストレージ320のうち、ログイン開発者用の領域に保存する。この結果、図34に示す通り、開発環境300にUI定義情報3411が記録される。この保存の直後においては、開発環境300に記録されたUI定義情報3411は、開発者用端末100に記録されたUI定義情報3401と同じ情報である。
S3303では、開発環境300は、S3302で保存したUI定義情報からアクション情報を抽出する。すなわち、開発環境300は、図34のUI定義情報3411からアクション記述部分3412を抽出する。
S3304では、開発環境300は、S3303で抽出したアクション記述部分3412から、実行環境用プログラムを生成して、ストレージ320のうちログイン開発者用の領域に保存する。すなわち、図34のUI定義情報3411から抽出したアクション記述部分3412に基づいて、実行環境用プログラム3413を生成して開発環境内に保存する。実行環境用プログラム3413はJavaScriptで記述されたテキストデータである。実行環境用プログラム3413は、アクション記述部分3412から取得したアクションボードに入力されていた文字列に加えて、実行環境の実行エンジンで実行するために必要な補充部分を追加したプログラムである。
図33(a)で説明した保存処理によって開発環境300に保存されたUI定義情報3411と実行環境用プログラム3413が、デプロイ処理によって実行環境400にデプロイ(配置、保存、記録、構築)される。この処理は、前述した図24のS2423またはS2424で行われる。これによって、図34に図示した通り、実行環境400にUI定義情報3421と実行環境用プログラム3423が記録される。実行環境400にUI定義情報3421と実行環境用プログラム3423はそれぞれ、UI定義情報3411と実行環境用プログラム3413と同じ情報である。この状態が、アプリ生成された状態である。
図33(b)に、実行環境400におけるアプリ実行処理のフローチャートを示す。この処理は、実行環境400の実行エンジンが実行する処理であり、アプリユーザー用端末200または201から、デプロイ済み(構築済み、生成済み)のアプリケーションに対するアクセスがあった場合に実行する処理である。
図33(c)に、アプリユーザー用端末200または201おけるアプリ実行処理のフローチャートを示す。この処理は、アプリユーザー用端末200または201のCPU101が実行する処理であり、アプリユーザー用端末200または201のブラウザソフトで、実行環境400にデプロイ済み(構築済み、生成済み)のアプリケーションに対してアクセスした場合に実行する処理である。また、図33(b)の実行環境400におけるアプリ実行処理と、図33(c)のアプリユーザー用端末200または201におけるアプリ実行処理とは、連動して行われる処理である。以下、アプリユーザー用端末200または201による処理について、代表してアプリユーザー用端末200が実行するものとして説明する(アプリユーザー用端末201に関する説明は同様であるため省略する)。
図33(b)のS3311では、実行環境400は、アプリユーザー用端末200から送信されたUI定義情報の取得要求を受信したか否かを判定する。ここで受信するUI定義情報の取得要求は、後述する図33(c)のS3333でアプリユーザー用端末200から送信されるものである。UI定義情報の取得要求を受信した場合はS3312に進み、そうでない場合はS3311で待機する。
S3312では、実行環境400は、UI定義情報をアプリユーザー用端末200に送信する。これによって、図34に図示した通り、実行環境400に記録されたUI定義情報3421がアプリユーザー用端末200にダウンロードされ、UI定義情報3431として記録される。UI定義情報3421とUI定義情報3431とは同じ情報である。
S3313では、実行環境400は、アプリユーザー用端末200からアクション要求を受信したか否かを判定する。アクション要求とは、アクションボードに入力されたアクションの内容を実行する要求である。ここで受信するアクション要求は、後述する図33(c)のS3345でアプリユーザー用端末200から送信されるものである。アクション要求を受信した場合はS3314に進み、そうでない場合にはS3320に進む。
S3314では、実行環境400は、アプリユーザー用端末200から入力項目の値を受信したか否かを判定する。入力項目の値とは、アプリの画面に表示されるUI部品のうち、入力項目に分類されるUI部品に対して、アプリユーザー用端末200においてユーザーによって入力された値である。例えば、Textfieldに入力されたテキストである。本実施形態では、S3314の判定は、S3313で受信したアクション要求の中に入力項目の値が含まれていたか否かの判定であるものとする。入力項目の値を受信した場合(アクション要求に入力項目の値が含まれていた場合)にはS3315に進み、そうでない場合にはS3316へ進む。
S3315では、実行環境400は、受信した入力項目の値を実行エンジンに含まれるメモリに一時記憶する。
S3316では、実行環境400は、実行環境用プログラム3424を実行することにより、要求されたアクションを実行する。入力項目の値を受信していた場合には、入力項目の値も用いてアクションを実行する。例えば、入力項目の値を引数として実行環境用プログラム3424のうち、要求されたアクションの部分を実行する。
S3317では、実行環境400は、S3316でのアクションの実行の結果、アプリユーザー用端末200に表示されるアプリの画面に表示すべき値である、出力項目の値があるか否かを判定する。例えば、アクションが“四則演算を行う”といったアクションであった場合には、演算の解が出力項目の値として得られる。また、例えばアクションが“画面遷移する”や、“データベースに記録する”といったアクションであった場合には、アクションの結果としての出力項目の値は無いこともある。出力項目の値がある場合にはS3318に進み、そうでない場合にはS3319へ進む。
S3318では、実行環境400は、S3316で実行したアクションの結果情報として、出力項目の値を含むアクション結果情報を生成する。
S3319では、実行環境400は、S3316で実行したアクションの結果情報をアプリユーザー用端末200に送信する。S3318で出力項目の値を含むアクション結果情報が生成されていた場合には、出力項目の値もアプリユーザー用端末200に送信されることになる。そして、後述する図33(c)のS3348で、アプリユーザー用端末200の画面に出力項目の値が表示される。アクションの結果情報には、画面遷移の指示が含まれることもある。画面遷移の指示が含まれていた場合には、後述する図33(c)のS3347の処理によって、アプリユーザー用端末200のディスプレイ105に表示されるアプリの画面において画面遷移が発生する。
S3320では、実行環境400は、処理を終了するか否かを判定する。実行環境400は、処理を終了すると判定した場合(S3320でYes)、処理を終了する。実行環境400は、処理を終了しないと判定した場合(S3320でNo)、処理はS3313に戻る。例えば、S3350で後述するアプリを終了させるイベントが発生した場合に処理を終了すると判定する。
図33(c)のS3331では、アプリユーザー用端末200は(アプリユーザー用端末201を含むが、以下ではアプリユーザー用端末200を例として説明する)、インターネットブラウザソフトを用いて、実行環境400にデプロイ済み(構築済み、生成済み)のアプリケーションに対してアクセスを行う。より具体的には、デプロイ済みのアプリのURL(実行環境にアクセスするURL)を指定してアクセスする操作(例えばアプリのURLのリンクをクリックしたり、アドレスバーにアプリのURLを入力してEnterキーを押下する操作)があったことに応じて、アプリのURLにアクセス(接続)する。
S3332では、アプリユーザー用端末200は、クライアント用プログラムを受信したか否かを判定する。実行環境400は、アプリユーザー用端末200からのアクセスを検知すると、実行環境の配信エンジン(配信エンジン415、455、465、475などのうちアクセスされた実行環境のもの)が、ストレージに記録されたクライアント用プログラム(クライアント用プログラム422、456c、466c、476cなどのうち、アクセスされた実行環境のもの)をアプリユーザー用端末200に送信する。S3332では、そのクライアント用プログラムを受信したか否かを判定する。クライアント用プログラムを受信した場合にはS3333に進み、そうでない場合にはS3332でライアント用プログラムの受信を待つ。
S3333では、アプリユーザー用端末200は、実行環境400にUI定義情報の取得要求を送信する。S3332で受信したクライアント用プログラムに、実行環境にアクセスしたらまずはUI定義情報の取得要求を出す旨が定義されている。S3333はそれに従った処理である。ここで送信したUI定義情報取得要求が、前述した図33(b)のS3311において実行環境400に受信される。
S3334では、アプリユーザー用端末200は、実行環境400からUI定義情報を受信したか否かを判定する。ここで受信されるUI定義情報は前述した図33(b)のS3312で実行環境400から送信されるものである。UI定義情報を受信した場合は、UI定義情報をメモリ102に記録してS3335に進み、そうでない場合にはS3334でUI定義情報の受信を待つ。UI定義情報はメモリ102(ワークメモリ)に一時的な情報として記録され、アプリを終了したことに応じて(アプリのURLへの接続終了に応じて)、自動的に消去するものとする。また、アプリユーザー用端末200は、メモリ102に記録したUI定義情報に基づいてアプリの画面をディスプレイ105に表示する。
S3335では、アプリユーザー用端末200は、アクションのトリガーが発生したか否かを判定する。具体的には、アプリの画面において、画面遷移を指示する操作(遷移先のキャンバスのアクションの起動トリガー)、アプリの画面に表示されたUI部品に対する操作(クリック等によるUI部品のアクションのトリガー)があったか否かを判定する。アクションのトリガーがあった場合にはS3336へ進み、そうでない場合にはS3350へ進む。
S3336では、アプリユーザー用端末200は、メモリ102に記録されたUI定義情報(図34におけるUI定義情報3431)のうち、S3335で検出したトリガーに応じて実行すべきアクションに関する記述部分を抽出する。この記述部分は、JavaScript(プログラミング言語)で記載されたテキスト(文字列)の情報である。
S3337では、アプリユーザー用端末200は、S3336で抽出した記述部分から、半角の「$ui」という文字列を先頭から検索する。
S3338では、アプリユーザー用端末200は、S3337の検索の結果、「$ui」という文字列があったか否かを判定する。「$ui」があった場合にはS3339に進み、そうでない場合にはS3343に進む。
S3339には、アプリユーザー用端末200は、S3338で見つかった「$ui」の文字列が、当該文字を含む一文の中で左辺にあるか否かを判定する。「一文」(1つの文)は、プログラミング言語での文字列において行終端記号(例えばセミコロン「;」)や、閉じ括弧「}」で区切られるまでの文字列である。すなわち、2つの文は行終端記号または閉じ括弧(′}′)で区切られる。検索で見つかった「$ui」が、一文の中で、「=」(等号、イコール)よりも左側に位置していれば、左辺にあると判定される。「$ui」が左辺にある場合にはS3340に進み、そうでない場合にはS3341に進む。
S3340では、アプリユーザー用端末200は、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)に基づく情報を、メモリ102に生成した項目定義リスト(図34の項目定義リスト3433)に出力項目として記録する。具体的には、「$ui」で始まる「.」(ピリオド)で区切られた構造の要素文字列($ui.UI部品ID.対象となる情報の種別)からUI部品ID(項目コード、コンポーネント識別子)を取得し、そのUI部品が出力項目である旨を記録する。例えば、アクションAに関するトリガーが発生し、アクションAに関する記述部分から「$ui」が見つかり、それが左辺にあり、UI部品IDが「UI部品ID3」であった場合には、図34の項目定義リスト3433のように、出力項目にUI部品ID3がある旨が記録される。なお、項目定義リスト3433はワークメモリであるメモリ102に一時的に保持する情報であって、アクションの結果を受信して出力項目に反映するか(後述するS3348でNoまたはS3349の処理を終了)、アプリを終了したこと(S3350でYes)に応じて、自動的に消去するものとする。
S3341では、アプリユーザー用端末200は、S3338で見つかった「$ui」の文字列が、当該文字を含む一文の中で左辺以外にあるか否かを判定する。左辺以外にある場合とは、右辺にある場合(「=」より右側にある)か、「=」を含まない分にある場合である。左辺以外にある場合にはS3342へ進み、そうでない場合にはS3337へ進む。なお、S3339でNoと判定された場合は、「$ui」の文字列が、当該文字を含む一文の中で左辺以外にあることと同義であるため、S3341の判定をせずにS3342へ進むものとしてもよい。
S3342では、アプリユーザー用端末200は、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)に基づく情報を、メモリ102に生成した項目定義リスト(図34の項目定義リスト3433)に入力項目として記録する。具体的には、「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)からUI部品ID(項目コード、コンポーネント識別子)を取得し、そのUI部品が入力項目である旨を記録する。例えば、アクションAに関するトリガーが発生し、アクションAに関する記述部分から「$ui」が見つかり、それが右にあり、UI部品IDが「UI部品ID1」であった場合には、図34の項目定義リスト3433のように、入力項目にUI部品ID1がある旨が記録される。また、例えば、アクションAに関するトリガーが発生し、アクションAに関する記述部分から「$ui」が見つかり、それが「=」のない文にあり、UI部品IDが「UI部品ID2」であった場合には、図34の項目定義リスト3433のように、入力項目にUI部品ID2がある旨が記録される。
S3342の処理を終えると、S3337に進み、S3336で抽出した記述部分の続きの部分において、さらに「$ui」の文字列を検索し、S3338で「$ui」が無いと判定されるまでS3339~S3342の処理を繰り返す。すなわち、S3336で抽出した記述部分に含まれる全ての$uiの文字列について、S3339~S3342の処理を行い、入力項目であるか出力項目であるかを項目定義リスト3433に記録する。
S3343では、アプリユーザー用端末200は、S3335でアクションのトリガーがあったと判定した時点で、項目定義リスト3433に記録された入力項目の対象となる情報に、値があるかどうかを判定する。例えば、S3336で抽出した記述部分に「$ui.UI部品ID1.value」と記載されていた場合、UI部品ID1のUI部品内の「value」という種別の情報に値があるかどうかを判定する。UI部品ID1のUI部品がTextFieldであった場合には、valueは、そのTextFieldに入力されたテキスト(文字列)である。すなわち、アプリの画面に表示されたTextFieldであるUI部品ID1に対して、アプリのユーザーがキーボードでテキストが入力されているかを判定し、テキストが入力されていればYesと判定し、空欄であればNoと判定する。この判定を、項目定義リスト3433に記録されたすべての入力項目について行う。入力項目の対象となる情報に、値がある場合にはS3344へ進み、そうでない場合にはS3345へ進む。
S3344では、アプリユーザー用端末200は、入力項目の値を含む、S3335で検知したトリガーに対応するアクションの実行を要求するアクション要求を生成する。例えば、入力項目の値として、アプリユーザー用端末200のディスプレイ105に表示されるアプリの画面に表示されたTextFieldであるUI部品ID1に対して、アプリのユーザーがキーボードで入力したテキストの情報を含むアクション要求を生成する。
S3345では、アプリユーザー用端末200は、S3335で検知したトリガーに対応するアクションの実行を要求するアクション要求を実行環境400に送信する。S3344で入力項目の値ありアクションが生成されていた場合には、入力項目の値も実行環境400に送信される。例えば、入力項目の値として、アプリユーザー用端末200のディスプレイ105に表示されるアプリの画面に表示されたTextFieldであるUI部品ID1に対して、アプリのユーザーがキーボードで入力したテキストの情報が実行環境400に送信される。ここで送信したアクション要求が、実行環境400で実行される前述した図33(b)のS3313で実行環境400に受信され、S3314~S3319で説明した通り、S3335で検知したトリガーに応じたアクションが実行環境400で実行される。
S3346では、アプリユーザー用端末200は、S3345で送信したアクション要求に対応するアクションの結果を実行環境400から受信したか否かを判定する。アクションの結果を受信した場合にはS3347へ進み、そうでない場合にはS3346でアクションの結果の受信を待つ。
S3347では、アプリユーザー用端末200は、S3346で受信したアクションの結果を反映してディスプレイ105に表示されたアプリの画面を更新する。この時もメモリ102に保持したUI定義情報に基づいて表示を行う。例えば、アクションの結果に画面遷移の指示があった場合には、画面遷移を実行する。
S3348では、アプリユーザー用端末200は、S3346で受信したアクションの結果に、出力項目の値が含まれていたか否を判定する。出力項目の値が含まれていた場合にはS3349に進み、そうでない場合にはS3350へ進む。
S3349では、アプリユーザー用端末200は、S3346で受信したアクションの結果に含まれる出力項目の値を、メモリ102に保持した項目定義リスト3433に記録した出力項目の情報に基づいて、ディスプレイ105に表示される出力項目に表示する。これによって例えば、対象となる情報の種別がvalueであれば出力項目のUI部品に出力項目の値となるテキストや数値が表示されたり、対象となる情報の種別がcolorであれば出力項目のUI部品の色が出力項目の値が示す色に変更されたりする。
S3350では、アプリユーザー用端末200は、アプリを終了させるイベントがあったか否かを判定する。アプリを終了させるイベントには、例えば、アプリのURLが示すアクセス先への接続の切断(インターネットブラウザを閉じる、アプリユーザー用端末200の電源を切る、関係のない他のURLへの接続に変更する、など)がある。アプリを終了させるイベントが無い場合にはS3335に進み、アプリを終了させるイベントがあった場合には、アプリの画面の非表示として図33(c)の処理を終了する。
図10(d)に示したアクションボード910に入力されたプログラミング言語での文字列を例にとって、S3338~S3342で説明した「$ui」を含む文字列について入力項目と出力項目のいずれであるかを判別して仕分ける処理について、より具体的に説明する。
2行目には「const userid = $ui.text_field_a.value;」と記載されている。この文において、「$ui」が右辺にあるため、S3342の処理で、項目定義リストに「text_field_a」が入力項目として記録される。すなわち「userid」という変数の値に、アプリの画面において「text_field_a」にユーザーが入力した値が取得されて設定される。
4行目の文において、「$ui」を含む「$ui.text_area_a.value」との文字列が左辺にあるため、S3340の処理で、項目定義リストに「text_area_a」が出力項目として記録される。すなわち「text_area_a」というUI部品に、「=」の右辺が示す値(アクションの結果得られる出力値)が表示されることとなる。この文は、「text_area_a」が出力項目であるという定義に加えて、その出力項目に「=」の右辺が示す値(アクションの結果得られる出力値)を出力するという処理(ロジック)を含んでいる。このように、ロジック(入力項目と出力項目との少なくとも一方の定義とは異なる処理)を含む文の中において、入力項目と出力項目の定義も行えるというのが本実施形態の特徴的な部分の1つである。6行目も同様に、ロジック部分であるとともに、「$ui.text_area_a.value」が左辺にあるため出力項目として扱われる。
また、以下に、「=」の無い文に「$ui」があるアクションの文字列の例を示す
(各行先頭の数字は行数を示す補助文字であってプログラミング言語の本文ではない)
1 SQLSave({
2 PREF_CODE: $ui.PREF_CODE.value,
3 PREF_NAME: $ui.PREF_NAME.value
4 });
5 // 画面遷移
6 $fn.nextUI(′List_ip_demo′);
上記のプログラミング言語での文字列は、アプリの画面の入力値(`$ui.PREF_CODE.value` , $ui.PREF_NAME.value)をSQLSave関数のパラメータに使用してデータベースへ登録するアクションである。この場合、SQLSave関数のパラメータとして使用される$ui.{部品ID}.{対象となる情報の種別}は(=の左辺ではないため)入力項目を示すものとして識別される。
また、「$ui」を用いた所定の構造の要素文字列において、対象となる情報の種別は、value以外でもよく、例えば色でも良い。例えば、「$ui.UI部品ID.color = ″#008000″;」と記述することで、UI部品の色を変更することができる。
本実施形態では、アクションボードに入力するアクションの記述において、「$ui」という特定の識別子が付された要素文字列の、文字列中の位置(より具体的には、1つの文の中における位置)に応じて、その要素文字列が示すUI部品を入力項目して扱うか、出力項目として扱うかを、書き表せる(定義できる)ようにしている。従来であれば、入力項目とするか出力項目とするかはプログラミング言語でアクションの内容を入力する領域とは別の設定画面において行っていた。あるいは従来であれば、プログラミング言語でアクションの内容を入力する領域に記述するにしても、処理自体を示すロジック部分の文とは別の文で、いったん、入力項目して扱うか、出力項目として扱うかという変数を用いた宣言を行う必要があった。これに対し、本実施形態では、入力項目と出力項目の定義を、プログラミング言語でアクションロジックを記述した文字列の任意の記述箇所で定義することができる。そのため、ロジック記述部分の近辺で、そのロジックで用いる入力項目と出力項目を定義することができ、ロジックを記述する際に、そのロジックで用いる入力項目、出力項目を容易に設定することができる。また、本実施形態では、入力項目と出力項目に関数設定画面とアクションロジックの記述部分の間における値の受け渡しを、一度変数として定義する必要がない。そのため開発者が煩雑な変数管理をする必要が低減し、変数管理が容易となる。従ってアクションを記述する際のミスを生む要因が減り、ミスを低減することができる。このように、本実施形態では、プログラミング言語で入力されるロジックに用いる入力項目または/及び出力項目をより容易に設定することが可能である。
また、「$ui」という特定の識別子が付された要素文字列の位置によって入力項目/出力項目のいずれとするかを書き表す手法は一般的ではないため、通常のJavaScriptのプログラミング言語に基づくプログラム実行では、入力項目/出力項目のいずれとするかが上手く解釈されず、意図通り動作しない。そこで本実施形態では、S3338~S3342で説明した「$ui」を含む文字列について入力項目と出力項目のいずれであるかを特定して仕分ける処理を行うことで、正しく動作する仕組みとしている。
本実施形態では、特定の識別子を半角の「$ui」とした例を説明したが、これに限るものではない。プログラミング言語において既存の他の識別子と混同されない文字列であれば他の文字列を識別子としてもよく、例えば、半角の「_inputoutput」としても良い。半角の「$」はユニコードのドルである。半角の「_」はユニコードのアンダーバーである。
また、本実施形態では、図33(a)のS3304で説明した通り、開発環境300が、UI定義情報に基づいて実行環境400で実行すべきプログラムである実行環境用プログラム3414を生成し、それを実行環境400にデプロイする。アプリの実行時には、アプリユーザー用端末200はUI定義情報3431に基づいて処理を実行し、実行環境400は実行環境用プログラム3423に基づいて処理を実行する。また、図33(c)のS3338~S3342で説明した通り、アプリユーザー用端末200が、UI定義情報に基づいてアプリユーザー用端末200で実行する処理で必要な項目定義リスト3433を生成する。このようにすることで、アプリの開発者は、構築済みアプリが実行される際に、実行環境400で実行する処理に必要となる情報とアプリユーザー用端末200で実行する処理に必要となる情報とを、開発者用端末100で開発環境300にアクセスしてアプリを開発する際には特段意識して区別する必要が無い。従って、開発するアプリケーションの実行の際に実行環境と端末装置とでそれぞれ用いる情報を開発者が明確に分別するように管理して開発する手間を低減し、ソフトウェア開発をより容易に行える。
なお、本実施形態では、開発環境300における保存処理の際に実行環境用プログラム3414を生成する例を説明したが、開発環境300は実行環境用プログラム3414を生成せず、実行環境400にUI定義情報3421を記録した後に、実行環境400がUI定義情報3421に基づいて実行環境用プログラム3423を生成するようにしてもよい。
<アクション実行関連処理の変形例>
図35(a)に、定義情報の記録先となる開発環境300が実行する保存処理(記録制御処理)のフローチャートの変形例を示す。この処理は、前述の図4のS422において、開発者用端末100から送信された、定義情報を受信したことに連動して実行する処理である。
また、図36に、開発者用端末100、開発環境300、実行環境400、アプリユーザー用端末200、201に記録される情報の遷移の変形例を図示する。図36は、図35(a)~図35(c)のフローチャートの処理による情報の遷移の様子を模式的に表した図である。図36において、図34と同じ情報には同じ符号を付す。
図36では、アプリユーザー用端末200においてUI定義情報に基づいて項目定義リスト3433を生成する処理を行う代わりに、開発環境300でUI定義情報に基づいてクライアント用UI定義情報3615を生成する。そして、このクライアント用UI定義情報3615を実行環境400にデプロイし(クライアント用UI定義情報3625として実行環境400に記録される)、さらに実行環境400からアプリユーザー用端末200に送信する(クライアント用UI定義情報3635としてアプリユーザー用端末200に記録される)。アクションの実行の際には、アプリユーザー用端末200は、クライアント用UI定義情報3635に基づいて処理を行う。
図36では、図34と異なり、アプリユーザー用端末200にUI定義情報を送信しない(アプリユーザー用端末200に一時的にも記録させない)構成としている。このようにすることで、開発したアプリの詳細な定義がアプリユーザー用端末200を介して漏洩することを防止し、開発されたアプリの構成についての秘匿性を高めている。従って例えば、開発したアプリの少なくとも一部(例えばアクションボードに記述したJavaScriptのコード)を模倣したアプリなどが第3者によって作成される可能性を低減することができる。また、アプリユーザー用端末200において、アクションのトリガーが発生するたびにUI定義情報を解析して項目定義リスト3433を生成する処理(図33(c)のS3338~S3342の処理)を行わなくてよい。その分、アプリユーザー用端末200における処理負荷を低減し、快適なレスポンス(応答速度)のアプリ動作を実現することができる。
図35(a)のS3501~S3504は、前述した図33(a)のS3301~3304と同じ処理であるため説明を省略する。図35(a)では図33(a)の処理に加えて、S3505以降の処理を行う。
S3505では、開発環境300は、クライアント用UI定義情報3615を生成する。クライアント用UI定義情報3615は例えば「uiDef2.json」というファイル名のJson形式のファイルであるものとする。クライアント用UI定義情報3615には、UI定義情報3411から取得した情報として、イニシャルUI等のアプリに関する各設定情報、UI画面毎のUI部品(コンポーネント)の情報(UI部品IDやプロパティで設定された内容、UI部品の配置位置やサイズなど)、キャンバスのアクショションの識別子、UI部品のアクションの識別子などが含まれる。また、クライアント用UI定義情報3615には、アクション毎の入出力項目定義(入力項目、出力項目にそれぞれどの部品があるかという定義)も記録される。S3505の時点ではアクション毎の入出力項目定義の中身は未挿入である(後述するS3506~3512の処理で挿入される)。また、アクションボードに記載されたJavaScript(プログラミング言語)で記述された文字列(アクションのソースコード)自体は記録されないものとする。すなわち、生成されるクライアント用UI定義情報3615は、アクションの識別子やアクション毎の入出力項目定義の情報を含むが、アクションの動作内容を示す情報は含まない。
S3506では、開発環境300は、UI定義情報3411のうち、アクション記述部分3412を抽出する。この処理では、特定のアクションに関する記述だけではなく、全てのアクションに関する記述部分を抽出する。
S3507では、開発環境300は、S3506で抽出したアクション記述部分について、「$UI」の文字列を先頭から検索する。
S3508では、開発環境300は、S3337の検索の結果、「$ui」という文字列があったか否かを判定する。「$ui」があった場合にはS3509に進み、そうでない場合には処理を終了する。S3508でNoとなるのは、全ての「$ui」の検索が終わったか、アクション記述部分に全く「$ui」が無かった場合である。
S3509では、開発環境300は、図33(c)のS3339と同様、S3508で見つかった「$ui」の文字列が、当該文字を含む一文の中で左辺にあるか否かを判定する。「$ui」が左辺にある場合にはS3510に進み、そうでない場合にはS3511に進む。
S3510では、開発環境300は、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)に基づく情報を、S3505で生成したクライアント用UI定義情報3615に出力項目として記録する。より詳しくは、クライアント用UI定義情報3615のうち、出力項目を定義する配列に、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)からUI部品IDを取得して、アクション毎の入出力項目定義のうち、“uiItemsOut”の配列に記録する。例えばUI部品IDが「RESULT」であることを示す「$ui」が左辺に見つかった場合、図36に図示したように記録される。
S3511では、開発環境300は、図33(c)のS3341と同様、S3508で見つかった「$ui」の文字列が、当該文字を含む一文の中で左辺以外にあるか否かを判定する。左辺以外にある場合にはS3512へ進み、そうでない場合にはS3507へ進む。なお、S3509でNoと判定された場合は、「$ui」の文字列が、当該文字を含む一文の中で左辺以外にあることと同義であるため、S3511の判定をせずにS3512へ進むものとしてもよい。
S3512では、開発環境300は、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)に基づく情報を、S3505で生成したクライアント用UI定義情報3615に入力項目として記録する。より詳しくは、クライアント用UI定義情報3615のうち、入力項目を定義する配列に、S3338で見つかった「$ui」で始まる所定の構造の要素文字列($ui.UI部品ID.対象となる情報の種別)からUI部品IDを取得して、アクション毎の入出力項目定義のうち、“uiItemsIn”の配列に記録する。例えばUI部品IDが「INPUT_1」であることを示す「$ui」が右辺に見つかった場合、図36に図示したように記録される。また、例えばUI部品IDが「INPUT_2」であることを示す「$ui」が「=」のない文に見つかった場合、図36に図示したように記録される。
S3512の処理を終えると、S3507に進み、S3506で抽出した記述部分の続きの部分において、さらに「$ui」の文字列を検索し、S3508で「$ui」が無いと判定されるまでS3507~S3512の処理を繰り返す。すなわち、S3506で抽出した記述部分に含まれる全ての$uiの文字列について、S3509~S3512の処理を行い、入力項目であるか出力項目であるかをクライアント用UI定義情報3615に記録する。
図35(b)に、実行環境400におけるアプリ実行処理の変形例のフローチャートを示す。この処理は、実行環境400の実行エンジンが実行する処理であり、アプリユーザー用端末200または201から、デプロイ済み(構築済み、生成済み)のアプリケーションに対するアクセスがあった場合に実行する処理である。
図33(c)に、アプリユーザー用端末200または201おけるアプリ実行処理の変形例のフローチャートを示す。この処理は、アプリユーザー用端末200または201のCPU101が実行する処理であり、アプリユーザー用端末200または201のブラウザソフトで、実行環境400にデプロイ済み(構築済み、生成済み)のアプリケーションに対してアクセスした場合に実行する処理である。また、図35(b)の実行環境400におけるアプリ実行処理と、図35(c)のアプリユーザー用端末200または201におけるアプリ実行処理とは、連動して行われる処理である。以下、アプリユーザー用端末200または201による処理について、代表してアプリユーザー用端末200が実行するものとして説明する(アプリユーザー用端末201に関する説明は同様であるため省略する)。
図35(b)のS3521では、実行環境400は、アプリユーザー用端末200から送信されたUI定義情報の取得要求を受信したか否かを判定する。ここで受信するUI定義情報の取得要求は、図35(c)のS3543でアプリユーザー用端末200から送信されるものである。UI定義情報の取得要求を受信した場合はS3522に進み、そうでない場合はS3521で待機する。
S3522では、実行環境400は、UI定義情報3411をアプリユーザー用端末200に送信することなく、クライアント用UI定義情報3615を実行環境400に送信する。これによって、図36に図示した通り、実行環境400に記録されたクライアント用UI定義情報3625がアプリユーザー用端末200にダウンロードされ、クライアント用UI定義情報3635として記録される。クライアント用UI定義情報3615とクライアント用UI定義情報3635とは同じ情報である。
S3523~S3530の処理は、前述した図33(b)のS3313~S3320とそれぞれ同様の処理であるため説明を省略する。
図35(c)のS3541~S3543は、前述した図33(c)のS3331~S3333とそれぞれ同様の処理であるため説明を省略する。ただし、S3543では、クライアント用UI定義情報の取得要求を送信する。
S3544は、アプリユーザー用端末200は、実行環境400からクライアント用UI定義情報を受信したか否かを判定する。ここで受信されるクライアント用UI定義情報は前述した図35(b)のS3522で実行環境400から送信されるものである。クライアント用UI定義情報を受信した場合は、クライアント用UI定義情報をメモリ102に記録してS3545に進み、そうでない場合にはS3544でクライアント用UI定義情報の受信を待つ。クライアント用UI定義情報はメモリ102(ワークメモリ)に一時的な情報として記録され、アプリを終了したことに応じて(アプリのURLへの接続終了に応じて)、自動的に消去するものとする。また、アプリユーザー用端末200は、メモリ102に記録したクライアント用UI定義情報3635に基づいてアプリの画面をディスプレイ105に表示する。
S3545では、アプリユーザー用端末200は、前述した図33(c)のS3335と同様、アクションのトリガーが発生したか否かを判定する。アクションのトリガーがあった場合にはS3546へ進み、そうでない場合にはS3553へ進む。
S3546~S3553の処理は、前述した図33(c)のS3343~S3350とそれぞれ同様の処理であるため説明を省略する。前述した図33(c)のS3336~S3342に相当する処理は、変形例においてアプリユーザー用端末200では行わない。
なお、上述の各フローチャートで説明した各種制御は1つのハードウェアが行ってもよいし、複数のハードウェア(例えば、複数のプロセッサーや回路)が処理を分担することで、装置全体の制御を行ってもよい。
また、本発明をその好適な実施形態に基づいて詳述してきたが、本発明はこれら特定の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。さらに、上述した各実施形態は本発明の一実施形態を示すものにすぎず、各実施形態を適宜組み合わせることも可能である
(他の実施形態)
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。
<複数の観点>
上述の実施形態で説明した通り、本実施形態の情報処理システムは以下のような構成を含む。また、本実施形態は、以下の構成の各手段が実行するステップを有する情報処理システムの制御方法を示している。また、本実施形態は、以下の構成の各手段として少なくとも1つのコンピュータを機能させるためのプログラムによっても実現可能である。
[構成1―1]
ユーザーがプログラミング言語で記述する入力とは異なる入力操作であって、創作関数を作成するための設定画面に対する前記ユーザーからの入力操作を受け付ける受付手段と、
前記受付手段で受け付けた前記入力操作に基づいて前記創作関数に関する情報を設定する設定手段と、
プログラミング言語で記述された、前記創作関数の識別情報が含まれる文字列を取得した場合に、前記設定手段で設定された情報に基づいて、前記創作関数の機能を含む前記文字列で示される機能を実行可能とする制御を行う制御手段と、
を有することを特徴とする情報処理システム。
[構成1―2]
ユーザーがプログラミング言語で記述する入力とは異なる入力操作であって、創作関数を作成するための設定画面に対する前記ユーザーからの入力操作に基づいて、前記創作関数に関する情報を設定する設定手段と、
プログラミング言語の記述領域に、前記創作関数の識別情報に一部一致する文字列が入力された場合に、前記創作関数の識別情報の選択肢を表示するように制御する表示制御手段と、
を有することを特徴とする情報処理システム。
[構成1―3]
ユーザーがプログラミング言語で記述する入力とは異なる入力操作であって、創作関数を作成するための設定画面に対する前記ユーザーからの入力操作に基づいて、前記創作関数に関する情報を設定する設定手段と、
プログラミング言語の記述領域とともに、前記設定手段で設定された前記創作関数の識別情報を表示するように制御する表示制御手段と、
を有することを特徴とする情報処理システム。
[構成2]
アプリケーションの開発画面に配置された第1の種別のコンポーネントのうち指示領域(タブ)に対する操作があったことに応じて、前記第1の種別のコンポ―ントの領域内の少なくとも一部の領域の表示を、操作された指示領域に対応する要素画面に切り替えるように制御する表示制御手段と、
前記開発画面に配置された前記第1の種別のコンポーネントの領域に対して他のコンポーネントを配置する操作があった場合に、前記第1の種別のコンポーネントの複数の要素画面のうち、現在表示されている要素画面に対して前記他のコンポーネントを配置するように制御する制御手段と
を有することを特徴とする情報処理システム。
[構成3]
アプリケーションの開発画面に第1の種別の第1のコンポーネントを配置する配置手段と、
前記配置手段で配置された前記第1のコンポ―ネントの設定値の入力領域に、デフォルトの設定値を、プログラミング言語で記述する際の構造を識別可能な形態で表示する
ように制御する表示制御手段と
を有することを特徴とする情報処理システム。
[構成4]
第1の種別の環境(開発環境)と第2の種別の環境(実行環境)とを含む情報処理システムであって、
前記第2の種別の環境であって、前記第1の種別の環境に接続しているユーザーがアクセス可能な環境のうち、特定の環境の特定の領域から、前記特定の環境におけるアクセス先情報を取得する取得手段と、
前記取得手段で取得したアクセス先情報が示すアクセス先に、所定の処理(例えばユーザー情報の送信処理)の実行要求を送信するように制御する送信制御手段と
を有することを特徴とする情報処理システム。
[構成5]
第1の種別の環境(開発環境)と第2の種別の環境(実行環境)とを含む情報処理システムであって、
前記第1の種別の環境へアクセス可能なユーザーか否かのユーザー認証を行う認証手段と、
前記認証手段によって前記第1の種別の環境へアクセス可能と認証されたユーザーがアクセス可能な前記第2の種別の環境を特定する環境特定情報を取得する取得手段と、(アクセス可能実行環境リストの取得)
前記取得手段で取得した前記環境特定情報に基づき、前記第2の種別の環境に関する認証情報をユーザーから取得することなく、前記環境特定情報によって特定される環境へアクセスするように制御する制御手段と、
を有することを特徴とする情報処理システム。
[構成6]
アプリケーションソフトウェアを構築するためのクライアント端末における開発画面として、構築される前記アプリケーションソフトウェアで表示される画面に配置するコンポーネントが操作された場合のアクションを入力する入力領域を表示するように制御する表示制御手段と、
前記入力領域に入力されたアクションの情報を含む前記アプリケーションソフトウェアの定義情報を記録するように制御する記録制御手段と、
前記アプリケーションソフトウェアの実行環境で実行すべきアクションを定義した第1の情報を、前記定義情報に基づいて生成するように制御する第1の制御手段と、
前記アプリケーションソフトウェアを実行する際に前記実行環境にアクセスする端末装置が用いる第2の情報を、前記定義情報に基づいて生成するように制御する第2の制御手段と、
を有することを特徴とする情報処理システム。
[構成7]
表(データグリッド)の選択を受け付ける受付手段と、
選択された表の設定画面(プロパティボックス)を表示するように制御する表示制御手段と、
前記設定画面に対する第1の操作に応じて前記表に対してカラムを追加するように制御し、
前記設定画面に対する第2の操作に応じて、前記表の各カラムに対する設定を行うように制御する制御手段と
を有することを特徴とする情報処理装置。
[構成8]
表の選択を受け付ける受付手段と、
選択された表に含まれる複数のカラム毎のアクションの入力画面にそれぞれ対応する複数の選択肢を表示するように制御する表示制御手段と、
前記複数の選択肢のうちいずれかが選択されたことに応じて、選択された選択肢に対応するカラムのアクションの入力画面を表示し、ユーザーからのアクションの入力操作を受け付けるように制御する制御手段と
を有することを特徴とする情報処理システム。
[構成9]
プログラミング言語の入力領域に入力された文字列を取得する取得手段と、
前記取得手段で取得した文字列のうち、特定の識別子が付された要素文字列に基づき、当該要素文字列が、入力として取得すべき情報である入力項目と、出力すべき情報である出力項目とのいずれかの情報であることを特定する特定手段と、
前記特定手段で特定された内容を反映して、前記文字列に基づくプログラムを実行するように制御する制御手段と、
を有することを特徴とする情報処理システム。
[構成10]
プログラミング言語でソースコードを記述する操作を含まず、選択肢から選択する操作を含む操作群に基づいて、構築されるアプリケーションソフトウェアの画面に対してアクションを定義する、あるいは構築される前記アプリケーションソフトウェアの画面に表示されるコンポーネントとしてアクションが定義された自動生成部品を配置するように制御する制御手段と(例えば、ワークフロー生成によるアクションが定義されたボタンの配置、キャンバスにアクションが定義されたUI画面、CRUDボタン配置によるボタンの配置、UI画面の生成、等)、
前記制御手段によってアクションが定義された画面と前記自動生成部品とのいずれかが選択され、アクションを表示する指示があったことに応じて、前記選択がなされた対象に定義されたアクションをプログラミング言語での文字列で表示するように制御する表示制御手段と、
前記表示制御手段によって表示された、アクションを表すプログラミング言語での前記文字列の修正操作を受け付ける受付手段と、
を有することを特徴とする情報処理システム。
[構成11]
アプリケーションの定義を行う操作を受け付ける受付手段と、
前記受付手段で受け付けた操作に基づいて定義された定義情報に基づいてネットワーク上の環境に前記アプリケーションをデプロイする指示を行う指示手段と、
前記指示手段による指示によって前記アプリケーションのデプロイが完了したことに応じて、前記アプリケーションを実行するためのアドレスであって、前記デプロイがされた場所を示すアクセス先情報を表示するように制御する表示制御手段と、
を有することを特徴とする情報処理システム。
[構成12]
構築するアプリケーションにおけるユーザー認証のための認証用画面のテンプレートとして、予め定められたアクションが定義された雛形コンポーネントが予め配置された前記認証用画面のレイアウト編集画面を表示するように制御する表示制御手段と、
前記レイアウト編集画面に前記雛形コンポーネントと異なる他のコンポーネントを配置する編集操作と、前記レイアウト編集画面おける前記雛形コンポ―ネントの表示形態を変更する編集操作と、のうち少なくともいずれかを受け付ける受付手段と、
前記受付手段で受け付けた編集操作を反映した前記認証用画面が表示されるアプリケーションを構築するための定義情報を記録するように制御する制御手段と、
を有することを特徴とする情報処理システム。
[構成13]
マルチテナント環境への新規アカウントの登録指示を受け付ける受付手段と、
前記受付手段で新規アカウントの登録指示を受け付けた場合に、
・前記マルチテナント環境に登録済みの有効なアカウント数が特定の閾値に達して
ない場合には、新規アカウントは第1のデータベース環境に接続し、
・前記マルチテナント環境に登録済みの有効なアカウント数が前記特定の閾値を超えている場合には、新規アカウントは前記第1のデータベース環境とは異なる第2のデータベース環境に接続する
ように制御する制御手段と、
を有することを特徴とする情報処理システム。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
100:開発者用端末、200:アプリユーザー用端末、201:アプリユーザー用端末201、300:開発環境、400:実行環境

Claims (15)

  1. 表の選択を受け付ける受付手段と、
    選択された表に含まれる複数のカラム毎のアクションの入力領域にそれぞれ対応する複数の選択肢を表示するように制御する表示制御手段と、
    前記複数の選択肢のうちいずれかが選択されたことに応じて、選択された選択肢に対応するカラムのアクションの入力領域を表示し、ユーザーからのアクションの入力操作を受け付けるように制御する制御手段と
    を有することを特徴とする情報処理システム。
  2. 前記カラムのアクションの入力領域は、前記表のうち対応するカラムのセルの値が変化した場合あるいは当該セルに表示されたボタンが操作されたことをトリガーとして実行すべき処理を設定する画面であることを特徴とする請求項1に記載の情報処理システム。
  3. 前記カラムのアクションの入力領域では、ユーザーからの前記トリガーの設定は受け付けないことを特徴とする請求項2に記載の情報処理システム。
  4. 前記カラムのアクションの入力領域に対して、前記選択した選択肢に対応するカラムとは異なる、前記表のうちの他のカラムに影響を与えるアクションの設定を受け付け可能であることを特徴とする請求項1に記載の情報処理システム。
  5. 前記制御手段は、前記カラムのアクションの入力領域に対するアクションの前記入力操作として、プログラム言語での文字列の入力を受け付けるように制御することを特徴とする請求項1に記載の情報処理システム。
  6. 前記プログラム言語はJavaScriptであることを特徴とする請求項5に記載の情報処理システム。
  7. 前記表示制御手段は、前記複数の選択肢を表示した際に、選択された表と異なる表のカラムのアクションの入力領域に対応する選択肢は表示しないように制御することを特徴とする請求項1に記載の情報処理システム。
  8. 前記表示制御手段は、前記複数の選択肢とともに、選択された表に関するトリガーであって、当該表のカラムにかかわらないトリガーに応じて実行すべきアクションの入力領域に対応する選択肢を表示するように制御することを特徴とする請求項1に記載の情報処理システム。
  9. 前記表は、アプリケーションソフトウェアの開発画面に、構築後の前記アプリケーションソフトウェアの画面に表示すべきコンポーネントとして配置された表であることを特徴とする請求項1に記載の情報処理システム。
  10. 前記アクションは、構築後の前記アプリケーションソフトウェアにおいて実行すべき処理であることを特徴とする請求項9に記載の情報処理システム。
  11. 前記入力操作に基づくアクションを示す情報を含む前記アプリケーションソフトウェアの定義情報を、開発環境から実行環境にデプロイすることによって前記アプリケーションソフトウェアを構築する構築手段をさらに有することを特徴とする請求項10に記載の情報処理システム。
  12. 前記表示制御手段はさらに、前記選択された表の設定画面を表示するように制御可能であり、
    前記制御手段は、前記設定画面に対する第1の操作に応じて前記選択された表に対してカラムを追加するように制御し、前記設定画面に対する第2の操作に応じて、前記選択された表の各カラムに対する設定を行うように制御する
    ことを特徴とする請求項1に記載の情報処理システム。
  13. 前記表示制御手段は、前記選択された表に関する第1の選択肢と第2の選択肢とを表示し、前記第1の選択肢が選択された場合には前記選択された表の前記設定画面を表示するように制御し、前記第2の選択肢が選択された場合には前記選択された表に含まれる複数のカラム毎のアクションの入力領域にそれぞれ対応する複数の選択肢を表示するように制御することを特徴とする請求項12に記載の情報処理システム。
  14. 表の選択を受け付ける受付ステップと、
    選択された表に含まれる複数のカラム毎のアクションの入力領域にそれぞれ対応する複数の選択肢を表示するように制御する表示制御ステップと、
    前記複数の選択肢のうちいずれかが選択されたことに応じて、選択された選択肢に対応するカラムのアクションの入力領域を表示し、ユーザーからのアクションの入力操作を受け付けるように制御する制御ステップと
    を有することを特徴とする情報処理システムの制御方法。
  15. 少なくとも1つのコンピュータを、請求項1乃至13のいずれか1項に記載された情報処理システムの各手段として機能させるためのプログラム。
JP2022187341A 2022-11-24 2022-11-24 情報処理システム、情報処理システムの制御方法、及びプログラム Pending JP2024076011A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022187341A JP2024076011A (ja) 2022-11-24 2022-11-24 情報処理システム、情報処理システムの制御方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022187341A JP2024076011A (ja) 2022-11-24 2022-11-24 情報処理システム、情報処理システムの制御方法、及びプログラム

Publications (1)

Publication Number Publication Date
JP2024076011A true JP2024076011A (ja) 2024-06-05

Family

ID=91330866

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022187341A Pending JP2024076011A (ja) 2022-11-24 2022-11-24 情報処理システム、情報処理システムの制御方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP2024076011A (ja)

Similar Documents

Publication Publication Date Title
CN102187314A (zh) 可视地建模、调试和执行面向资源的程序的交互式设计环境
JP2015122058A (ja) 情報共有システムおよび情報共有方法
JP5050371B2 (ja) 操作記録再現装置およびプログラム
WO2019146047A1 (ja) 情報処理システム、情報処理方法、情報処理装置
TWI771832B (zh) 管理電子文件的電腦實行系統以及方法
JP2016066355A (ja) Webアプリケーション生成システム、Webアプリケーション生成システムの制御方法、Webアプリケーション生成システムのプログラム、Webアプリケーション生成装置、Webアプリケーション生成装置の制御方法、およびWebアプリケーション生成装置のプログラム
JP2024076011A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076010A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076005A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076009A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076014A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076012A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076007A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076013A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076015A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076016A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076006A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024075981A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024076008A (ja) 情報処理システム、情報処理システムの制御方法、及びプログラム
JP2024149188A (ja) 情報処理システム、情報処理方法及びプログラム
JP2024149184A (ja) 情報処理システム、情報処理方法及びプログラム
KR101777850B1 (ko) 업무 시스템 제공 방법 및 장치
JP6565894B2 (ja) サーバ、情報処理装置、処理方法およびプログラム
KR20180060360A (ko) 클라우드 컴퓨팅 환경에서 제공되는 총무 관리 프로그램에서 사용자 정의에 따른 사용자 인터페이스 제공 방법 및 장치
JP5949278B2 (ja) 情報処理装置、情報処理装置の制御方法、プログラムおよび記録媒体