Modelli personalizzati per l'esportazione di documenti
La procedura guidata per l'esportazione dei documenti di Requirements Portal è la soluzione ideale per creare file Microsoft Word modificabili *.docx modificabili direttamente dai requisiti e dalle attività di V&V. È possibile utilizzare modelli predefiniti o caricare i propri modelli. La procedura guidata è alimentata dalla libreria Python-Docx-Template, che a sua volta sfrutta il motore di template Jinja. Questo duo dinamico consente di creare modelli personalizzati.
Libreria Python-Docx-Template
La libreria Python-Docx-Template è un potente strumento che estende le funzionalità della libreria Python-Docx. Incorpora il motore di template Jinja, consentendo la generazione di contenuti dinamici all'interno dei file Word. Ciò significa che è possibile utilizzare variabili, cicli e condizionali per popolare il documento con dati al volo. In sostanza, è come dare al documento Word una dose di espresso.
Gestione dei modelli di esportazione
I modelli disponibili per l'istanza di Requirements Portal sono elencati nella pagina Export templates » Settings » Export templates).
-
Per impostazione predefinita, vengono forniti sei modelli: tre per l'esportazione dei documenti dei requisiti e tre per l'esportazione dei documenti delle attività di V&V.
-
Per ulteriori informazioni sui modelli di esportazione dei requisiti, consultare la pagina Esportazione di documenti.
-
Per ulteriori informazioni sui modelli di esportazione delle attività di V&V, consultare la pagina Esportazione di documenti.
-
-
Per aggiungere un nuovo modello definito dall'utente, fare clic sul pulsante
in alto a destra della pagina. Nella finestra Add template finestra che appare, scegliere se il nuovo modello deve essere applicato a Requirements o V&V Activities utilizzando il menu a tendina Applicable objects e quindi utilizzare l'area Select template per selezionare il file del modello.
Fare clic sul pulsante
nella finestra di dialogo per aggiungere il modello. Il modello verrà visualizzato nell'elenco della Export templates pagina e potrà essere utilizzato nell'esportazione del documento.
-
Il file di qualsiasi modello può essere scaricato. A tale scopo, fare clic sul pulsante
nella colonna del modello richiesto e selezionare il nome del file Name del modello desiderato e selezionare il comando Download e selezionare il comando A seconda delle impostazioni personali del browser, quest'ultimo scaricherà automaticamente il file in una posizione predefinita oppure chiederà all'utente dove memorizzarlo sul disco rigido.
-
Un modello definito dall'utente può essere sovrascritto con un nuovo file di modello. A tale scopo, fare clic sul pulsante
nella colonna Name del modello desiderato e selezionare il comando Overwrite Template dal menu che appare. Utilizzare la finestra Overwrite template finestra che si apre per definire l'applicabilità del modello e selezionare il nuovo file. Abilitare l'opzione I confirm I want to overwrite e fare clic sul pulsante
per completare il processo.
Appendice - Struttura degli oggetti di dati dei modelli di esportazione dei requisiti
Ecco la struttura di base dell'oggetto da cui i vostri modelli di esportazione dei requisiti prenderanno le informazioni.
Requirement Export Templates – Data Object Structure
{
"specifiche": [
{
"id": "numero",
"nome": "stringa",
"descrizione": "stringa",
"requisiti": [
{
"id": "stringa",
"identificatore": "stringa",
"testo": "RichText",
"titolo": "stringa",
"logica": "RichText",
"immagini": ["immagine"],
"tipo": "stringa",
"metodi_di_verifica": [{
"nome": "stringa",
"testo": "stringa",
"component_vms": [{
"name": "stringa",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["stringa"],
"content_type": {
"id": "string",
"name": "string"
},
"stato": "string",
"conformità": "stringa",
"compliance_comment": "stringa",
"tag": ["stringa"],
"genitori": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"bambini": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"proprietario": {
"utente": {
"nome utente": "stringa",
"nome_nome": "string",
"cognome": "stringa",
"gruppi": ["stringa"]
},
"gruppo": {
"nome": "stringa",
"utenti": ["string"]
}
},
"file": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"posizione": "number",
"verifica_voci_verificate": "numero",
"voci_di_verifica_totale": "numero",
"voci_di_verifica": [{
"status": "stringa",
"componente": "string",
"tags": ["stringa"],
"attività": {
"nome": "stringa",
"metodi_di_verifica": ["stringa"]
},
"last_item_run": {
"status": "string",
"commento": "string"
}
}],
"linked_components": [{
"id": "numero",
"nome": "stringa",
"descrizione": "stringa",
"valis": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"textvalis": [{
"id": "numero",
"nome": "stringa",
"testo": "stringa"
}],
"matrici": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"datevalis": [{
"id": "numero",
"nome": "stringa",
"data": "stringa"
}],
"creatore": "stringa",
"allegati": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "string"
}
}
],
"requisiti": [
{
"id": "stringa",
"identificatore": "stringa",
"testo": "RichText",
"titolo": "stringa",
"logica": "RichText",
"immagini": ["immagine"],
"tipo": "stringa",
"metodi_di_verifica": [{
"nome": "stringa",
"testo": "stringa",
"component_vms": [{
"name": "stringa",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["stringa"],
"content_type": {
"id": "string",
"name": "string"
},
"stato": "string",
"conformità": "stringa",
"compliance_comment": "stringa",
"tag": ["stringa"],
"genitori": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"bambini": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"proprietario": {
"utente": {
"nome utente": "stringa",
"nome_nome": "string",
"cognome": "stringa",
"gruppi": ["stringa"]
},
"gruppo": {
"nome": "stringa",
"utenti": ["string"]
}
},
"file": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"posizione": "number",
"verifica_voci_verificate": "numero",
"voci_di_verifica_totale": "numero",
"voci_di_verifica": [{
"status": "stringa",
"componente": "string",
"tags": ["stringa"],
"attività": {
"nome": "stringa",
"metodi_di_verifica": ["stringa"]
},
"last_item_run": {
"status": "string",
"commento": "string"
}
}],
"linked_components": [{
"id": "numero",
"nome": "stringa",
"valis": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"textvalis": [{
"id": "numero",
"nome": "stringa",
"testo": "stringa"
}],
"matrici": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"datevalis": [{
"id": "numero",
"nome": "stringa",
"data": "stringa"
}],
"creatore": "stringa",
"allegati": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}]
}]
}
],
"gruppi_di_requisiti": [
{
"id": "numero",
"nome": "stringa",
"descrizione": "stringa",
"specification_id": "numero",
"requisiti": [
{
"id": "stringa",
"identificatore": "stringa",
"testo": "RichText",
"titolo": "stringa",
"logica": "RichText",
"immagini": ["immagine"],
"tipo": "stringa",
"metodi_di_verifica": [{
"nome": "stringa",
"testo": "stringa",
"component_vms": [{
"name": "stringa",
"closeout_reference": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["stringa"],
"content_type": {
"id": "string",
"name": "string"
},
"stato": "string",
"conformità": "stringa",
"compliance_comment": "stringa",
"tag": ["stringa"],
"genitori": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"bambini": [{
"id": "stringa",
"identificatore": "stringa",
"text": "RichText",
"titolo": "stringa"
}],
"proprietario": {
"utente": {
"nome utente": "stringa",
"nome_nome": "string",
"cognome": "stringa",
"gruppi": ["stringa"]
},
"gruppo": {
"nome": "stringa",
"utenti": ["string"]
}
},
"file": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}],
"custom_fields": [{
"field": "string",
"value": ["string"]
}],
"posizione": "number",
"verifica_voci_verificate": "numero",
"voci_di_verifica_totale": "numero",
"voci_di_verifica": [{
"status": "stringa",
"componente": "string",
"tags": ["stringa"],
"attività": {
"nome": "stringa",
"metodi_di_verifica": ["stringa"]
},
"last_item_run": {
"status": "string",
"commento": "string"
}
}],
"linked_components": [{
"id": "numero",
"nome": "stringa",
"valis": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"textvalis": [{
"id": "numero",
"nome": "stringa",
"testo": "stringa"
}],
"matrici": [{
"id": "numero",
"nome": "stringa",
"valore": "stringa",
"formula": "stringa"
}],
"datevalis": [{
"id": "numero",
"nome": "stringa",
"data": "stringa"
}],
"creatore": "stringa",
"allegati": [{
"nome": "stringa",
"descrizione": "stringa",
"versione": "stringa",
"is_reference": "booleano",
"tags": ["string"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "string"
}
}
],
"timestamp": "datetime",
"template_name": "string",
"metodi_di_verifica_e_convalida": [{
"id": "numero",
"nome": "stringa",
"descrizione": "stringa"
}]
}
Ordinamento dei campi
È possibile ordinare i requisiti utilizzando la funzione Sort nel documento modello Jinja. Ad esempio, si può aggiungere |sort(attribute='identifier') dove i requisiti sono ordinati alfanumericamente sulla colonna dell'identificatore.
Esempio:
{% for requirement in requirements|selectattr("specification_id", "equalto", specification.id)|selectattr("group_id", "none") |sort(attribute='identifier') -%}
Colonne personalizzate
Con l'attuale esportatore di documenti, è possibile esportare facilmente i valori delle colonne personalizzate. Per una semplice colonna personalizzata basata sul testo, è possibile utilizzare la seguente struttura generica:
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Assicurarsi di sostituire il Name of Custom Column con il nome effettivo della colonna indicato nell'intestazione della colonna.
Se la colonna personalizzata non è un testo ed è un'opzione a selezione multipla, l'utente può utilizzare il codice seguente e aggiornarlo per il proprio caso d'uso.
{%- 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 -%}
Appendice - Struttura degli oggetti di dati dei modelli di esportazione delle attività di V&V
Ecco la struttura di base dell'oggetto da cui i modelli di esportazione delle attività di V&V estrarranno le informazioni.
V&V Activity Export Templates – Data Object Structure
# LIVELLO SUPERIORE
{
attività: [{}] # Elenco di tutte le attività
cartelle: [{
nome: stringa
attività: [{}] # Elenco delle attività
}]
timestamp: datetime
nome_templare: stringa
}
# Attività
{
id: numero
nome: stringa
descrizione: stringa
risultati_attesi: stringa
tag: [stringa]
metodi di verifica: [{
nome: stringa
descrizione: stringa
}]
proprietario: utente o gruppo
campi_personalizzati: [] # Elenco di campi personalizzati
approvazioni: booleano
items: [{}] # Elenco di VVItems
step_definitions: [{}] # Elenco di StepDefinitions
esecuzioni: [{}] # Elenco di ActivityRun
}
# VVItem
{
id: numero
identificatore_dei_requisiti: stringa
componente: { # Come i componenti collegati nel documento reqs export
id: numero
nome: stringa
valis: [{
id: numero
nome: stringa
valore: stringa
formula: stringa
}]
textvalis: [{
id: numero
nome: stringa
testo: stringa
}]
matrici: [{
id: numero
nome: stringa
valore: stringa
formula: stringa
}]
datevalis: [{
id: numero
nome: stringa
data: stringa
}]
creatore: stringa
allegati: [{
nome: stringa
descrizione: stringa
versione: stringa
is_reference: booleano
tag: [stringa]
}]
}
compliance: stringa
compliance_comment: stringa
last_item_run: {} # VVItemRun
last_item_run_status: str
item_runs: [{}] # Elenco di VVItemRun
}
# StepDefinition
{
id: int
activity_id: int
numero_passo: int
posizione: float
numero_passo_completo: str
percorso_passo_completo: str
parent_step_id: int
nome: stringa
descrizione: stringa
risultati_attesi: stringa
tag: [stringa]
item_ids: [] # Elenco di id di VVItems
}
# ActivityRun
{
id: int
nome: stringa
descrizione: stringa
timestamp: stringa
data_inizio: stringa # Formato uguale a quello del documento reqs export
data_fine: stringa
stato_di_completamento: int
completato_il_giorno: stringa
completato_da: Utente
iD_attività: int
default_run: bool
posizione: float
passi_sincronizzati: bool
risultati_attesi: stringa
prova: stringa # Nome del file/documento
campi_personalizzati: [] # Elenco di campi personalizzati
tag: [stringa]
run_executor: {} # Utente o gruppo
approvatore: {} # Utente o gruppo
approvato: booleano
approvato_da: Utente
approved_at: stringa
item_runs: [] # Elenco di VVItemRuns
step_runs: [{}] # Elenco di VVStepRuns
}
# VVItemRun
{
id: int
stato: stringa
verified_by: Utente
iD_attività: int
stato: "status-display-name"
commento: stringa
numero_di_serie: stringa
step_run_id: int # StepRun
verification_item:{} # VVItem
identificatore_requisito_di_verifica: stringa
nome_componente_di_verifica: stringa
}
# StepRun
{
id: int
nome: stringa
commento: stringa
stato: stringa
descrizione: stringa
iD_attività_di_corsa: int
numero_passo_completo: str
numero_passo: int
posizione: float
percorso_della_corsa_completa: str
parent_step_run_id: int
risultati attesi: stringa
tag: [stringa]
item_run_ids: [] # Elenco degli id di VVItemRun
item_requirement_identifiers: str
}