Árvore de páginas

Caso existam campos customizados na tela de pedidos ou clientes, é necessário alterar um dos pontos de Entrada e a adicionar os mesmos.

Lista de Pontos de Entrada


Fluxo

Rotina

Ponto de Entrada

Objetivo

1TOTVS SFA → ProtheusCadastro de Clientes

MTI030NOM

Integração mensagem única do Protheus. Fluxo: TOTVS SFA → Protheus

Ponto de entrada para incluir campos específicos no array aRetPe, antes da gravação do cliente no erp.

aRetPe := ExecBlock("MTI030NOM",.F.,.F.,{aCliente,oXML:_TOTVSMessage:_BusinessMessage:_BusinessContent:_Name:Text})

2TOTVS SFA → ProtheusPedidos

MT410EAI

Integração mensagem única do Protheus.

Ponto de entrada que permite inserir campos específicos no array, aCabec e aItens, pode-se enviar campos específicos na mensagem, e com este PE popular o array da execauto,  antes da criação do pedido.

Parâmetros passados para PE: {aCab,aItens,oEAIObEt:getJSON()}


MTI030NOM

User Function MTI030NOM()
    Local aCliente:= {}


    aCliente := F030GetCli(aClone(PARAMIXB))
Return aCliente

Static Function F030GetCli(PARAMIXB)

    Local cJson   := ''
    Local oJson   := JsonObject():New()
    Local aRet    := {}
    Local nPos    := 0
    Local ni      := 0
    Local cCpf    := ''
    Local aCli    := {}
    Local aCliente:= {}

    If Len(PARAMIXB) < 4 // se o fonte padrão MATI030O não for a versão correta retorna o cliente.
        Return PARAMIXB[1]
    Endif

    If  Valtype(PARAMIXB[3]) <> 'C' // se não vier um json return
        Return PARAMIXB[1]
    Endif

    If PARAMIXB[4] <> 3 // se for diferente de inclusão tenho que retornar o proprio array vindo do Padrão.
        Return PARAMIXB[1]
    Endif

    aCliente:= PARAMIXB[1]
    cJson   := PARAMIXB[3]

    oJson:FromJson(cJson)
   
    nPos := AT( Upper('Content'), Upper(cJson) )
    If nPos > 0 .and.;
            Valtype(oJson['Content']) $ 'C J'.and.;
            Valtype(oJson['Content']['GovernmentalInformation']) = 'A' .and.;
            Valtype(oJson['Content']['StoreId']) = 'C'

        aRet := oJson['Content']['GovernmentalInformation']
        For nI := 1 to Len(aRet)
            iF Upper(aRet[ni]["Name"]) = 'CPF' .or. Upper(aRet[ni]["Name"]) = 'CNPJ' .OR.  Upper(aRet[ni]["Name"]) = 'CGC'
                cCpf := aRet[ni]["Id"]
            Endif
        Next nI

        //cStoreId := oJson['Content']['StoreId'] // Loja esta sendo inclementada pela função GetCodCli
        aCli     := GetCodCli(cCpf)

        If !Empty(cCpf) .and. !Empty(aCli)
            nPos := aScan(aCliente, {|X| Alltrim(x[1]) == 'A1_COD'})
            If nPos > 0
                aCliente[nPos][2] := aCli[1] // Codigo do Cliente no SA1 pelo CPF
            Endif

            nPos := aScan(aCliente, {|X| Alltrim(x[1]) == 'A1_LOJA'})
            If nPos > 0
                aCliente[nPos][2] := aCli[2] // Loja Atual  + 1
            else
                aAdd(aCliente, {"A1_LOJA", aCli[2], Nil})
            Endif

        Endif
    Endif


    FreeObj(oJson)

Return aCliente

Static Function  GetCodCli(cCpf)
    Local aRet   := {}
    Local cQuery := ''

    If Empty(cCpf)
        Return aRet
    Endif

    cAliasFK1   := GetNextAlias()
    cQuery += " SELECT  A1_COD, MAX(A1_LOJA) LOJA FROM " + RetSqlName("SA1") + " SA1 "
    cQuery += " where "
    cQuery += "     A1_FILIAL = '" + xFilial("SA1") + "' "
    cQuery += " AND A1_CGC = '" + Alltrim(cCpf) + "' "
    cQuery += " AND D_E_L_E_T_ = '' "
    cQuery += " GROUP BY A1_COD "

    MPSysOpenQuery(cQuery, cAliasFK1)
    If (cAliasFK1)->(!(EoF()))
        aRet := { (cAliasFK1)->A1_COD, Soma1((cAliasFK1)->LOJA) }
    Endif

    (cAliasFK1)->(dbCloseArea())

Return aRet

MT410EAI - DT PE MT410EAI - Edição dos Arrays de cabeçalho e itens antes da gravação - Integração

User Function MT410EAI()
Local aCab    := aClone(PARAMIXB[1])
Local aItens  := aClone(PARAMIXB[2])
Local cJson   := ''
Local oJson   := JsonObject():New()
Local aRet    := {}
Local nPos    := 0


//cJson := '{"Header": {"GeneratedOn": "Wed, Jul  GMT","Name": "John"},"Content": { "TCOther": {"Campo1": "customize", "Campo2": "customize"},"OperatorCode": "AUTOMATICO","InsuranceValue": 0 }}'
If Len(PARAMIXB) >= 3 .and. Valtype(PARAMIXB[3]) == 'C'
    cJson   := PARAMIXB[3]
    oJson:FromJson(cJson)
    nPos := AT( Upper('Content'), Upper(cJson) )
    If nPos > 0 .and.;
       Valtype(oJson['Content']) $ 'C J'.and.;
       Valtype(oJson['Content']['TCOther']) = 'J' .and.;
       Valtype(oJson['Content']['TCOther']["DeliveryDate"]) == 'C'
       
        cDatEntrega := oJson['Content']['TCOther']["DeliveryDate"]
        aAdd(aCab, {"C5_FECENT", cTod(SubStr(cDatEntrega, 9, 2) + "/" + SubStr(cDatEntrega, 6, 2 ) + "/" + SubStr(cDatEntrega, 1, 4 )), Nil})

    Endif
Endif
aRet := {aCab, aItens}
FreeObj(oJson)

Return aRet
  • Sem rótulos