Perguntas M-Messenger
- lalberto
- Autor do Tópico
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
12 anos 11 meses atrás #354
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
M-Messenger foi criado por lalberto
Senhores, boa tarde!
Alguém sabe como utilizar a funcionalidade do M-MESSENGER cadastrando novos eventos e customizando rotinas p/ disparar emails para esses novos eventos??? Há um manual para isto? No help apenas fala como usar os eventos já cadastrados...
Grato,
Fabio
Alguém sabe como utilizar a funcionalidade do M-MESSENGER cadastrando novos eventos e customizando rotinas p/ disparar emails para esses novos eventos??? Há um manual para isto? No help apenas fala como usar os eventos já cadastrados...
Grato,
Fabio
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Autor do Tópico
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
12 anos 11 meses atrás #400
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Re: M-Messenger
Boa tarde
Você pode cadastrar os eventos na tabela E3 do SX5, vinculá-los aos usuários através da rotina m-messenger e chama-los através de ponto de entrada, dependendo do que você precisa ser avisado/executado. Segue abaixo exemplo que montei para um cliente.
#include "rwmake.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MA080VLD ºAutor ³ Marcos Candido º Data ³ 18/09/08 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Ponto de entrada ativado no botao "OK" do cadastro do º±±
±±º ³ TES. (Inclusao / Alteracao / Exclusao). º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MA080VLD
Local lRetorno := .T.
Local aInfo := {}
Local aOpc := PARAMIXB
If aOpc[1] == 3
aadd(aInfo , "O TES abaixo acaba de ser incluido no sistema pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
aadd(aInfo , "Código: "+M->F4_CODIGO )
aadd(aInfo , "Texto Padrão: "+M->F4_TEXTO )
aadd(aInfo , "Finalidade: "+M->F4_FINALID )
ElseIf aOpc[1] == 4
dbSelectArea("SF4")
dbSetOrder(1)
dbSeek(xFilial("SF4")+M->F4_CODIGO)
For j:=1 to FCount()
If FieldGet(FieldPos(FieldName(j))) <> &("M->"+(FieldName(j)))
If Len(aInfo) == 0
aadd(aInfo , "Os seguintes campos foram alterados no cadastro de TES: " +M->F4_CODIGO )
aadd(aInfo , "pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
Endif
If ValType(FieldGet(FieldPos(FieldName(j)))) == "N"
cOld := Str(FieldGet(FieldPos(FieldName(j))))
cNew := Str(&("M->"+(FieldName(j))))
Elseif ValType(FieldGet(FieldPos(FieldName(j)))) == "D"
cOld := DtoC(FieldGet(FieldPos(FieldName(j))))
cNew := DtoC(&("M->"+(FieldName(j))))
Elseif ValType(FieldGet(FieldPos(FieldName(j)))) == "C"
cOld := FieldGet(FieldPos(FieldName(j)))
cNew := &("M->"+(FieldName(j)))
Else
cOld := ""
cNew := ""
Endif
aadd(aInfo , FieldName(j) )
aadd(aInfo , "Conteúdo Anterior: "+cOld )
aadd(aInfo , "Novo Conteúdo : "+cNew )
Endif
Next
Else
aadd(aInfo , "O TES abaixo acaba de ser excluido no sistema pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
aadd(aInfo , "Código: "+SF4->F4_CODIGO )
aadd(aInfo , "Texto Padrão: "+SF4->F4_TEXTO )
aadd(aInfo , "Finalidade: "+SF4->F4_FINALID )
Endif
MEnviaMail("Z10",aInfo)
Return(lRetorno)
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MMENSZ10 ºAutor ³ Marcos Candido º Data ³ 18/09/08 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Rotina para adequar a mensagem que o usuario ira receber º±±
±±º ³ sobre evento pre cadastrado. º±±
±±º ³ º±±
±±º ³ Z10 ==> Inclusao/Alteracao/Exclusao de TES º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MMENSZ10
Local cMens := ""
Local aInfo := PARAMIXB
For m:=1 to Len(aInfo[1])
cMens += aInfo[1][m]+CHR(13)+CHR(10)
Next
Return cMens
São dois pontos de entrada que funcionam em conjunto. O MEnviaMail, que você deve passar o código do evento e um array com as mensagens que serão enviadas. No exemplo acima ficou MEnviaMail("Z10",aInfo).
E o outro ponto de entrada que concatena a palavra MMENS com o codigo do seu evento . No exemplo acima ficou MMENSZ10, pois meu evento está cadastrado como Z10. Para cada evento customizado você deverá ter uma User Function MMENSxxx .
Funciona que é uma beleza.
Abraços.
Marcos Candido
Você pode cadastrar os eventos na tabela E3 do SX5, vinculá-los aos usuários através da rotina m-messenger e chama-los através de ponto de entrada, dependendo do que você precisa ser avisado/executado. Segue abaixo exemplo que montei para um cliente.
#include "rwmake.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MA080VLD ºAutor ³ Marcos Candido º Data ³ 18/09/08 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Ponto de entrada ativado no botao "OK" do cadastro do º±±
±±º ³ TES. (Inclusao / Alteracao / Exclusao). º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MA080VLD
Local lRetorno := .T.
Local aInfo := {}
Local aOpc := PARAMIXB
If aOpc[1] == 3
aadd(aInfo , "O TES abaixo acaba de ser incluido no sistema pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
aadd(aInfo , "Código: "+M->F4_CODIGO )
aadd(aInfo , "Texto Padrão: "+M->F4_TEXTO )
aadd(aInfo , "Finalidade: "+M->F4_FINALID )
ElseIf aOpc[1] == 4
dbSelectArea("SF4")
dbSetOrder(1)
dbSeek(xFilial("SF4")+M->F4_CODIGO)
For j:=1 to FCount()
If FieldGet(FieldPos(FieldName(j))) <> &("M->"+(FieldName(j)))
If Len(aInfo) == 0
aadd(aInfo , "Os seguintes campos foram alterados no cadastro de TES: " +M->F4_CODIGO )
aadd(aInfo , "pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
Endif
If ValType(FieldGet(FieldPos(FieldName(j)))) == "N"
cOld := Str(FieldGet(FieldPos(FieldName(j))))
cNew := Str(&("M->"+(FieldName(j))))
Elseif ValType(FieldGet(FieldPos(FieldName(j)))) == "D"
cOld := DtoC(FieldGet(FieldPos(FieldName(j))))
cNew := DtoC(&("M->"+(FieldName(j))))
Elseif ValType(FieldGet(FieldPos(FieldName(j)))) == "C"
cOld := FieldGet(FieldPos(FieldName(j)))
cNew := &("M->"+(FieldName(j)))
Else
cOld := ""
cNew := ""
Endif
aadd(aInfo , FieldName(j) )
aadd(aInfo , "Conteúdo Anterior: "+cOld )
aadd(aInfo , "Novo Conteúdo : "+cNew )
Endif
Next
Else
aadd(aInfo , "O TES abaixo acaba de ser excluido no sistema pelo usuário: "+Substr(cUsuario,7,15) )
aadd(aInfo , " " )
aadd(aInfo , "Código: "+SF4->F4_CODIGO )
aadd(aInfo , "Texto Padrão: "+SF4->F4_TEXTO )
aadd(aInfo , "Finalidade: "+SF4->F4_FINALID )
Endif
MEnviaMail("Z10",aInfo)
Return(lRetorno)
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MMENSZ10 ºAutor ³ Marcos Candido º Data ³ 18/09/08 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Rotina para adequar a mensagem que o usuario ira receber º±±
±±º ³ sobre evento pre cadastrado. º±±
±±º ³ º±±
±±º ³ Z10 ==> Inclusao/Alteracao/Exclusao de TES º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MMENSZ10
Local cMens := ""
Local aInfo := PARAMIXB
For m:=1 to Len(aInfo[1])
cMens += aInfo[1][m]+CHR(13)+CHR(10)
Next
Return cMens
São dois pontos de entrada que funcionam em conjunto. O MEnviaMail, que você deve passar o código do evento e um array com as mensagens que serão enviadas. No exemplo acima ficou MEnviaMail("Z10",aInfo).
E o outro ponto de entrada que concatena a palavra MMENS com o codigo do seu evento . No exemplo acima ficou MMENSZ10, pois meu evento está cadastrado como Z10. Para cada evento customizado você deverá ter uma User Function MMENSxxx .
Funciona que é uma beleza.
Abraços.
Marcos Candido
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- tragial.alan
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 7
- Obrigados Recebidos: 0
11 anos 7 meses atrás #12776
por tragial.alan
Respondido por tragial.alan no tópico Re: M-Messenger
Olá Luiz Alberto,
Estou usando o protheus 10 ainda para fazer uns testes. E breve migraremos para o Protheus 11.
Eu compilei o código e cadastrei na E3 da SX5 ... mudando todos os Z10 para meu código que era 049.
Porém, quando altero ou incluo, ele só informa que eu a excluí.
Você poderia dar um help?
Abraços.
Att.
Estou usando o protheus 10 ainda para fazer uns testes. E breve migraremos para o Protheus 11.
Eu compilei o código e cadastrei na E3 da SX5 ... mudando todos os Z10 para meu código que era 049.
Porém, quando altero ou incluo, ele só informa que eu a excluí.
Você poderia dar um help?
Abraços.
Att.
Por favor Acessar ou Registrar para participar da conversa.
- Rstrozi
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 123
- Obrigados Recebidos: 0
11 anos 1 mês atrás #17264
por Rstrozi
Respondido por Rstrozi no tópico Re: M-Messenger
Boa tarde Pessoal,
Peço desculpas pelo comentário tardio, porém não é necessário utilizar FieldGet(FieldPos(FieldName(n))) para pegar o conteúdo do campo. Utilizando simplesmente FieldGet(n), já funciona.
Peço desculpas pelo comentário tardio, porém não é necessário utilizar FieldGet(FieldPos(FieldName(n))) para pegar o conteúdo do campo. Utilizando simplesmente FieldGet(n), já funciona.
Por favor Acessar ou Registrar para participar da conversa.
- tyelsilva
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 12
- Obrigados Recebidos: 0
7 anos 6 meses atrás #32134
por tyelsilva
Respondido por tyelsilva no tópico Re: M-Messenger
Boa tarde!
Referente a estes pontos de entrada, usei-os como exemplo alterando a tabela e os campos. Quando executo a função mostra "variable does not exist PARAMIXB". O que tenho que fazer para corrigir esse erro?
Desde já agradeço.
Att,
Marciel
Referente a estes pontos de entrada, usei-os como exemplo alterando a tabela e os campos. Quando executo a função mostra "variable does not exist PARAMIXB". O que tenho que fazer para corrigir esse erro?
Desde já agradeço.
Att,
Marciel
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.160 segundos