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

Base64 エンコードされたファイルでオブジェクト API を使用する

Liferay DXP 2024.Q2+/ポータル GA120+

API を通じて 添付フィールド を持つオブジェクト エントリを作成する場合、通常はコンピューターからファイルをアップロードするか、 ドキュメントとメディア アプリケーションにアップロードされたファイルを使用できます。 どちらのシナリオでも複数の手順が必要です。

API 経由でオブジェクト エントリを投稿するときにドキュメントをアップロードして ID または外部参照コード (ERC) を指定するか、API 経由でオブジェクト エントリを投稿し、後で UI を通じてファイルを添付することができます。

あるいは、POST リクエストを作成し、リクエスト本文に Base64 でエンコードされたファイルを含めることで、添付ファイル付きのオブジェクト エントリを 1 ステップで投稿することもできます。

Liferay DXP 2024.Q4+/Portal GA129+ オブジェクトフレームワークは、ERCを使用して添付ファイルをオブジェクトエントリにリンクし、環境間で一貫した参照を可能にします。 ユーザーが直接アップロードし、ドキュメントとメディアから非表示になっている添付ファイルの場合、インポート時に簡単に利用できるように、添付ファイルの内容を Base64 形式でエクスポートされたデータに含めることができます。 詳細については、 オブジェクトのエクスポートとインポート を参照してください。

続行する前に、 新しい Liferay DXP/Portal 7.4 インスタンスをセットアップ し、提供されているチュートリアル コードを 準備 してください。

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に変更します。

このチュートリアルの基本オブジェクトを 作成 するには、次の手順に従ってください。

  1. グローバル メニュー (Global Menu) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。

  2. 追加 ボタン (Add Button) をクリックし、次の値を入力します。

    項目
    ラベルできる
    複数形のラベルエイブルズ
    名前できる
  3. 新しい オブジェクト ドラフトを選択し、 フィールド タブに移動して、次のフィールドを追加します。

    ラベル項目名種類ファイルをリクエスト
    ユーザーコンピュータ添付ファイル1ユーザーコンピュータ添付ファイル1添付ファイルUpload Directly from the User's Computer
    ユーザーコンピュータ添付ファイル2ユーザーコンピュータ添付ファイル2添付ファイルユーザーのコンピュータから直接アップロード ( ドキュメントとメディア内のファイルを表示 オプションを切り替えます)
    ドキュメントとメディアの添付ファイルドキュメントとメディアの添付ファイル添付ファイルUpload or Select from Documents and Media Item Selector

    あるいは、 ObjectDefinitions_POST_ToInstance.sh を実行してオブジェクト定義を作成します。 その後、 グローバル メニューコントロール パネルオブジェクト でオブジェクト定義にアクセスし、次の手順に進みます。

    ./ObjectDefinitions_POST_ToInstance.sh
    
  4. 詳細タブで、スコープとして 会社 を選択し、パネル リンクの下の オブジェクト を選択して、 公開をクリックします。

    重要

    このチュートリアルでは、上記の値を使用する必要があります。

公開されると、API 経由でオブジェクトにアクセスできるようになります。

サンプルコードを準備する

以下のコマンドを実行して、提供されたサンプルコードをダウンロードし、解凍してください。

curl https://resources.learn.liferay.com/examples/liferay-p7x7.zip -O
unzip liferay-p7x7.zip

これらのスクリプトには、以下のAPIが含まれています。

HTTP メソッドHTTPエンドポイント説明
GET/Liferay インスタンス内のオブジェクト エントリの完全なリストを返します。結果はページ分割、フィルタリング、検索、並べ替えが可能です。
POST/API 呼び出しで提供された詳細を使用してオブジェクト エントリを作成します。
PUT/[objectNameId]指定されたオブジェクトエントリーの詳細を、API呼び出しで提供されたものに置き換えます
DELETE/[objectNameId]指定されたオブジェクトエントリーを削除し、操作が成功した場合は204を返します
  1. サンプルコードをダウンロードしたら、 liferay-p7x7 プロジェクトの curl フォルダに移動します。

    cd liferay-p7x7/curl
    

ユーザーのコンピュータから直接アップロードされた添付ファイルを投稿する

ユーザーのコンピュータから直接アップロード ファイルのリクエストオプションを使用して添付ファイル付きのオブジェクトエントリを作成するには、

  1. Ables_POST_FromUsersComputer1.shを実行します。 これにより、Base64 ファイルが添付されたオブジェクト エントリが作成されます。

    ./Ables_POST_FromUsersComputer1.sh
    

    fileBase64 パラメータを使用して、ファイルをオブジェクト エントリに添付します。

    ...
    	--data-raw '{
    		"externalReferenceCode": "ATTACHMENT_FROM_USERS_COMPUTER_1",
    		"usersComputerAttachment1": {
    			"fileBase64": "iVB0...gg==",
    			"name": "AttachmentFromUsersComputer1.png"
    		}
    ...
    

    端末には同様の出力が表示されます。

    {
       "actions": {
          "permissions": {
             "method": "GET",
             "href": "http://localhost:8080/o/c/ables/32268/permissions"
          },
          "get": {
             "method": "GET",
             "href": "http://localhost:8080/o/c/ables/32268"
          },
          "replace": {
             "method": "PUT",
             "href": "http://localhost:8080/o/c/ables/32268"
          },
          "update": {
             "method": "PATCH",
             "href": "http://localhost:8080/o/c/ables/32268"
          },
          "delete": {
             "method": "DELETE",
             "href": "http://localhost:8080/o/c/ables/32268"
          }
       },
       "creator": {
          "additionalName": "",
          "contentType": "UserAccount",
          "familyName": "Test",
          "givenName": "Test",
          "id": 20122,
          "name": "Test Test"
       },
       "dateCreated": "2024-06-05T16:37:26Z",
       "dateModified": "2024-06-05T16:37:26Z",
       "externalReferenceCode": "ATTACHMENT_FROM_USERS_COMPUTER_1",
       "id": 32268,
       "keywords": [],
       "status": {
          "code": 0,
          "label": "approved",
          "label_i18n": "Approved"
       },
       "taxonomyCategoryBriefs": [],
       "usersComputerAttachment1": {
          "id": 32263,
          "link": {
             "href": "/documents/32260/32262/AttachmentFromUsersComputer1.png/f0a02e6a-8eeb-d021-bfdd-82da1afab1cf?version=1.0&t=1717605446526&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1",
             "label": "AttachmentFromUsersComputer1.png"
          },
          "name": "AttachmentFromUsersComputer1.png"
       }
    }
    

    デフォルトでは、応答に fileBase64 エンコーディングが含まれていないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。

Ables_POST_FromUsersComputer2.sh を実行し、 ユーザーのコンピューターから直接アップロード ファイルの要求オプションと ドキュメントとメディア内のファイルを表示 オプションをオンにして、添付ファイル付きのオブジェクト エントリを作成します。 なお、フォルダの指定は不要です。 フォルダーの選択は、会社スコープのオブジェクト定義の場合は会社に基づいて、サイトスコープのオブジェクト定義の場合はサイトに基づいて自動的に行われます。

./Ables_POST_FromUsersComputer2.sh

ドキュメントとメディアアイテムセレクターからアップロードまたは選択した添付ファイルを投稿する

  1. DocumentFolders_POST_ToSite.sh を実行して、アップロードされたファイルを保存するフォルダーを作成します。 サイト ID をパラメータとして使用します。 この例では、サイトIDは 20117です。

    ヒント

    サイト ID は、プラットフォームの サイト メニュー (Site Menu) → 構成サイト設定サイト構成 で見つけます。

    ./DocumentFolders_POST_ToSite.sh [site-id]
    

    端末には同様の出力が表示されるはずです。

    {
    "actions" : {
       "subscribe" : {
          "method" : "PUT",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258/subscribe"
       },
       "unsubscribe" : {
          "method" : "PUT",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258/unsubscribe"
       },
       "get" : {
          "method" : "GET",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258"
       },
       "replace" : {
          "method" : "PUT",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258"
       },
       "update" : {
          "method" : "PATCH",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258"
       },
       "delete" : {
          "method" : "DELETE",
          "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258"
       }
    },
    "creator" : {
       "additionalName" : "",
       "contentType" : "UserAccount",
       "familyName" : "Test",
       "givenName" : "Test",
       "id" : 20122,
       "name" : "Test Test"
    },
    "customFields" : [ ],
    "dateCreated" : "2024-06-05T16:37:12Z",
    "dateModified" : "2024-06-05T16:37:12Z",
    "description" : "This folder stores the attachment files for this exercise.",
    "externalReferenceCode" : "ABLE_FOLDER",
    "id" : 32258,
    "name" : "Able Folder",
    "numberOfDocumentFolders" : 0,
    "numberOfDocuments" : 0,
    "siteId" : 20117,
    "subscribed" : false
    }
    
  2. Ables_POST_FromDocumentsAndMedia.shを実行します。 これにより、Base64 ファイルが添付されたオブジェクト エントリが作成され、最近作成されたフォルダーに配置されます。 フォルダーの ERC とサイト ID をパラメーターとして使用します。 この例では、ERC は ABLE_FOLDER 、サイト ID は 20117です。

    ./Ables_POST_FromDocumentsAndMedia.sh [ERC] [site-id]
    

    フォルダー パラメーターを使用して、 externalReferenceCodesiteId を追加し、ドキュメントを保存します。

    ...
    "folder": {
       "externalReferenceCode": "'${1}'",
       "siteId": "'${2}'"
    },
    ...
    

    siteId または ERC が含まれていないか、null または空である場合でも、POST リクエストは機能し、ファイルはデフォルトのサイトのルート フォルダーにアップロードされます。

    端末には同様の出力が表示されるはずです。

    {
    "actions" : {
       "permissions" : {
          "method" : "GET",
          "href" : "http://localhost:8080/o/c/ables/32337/permissions"
       },
       "get" : {
          "method" : "GET",
          "href" : "http://localhost:8080/o/c/ables/32337"
       },
       "replace" : {
          "method" : "PUT",
          "href" : "http://localhost:8080/o/c/ables/32337"
       },
       "update" : {
          "method" : "PATCH",
          "href" : "http://localhost:8080/o/c/ables/32337"
       },
       "delete" : {
          "method" : "DELETE",
          "href" : "http://localhost:8080/o/c/ables/32337"
       }
    },
    "creator" : {
       "additionalName" : "",
       "contentType" : "UserAccount",
       "familyName" : "Test",
       "givenName" : "Test",
       "id" : 20122,
       "name" : "Test Test"
    },
    "dateCreated" : "2024-06-05T16:37:36Z",
    "dateModified" : "2024-06-05T16:37:36Z",
    "externalReferenceCode" : "ATTACHMENT_FROM_DOCS_AND_MEDIA",
    "id" : 32337,
    "keywords" : [ ],
    "status" : {
       "code" : 0,
       "label" : "approved",
       "label_i18n" : "Approved"
    },
    "taxonomyCategoryBriefs" : [ ],
    "docsAndMediaAttachment" : {
       "id" : 32332,
       "link" : {
          "href" : "/documents/20119/0/AttachmentFromDocumentsAndMedia.png/bbe75f48-04ce-2967-1721-973655b9a853?version=1.0&t=1717605455991&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_DOCS_AND_MEDIA",
          "label" : "AttachmentFromDocumentsAndMedia.png"
       },
       "name" : "AttachmentFromDocumentsAndMedia.png"
    }
    }
    

    宛先フォルダーに既存のファイルと同じ名前のファイルをアップロードすると、新しいファイルの名前が括弧で囲まれた一意の連番に変更されます (つまり、 名前 (n).拡張子)。

    デフォルトでは、応答に fileBase64 エンコーディングが含まれていないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。

すべてのエントリのリストを取得する

  1. すべてのエントリのリストを取得するには、 Ables_GET_FromCompany.sh を実行します。

    ./Ables_GET_FromCompany.sh
    

    応答には、添付ファイルの ID、ダウンロードできる リンクラベル名前などの情報が含まれます。

    ...
    "dateCreated" : "2024-06-05T16:37:26Z",
    "dateModified" : "2024-06-05T16:37:26Z",
    "externalReferenceCode" : "ATTACHMENT_FROM_USERS_COMPUTER_1",
    "id" : 32268,
    "keywords" : [ ],
    "status" : {
    "code" : 0,
    "label" : "approved",
    "label_i18n" : "Approved"
    },
    "taxonomyCategoryBriefs" : [ ],
    "usersComputerAttachment1" : {
    "id" : 32263,
    "link" : {
       "href" : "/documents/32260/32262/AttachmentFromUsersComputer1.png/f0a02e6a-8eeb-d021-bfdd-82da1afab1cf?version=1.0&t=1717605446526&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1",
       "label" : "AttachmentFromUsersComputer1.png"
    },
    "name" : "AttachmentFromUsersComputer1.png"
    }
    ...
    

    応答にはファイルのアドレスが含まれますが、デフォルトでは fileBase64 エンコーディングは含まれないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。

添付ファイルによるオブジェクトエントリの更新

PUT リクエストを使用して、オブジェクト エントリ全体を API 呼び出しで提供された詳細に置き換えます。 この場合、オブジェクト エントリを POST するために使用したのと同じ構造を PUT リクエストで使用し、更新する特定のフィールドを変更する必要があります。

同様に、PATCH リクエストには構造内で変更される特定のフィールドのみが含まれますが、PATCH の構造とコンテンツが作成時に使用されたものと一致することも確認する必要があります。

PUTリクエストを使用してエントリを変更するには、

  1. Ables_PUT_ById.sh を実行して、外部参照コードとオブジェクトエントリに添付されたファイルの名前を変更します。 オブジェクト エントリ ID をパラメーターとして使用します。

    この例では、 GET リクエスト で取得された ATTACHMENT_FROM_USERS_COMPUTER_1 エントリの ID は 32268です。

    ./Ables_PUT_ById.sh [Object-ID]
    

    応答には、オブジェクト エントリの更新された情報が表示されます。 応答にはファイルのアドレスが含まれますが、デフォルトでは fileBase64 エンコーディングは含まれないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。

  2. 外部参照コードは ATTACHMENT_FROM_USERS_COMPUTER_1_ALTERED になり、画像の名前は AttachmentFromUsersComputer1Altered.pngになります。

    "dateCreated" : "2024-06-05T16:37:26Z",
    "dateModified" : "2024-06-05T16:38:11Z",
    "externalReferenceCode" : "ATTACHMENT_FROM_USERS_COMPUTER_1_ALTERED",
    ...
       "link" : {
          "href" : "/documents/32260/32262/AttachmentFromUsersComputer1Altered.png/da5fe5a1-c36c-e016-846e-20720b7469a8?version=1.0&t=1717605491796&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1_ALTERED",
          "label" : "AttachmentFromUsersComputer1Altered.png"
       },
       "name" : "AttachmentFromUsersComputer1Altered.png"
    }
    

添付ファイル付きのオブジェクトエントリの削除

  1. Ables_DELETE_ById.sh を実行して、オブジェクト エントリとその添付ファイルを削除します。 オブジェクト エントリ ID をパラメーターとして使用します。

    ./Ables_DELETE_ById.sh [Object-ID]
    
  2. 応答に内容がありません。

レスポンスで添付ファイルの内容を取得する

応答で Base64 でエンコードされたファイルを取得するには、 nestedFields=[fieldName].fileBase64 クエリ パラメータを使用して、ネストされたフィールドとしてファイルを要求する必要があります。 これにより、ユーザーが要求していない場合は Base64 エンコードの計算が回避されます。

ターミナルでこの cURL コマンドを実行して、 ATTACHMENT_FROM_USERS_COMPUTER_2 ERC のエントリの添付ファイルの内容を取得します。

curl \
   "http://localhost:8080/o/c/ables/by-external-reference-code/ATTACHMENT_FROM_USERS_COMPUTER_2?nestedFields=usersComputerAttachment2.fileBase64" \
   --request "GET" \
   --user "test@liferay.com:learn"

ターミナルには、Base64 でエンコードされたファイル、その ID、リンク、ラベル、名前を含む同様の出力が表示されます。

...
"usersComputerAttachment2" : {
   "fileBase64" : "iVBORw0KG...kJggg==",
   "id" : 32283,
   "link" : {
   "href" : "/documents/20119/32281/AttachmentFromUsersComputer2.png/266a539c-506c-8273-96d2-15206933b993?version=1.0&t=1717605449655&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_2",
   "label" : "AttachmentFromUsersComputer2.png"
   },
   "name" : "AttachmentFromUsersComputer2.png"
}

レスポンスで添付ファイルのフォルダを取得する

応答で Base64 でエンコードされたファイルが格納されているフォルダーを取得するには、 nestedFields=[fieldName].folder クエリ パラメーターを使用して、ネストされたフィールドとして要求する必要があります。 これにより、データへの不要なアクセスを回避できます。

ターミナルでこの cURL コマンドを実行して、 ATTACHMENT_FROM_DOCS_AND_MEDIA ERC を持つエントリのフォルダーを取得します。

curl \
   "http://localhost:8080/o/c/ables/by-external-reference-code/ATTACHMENT_FROM_DOCS_AND_MEDIA?nestedFields=docsAndMediaAttachment.folder" \
   --request "GET" \
   --user "test@liferay.com:learn"

ターミナルには、フォルダーの ERC と、フォルダーが配置されている siteId を含む同様の出力が表示されます。

...
"docsAndMediaAttachment" : {
   "folder" : {
   "externalReferenceCode" : "ABLE_FOLDER",
   "siteId" : 20117
   },
...