Prezados, boa noite!!!
Estou iniciando minha jornada em desenvolvimento de APIs, criei a seguinte API para incluir PRÉ NOTAS na rotina MATA140 porém fica dando esse erro “array out of bounds”, segue o fonte:
#Include ‘Protheus.ch’
#Include ‘FWMVCDEF.ch’
#Include ‘RestFul.CH’
#INCLUDE “TopConn.ch”
#Include “TbiConn.ch”
WsRestful XSC2_API Description ‘API para PRE NOTA DE ENTRADA SC2.’
WsMethod POST INCLUIRXSC2 Description ‘Inclusao de DADOS SC2’ Path ‘/’
END WsRestful
WsMethod POST INCLUIRXSC2 WsService XSC2_API
Local cBody := self:GetContent()
Local oJson := JsonObject():New()
Local xRetJson := ''
Local aCab := {}
Local aItem := {}
Local aItens := {}
Local lRet := .T.
Local i := 0 // já tentei iniciar com 1 e o resultado é o mesmo!
Local aErro := {}
Local cErro := ''
Private lMsErroAuto := .F.
Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .T.
If !Empty(cBody)
xRetJson := oJson:FromJson(cBody)
RpcSetEnv("10",oJson:F1_FILIAL)
If ValType(xRetJson) == 'U'
Aadd(aCab, {'F1_FILIAL', oJson['F1_FILIAL'], Nil})
Aadd(aCab, {'F1_EMISSAO', CtoD(oJson['F1_EMISSAO']), Nil})
Aadd(aCab, {'F1_DOC', oJson['F1_DOC'], Nil})
Aadd(aCab, {'F1_FORNECE', oJson['F1_FORNECE'], Nil})
Aadd(aCab, {'F1_ESPECIE', oJson['F1_ESPECIE'], Nil})
Aadd(aCab, {'F1_SERIE', oJson['F1_SERIE'], Nil})
Aadd(aCab, {'F1_EST', oJson['F1_EST'], Nil})
for i := 1 To Len(oJson['itens'])
dbSelectArea("SD1")
SD1->(dbSetOrder(1))
Aadd(aItem, {'D1_ITEM', StrZero(i, 4), Nil})
Aadd(aItem, {'D1_COD', oJson['itens'][i]['D1_COD'], Nil})
Aadd(aItem, {'D1_QUANT', Val(oJson['itens'][i]['D1_QUANT']), Nil})
Aadd(aItem, {'D1_VUNIT', Val(oJson['itens'][i]['D1_VUNIT']), Nil})
Aadd(aItem, {'D1_CC', oJson['itens'][i]['D1_CC'], Nil})
Aadd(aItem, {'D1_EC05DB', oJson['itens'][i]['D1_EC05DB'], Nil})
Aadd(aItens, aItem)
aItem := {}
Next i
MsExecAuto({|x,y,z| MATA140(x,y,z)}, aCab, aItens, 3)
If lMsErroAuto
aErro := GetAutoGRLog()
For i := 1 To Len(aErro)
cErro += aErro[i] + CRLF
Next i
SetRestFault(400, cErro)
lRet := .F.
Else
self:SetResponse('Titulo incluído com sucesso!')
EndIf
Else
SetRestFault(400, 'Falha na leitura do arquivo Json')
lRet := .F.
EndIf
Else
SetRestFault(400, 'Nenhuma informação enviada no body')
lRet := .F.
EndIf
Return lRet
Segue também o Json que estou tentando passar (já testei varias possibilidades):
{
“F1_FILIAL”: “011023”,
“F1_EMISSAO”: “08/07/2025”,
“F1_DOC”: “123123123”,
“F1_FORNECE”: “97447494”,
“F1_ESPECIE”: “NFE”,
“F1_SERIE”:“001”,
“itens”: [
{
“D1_COD”: “CESTA BASICA MINI”,
“D1_QUANT”: “5”,
“D1_VUNIT”: “100”,
“D1_CC”: “15”,
“D1_EC05DB”: “10”
}
]
}
Como estou iniciando agora, pode ser algo que esteja na minha cara e não vejo!! Se puderem dar qualquer ajuda, ficarei muito grato.
#juntossomosmaisfortes
Forte abraço!!