Minimum requirements:
- .NET Framework 4.7.2
- Database in SQL Server 2016 or above
- Sage 2021 version or above
Introdução
O SmartTools é um produto abrangente, com diversos tipos de micro produtos, validações, rotinas etc. um autêntico canivete suíço.
Manual de instalação
O processo de instalação da extensibilidade é bastante simples.
Pedimos ao utilizador que siga os passos abaixo indicados para instalar a extensibilidade SmartTools.
Para a utilização da extensibilidade a base de dados deve correr numa versão SQL Server 2016 ou superior.
Passo 1 – Instalação da extensibilidade
Executar o exe de instalação do produto como administrador .

Passo 2 – Configurar o Sage
Abrir o BackOffice do Sage > Clicar no botão do menu > Clicar no botão “Personalização” > Clicar no botão “Parametrizações funcionais”

Ao abrir a janela dos “Parâmetros”, clicar no botão “Integração de Dados”.

No sub-menu “Extensibilidade” preencher o campo “Ponto de entrada para a classe ISageExtender:” com o seguinte texto sem aspas.
“SmartDigit.SmartTools.Sage50c”

Alterar a opção “Carrega o módulo da extensibilidade em:” para a adequada.
Deve agora clicar no botão “Fechar e gravar” deverá depois reiniciar o Sage para as configurações serem aplicadas.
Manual de Configuração
A extensibilidade foi desenvolvida com o foco de ser simples e intuitiva, no entanto abaixo pode encontrar as descrições das funcionalidades.
O SmartTools é uma ferramenta poderosa, quem vem colmatar algumas falhas que o sage tem.
Uma das funcionalidades do produto, é a validação de campos.
Alguns exemplos de uso
Não deixar gravar um documento caso algo não esteja de acordo
Não deixar gravar uma ficha de cliente caso o telefone não esteja preenchido
Dar uma mensagem ao fazer um documento caso o cliente tenha artigos por entregar
Estes são alguns exemplos da funcionalidade do produto, visto ser uma ferramenta dinâmica conseguimos validar qualquer campo.
Para configurar uma ferramenta basta ir SmartApps-> Ferramentas

Dentro das ferramentas podemos criar uma ferramenta do tipo Logs

Descrição : Descrição da ferramenta criada
Tipo : Neste exemplo é logs
Ativo : se está ou não ativa a ferramenta
Event :Onde é para fazer a validação, caso seja na gravação então por norma será sempre OnValidating
Entity Onde é para executar, em que tabela, neste exemplo Customer (Clientes)
Query : query que vai fazer a validação
Mensagem : Mensagem a mostrar caso o retorno da query seja true
Mostrar mensagem : Se mostramos a mensagem
Mandatorio : Se é obrigatorio
Neste exemplo acima a ferramenta criada vai verificar ao gravar um cliente se o email está preenchido, caso não esteja aparece a mensagem “Por favor preencha o email” e não deixa gravar o cliente até o mesmo estar preenchido
Criada a ferramenta podemos então validar a mesma, caso seja criado um cliente sem email vai mostrar a seguinte mensagem

Caso tenhamos dificuldade a saber os campos a validar na query, podemos sempre ativar a opção “registar objetos do evento” na criação da ferramenta. dessa forma ao gravar na etidade criada registamos todo o objeto na tabela ux_sd_logs .
Em alternativa mas pode não ser tão perceptível visto existirem centenas de campos, podemos carregar no botão “propriedades” na criação da ferramenta, para pesquisarmos a variável pretendida

Alguns Exemplos
Validar desconto da família do artigo
- Validar desconto da família do artigo, caso seja superior bloquear (caso esse desconto venha de campanha o Sage não tem isso em conta nem valida. com o smarttools tal validacao é possivel)

Entity : SaletransactionDetail
Query :
select
case when #DiscountPercent# > (select f.MaximumDiscountAllowed from Item i inner join Family f on f.FamilyID=i.FamilyID where itemid=’#ItemID#’) then 1
else 0 end
Mensagem :Desconto Maior que o permitido
Gravar/Alterar vendas com datas anteriores

Entity : Saletransaction
Query :
SELECT
CASE
WHEN CAST(GETDATE() AS time) >= '21:30:00'
AND TRY_CONVERT(
date,
'#ExtraFieldList[ExtraFieldID='17'].DateAnswer#',
103
) = DATEADD(day, 1, CAST(GETDATE() AS date))
THEN 1
ELSE 0
END
Bloquear venda com base na data de um campo extra
Nao permitir que o operador depois das 21.30 registe um documento com data de entrega para o dia seguinte
Entity : Saletransaction
Query :
SELECT CASE
WHEN CAST(GETDATE() AS time) >= '21:30:00'
AND TRY_CONVERT(
date,
'#ExtraFieldList[ExtraFieldID='17'].DateAnswer#',
103
) = DATEADD(day, 1, CAST(GETDATE() AS date))
THEN 1
ELSE 0
END
Mensagem :Nao pode gravar o documento com data de amanha depois das 21:30