Benutzerdefinierte Vorlagen für den Dokumentexport
Der Assistent für den Dokumentexport im Requirements & Systems Portal ist Ihre erste Anlaufstelle, um bearbeitbare Microsoft Word *.docx-Dateien direkt aus Ihren Anforderungen und V&V-Aktivitäten zu erstellen. Sie können vordefinierte Vorlagen verwenden oder eigene Vorlagen hochladen. Der Assistent basiert auf der Python-Docx-Template-Bibliothek, die wiederum die Jinja Templating Engine nutzt. Dieses leistungsstarke Duo ermöglicht Ihnen die Erstellung benutzerdefinierter Vorlagen.
Python-Docx-Template-Bibliothek
Die Python-Docx-Template-Bibliothek ist ein leistungsstarkes Werkzeug, das die Funktionalität der Python-Docx-Bibliothek erweitert. Sie integriert die Jinja Templating Engine und ermöglicht dadurch die dynamische Generierung von Inhalten in Ihren Word-Dateien. Das bedeutet, dass Sie Variablen, Schleifen und Bedingungen verwenden können, um Ihr Dokument zur Laufzeit mit Daten zu befüllen. Im Grunde ist es, als würden Sie Ihrem Word-Dokument einen Espresso verpassen.
Exportvorlagen verwalten
Die für Ihre Requirements & Systems Portal-Instanz verfügbaren Vorlagen sind auf der Seite Export templates aufgeführt » Settings » Export templates).
-
Standardmäßig werden sechs Vorlagen bereitgestellt – drei für den Export von Anforderungsdokumenten und drei für den Export von V&V-Aktivitätsdokumenten.
-
Weitere Informationen zu Exportvorlagen für Anforderungen finden Sie auf der Seite Document Export.
-
Weitere Informationen zu Exportvorlagen für V&V-Aktivitäten finden Sie auf der Seite Document Export.
-
-
Um eine neue benutzerdefinierte Vorlage hinzuzufügen, klicken Sie oben rechts auf der Seite auf die Schaltfläche
. Wählen Sie im daraufhin angezeigten Fenster Add template über die Dropdown-Liste Applicable objects aus, ob die neue Vorlage auf Requirements oder V&V Activities angewendet werden soll, und verwenden Sie dann den Bereich Select template, um die Vorlagendatei auszuwählen.
Klicken Sie im Dialogfeld auf die Schaltfläche
, um die Vorlage hinzuzufügen. Sie wird anschließend in der Liste auf der Seite Export templates angezeigt und kann dann für den Dokumentexport verwendet werden.
-
Die Datei jeder Vorlage kann heruntergeladen werden. Klicken Sie dazu im Name-Bereich der gewünschten Vorlage auf die Schaltfläche
und wählen Sie den Befehl Download aus. Abhängig von Ihren persönlichen Browsereinstellungen lädt Ihr Browser die Datei entweder automatisch an einen vordefinierten Speicherort herunter oder fragt Sie, wo sie auf Ihrer Festplatte gespeichert werden soll.
-
Eine benutzerdefinierte Vorlage kann durch eine neue Vorlagendatei überschrieben werden. Klicken Sie dazu im Name-Bereich der gewünschten Vorlage auf die Schaltfläche
und wählen Sie im angezeigten Menü den Befehl Overwrite Template aus. Verwenden Sie das daraufhin geöffnete Fenster Overwrite template, um die Anwendbarkeit der Vorlage festzulegen und die neue Datei auszuwählen. Aktivieren Sie die Option I confirm I want to overwrite und klicken Sie auf die Schaltfläche
, um den Vorgang abzuschließen.
Anhang – Datenobjektstruktur von Anforderungsexportvorlagen
Hier ist die Grundstruktur des Objekts, aus dem Ihre Anforderungsexportvorlagen Informationen beziehen.
Requirement Export Templates – Data Object Structure
{
"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"
}]
}
Sortierung der Felder
Sie können die Anforderungen im Jinja-Vorlagendokument mit der Funktion Sort sortieren. Zum Beispiel können Sie |sort(attribute='identifier') hinzufügen, wobei die Anforderungen alphanumerisch nach der Kennungs-Spalte sortiert werden.
Beispiel:
{% for requirement in requirements|selectattr("specification_id", "equalto", specification.id)|selectattr("group_id", "none") |sort(attribute='identifier') -%}
Benutzerdefinierte Spalten
Mit dem aktuellen Dokumentexporter können Sie die Werte benutzerdefinierter Spalten einfach exportieren. Für eine benutzerdefinierte Spalte auf Basis von einfachem Text können Sie die folgende generische Struktur verwenden:
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Ersetzen Sie dabei unbedingt den Text Name of Custom Column durch den tatsächlichen Namen der Spalte, wie er in der Spaltenüberschrift angegeben ist.
Wenn die benutzerdefinierte Spalte kein Textfeld ist, sondern eine Mehrfachauswahl, kann der Benutzer den folgenden Code verwenden und für seinen Anwendungsfall anpassen.
{%- 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 -%}
Anhang – Datenobjektstruktur von V&V-Aktivitätsexportvorlagen
Hier ist die Grundstruktur des Objekts, aus dem Ihre V&V-Aktivitätsexportvorlagen Informationen beziehen.
V&V Activity Export Templates – Data Object Structure
# 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
}