はじめに
※この記事は、以前に投稿した以下の記事の続きです
Oracle Content Management (以降OCM) のバージョン 21.10.2 - October 2021より、1回のクエリで複数アイテムの情報を取得できるようになりました
この記事では、GraphQL で Oracle Content Management で登録・公開される複数アイテム(アセット)の情報を取得する方法を紹介します
この記事は、2021年12月時点での最新バージョン(21.12.1)を元に作成されてます
0. 準備
こちらの記事を参考に、OCMインスタンスを準備し、アセットを登録・公開します
準備完了後、OCM内蔵のGraphQL IDEを開きます。URLは以下の通りです
https://<OCMインスタンスのURL>/content/published/api/v1.1/graphql/explorer
アクセスすると、このような画面が表示されます。
1. GraphQLで複数アセットの情報を取得する
複数アセットを取得する場合は、getItems クエリを利用します
{
getItems(
channelToken: String,
filter: standardFilter,
query: queryFilter,
sort: [standardSort],
limit: int, offset: int) : itemCollection
}
それぞれの引数について簡単に説明します
Arguments | 説明 | 要否 |
---|---|---|
channelToken | 公開チャネルのチャネルトークンを指定 | 必須 |
filter | アセットのクエリ条件を指定。フィルタ項目にはアセットの標準フィールドを指定 | (※1) |
query | キーワードによるアセットの検索。ファイルの全文検索も実施 | (※1) |
sort | 定フィールドで取得アセットを指ソート。ASC(昇順)orDESC(降順)を指定 | オプション |
limit | クエリで取得するアセット数を指定 | オプション |
offset | クエリで取得するアセットの開始位置を指定 例)ニュースアセットの新着5件(limit=5, offset=0)を取得。その次の5件(limit=5,offset=5)を取得 |
オプション |
(※1) filterもしくはqueryのどちらか一つ、もしくは両方が指定されていること
1.1 GraphQLで指定したアセットタイプのアセットを複数取得する
filter:
にアセットタイプ{type: {op: EQUALS, value: "sampleNewsType"}}
と入力し、アセットタイプsampleNewsType
のアセットを取得します
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {type: {op: EQUALS, value: "sampleNewsType"}}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りとなります。ここでは、4件のアセットが取得できました
{
"data": {
"getItems": {
"totalResults": 4,
"items": [
{
"id": "CORE3F9CB2F74DC64255AB0D105D1D6AF731",
"name": "sample news content 003",
"type": "sampleNewsType",
"slug": "3000000075000-sample-news-content-003",
"description": "",
"createdDate": "2021-10-28T08:29:08.244Z"
},
{
"id": "COREDF61703477704D26AAA100BEE9B8A057",
"name": "sample news content 004",
"type": "sampleNewsType",
"slug": "3000000070001-sample-news-content-004",
"description": "",
"createdDate": "2021-10-27T07:31:16.608Z"
},
{
"id": "CORE023354D507CC4695844F38B8D1C9AC98",
"name": "sample news content 002",
"type": "sampleNewsType",
"slug": "3000000025000-sample-news-content-002",
"description": "",
"createdDate": "2021-04-20T02:25:46.144Z"
},
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
}
]
}
}
}
1.2 GraphQLで指定したアセットタイプのアセットを複数取得し、ソートする
1.1項のクエリにsort
を追加し、アセットをソートした状態で取得します。今回はsort:
にアセットタイプsort: {name: ASC}
と追加し、sampleNewsType
の標準フィールドのnameで昇順ソートします
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {type: {op: EQUALS, value: "sampleNewsType"}},
sort: {name: ASC}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通り。4件のアセットがname
で昇順ソートされたのが確認できます
{
"data": {
"getItems": {
"totalResults": 4,
"items": [
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
},
{
"id": "CORE023354D507CC4695844F38B8D1C9AC98",
"name": "sample news content 002",
"type": "sampleNewsType",
"slug": "3000000025000-sample-news-content-002",
"description": "",
"createdDate": "2021-04-20T02:25:46.144Z"
},
{
"id": "CORE3F9CB2F74DC64255AB0D105D1D6AF731",
"name": "sample news content 003",
"type": "sampleNewsType",
"slug": "3000000075000-sample-news-content-003",
"description": "",
"createdDate": "2021-10-28T08:29:08.244Z"
},
{
"id": "COREDF61703477704D26AAA100BEE9B8A057",
"name": "sample news content 004",
"type": "sampleNewsType",
"slug": "3000000070001-sample-news-content-004",
"description": "",
"createdDate": "2021-10-27T07:31:16.608Z"
}
]
}
}
}
[メモ]
sort:
で利用できるのは、id, name, descrpition の3つの標準フィールドです
1.3 GraphQLで指定したアセットタイプのアセットを複数取得し、ソートする。さらに指定した件数のみを取得する
1.2 のクエリに limit:
を追加し、取得するアセット数を指定(制限)します。今回はlimit: 2
と追加し、sampleNewsType
の標準フィールドのname
で昇順ソートし、かつ最初の2件のみを取得します
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {type: {op: EQUALS, value: "sampleNewsType"}},
sort: {name: ASC},
limit: 2
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りです。1.2項で取得した4件のアセットのうち、最初の2件のみが取得できました
{
"data": {
"getItems": {
"totalResults": 4,
"items": [
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
},
{
"id": "CORE023354D507CC4695844F38B8D1C9AC98",
"name": "sample news content 002",
"type": "sampleNewsType",
"slug": "3000000025000-sample-news-content-002",
"description": "",
"createdDate": "2021-04-20T02:25:46.144Z"
}
]
}
}
}
次の2件を取得する場合は、offset:
を利用し、取得するアセット数の開始位置を指定します。今回はoffset: 2
と追加し、sampleNewsType
の標準フィールドのname
で昇順ソートし、開始位置2からアセットを2件を取得します
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {type: {op: EQUALS, value: "sampleNewsType"}},
sort: {name: ASC},
limit: 2,
offset: 2
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りです。先ほど取得したアセットの次のアセットから2件が取得できました
{
"data": {
"getItems": {
"totalResults": 4,
"items": [
{
"id": "CORE3F9CB2F74DC64255AB0D105D1D6AF731",
"name": "sample news content 003",
"type": "sampleNewsType",
"slug": "3000000075000-sample-news-content-003",
"description": "",
"createdDate": "2021-10-28T08:29:08.244Z"
},
{
"id": "COREDF61703477704D26AAA100BEE9B8A057",
"name": "sample news content 004",
"type": "sampleNewsType",
"slug": "3000000070001-sample-news-content-004",
"description": "",
"createdDate": "2021-10-27T07:31:16.608Z"
}
]
}
}
}
1.4 GraphQLで複数のフィルタ条件を組み合わせてアセットを取得する
1.2 のクエリの filter:
に条件を追加します。今回は{name: {op:CONTAINS, value:"001"}}
を追加し、既に定義済のフィルタ条件filter: {type: {op: EQUALS, value: "sampleNewsType"}}
とのAND条件にします
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {
AND:
[
{type: {op: EQUALS, value: "sampleNewsType"}}
{name: {op: CONTAINS, value: "001"}}
]
}
sort: {name: ASC}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りです。sampleNewsTypeのアセットのうち、name
に001
を含むアセットのみが取得できました
{
"data": {
"getItems": {
"totalResults": 1,
"items": [
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
}
]
}
}
}
また、ORでフィルタ条件を組みわせることもできます。例えば、アセットタイプがsampleNewsType
もしくはImage
のアセットを取得する場合は、以下のクエリを実行します
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
filter: {
OR:
[
{type: {op: EQUALS, value: "sampleNewsType"}}
{type: {op: EQUALS, value: "Image"}}
]
}
sort: {name: ASC}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りです。sampleNewsTypeのコンテンツ・アイテム4件とImageのデジタル・アセット1件の合計5件のアセットが取得できました
{
"data": {
"getItems": {
"totalResults": 5,
"items": [
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
},
{
"id": "CORE023354D507CC4695844F38B8D1C9AC98",
"name": "sample news content 002",
"type": "sampleNewsType",
"slug": "3000000025000-sample-news-content-002",
"description": "",
"createdDate": "2021-04-20T02:25:46.144Z"
},
{
"id": "CORE3F9CB2F74DC64255AB0D105D1D6AF731",
"name": "sample news content 003",
"type": "sampleNewsType",
"slug": "3000000075000-sample-news-content-003",
"description": "",
"createdDate": "2021-10-28T08:29:08.244Z"
},
{
"id": "COREDF61703477704D26AAA100BEE9B8A057",
"name": "sample news content 004",
"type": "sampleNewsType",
"slug": "3000000070001-sample-news-content-004",
"description": "",
"createdDate": "2021-10-27T07:31:16.608Z"
},
{
"id": "CONT46BDD6D750904A4695CE385FB988DDB6",
filter:
で指定できる条件は AND OR NOR の3つです。また、検索条件としてEQUALSやCONTAINSなどの検索条件は、値のタイプ(StringやIDなど)により異なります。詳細は、以下製品ドキュメントをご確認ください
1.5 GraphQLで特定のキーワードを含むアセットを取得する
query
を利用し、特定のキーワードを含むアセットを取得します。今回はquery: {value: "001"}
を追加し、001
をフィールドに含むアセットを取得します
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
query: {value: "001"},
sort: {name: ASC}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
実行結果は以下の通りです。001
のキーワードを含むアセット1件のみが取得できました
{
"data": {
"getItems": {
"totalResults": 1,
"items": [
{
"id": "CORE5FD129FC39DD4F3097FC1223469BD7A7",
"name": "sample news content 001",
"type": "sampleNewsType",
"slug": "3000000015000-sample-news-content-001",
"description": "",
"createdDate": "2021-04-20T02:25:35.333Z"
}
]
}
}
}
なお、query
で指定したキーワードは、オフィス文書などのファイルの全文検索にも対応します。例えば、以下のようなクエリを実行すると
{
getItems(channelToken: "1baae0944c004a7b90f203f962b6453e",
query: {value: "インテリジェント"}
sort: {name: ASC}
) {
totalResults
items {
id
name
type
slug
description
createdDate
}
}
}
以下の結果が取得されます。この場合、OCM概要.pptx
のPowerPoint文書にインテリジェント
というキーワードが含まれています
{
"data": {
"getItems": {
"totalResults": 1,
"items": [
{
"id": "CONT9F912E48BD51416CBBC83E9A604E02E0",
"name": "OCM概要.pptx",
"type": "File",
"slug": "file-1481786186723-ocm概要",
"description": "",
"createdDate": "2021-09-29T05:15:31.333Z"
}
]
}
}
}
まとめ
この記事では、GraphQL で Oracle Content Management で登録・公開される複数アイテム(アセット)の情報を取得する方法を紹介しました
なお、以下の製品ドキュメントにて詳しく説明されています。あわせてご確認いただければ幸いです
(参考)OCMの製品ドキュメント
- Oracle Content Management 製品ドキュメント(英語)
-
Oracle Content Management 製品ドキュメント(日本語翻訳版)
製品ドキュメントの英語原本と日本語翻訳版です。翻訳されるまでに時差がありますので、最新情報の確認は 英語版のドキュメントをご利用ください