# Caso de uso Al técnico no se le debe permitir cambiar el estado de la solicitud a **En espera de compra** a menos que la solicitud esté aprobada. ## A continuación se muestra la lista de paquetes utilizados en el script ```python import sys, requests import json,os import datetime ``` ```python ################ Inicio de la definición de métodos ############# # ------------------ Función para analizar la entrada del archivo JSON de la solicitud ---------------------- def read_file(file_Path, key=None): with open(file_Path) as data_file: data = json.load(data_file) if key==None: return data else: dataObj = data[key] return dataObj #----------- Función para obtener el valor anterior del JSON diff PARA el formato V3 ------------------- # Devolverá el valor anterior presente en el JSON diff def getValueFromDiffJSON_V3(diffJSON,key): try: if key in diffJSON['old']: if(isinstance(diffJSON['old'][key],dict)): return diffJSON['old'][key]['name'] else: return diffJSON['old'][key] else: print("No hay ningún valor presente en el JSON diff") except: print("Error inesperado al analizar el JSON diff"+diffJSON) #------------ Construcción del objeto JSON para actualizar la solicitud. --------- # data es el JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud # data = {"LEVEL":"TIER 1","PRIORITY":"High","IMPACT":"High"} # Es necesario pasar los datos a actionPlugin_constructReqJSON para obtener el JSON completo # UPDATE y Negate son compatibles con V3. def actionPlugin_UpdateRequest(data,OperationName="EDIT_REQUEST",module=None,additionalParams=""): if module is not None: temp={} temp[module]=json.loads(data) tempString=json.dumps(temp) data=tempString json_data = '''{ "INPUT_DATA": [''' + data + '''], "OPERATIONNAME": "''' + OperationName + '''", ''' + additionalParams + ''' },''' return json_data #------------ Construcción del JSON para la funcionalidad de retorno predeterminada. --------- # Utilice una combinación de las dos funciones anteriores para construir el parámetro data # data = actionPlugin_AddNote("El ticket se ha creado en JIRA y la información se ha completado en SDP") def actionPlugin_constructReqJSON(data, message="Solicitud actualizada correctamente"): json_data = '''{ "message":"''' +message + '''", "result":"success", "operation":[''' + data + '''] }''' return json_data ################ Fin de la definición de métodos ############# # El archivo que contiene los detalles de la solicitud se almacenará como un objeto JSON y la ruta del archivo se pasará como argumento al script reemplazando el argumento $COMPLETE_JSON_FILE file_Path = sys.argv[1] # Cargar el contenido JSON que contiene los detalles de la solicitud (modificados) requestObj = read_file(file_Path,'request') diffObj = read_file(file_Path,'diff') status=requestObj['status']['name'] appr_status=requestObj['approval_status']['name'] if appr_status!=None and appr_status!="Approved" and status=="Waiting For Purchase": #Construcción del objeto JSON para actualizar la solicitud. #A continuación se muestra un ejemplo de la estructura JSON para actualizar una solicitud. '''{ "result": "success", "operation": [ { "OPERATIONNAME": "NEGATE", "REASON": "Motivo de rechazo" } ] }''' message = "No se puede cambiar el estado de la solicitud a "+status+" a menos que la solicitud esté aprobada" #Creación del JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud updatejson = actionPlugin_UpdateRequest("","NEGATE",additionalParams='''"REASON":"'''+message+'''"''') returnJson = actionPlugin_constructReqJSON(updatejson,message) #Retorno del objeto JSON construido print(returnJson) elif appr_status!=None and appr_status=="Pending Approval": #A continuación se muestra un ejemplo de la estructura JSON para actualizar una solicitud. '''{ "result": "success", "message": "Script de Python de ejemplo", "operation": [ { "OPERATIONNAME": "UPDATE", "INPUT_DATA": [ { "request": { "urgency": { "name": "High" }, "group": { "name": "Network" }, "priority": { "name": "High" } } } ] } ] }''' message = "Establecer la prioridad en Alta cuando el estado de aprobación sea Aprobación pendiente" #Creación del JSON que tendrá el nombre/valor del campo que debe actualizarse en la solicitud. updatejson = actionPlugin_UpdateRequest('''{"priority":{"name":"High"}}''',"UPDATE","request") returnJson = actionPlugin_constructReqJSON(updatejson,message) #Retorno del objeto JSON construido. print(returnJson) else : print("No se encontraron cambios") # Este mensaje se imprimirá en el historial si no se cumple ninguna de las condiciones del script. ```