簡単なTodoアプリの生成
検索機能付きのTodoアプリを自動生成させてみましょう。まず、XML Portlet Factoryのフォルダ直下のディレクトリに移動します。
そこで、Macの場合
chmod 755 create.sh
で実行権限を与え、
perl -i -pe 'y|\r||d' create.sh
でWindows用の改行コードを変換します。
create.sh Todo "Todo Portlet"
(Windowsの場合は「create.bat Todo "Todo Portlet"」)を実行してみます。すると、Build successというメッセージが出た後、
Todo-xmlportletfactory
というディレクトリが生成されているかと思います。次に
cd Todo-xmlportletfactory
で中に生成されているTodo.xmlを開きます。
XMLの作成
添付のsources.zip内のTodo.xmlを、生成されているTodo.xmlの中身と置き換えて保存します。XMLのアトリビュートのそれぞれの機能に関する説明は、ここにあります(英語)。
数値型、テキスト型、日付型のフィールドの定義やバリデーションのサンプル、1対多のリレーションをサポートする複数ポートレットの生成などは、ここを参照してみてください。
XMLの各項目の基本的な説明
以下に今回、Todoアプリを生成するXML定義、Todo.xmlの内容と、その主なアトリビュートの説明をします。
commonData
client
パッケージ名です。
projectName
Service Builderで生成されるプロジェクト名です。
version
このポートレットのバージョンです。
Applications/application
Name
モデル名です。
mode
自分が作ったポートレット(以後カスタムポートレット)のCRUD(Create, Review, Update, Delete)の有無をそれぞれ制御します。
workflow
カスタムポートレットにWorkflow機能を追加します。これをtrueに設定してポートレットを生成すると、コントロールパネルのWorkflowからWorkflowの設定が可能になります。
generateActivity
LiferayにはActivitiesというユーザーのポータル上での活動(Activity)を表示するポートレットがあるのですが、それにこのTodoポートレットでの操作状況が表示されるようになります。
asset
LiferayにはAssetと呼ばれる概念があり、これはLiferay Coreの機能をカスタムポートレットで利用する場合や、標準ポートレットや、他のポートレットでカスタムポートレットの情報を利用するために使用します。
これにより、WorkflowやRating(星をつける)やタグクラウドなどLiferay標準機能の利用であったり、ActivittyやAssetPublisher内への表示など、Liferay標準ポートレットからカスタムポートレットの情報を利用することができるようになります。
assetTitleFieldName, assetSummaryFieldName
これらはAssetを生成するための必須項目です。
Categories
カテゴリー機能を追加します。
Discussion
コメント機能を追加します。
Ratings
レーティング(星)機能を追加します。
Tags
タグ機能を追加します。
relatedAssets
関係するAssetを指定できるようになります。
fullContentFieldName
Asset PublisherというAssetを含む全てのポートレットの内容が表示できるLiferay標準のポートレットがありますが、そこでこのポートレットの内容を表示させるのに指定する必要があります。
FileDef
Name
モデル名です。
FileDef/fields/field/以下
Name
テーブルのフィールド名です。
Title
画面に表示する際の表記です。
Length
データ入力サイズです。
Signed
負の値の保持を許すかどうかを指定します。
Nullable
Null(空白)を指定できるかを指定します。
Order
リスト表示時に、並び替えを可能にするかを指定します。
Regexp
入力値のバリデーションを行います。指定できる値はXMLPortletFactoryのディレクトリ直下の
Resources/PortletStructureAndFiles/docroot/WEB-INF/src/regexp.properties
内に定義されています。ここにJava標準の正規表現でルールを追加すると、カスタム定義も使えるようになります。
showFieldInView
View内で、リスト表示の時に項目を表示/非表示するかを制御します。IDなどは表示を隠したい場合がありますが、そういう場合に使用します。
Required
必須項目かどうかを制御します。
<?xml version="1.0" encoding="utf-8"?>
<definition xmlns="http://www.xmlportletfactory.org/xml/xmlportletfactory" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xmlportletfactory.org/xml/xmlportletfactory xmlportletfactory.xsd">
<commonData>
<client>lrcommunity</client>
<projectName>Todo</projectName>
<version>1</version>
</commonData>
<applications>
<!-- MyBlogPortlet Portlet Class and File definition -->
<application>
<classDef>
<name>ToDo</name>
<title>To Do Test</title>
<mode>
<add>true</add>
<delete>true</delete>
<modify>true</modify>
<browse>true</browse>
</mode>
<workflow>true</workflow>
<generateActivity>true</generateActivity>
<asset>
<assetTitleFieldName>todoTitleName</assetTitleFieldName>
<assetSummaryFieldName>todoSummaryName</assetSummaryFieldName>
<categories>true</categories>
<discussion>true</discussion>
<ratings>true</ratings>
<tags>true</tags>
<relatedAssets>true</relatedAssets>
<fullContentFieldName>task</fullContentFieldName>
</asset>
</classDef>
<fileDef>
<name>Todos</name>
<fields>
<field>
<name>todoId</name>
<title>Id</title>
<type>
<long>
<length>5</length>
<signed>false</signed>
<nullable>false</nullable>
<order>true</order>
</long>
</type>
<showFieldInView>false</showFieldInView>
<required>true</required>
</field>
<field>
<name>title</name>
<title>Title</title>
<type>
<varchar>
<length>80</length>
<filter>true</filter>
<order>true</order>
</varchar>
</type>
<showFieldInView>true</showFieldInView>
<required>true</required>
</field>
<field>
<name>task</name>
<title>Task</title>
<type>
<varchar>
<length>2000</length>
<filter>true</filter>
<order>true</order>
</varchar>
</type>
<showFieldInView>true</showFieldInView>
<required>true</required>
</field>
<field>
<name>startDate</name>
<title>Start Date</title>
<type>
<date/>
</type>
<showFieldInView>true</showFieldInView>
<required>true</required>
</field>
<field>
<name>endDate</name>
<title>End Date</title>
<type>
<date/>
</type>
<showFieldInView>true</showFieldInView>
<required>true</required>
</field>
</fields>
</fileDef>
</application>
</applications>
</definition>
Portlet_editXXXXXX_jsp.vmの変更
オリジナルのXMLPortletFactoryにはコメント生成にバグがあるので、添付のsources.zip内の
Portlet_editXXXXXX_jsp.vm
を
liferay-plugins-sdk-6.2/XMLPortletFactory/Resources/VelocityTemplates_6.2/PortletFiles/Portlet_editXXXXXX_jsp.vm
に置き換えてください。
生成されるポートレットパッケージ名の変更
また、生成されるポートレットのパッケージがorg.xmlportletfactoryになっているので、これを自分が使用するプロジェクトの任意のパッケージに変更するには、
liferay-plugins-sdk-6.2/XMLPortletFactory/Resources/VelocityTemplates_common/PortletFiles/variables.txt
内の
#set( $packageBase = "org.xmlportletfactory") #set( $pathBase = "org/xmlportletfactory")
の部分を変更してください。
