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.
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.