- Criado por Alessandro Afonso Faria, última alteração em 09 out, 2023
1. Lista de Pontos de Entrada
Fluxo | Rotina | Ponto de Entrada | Objetivo | |
---|---|---|---|---|
1 | Protheus → TOTVS CRM | Cadastro de Clientes | MT030Jin | Integração mensagem única do Protheus. Adicionar campos específicos na mensagem "CustomerVendor", durante o envio da mensagem do erp para TOTVS CRM. |
2 | Protheus → 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.) |
3 | TOTVS CRM → Protheus | Cadastro de Clientes | MTI030NOM | 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 | ||||
5 | TOTVS CRM → Protheus | Cadastro 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} |
6 | TOTVS CRM → Protheus | Pedidos | 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()
ElseIf (FwisInCallStack("CFG020ASINC")) else |
MT030Jin |
---|
User Function MT030Jin() cTipo := SA1->A1_TIPO Else 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() 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() //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