掲示板APIの基本

LiferayのHeadless Deliveryアプリケーションは、 掲示板 アプリケーションにRESTサービスを提供します。 これらのサービスでは、掲示板カテゴリやスレッド、メッセージの追加、情報の一覧表示、内容の修正や完全な削除が可能です。 ここでは、cURLコマンドとJavaクラスを使用してこれらのサービスを呼び出します。

note

掲示板カテゴリは、Liferayのバックエンドではsectionsという名前になっています。 これらのセクションでは、スレッドを整理するためのトピックを定義します。

チュートリアルリソースの準備

チュートリアルに進む前に、まずクリーンなLiferay Dockerコンテナをセットアップし、提供されたチュートリアルコードを使用できるように準備します。

Liferay Dockerコンテナ

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.120-ga120。

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

開始したら、サイトIDを取得します。 サイトIDを見つけるには、 サイトメニュー(サイトメニュー)を開き、 [Configuration] → [Site Settings] → [Site Configuration] に移動します。

Find the site ID under the Site Configuration settings.

チュートリアルコード

以下はヘッドレスAPIをデモするサンプルコードです。 本コードには、サンプルのcURLとJavaファイルの両方が含まれています。

次のコマンドを実行して、 サンプルコード をダウンロードして解凍します。

curl https://resources.learn.liferay.com/dxp/latest/en/collaboration-and-social/message-boards/developer-guide/liferay-y3a6.zip -O
unzip liferay-y3a6.zip

cURLスクリプトを使用する準備ができたら、実行する前にJavaソースファイルを手動でコンパイルする必要があります。 これを行うには、プロジェクトの java フォルダーに行き、javac コマンドを実行する。

cd liferay-y3a6/java
javac -classpath .:* *.java

このプロジェクトには com.liferay.headless.delivery.client.jar ファイルが依存関係として含まれていることに注意してください。 すべての REST アプリケーションのクライアント JAR 依存情報は、インストー ルの API エクスプローラーの /o/api にある。

提供されるコードには MessageBoardSectionMessageBoardThreadMessageBoardMessage サービスの API が含まれる。 含まれているサンプルAPIの一覧は、 Tutorial Code Reference をご参照ください。

important

提供されるコードは、デモのために基本認証を使用しています。 本番環境では、 OAuth2 でユーザーを認証する必要があります。

サンプルAPIの呼び出し

この練習では、cURLコマンドかJavaクラスを使ってMessageBoardSectionMessageBoardThreadMessageBoardMessageの各APIを呼び出すことができる。 次の出力例はcURLコマンドに対応しており、提供されているJavaクラスの出力とは少し異なります。

  1. liferay-y3a6プロジェクトのcurlまたはjava フォルダに移動します。

    cURLの場合

    cd liferay-y3a6/curl
    

    Javaの場合

    cd liferay-y3a6/java
    
  2. サイトIDをパラメータとしてMessageBoardSection_POST_ToSiteを実行する。 これにより、指定したサイトに新しい掲示板セクションが作成されます。

    cURLの場合

    ./MessageBoardSection_POST_ToSite.sh {site-id}
    

    Javaの場合

    java -classpath .:* -DsiteId={site-id} MessageBoardSection_POST_ToSite
    

    端末には、新しく作成されたセクションの完全なスキーマが表示されます。 提供されるAPIコールは、新しいセクションの description フィールドと name フィールドを定義するだけである。

  3. セクションのIDをコピーして、以下のGET、PATCH、PUT、DELETEメソッドで使用します。

    {
      ...
      "description" : "Foo",
      "id" : 43925,
      ...
      "name" : "Able Section",
      ...
    }
    
  4. パラメータにサイト ID を使用して MessageBoardSections_GET_FromSite を実行する。 これにより、指定したサイト内のすべてのセクションのリストが返されます。

    cURLの場合

    ./MessageBoardSections_GET_FromSite.sh {site-id}
    

    Javaの場合

    java -classpath .:* -DsiteId={site-id} MessageBoardSections_GET_FromSite
    
  5. メッセージボードセクションのIDをパラメータとして MessageBoardSection_PATCH_ById を実行する。 これにより、指定されたエントリーの詳細がAPI呼び出しで提供された詳細に更新されます。

    cURLの場合

    ./MessageBoardSection_PATCH_ById.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSection_PATCH_ById
    

    これは description フィールドを Bar に更新する。

  6. 同じセクションIDをパラメータとして MessageBoardSection_PUT_ById を実行する。 これにより、指定されたエントリーの詳細がAPI呼び出しで提供された詳細に置き換えられます。

    cURLの場合

    ./MessageBoardSection_PUT_ById.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSection_PUT_ById
    

    これは name フィールドを Baker Section に、description フィールドを Goo に更新します。

  7. パラメータにサイト ID を使用して MessageBoardThread_POST_ToSite を実行する。 これにより、サイトの新しい掲示板スレッドが作成されます。

    cURLの場合

    ./MessageBoardThread_POST_ToSite.sh {site-id}
    

    Javaの場合

    java -classpath .:* -DsiteId={site-id} MessageBoardThread_POST_ToSite
    
    {
      ...
      "articleBody" : "Foo",
      ...
      "headline" : "Able Thread",
      "id" : 43942,
      ...
      "messageBoardRootMessageId" : 43941,
    }
    

    すべてのスレッドは、スレッド内のすべての直接返信の親メッセージとなるルートメッ セージ(つまり messageBoardRootMessageId)で作成される。

  8. 上記のセクションIDをパラメータとしてMessageBoardThread_POST_ToSectionを実行する。 これにより、指定されたセクションの新しい掲示板スレッドが作成されます。

    cURLの場合

    ./MessageBoardThread_POST_ToSection.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardThread_POST_ToSection
    
  9. このスレッドのIDをコピーして、以下のGET、PATCH、PUTメソッドで使用します。

    {
      ...
      "articleBody" : "Foo",
      ...
      "headline" : "Baker Thread",
      "id" : 43934,
      ...
      "messageBoardRootMessageId" : 43933,
      "messageBoardSectionId" : 43925,
      ...
    }
    
  10. スレッドの ID をパラメータとして MessageBoardThread_PATCH_ById を実行する。 これにより、指定されたスレッドの詳細がAPI呼び出しで提供された詳細に更新されます。

    cURLの場合

    ./MessageBoardThread_PATCH_ById.sh {message-board-thread-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardThread_PATCH_ById
    

    これは articleBody フィールドを Bar に更新する。

  11. 同じスレッド ID をパラメータとして MessageBoardThread_PUT_ById を実行する。 これにより、指定されたスレッドの詳細がAPI呼び出しで提供された詳細に置き換えられます。

    cURLの場合

    ./MessageBoardThread_PUT_ById.sh {message-board-thread-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardThread_PUT_ById
    

    これにより、headline フィールドが Charlie Thread に、articleBody フィールドが Goo に更新される。

  12. パラメータにサイト ID を使用して MessageBoardThreads_GET_FromSite を実行する。 これにより、セクションを持たないすべてのサイトスレッドのリストが返されます。

    cURLの場合

    ./MessageBoardThreads_GET_FromSite.sh {site-id}
    

    Javaの場合

    java -classpath .:* -DsiteId={site-id} MessageBoardThreads_GET_FromSite
    
  13. セクション ID をパラメータとして MessageBoardThreads_GET_FromSection を実行する。 これにより、指定したセクション内のすべてのスレッドのリストが返されます。

    cURLの場合

    ./MessageBoardThreads_GET_FromSection.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardThreads_GET_FromSection
    
  14. 上記のいずれかのスレッド ID をパラメータとして MessageBoardMessage_POST_ToThread を実行する。 これにより、指定されたスレッドの新しい掲示板のメッセージが作成されます。

    cURLの場合

    ./MessageBoardMessage_POST_ToThread.sh {message-board-thread-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardMessage_POST_ToThread
    
  15. メッセージのIDをコピーして、以下のPUT、PATCH、POSTコマンドで使用します。

    {
      ...
      "articleBody" : "Foo",
      ...
      "headline" : "Able Message",
      "id" : 43946,
      ...
      "messageBoardSectionId" : 43925,
      "messageBoardThreadId" : 43934,
      "parentMessageBoardMessageId" : 43933,
      ...
    }
    

    新しいメッセージはスレッドのルートメッセージ(messageBoardRootMessageId)の子メッセージとして作成されます。

  16. メッセージの ID をパラメータとして MessageBoardMessage_PATCH_ById を実行する。 これにより、指定されたメッセージの詳細がAPI呼び出しで提供された詳細に更新されます。

    cURLの場合

    ./MessageBoardMessage_PATCH_ById.sh {message-board-message-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardMessageId={message-board-message-id} MessageBoardMessage_PATCH_ById
    

    これは articleBody フィールドを Bar に更新する。

  17. 同じメッセージ ID をパラメータとして MessageBoardMessage_PUT_ById を実行する。 これにより、指定されたメッセージの詳細がAPI呼び出しで提供された詳細に置き換えられます。

    cURLの場合

    ./MessageBoardMessage_PUT_ById.sh {message-board-message-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardMessageId={message-board-message-id} MessageBoardMessage_PUT_ById
    

    これにより、headline フィールドが Baker Message に、articleBody フィールドが Goo に更新される。

  18. 直前のメッセージ ID をパラメータとして MessageBoardMessage_POST_ToParent を実行する。 これにより、指定したメッセージの子メッセージが作成されます。

    cURLの場合

    ./MessageBoardMessage_POST_ToParent.sh {parent-message-board-message-id}
    

    Javaの場合

    java -classpath .:* -DparentMessageBoardMessageId={parent-message-board-message-id} MessageBoardMessage_POST_ToParent
    
    {
      ...
      "articleBody" : "Foo",
      ...
      "headline" : "Charlie Message",
      "id" : 43949,
      ...
      "messageBoardSectionId" : 43925,
      "messageBoardThreadId" : 43934,
      ...
      "parentMessageBoardMessageId" : 43946,
      ...
    }
    
  19. スレッド ID をパラメータとして MessageBoardMessages_GET_FromThread を実行する。 これはスレッドのルートメッセージ(つまり messageBoardRootMessage)の子メッセージのリストを返します。

    cURLの場合

    ./MessageBoardMessages_GET_FromThread.sh {message-board-thread-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardMessages_GET_FromThread
    

    出力には、スレッドで作成した最初のメッセージのデータが含まれ、そのメッセージ自体に1つの子メッセージが含まれている必要があります。 これはメッセージの numberOfMessageBoardMessages フィールドで示される。

  20. 直前のメッセージの ID をパラメータとして MessageBoardMessages_GET_FromParent を実行する。 これにより、指定したメッセージの子メッセージのすべてのリストが返されます。

    cURLの場合

    ./MessageBoardMessages_GET_FromParent.sh {parent-message-board-message-id}
    

    Javaの場合

    java -classpath .:* -DparentMessageBoardMessageId={parent-message-board-message-id} MessageBoardMessages_GET_FromParent
    

    出力には、最後に作成した子メッセージのデータも含まれるはずです。

  21. 同じセクションIDをパラメータとして MessageBoardSection_DELETE_ById を実行する。 これにより、指定されたセクションが、そのスレッドやメッセージとともに削除されます。

    cURLの場合

    ./MessageBoardSection_DELETE_ById.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSection_DELETE_ById
    
  22. 同じセクション ID をパラメータとして MessageBoardSection_GET_ById を実行する。指定したセクションが存在すれば、その詳細を返します。

    cURLの場合

    ./MessageBoardSection_GET_ById.sh {message-board-section-id}
    

    Javaの場合

    java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSection_GET_ById
    

    前のステップでセクションを削除したため、次のメッセージが返されます。

    {
      "status" : "NOT_FOUND",
      "title" : "No MessageBoardSection exists with the primary key 43925"
    }
    

コード参照

提供されているサンプルコードには、以下の MessageBoardSectionMessageBoardThreadMessageBoardMessage API 用の cURL スクリプトと Java クラスが含まれている。

MessageBoardSectionのサンプルAPI

サンプルコードには、次のAPIを呼び出すcURLスクリプトとJavaクラスが含まれています。

サービスHTTP メソッドHTTPエンドポイント説明
MessageBoardSectionPOST/v1.0/sites/[siteId]/message-board-sectionsAPI呼び出しで提供された詳細を使用して、新規カテゴリーを作成します
MessageBoardSectionGET/v1.0/sites/[siteId]/message-board-sections指定されたサイト内のすべてのカテゴリーの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます
MessageBoardSectionPATCH/v1.0/message-board-sections/[messageBoardSectionId]カテゴリのAPI呼び出しで指定されたフィールドのみを更新します
MessageBoardSectionPUT/v1.0/message-board-sections/[messageBoardSectionId]指定されたカテゴリのすべてのフィールドを、API呼び出しで提供されたフィールドに置き換えます。
MessageBoardSectionDELETE/v1.0/message-board-sections/[messageBoardSectionId]指定されたスレッドを削除し、操作が成功した場合は204を返す

MessageBoardThreadのサンプルAPI

サービスHTTP メソッドHTTPエンドポイント説明
MessageBoardThreadPOST/v1.0/sites/[siteId]/message-board-threadsAPI呼び出しで提供された詳細を使用して、新規スレッドを作成します
MessageBoardThreadPOST/v1.0/message-board-sections/[messageBoardSectionId]/message-board-threadsAPI呼び出しで提供された詳細を使用して、指定されたカテゴリ内に新規スレッドを作成します。
MessageBoardThreadGET/v1.0/sites/[siteId]/message-board-threadsカテゴリに属さないすべてのサイトスレッドの完全なリストを返します。結果はページ分割、絞り込み、検索、ソートが可能です。
MessageBoardThreadGET/v1.0/message-board-sections/[messageBoardSectionId]/message-board-threads指定されたカテゴリ内のすべてのスレッドの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます
MessageBoardThreadPATCH/v1.0/message-board-threads/[messageBoardThreadId]スレッドのAPI呼び出しで指定されたフィールドのみを更新します
MessageBoardThreadPUT/v1.0/message-board-threads/[messageBoardThreadId]指定されたスレッドのすべてのフィールドを、API呼び出しで提供されたフィールドに置き換えます
MessageBoardThreadDELETE/v1.0/message-board-threads/[messageBoardThreadId]指定されたスレッドを削除し、操作が成功した場合は204を返す

MessageBoardMessageのサンプルAPI

サービスHTTP メソッドHTTPエンドポイント説明
MessageBoardMessagePOST/v1.0/message-board-threads/[messageBoardThreadId]/message-board-messagesAPI呼び出しで提供された詳細を使用して、指定されたスレッドに新規メッセージを作成します。
MessageBoardMessageGET/v1.0/message-board-threads/[messageBoardThreadId]/message-board-messages指定されたスレッド内のすべてのメッセージの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます
MessageBoardMessagePATCH/v1.0/message-board-messages/[messageBoardMessageId]メッセージのAPI呼び出しで指定されたフィールドのみを更新します
MessageBoardMessagePUT/v1.0/message-board-messages/[messageBoardMessageId]指定されたメッセージのすべてのフィールドを、APIコールで提供されたフィールドに置き換えます
MessageBoardMessageDELETE/v1.0/message-board-messages/[messageBoardMessageId]指定されたメッセージを削除し、成功すれば204を返す

サンプルのcURLスクリプトの検証

以下は、チュートリアルのcURLコマンドの代表的な例です。

MessageBoardSection_POST_ToSite.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/message-board-sections" \
	--data-raw '
		{
			"description": "Foo",
			"title": "Able Section"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

MessageBoardSection_PUT_ById.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/message-board-sections/${1}" \
	--data-raw '
		{
			"description": "Goo",
			"title": "Baker Section"
		}' \
	--header "Content-Type: application/json" \
	--request "PUT" \
	--user "test@liferay.com:learn"

MessageBoardSections_GET_FromSite.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/message-board-sections" \
	--user "test@liferay.com:learn"

MessageBoardSection_DELETE_ById.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/message-board-sections/${1}" \
	--request "DELETE" \
	--user "test@liferay.com:learn"

MessageBoardThread_POST_ToSection.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/message-board-sections/${1}/message-board-threads" \
	--data-raw '
		{
			"articleBody": "Foo",
			"headline": "Baker Thread"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

MessageBoardMessage_POST_ToThread.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/message-board-threads/${1}/message-board-messages" \
	--data-raw '
		{
			"articleBody": "Foo",
			"headline": "Able Message"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

MessageBoardMessage_POST_ToParent.sh

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/message-board-messages/${1}/message-board-messages" \
	--data-raw '
		{
			"articleBody": "Foo",
			"headline": "Charlie Message"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

サンプルのJavaクラスの検証

以下は、チュートリアルのJavaコマンドの代表的な例です。

MessageBoardSection_POST_ToSite.java

public class MessageBoardSection_POST_ToSite {

	/**
	 * java -classpath .:* -DsiteId=1234 MessageBoardSection_POST_ToSite
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardSectionResource.Builder builder =
			MessageBoardSectionResource.builder();

		MessageBoardSectionResource messageBoardSectionResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		MessageBoardSection messageBoardSection =
			messageBoardSectionResource.postSiteMessageBoardSection(
				Long.valueOf(System.getProperty("siteId")),
				new MessageBoardSection() {
					{
						description = "Foo";
						title = "Charlie Section";
					}
				});

		System.out.println(messageBoardSection);
	}

}

MessageBoardSection_PUT_ById.java

public class MessageBoardSection_PUT_ById {

	/**
	 * java -classpath .:* -DmessageBoardSectionId=1234 MessageBoardSection_PUT_ById
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardSectionResource.Builder builder =
			MessageBoardSectionResource.builder();

		MessageBoardSectionResource messageBoardSectionResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		MessageBoardSection messageBoardSection =
			messageBoardSectionResource.putMessageBoardSection(
				Long.valueOf(System.getProperty("messageBoardSectionId")),
				new MessageBoardSection() {
					{
						description = "Goo";
						title = "Dog Section";
					}
				});

		System.out.println(messageBoardSection);
	}

}

MessageBoardSections_GET_FromSite.java

public class MessageBoardSections_GET_FromSite {

	/**
	 * java -classpath .:* -DsiteId=1234 MessageBoardSections_GET_FromSite
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardSectionResource.Builder builder =
			MessageBoardSectionResource.builder();

		MessageBoardSectionResource messageBoardSectionResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		Page<MessageBoardSection> page =
			messageBoardSectionResource.getSiteMessageBoardSectionsPage(
				Long.valueOf(System.getProperty("siteId")), null, null, null,
				null, Pagination.of(1, 2), null);

		System.out.println(page);
	}

}

MessageBoardSection_DELETE_ById.java

public class MessageBoardSection_DELETE_ById {

	/**
	 * java -classpath .:* -DmessageBoardSectionId=1234 MessageBoardSection_DELETE_ById
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardSectionResource.Builder builder =
			MessageBoardSectionResource.builder();

		MessageBoardSectionResource messageBoardSectionResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		messageBoardSectionResource.deleteMessageBoardSection(
			Long.valueOf(System.getProperty("messageBoardSectionId")));
	}

}

MessageBoardThread_POST_ToSection.java

public class MessageBoardThread_POST_ToSection {

	/**
	 * java -classpath .:* -DmessageBoardSectionId=1234 MessageBoardThread_POST_ToSection
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardThreadResource.Builder builder =
			MessageBoardThreadResource.builder();

		MessageBoardThreadResource messageBoardThreadResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		MessageBoardThread messageBoardThread =
			messageBoardThreadResource.
				postMessageBoardSectionMessageBoardThread(
					Long.valueOf(System.getProperty("messageBoardSectionId")),
					new MessageBoardThread() {
						{
							articleBody = "Foo";
							headline = "Easy Thread";
						}
					});

		System.out.println(messageBoardThread);
	}

}

MessageBoardMessage_POST_ToThread.java

public class MessageBoardMessage_POST_ToThread {

	/**
	 * java -classpath .:* -DmessageBoardThreadId=1234 MessageBoardMessage_POST_ToThread
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardMessageResource.Builder builder =
			MessageBoardMessageResource.builder();

		MessageBoardMessageResource messageBoardMessageResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		MessageBoardMessage messageBoardMessage =
			messageBoardMessageResource.
				postMessageBoardThreadMessageBoardMessage(
					Long.valueOf(System.getProperty("messageBoardThreadId")),
					new MessageBoardMessage() {
						{
							articleBody = "Foo";
							headline = "Dog Message";
						}
					});

		System.out.println(messageBoardMessage);
	}

}

MessageBoardMessage_POST_ToParent.java

public class MessageBoardMessage_POST_ToParent {

	/**
	 * java -classpath .:* -DparentMessageBoardMessageId=1234 MessageBoardMessage_POST_ToParent
	 */
	public static void main(String[] args) throws Exception {
		MessageBoardMessageResource.Builder builder =
			MessageBoardMessageResource.builder();

		MessageBoardMessageResource messageBoardMessageResource =
			builder.authentication(
				"test@liferay.com", "learn"
			).build();

		MessageBoardMessage messageBoardMessage =
			messageBoardMessageResource.
				postMessageBoardMessageMessageBoardMessage(
					Long.valueOf(
						System.getProperty("parentMessageBoardMessageId")),
					new MessageBoardMessage() {
						{
							articleBody = "Foo";
							headline = "Fox Message";
						}
					});

		System.out.println(messageBoardMessage);
	}

}

関連トピック

Capabilities

Product

Contact Us

Connect

Powered by Liferay
© 2024 Liferay Inc. All Rights Reserved • Privacy Policy