GraphQLを使用したオブジェクトエントリの管理
GraphQLを使用すると、Liferayのカスタムオブジェクトエントリを効率的に管理できます。 この API フレームワークはデータ操作を簡素化し、 REST API の代替として機能します。 GraphQLを使用すると、特定のデータを照会したり、ネットワークリクエストを削減したり、アプリケーションのパフォーマンスを向上させたりすることができます。
Liferay における GraphQL の詳細については、 GraphQL API の利用 をお読みください。
Liferayインスタンスの設定
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更してください。
次に、以下の手順に従って、このチュートリアルの基本オブジェクトを作成します:
-
グローバルメニュー (
) を開き、 コントロールパネル → オブジェクト に移動します。 -
をクリックし、 (
)を追加して、以下の値を入力します。分野 価値 ラベル イベントのお知らせ複数形ラベル イベントのお知らせ名前 イベント告知 -
新しい オブジェクト ドラフトを選択し、 詳細 タブに移動して、 ユーザーがエントリを下書きとして保存できるようにする と エントリの翻訳を有効にする オプションをオンにします。 をクリックして保存します。
-
フィールド タブに移動し、2 つのテキスト フィールドを追加します。
ラベル フィールド名 タイプ 必須 タイトル タイトル 文章 ✔ 説明 説明 文章 ✔ -
詳細 タブに戻り、スコープ → パネル リンクの下にある オブジェクト を選択し、 公開 をクリックします。
オブジェクト定義は、グローバルメニューの「オブジェクト」の下に表示されます。 アプリケーションを使用して、エントリが正しく作成されたかどうかを確認できます。
重要このチュートリアルでは、上記の値を使用してください。
オブジェクトの公開 は、データの受信と保存のための新しいアプリケーションを作成してアクティブ化します。 ヘッドレスAPI経由でアクセスできるようになりました。 カスタムオブジェクト用のすべてのAPIは、LiferayのGraphQLスキーマの c の下に表示されます。
Liferayに統合されたGraphiQL IDEを使用すると、オブジェクトスキーマの検索、クエリの作成、リクエストの実行などを行うことができます。 これにアクセスするには、Liferay の API Explorer にアクセスし、 [server]:[port]/o/api (例: localhost:8080/o/api) をクリックして、 GraphQL をクリックします。
カスタムオブジェクトエントリの投稿
create ミューテーションを使用して、カスタムオブジェクトエントリを投稿します。 この例では、イベント告知オブジェクトに新しいエントリを追加します。このオブジェクトには、 タイトル と 説明 という 2 つのフィールドがあります。
-
Liferayに統合されたGraphiQL IDEにアクセスしてリクエストを送信してください。

-
スキーマドキュメント(1)に基づいてGraphQLクエリを作成し、GraphQLクライアントの左上のウィンドウにあるクエリ領域(2)に配置します。
mutation { c { createEventAnnouncement( EventAnnouncement: { title: "Green Tech Initiative", description: "持続可能な技術の実践に関する一連のワークショップとディスカッション。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、環境に優しいソリューションに注力します。"、 } ) { id } } }または、公開したいエントリを含む JSON ドキュメントを作成し、左下のクエリ変数ボックス (5) に配置することもできます (ボックスを展開するには、下にスクロールして クエリ変数 をクリックする必要がある場合があります)。
{ "eventAnnouncement": { "title": "Green Tech Initiative", "description": "持続可能な技術の実践に関する一連のワークショップとディスカッション。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、環境に優しいソリューションに注力します。" } }GraphQL ミューテーションに動的なデータを渡すには、
eventAnnouncement変数を使用します。 こうすることで、クエリ構造とクエリが操作するデータを分離できるため、異なる入力データに対してクエリを再利用しやすくなります。mutation CreateEvent($eventAnnouncement: InputC_EventAnnouncement) { c { createEventAnnouncement(EventAnnouncement: $eventAnnouncement) { id } } } -
上部の再生ボタン(3)をクリックしてクエリを実行してください。
追加したオブジェクトエントリがGraphQLクライアントの右ペインに表示されます(4)。 Liferayは、ミューテーションで要求したフィールドとエントリのIDを含む、オブジェクトエントリのJSON表現を返します。
{
"データ": {
"c": {
"createEventAnnouncement": {
"id": 32802
}
}
}
}
これらのリクエストは、cURLなどの任意のWebクライアントを使用して行うことができます。
curl \
"http://localhost:8080/o/graphql" \
--data-raw '{
"query": "mutation { c { createEventAnnouncement(EventAnnouncement: {title: \"Green Tech Initiative\", description: \"持続可能な技術実践に関する一連のワークショップとディスカッション。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、環境に優しいソリューションに注力します。\"}) { id } } }"
}' \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
開発段階では、URLに認証情報データを含める基本認証を使用する方がはるかに簡単です。 これは安全性が低いため、本番環境では決してこの方法を使用しないでください。
下書き状態の投稿
Liferay DXP 2024.Q3+/Portal GA125+
オブジェクトのステータスを設定する際に、オブジェクトのエントリを投稿することもできます。 この例では、 イベント告知 オブジェクトに下書きステータスの新しいエントリを追加する方法を示します。
- スキーマドキュメントに基づいてGraphQLクエリを作成し、GraphQLクライアントの左上にあるクエリ領域に配置してください。
mutation {
c {
createEventAnnouncement(
EventAnnouncement: {
title: "Tech Summit 2024",
description: "AI、サイバーセキュリティ、ソフトウェア開発の最新トレンドを探る、テクノロジー愛好家の年次集会。",
statusCode: 2
}
) {
id
status
statusCode
}
}
}
この GraphQL ミューテーションでは、 createEventAnnouncement を呼び出して、Event Announcement オブジェクト定義に新しいエントリを追加しています。 変異リクエストは、title、description、statusCode フィールドを持つEventAnnouncementオブジェクトを含む。 statusCode フィールドは 2に設定されており、エントリがドラフト状態であることを示しています (承認済みのエントリには 0 が使用されます)。
レスポンスでは、新しく作成されたイベントアナウンスの id、 status、および statusCode が返され、オブジェクトが作成され、現在ドラフト状態であることを確認します。
{
"data": {
"c": {
"createEventAnnouncement": {
"id": 32897,
"ステータス": "ドラフト"、
"ステータスコード": 2
}
}
}
}
イベント告知アプリケーションにアクセスして、エントリーが下書きとして正常に作成されたことを確認できます。

カスタムオブジェクトエントリの取得
GraphQLクライアントの左上のウィンドウに、イベントのお知らせエントリをすべて取得する以下のコードを貼り付けてください。
クエリ {
c {
eventAnnouncements(
フィルター: ""
ページ: 1
ページサイズ: 10
検索: ""
ソート: ""
) {
ページ
アイテム {
ID
タイトル
説明
ステータス
}
}
}
}
このGraphQLクエリは、ページネーションパラメータ付きのイベント告知リストを取得します。 検索結果の最初のページを要求し、1ページあたり最大10件の項目を表示します。 レスポンスには、各イベントのお知らせの id、 title、 description、および status が含まれます。 フィルター、検索、並べ替えの各フィールドを変更することで、特定の条件に基づいて検索結果を絞り込むことができます。
再生ボタンをクリックして実行すると、利用可能なエントリーが表示されます。
{
"データ": {
"c": {
"イベントアナウンス": {
"ページ": 1,
"アイテム": [
{
"id": 32897,
"タイトル": "テックサミット2024",
"説明": "AI、サイバーセキュリティ、ソフトウェア開発の最新トレンドを探求するテクノロジー愛好家の年次集会。"、
"ステータス": "ドラフト"
}、
{
"ID": 32899、
"タイトル": "グリーンテックイニシアチブ"、
"説明": "持続可能な技術の実践に関する一連のワークショップとディスカッション。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、環境に優しいソリューションに注力します。"、
"ステータス": "承認済み"
}
]
}
}
}
}
単一のカスタムオブジェクトエントリを取得する
単一のエントリを取得するには、エントリのIDを使用します。
クエリ {
c {
eventAnnouncement(eventAnnouncementId: 32897) {
title
description
status
statusCode
}
}
}
これをクライアントの左上のウィンドウにあるクエリ領域に貼り付けて、 再生 ボタンをクリックします。 選択されたエントリを返します。
{
"データ": {
"c": {
"イベントアナウンス": {
"タイトル": "テックサミット2024"、
"説明": "AI、サイバーセキュリティ、ソフトウェア開発の最新トレンドを探求するテクノロジー愛好家の年次集会。"、
"ステータス": "ドラフト"、
"ステータスコード": 2
}
}
}
}
ローカライズされたコンテンツを入手する
Liferay DXP 2024.Q3+/Portal GA125+
ローカライズされたコンテンツがある場合は、GraphQLクエリで _i18n パラメータを使用することで取得できます。
GraphQLクライアントで、特定のエントリのローカライズされたコンテンツを取得するには、次のクエリを入力します。
クエリ {
c {
eventAnnouncement(eventAnnouncementId: 32899) {
title_i18n
description_i18n
}
}
}
このクエリは、ID で指定されたイベントのお知らせのローカライズされた タイトル と 説明 フィールドを取得します。
クエリを実行するには、 再生 ボタンをクリックしてください。 応答には、利用可能なローカライズされた値が表示されます。
{
"データ": {
"c": {
"eventAnnouncement": {
"title_i18n": {
"en_US": "コミュニティボランティアデー",
"es_ES": "ボランティア活動委員会",
"pt_BR": "ボランティア活動委員会",
"fr_FR": "ジュルネ・ド・ヴォロンタリアート・コミュノート"
},
"description_i18n": {
"en_US": "地域住民が集まり、さまざまな地域プロジェクトやイニシアチブにボランティアとして参加できる機会です。"、
"es_ES": "ロスミエンブロスデラの機会を与えてくださいさまざまなプロジェクトや地域の活動を共同で行うことができます。"、
"pt_BR": "メンバーの機会を見つけてくださいさまざまなプロジェクトや地域での活動を自主的に再開し、協力してください。"、
"fr_FR": "コミュニティのメンバーを必要とする機会はありませんラッセンブラーとフェア・デュ・ベネヴォラは、ダイバーのプロジェクトとイニシアチブを注ぎ込みます。"
}
}
}
}
}
カスタムオブジェクトエントリのパッチ適用
エントリのフィールドを更新するには、GraphQLクエリで update ミューテーションを使用します。
イベント告知エントリをIDに基づいて更新するには、GraphQLクライアントのクエリ領域に以下のミューテーションを入力してください。
mutation {
c {
updateEventAnnouncement(
eventAnnouncementId: 32897,
EventAnnouncement: {
title: "Tech Summit 2025",
description: "持続可能な技術実践に関する一連のワークショップ。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、環境に優しいソリューションに注力します。"
statusCode: 0
}
) {
id
title
description
}
}
}
この変更により、エントリの title、 description、および statusCode フィールドが指定された ID で更新されます。
再生 ボタンをクリックして実行すると、レスポンスに更新されたフィールドが含まれます。
{
"データ": {
"c": {
"updateEventAnnouncement": {
"id": 32897,
"タイトル": "テックサミット2025"、
"説明": "持続可能なテクノロジーの実践に関する一連のワークショップ。 エネルギー効率の高いコーディング、データセンターの二酸化炭素排出量の削減、そして環境に優しいソリューションに注力する。"、
"ステータス": "承認済み"、
"ステータスコード": 0
}
}
}
}
カスタムオブジェクトエントリの削除
エントリを削除するには、 delete ミューテーションを使用します。 この呼び出しは、単一のエントリを取得するのと似ています。
変異 {
c {
deleteEventAnnouncement(eventAnnouncementId: 32897)
}
}
この変異は、成功または失敗を示すブール値をJSONドキュメントに返します。
{
"data": {
"c": {
"deleteEventAnnouncement": true // 削除が失敗した場合は null
}
}
}
これで、LiferayのGraphQLサービスを使用してカスタムオブジェクトのエントリを処理する方法を習得しました。