Modèles personnalisés pour l'exportation de documents
L'assistant d'exportation de documents d'Requirements Portal vous permet de créer des fichiers Microsoft Word éditables directement à partir de vos activités d'exigences et de vérification *.docx directement à partir de vos exigences et de vos activités de V&V. Vous pouvez utiliser des modèles prédéfinis ou télécharger vos propres modèles. L'assistant est alimenté par la bibliothèque Python-Docx-Template qui, à son tour, exploite le moteur de modélisation Jinja. Ce duo dynamique vous permet de créer des modèles personnalisés.
Bibliothèque Python-Docx-Template
La bibliothèque Python-Docx-Template est un outil puissant qui étend les fonctionnalités de la bibliothèque Python-Docx. Elle intègre le moteur de création de modèles Jinja, ce qui permet de générer du contenu dynamique dans vos fichiers Word. Cela signifie que vous pouvez utiliser des variables, des boucles et des conditionnelles pour alimenter votre document en données à la volée. En fait, c'est comme si vous donniez à votre document Word une dose d'expresso.
Gestion des modèles d'exportation
Les modèles disponibles pour votre instance du portail d'exigences sont listés sur la page Export templates » Settings » Export templates).
-
Par défaut, six modèles sont fournis - trois pour l'exportation du document d'exigences et trois pour l'exportation du document d'activité de V&V.
-
Pour plus d'informations sur les modèles d'exportation d'exigences, voir la page Exportation de documents.
-
Pour plus d'informations sur les modèles d'exportation des activités de V&V, voir la page Exportation de documents.
-
-
Pour ajouter un nouveau modèle défini par l'utilisateur, cliquez sur le bouton
en haut à droite de la page. Dans la fenêtre Add template qui apparaît, choisissez si le nouveau modèle doit être appliqué à Requirements ou V&V Activities à l'aide du menu déroulant Applicable objects puis utilisez la région Select template pour sélectionner le fichier de modèle.
Cliquez sur le bouton
dans la boîte de dialogue pour ajouter le modèle. Il apparaîtra dans la liste de la page Export templates et peut ensuite être utilisé dans l'exportation de documents.
-
Le fichier de n'importe quel modèle peut être téléchargé. Pour ce faire, cliquez sur le bouton
dans la colonne du modèle souhaité et sélectionnez le fichier à télécharger Name du modèle souhaité et sélectionnez la commande Download et sélectionnez la commande Selon les paramètres de votre navigateur, celui-ci téléchargera automatiquement le fichier à un emplacement prédéfini ou vous demandera où le stocker sur votre disque dur.
-
Un modèle défini par l'utilisateur peut être remplacé par un nouveau fichier modèle. Pour ce faire, cliquez sur le bouton
dans la colonne Name du modèle souhaité et sélectionnez la commande Overwrite Template dans le menu qui apparaît. Utilisez la fenêtre Overwrite template qui s'ouvre pour définir l'applicabilité du modèle et sélectionner le nouveau fichier. Activez l'option I confirm I want to overwrite et cliquez sur le bouton
pour terminer le processus.
Annexe - Structure des objets de données des modèles d'exportation d'exigences
Voici la structure de base de l'objet à partir duquel vos modèles d'exportation d'exigences extrairont des informations.
Requirement Export Templates – Data Object Structure
{
"specifications" : [
{
"id" : "number",
"name" : "chaîne",
"description" : "chaîne",
"exigences" : [
{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "chaîne",
"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",
"identifiant" : "string",
"text" : "RichText",
"title" : "string"
}],
"children" : [{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "string"
}],
"owner" : {
"user" : {
"username" : "string",
"first_name" : "string",
"last_name" : "chaîne",
"groupes" : ["string"]
},
"groupe" : {
"name" : "chaîne",
"utilisateurs" : ["string"]
}
},
"fichiers" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}],
"custom_fields" : [{
"field" : "string",
"value" : ["string"]
}],
"position" : "nombre",
"verification_items_verified" : "nombre",
"verification_items_total" : "nombre",
"verification_items" : [{
"status" : "string",
"component" : "string",
"tags" : ["string"],
"activity" : {
"name" : "string",
"verification_methods" : ["string"]
},
"last_item_run" : {
"status" : "string",
"commentaire" : "chaîne"
}
}],
"linked_components" : [{
"id" : "number",
"name" : "string",
"description" : "chaîne",
"valis" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"textvalis" : [{
"id" : "number",
"name" : "chaîne",
"text" : "chaîne"
}],
"matrices" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"datevalis" : [{
"id" : "number",
"name" : "chaîne",
"date" : "chaîne"
}],
"creator" : "chaîne",
"attachments" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}]
}]
}
],
"content_type" : {
"id" : "number",
"name" : "string"
}
}
],
"exigences" : [
{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "chaîne",
"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",
"identifiant" : "string",
"text" : "RichText",
"title" : "string"
}],
"children" : [{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "string"
}],
"owner" : {
"user" : {
"username" : "string",
"first_name" : "string",
"last_name" : "chaîne",
"groupes" : ["string"]
},
"groupe" : {
"name" : "chaîne",
"utilisateurs" : ["string"]
}
},
"fichiers" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}],
"custom_fields" : [{
"field" : "string",
"value" : ["string"]
}],
"position" : "nombre",
"verification_items_verified" : "nombre",
"verification_items_total" : "nombre",
"verification_items" : [{
"status" : "string",
"component" : "string",
"tags" : ["string"],
"activity" : {
"name" : "string",
"verification_methods" : ["string"]
},
"last_item_run" : {
"status" : "string",
"commentaire" : "chaîne"
}
}],
"linked_components" : [{
"id" : "number",
"name" : "string",
"valis" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"textvalis" : [{
"id" : "number",
"name" : "chaîne",
"text" : "chaîne"
}],
"matrices" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"datevalis" : [{
"id" : "number",
"name" : "chaîne",
"date" : "chaîne"
}],
"creator" : "chaîne",
"attachments" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}]
}]
}
],
"requirements_groups" : [
{
"id" : "number",
"name" : "chaîne",
"description" : "string",
"specification_id" : "number",
"requirements" : [
{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "chaîne",
"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",
"identifiant" : "string",
"text" : "RichText",
"title" : "string"
}],
"children" : [{
"id" : "string",
"identifier" : "string",
"text" : "RichText",
"title" : "string"
}],
"owner" : {
"user" : {
"username" : "string",
"first_name" : "string",
"last_name" : "chaîne",
"groupes" : ["string"]
},
"groupe" : {
"name" : "chaîne",
"utilisateurs" : ["string"]
}
},
"fichiers" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}],
"custom_fields" : [{
"field" : "string",
"value" : ["string"]
}],
"position" : "nombre",
"verification_items_verified" : "nombre",
"verification_items_total" : "nombre",
"verification_items" : [{
"status" : "string",
"component" : "string",
"tags" : ["string"],
"activity" : {
"name" : "string",
"verification_methods" : ["string"]
},
"last_item_run" : {
"status" : "string",
"commentaire" : "chaîne"
}
}],
"linked_components" : [{
"id" : "number",
"name" : "string",
"valis" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"textvalis" : [{
"id" : "number",
"name" : "chaîne",
"text" : "chaîne"
}],
"matrices" : [{
"id" : "number",
"name" : "string",
"value" : "chaîne",
"formule" : "chaîne"
}],
"datevalis" : [{
"id" : "number",
"name" : "chaîne",
"date" : "chaîne"
}],
"creator" : "chaîne",
"attachments" : [{
"name" : "chaîne",
"description" : "chaîne",
"version" : "string",
"is_reference" : "booléen",
"tags" : ["string"]
}]
}]
}
],
"content_type" : {
"id" : "number",
"name" : "string"
}
}
],
"timestamp" : "datetime",
"template_name" : "string",
"verification_and_validation_methods" : [{
"id" : "number",
"name" : "chaîne",
"description" : "chaîne"
}]
}
Tri des champs
Vous pouvez trier les exigences à l'aide de la fonction Sort dans le modèle de document Jinja. Par exemple, vous pouvez ajouter |sort(attribute='identifier') où les exigences sont triées par ordre alphanumérique dans la colonne de l'identifiant.
Exemple :
{% for requirement in requirements|selectattr("specification_id", "equalto", specification.id)|selectattr("group_id", "none") |sort(attribute='identifier') -%}
Colonnes personnalisées
L'exportateur de documents actuel vous permet d'exporter facilement les valeurs des colonnes personnalisées. Pour une simple colonne personnalisée basée sur du texte, vous pouvez utiliser la structure générique suivante :
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Veillez à remplacer le Name of Custom Column par le nom réel de la colonne indiqué dans l'en-tête de la colonne.
Si la colonne personnalisée n'est pas un texte et qu'il s'agit d'une option multi-sélection, l'utilisateur peut utiliser le code suivant et le mettre à jour en fonction de son cas d'utilisation.
{%- 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 -%}
Annexe - Structure des objets de données des modèles d'exportation des activités de V&V
Voici la structure de base de l'objet à partir duquel vos modèles d'exportation d'activités de contrôle et de vérification extrairont des informations.
V&V Activity Export Templates – Data Object Structure
# NIVEAU SUPÉRIEUR
{
activités : [{}] # Liste de toutes les activités
dossiers : [{
name : string
activities : [{}] # Liste des activités
}]
timestamp : datetime
template_name : string
}
# Activité
{
id : number
name : string
description : string
expected_results : string
tags : [string]
verification_methods : [{
name : string
description : string
}]
owner : Utilisateur ou groupe
custom_fields : [] # Liste des champs personnalisés
approvals : booléen
items : [{}] # Liste des éléments VVI
step_definitions : [{}] # Liste des définitions d'étapes
runs : [{}] # Liste des ActivityRuns
}
# VVItem
{
id : number
requirement_identifier : string
component : { # Identique aux composants liés dans le document reqs export
id : nombre
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
pièces jointes : [{
name : string
description : string
version : string
is_reference : booléen
tags : [string]
}]
}
compliance : string
compliance_comment : string
last_item_run : {} # VVItemRun
last_item_run_status : str
item_runs : [{}] # Liste de VVItemRuns
}
# StepDefinition
{
id : int
activity_id : int
step_number : int
position : float
numéro_d'étape_complète : str
chemin_de_l'étape_complète : str
parent_step_id : int
name : string
description : string
expected_results : string
tags : [string]
item_ids : [] # Liste des identifiants de VVItems
}
# 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 : chaîne de caractères
completed_by : Utilisateur
activity_id : int
default_run : bool
position : float
steps_synced : bool
expected_results : string
evidence : string # Nom du fichier ou du document
custom_fields : [] # Liste des champs personnalisés
tags : [string]
run_executor : {} # Utilisateur ou groupe
approver : {} # Utilisateur ou groupe
approved : booléen
approved_by : Utilisateur
approved_at : chaîne de caractères
item_runs : [] # Liste d'exécutions de VVItem
step_runs : [{}] # Liste des parcours VVStepRuns
}
# VVItemRun
{
id : int
status : string
verified_by : Utilisateur
activity_run_id : int
status : "nom-affichage-état"
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
numéro_d'étape_complète : str
step_number : int
position : float
chemin_de_l'étape_complète : str
parent_step_run_id : int
expected_results : string
tags : [string]
item_run_ids : [] # Liste des identifiants VVItemRun
item_requirement_identifiers : str
}