HTTP API

テンプレート印刷は HTTP API を通じてドキュメントのレンダリングとダウンロードを直接トリガーできます。詳細ブロックでもテーブルブロックでも、本質的には現在のビジネスリソースに対して templatePrint アクションを実行します。

curl -X POST \
	-H "Authorization: Bearer <JWT>" \
	-H "Content-Type: application/json" \
	"http://localhost:3000/api/<resource_name>:templatePrint" \
	--data-raw '{...}'

説明:

  • <resource_name> は現在のデータテーブルに対応するリソース名です。
  • インターフェースは JSON データではなく、バイナリファイルストリームを返します。
  • 呼び出し元は、現在のリソースのクエリ権限と、対応するテンプレート印刷ボタンの使用権限を持っている必要があります。
  • インターフェースの呼び出しには、Authorization リクエストヘッダーを通じてユーザーログインに基づく JWT トークンを渡す必要があります。渡さない場合、アクセスが拒否されます。

リクエストボディパラメータ

パラメータ必須説明
templateNamestringはいテンプレート名。テンプレート管理で設定されたテンプレート識別子に対応します。
blockNamestringはいブロックタイプ。テーブルブロックの場合は table、詳細ブロックの場合は details を渡します。
timezonestringいいえタイムゾーン。例:Asia/Shanghai。テンプレート内の日時レンダリングに使用されます。
uidstringいいえテンプレート印刷ボタンの schema uid。権限検証に使用されます。
convertedToPDFbooleanいいえPDF に変換するかどうか。true を渡すと .pdf ファイルが返されます。
queryParamsobjectいいえ下層のデータクエリに渡すパラメータです。
queryParams.pagenumber | nullいいえページ番号。null に設定するとページ単位の切り出しを行いません。
queryParams.pageSizenumber | nullいいえ1ページあたりの件数。null に設定するとページ単位の切り出しを行いません。
queryParams.filterobjectいいえフィルター条件。ACL の固定フィルター条件と自動的にマージされます。
queryParams.appendsstring[]いいえ追加でクエリするリレーションフィールドです。
queryParams.filterByTkstring | objectいいえ詳細ブロックでよく使用され、主キー値を指定します。
queryParams.sort 等その他のパラメータanyいいえその他のクエリパラメータは、下層のリソースクエリにそのまま渡されます。

テーブルブロック

テーブルブロックは同じインターフェースを使用し、blockName: "table" でリスト印刷モードを指定します。サーバー側はリソースに対して find クエリを実行し、結果の配列をテンプレートに渡します。

選択したレコードまたは現在のページの結果を印刷

テーブルブロックから一部のレコードを選択して印刷する場合、または現在のページのページネーションコンテキストを保持して印刷する場合に適用されます。一般的な方法は以下の通りです:

  • queryParams.pagequeryParams.pageSize を現在のテーブルのページ番号と1ページあたりの件数に設定します。
  • 選択したレコードの主キーを filter.id.$in 条件に結合します。
curl 'https://<your-host>/api/<resource_name>:templatePrint' \
	-H 'Authorization: Bearer <JWT>' \
	-H 'Content-Type: application/json' \
	--data-raw '{
		"queryParams": {
			"pageSize": 20,
			"filter": {
				"id": {
					"$in": [1, 2]
				}
			},
			"appends": [],
			"page": 1
		},
		"templateName": "9012hy7ahn4",
		"blockName": "table",
		"timezone": "Asia/Shanghai",
		"uid": "ixs3fx3x6is"
	}'

このリクエストの意味は以下の通りです:

  • blockNametable の場合、リストデータでテンプレートをレンダリングします。
  • filter.id.$in は印刷するレコードの集合を指定します。
  • pagepageSize は現在のページネーションコンテキストを保持し、UI の動作と一致させます。
  • appends は必要に応じてリレーションフィールドを追加できます。

条件に一致するすべてのデータを印刷

テーブルブロックの「全レコードを印刷」をクリックした際の呼び出し方法に適用されます。この場合、現在のページでの切り出しは行わず、現在のフィルター条件に一致するすべてのデータを直接取得します。

重要なポイントは、queryParams.pagequeryParams.pageSize を明示的に null に設定することです。

curl 'https://<your-host>/api/<resource_name>:templatePrint' \
	-H 'Authorization: Bearer <JWT>' \
	-H 'Content-Type: application/json' \
	--data-raw '{
		"queryParams": {
			"pageSize": null,
			"filter": {},
			"appends": [],
			"page": null
		},
		"templateName": "9012hy7ahn4",
		"blockName": "table",
		"timezone": "Asia/Shanghai",
		"uid": "ixs3fx3x6is"
	}'

このリクエストの意味は以下の通りです:

  • page: nullpageSize: null はページネーション制限を解除することを意味します。
  • filter: {} は追加のフィルター条件を付加しないことを意味します。UI 上にフィルター条件がある場合は、ここに直接入れることもできます。
  • サーバー側は条件に一致するすべてのデータをクエリし、テンプレートを一括レンダリングします。

注意:テーブルブロックは1回の印刷で最大 300 件のレコードまで対応しています。制限を超えた場合、インターフェースは 400 エラーを返します。

詳細ブロック

詳細ブロックも templatePrint アクションを使用しますが、通常は以下のパラメータを渡します:

  • blockName: "details"
  • queryParams.filterByTk で現在のレコードの主キーを指定
  • queryParams.appends で追加クエリするリレーションフィールドを指定

サーバー側はリソースに対して findOne クエリを実行し、結果オブジェクトをテンプレートに渡します。

レスポンス

呼び出しが成功すると、インターフェースはファイルストリームを直接返します。典型的なレスポンスヘッダーは以下の通りです:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="<template-title>-<suffix>.<ext>"

説明:

  • convertedToPDFtrue の場合、返されるファイルの拡張子は .pdf です。
  • それ以外の場合、テンプレートの元の種類に対応するファイル(.docx.xlsx.pptx など)が返されます。
  • フロントエンドは通常、Content-Disposition のファイル名に基づいてブラウザのダウンロードをトリガーします。

その他のリソース