1. Lista de Pontos de Entrada


FluxoRotinaPonto de EntradaObjetivo
1Protheus →  TOTVS CRMCadastro de ClientesMT030Jin

Integração mensagem única do Protheus.

Adicionar campos específicos na mensagem "CustomerVendor", durante o envio da mensagem do erp para TOTVS CRM.

2Protheus →  TOTVS CRM
Cadastro de Produtos

MT010Jin

Integração mensagem única do Protheus.

Adicionar campos específicos na mensagem "Item", durante o envio da mensagem do erp para TOTVS CRM.

Parâmetro deve receber como retorno um cJson, com a mensagem parcial, que será adicionada a mensagem original.

cJson := ExecBlock("MT010Jin",.F.,.F.)

3TOTVS CRM → ProtheusCadastro de ClientesMTI030NOM

Integração mensagem única do Protheus. Fluxo: TOTVS CRM → 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})

4



5TOTVS CRM → ProtheusCadastro de Produtos

MT010EAI

Integração mensagem única do Protheus, Fluxo: TOTVS CRM → Protheus

Ponto de entrada que permite inserir campos específicos no array, aCab.

Utilizar este PE para popular o array aCab, com campos específicos vindos na mensagem, antes da execução da execauto,  criação do produto.

Parâmetros passados para PE:  {aCab,nOpcX}

6TOTVS CRM → 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()}


Exemplo : MT010Jin

User Function MT010Jin()
    Local cJson  := ''
    Local ret    := nil
    Local oModel := FWModelActive()
    Local lMVC   := TableInDic("G3Q", .F.) .And. oModel <> Nil .And. oModel:cSource == "MATA010"
    Local cQe    := ''
    Local aArea   := GetArea()


    If lMVC
        cQe := oModel:GetValue("SB1MASTER","B1_QE")

    ElseIf (FwisInCallStack("CFG020ASINC"))
        cQe := SB1->B1_QE

    else
        cQe := M->B1_QE
    Endif

    cJson += '{'
    cJson += '"TcOrthers": {'
    cJson +=             '"PackingQuantity": "' + cValToChar(cQe) +  '"'
    cJson +=   '}'
    cJson += '}'

    oJson := JsonObject():New()
    ret := oJson:FromJson(cJson)
   
    if ValType(ret) == "C"
        //Falha ao transformar texto em objeto json
        cJson := ''
    Endif
    RestArea(aArea)
Return cJson

MT030Jin

User Function MT030Jin()
    Local cJson      := ''
    Local ret        := nil
    Local oModel     := FWModelActive()
    Local lMVC       := TableInDic("G3Q", .F.) .And. oModel <> Nil .And. oModel:cSource == "MATA030"
    Local aArea      := GetArea()
    Local cTipo
   
    ConOut("Inicio - ponto de entrada MT030Jin")
   
    If lMVC
        cTipo := oModel:GetValue("MATA030_SA1","A1_TIPO")
    ElseIf (FwisInCallStack("CFG020ASINC"))   

        cTipo := SA1->A1_TIPO

     Else
        cTipo := M->A1_TIPO
    Endif



    If Empty(cTipo)
        Return cJson
    Endif

    cJson += '{'
    cJson += '"TcOrthers": {'
    cJson +=     '"_customer_type" : "' + Alltrim(cTipo) + '"'
    cJson +=   '}'
    cJson += '}'
   
    oJson := JsonObject():New()
    ret := oJson:FromJson(cJson)
   
    ConOut("cJson -> "+cJson)

    IF ValType(ret) == "C" //Falha ao transformar texto em objeto json
        cJson := ''
    Endif
   
    ConOut("Fim - ponto de entrada MT030Jin")
   
    RestArea(aArea)
Return cJson
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

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