Campos de usuário em Históricos e programações
Para realizar a customização de campos de usuário na interface da tela Históricos e Programações, do módulo Gestão do Ponto, é necessário, primeiramente na Central de banco de dados Senior, criar os campos customizados a serem exibidos na tela.
Verifique, abaixo, exemplos de customização em diferentes telas do Gestão do Ponto, bem como o uso de diversos tipos de campos.
Programação de Ponte utilizando uma enumeração existente
No Ambiente de Customização (SeniorDeveloper):
- Crie a extensão da entidade de IPonte.java:
- Código fonte da extensão com utilização da annotation @Link, que permite criar a associação para uma outra tabela. Com isso é possível exibir o botão B2, que faz a busca pela informação de outra tabela ou lista do TBS (Tabelas de bancos de dados). Neste caso é uma lista pré-existente:
Lista:
package custom.senior.entity;import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
import com.senior.dataset.annotation.Link;
import com.senior.dataset.annotation.Links;
import com.senior.entity.IPonte;
@Entity(description = "Ponte")
@Links(value = { @Link(name = "USU_Lnk1", targetEntity = "com.senior.rh.entities.readonly.ILVisEst", linkExpr = "USU_1=USU_Lnk1.Key", displayExpr = "NUMBERTOSTR(USU_Lnk1.Key) ||' - '|| USU_Lnk1.Value", searchOrder = { "Key", "Value" }, description = "Visto de Entrada") })
public interface IPonteCustom extends IPonte {
@Field()
int getUSU_1();
void setUSU_1(int value);
}
Observação
Não é necessário inserir @Link quando o campo não for uma ligação para outra tabela.
- Código fonte da extensão do systemComponent SCProgramacoesCustom.sc:
{
extensionOf : "br.com.senior.gp.sc.programacoes.SCProgramacoes",
datasetExtensions : [{
id : "DsPonte",
entity : "custom.senior.entity.IPonteCustom",
storage : {
type : "DB",
fieldMapping : [{
field : "USU_1",
column : "R064PON.USU_1"
}]
}
}]
}
- Código fonte do arquivo Entities.json:
{
systemcomponents: [{
extension: "custom.senior.sc.SCProgramacoesCustom",
base: "br.com.senior.gp.sc.programacoes.SCProgramacoes"
}]
}
- Código fonte para a criação da lista customizada IUSU_Enum:
package custom.senior.entity;
import com.senior.dataset.IEntity;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
@Entity(primaryKey = "Chave")
public interface IUSU_Enum extends IEntity {
@Field()
String getChave();
void setChave(String tipCol);
@Field()
String getValor();
void setValor(String value);
}
- Código fonte do systemComponent USU_Enum.sc:
{
datasets : [{
id : "USU_dsEnum",
entity : "custom.senior.entity.IUSU_Enum",
storage : {
type : "ENUM",
databaseId : "vetorh",
name : "USU_Enum",
keyField : "Chave",
valueField : "Valor"
}
}]
}
- Código fonte da extensão com utilização da annotation @Link, que permite criar a associação para uma outra tabela. Com isso é possível exibir o botão B2, que faz a busca pela informação de outra tabela ou lista do TBS (Tabelas de bancos de dados). Neste caso é uma lista pré-existente:
- Crie o arquivo customFragment.json. Para definir quais campos customizados serão exibidos na tela Históricos e Programações, é necessário criar o arquivo customFragment.json no sourcefolder src, conforme imagem anterior.
Neste arquivo, defina o nome da entidade e os campos customizados a serem exibidos na tela:Entidades e campos{
customFragments : [{
entity : "com.senior.entity.IPonte",
fields : [{name: "USU_LnkListaStr"}]
}]
}
- Publique a regras e visualize na tela o campo customizado;
Exemplo:
Cadastro de ponte:
Histórico de Afastamento utilizando uma enumeração criada
Criação de um campo utilizando uma lista customizada no TBS:
Lista criada:
- Crie a extensão da entidade de IHistoricoAfastamento.java.
package custom.senior.entity;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
import com.senior.dataset.annotation.Link;
import com.senior.dataset.annotation.Links;
import com.senior.entity.IHistoricoAfastamento;
@Entity(description = "HistoricoAfastamento")
@Links(value = { @Link(name = "USU_LnkTipAfa", targetEntity = "custom.senior.entity.IUSU_TipAfa", linkExpr = "USU_TipAfa=USU_LnkTipAfa.Chave", displayExpr = "NUMBERTOSTR(USU_LnkTipAfa.Chave) ||' - '|| USU_LnkTipAfa.Valor", searchOrder = { "Chave", "Valor" }, description = "Tipo de Afastamento") })
public interface IAfastamentoCustom extends IHistoricoAfastamento {
@Field
int getUSU_TipAfa();
void setUSU_TipAfa(int tipafa);
}
- Código fonte da extensão do systemComponent SCHistoricoAfastamentoCustom.sc:
{
extensionOf: "br.com.senior.rh.gp.sc.historico.afastamento.SCHistoricoAfastamento",
datasetExtensions : [{
id : "DsHistoricoAfastamento",
entity : "custom.senior.entity.IAfastamentoCustom",
storage : {
type : "DB",
fieldMapping : [{
field : "USU_TipAfa",
column : "R038AFA.USU_TipAfa"
}]
}
}]
}
- Código fonte para a criação da lista customizada IUSU_AFA.java:
package custom.senior.entity;
import com.senior.dataset.IEntity;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
@Entity(primaryKey = "Chave")
public interface IUSU_TipAfa extends IEntity {
@Field()
int getChave();
void setChave(int value);
@Field()
String getValor();
void setValor(String value);
}
- Código fonte do systemComponent USU_TipAfa.sc:
{
datasets : [{
id : "USU_dsAfa",
entity : "custom.senior.entity.IUSU_TipAfa",
storage : {
type : "ENUM",
databaseId : "vetorh",
name : "USU_AFA",
keyField : "Chave",
valueField : "Valor"
}
}]
}
- Código necessário no fonte do arquivo Entities.json. Se faz necessário além do systemcomponent ser declarado, o mapeamento da entidade customizada que foi implementada IUSU_TipAfa:
{
entities: [{
name: "custom.senior.entity.IUSU_TipAfa",
systemcomponent: "custom.senior.sc.USU_TipAfa",
dataset: "USU_dsAfa"
}],
systemcomponents: [{ extension: "custom.senior.sc.SCHistoricoAfastamentoCustom",
base: "br.com.senior.rh.gp.sc.historico.afastamento.SCHistoricoAfastamento"
}]
}
- Arquivo customFragment.json. Importante que aqui o campo deverá ser o criado pelo link:
{
customFragments : [{
entity : "com.senior.entity.IHistoricoAfastamento",
fields : [{name: "USU_LnkTipAfa"}]
}]
}
- Após publicação das regras é possível visualizar na tela o campo com a lista customizada:
Histórico de Anotação utilizando uma lista do tipo LSimNao (checkbox)
Criação de um campo utilizando a lista padrão do sistema LSimNao:
- Crie a extensão da entidade de IHistoricoAnotacoes.java. Neste exemplo é uma lista existente do sistema LSimNao do TBS. Por padrão será utilizado um checkbox para uso na nova interface:
package custom.senior.entity;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
import com.senior.entity.IHistoricoAnotacoes;
@Entity(description = "HistoricoAnotacoes")
public interface IHistoricoAnotacoesCustom extends IHistoricoAnotacoes {
@Field
String getUSU_AnoVal();
void setUSU_AnoVal(String anoval);
}
- Código fonte da extensão do systemComponent SCHistoricoAnotacoesCustom.sc:
{
extensionOf: "br.com.senior.rh.gp.sc.historico.anotacao.SCHistoricoAnotacoes",
datasetExtensions : [{
id : "DsHistoricoAnotacao",
entity : "custom.senior.entity.IHistoricoAnotacoesCustom",
storage: {
type : "DB",
fieldMapping : [{
field : "USU_AnoVal",
column : "R038NOT.USU_AnoVal"
}]
}
}]
}
- Código fonte do arquivo Entities.json:
{
systemcomponents: [{
extension: "custom.senior.sc.SCHistoricoAnotacoesCustom",
base: "br.com.senior.rh.gp.sc.historico.anotacao.SCHistoricoAnotacoes"
}]
}
- Arquivo customFragment.json.
{
customFragments : [{
entity : "com.senior.entity.IHistoricoAnotacoes",
title : "Anotacao Valida",
fields : [{name: "USU_AnoVal",
type : "CheckBox",
width : 200
}]
}]
}
- Campo visualizado após publicado:
Autorização de Extras utilizando um campo Data.
Criação de um campo utilizando padrão campo Data:
- Crie a extensão da entidade de IAutorizacaoHoraExtra.java. Neste exemplo é um campo de Data inserido no TBS.
package custom.senior.entity;
import org.joda.time.LocalDate;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
import com.senior.entity.IAutorizacaoHoraExtra;
@Entity(description = "AutorizacaoHoraExtra")
public interface IAutorizacaoHoraExtraCustom extends IAutorizacaoHoraExtra {
@Field
LocalDate getUSU_DatAut();
void setUSU_DatAut(LocalDate anoval);
}
- Código fonte da extensão do systemComponent SCProgramacoesCustom.sc:
{
extensionOf : "br.com.senior.gp.sc.programacoes.SCProgramacoes",
datasetExtensions : [{
id : "DsAutorizacaoHoraExtra",
entity : "custom.senior.entity.IAutorizacaoHoraExtraCustom",
storage: {
type : "DB",
fieldMapping : [{
field : "USU_DatAut",
column : "R064EXT.USU_DatAut"
}]
}
}]
}
- Código fonte do arquivo Entities.json:
{
systemcomponents: [{
extension: "custom.senior.sc.SCProgramacoesCustom",
base: "br.com.senior.gp.sc.programacoes.SCProgramacoes"
}]
}
- Arquivo customFragment.json.
{
customFragments : [{
entity : "com.senior.entity.IAutorizacaoHoraExtra",
fields : [{name: "USU_DatAut"}]
}]
}
- Campo data customizado na tela:
Programação de Compensação utilizando um campo de descrição (string)
Campo descrição criado na tabela de compensação:
- Crie a extensão da entidade de ICompensacao.java. Neste exemplo é um campo de descrição (string) inserido no TBS.
package custom.senior.entity;
import com.senior.dataset.annotation.Entity;
import com.senior.dataset.annotation.Field;
import com.senior.entity.ICompensacao;
@Entity(description = "Compensacao")
public interface ICompensacaoCustom extends ICompensacao {
@Field
String getUSU_Desc();
void setUSU_Desc(String usodes);
}
- Código fonte da extensão do systemComponent SCProgramacoesCustom.sc:
{
extensionOf : "br.com.senior.gp.sc.programacoes.SCProgramacoes",
datasetExtensions : [{
id : "DsCompensacao",
entity : "custom.senior.entity.ICompensacaoCustom",
storage: {
type : "DB",
fieldMapping : [{
field : "USU_Desc",
column : "R064CMP.USU_Desc"
}]
}
}]
}
- Código fonte do arquivo Entities.json:
{
systemcomponents: [{
extension: "custom.senior.sc.SCProgramacoesCustom",
base: "br.com.senior.gp.sc.programacoes.SCProgramacoes"
}]
}
- Arquivo customFragment.json:
{
customFragments : [{
entity : "com.senior.entity.ICompensacao",
fields : [{name: "USU_Desc"}]
}]
}
- Campo descrição customizado na tela:
Entidades para extensão do systemcomponent
Entidades possíveis para campos customizados adicionados em telas:
Entidade | SystemComponent | DataSet |
---|---|---|
com.senior.entity.IAutorizacaoHoraExtra | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsAutorizacaoHoraExtra |
com.senior.entity.IAutorizacaoSaida | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsAutorizacaoSaida |
com.senior.entity.ICompensacao | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsCompensacao |
com.senior.entity.IHistoricoAfastamento | br.com.senior.rh.gp.sc.historico.afastamento.SCHistoricoAfastamento | DsHistoricoAfastamento |
com.senior.entity.IHistoricoAnotacoes | br.com.senior.rh.gp.sc.historico.anotacao.SCHistoricoAnotacoes | DsHistoricoAnotacao |
com.senior.entity.IHistoricoEscala | br.com.senior.rh.gp.sc.historico.escala.SCHistoricoEscala | DsHistoricoEscala |
com.senior.entity.IPonte | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsPonte |
br.com.senior.rh.entity.IProjecaoHorario | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsProjecaoHorario |
com.senior.entity.ISobreavisoProntidao | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsSobreavisoProntidao |
com.senior.entity.ITrocaEscala | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsTrocaEscala |
br.com.senior.rh.entity.ITrocaHorario | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsTrocaHorario |
com.senior.entity.IHistoricoApuracao | br.com.senior.rh.gp.sc.historico.apuracao. SCHistoricoApuracao | DsHistoricoApuracao |
com.senior.entity.IConvocacao | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsConvocacao |
br.com.senior.rh.entity.IProjecaoHorario | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsProjecaoHorario |
com.senior.entity.ITrocaCentroCusto | br.com.senior.gp.sc.programacoes.SCProgramacoes | DsTrocaCentroCusto |
com.senior.entity.ITrocaRateio | br.com.senior.gp.sc.programacoes.SCProgramacoe | DsTrocaRateio |
Observação
Ao utilizar mais de uma entidade do mesmo SystemComponent, utilize a mesma extensão para cada um. Ou seja, use a mesma classe. Deste modo somente terá uma classe que estende o mesmo SystemComponent.
Para customizar a entidade IAutorizacaoHoraExtra e ICompensacao utilize a mesma extensão do SystemComponent SCProgramacoes.
Informações gerais
Definir descrição do campo exibido na tela
- Para campos que sejam links, informe no parâmetro description da annotation @Link: Exemplo:
@Link(name = "USU_LnkTip", targetEntity = "br.com.senior.rh.entity.ITipoColaborador", //
linkExpr = "USU_ListaInt=USU_LnkTip.TipCol", //
displayExpr = "NUMBERTOSTR(USU_LnkTip.TipCol) ||' - '|| USU_LnkTip.Value", //
searchOrder = { "TipCol", "Value" }, description = "Tipo de colaborador"), //
Observação
Todos os campos de link é importante possuírem na descrição a abreviação @Link, conforme exemplo.
- Para campos que não sejam links, informe no parâmetro description da annotation @Field:
Exemplo:
@Field(description = "Campo texto")
String getUSU_String();
- Para campos do tipo hora, em que armazena a quantidade minutos:
- DayTime: representa as horas do dia, de 00:00 à 23:59.
- Time: representa a quantidade de minutos no formato hora, por exemplo: 333:34
Exemplo:{
entity:
"com.senior.entity.IHistoricoAfastamento",
title : "Campos customizados pelo Botini",
labelWidth : 118,
fields : [
{
name : "USU_TemEsp",
type : "DayTime"
},{
name : "USU_HoRESP",
type : "Time"
}
]
- Para campos de seleção (checkBox), em que armazena os valores S ou N:
Exemplo:
{
entity : "com.senior.entity.IHistoricoAnotacoes",
title : "Anotacao Valida",
labelWidth : 118,
fields : [
{
name : "USU_AnoVal",
type : "CheckBox",
width : 200
}
]
}
Observação
As definições de descrição dos campos dos tipos hora, em que armazena a quantidade minutos, seleção (checkBox), em que armazena os valores "S" ou "N", são válidos somente para a nova interface do Gestão do Ponto.
B2 com chave composta
É preciso criar os campos e o @Link para todos os campos da chave estrangeira.
Ligação entre as tabelas Compensações (R064CMP) e Ficha Básica Colaborador (R034FUN):
@Entity(description = "Compensacao")
@Links(value = { //
@Link(name = "USU_LnkColab", targetEntity = "com.senior.rh.entities.readonly.IR034FUN", //
linkExpr = "USU_NumEmp=USU_LnkColab.NumEmp and USU_TipCol=USU_LnkColab.TipCol and USU_NumCad=USU_LnkColab.NumCad", //
displayExpr = "NUMBERTOSTR(USU_LnkColab.NumEmp) ||' / '|| NUMBERTOSTR(USU_LnkColab.TipCol) ||' / '|| NUMBERTOSTR(USU_LnkColab.NumCad) ||' - '|| USU_LnkColab.NomFun", //
searchOrder = { "NumEmp, TipCol, NumCad", "NomFun" }, description = "Cad. Autorizador") //
})
public interface ICompensacaoCustom extends ICompensacao {
@Field()
int getUSU_NumEmp();
void setUSU_NumEmp(int value);
@Field()
int getUSU_TipCol();
void setUSU_TipCol(int value);
@Field()
int getUSU_NumCad();
void setUSU_NumCad(int value);
}
Resultado:
Mais de um campo customizado para cada entidade
No arquivo customFragment.json é possível informar mais de uma entidade assim como mais de um campo customizado para cada entidade.
{
customFragments : [{
entity : "br.com.senior.rh.entity.IProjecaoHorario",
fields : [{
name: "USU_LnkListaStr"
}]
}, {
entity : "com.senior.entity.IAutorizacaoHoraExtra",
fields : [{
name: "USU_Time"
}, {
name: "USU_LnkTip"
}, {
name: "USU_LnkListaStr"
}, {
name: "USU_LnkSit"
}, {
name: "USU_String"
}, {
name: "USU_Data"
}, {
name: "USU_Number"
}, {
name: "USU_Double"
}, {
name: "USU_LnkCodGru"
}]
}]
}
Tipos de campos disponíveis
- Date: definir como org.joda.time.LocalDate na entidade;
- Time: definir como int na entidade;
- Com ligação para outra tabela: definir o tipo correspondente da entidade e criar a anotação @Link mapeando para a entidade de destino;
- Number com precisão informada: definir como double na entidade. Informe a propriedade precision do @Field.
Ordenação dos campos
Os campos são exibidos na ordem que foram declarados na propriedade fields no arquivo customFragment.json.
Ajuste no leiaute
- labelWidth: propriedade dos objetos de customFragment. Permite definir a largura que os campos irão ocupar. Todas de uma entidade terão a mesma largura;
- width: propriedade dos objetos de fields. Permite definir a largura dos campos, com possibilidade de distinção de valores para cada um.
{
customFragments : [{
entity : "com.senior.entity.ICompensacao",
labelWidth : 130,
fields : [{
name: "USU_LnkColab",
width : 266
}]
},{
entity : "com.senior.entity.IAutorizacaoHoraExtra",
labelWidth : 180,
fields : [{
name: "USU_LnkCla",
width : 200
}, {
name: "USU_LnkMot",
width : 200
}, {
name: "USU_LnkHor",
width : 90
}, {
name: "USU_LnkCre",
width : 90
}]
}]
}
Resultado:
Observação
Gostaria de saber como realizar o tratamento de consistências em campos de usuários em programações e históricos? Acesse a documentação de Tratamento de consistências em campos de usuário em Programação e Históricos, e verifique as informações completas.