Aviso via transaction para documentos e cadastros
Se você precisa alertar o usuário sobre determinada situação e pedir a ciência/concordância dele, essa é a funcionalidade certa.
O CRM One possui uma tratativa para transactions padrões do SAP Business One, onde ela pode ao invés de simplesmente bloquear a ação, apresentar uma mensagem e questionar o usuário se quer seguir ou não.
Exemplo de uso:
A empresa necessita que seja enviada uma mensagem de confirmação sempre que o usuário transformar um LEAD em um CLIENTE.
Então, criaremos uma transaction padrão no B1, considerando:
1- Verificar o tipo do PN no log das tabelas do B1, para identificar o tipo do PN antes da alteração.
2- Verificar o tipo do PN que está sendo salvo.
Ao validar, iremos retornar a mensagem de “erro” da transaction no seguinte formato:
[AlertaCRMOne] Deseja alterar o cadastro de LEAD para CLIENTE?
Ao receber a mensagem da transaction, o CRM One irá interpretar a string [AlertaCRMOne] e transformará o bloqueio em uma “mensagem de confirmação”.
Veja como o retorno da transaction aparecerá:
Se o usuário clicar no botão NÃO, a mensagem será fechada e nada será feito, inclusive a atualização do cadastro.
Se o usuário clicar no botão SIM, o CRM One irá reprocessar a atualização e seguir adiante.
É importante entender que quando o usuário clicar no botão SIM, o CRM One atualiza um campo de usuário de controle chamado U_DWU_IgnoraAlerta na tabela correspondente da validação com o valor ‘S‘ de SIM. Por isso, sua transaction deve validar esse campo também para permitir que a atualização ocorra com sucesso quando o usuário clicar no botão SIM, ou seja, quando o CRM One reprocessar a atualização, a transaction não vai exibir a mensagem de novo.
Agora, veja a transaction SQL para a tratativa:
-- ################################################
-- INÍCIO - Alerta Lead para Cliente - CRM ONE
-- ################################################
-- VALIDA NOVO CADASTRO DO TIPO CLIENTE
IF @object_type in ('2') and @transaction_type in ('A')
BEGIN
IF
(SELECT CardType FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'C'
AND
(SELECT ISNULL(U_DWU_IgnoraAlerta,'N') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'N'
AND
(SELECT ISNULL(U_DWU_Origem,'') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'W'
BEGIN
Select @error = -1, @error_message = '[AlertaCRMOne] Deseja inserir o cadastro diretamente como CLIENTE?'
select @error, @error_message
END
END
-- VALIDA SE O CADASTRO ESTÁ SENDO ALTERADO DE LEAD PARA CLIENTE
IF @object_type in ('2') and @transaction_type in ('U')
BEGIN
IF
(SELECT TOP 1 CardType FROM ACRD WHERE CardCode = @list_of_cols_val_tab_del ORDER BY LogInstanc DESC) = 'L'
AND
(SELECT CardType FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'C'
AND
(SELECT ISNULL(U_DWU_IgnoraAlerta,'N') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'N'
AND
(SELECT ISNULL(U_DWU_Origem,'') FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'W'
BEGIN
Select @error = -1, @error_message = '[AlertaCRMOne] Deseja alterar o cadastro de LEAD para CLIENTE?'
select @error, @error_message
END
END
-- REDEFINE O CAMPO U_DWU_IgnoraAlerta PARA 'N' PARA CAIR NOVAMENTE NA VALIDAÇÃO DE ATUALIZAÇÃO
IF @object_type in ('2') and @transaction_type in ('A','U')
BEGIN
IF (SELECT CardType FROM OCRD WHERE CardCode = @list_of_cols_val_tab_del) = 'L'
BEGIN
UPDATE OCRD SET U_DWU_IgnoraAlerta = 'N' WHERE CardCode = @list_of_cols_val_tab_del
END
END
-- ################################################
-- FIM - Alerta Lead para Cliente - CRM ONE
-- ################################################
Agora, veja a transaction HANA para a tratativa:
-- ################################################
-- INÍCIO - Alerta Lead para Cliente - CRM ONE
-- ################################################
IF :object_type = ('2')
THEN
DECLARE CardTypeLog NVARCHAR(20);
DECLARE CardType NVARCHAR(20);
DECLARE U_DWU_IgnoraAlerta NVARCHAR(20);
DECLARE U_DWU_Origem NVARCHAR(20);
----------------------------------------------------------------------------------
-- VALIDA NOVO CADASTRO DO TIPO CLIENTE
----------------------------------------------------------------------------------
IF :transaction_type = ('A')
THEN
SELECT (SELECT "CardType" FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO CardType FROM DUMMY;
SELECT (SELECT IFNULL("U_DWU_IgnoraAlerta", 'N') FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO U_DWU_IgnoraAlerta FROM DUMMY;
SELECT (SELECT IFNULL("U_DWU_Origem", '') FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO U_DWU_Origem FROM DUMMY;
IF :CardType = 'C' AND :U_DWU_IgnoraAlerta = 'N' AND :U_DWU_Origem = 'W'
THEN
error_message := '[AlertaCRMOne] Deseja inserir o cadastro diretamente como CLIENTE?';
error := 1;
END IF;
END IF;
----------------------------------------------------------------------------------
-- VALIDA SE O CADASTRO ESTÁ SENDO ALTERADO DE LEAD PARA CLIENTE
----------------------------------------------------------------------------------
IF :transaction_type = ('U')
THEN
SELECT (SELECT TOP 1 "CardType" FROM ACRD WHERE "CardCode" = :list_of_cols_val_tab_del ORDER BY "LogInstanc" DESC) INTO CardTypeLog FROM DUMMY;
SELECT (SELECT "CardType" FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO CardType FROM DUMMY;
SELECT (SELECT IFNULL("U_DWU_IgnoraAlerta", 'N') FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO U_DWU_IgnoraAlerta FROM DUMMY;
SELECT (SELECT IFNULL("U_DWU_Origem", '') FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO U_DWU_Origem FROM DUMMY;
IF :CardTypeLog = 'L' AND :CardType = 'C' AND :U_DWU_IgnoraAlerta = 'N' AND :U_DWU_Origem = 'W'
THEN
error_message := '[AlertaCRMOne] Deseja alterar o cadastro de LEAD para CLIENTE?';
error := 1;
END IF;
END IF;
----------------------------------------------------------------------------------
-- REDEFINE O CAMPO U_DWU_IgnoraAlerta PARA 'N' PARA CAIR NOVAMENTE NA VALIDAÇÃO DE ATUALIZAÇÃO
----------------------------------------------------------------------------------
IF :transaction_type='A' OR :transaction_type='U'
THEN
SELECT (SELECT "CardType" FROM OCRD WHERE "CardCode" = :list_of_cols_val_tab_del) INTO CardType FROM DUMMY;
IF :CardType = 'L'
THEN
UPDATE OCRD SET "U_DWU_IgnoraAlerta" = 'N' WHERE "CardCode" = :list_of_cols_val_tab_del;
END IF;
END IF;
END IF;
-- ################################################
-- FIM - Alerta Lead para Cliente - CRM ONE
-- ################################################
Pronto!
Agora você pode criar estes alertas nas telas existentes do CRM One WEB e personalizar ainda mais o ambiente do CRM One.