Benutzerdefinierte Vorlagen für den Dokumentexport
Mit dem Dokumentexport-Assistenten von Requirements Portal erstellen Sie im Handumdrehen bearbeitbare Microsoft Word *.docx-Dateien direkt aus Ihren Anforderungen und V&V-Aktivitäten. Sie können vordefinierte Vorlagen verwenden oder eigene Vorlagen hochladen. Der Assistent basiert auf der Bibliothek Python-Docx-Template, die wiederum die Jinja-Template-Engine nutzt. Mit diesem leistungsstarken Duo können Sie individuelle Vorlagen erstellen.
Python-Docx-Template-Bibliothek
Die Python-Docx-Template-Bibliothek ist ein leistungsstarkes Werkzeug, das den Funktionsumfang der Python-Docx-Bibliothek erweitert. Sie integriert die Jinja-Template-Engine und ermöglicht so die dynamische Generierung von Inhalten in Ihren Word-Dateien. Das bedeutet, dass Sie Variablen, Schleifen und Bedingungen verwenden können, um Ihr Dokument dynamisch mit Daten zu füllen. Im Grunde ist das wie ein Espresso für Ihr Word-Dokument.
Exportvorlagen verwalten
Die für Ihre Requirements Portal-Instanz verfügbaren Vorlagen werden auf der Seite Settings – Export templates aufgelistet. Sie erreichen diese Seite, indem Sie oben rechts auf das Symbol
klicken, im angezeigten Menü Settings und anschließend in der Liste im linken Bereich Export templates auswählen.
-
Standardmäßig stehen sechs Vorlagen zur Verfügung – 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 Dokumentexport.
-
Weitere Informationen zu Exportvorlagen für V&V-Aktivitäten finden Sie auf der Seite Dokumentexport.
-
-
Um eine neue benutzerdefinierte Vorlage hinzuzufügen, klicken Sie oben links auf der Seite auf die Schaltfläche
. Wählen Sie im daraufhin angezeigten Fenster Add template über das Dropdown-Menü Applicable objects aus, ob die neue Vorlage auf Requirements oder V&V Activities angewendet werden soll, und wählen Sie anschließend im Bereich Select template die Vorlagendatei aus.
Klicken Sie im Dialog auf die Schaltfläche
, um die Vorlage hinzuzufügen. Sie wird in der Liste auf der Seite Export templates angezeigt und kann anschließend für den Dokumentexport verwendet werden.
-
Die Datei jeder Vorlage kann heruntergeladen werden. Klicken Sie dazu in der Spalte Name der gewünschten Vorlage auf die Schaltfläche
und wählen Sie den Befehl Download aus. Je nach Ihren persönlichen Browsereinstellungen lädt Ihr Browser die Datei entweder automatisch an einen vordefinierten Speicherort herunter oder fragt Sie, wo Sie sie auf Ihrer Festplatte speichern möchten.
-
Eine benutzerdefinierte Vorlage kann durch eine neue Vorlagendatei überschrieben werden. Klicken Sie dazu in der Spalte Name der gewünschten Vorlage auf die Schaltfläche
und wählen Sie im angezeigten Menü den Befehl Overwrite Template aus. Legen Sie im daraufhin geöffneten Fenster Overwrite template den Anwendungsbereich der Vorlage fest und wählen Sie die neue Datei aus. Aktivieren Sie die Option I confirm I want to overwrite und klicken Sie auf die Schaltfläche
, um den Vorgang abzuschließen.
Anhang – Datenobjektstruktur der Exportvorlagen für Anforderungen
Hier sehen Sie die grundlegende Struktur des Objekts, aus dem Ihre Exportvorlagen für Anforderungen Informationen abrufen.
Exportvorlagen für Anforderungen – Datenobjektstruktur
{
"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"
}]
}
Felder sortieren
Sie können die Anforderungen mithilfe der Funktion Sort im Jinja-Vorlagendokument sortieren. Beispielsweise können Sie |sort(attribute='identifier') hinzufügen, um die Anforderungen anhand der Kennungsspalte alphanumerisch zu sortieren.
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 ganz einfach exportieren. Für eine einfache textbasierte benutzerdefinierte Spalte können Sie die folgende allgemeine Struktur verwenden:
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Ersetzen Sie den Text Name of Custom Column unbedingt durch den tatsächlichen Namen der Spalte, der in der Spaltenüberschrift angegeben ist.
Wenn die benutzerdefinierte Spalte keinen Text, sondern eine Mehrfachauswahl enthält, können Sie den folgenden Code verwenden und an Ihren 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 der Exportvorlagen für V&V-Aktivitäten
Hier sehen Sie die grundlegende Struktur des Objekts, aus dem Ihre Exportvorlagen für V&V-Aktivitäten Informationen abrufen.
Exportvorlagen für V&V-Aktivitäten – Datenobjektstruktur
# 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
}

