📑 CONCEITO

Nessa página, você entenderá o processo de customização do Linx OmniPOS, no aspectos das personalizações mais complexas, para além das variações já disponíveis no produto, para configuração via retaguarda ou no próprio sistema de frente de loja.

Para execução desse projeto, como cenárioiremos utilizar a ferramenta Microsoft Visual Studio 2017.

⚠️ IMPORTANTE

  • Pela complexidade desse procedimento, recomendamos que a customização seja realizada por um prestador Linx Service Partner (LSP);
  • É importante ressaltar que não existe pré-requisitos de versionamento para o Visual Studio e tampouco para os demais softwares ou utilitários;
  • É recomendável utilizar o template WPF App (.NET Framework), pois o Linx OmniPOS foi desenvolvido em WPF (Windows Presentation Foundation), ou seja, consequentemente terá afinidade com os produtos customizados.

✔️ PASSO A PASSO

  1. Acesse o Visual Studio para criar uma aplicação do tipo WPF Application (Windows Presentation Foundation);
  2. Selecione as opções File > New e em seguida Project (Ctrl+Shift+N);
  3. Escolha a opção WPF App (.NET Framework) e clique em OK;
  4. Os campos a seguir serão pré-preenchidos, não é necessário alterá-los;
  5. Clique em OK e aguarde a criação do projeto em WPF;
  6. Na sessão Grid, serão incluídos os códigos para inicialização da nova tela de customização;
  7. No exemplo a seguir, veja no XAML(*), os objetos que foram incluídos no textbox, como: texto, tamanho da fonte, estilo da fonte e alinhamento do texto.

(*)XAML: Arquivos XAML são arquivos XML que geralmente têm a extensão .xaml
Conforme aplicado ao modelo de programação .NET Framework, o XAML simplifica a criação interface de usuário de um para um aplicativo .NET Framework. 

  1. Na sequência, execute o projeto pela opção Start, para que ele seja compilado. Automaticamente será exibida a tela em WPF;
  2. Os arquivos App.config e App.xaml não serão utilizados, então pode excluí-los da sessão Solution WpfApp (1 project);
  3. O arquivo MainWindow.xaml poderá ser utilizado posteriormente, mantenha-o;
  4. Na guia Application, das propriedades WpfApp do projeto, altere o valor do campo Output type (tipo de saída), selecionando a opção Class Library (biblioteca de classe) e depois clique no botão Salvar;
  5. Caso queira fazer uma compilação, na página Source Control Explorerem WpfAppclique com o botão direito do mouse e selecione Rebuild;
  6. Na sequência, execute Open Folder in File Explorer;

  7. Observe que os arquivos foram criados automaticamente na pasta, onde as configurações foram mantidas com o padrão inicial, de acordo com o que foi configurado anteriormente no campo Location. Exemplo: C:\Users\XXXXXX\source\repos
  8. Após o teste de compilação, prossiga com a criação da Classe do projeto.
  1. Acesse Add > Class (Shift+Alt+C). Então, caso necessário, altere o campo Name (nome da classe) e cliquem em Add (adicionar);

  2. A partir de agora, começaremos com a especificação das referências de classes;

  3. No diretório Application da pasta Linx OmniPOS do Windows, existem alguns arquivos com a extensão ".dll", que são passíveis de customização;

  • Observe como será feita a customização do componente Linx.OmniPOS.Main.ViewModell.dll, que é o ponto de entrada como base da tela principal do Linx OmniPOS.

  • Para o correto funcionamento da customização, o NameSpace deverá estar com a extensão ".ctm"

4. Logo, vamos atribuir o NameSpace ao componente Linx.OmniPOS.Main.ViewModell.dll, que ficará Linx.OmniPOS.Main.ViewModell.Ctm.

5. Depois, defina a publicação da classe por meio do comando: 

Exemplo Class1.cs
namespace Linx.OmniPOS.Main.ViewModell.Ctm
{

public class MainViewModelCtm : MainViewModelCtmBase
{
}

6. Agora é preciso referenciá-la, a fim de vincular com o Linx OmniPOS. Para isto, no projeto WpfApp1, em References, clique com o botão direito do mouse e selecione Add Reference.

7. Localize-a (opção Browse) na pasta do Linx OmniPOS/Application (já citada no item 3 desta etapa).

8. Na listagem que será apresentada, selecione Linx.OmniPOS.Main.ViewModell.dll e pressione o botão Add;

9. Na próxima tela, a ".dll" estará habilitada. Clique em OK;

10. Utilize o comando using para usar a DLL e associa-la ao Linx OmniPOS. A classe MainViewModelCtmBase fica sublinhada em vermelho, pois trata-se de uma interface;


11. Em seguida, utilize o comando Implement interface;

12.Faça a compilação novamente (Rebuild), e então, implemente o comando Return MessageBox.Showconforme destacado a seguir:

Exemplo WpfApp1
using Linx.OmniPOS.Main.ViewModel.Custom;
using System.Windows;

namespace Linx.OmniPOS.Main.ViewModell.Ctm
{

public class MainViewModelCtm : MainViewModelCtmBase
{

public bool CloseLinxOmniPos(MainViewModel obj)
{
throw new System.NoImplementedException();
}

public bool EnterInConfiguration(MainViewModel obj)
{
throw new System.NoImplementedException();
}

public bool EnterInPreSale(MainViewModel obj)
{
throw new System.NoImplementedException();
}

public bool EnterInSale(MainViewModel obj)
{
return MessageBox.Show("Customização","Linx OmniPOS",MessageBoxButton.YesNo) == MessageBoxResult.Yes;
}
}

13. Novamente, compile o arquivo por meio da opção Rebuild, para ele poder interagir com o Linx OmniPOS;

14. Depois, clique na opção Open Folder in File Explorer, que será aberta a pasta onde os arquivos foram salvos;

15. Copie o componente WpfApp.dll desta pasta;

16. Crie uma pasta Custom no diretório C:\Linx OmniPOS e cole o componente WpfApp.dll nesse local;

17. Sendo assim, altere o nome dessa ".dll" para Linx.OmniPOS.Main.ViewModell.Ctm.dll, com o finalidade de referenciá-la ao projeto;

18. Pronto, desde já o sistema pode ser aberto para execução da customização, em: C:\Linx OmniPOS\Linx.OmniPOS.App.exe

  1. Abra o Linx OmniPOS, clicando com o botão direito sobre o ícone do sistema, e escolhendo a opção Executar com Administrador;
  2. Uma vez aberto o Linx OmniPOS, em Operações, ao clicar na tela Atendimento, será exibido o alerta da customização criada. Nesse teste, clique em Não, depois, encerre a tela do Linx OmniPOS;
  3. No Visual Studio, para inclusão de uma nova mensagem no Linx OmniPOS. inclua o comando: return obj.DisplayMessage

    Exemplo WpfApp1
    using Linx.OmniPOS.Main.ViewModel.Custom;
    using System.Windows;
    
    namespace Linx.OmniPOS.Main.ViewModell.Ctm
    {
    
    public class MainViewModelCtm : MainViewModelCtmBase
    {
    
    public bool CloseLinxOmniPos(MainViewModel obj)
    {
    throw new System.NoImplementedException();
    }
    
    public bool EnterInConfiguration(MainViewModel obj)
    {
    throw new System.NoImplementedException();
    }
    
    public bool EnterInPreSale(MainViewModel obj)
    {
    throw new System.NoImplementedException();
    }
    
    public bool EnterInSale(MainViewModel obj)
    {
    return MessageBox.Show("Customização","Linx OmniPOS",MessageBoxButton.YesNo) == MessageBoxResult.Yes;
    }
    {
    return obj.DisplayMessage
    }
    }



  4. Automaticamente, vincule uma referência do Linx OmniPOS ao comando obj.DisplayMessage
  5. Para isto, novamente clique em References > Add Reference > Browser
  6. Na listagem da pasta do Linx OmniPOS/Application, selecione Linx.OmniPOS.Base.ViewModel.dll e pressione o botão Add


  7. Na próxima tela, clique em OK

  8. Observe que ao referenciá-la, faz-se necessário vincular mais objetos (".dlls")

  9. Logo, faça o mesmo procedimento com Linx.OmniPOS.Base.Model.dll

  10. O próximo passo é dar continuidade na construção da mensagem. Insira o comando:  

    new OmniPOS.DisplayMessageWindowEventArgs ().
  11. Novamente, observe que faz-se necessário vincular o Linx.OmniPOS.ClientTools, então o faça em References > Add Reference


  12. Seguindo com a construção da mensagem, inclua o comando: 

    { Message = "Continuar?" , Buttons = MessageWindowButton.YesNo }).Result == MessageWindowReturn.Yes;
  13. Onde, todo o conteúdo ficará assim:

    return obj.DisplayMessage (new OmniPOS.DisplayMessageWindowEventArgs () { Message = "Continuar?", Buttons = MessageWindowButton.YesNo }).Result == MessageWindowReturn.Yes;
  14. Na sequência, faça a compilação pela opção Rebuild.

  1. De acordo com o objeto Linx.OmniPOS.Main.ViewModel.Ctm.dll salvo na pasta Custom do Linx OmniPOS, em Properties> Application do Visual Studio, dê um novo nome aos campos Assembly name e Defaut namespace, que são referentes à classe WpfApp1;

  2. Em seguida, salve e também faça a compilação (Rebuild);
  3. Clique na opção Open Folder in File Explorer;

  4. Fazendo esse procedimento, as classes serão salvas em uma pasta padrão, exemplo: C:\Users\Nomedousuário\source\repos\WpfApp1\bin\Debug



  5. Agora, outra dica é fazer os eventos pós-construção. Para isto, primeiramente apague a pasta Custom do diretório C:\Linx OmniPOS

  6. Na aba Build Events, sessão Post-build event command line, pressione a opção Edit Post-build

  7. Inclua o comando:

         if not exist "C:\Linx OmniPOS\Custom" mkdir "C:\Linx OmniPOS\Custom"
  8. Clique no botão Macros>>

  9. Continue com o comando na próxima linha: xcopy "para a variável TargetDir ser copiada aqui, dê um duplo clique com o mouse nela)" "C:\Linx OmniPOS\Custom" /R/Y, que ficará assim:  

    xcopy "$(TargetDir)" "C:\Linx OmniPOS\Custom" /R/Y
  10. Continue com o mesmo procedimento com as variáveis TargetName e TargetExit:

    xcopy "$(TargetDir)$(TargetName)$(TargetExit)""C:\Linx OmniPOS\Custom" /R/Y

  11. Clique em OK e novamente faça a compilação por meio do botão (Rebuild);

  12. Veja que automaticamente foi criada ".dll" Linx.OmniPOS.Main.ViewModel.Ctm.dll dentro da pasta Custom em C:\Linx OmniPOS;

  13. Pronto, novamente o sistema pode ser aberto para execução das novas dicas de customização, em: C:\Linx OmniPOS\Linx.OmniPOS.App.exe

  14. Observe que o estilo/layout das mensagens (MessageBox) estarão padronizados conforme o Linx OmniPOS:

  15. Faça alteração das mensagens, conforme exemplo:

  16. Na sequência faça a compilação por meio do botão (Rebuild);

  17. Novamente abra o Linx OmniPOS para verificar a alteração.

🎞️ EXEMPLO

*Vídeo com áudio