サブフォームの作成

概要

サブフォームはフォームの中のフォームです。最初のフォームは、メインフォームと呼ばれ、メインフォームの中に挿入されるフォームをサブフォームと呼びます。

サブフォームは通常、1対複数の関係を持つテーブルのデータの表示に使用されます。Order Managementの例を見てみましょう。一般的に、注文をする場合、1つ以上のアイテムや商品が注文の一部として含まれます。SkyDesk Creatorのアプリでこの関係性を作成するために、サブフォームの項目を使うことができます。サンプルアプリケーションOrder Managementでは、ItemsはメインフォームOrderのサブフォームになります。

サブフォームの作成

SkyDesk Creatorは、メインフォームにサブフォームを挿入する[サブフォーム]項目に対応しています。サブフォーム作成の手順は、以下になります。

  • 新しく作成 - > フォームを選択して、ダッシュボードから対象のフォームをアプリに追加します。例えば、アイテムのオーダーを入力する[Items]フォームと、各オーダーの詳細を入力する [Order] フォームを追加します。ここでは、[Order] フォームはメインフォーム、[Items] フォームはサブフォームになります。
  • メインフォームの編集モードで、対象の場所にサブフォームの項目の種類をドラッグ&ドロップします。例えば、 [Items] フォームを[Order]フォームにドラッグ&ドロップします。
  • [サブフォームの追加]画面のダイアログで、サブフォームとして追加するフォームを選択して、 [完了]をクリックします。例えば、サブフォームとして、 [Order Management] アプリの[Item] フォームを選択します。[完了]をクリックして、サブフォームをメインフォームに挿入します。空白のフォームを選択して、メインフォーム内で直接サブフォームを作成することもできます。 
  • メインフォームに挿入されたサブフォームは、以下のようになります。
  • アプリにアクセスすると、下記のようにメインフォームの中にサブフォームが表示されます。ここで[Order form]は、アイテムのオーダーを追加するための [Items]サブフォームを表示します。サブフォームからメインフォームに入力を追加するために、[+ 新しく追加] ボタンも利用できます。
  • メインフォームのレポート (Order view)に、選択したサブォームの値を持つすべてのオーダーが表示されます。
  • メインフォームのレポートの[列のプロパティ]は、下記のように、サブフォームのレポートの設定とレポートに表示するサブフォームに使用されます。

メインフォームとサブフォームの関係の作成

  • サブフォームにルックアップを作成して、親フォームに関連付けます。子フォームにルックアップ項目が作成されると、項目は2つのフォーム間の関係として使用されます。ルックアップを追加する際、既存のサブフォームの関係とIDを選択します。
  • レポートのタブからサブフォームレポートを選択します。[列のプロパティ]をクリックして、上記で作成したルックアップを選択します。そして、[Link] ボタンをクリックして、 メインフォームのデータへのリンクを作成します。

初期値と上限の設定

サブフォームの項目のプロパティタブの[外観]セクションから[初期値] と[上限]をサブフォームに設定できます。

  • [初期値] は、フォームの読込時に、サブフォームに指定された行数を表示します。
  • [上限] は、サブフォームに追加できる入力の制限です。

サブフォームを持つメインフォームのデータのエクスポート

[Orders]フォームという名前のメインフォームと[Items]という名前のサブフォームがあると仮定します。サブフォームを持つメインフォームのデータをエクスポートするには、

  1. [ポート]タブから、メインフォームのレポートを選択します。
  2. [列のプロパティ]から、サブフォームに表示される[Link] ボタンを有効にします。[作成]をクリックして変更を保存します。
  3. 以下のURL形式を利用して、メインフォームのレポートからデータをエクスポートします。これは自動的に、1つのタブのメインフォームのデータと同じExcelシートの別タブにある関連サブフォームのデータを含みます。メインフォームのレポートのために生成されたレコードのリンクID列は、関連サブフォームの入力の参照に使用されます。

<a href="https://creator.skydesk.jp/<adminuser>/<appname>/xls/<viewname>/exportDisplayData=false
例:https://creator.skydesk.jp/sampleapp/export-data/xls/Order_Report/exportDisplayData=false

サブフォームのあるフォームにデータをインポート

XLSからサブフォームのあるフォームにデータをインポートするには、XLSファイルにメインフォームのデータとサブフォームのデータが別々のタブに含まれていて、列が特定の形式である必要があります。  

a. XLSファイルを特定の形式で作成する

XLSファイルを作成するための簡単な方法は、サブフォームのあるフォームにサンプルレコードを追加して、「サブフォームを持つメインフォームのデータのエクスポート」セクションで設定した通り、このデータをXLS形式にエクスポートします。例えば、メインフォーム"Order"とサブフォームItems"をエクスポートして生成したXLSファイルは、上記で説明した通りの形式になります。 

  1. エクスポートされたXLSファイルは、[Order_Report] タブと[Items_Report]タブの2つのタブがあります。これらのタブ名は、アプリのビューのリンク名と一致しなければなりません。
  2. [Order_Report] タブには、 [Order]フォームで定義したタイトル、名前、メールなどの列が含まれています。同様にサブフォームの[Items_Report]タブにもサブフォーム[Items]で指定した項目として、 対応する列が含まれています。
              エクスポートされたXLSファイルのOrder Report タブ

              エクスポートされたXLSファイルの Items Report タブ
  3. [Items_Report]タブには、他の項目の列に加え、追加の列[REC LINK ID]が含まれています。この[REC LINK ID]列は、各行固有の[8099932]のような数字のIDを持っています。この数字のIDは、[SubForm]列の[Order_Report]タブにあります。Rec Link IDは、数字のIDを使ってサブフォームを持つメインフォームにリンクします。

b. データのインポート 

  1. 上記で作成したXLSファイルに必要なデータをまとめる。
  2. メインフォームのレポートにライブモードでアクセスして、設定アイコン- データのインポートレポートの上部でクリックしてください。
  3. ファイルの種類にExcelを選択して、データの場所にローカルドライブを選択します。 
  4. 上記で設定したXLSファイルを開いて、データをインポートします。(メインフォームのレポート用に生成されたタブがXLSファイルで選択されている必要があります。) メインフォームとサブフォーム、2つのフォームにデータがインポートされます。

サブフォームの項目のサイズのカスタマイズ

サブフォームの項目サイズをカスタマイズする方法:

  1. サブフォームの項目のプロパティ -> 項目の幅のカスタマイズ -> 項目の幅の手動調整を選択します。
  2. ポップアップウィンドウで、必要な項目のサイズを選択して、完了をクリックして変更を保存します。

メモ:

  • サブフォームのレイアウトのサイズは、サブフォームの項目のプロパティ -> 外観 -> 項目のサイズでカスタマイズできます。

Delugeスクリプト

サブフォーム名は、全体のレコードの入力を表しています。IDの値は、 サブフォームのレコードがデータベースに登録された後に有効になります。<collection>.<subform_name> は、他の入力を返します。行はサブフォームの[行の追加時]、[行の削除時]と[ユーザー入力時]アクションに事前に定義された変数です。行を使って、アクセス、更新、動的に追加、サブフォームの値の削除ができます。

サブフォームの行の追加や削除時に、タスクを実行するには

以下の項目アクションスクリプトが、サブフォームでサポートされています。

  • レコードの追加時: 新しい列がサブフォームに追加されると、タスクを実行します。
  • レコードの削除時: 既存の行がサブフォームから削除されると、タスクを実行します。

ユーザーのサブフォーム入力時に、タスクを実行するには

以下の項目アクションスクリプトが、サブフォーム内のすべての項目でサポートされています。

  • ユーザー入力時 : ユーザーによる値の入力時に、タスクを実行します。例えば、下記のスクリプトでは、各アイテムに選択された単価が、[Products] フォームから取得され、サブフォームに[Unit Price] として更新されます。

複数選択にアイテムを追加するには

UI.appendtaskを使って、サブフォームに複数選択にアイテムを追加できます。サンプルコードの詳細は、 help topic を参照してください。

メインフォームの選択に基づいて、サブフォームに選択リストのアイテムを追加するには

  • [contacts] は各クライアントの従業員を格納します。
  • [avtivities]フォームは、親フォームの [Client]とサブフォームの [Employee]項目を検索するメインフォームです。 
  • サブフォームの単数選択[Employee]項目は、サブフォームの [Add Row]スクリプトの追加によって、選択したクライアントに基づいた制限があります。サンプルスクリプトは下記になります。サブフォームに行が追加された時、スクリプトが実行されます。 
 
if(count(contacts[Client == input.client_field]) >0)
{
emps = contacts[Client == input.client_field];
ls = emps.contact.getAll();
clear row.Employee;
row.Employee:ui.append(ls);
}

Changing the selected Client after adding the SubForm rows will not reload the employees list. オプションを制限するスクリプトは下記になります。このスクリプトは、[client_field]のユーザー入力ブロックに追加する必要があります。

for each y in emp_activity
{
   emps = contacts[Client == input.client_field];
   ls = emps.contact.getAll();
   clear y.Employee;
   y.Employee:ui.append(ls);   
}

サブフォームを非表示/無効にするには

メインフォームの読込時アクション やユーザー入力時アクションのサブフォームを非表示や無効にできます。サブフォームの非表示と無効化の構文は以下になります。

hide <SubForm name>.<field name>;
show <SubForm name>.<field name>;
enable <SubForm name>.<field name>;
disable <SubForm name>.<field name>;

列全体に操作を実行した時、上記のタスクです。例えば、非表示のタスクがサブフォームに適用されると、サブフォームグリッドの全体の列を非表示にします。

サブフォームに項目をまとめるには

下記のスクリプトを利用して、メインフォームの項目の値を持つサブフォームで項目をまとめます。サブフォームの[行の追加時]タスクで、以下のスクリプトを適用します。

row.SubFormField = input.FormField;

サブフォームのレコードでHTMLビューを作成するには

サンプルアプリケーションSubform in HTML Viewは、[Employee Form]のレコードの送信時にHTMLビューを開きます。[Employee Form]に追加された[追加時 ->成功時]スクリプトは、OpenUrlタスクを利用して、[Print]という名前のHTMLビューを呼び出します。HTMLビューは、サブフォームのデータを持つレコードを印刷します。

アカウントにアプリの構造をコピー して、スクリプトを確認します。

サブフォームの詳細をメールで送信するには

サブフォームのデータをメールで送信するには、サブフォームのデータを再利用して、メールのメッセージに結び付けます。サンプルコードは下記になります。

message= “Details of the data added ”;
for each item in <Field_Name> // SubForm field name in the MainForm
{
   message=message+”Employee no:”+item.Employee_No;// variable.Field_Name_In_The_Subform
}

サンプルアプリケーションSubform Details in Email は、サブフォームを持つ親フォーム[Student Form]で構成されています。スクリプトは、[Student] フォームの 追加時 ->成功時に追加され、サブフォームのデータがメール送信されます。

レコードに複数の添付を追加するには

サブフォームの機能を利用して、複数の添付をレコードに追加できます。[アップロード] 項目のフォームを1つ作成して、サブフォームの項目 として最初のフォームに追加し、各レコードに複数の添付を追加します。