Recursos em Add-ons

Neste artigo serão apresentados os recursos disponíveis para o desenvolvimento de Add-ons na plataforma Sankhya, de acordo com as necessidades do projeto a ser implementado.

📘

Informação

Os exemplos utilizados nas seções abaixo não correspondem a projetos reais, são apenas exemplos demonstrativos para melhor compreensão dos recursos disponíveis.

Parâmetros

Os parâmetros são frequentemente utilizados na plataforma Sankhya e sua criação também é possível via Add-on. Os parâmetros salvos no banco são visualizados na tela Preferências, enquanto parâmetros criados via Add-on. só irão aparecer na tela TSIPAR, caso ele já tenha sido alterado via aplicação. Abaixo é apresentado o código referente ao arquivo parameter.xml, onde serão criados os parâmetros utilizados no Add-on. Esse arquivo deve estar dentro do projeto Model do Add-on a ser criado.

<?xml version="1.0" encoding="UTF-8"?>
<parameters group-name="mge.intnaturalle" data-source="br.com.sankhya.modelcore.util.MGECoreParameter">
  
   <parameter name="br.com.sankhya.place.intnaturalle.parametro. intnatexpcont" 
              key="INTNATJOBEXPCONT" 
              type="string" 
              cacheable="false" 
              required="false" 
              default="01 6,12,18 * * *" 
              description="Configuração CRON o JOB Exportar Contratos" 
              module="C" />
  
</parameters>

Abaixo estão listados os principais atributos disponíveis para criação de parâmetros:

• name - String correspondente ao nome utilizado para o parâmetro durante o desenvolvimento.

• key - String correspondente a chave do parâmetro que será utilizado na tela Preferências na plataforma Sankhya

• default - Valor padrão para o Parâmetro(No exemplo, trata-se de uma CRON).

• type - Tipo do parâmetro.

• cacheable - true ou false para salvar o parâmetro em cache, durante a execução da aplicação.

• required - true ou false para o parâmetro ser obrigatório. Se este campo estiver como true, será obrigatório um valor no atributo default.

• description - Descrição que será apresentado na plataforma Sankhya

• module - Módulo o qual o parâmetro fará parte.

Seguem as opções e suas descrições:

A: Cotação
B: Configuração
C: Contabilidade
D: Pedido Eletrônico
E: Comercial
F: Folha de Pagamento
G: Financeiro
H: Gestão de RH
I: Patrimonial
L: Livro Fiscal
M: Acadêmico
N: Caçamba
O: Comissão
P: Produção
R: Serviços
S: Prestamista
T: Telemarketing
Z: Armazém

Para que os parâmetros do arquivo "parameter.xml" sejam carregados durante a inicialização da aplicação, deve-se criar/alterar o arquivo param-cfg.xml no caminho: ProjetoAdd-on-Model> build > META-INF > param-cfg.xml.

<?xml version="1.0" encoding="UTF-8"?>
<parameters>
  
   <group location="br/com/sankhya/place/intnaturalle/parameters/ parameter.xml" />
  
</parameters>

📘

Informação Importante

O atributo location da tag group deve conter o caminho do arquivo parameter.xml.

Jobs

Jobs são funções executadas de acordo com um agendamento, elas são muito comuns em bancos relacionais, mas também podem ser implementadas na aplicação. Na plataforma Sankhya são bem similares aos Serviços, como exemplo demonstrativo segue a classe ExportarContratoJobBean.java.

package br.com.sankhya.place.intnaturalle.model.services;

import java.rmi.RemoteException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

import br.com.sankhya.jape.core.JapeSession;
import br.com.sankhya.jape.core.JapeSession.SessionHandle;
import br.com.sankhya.modelcore.MGEModelException;
import br.com.sankhya.modelcore.util.MGECoreParameter;
import br.com.sankhya.modelcore.util.SPBeanUtils;
import br.com.sankhya.place.intnaturalle.helpers.ExportarContratoHelper;
import br.com.sankhya.place.intnaturalle.model.exportacontratos.Contrato;
import br.com.sankhya.ws.ServiceContext;

import com.sankhya.util.TimeUtils;

/**
* @author Sankhya Place
* @ejb.bean name="ExportarContratoJob" jndi-name=
* "br/com/sankhya/place/intnaturalle/model/services/
ExportarContratoJob"
* type="Stateless" transaction-type="Container" view-type="
local"
* @ejb.transaction type="Supports"
* @ejb.util generate="false"
*/

public class ExportarContratoJobBean implements SessionBean {
    private static final long serialVersionUID = 1 l;
   
    protected SessionContext context;
    
    protected void setupContext(ServiceContext ctx) throws Exception {
      SPBeanUtils.setupContext(ctx);
    }
    
    protected void throwExceptionRollingBack(Throwable e) throws MGEModelException {
      SPBeanUtils.throwExceptionRollingBack(e, context);
    }
  
    @Override
    public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException {
        this.context = ctx;
    }
  
    @Override
    public void ejbActivate() throws EJBException, RemoteException {}
   
    @Override
    public void ejbPassivate() throws EJBException, RemoteException {}
  
    @Override
    public void ejbRemove() throws EJBException, RemoteException {}
    /**
     * @ejb.interface-method
     */
    
    public String getScheduleConfig() throws java.lang.Exception {
        return (String) MGECoreParameter.getParameter("mge.intnaturalle ", " br.com.sankhya.place.intnaturalle.parametro.intnatexpcont ");
        }
  
  	/**
  	* @ejb.interface-method
   	*/
        public void onSchedule() throws Exception, MGEModelException {
            SessionHandle hnd = null;
            // System.out.println("Inicio Job Exportar Contrato");
            try {
                hnd = JapeSession.open();
                hnd.setPriorityLevel(JapeSession.LOW_PRIORITY);
                hnd.execWithTX(new JapeSession.TXBlock() {
                    @Override
                    public void doWithTx() throws
                    Exception {}
                });
            } catch (Exception exc) {
                exc.printStackTrace();
                throwExceptionRollingBack(exc);
            } finally {
                JapeSession.close(hnd);
            }
        }
    }
}

• No mapeamento @ejb.bean o atributo view-type deve ser do tipo local.

• O método getScheduleConfig() é responsável pelo agendamento do Job. No exemplo acima é utilizado o parâmetro criado na seção anterior do tipo CRON, onde foi inserido os tempos de execução do Job.

• O método doWithTx deverá receber o algoritmo que será executado quando o Job for executado.

Para que o Job seja inicializado junto à aplicação é necessário mapeá-lo no arquivo "mgeschedule-cfg.xml" que se encontra em ProjetoAdd-on-Model > build > META-INF > mgeschedule-cfg.xml. O código abaixo demonstra esse mapeamento:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<jobs>

    <ejb-job name="ExportarContratoJob" />
    
</jobs>

Listeners em entidades do sistema

Para adicionar um listener em uma entidade já existente no sistema é necessário criar um mapeamento em um arquivo chamado Add-on-listeners.xml localizado na pasta build/META-INF do projeto Model. Abaixo é apresentado um exemplo de mapeamento para a entidade Relacionamento.

<?xml version="1.0" encoding="UTF-8"?>
<listeners>
  
    <listener entityName="Relacionamento">br.com.sankhya.labs.integra.smp.listeners.skw.IntSmpRelTelemktListener</listener>

</listeners>

Após o mapeamento, deve-se criar a classe que fará a implementação da interface, deve-se também fazer o override dos métodos desejados. A assinatura da classe de implementação é demonstrada abaixo:

public class IntSmpRelTelemktListener extends PersistenceEventAdapter

Como tirar dúvidas?

Para tirar dúvidas e compartilhar informações, use a sala Add-on da comunidade Sankhya Developer.