# Caso de Uso O técnico não deve ter permissão para alterar o status da solicitação para **Aguardando Compra** a menos que a solicitação esteja aprovada. ## Abaixo está a lista de pacotes usados no script ```python import sys, requests import json,os import datetime ``` ```python ################ Início da Definição do Método ############# # ------------------ Função para analisar a entrada do arquivo JSON da solicitação ---------------------- 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 #----------- Função para obter o valor antigo do json diff PARA o formato V3 ------------------- # Retornará o valor antigo presente no 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("Nenhum valor presente no JSON Diff") except: print("Erro inesperado ao analisar o json diff"+diffJSON) #------------ Construindo o objeto Json para atualizar a solicitação.--------- # data é o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação # data = {"LEVEL":"TIER 1","PRIORITY":"High","IMPACT":"High"} # É necessário passar os dados para actionPlugin_constructReqJSON para obter o json completo # UPDATE, Negate são compatíveis com 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 #------------ Construindo o Json para a funcionalidade de retorno padrão.--------- # Use uma combinação das duas funções acima para construir o parâmetro data # data = actionPlugin_AddNote("O ticket foi criado no JIRA e as informações foram preenchidas no SDP") def actionPlugin_constructReqJSON(data, message="Solicitação atualizada com sucesso"): json_data = '''{ "message":"''' +message + '''", "result":"success", "operation":[''' + data + '''] }''' return json_data ################ Fim da Definição do Método ############# # O arquivo que contém os detalhes da solicitação será armazenado como objeto json e o caminho do arquivo será passado como argumento para o script, substituindo o argumento $COMPLETE_JSON_FILE file_Path = sys.argv[1] # Carrega o conteúdo json que contém os detalhes da solicitação (Alterado) 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": #Construindo o objeto Json para atualizar a solicitação. #A seguir está um exemplo da estrutura JSON para atualizar uma solicitação. '''{ "result": "success", "operation": [ { "OPERATIONNAME": "NEGATE", "REASON": "Motivo da negação" } ] }''' message = "Não é possível alterar o status da solicitação para "+status+" a menos que a solicitação esteja aprovada" #Criando o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação updatejson = actionPlugin_UpdateRequest("","NEGATE",additionalParams='''"REASON":"'''+message+'''"''') returnJson = actionPlugin_constructReqJSON(updatejson,message) #Retornando o objeto Json construído print(returnJson) elif appr_status!=None and appr_status=="Pending Approval": #A seguir está um exemplo da estrutura JSON para atualizar uma solicitação. '''{ "result": "success", "message": "Script Python de exemplo", "operation": [ { "OPERATIONNAME": "UPDATE", "INPUT_DATA": [ { "request": { "urgency": { "name": "High" }, "group": { "name": "Network" }, "priority": { "name": "High" } } } ] } ] }''' message = "Defina a prioridade como Alta quando o status de aprovação estiver como Aprovação Pendente" #Criando o Json que terá o Nome/Valor do Campo que precisa ser atualizado na solicitação. updatejson = actionPlugin_UpdateRequest('''{"priority":{"name":"High"}}''',"UPDATE","request") returnJson = actionPlugin_constructReqJSON(updatejson,message) #Retornando o objeto Json construído. print(returnJson) else : print("Nenhuma alteração encontrada") # Esta mensagem será exibida no Histórico se nenhuma das condições no script for atendida. ```