Email Distribution - gfrancischini/hbp_guide GitHub Wiki
A distribuição de email será utilizada para configurar o envio de email automaticos para determinados tipos de objetos do mSeries.
A seguinte tela será utilizada no portal para possibilitar a configuração das regras de envio de email
O seguinte modelo de dados descreve o sistema de distribuição de email
http://dbdesigner.net/designer/schema/83470
O objetivo com esse modelo de dados é que a distribuição de email poderá ser configurada para adicionar novos tipos de objetos suportados pelo distribuidor apenas utilizando configurações (dml) e procedures. Não será necessário modificar o job c# diminuindo o tempo necessário que o configurador necessita.
Um novo tipo de email poderá ser cadastrado utilizando a csEmailDistrubitionType. Vamos utilizar como exemplo o cadastro de um novo tipo de email para Pedido.
Primeiro devemos cadastrar na csEmailDistributionType os seguintes valores:
cdEmailDistributionType = [CODIGO_DO_TIPO_DA_DISTRIBUICAO]
,nmEmailDistributionType = [NOME_DO_TIPO_DA_DISTRIBUICAO]
,idObjectType = [TIPO_DO_OBJETO] // Tipo do objeto que é tratado por essa distribuição
,dsQueryObjectSubType = [PROCEDURE_NAME] // nome da procedure que é utilizada para recuperar o object sub type
,dsQueryPendingObjects = [PROCEDURE_NAME] // nomde da procedure que é executada para recuperar os id dos objetos que precisam ter seus emails gerados
,idTemplateDef = [ID_DO_TEMPLATE]`
A procedure/função sempre é chamada com os seguintes parametros de entrada: Entrada:
- idEmailDistributionType -> id da distribuição que está chamando a procedure
- idObjectType -> tipo de objeto que é tratado pela distribuição
Processamento: A procedure deverá realizar os selects neessários para retornar o object subtype. No exemplo iremos realizar um select na slOrderType pois é ela que contém nosso object sub type. Se estivessemos falando de Surveys iriamos selecionar a qsQuestDef
Saída:
- idObjectSubType -> id do subtype disponivel
- cdObjectSubType -> codigo do subtype disponivel
- nmObjectSubType -> nome do subtype disponivel
\\ Exemplo de select de subtype
select
idOrderType as idObjectSubType,
cdOrderType as cdObjectSubType,
nmOrderType as nmObjectSubType
from slordertype
where flServerDeleted = 0
A procedure da dsQueryPendingObjects deverá retornar todos os objetos que ainda precisam ser distribuidos por email.
A procedure/função sempre é chamada com os seguintes parametros de entrada:
Entrada:
- idEmailDistributionType -> id da distribuição que está chamando a procedure
- idObjectType -> tipo de objeto que é tratado pela distribuição
- idObjectSubType -> subtipo do objeto que é tratado pela distribuição (csEmailDistribution). Pode ser null, isso significa que nenhum subtype existe ou foi escolhido. Ex: No caso de pedidos se o subtype for null significa que devemos retornar todos os id de pedidos pendentes indepentende do slOrderType
Saída: Deverá retornar as seguintes informações dos objetos que devem ser gerados o email
- idObjectType -> Tipo do objeto
- idObject1 -> id 1 do objeto
- idObject2 -> id 2 do objeto (pode ser null), usado apenas para objetos com chave composta
A procedure dsQueryRecipientObjectId deverá retornar o id da entidade que possui o endereço de email a ser enviado
Entrada:
- idEmailDistributionType -> id da distribuição que está sendo tratada
- idObjectType -> Tipo do objeto
- idObjectSubType -> Subtipo do objeto
- idRecipientObjectType -> A coluna idRecipiendObjectType guarda qual o idObjectType que sera usado como id da entidade que possui o endereço de email.
Ex. Se vamos enviar um pedido para o Customer o idRecipiendObjectType será igual a "ACCT". Neste caso a procedure deverá retornar o idAccount da slOrder (select idAccount as idRecipientObject1 from slOrder) Ex2. Se vamos enviar um pedido para o usuario que fez o Pedido o idRecipiendObjectType será igual a "USR". Neste caso a procedure deverá retornar o idUser da slOrder (select idUser as idRecipientObject1 from slOrder)
if idObjectType = 'USR'
begin
select idUser as idRecipientObject1 from slOrder
end
else if idobjectType = 'ACCT'
select idAccount as idRecipientObject1 from slOrder
Saida:
- idRecipientObject1 -> id da entidade que possuí o endereço de email
- idRecipientObject2 -> id 2 da entidade que possuí o endereço de email
Os dados de saida serão utilizados como parametros de entrada da procedure que retorna o(s) endereços de email
Para cadastrar um novo tipo de email recipient devemos inserir uma nova linha na csEmailDistributionRecipientType
A dsQueryEmail email deverá retornar o endereço de email da entidade cadastrada como idObjectType.
Entrada: idEmailDistributionRecipientType -> id da distribuição de destinarios idObjetType -> Tipo do objeto que deverá ser retornado o email idRecipientObject1 -> id do objeto que deverá ter o endereço de email retornado idRecipientObject2 -> id 2 do objeto que deverá ter o endereço de email retornado
Saida: endereço de email da entidade
- vlEmail -> endereço de email
Ex: USR -> select dsEmail as vlEmail where idUser = @idRecipientObject1
idObjectType -> Tipo de objeto que será enviado o email idObjectSubType -> Subtipo do objeto que será enviado o email. Se null o subtipo é todos flAddTemplatAsBody -> O template de conteudo gerado será enviado no corpo do email flAddTemplateAsAttachment -> O template de conteudo gerado será enviado como anexo flOneEmailPerVisit -> Todas as atividades da visita que possuem envio de email serão enviadas em um unico email
vlFixedRecipient -> endereço de email fixo quando distribution type = null?