Árvore de páginas

Exemplos de RDMAKE utilizados na Integração com a Telefonia

Serão descritos alguns exemplos de programas RDMAKE utilizados em integração com a telefonia (CTI).

Exemplo de rdmake para limpar os campos de telefones e deixar apenas números válidos (0123456789)

 

#INCLUDE 'RWMAKE.CH' 

 

/*

Programa: Limpa          

Autor:Microsiga          

Descricao: Limpa os caracteres invalidos do campo de Telefone

 

*/

 

Function Limpa()

 

LOCAL nOpca       :=     0

LOCAL aSays        :=     {}

LOCAL aButtons :=        {}

 

AADD(aSays,'Esta rotina irá realizar a atualização do número de Telefone das tabelas de Clientes, Contatos e Prospects')

AADD(aButtons,{ 1,.T.,{|o| nOpca:= 1, o:oWnd:End() }} )

AADD(aButtons,{ 2,.T.,{|o| o:oWnd:End() }} )

 

FormBatch('De/Para de Telefone',aSays,aButtons,,150,350 )

           

If nOpcA == 1

    Processa({||AtuSA1()},,'Atualizando Telefone do Cadastro de Clientes')

    Processa({||AtuSU5()},,'Atualizando Telefone do Cadastro de Contatos  ')

    Processa({||AtuSUS()},,'Atualizando Telefone do Cadastro de Prospects ')

Endif    

 

Aviso('Atencao !!', 'Processamento Efetuado com Sucesso !!', {' Ok '})

 

Return(.T.)

 

/*

 

Funcao: AtuSA1   

Autor: Microsiga      

Descricao: Funcao De/Para de TELEFONE da tabela SA1 -  Atualizacao de Telefone para retirar caracteres da base  

 

*/

 

Static Function ATUSA1()

 

DbSelectArea('SA1')

ProcRegua(RecCount())

DbSeek(xFilial('SA1'),.T.)

While !Eof() .AND. xFilial('SA1') == SA1->A1_FILIAL

            IncProc('Efetuando De/Para Telefone: '+A1_TEL)

            BEGIN TRANSACTION

                        Reclock('SA1',.F.)

                        If !Empty(A1_TEL)

                                   Replace SA1->A1_TEL With LimpaTel(SA1->A1_TEL)

                        Endif    

           

                        If !Empty(A1_FAX)

                                   Replace SA1->A1_FAX With LimpaTel(SA1->A1_FAX)

                        Endif    

                        MsUnlock()

            END TRANSACTION

          

            DbSkip()

End

 

Return(.T.)

 

/*

 

Funcao: AtuSU5

Autor: Microsiga      

Descricao: Funcao De/Para de TELEFONE da tabela SU5 -  Atualizacao de Telefone para retirar caracteres da base  

 

*/

 

Static Function ATUSU5()

 

DbSelectArea('SU5')

ProcRegua(RecCount())

DbSeek(xFilial('SU5'),.T.)

While !Eof() .AND. xFilial('SU5') == SU5->U5_FILIAL

            IncProc('Efetuando De/Para Telefone: '+ SU5->U5_FONE)

            BEGIN TRANSACTION

                        Reclock('SU5',.F.)

 

                        If !Empty(U5_FONE)

                                   Replace SU5->U5_FONE With LimpaTel(SU5->U5_FONE)

                        Endif

                       

                        If !Empty(U5_CELULAR)

                                   Replace SU5->U5_CELULAR With LimpaTel(SU5->U5_CELULAR)

                        Endif

                       

                        If !Empty(U5_FAX)

                                   Replace SU5->U5_FAX With LimpaTel(U5_FAX)

                        Endif

                       

                        If !Empty(U5_FCOM1)

                                   Replace SU5->U5_FCOM1 With LimpaTel(SU5->U5_FCOM1)

                        Endif

                       

                        If !Empty(U5_FCOM2)

                                   Replace SU5->U5_FCOM2 With LimpaTel(SU5->U5_FCOM2)

                        Endif

 

                        MsUnlock()

 

            END TRANSACTION

 

            DbSkip()

End

 

Return(.T.)

 

/*

 

Funcao: AtuSUS

Autor: Microsiga      

Descricao: Funcao De/Para de TELEFONE da tabela SUS -  Atualizacao de Telefone para retirar caracteres da base  

*/

 

Static Function ATUSUS()

 

DbSelectArea('SUS')

ProcRegua(RecCount())

DbSeek(xFilial('SUS'),.T.)

While !Eof() .AND. xFilial('SUS') == SUS->US_FILIAL

            IncProc('Efetuando De/Para Telefone: '+ SUS->US_FONE)

            BEGIN TRANSACTION

                        Reclock('SUS',.F.)

 

                        If !Empty(US_FONE)

                                   Replace SUS->US_FONE With LimpaTel(SUS->US_FONE)

                        Endif

                       

                        If !Empty(US_FAX)

                                   Replace SUS->US_FAX With LimpaTel(SUS->US_FAX)

                        Endif

 

                        MsUnlock()

 

            END TRANSACTION

 

            DbSkip()

End

 

Return(.T.)

 

 

/*

 

Funcao:LimpaTel          

Autor: Microsiga          

Descricao: Limpa os caracteres invalidos do campo de Telefone

Parametros: ExpC1 : CAMPO DA TABELA REFERENTE A TELEFONE

 

*/

 

Static Function LimpaTel(cTel)

Local nCont                   := 0                                        // Contador

Local cTelNumero := ''                                     // Codigo de telefone somente com NUMEROS - sem mascara

 

For nCont := 1 TO LEN(cTel)

            If (Substr(cTel,nCont,1) $ '0123456789')

                        cTelNumero += Substr(cTel,nCont,1)

            Endif    

Next nCont

 

Return(cTelNumero)

 


 

Exemplo de Rdmake para busca de telefones do usuário definidos nos cadastros do Protheus

#INCLUDE 'RWMAKE.CH'       

 

/*

 

Ponto de Entrada:  TMKANI   

Autor:  Microsiga          

Descrição:  Esse programa faz a busca do ANI (TipoA) nos campos especificos da base de dados                               

Paramêtros: Tipo da Identificação (1 - Código, 2 - CNPJ, 3 - TipoA) ; ID - conteúdo do tipo de identificação 

Retorno Esperado: Array com 3 posicoes: 1 - Alias, 2 - Indice , 3 - Chave

 

 

1) Essa função é um PONTO DE ENTRADA na idenficação da chamada pelo Protheus. Não pode ter tela.

 

2) Esse exemplo faz uma busca no cadastro de contatos. Lembre-se é preciso ter a estrutura criada (campos e indíces) para usar esse P.E.

 

*/

 

User Function TMKANI(cTipo,cID)

 

Local cPictTel := PesqPict('SU5','U5_FONE')                  // Picture do campo de telefone novo 

Local cPictDDD:= PesqPict('SU5','U5_DDD2')                 // Picture do campo de DDD novo

Local lFind      := .F.                                                    // Flag para apontar se achou o registro no banco

Local aRetorno:= {}                                                    // Array de retorno - OBRIGATORIO

Local cAlias     := ''                                                    // Alias da tabela que está o ID

Local nOrdem  := 0                                                    // Ordem da tabela que está o ID  

Local cChave   := ''                                                   // Chave da tabela que está o ID 

           

If (cTipo == '3')  //Identificacao por Telefone

 

            If Len(TRIM(cId)) >= 10

                        cDDD := Left(cId,2) //

                        cAni := Substr(cId,3, Len(TRIM(cId))-2 )

                                         //123456789012345

                        cAni := Transform(cAni,'@R 999999999999999')

                        cDDD := Transform(cDDD,cPictDDD)

                       

            Else

                        cAni := cId       

                        cDDD := SPACE(3)        

            Endif    

 

            DbSelectArea('SU5')

           

            If !lFind

                        DbSetOrder(8) //Telefone Especifico da base de dados do cadastro de contatos

                        If DbSeek(xFilial('SU5') + cAni + cDDD)

                                   lFind  := .T.

                                   cAlias := 'SU5'

                                   nOrdem := 8

                                   cChave := SU5->U5_FCOM2

                                  

                                   // Essa estrutura de retorno e obrigatoria

 

                                   Aadd(aRetorno,{cAlias,nOrdem,cChave})

                        Endif

            Endif

Endif

 

Return(aRetorno) 

Nível 1 (Acesso Clientes)
Espanhol
Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10
Todos
Windows
Todas TotvsDbAccess