ドキュメントエクスポート用カスタムテンプレート
Requirements Portalのドキュメントエクスポートウィザードを使えば、要件やV&Vアクティビティから、編集可能なMicrosoft Word *.docxファイルを直接作成できます。定義済みのテンプレートを使用することも、独自のテンプレートをアップロードすることもできます。このウィザードは、Jinjaテンプレートエンジンを活用するPython-Docx-Templateライブラリを使用しています。この2つを組み合わせることで、カスタムテンプレートを作成できます。
Python-Docx-Templateライブラリ
Python-Docx-Templateライブラリは、Python-Docxライブラリの機能を拡張する強力なツールです。Jinjaテンプレートエンジンを組み込んでおり、Wordファイル内でコンテンツを動的に生成できます。つまり、変数、ループ、条件分岐を使用して、ドキュメントにデータをその場で挿入できます。いわば、Wordドキュメントにエスプレッソを一杯注いで、活力を与えるようなものです。
エクスポートテンプレートの管理
Requirements Portalインスタンスで使用できるテンプレートは、Settings – Export templates ページに一覧表示されます(右上の
アイコンをクリックし、表示されるメニューからSettingsを選択して、左側のペインの一覧から Export templatesを選択するとアクセスできます)。
-
デフォルトでは、要件ドキュメントのエクスポート用に3つ、V&Vアクティビティのドキュメントのエクスポート用に3つ、合計6つのテンプレートが用意されています。
-
要件のエクスポートテンプレートの詳細については、 ドキュメントのエクスポートページを参照してください。
-
V&Vアクティビティのエクスポートテンプレートの詳細については、 ドキュメントのエクスポートページを参照してください。
-
-
新しいユーザー定義テンプレートを追加するには、ページ左上の
ボタンをクリックします。表示される Add templateウィンドウで、 Applicable objectsドロップダウンを使用して、新しいテンプレートをRequirementsとV&V Activitiesのどちらに適用するかを選択し、 Select template領域でテンプレートファイルを選択します。
ダイアログの
ボタンをクリックすると、テンプレートが追加されます。追加したテンプレートは Export templatesページの一覧に表示され、ドキュメントのエクスポートに使用できるようになります。
-
どのテンプレートもファイルをダウンロードできます。ダウンロードするには、 対象のテンプレートのName列にある
ボタンをクリックし、Downloadコマンドを選択します。 ブラウザーの設定に応じて、ファイルは指定済みの場所に自動的にダウンロードされるか、ハードドライブ上の保存先を指定するよう求められます。
-
ユーザー定義テンプレートは、新しいテンプレートファイルで上書きできます。上書きするには、対象のテンプレートのName列にある
ボタンをクリックし、表示されるメニューからOverwrite Templateコマンドを選択します。開いた Overwrite templateウィンドウでテンプレートの適用対象を指定し、 新しいファイルを選択します。 I confirm I want to overwriteオプションを有効にして、
ボタンをクリックすると、処理が完了します。
付録 – 要件エクスポートテンプレートのデータオブジェクト構造
以下は、要件エクスポートテンプレートが情報を取得するオブジェクトの基本構造です。
要件エクスポートテンプレート – データオブジェクト構造
{
"specifications": [
{
"id": "number",
"name": "string",
"description": "string",
"requirements": [
{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string",
"rationale": "RichText",
"images": ["image"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "string",
"component_vms": [{
"name": "string",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["string"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "string",
"compliance": "string",
"compliance_comment": "string",
"tags": ["string"],
"parents": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"children": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"owner": {
"user": {
"username": "string",
"first_name": "string",
"last_name": "string",
"groups": ["string"]
},
"group": {
"name": "string",
"users": ["string"]
}
},
"files": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"position": "number",
"verification_items_verified": "number",
"verification_items_total": "number",
"verification_items": [{
"status": "string",
"component": "string",
"tags": ["string"],
"activity": {
"name": "string",
"verification_methods": ["string"]
},
"last_item_run": {
"status": "string",
"comment": "string"
}
}],
"linked_components": [{
"id": "number",
"name": "string",
"description": "string",
"valis": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"textvalis": [{
"id": "number",
"name": "string",
"text": "string"
}],
"matrices": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"datevalis": [{
"id": "number",
"name": "string",
"date": "string"
}],
"creator": "string",
"attachments": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "string"
}
}
],
"requirements": [
{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string",
"rationale": "RichText",
"images": ["image"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "string",
"component_vms": [{
"name": "string",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["string"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "string",
"compliance": "string",
"compliance_comment": "string",
"tags": ["string"],
"parents": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"children": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"owner": {
"user": {
"username": "string",
"first_name": "string",
"last_name": "string",
"groups": ["string"]
},
"group": {
"name": "string",
"users": ["string"]
}
},
"files": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"position": "number",
"verification_items_verified": "number",
"verification_items_total": "number",
"verification_items": [{
"status": "string",
"component": "string",
"tags": ["string"],
"activity": {
"name": "string",
"verification_methods": ["string"]
},
"last_item_run": {
"status": "string",
"comment": "string"
}
}],
"linked_components": [{
"id": "number",
"name": "string",
"valis": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"textvalis": [{
"id": "number",
"name": "string",
"text": "string"
}],
"matrices": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"datevalis": [{
"id": "number",
"name": "string",
"date": "string"
}],
"creator": "string",
"attachments": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}]
}]
}
],
"requirements_groups": [
{
"id": "number",
"name": "string",
"description": "string",
"specification_id": "number",
"requirements": [
{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string",
"rationale": "RichText",
"images": ["image"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "string",
"component_vms": [{
"name": "string",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["string"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "string",
"compliance": "string",
"compliance_comment": "string",
"tags": ["string"],
"parents": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"children": [{
"id": "string",
"identifier": "string",
"text": "RichText",
"title": "string"
}],
"owner": {
"user": {
"username": "string",
"first_name": "string",
"last_name": "string",
"groups": ["string"]
},
"group": {
"name": "string",
"users": ["string"]
}
},
"files": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"position": "number",
"verification_items_verified": "number",
"verification_items_total": "number",
"verification_items": [{
"status": "string",
"component": "string",
"tags": ["string"],
"activity": {
"name": "string",
"verification_methods": ["string"]
},
"last_item_run": {
"status": "string",
"comment": "string"
}
}],
"linked_components": [{
"id": "number",
"name": "string",
"valis": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"textvalis": [{
"id": "number",
"name": "string",
"text": "string"
}],
"matrices": [{
"id": "number",
"name": "string",
"value": "string",
"formula": "string"
}],
"datevalis": [{
"id": "number",
"name": "string",
"date": "string"
}],
"creator": "string",
"attachments": [{
"name": "string",
"description": "string",
"version": "string",
"is_reference": "boolean",
"tags": ["string"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "string"
}
}
],
"timestamp": "datetime",
"template_name": "string",
"verification_and_validation_methods": [{
"id": "number",
"name": "string",
"description": "string"
}]
}
フィールドの並べ替え
JinjaテンプレートドキュメントでSort関数を使用すると、要件を並べ替えることができます。たとえば、|sort(attribute='identifier') を追加すると、識別子の列に基づいて要件が英数字順に並べ替えられます。
例:
{% for requirement in requirements|selectattr("specification_id", "equalto", specification.id)|selectattr("group_id", "none") |sort(attribute='identifier') -%}
カスタム列
現在のドキュメントエクスポーターでは、カスタム列の値を簡単にエクスポートできます。単純なテキスト形式のカスタム列には、次の汎用的な構造を使用できます。
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Name of Custom Column のテキストは、必ず列ヘッダーに表示されている実際の列名に置き換えてください。
カスタム列がテキスト形式ではなく複数選択形式の場合は、次のコードを使用し、用途に合わせて変更できます。
{%- if requirement.custom_fields -%}
{%- set additional_info_values = [] -%}
{%- set category_values = [] -%}
{%- set additional_info_custom_fields = requirement.custom_fields | selectattr('field', 'equalto', 'Additional Information') -%}
{% for custom_field in additional_info_custom_fields -%}
{%- set additional_info_values = additional_info_values + custom_field.value -%}
{% endfor -%}
{%- set category_custom_fields = requirement.custom_fields | selectattr('field', 'equalto', 'Category') -%}
{% for custom_field in category_custom_fields -%}
{%- set category_values = category_values + custom_field.value -%}
{% endfor -%}
{%- set additional_info_string = additional_info_values | join(';') -%}
{%- set category_string = category_info_values | join(';') -%}
{%- endif -%}
付録 – V&Vアクティビティエクスポートテンプレートのデータオブジェクト構造
以下は、V&Vアクティビティエクスポートテンプレートが情報を取得するオブジェクトの基本構造です。
V&Vアクティビティエクスポートテンプレート – データオブジェクト構造
# TOP LEVEL
{
activities: [{}] # List of all Activities
folders: [{
name: string
activities: [{}] # List of Activities
}]
timestamp: datetime
template_name: string
}
# Activity
{
id: number
name: string
description: string
expected_results: string
tags: [string]
verification_methods: [{
name: string
description: string
}]
owner: User or Group
custom_fields: [] # List of CustomFields
approvals: boolean
items: [{}] # List of VVItems
step_definitions: [{}] # List of StepDefinitions
runs: [{}] # List of ActivityRuns
}
# VVItem
{
id: number
requirement_identifier: string
component: { # Same as linked components in the reqs doc export
id: number
name: string
valis: [{
id: number
name: string
value: string
formula: string
}]
textvalis: [{
id: number
name: string
text: string
}]
matrices: [{
id: number
name: string
value: string
formula: string
}]
datevalis: [{
id: number
name: string
date: string
}]
creator: string
attachments: [{
name: string
description: string
version: string
is_reference: boolean
tags: [string]
}]
}
compliance: string
compliance_comment: string
last_item_run: {} # VVItemRun
last_item_run_status: str
item_runs: [{}] # List of VVItemRuns
}
# StepDefinition
{
id: int
activity_id: int
step_number: int
position: float
full_step_number: str
full_step_path: str
parent_step_id: int
name: string
description: string
expected_results: string
tags: [string]
item_ids: [] # List of VVItems ids
}
# ActivityRun
{
id: int
name: string
description: string
timestamp: string
start_date: string # Format use same as in reqs doc export
finish_date: string
completion_state: int
completed_on: string
completed_by: User
activity_id: int
default_run: bool
position: float
steps_synced: bool
expected_results: string
evidence: string # File/Doc name
custom_fields: [] # List of CustomFields
tags: [string]
run_executor: {} # User or Group
approver: {} # User or Group
approved: boolean
approved_by: User
approved_at: string
item_runs: [] # List of VVItemRuns
step_runs: [{}] # List of VVStepRuns
}
# VVItemRun
{
id: int
status: string
verified_by: User
activity_run_id: int
status: "status-display-name"
comment: string
serial_number: string
step_run_id: int # StepRun
verification_item:{} # VVItem
verification_item_requirement_identifier: string
verification_item_component_name: string
}
# StepRun
{
id: int
name: string
comment: string
status: string
description: string
activity_run_id: int
full_step_number: str
step_number: int
position: float
full_step_run_path: str
parent_step_run_id: int
expected_results: string
tags: [string]
item_run_ids: [] # List of VVItemRun ids
item_requirement_identifiers: str
}

