Title: 「岳タスク」用の投稿/編集フォームを定義する

このページでは、エントリークラスで定義された種類の記事を投稿/編集するフォームをどのように定義するのかを説明します。



エントリークラスの定義の再確認



プラグインのフォルダ com.traction.form.takashi の下の config/entry/classes にあるファイル takashi.properties をテキストエディタで開き、次の newentry_form=editentry_form= の設定を確認します。

newentry_form=takashi
editentry_form=takashi


どちらの値も「takashi」となっています。

これは、「このエントリークラスの記事を投稿・編集する場合は、『takashi』という名前のフォームを使いなさい」という意味です。

フォームの定義ファイル



定義ファイルの設置場所



では、その「takashi」という名前のフォームの定義ファイルはどこにあるのでしょうか。その場所は config/data/forms フォルダです。



定義ファイルの内容



フォームの定義ファイル takashi.properties の内容は次のようになっています。

# 「taskdialog」フォームから設定を引き継ぎます。
__inherits=taskdialog

# このフォームの表示名です。(一般的な画面には表示されないので、適当な名前でOKです)
display_name=#{@takashi#takashi_form_display_name}

# フォーム上に表示する部品(入力欄・選択欄)の名前を指定します。
# この「部品」のことを「フィールド」と呼びます。
# 半角カンマ記号で区切って指定してください。
schema_elements=todo,title,project,content,tags,property_assigned,property_subscribed,attachments,priority,property_start,property_due,property_estimate,property_duration,color,property_edit_desc,takashi_type,takashi_location,takashi_category,property_takashi_subject,property_takashi_number,property_takashi_note,property_takashi_specialday,takashi_target

# フォームの上部に表示されるタイトル
form_title=#{@takashi#takashi_form_title}

# フォームの HTML に埋め込まれるクラス名
# CSS や jQuery などを使って、このフォームの要素を特定できます。
form_class=task-form-dialog takashi-form-dialog fm-html

# [送信] ボタンに表示される文字列
form_save=#{@takashi#takashi_form_save}

# 初期値は field_フィールド名_value= を使って指定します。
# ここでは、タイトルに「takashi_title」トークン(ウィジェット)を埋め込みます。
# (ただし、タイトルのフィールド行は CSS で display:none になっており、表示されません)
# トークンは、config/entry/tokens で定義されています。
field_title_value=[[ /token takashi_title ]]

# フォームを表示した時のフォーカス(カーソルがあるフィールド)を指定します。
field_property_takashi_subject_focus=true

# field_フィールド名_label= を使ってフィールドの見出しを上書き設定できます。
# 既定のフィールドの見出しは、各フィールドの定義ファイル (config/data/field/props/*.properties) の display_name= か、
# 対応するエントリー フィールド (config/entry/fields/props/*.properties) の display_name= で設定された
# 値が反映されますが、このようにフォームの定義ファイル中で見出しの文字を変更できます。
field_content_label=#{@takashi#takashi_content_label}

# タブ インデックス(TAB キーを押した時の、フォーカスの移動順)の設定
field_property_takashi_subject_tabindex=100
field_content_tabindex=101
field_tags_tabindex=102
field_attachments_tabindex=103
field_property_assigned_tabindex=104
field_priority_tabindex=105
field_property_subscribed_tabindex=106
field_property_estimate_tabindex=107
field_property_start_tabindex=108
field_property_duration_tabindex=109
field_property_due_tabindex=110
field_color_tabindex=111
field_property_takashi_specialday_tabindex=112
field_takashi_location_tabindex=113
field_property_takashi_number_tabindex=114
field_takashi_category_tabindex=115
field_takashi_type_tabindex=116
field_takashi_target_tabindex=117
field_property_takashi_note_tabindex=118
field_property_edit_desc_tabindex=119

# 入力必須設定
field_property_takashi_subject_required=true
field_property_takashi_number_required=true
field_takashi_category_required=true

# このフォームのレイアウトに使う SDL ファイルや SDL 関数を指定します。
sdl=com.traction.takashi.sdl.gwtrpc.form
# レイアウトを無効にするには、上の業をコメントアウトし、下の行のコメントアウトを解除してください。
# sdl =

# このフォームを使って投稿したとき、ここで指定されたトークン(ウィジェット)を
# 自動的に記事本文に埋め込むことができます。
entry_content_prepend=[[ /token takashi_info ]]
#entry_content_append=[[ /token takashi_moreinfo ]]

# このフォームを使って投稿される記事は次の EntryClass を持ちます。
entry_class=takashi


最初に __inherits=taskdialog の記述があり、これは「taskdialog という名前のフォーム定義から設定を引き継ぐ」という意味です。

この引き継ぎ元の定義ファイル taskdialog.properties は、TeamPage がインストールされた server フォルダ下の config/data/forms にあります。

重要なものは次の項目です。

schema_elements=



フォーム上に配置する「部品」(入力欄、フィールド)の名前を半角カンマ記号で区切って指定します。

詳しくは、「岳タスク」用の部品 で説明します。

部品の名前にはある程度の規則があります。部品に入力された値をどのように記事に反映させるかを考えます。

エントリープロパティとして記事に保存するタイプ


エントリー プロパティ (Entry Property) とは、記事の見えない「引き出し」の中に保存される特殊な値のことです。

例えば、担当者のユーザー ID、締切日の日付情報、見込み時間などはエントリープロパティとしてタスク記事に保存されます。

エントリープロパティの部品名は必ず「property_」から始めます。

タグとして記事に付けるタイプ


タグとして記事に付けるための部品の名前には「property_」は付けません。

また、部品用の「バケツ」を config/data/labelnamebuckets フォルダで定義し、そのバケツの名前を config/entry/classes フォルダのエントリークラスの定義ファイルで指定する必要があります。

リレーションシップとして記事に付けるタイプ



リレーションシップとして記事を別の記事に結びつける部品の名前には「property_」は付けません。

また、部品用の「バケツ」を config/data/referencebuckets フォルダで定義し、そのバケツの名前を config/entry/classes フォルダのエントリークラスの定義ファイルで指定する必要があります。

field_title_value=



「title」という名前の部品に既定で入力される内容を設定します。

[[ /token takashi_title ]] は、「takashi_title」という名前のトークンを挿入しなさい、という意味です。

メモ

トークンとは「記事が表示されるときに動作する部品」のことです。例えば、ここでは「takashi_title」という「部品」を作り、岳タスク記事が表示されるとき、担当者名や日付などを自動的に記事タイトル表示するような動作を実現します。



sdl=



フォームを細かくデザインするには、SDL ファイルや SDL 関数をテンプレートとして使います。その場所を指定します。

半角カンマ記号はフォルダの区切り、半角シャープ記号は関数を表します。ここで記述されている「com.traction.takashi.sdl.gwtrpc.form」は、「com」フォルダの中の、「traction」フォルダの中の、「takashi」フォルダの中の、「sdl」フォルダの中の、「gwtrpc」フォルダの中の、「form.sdl」ファイルを表しています。

sdl= 行の値(右辺)を空にすると、SDL ファイルによるデザインが無効になり、指定された部品をフォーム上に並べただけのデザインになります。

entry_content_prepend=



このフォームを使って投稿された記事の本文に特定のトークンを自動的に埋め込むことができます。



[[ /token takashi_info ]] は、「takashi_info」というウィジェットを埋め込みなさい、という意味です。

entry_class=



このフォームを使って投稿される記事のエントリークラスを指定します。

ここでは「このフォームを使って投稿したエントリー(記事)は、config/entry/classes にあるファイル takashi.properties で定義されたエントリークラスに属する」という意味になります。

フォームの部品の定義



フォームの定義ファイルの schema_elements= でフォームに配置する部品を指定しました。

これらの部品と同じ名前の定義ファイルを config/data/field/props のフォルダの中に設置します。ファイル名は、部品名.propertiesになります。

プラグイン中の config/data/field/props フォルダを見ると、次のように 8 個の定義ファイルが設置されていることがわかります。



これらのうち、次の「property_」で始まる 4 つの部品は、入力された値をエントリープロパティとして保存する部品です。





Attachments:
form_definition.png
formfield_definitions_takashi.png
関連記事
Article: DocSDK356 (permalink)
Date: 2020/05/01; 17時33分05秒 JST
Author Name: TeamPage サポート
Author ID: jpbo