概要
本記事は、Unifinity Wizard(以下「Wizard」と表記)で生成されたアプリに対して、Unifinity Studioを用いてカスタマイズを実施される方を対象としています。
Wizardでアプリを生成すると、「.ufpz」という拡張子のファイルも生成されます。このファイルにはZip形式でUnifinity Applicationのプロジェクトファイル一式が格納されています。本記事では、このプロジェクトファイルの全体の概要を解説します。
目次
1.画面設計について
1.1.画面
1.1.1.生成される画面について
Wizardで生成されるアプリ(以下「生成アプリ」と表記)にはWizardでの設定内容に応じて下記6種類の画面が生成されます。
フレームページ
Wizardの設定に関わらず必ず1つ生成されます。アプリ実行中、常に表示されている画面です。サブフォーム内に表示する画面を切り替えることで画面遷移を行います。
詳細は「1.2.1.フレームページと画面遷移について」を参照ください。
一覧画面
Wizardの一覧画面で設定した画面数分の一覧画面が生成されます。一覧画面が複数設定されている場合はフッターメニューで切り替えることができます。
詳細画面
Wizardの詳細画面で設定したパターンの画面が生成されます。基本データを表示し、基本データと現場データの入力画面への遷移を行います。
入力画面
基本データ用の入力画面と、Wizardの作業工程で設定した工程数分の入力画面が生成されます。対応する確認画面に遷移を行います。
確認画面
基本データ用の確認画面と、Wizardの作業工程で設定した工程数分の確認画面が生成されます。入力を確定すると、入力内容で内部DBに記録し詳細画面に遷移します。
共通部品
Wizardの設定に関わらず、メニューやテンキーなどの共通部品が全て生成されます。「フレームページ」の「ポップアップサブフォーム」に読み込んで使用します。
詳細は「1.2.1.フレームページと画面遷移について」を参照ください。
1.2.画面遷移
1.2.1.フレームページと画面遷移について
「0000_フレームページ」(以下「フレームページ」と表記)に「ページサブフォーム」と「ポップアップサブフォーム」が配置されています。
「ページサブフォーム」に表示する画面を切り替えることで画面遷移を行います。
画面遷移に関しては「ページオープン処理(接頭番号"0")」も合わせてご覧ください。
「ポップアップサブフォーム」は非表示となっています。ユーザーの入力に応じて、テンキーなどの共通部品を読み込み表示を行います。
構成イメージは下図の通りです。
2.DB設計について
2.1.生成されるテーブル
2.1.1.テーブルの種類について
「生成アプリ」にはWizardでの設定内容に応じて下記3種類のデータテーブルとテンポラリーのテーブルが生成されます。
基本データ
Wizardで「基本情報」に設定した項目のフィールドが生成されます。
現場データ
Wizardで「基本情報」に設定しなかった項目のフィールドが生成されます。工程が設定されている場合はその工程数分のテーブルをそれぞれ生成されます。
繰り返しデータ
Wizardで「繰り返しデータ」に設定した項目のフィールドが生成されます。工程が設定されている場合は工程毎にテーブルがそれぞれ生成されます。
テンポラリー
生成アプリの各処理で一時的に使用されるテーブルです。
詳細は「2.3.テンポラリーテーブルについて」をご覧ください。
2.1.2.共通フィールドについて
生成されたデータテーブルには共通で下記のフィールドが生成されます。
_id
アプリ内で一意なIDです。
アプリでデータを新規作成した際には日付と乱数を用いた"x"から始まる仮IDが設定されます。
データをクラウドに送信すると、クラウドサーバーで一意なIDが発番され、仮IDと置き換わります。サーバーで発番されたIDはクラウド全体で一意です。
_pid
親IDです。
基本データの場合は空です。
現場データの場合は、基本データの_idを記録します。
繰り返しテーブルの場合は、現場データの_idを記録します。
状態
データの状態を表します。
一覧画面のリスト内のマークアップに使用します。
- 「new」新規データ。水色でマークアップ。
- 「update」更新データ。黄色でマークアップ。
オペレーション
データをクラウドで送信する方法を表します。
- 「post」アプリで新規生成したデータ。
- 「put」アプリで更新を行ったデータ。
バージョン
日付や連番などを記録することで、クラウドのデータとアプリ内のデータの競合などを検出することが出来ます。
テーブル
データの所属を表します。クラウドにデータ送信時に自動で付与します。
- 「prior」基本データ
- 「onsiteN」現場データ(Nは工程番号)
- 「repititionN」繰り返しデータ(Nは工程番号)
生成アプリに対しクラウドには1つのテーブルが割り当てられています。このフィールドはクラウドのテーブル内において、そのデータがアプリのどのテーブルに対応しているかの振り分けを行うために使用されます。
2.1.3.追加フィールドについて
生成されたデータテーブルには追加で下記のフィールドが生成されます。
各項目
Wizardの項目名で設定したフィールドがそれぞれ生成されます。なお物理名はpXXXとなります。(XXXは連番)
Fullフィールド
Wizardの入力方法で「カメラ」「手書き」を設定した項目に追加で生成されます。物理名はpXXX_Fullとなります。(XXXは連番)
Fullフィールドには画像の大きなサイズのデータを記録し、Fullフィールドではない方には画像のサムネイルのデータを記録します。
工程、工程番号
基本データにのみ生成されます。工程がある場合にどの工程まで進んだかを記録します。
2.2.テーブルの役割
2.2.1.テーブルの役割について
生成されたデータテーブルは、役割毎にさらに下記3種類のテーブルが生成されます
トランザクションテーブル(接頭辞"T")
一覧画面などの画面表示用に使用するテーブルです。データ同期時にデータの洗い替えを行います。
ワークテーブル(接頭辞"W")
入力画面でデータ編集用に使用するテーブルです。
データを編集する際、トランザクションテーブルからワークテーブルにデータをコピーします。
編集が完了したら、内容をトランザクションテーブルとローカルテーブルに反映します。
編集をキャンセルした場合は何も行いません。
ローカルテーブル(接頭辞"L")
アプリでデータを編集したが、まだクラウドに同期を行っていないデータを格納します。
データをクラウドに送信したらレコードを削除します。
各テーブルと役割と画面との関係は下図の通りです。
2.3.テンポラリーテーブルについて
生成されるテンポラリーテーブルと主な用途は下記になります。
2.3.1 X_マスタ選択
入力画面の「マスタ選択」で利用されます。
「9.30.1.マスタ選択」画面内のサブフォームに「9.30.2.リスト」画面が指定されております。「9.30.2.リスト」画面は「X_マスタ選択」テーブルと連携しています。
入力画面で「マスタ選択」となっている項目を選択した際「0_9300_マスタ選択(画面名,コントロール名,表示名,初期値)」処理が呼び出されます。処理内でマスタ選択に表示する選択肢を抽出し「X_マスタ選択」テーブルにレコードを追加します。その結果「9.30.1.マスタ選択」画面に選択肢一覧が表示されます。
2.3.2 X_工程
「工程」を使用するページや処理で利用されます。
Wizardで入力した「工程名」が初期値として設定されます。
「工程詳細」画面のサブフォームは「X_工程」テーブルと連携しています。
工程ページオープン処理で、画面に表示している基本データの工程番号を取得し「X_工程」テーブルの「工程状態」を更新します。その結果「工程詳細」画面の各工程の内容や工程ボタンの有効/無効が設定されます。
2.3.3 X_工程フィルタ
「フィルタ」タイプの一覧画面で利用されます。
「9.31.1.工程フィルタ」画面内のサブフォームに「9.31.2.工程リスト」画面が指定されております。「9.31.2.工程リスト」画面は「X_工程フィルタ」テーブルと連携しています。
「フィルタ」タイプの一覧画面で「フィルタボタン」をクリックした際「0_9310_工程フィルター起動(画面名,コントロール名,表示名,初期値)」処理が呼び出されます。処理内で「X_工程」テーブルから工程情報を取得し「X_工程フィルタ」テーブルにレコードを追加します。その結果「9.31.1.工程フィルタ」画面に工程選択肢が表示されます。
2.3.4 通信結果テンポラリー
データの送信通信処理で利用されます。「通信用サブルーチン(接頭番号"9_021x"、"9_022x"、"9_023x"、"9_024x")」も合わせてご覧ください。
各データレコードの通信毎に、該当データの _id と通信結果(ok/ng)を格納します。通信処理完了後にその通信結果をもとに各データレコードの更新をしたり、画面にエラーメッセージを表示したりします。
3.処理設計について
3.1.生成される処理
「生成アプリ」には下記の処理が生成されます。
3.1.1.ページで使用する処理
各画面で使用する処理です。主に下記2種類となります。
ページオープン処理(接頭番号"0_[画面番号]")
該当ページを表示するための処理です。アプリ内で画面遷移を行う場合は、この処理を呼び出します。
画面遷移に関しては「1.2.1.フレームページと画面遷移について」もご覧ください。
各UIに対応する処理(接頭番号"9_[画面番号]")
該当ページ内にあるボタンなどのUIに対応する処理です。
3.1.2.共通部品用の処理
各画面で使用する処理です。主に下記2種類となります。
部品オープン処理(接頭番号"0_9xxx")
該当ページを表示するための処理です。アプリ内でポップアップ表示を行う場合は、この処理を呼び出します。呼び出し元の画面名や、入力内容の反映先コントロール名などをパラメーターとして指定します。画面名が指定されていない場合はポップアップを閉じる処理となります。
画面遷移に関しては「1.2.1.フレームページと画面遷移について」もご覧ください。
各UIに対応する処理(接頭番号"9_9xxx")
該当ページ内にあるボタンなどのUIに対応する処理です。
3.1.3.ユーティリティー処理(接頭番号"9_00xx")
アプリ内の各処理から呼び出されるサブルーチンです。
3.1.4.通信用の処理
クラウドと同期時に使用される処理です。主に下記3種類となります。
通信用ユーティリティー(接頭番号"9_01xx"、"9_020x")
通信処理から呼び出されるサブルーチンです。
なお、クラウドDBの接続先を変更する場合は「【UniBaaS DBご契約者様向け】UniBaaS DBの接続先を変更する」をご覧ください。
通信用処理(接頭番号"9_0210"、"9_0220"、"9_0230"、"9_0240")
通信用のサブルーチンの呼び出しをまとめた処理です。クラウドと通信を行う場合はこの処理を呼び出します。
通信用サブルーチン(接頭番号"9_021x"、"9_022x"、"9_023x"、"9_024x")
各データテーブルに対応した通信処理です。
3.1.5.kintone連携時の通信について
kintoneと連携している場合は、送信処理はbulkRequest(複数アプリのレコード操作を一括処理する(kintone APIドキュメント))を利用します。まず送信するデータを「+9_0300_[kintone]bulkRequestキュー追加」ロジックで追加しておきます。その後「+0_0300_[kintone]bulkRequestデータ送信」を呼び出すと、キューに追加したデータが20件ずつbulkRequestで送信されます。
3.2.処理名
3.2.1.処理名の接頭辞について
処理名の先頭に「*」「+」がついているものはWizardが動的に内容を設定した箇所です。
生成アプリをカスタマイズする際、どの処理が共通の処理でどの処理が動的に変更された個所か把握するために使用することが出来ます。
3.3.処理の設計思想
各画面は原則的には自分の画面(とサブフォーム)についてのみの処理を行います。
各画面の独立性を高めるため、別の画面に結果を引き継いだり影響を与えたい場合は、遷移先のページオープン処理の引数パラメーターを利用するか、グローバル変数を利用するか、関係するデータテーブルを利用します。別の画面に対して「コントロール/内容セット」等の使用は基本的には行いません。
4.グローバル変数について
4.1.グローバル変数
4.1.1.生成されるグローバル変数
「生成アプリ」にはWizardでの設定内容に応じて下記6種類のグローバル変数が生成されます。
各名称
生成アプリ内で使用する各名称を設定します。
- 「主キー名」データテーブルの主キーとなるフィールド名を記録します。
- 「親キー名」データテーブルの親IDを格納するフィールド名を記録します。
- 「アプリ名」アプリ名を記録します。クラウドとの接続情報を取得する際、内部的に使用されます。
フィールドリスト
基本データ、現場データ、繰り返しデータそれぞれに対し、対応するフィールド名がカンマ区切りで設定します。これはデータ同期時、どのフィールドをクラウドから取得するかの判断に使用されます。
バイナリフィールド
バイナリデータを格納しているフィールド名をカンマ区切りで設定します。クラウドとのデータ同期時に下記の処理を行うための判断に使用します。
- 「データ受信時」一覧画面等に画像を表示するためBase64デコードを行う
- 「データ送信時」バイナリデータをそのままクラウドに格納できないため、Base64エンコードを行う
日付フィールド
日付フィールドを格納しているフィールド名をカンマ区切りで設定します。クラウドとのデータ同期時に下記の処理を行うための判断に使用します。
- 「データ受信時」Unifinityで日付型を扱えるようにするため日付文字列をUnixtimeへ変換する
- 「データ送信時」※送信時に自動でUnixtimeを文字に変換できるため、追加処理は特に行わない
一覧画面キーレコード
Wizardの一覧画面で設定したキー項目を設定します。
一覧画面で検索を行う際にどのフィールドに対して検索を行うか等の判断等のため、一覧画面の処理から参照されます。
サンプルデータ挿入フラグ
Wizardでアプリを生成する際の「サンプルデータを追加する」につけられたチェックON/OFFを記録します。
ON(グローバル変数が"1")の場合、アプリ起動時に各データテーブルにサンプルデータを追加します。