Cuando un script se ejecuta dentro de la plataforma de LinkaForm. Dicho script o proceso se ejecuta dentro de un contenedor independiente a la plataforma, teniendo acceso a solo leer el STDOUT de dicho proceso.
Cuando ejecutas un script en python, para enviar datos al STDOUT una opcion es llamar al sys.stdout.write() para ello es necesario importar sys primero.
La información debe de ser regresada como un json para que LinkaForm pueda leer bien dicha repuesta es por eso que dentro del stdout write debe llevar un simplejson.dumps(res).
Donde res debe ser un json con la siguiente siguiente estructura
{
'status': 101,
'merge': {
'primary': True,
'replace': True,
'answers': {
'58d41fa6b43fdd78abf55f3b': 987,
}
},
'id': '5ebd725889be1b27db41adab',
}
Les explico las llaves del json:
valores | Descripcion |
---|---|
status | Opciones validas son 101 y 206. |
merge | Campo que indica la información que se va agregar y sus propiedades |
metadata | Campo para enviar información q se desea actualizar de la metadata, ojo folio solo funciona en post. Solo disponible en status 206 |
replace_ans | reemplaza las respuestas al 100% sin hacer un merge las respuestas. Solo disponible en status 101. Nota: esta opcion solo es tomada en cuenta si la llave merge no esta presente. |
status
Por el momento la llave status solo puede tener los valores de 101 o 206
valores | Descripcion |
---|---|
101 | Sirve para indicar que se hará un merge de los answers que mande el script con los answers del registro. |
206 | Sirve para indicar que se va a complementar las respuestas. Por ejemplo, si hay dos campos en el registro que sean cantidad de artículos y un campo de precio, el script puede calcular el total y se agregaría la respuesta en los answers |
answers_registro = {'cantidad': 3, 'precio': 10.0}
answers_script = {'subtotal': 30.0}
nuevos_answers = {'cantidad': 3, 'precio': 10.0,'subtotal': 30.0}
merge
Es una llave opcional, aunque requerida cuando se indica que es un status 101. Dentro de esta llave se deben enviar estos parametros.
Llave | Descripcion |
---|---|
primary | Boleano Default False. En el caso que la respuesta ya exista, si se configura como True indica que los valores que envia el script, reemplazaran a los valores actuales “de la respuesta” existente. Si se omite o se manda como False se conservan las respuestas del registro. Como quien dice, es para ver quien lleva mano |
replace | Boleano Default False. Es para cuando en los answers del registro y en los answers del script se manda una respuesta tipo grupo repetitivo, imágenes, o cualquier valor que sea del tipo lista, se usaría para saber si se va a reemplazar la lista o si se va a agregar a dicha lista |
answers | JSON. Son las respuestas que el script desea agregar al registro |
Ejemplo con replace como True
answers_registro = {'mi_lista': [1, 2, 3]}
answers_script = {'mi_lista': [2, 3, 4, 5]}
nuevos_answers = {'mi_lista': [2, 3, 4, 5]}
Se reemplazaron las posiciones y se agregaron las nuevas que no existían en el registro. En caso de no mandarse o mandarse como False se habría hecho un append y tendríamos algo así
nuevos_answers = {'mi_lista': [1, 2, 3, 2, 3, 4, 5]}
id
Es el id del registro que se desea editar.
Ejemplo
#####
# Made by Jose Patricio VM
#####
# Script para generar Asistencia ejemplo Webinar
#
#
#####
import sys, simplejson, time
# from linkaform_api import settings
# from linkaform_api import network, utils
# from lkf_settings import *
import time
# net = network.Network(settings)
# cr = net.get_collections()
if __name__ == "__main__":
#print 'starting..........'
#print 'sys.argv[1]', sys.argv[1]
current_record = simplejson.loads(sys.argv[1])
#print 'current_record1', current_record
if current_record.has_key('voucher'):
current_record.pop('voucher')
if current_record.has_key('other_versions'):
current_record.pop('other_versions')
sys.stdout.write(simplejson.dumps({
'status': 101,
'merge': {
'primary': True,
'replace': True,
'answers': {
'58d41fa6b43fdd78abf55f3b': 987,
}
},
'id': '5ebd725889be1b27db41adab',
}))
Crear folio nuevo
Para poder setear un folio en un script, esto solo se puede crear en en la creación de registros, osea en un POST. Para ello, el folio o cualquier otro dato de la metadata, debe de ser enviado en la llave metadata . Solo disponible en status 206.
ej
{
"status": 206,
"merge":{
"answers":{"58d41fa6b43fdd78abf55f3b":"New answer"}
},
"metadata":{
"folio":"NewFolioHere"
}
}