SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Liferay 6.2を使ったWebコンテンツの作り方

Liferayポータルと、XML Portlet Factoryを使ってCRUDを備えたポートレットを自動生成する

Liferay 6.2を使ったWebコンテンツの作り方 第4回

ダウンロード sources.zip (5.9 KB)

簡単な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

 必須項目かどうかを制御します。

Todo.xml
<?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")

の部分を変更してください。

次のページ
Liferayの起動

この記事は参考になりましたか?

Liferay 6.2を使ったWebコンテンツの作り方連載記事一覧

もっと読む

この記事の著者

竹生 泰之(日本ライフレイ株式会社)(タケオ ヤスユキ)

日本ライフレイ勤務。官公庁向け制御系システム開発、複合機のユーザーインターフェース開発、CRMのWebアプリケーションエンジニアを経て、現在はWebポータル/イントラネットのオープンソースアプリケーション、Liferayのコミュニティマネージャ/コンサルタントとして活動中。BMX(バイシクルモトクロス、20インチのレース/トリック用自転車)のフラットランド全日本選手権、King of Groundを1998年から運営し、BMX専門誌、Encounter Magazineの編集長も務め、撮影、執筆、翻訳、DTP全てを自ら手掛けるなど、プライベートでもマルチに動いている。・日本ライフレイユーザー会ライフレイ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8459 2015/02/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー