Service Builder
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

サービスビルダーを使用したビジネスロジック

Service Builder を使用してモデル、永続化、およびサービスのコードを生成したら、ビジネスロジックの追加を開始できます。 サービスビルダが生成するエンティティには,モデル実装とローカルサービス実装クラスが含まれます. アプリケーションのビジネスロジックは、これらのクラスで実装することができます。 生成されたサービスは、後で永続レイヤーからCRUD操作を呼び出すデフォルトのメソッドを含んでいます。 ビジネスロジックを作成したら、再びサービスビルダーを実行して、アプリケーションのインターフェースをプロパゲートさせ、新しいロジックを呼び出せるようにします。

サンプルプロジェクトを参照してください

Liferay DXP の新しいインスタンスを起動するには、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts

http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。

次に、以下の手順に従ってください。

  1. サービスビルダーを使用したビジネスロジック をダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-e4g5.zip -O
    
    unzip liferay-e4g5.zip
    
  2. モジュールのルートディレクトリから、ビルドとデプロイを実行します。

    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注記

    このコマンドは、デプロイされたjarファイルをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイメントを確認してください。

    com.acme.e4g5.api_1.0.0 [1034]
    開始 com.acme.e4g5.service_1.0.0 [1035]
    開始 com.acme.e4g5.web_1.0.0 [1036]
    
  4. サンプルモジュールが正しく動作することを確認してください。 ブラウザで https://localhost:8080 を開いてください。

  5. E4G5ポートレットをページに追加します。 サンプルポートレットは「サンプルウィジェット」の項目にあります。

    E4G5ポートレットをページに追加します。

  6. 名前と説明を入力してエントリを追加します(例:e4g5_name1とe4g5_description1)。 追加をクリックすると、新しいエントリが E4G5 エントリ の下に表示されます。 e4g5EntryId の番号をメモしてください。

  7. 次に、このエントリを更新しますが、前の手順の e4g5EntryId と新しい名前と説明を入力します。 (例: 41804、e4g5_name2、e4g5_description2) をクリックしてを更新すると、エントリが更新されます。

  8. 最後に、 e4g5EntryId を入力してエントリを削除します。 をクリックしてを削除すると、エントリが削除されます。

サービスレイヤーを更新します

ローカルサービスを拡張して、 E4G5Entry エントリを追加、更新、削除できるメソッドを追加します。

Addメソッドを実装する

  1. エンティティを作成するためのパラメータを持つ add* メソッドを宣言します。
@Override
public E4G5Entry addE4G5Entry(String description, String name)
	throws PortalException {

	E4G5Entry e4g5Entry = e4g5EntryPersistence.create(
		counterLocalService.increment());

	e4g5Entry.setDescription(description);
	e4g5Entry.setName(name);

	return e4g5EntryPersistence.update(e4g5Entry);
}
  1. エンティティに関連付けられている *Persistence クラスには、指定された ID を持つエンティティ インスタンスを構築する create() メソッドがあります。 すべての *BaseLocalServiceImpl には、エンティティ用の counterLocalService オブジェクトがあります。 カウンターサービスの increment() メソッドを呼び出して、エンティティ インスタンスのプライマリ キーを生成します。

  2. エンティティの属性を設定するには、エンティティのセッターメソッドを使用します。 サンプルでは、 name と description という 2 つの属性が設定されています。

  3. エンティティ オブジェクトを渡して、 *Persistence クラスの update() メソッドを呼び出します。

更新メソッドを実装する

  1. エンティティを更新するためのパラメータを持つ update* メソッドを宣言します。 サンプルは、 name および description 属性と、 e4g5EntryId を受け取ります。
@Override
public E4G5Entry updateE4G5Entry(
		long e4g5EntryId, String description, String name)
	throws PortalException {

	E4G5Entry e4g5Entry = e4g5EntryPersistence.findByPrimaryKey(
		e4g5EntryId);

	e4g5Entry.setDescription(description);
	e4g5Entry.setName(name);

	return e4g5EntryPersistence.update(e4g5Entry);
}
  1. *Persistence クラスの findByPrimaryKey() メソッドを使用して、エントリ ID でエンティティ インスタンスを取得します。

  2. エンティティの属性を設定するには、エンティティのセッターメソッドを使用します。

  3. *Persistenceクラスのupdate()メソッドを呼び出し、エンティティオブジェクトを渡します。

削除メソッドを実装する

  1. エンティティのエントリ ID を受け取る delete* メソッドを宣言します。
@Override
public E4G5Entry deleteE4G5Entry(long e4g5EntryId) throws PortalException {
	E4G5Entry e4g5Entry = e4g5EntryPersistence.findByPrimaryKey(
		e4g5EntryId);

	e4g5EntryPersistence.remove(e4g5Entry);

	return e4g5Entry;
}
  1. *Persistence クラスの delete() メソッドを呼び出し、エンティティ オブジェクトを渡します。

add*、 update*、および delete* メソッドを実装した後、Service Builder を実行して、新しいサービス メソッドを *LocalService インターフェイスに伝播します。

バックエンドを統合する

次に、作成したサービス メソッドを ポートレット アクション を使用して Web モジュールに実装します。

ポートレットアクション

Web モジュールには、 MVC ポートレット を使用できます。 サンプルプロジェクトのポートレットには、 add、 update、および delete のエントリアクションがあります。

public void addE4G5Entry(
		ActionRequest actionRequest, ActionResponse actionResponse)
	throws PortalException {

	_e4g5EntryLocalService.addE4G5Entry(
		ParamUtil.getString(actionRequest, "description"),
		ParamUtil.getString(actionRequest, "name"));
}

public void deleteE4G5Entry(
		ActionRequest actionRequest, ActionResponse actionResponse)
	throws PortalException {

	_e4g5EntryLocalService.deleteE4G5Entry(
		ParamUtil.getLong(actionRequest, "e4g5EntryId"));
}

public void updateE4G5Entry(
		ActionRequest actionRequest, ActionResponse actionResponse)
	throws PortalException {

	_e4g5EntryLocalService.updateE4G5Entry(
		ParamUtil.getLong(actionRequest, "e4g5EntryId"),
		ParamUtil.getString(actionRequest, "説明")、
		ParamUtil.getString(actionRequest、 "名前"));
}

各メソッドは、 ActionRequest と ActionResponse パラメータを受け取ります。 ActionRequest はビュー レイヤーから情報を受け取り、 ActionResponse は情報をビュー レイヤーに返すために使用できます。

addE4G5Entry() メソッドは名前と説明を受け取り、サービスを呼び出してエントリを追加します。 updateE4G5Entry() メソッドは、エントリ ID、名前、説明を受け取り、特定のエントリを更新するサービスを呼び出します。 deleteE4G5Entry() メソッドはエントリ ID を受け取り、サービスを呼び出してエントリを削除します。

JSP内のアクションをマッピングする

次に、作成したアクションメソッドをJSPにマッピングします。

<h3>E4G5 エントリを追加</h3>

<portlet:actionURL name="addE4G5Entry" var="addE4G5EntryURL" />

<aui:form action="<%= addE4G5EntryURL %>">
	<aui:input name="name" type="text" />
	<aui:input name="description" type="text" />

	<aui:button type="submit" value="add" />
</aui:form>

<hr />

<h3>E4G5 エントリを更新</h3>

<portlet:actionURL name="updateE4G5Entry" var="updateE4G5EntryURL" />

<aui:form action="<%= updateE4G5EntryURL %>">
	<aui:input name="e4g5EntryId" type="text" />
	<aui:input name="name" type="text" />
	<aui:input name="description" type="text" />

	<aui:button type="submit" value="update" />
</aui:form>

<hr />

<h3>E4G5 エントリを削除</h2>

<portlet:actionURL name="deleteE4G5Entry" var="deleteE4G5EntryURL" />

<aui:form action="<%= deleteE4G5EntryURL %>">
	<aui:input name="e4g5EntryId" type="text" />

	<aui:button type="submit" value="delete" />

JSP は、タグライブラリの portlet:actionURL タグを使用して、アクションを UI コンポーネントにバインドします。 portlet:actionURLの name 属性は、ポートレットで作成された各アクション メソッドと一致する必要があることに注意してください。 var属性は、ポートレットアクションURLを任意の変数に割り当てます。 <aui:form> は、ユーザー入力用のテキストフィールドを表示します。 フォームを送信すると、その値は ActionRequest とともにポートレットメソッドに渡されます。