Plantillas personalizadas de exportación de documentos
El Asistente de Exportación de Documentos del Portal de Requisitos es la herramienta ideal para crear archivos editables de Microsoft Word *.docx editables directamente de sus requisitos y actividades de V&V. Puede utilizar plantillas predefinidas o cargar sus propias plantillas. El asistente se nutre de la biblioteca Python-Docx-Template, que, a su vez, aprovecha el motor de plantillas Jinja. Este dúo dinámico permite crear plantillas personalizadas.
Biblioteca Python-Docx-Template
La biblioteca Python-Docx-Template es una potente herramienta que amplía la funcionalidad de la biblioteca Python-Docx. Incorpora el motor de plantillas Jinja, permitiendo la generación de contenido dinámico dentro de tus archivos Word. Esto significa que puedes usar variables, bucles y condicionales para rellenar tu documento con datos sobre la marcha. Esencialmente, es como darle a tu documento Word una dosis de espresso.
Gestión de plantillas de exportación
Las plantillas disponibles para su instancia del Portal de Requisitos se enumeran en la página Export templates » Settings » Export templates).
-
Por defecto, se proporcionan seis plantillas - tres para la exportación de documentos de requisitos y tres para la exportación de documentos de actividades de V&V.
-
Para más información sobre las plantillas de exportación de requisitos, consulte la página Exportación de documentos.
-
Para más información sobre las plantillas de exportación de actividades de V&V, consulte la página de Exportación de Documentos.
-
-
Para añadir una nueva plantilla definida por el usuario, haga clic en el botón
en la parte superior derecha de la página. En la ventana Add template que aparece, elija si la nueva plantilla debe aplicarse a Requirements o a V&V Activities utilizando el menú desplegable Applicable objects y, a continuación, utilice el botón Select template para seleccionar el archivo de plantilla.
Haga clic en el botón
del cuadro de diálogo para añadir la plantilla. Se mostrará en la lista de la Export templates página y podrá utilizarse en la exportación de documentos.
-
El archivo de cualquier plantilla puede descargarse. Para ello, haga clic en el botón
de la columna Name de la plantilla deseada y seleccione el comando Download comando. Según la configuración personal de su navegador, éste descargará automáticamente el archivo en una ubicación predefinida o le preguntará dónde almacenarlo en su disco duro.
-
Una plantilla definida por el usuario puede sobrescribirse con un nuevo archivo de plantilla. Para ello, haga clic en el botón
de la columna Name de la plantilla deseada y seleccione el comando Overwrite Template del menú que aparece. Utilice la ventana Overwrite template que se abre para definir la aplicabilidad de la plantilla y seleccionar el nuevo archivo. Active la opción I confirm I want to overwrite y haga clic en el botón
para completar el proceso.
Apéndice - Estructura de objetos de datos de las plantillas de exportación de requisitos
Esta es la estructura básica del objeto del que sus plantillas de exportación de requisitos extraerán información.
Requirement Export Templates – Data Object Structure
{
"especificaciones": [
{
"id": "number",
"name": "cadena",
"descripción": "cadena",
"requisitos": [
{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena",
"fundamento": "RichText",
"images": ["imagen"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "cadena",
"component_vms": [{
"name": "string",
"referencia_cierre": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["cadena"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "cadena",
"compliance": "cadena",
"compliance_comment": "cadena",
"tags": ["cadena"],
"padres": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"children": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"owner": {
"user": {
"nombre de usuario": "string",
"nombre": "string",
"apellido": "cadena",
"groups": ["cadena"]
},
"grupo": {
"name": "cadena",
"users": ["cadena"]
}
},
"files": [{
"name": "string",
"description": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}],
"custom_fields": [{
"field": "cadena",
"value": ["cadena"]
}],
"posición": "number",
"verification_items_verified": "number",
"verification_items_total": "número",
"verification_items": [{
"status": "cadena",
"componente": "cadena",
"tags": ["cadena"],
"actividad": {
"nombre": "cadena",
"verification_methods": ["cadena"]
},
"last_item_run": {
"status": "cadena",
"comment": "cadena"
}
}],
"linked_components": [{
"id": "number",
"name": "cadena",
"descripción": "cadena",
"valis": [{
"id": "número",
"nombre": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"textvalis": [{
"id": "number",
"name": "cadena",
"text": "cadena"
}],
"matrices": [{
"id": "number",
"name": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"datevalis": [{
"id": "number",
"name": "cadena",
"date": "cadena"
}],
"creator": "cadena",
"attachments": [{
"name": "cadena",
"descripción": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "cadena"
}
}
],
"requisitos": [
{
"id": "cadena",
"identificador": "cadena",
"texto": "RichText",
"title": "cadena",
"fundamento": "RichText",
"images": ["imagen"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "cadena",
"component_vms": [{
"name": "string",
"referencia_cierre": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["cadena"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "cadena",
"compliance": "cadena",
"compliance_comment": "cadena",
"tags": ["cadena"],
"padres": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"children": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"owner": {
"user": {
"nombre de usuario": "string",
"nombre": "string",
"apellido": "cadena",
"groups": ["cadena"]
},
"grupo": {
"name": "cadena",
"users": ["cadena"]
}
},
"files": [{
"name": "string",
"description": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}],
"custom_fields": [{
"field": "cadena",
"value": ["cadena"]
}],
"posición": "number",
"verification_items_verified": "number",
"verification_items_total": "número",
"verification_items": [{
"status": "cadena",
"componente": "cadena",
"tags": ["cadena"],
"actividad": {
"nombre": "cadena",
"verification_methods": ["cadena"]
},
"last_item_run": {
"status": "cadena",
"comment": "cadena"
}
}],
"linked_components": [{
"id": "number",
"name": "cadena",
"valis": [{
"id": "número",
"nombre": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"textvalis": [{
"id": "number",
"name": "cadena",
"text": "cadena"
}],
"matrices": [{
"id": "number",
"name": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"datevalis": [{
"id": "number",
"name": "cadena",
"date": "cadena"
}],
"creator": "cadena",
"attachments": [{
"name": "cadena",
"descripción": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}]
}]
}
],
"requirements_groups": [
{
"id": "number",
"name": "cadena",
"descripción": "cadena",
"specification_id": "number",
"requirements": [
{
"id": "cadena",
"identificador": "cadena",
"texto": "RichText",
"title": "cadena",
"fundamento": "RichText",
"images": ["imagen"],
"type": "string",
"verification_methods": [{
"name": "string",
"text": "cadena",
"component_vms": [{
"name": "string",
"referencia_cierre": "string"
}]
}],
"specification_id": "number",
"group_id": "number",
"applicability_conditions": ["cadena"],
"content_type": {
"id": "string",
"name": "string"
},
"state": "cadena",
"compliance": "cadena",
"compliance_comment": "cadena",
"tags": ["cadena"],
"padres": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"children": [{
"id": "cadena",
"identificador": "cadena",
"text": "RichText",
"title": "cadena"
}],
"owner": {
"user": {
"nombre de usuario": "string",
"nombre": "string",
"apellido": "cadena",
"groups": ["cadena"]
},
"grupo": {
"name": "cadena",
"users": ["cadena"]
}
},
"files": [{
"name": "string",
"description": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}],
"custom_fields": [{
"field": "cadena",
"value": ["cadena"]
}],
"posición": "number",
"verification_items_verified": "number",
"verification_items_total": "número",
"verification_items": [{
"status": "cadena",
"componente": "cadena",
"tags": ["cadena"],
"actividad": {
"nombre": "cadena",
"verification_methods": ["cadena"]
},
"last_item_run": {
"status": "cadena",
"comment": "cadena"
}
}],
"linked_components": [{
"id": "number",
"name": "cadena",
"valis": [{
"id": "número",
"nombre": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"textvalis": [{
"id": "number",
"name": "cadena",
"text": "cadena"
}],
"matrices": [{
"id": "number",
"name": "cadena",
"value": "cadena",
"fórmula": "cadena"
}],
"datevalis": [{
"id": "number",
"name": "cadena",
"date": "cadena"
}],
"creator": "cadena",
"attachments": [{
"name": "cadena",
"descripción": "cadena",
"version": "cadena",
"is_reference": "boolean",
"tags": ["cadena"]
}]
}]
}
],
"content_type": {
"id": "number",
"name": "cadena"
}
}
],
"timestamp": "datetime",
"template_name": "string",
"verification_and_validation_methods": [{
"id": "number",
"name": "cadena",
"descripción": "cadena"
}]
}
Ordenación de los campos
Puede ordenar los requisitos utilizando la función Sort en el documento de plantilla Jinja. Por ejemplo, puede añadir |sort(attribute='identifier') donde los requisitos se ordenan alfanuméricamente en la columna identificador.
Ejemplo:
{% for requirement in requirements|selectattr("specification_id", "equalto", specification.id)|selectattr("group_id", "none") |sort(attribute='identifier') -%}
Columnas personalizadas
Con el actual exportador de documentos, puede exportar fácilmente los valores de las columnas personalizadas. Para una columna personalizada simple basada en texto, puede utilizar la siguiente estructura genérica:
{% for custom_field in requirement.custom_fields|selectattr(“field”, “equalto”, “Name of Custom Column”) %}{{r custom_field.value }}{% endfor %}
Asegúrese de sustituir el Name of Custom Column por el nombre real de la columna indicado en la cabecera de la columna.
Si la columna personalizada no es un texto y es una opción de selección múltiple, el usuario puede utilizar el siguiente código y actualizarlo para su caso de uso.
{%- if requisito.campos_personalizados -%}
{%- set additional_info_values = [] -%}
{%- set category_values = [] -%}
{%- set campos_personalizados_adicionales = requisito.campos_personalizados | selectattr('campo', 'iguala', 'Información adicional') -%}
{% for campo_personalizado in campos_personalizados_adicionales -%}
{%- set valores_info_adicionales = valores_info_adicionales + valor_campo_personalizado -%}
{% endfor -%}
{%- set category_custom_fields = requirement.custom_fields | selectattr('field', 'equalto', 'Category') -%}
{% for campo_personalizado in campos_personalizados_categoria -%}
{%- set valores_categoria = valores_categoria + valor_campo_personalizado -%}
{% endfor -%}
{%- set cadena_info_adicional = cadena_info_adicional | join(';') -%}
{%- set categoria_cadena = categoria_info_valores | join(';') -%}
{%- endif -%}
Apéndice - Estructura de Objetos de Datos de las Plantillas de Exportación de Actividades de V&V
Esta es la estructura básica del objeto del cual sus plantillas de exportación de actividades de V&V extraerán información.
V&V Activity Export Templates – Data Object Structure
# NIVEL SUPERIOR
{
actividades: [{}] # Lista de todas las Actividades
carpetas: [{
nombre: cadena
actividades: [{}] # Lista de Actividades
}]
timestamp: datetime
template_name: cadena
}
# Actividad
{
id: number
nombre: cadena
descripción: cadena
resultados_esperados: cadena
etiquetas: [cadena]
métodos_verificación: [{
nombre: cadena
descripción: cadena
}]
owner: Usuario o Grupo
custom_fields: [] # Lista de campos personalizados
aprobaciones: boolean
items: [{}] # Lista de VVItems
step_definitions: [{}] # Lista de StepDefinitions
ejecuciones: [Lista de ActivityRuns
}
# VVItem
{
id: número
identificador_requisito: cadena
component: { # Igual que los componentes enlazados en la exportación del documento reqs
id: número
nombre: cadena
valis: [{
id: número
nombre: cadena
valor: cadena
fórmula: cadena
}]
textvalis: [{
id: número
nombre: cadena
texto: cadena
}]
matrices: [{
id: número
nombre: cadena
valor: cadena
fórmula: cadena
}]
datevalis: [{
id: número
nombre: cadena
fecha: cadena
}]
creador: cadena
adjuntos: [{
nombre: cadena
descripción: cadena
versión: cadena
is_reference: booleano
etiquetas: [string]
}]
}
compliance: cadena
compliance_comment: cadena
last_item_run: {} # VVItemRun
last_item_run_status: str
item_runs: [{}] # Lista de VVItemRuns
}
# StepDefinition
{
id: int
activity_id: int
numero_paso: int
posición: float
número_paso_completo: str
camino_paso_completo: str
parent_step_id: int
nombre: cadena
descripción: cadena
resultados_esperados: cadena
etiquetas: [cadena]
item_ids: [] # Lista de VVItems ids
}
# ActivityRun
{
id: int
nombre: string
descripción: string
timestamp: cadena
start_date: string # Formato igual que en reqs doc export
finish_date: cadena
completion_state: int
completed_on: cadena
completed_by: Usuario
activity_id: int
default_run: bool
posición: float
steps_synced: bool
resultados_esperados: string
evidence: string # Nombre del archivo/Doc
custom_fields: [] # Lista de CustomFields
tags: [cadena]
run_executor: {} # Usuario o grupo
aprobador: {} # Usuario o grupo
aprobado: booleano
aprobado_por: Usuario
approved_at: cadena
item_runs: [] # Lista de VVItemRuns
step_runs: [{}] # Lista de VVStepRuns
}
# VVItemRun
{
id: int
status: string
verificado_por: Usuario
activity_run_id: int
status: "status-display-name"
comentario: cadena
serial_number: cadena
step_run_id: int # StepRun
verification_item:{} # VVItem
verification_item_requirement_identifier: cadena
verification_item_component_name: cadena
}
# StepRun
{
id: int
nombre: string
comentario: string
estado: cadena
descripción: cadena
activity_run_id: int
número_paso_completo: cadena
número_paso: int
posición: float
ruta_etapa_completa: cadena
parent_step_run_id: int
resultados_esperados: cadena
etiquetas: [string]
item_run_ids: [] # Lista de VVItemRun ids
item_requirement_identifiers: str
}