A continuación se incluyen distintos ejemplos de código sobre cómo realizar acciones comunes.
Todos los ejemplos asumen que se van a usar en una operación o código donde la variable 'fil' es la que contiene el documento sobre el que se ejecuta la operación.
Atributos básicos de un documento
author = fil.author # Devuelve un objeto de tipo User
document_type = fil.doctype # Devuelve un objeto de tipo DocumentType
space = fil.serie # Devuelve un objeto de tipo Serie (Espacio)
creation_date = fil.creation_date
modification_date = fil.modified
last_contributor = fil.modified_by
lifecycle_state = fil.life_cycle_state # Devuelve un objeto de tipo State del ciclo de vida
state = fil.state # Es un string sobre el estado de procesamiento del documento
locked = fil.locked # Es un booleano que indica si el documento está bloqueado
size = fil.size
Obtener información de un metadato de tipo Usuario
# El siguiente codigo muestra cómo obtener el usuario que está asignado
# a un campo de tipo 'User'
from django.contrib.auth.models import User
username = fil.gmv('metadata.example_user')
if username:
user = User.objects.get(username=username)
# En la variable user ya está el objeto del usuario.
# Ahora podemos acceder a algunos de sus elementos
teams = user.get_teams()
groups = user.get_groups()
spaces = user.get_series()
queues = user.get_queues()
email = user.email
given_name = user.given_name
last_name = user.last_name
Acceder al titulo de un documento y modificarlo
# El siguiente código muestra cómo acceder al título de un documento y modificarlo.
title = fil.filename
title = title + ' ejemplo modificacion titulo'
fil.filename = title
# A continuación se guarda la modificación indicando qué campo se ha modificado
fil.save(update_fields=['filename'])
Operar con metadatos y características
# El siguiente código muestra ejemplos de cómo operar con metadatos y características
value = fil.gmv('metadata.name') # Para obtener el valor de un metadato con nombre 'metadata.name'
readable_value = fil.gmvp('metadata.name') # Para obtener el valor legible de un metadato, util para obtener etiquetas de un diccionario, por ejemplo.
fil.set_metadata('metadata.name', value, overwrite=True) # Para guardar el valor de un metadato
metadata = fil.get_metadata('metadata.name') # Para obtener el metadato, devuelve un objeto de tipo Metadata
value = metadata.value
file_value = metadata.file_value
date_value = metadata.date_value
datetime_value = metadata.datetime_value
metadata_creation_date = metadata.creation_date
value = fil.gfv('feature.name') # Para obtener una característica
fil.set_feature('feature.name', value) # Para guardar una característica
Operar con el ciclo de vida
# Modificar el estado del ciclo de vida
fil.change_life_cycle_state('Nuevo Estado')
# El valor de 'Nuevo Estado' debe ser el nombre de un metadato existente en el ciclo de vida.
# El documento debe tener ciclo de vida activo.
# Ejemplos sobre información del ciclo de vida
fil.get_life_cycle_start_date()
fil.get_life_cycle_end_date()
fil.get_life_cycle_history()
fil.get_time_in_life_cycle_state()
fil.get_max_time_in_life_cycle_state()
fil.get_time_left_in_life_cycle_state()
# Comprobar si una tarea del ciclo de vida está completa
fil.check_workflow_tasks_completed('Nombre tarea')
# Para obtener el tiempo que lleva el documento en el estado actual
fil.get_time_in_life_cycle_state('minutes') # En minutos
fil.get_time_in_life_cycle_state('hours') # En horas
Operar con comentarios
# Añadir un comentario a un documento.
# El primer parámetro es una variable de tipo User
fil.add_comment(fil.author, 'mi comentario')
Operar con relaciones
# Añadir documento como relacionado a otro
#
doc_hijo = File.objects.get(filename='Documento hijo')
doc_padre = File.objects.get(filename='Documento padre')
doc_padre.add_related(doc_hijo)
Bloquear o desbloquear el documento
doc.lock() # Bloquear
doc.unlock() # Desbloquear
Crear documento
# Añadir documento como relacionado a otro
#
doc = File.objects.get(filename='Documento')
nuevo_doc = doc.serie.create_document(ruta_binario, 'Titulo', 'TipoFormulario')
Operar con carpetas
# El siguiente código muestra como crear una carpeta dentro de otra carpeta
tipo_carpeta = DocumentType.objects.get(uuid='986983f9-1bc0-4e23-99b7-c0d62ad60ec1')
# tipo_carpeta sería el tipo documental que esté marcado con faceta 'folderish'
espacio_clientes = Serie.objects.get(uuid='626c4ef6-5420-4e9a-994b-6bed6409bb8a')
carpeta_2018 = espacio_clientes.create_document(filename='Clientes 2018', doctype=tipo_carpeta)
# Se pasa como padre (parent) la carpeta recien creada
carpeta_2018_enero = espacio_clientes.create_document(filename='Enero 2018', doctype=tipo_carpeta, parent=carpeta_2018)
carpeta_2018_enero.add_related(fil) # Añadir fil como relacionado 'hijo' de carpeta_2018_enero
Para crear una carpeta normal (sin tipo de formulario personalizado), use la línea:
# La siguiente linea crea una carpeta normal en un espacio/serie
carpeta = serie.create_folder('Titulo carpeta', author) # donde author es una variable de tipo User
# Para crear una carpeta dentro de otra carpeta
serie.create_folder('Titulo subcarpeta', author, carpeta)
Obtener otra información del documento
# Los siguientes ejemplos muestran cómo obtener entidades relacionadas con el documento.
metadatas = fil.get_all_metadatas() # metadatas contendrá un listado de objetos Metadata
related_documents = fil.get_all_relations() # related_documents contendrá el listado de documentos relacionados con el actual.
features = fil.get_all_features()
doctypes = fil.get_required_doctypes() # Obtener un listado de DocumentType requeridos, segun se haya configurado en el DocumentType de este documento.
parent = fil.get_parent() # Obtener la carpeta padre de un documento
#
fil.get_extension() # Devuelve la extensión que tiene el documento en su nombre
fil.get_mime() # Calcula el mime type del documento
fil.get_creation_date_timezone() # Obtener fecha de creacion en la zona horaria del servicio
fil.get_versions() # Devuelve un listado de versiones DocumentVersion
fil.get_content() # Obtener el contenido (binario) de un documento
# Ejemplos de otras acciones sobre documentos.
notification_name = 'example_notification' # Es nombre de la notificación a enviar
fil.send_notification(notification_name, 'ejemplo@athento.com')
fil.generate_from_template() # Genera el documento desde la plantilla que esté configurada en el tipo documental
fil.create_version() # Crea version del documento
fil.has_content() # Devuelve True o False dependiendo de si el documento tiene contenido o no.
# Para consultar el tipo de contenido
fil.is_pdf()
fil.is_image()
fil.is_txt()
# Para obtener otros documentos que estén duplicados según el conjunto de campos marcados como Unique.
fil.is_duplicated()
fil.days_old() # Numero de dias desde que se creó el documento
fil.minutes_old() # Numero de minutos desde que se creó el documento
fil.days_old_modified() # Numero de dias desde que se modificó el documento
fil.minutes_old_modified() # Numero de minutos desde que se modificó el documento
Obtener información de un documento de tipo correo electrónico
# Cuando el documento sea un email, estos son varios métodos útiles.
fil.is_mail() # Indica si el documento es un email
fil.get_mail_from() # Obtener el mail originario
fil.get_mail_subject() # Obtener el asunto
fil.get_mail_body() # Obtener el body (plano)
fil.get_mail_message_date() # Obtener fecha de recepción
fil.get_mail_text() # Obtener el contenido en formato texto
fil.get_mail_html() # Obtener el contenido en formato HTML
Filtrar documentos de un periodo de tiempo
En ocasiones es necesario desde una operación buscar documentos que tengan un cierto tiempo, esto puede hacerse de la siguiente forma:
# Debemos aplicar el filtro concreto para partir de un grupo de documentos
fils = File.objects.filter(serie__uuid='XXXX')
fils.older_than(10) # Documentos creados hace más de 10 días
fils.last_x_days(30) # Documentos creados en los últimos 30 dias
fils.last_x_hours(12) # Documentos creados en los últimos 12 horas
fils.last_x_minutes(10) # Documentos creados en los últimos 10 minutos
fils.validated_last_x_days(30) # Documentos validados en los últimos 30 dias
fils.validated_last_x_hours(12) # Documentos validados en las últimas 12 horas
fils.validated_last_x_minutes(10) # Documentos validados en los últimos 10 minutos
fils.modified_last_x_days(30) # Documentos modificados en los últimos 30 dias
fils.modified_last_x_hours(12) # Documentos modificados en las últimas 12 horas
fils.modified_last_x_minutes(10) # Documentos modificados en los últimos 10 minutos
state = State.objects.get(name='Aprobado')
fils.last_x_days_in_state(state, 10) # Documentos que llevan 10 días en el estado Aprobado
fils.life_cycle_changed_last_x_minutes(10) # Documentos cuyo ciclo de vida ha cambiado en los últimos 10 minutos
Lanzar una excepción
Las operaciones son lanzadas de forma secuencial y, cuando hay varias, cualquier excepción del sistema es capturada por Athento para evitar que se interrumpa la ejecución de todas las operaciones.
Sin embargo, en ocasiones puede ser necesario elevar una excepción y que el usuario vea el mensaje de error, en este caso debe hacerse como se muestra en el ejemplo:
from core.exceptions import AthentoseError
raise AthentoseError('No se ha podido ejecutar la operacion X')
Mastertables
En ocasiones es útil obtener un diccionario desde mastertables, para ello, se puede usar un código como este:
from mastertables import mastertables
mt = mastertables.MasterTablesClient("API_KEY_MASTERTABLES")
vocabulario = mt.get_vocabulary("UUID_VOCABULARIO")
de este modo, podemos tener una operación cuyo comportamiento será acorde al vocabulario que los usuarios de negocio pueden gestionar.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.