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

ヘッドレスAPIを使用したオブジェクトの管理

Liferay 7.4以降

アプリケーションメニューからオブジェクトを作成・管理できますが、LiferayのREST APIを使うこともできます。 オブジェクトの作成と管理を行うには、これらのサービスを呼び出してください。 Liferay のコードベースでは、オブジェクトは オブジェクト定義 と呼ばれることに注意してください。 各オブジェクト定義は、様々なオブジェクトフィールドで構成されています。

オブジェクト定義とオブジェクトフィールドの追加

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-r4g6.zip -O
    
    unzip liferay-r4g6.zip
    
  2. cURLスクリプトを使用して、インスタンスに新しいオブジェクト定義を追加します。 コマンドラインで、 curl フォルダーに移動します。 ObjectDefinitions_POST_ToInstance.sh スクリプトを実行します。

    ./ObjectDefinitions_POST_ToInstance.sh
    

    JSONレスポンスには、新しいオブジェクト定義が追加されたことが示されています。

    "active" : false,
    "dateCreated" : "2023-05-31T16:51:18Z",
    "dateModified" : "2023-05-31T16:51:18Z"、
    "defaultLanguageId" : "en_US"、
    "enableCategorization" : true、
    "enableComments" : false,
    "enableObjectEntryHistory" : false,
    "externalReferenceCode" : "4574eea8-03e9-d4c6-b9f9-23368b94350c",
    "id" : 44525,
    "label" : {
      "en_US" : "Foo"
    },
    "名前" : "Foo"、
    "objectActions" : [ ]、
    ...
    "pluralLabel" : {
      "en_US" : "Foos"
    }、
    "ポートレット" : false、
    "restContextPath" : "/o/c/foos"、
    "scope" : "company"、
    "status" : {
       "コード" : 2,
       "ラベル" : "ドラフト",
       "label_i18n" : "ドラフト"
    },
    "system" : false,
    "titleObjectFieldName" : "id"
    
  3. グローバルメニュー → コントロールパネル → オブジェクト に移動します。 新しいオブジェクトが追加されたことを確認してください。

    新しいオブジェクト定義が追加されていることを確認してください。

    Foo オブジェクトをクリックします。 対象物のID番号をメモしてください。

  4. cURLスクリプトを使用して、オブジェクト定義に新しいオブジェクトフィールドを追加します。 コマンドラインで、 ObjectFields_POST_ToObjectDefinition.sh スクリプトを実行します。 1234をオブジェクトのIDに置き換えてください。

    ./ObjectFields_POST_ToObjectDefinition.sh 1234
    
  5. Liferayで、 Foo オブジェクトをもう一度クリックします。 フィールド タブをクリックします。 新しい「Able」フィールドが追加されたことに注意してください。

    新しいオブジェクトフィールドが追加されていることを確認してください。

  6. RESTサービスはJavaクライアントを使用して呼び出すこともできます。 curl フォルダから java フォルダに移動します。 ソースファイルをコンパイルします。

    javac -classpath .:* *.java
    
  7. ObjectDefinitions_POST_ToInstance.java クラスを実行します。

    java -classpath .:* ObjectDefinitions_POST_ToInstance
    
  8. Foo オブジェクトの ID 番号に注目してください。 次に、 ObjectFields_POST_ToObjectDefinition.java クラスを実行します。 1234をオブジェクトのIDに置き換えてください。

    java -classpath .:* -DobjectDefinitionId=1234 ObjectFields_POST_ToObjectDefinition
    

新しく作成されたオブジェクトは、まだドラフト状態です。 公開前に必要な変更や修正を行ってください。 オブジェクトが公開されると、編集は無効になります。 詳細については、 公開オブジェクトドラフト を参照してください。

cURLコマンドを調べる

ObjectDefinitions_POST_ToInstance.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions" \
	--data-raw '
		{
			"label": {
				"en_US": "Foo"
			},
			"name": "Foo",
			"pluralLabel": {
				"en_US": "Foos"
			},
			"scope": "company"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

コマンドの引数は以下のとおりです。

引数説明
-H "Content-Type: application/json"JSON形式のリクエストボディのフォーマットを定義します。
-X POST指定されたエンドポイントで起動するHTTPメソッド
"http://localhost:8080/o/object-admin/v1.0/object-definitions"RESTサービスのエンドポイント
-d "{\"label\": {\"en_US\": \"Foo\"}, \"name\": \"Foo\", \"pluralLabel\": {\"en_US\": \"Foos\"}, \"scope\": \"company\"}"お客様が掲載を希望するデータ
-u "test@liferay.com:learn"基本的な認証情報
注記

ここでは、デモンストレーション目的で基本認証を使用しています。 本番環境では、 OAuth2 を介してユーザーを認証する必要があります。 OAuth2 を使用する React アプリケーションの例については、 OAuth2 を使用してユーザーを認証する を参照してください。

他のcURLコマンドも同様のJSON引数を使用します。

Javaクラスを調べます

ObjectDefinitions_POST_ToInstance.java クラスは、 ObjectDefinitionResource サービスを呼び出すことでオブジェクト定義を追加します。

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.postObjectDefinition(
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US", "Foo");
					name = "Foo";
					pluralLabel = Collections.singletonMap("en_US", "Foos");
					scope = "company";
				}
			});

	System.out.println(objectDefinition);
}

このクラスは、わずか3行のコードでRESTサービスを呼び出します。

行(省略形)説明
ObjectDefinitionResource.Builder builder = ...Builder を取得して、 ObjectDefinitionResource サービス インスタンスを生成します。
ObjectDefinitionResource objectDefinitionResource = builder.authentication(...).build();基本認証を指定し、 ObjectDefinitionResource サービス インスタンスを生成します。
ObjectDefinition objectDefinition = objectDefinitionResource.postObjectDefinition(...);objectDefinitionResource.postObjectDefinition メソッドを呼び出し、データを post に渡します。

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

注記

main メソッドのコメントは、クラスを実行する方法を示しています。

他のJavaクラスの例はこれと似ていますが、呼び出すメソッドが異なります。

重要

サービスの詳細については、 ObjectDefinitionResource を参照してください。

以下は、cURLとJavaを使用して他の関連RESTサービスを呼び出す例です。

インスタンスからオブジェクトを取得する

以下のcURLコマンドまたはJavaコマンドを実行することで、オブジェクト定義の一覧を表示できます。

ObjectDefinitions_GET_FromInstance.sh

コマンド:

./ObjectDefinitions_GET_FromInstance.sh

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions" \
	--user "test@liferay.com:learn"

ObjectDefinitions_GET_FromInstance.java

コマンド:

java -classpath .:* ObjectDefinitions_GET_FromInstance

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	Page<ObjectDefinition> page =
		objectDefinitionResource.getObjectDefinitionsPage(
			null, null, null, Pagination.of(1, 2), null);

	System.out.println(page);
}

インスタンスのオブジェクト定義はJSON形式で記述されます。

オブジェクト定義を取得する

以下のcURLまたはJavaコマンドを使用して、特定のオブジェクト定義を取得します。

ヒント

インスタンスのObjectDefinitionID を取得するには、ObjectDefinitions_GET_FromInstance.[java|sh]を使用します。

ObjectDefinitions_GET_ById.sh

コマンド:

./ObjectDefinitions_GET_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--user "test@liferay.com:learn"

ObjectDefinitions_GET_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_GET_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	System.out.println(
		objectDefinitionResource.getObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId"))));
}

オブジェクト定義のフィールドはJSON形式で表示されます。

オブジェクト定義をパッチする

以下のcURLコマンドとJavaコマンドを使用して、既存のオブジェクト定義を部分的に編集します。 1234 をオブジェクト定義の ID に置き換えてください。

ObjectDefinitions_PATCH_ById.sh

コマンド:

./ObjectDefinitions_PATCH_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--data-raw '
		{
			"label": {
				"en_US": "バー"
			},
			"名前": "バー",
			"複数ラベル": {
				"en_US": "Bars"
			}
		}' \
	--header "Content-Type: application/json" \
	--request "PATCH" \
	--user "test@liferay.com:learn"

ObjectDefinitions_PATCH_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_PATCH_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.patchObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId")),
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US"、 "Bar");
					name = "Bar";
					pluralLabel = Collections.singletonMap("en_US"、 "Bars");
				}
			});

	System.out.println(objectDefinition);
}

オブジェクト定義を配置する

以下のcURLコマンドとJavaコマンドを使用して、既存のオブジェクト定義を完全に上書きします。 1234 をオブジェクト定義の ID に置き換えてください。

ObjectDefinitions_PUT_ById.sh

コマンド:

./ObjectDefinitions_PUT_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--data-raw '
		{
			"label": {
				"en_US": "Goo"
			},
			"name": "Goo",
			"pluralLabel": {
				"en_US": "Goos"
			},
			"scope": "company"
		}' \
	--header "Content-Type: application/json" \
	--request "PUT" \
	--user "test@liferay.com:learn"

ObjectDefinitions_PUT_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_PUT_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.putObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId")),
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US"、 "Goo");
					name = "Goo";
					pluralLabel = Collections.singletonMap("en_US"、 "Goos");
					scope = "会社";
				}
			});

	System.out.println(objectDefinition);
}

オブジェクト定義を削除する

以下のcURLコマンドとJavaコマンドを使用して、既存のオブジェクト定義を削除します。 1234 をオブジェクト定義の ID に置き換えてください。

ObjectDefinitions_DELETE_ById.sh

コマンド:

./ObjectDefinitions_DELETE_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--request "DELETE" \
	--user "test@liferay.com:learn"

ObjectDefinitions_DELETE_ById.java

指示

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_DELETE_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	objectDefinitionResource.deleteObjectDefinition(
		Long.valueOf(System.getProperty("objectDefinitionId")));
}

オブジェクトフィールド向けサービス

オブジェクトフィールド用のcURLコマンドとJavaクラスは、オブジェクト定義と同じように機能します。

ファイル説明
ObjectFields_DELETE_ById.[java\|sh]オブジェクトのフィールドをIDで削除します。
ObjectFields_GET_ById.[java\|sh]IDで指定したオブジェクトフィールドを取得します。
ObjectFields_PATCH_ById.[java\|sh]特定のオブジェクトフィールドをIDでパッチします。
ObjectFields_POST_ToObjectDefinition.[java\|sh]オブジェクト定義にオブジェクトフィールドを投稿します。
ObjectFields_PUT_ById.[java\|sh]特定のオブジェクトフィールドをIDで置き換えます。
ObjectFields_GET_FromObjectDefinition.[java\|sh]オブジェクト定義からオブジェクトフィールドのリストを取得します。

APIエクスプローラー は、オブジェクトのすべてのサービスとスキーマを表示し、各サービスを試すためのインターフェースを備えています。