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).
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) |