Os caras estão em outro nível, parabéns pelo excelente trabalho.
- Efetue login para postar comentários
Os caras estão em outro nível, parabéns pelo excelente trabalho.
1 - Sim, salvo todos os JSONs.
2 - Faço o reenvio somente dos que dão erro.
3 - Não tinha reparado nesse ponto de retorno.
-- Já consegui resolver o problema, praticamente refiz toda a lógica de envio do Json, em vez de enviar ele inteiro, quebrei em 300 objetos por vez, tem muito mais envios, porém não quebrou.
Desculpa a demora para responder, e muito obrigado pela atenção.
O Json é bem extenso, mais de 5 milhões de caracteres, vou colocar aqui em baixo a classe,
ClassMethod InserirFatura(pInput As %Library.AbstractStream, Output pOutput As %Stream.Object) As %Status
{
Set tSC = $System.Status.OK()
Set %response.ContentType="application/json"
Try {
Set tObjBody = {}.%FromJSON(%request.Content)
If $IsObject(tObjBody) {
Set tArrayFatura = tObjBody.fatura
Set iterArrayFatura = tArrayFatura.%GetIterator()
Set tContNovo = 0
Set tContAlte = 0
Set tContDupli = 0
TSTART
While iterArrayFatura.%GetNext(.key, .tObjFatura) {
Set:(tObjFatura.modalidade = "ger. compartilhada-geradora") tUG = $ZCONVERT(tObjFatura.instalacao, "I")
Set tFatura = ##Class(Onboarding.Modelo.BotCemig).%New()
If tObjFatura."per_prox_saldo_exp" '= ""{
Set tMesProx = $PIECE(tObjFatura."per_prox_saldo_exp","/",2)
Set tAnoProx = $PIECE(tObjFatura."per_prox_saldo_exp","/",1)
Set tDataProx = "01/"_tMesProx_"/"_tAnoProx
Set tFatura."per_prox_saldo_exp" = $ZDATEH(tDataProx)
}
Set tMesPer = $PIECE(tObjFatura.periodo,"/",2)
Set tAnoPer = $PIECE(tObjFatura.periodo,"/",1)
Set tDataPer = "01/"_tMesPer_"/"_tAnoPer
Set tFatura.periodo = $ZDATEH(tDataPer)
Set tNumSemPorc = $PIECE(tObjFatura.quota,"%",1)
Set tNumSemVirg = $REPLACE(tNumSemPorc,",",".")
Set tFatura.quota = tNumSemVirg
Set tFatura."unidade_geradora" = tUG
Set tFatura."posto_horario" = tObjFatura."posto_horario"
Set tFatura."qtd_compensacao" = tObjFatura."qtd_compensacao"
Set tFatura."qtd_consumo" = tObjFatura."qtd_consumo"
Set tFatura."qtd_geracao" = tObjFatura."qtd_geracao"
Set tFatura."qtd_geracao" = tObjFatura."qtd_geracao"
Set tFatura."qtd_prox_saldo_exp" = tObjFatura."qtd_prox_saldo_exp"
Set tFatura."qtd_recebimento" = tObjFatura."qtd_recebimento"
Set tFatura."qtd_saldo_ant" = tObjFatura."qtd_saldo_ant"
Set tFatura."qtd_saldo_atual" = tObjFatura."qtd_saldo_atual"
Set tFatura."qtd_saldo_exp" = tObjFatura."qtd_saldo_exp"
Set tFatura."qtd_transferencia" = tObjFatura."qtd_transferencia"
Set tFatura.instalacao = $ZCONVERT(tObjFatura.instalacao, "I")
Set tFatura.modalidade = tObjFatura.modalidade
Set tRS = ##Class(Onboarding.Repositorio.ConsultaSQL).ConsultaFatura(tFatura.instalacao, tFatura.periodo, tFatura."posto_horario", .tSC)
If $$$ISERR(tSC) {
Throw tSC
}
If tRS.%Next() = 0 {
Set tFatura."data_criacao" = $PIECE($HOROLOG,",",1)
Set tFatura.duplicidade = 1
Set tSC = tFatura.%Save()
If $$$ISERR(tSC) {
Throw tSC
}
Set tContNovo = tContNovo+1
}Else{
Set tFaturaExi = ##Class(Onboarding.Modelo.BotCemig).%OpenId(tRS.ID, .tSC)
If $$$ISERR(tSC) {
Throw tSC
}
If ((tFaturaExi."data_alteracao" = $PIECE($HOROLOG,",",1)) || (tFaturaExi."data_criacao" = $PIECE($HOROLOG,",",1))) {
Set tFatura.duplicidade = 1
Set tFaturaExi.duplicidade = 2
Set tFaturaExi."data_alteracao" = $PIECE($HOROLOG,",",1)
Set tFatura."data_criacao" = $PIECE($HOROLOG,",",1)
Set tSC = tFatura.%Save()
Set tSC = tFaturaExi.%Save()
If $$$ISERR(tSC) {
Throw tSC
}
Set tContDupli = tContDupli+1
}Else {
Set tFaturaExi.modalidade = tFatura.modalidade
Set tFaturaExi."per_prox_saldo_exp" = tFatura."per_prox_saldo_exp"
Set tFaturaExi."qtd_compensacao" = tFatura."qtd_compensacao"
Set tFaturaExi."qtd_consumo" = tFatura."qtd_consumo"
Set tFaturaExi."qtd_geracao" = tFatura."qtd_geracao"
Set tFaturaExi."qtd_prox_saldo_exp" = tFatura."qtd_prox_saldo_exp"
Set tFaturaExi."qtd_recebimento" = tFatura."qtd_recebimento"
Set tFaturaExi."qtd_saldo_ant" = tFatura."qtd_saldo_ant"
Set tFaturaExi."qtd_saldo_atual" = tFatura."qtd_saldo_atual"
Set tFaturaExi."qtd_saldo_exp" = tFatura."qtd_saldo_exp"
Set tFaturaExi."qtd_transferencia" = tFatura."qtd_transferencia"
Set tFaturaExi.quota = tFatura.quota
Set tFaturaExi.duplicidade = 1
Set tFaturaExi."data_alteracao" = $PIECE($HOROLOG,",",1)
Set tSC = tFaturaExi.%Save()
If $$$ISERR(tSC) {
Throw tSC
}
Set tContAlte = tContAlte+1
}
}
}
TCOMMIT
Write {"retorno":"OK","tContNovo":(tContNovo),"tContAlte":(tContAlte),"tContDupli":(tContDupli)}.%ToJSON()
} Else {
Throw ##class(%Exception.General).%New("Entrada JSON inválida")
}
}Catch tException {
TROLLBACK
Do ..ReportHttpStatusCode(..#HTTP500INTERNALSERVERERROR)
Set:'$$$ISERR(tSC) tSC = tException.AsStatus()
Set tSC = $System.Status.GetErrorText(tSC)
}
Quit tSC
}
Sim, eu tinha conseguido conectar, porém não posso voltar versão, porque preciso do Python que é a partir dessa versão, mas a versão web funciona, só queria algo mais integrado, mais rápido, esperar chegar a versão 2023 aqui, creio que está solucionado essa questao.
Olá Danusa, a versão é essa, Product version: IRIS 2022.1, $ZV: IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2022.1.2 (Build 574U), essa extensão utiliza o terminal na web, fora do VS, eu gostaria de rodar o terminar do IRIS, dentro do VsCode, mas fazendo novos testes hoje, descobri que para poder utilizar esse terminal integrado com o VS só na nova versão do IRIS.
Olá Djeniffer, simplesmente após a ultima atualização da extenção no dia 20/07 da InterSystems, eu não consigo executar mais o terminal do Iris no VsCode.
Creio que já deva ter sulocionado o problema, mas talvez, algo que possa ajudar nesse problema seria a utilização do Python? Não sei qual versão do Iris está utilizando, mas se tiver suporte ao Python, ele tem algumas bibliotecas que poderão te auxiliar nessa resolução.
Muito bom, estou utilizando o Python com o Iris, ele é um grande facilitador, suas bibliotecas já trazem muitas soluções prontas.
Alguns testes que estou realizando com o Python encontrei alguns problemas parecidos e algo que notei no seu código seria o uso do print como saída final, o print não lhe será útil para retornar para o Iris creio a substituição dele por um return será mais efetivo.
O seu print irá imprimir como uma lista tudo que foi insirido no array vendas, se for para tratar essa váriavel externamente creio que será nescessário algumas modificações, mas irá funcionar.