SankhyaUtil
Biblioteca de utilitários
O SankhyaUtil é a biblioteca de classes utilitárias para back-end da plataforma Sankhya, ela possui métodos que podem ser reutilizados em toda a aplicação. Esses métodos são usados para resolver problemas comuns, que envolvem manipulação de strings, datas, queries SQL, dados em formato json e xml, dentre outros.
Benefícios do SankhyaUtil
- Redução do esforço para manutenção
- Diminuição do tempo de implementação
- Maior reutilização de código
- Menor redundância de código
Referência Técnica (Javadoc)
Consulte a especificação de interfaces, classes, construtores, métodos e atributos do SankhyaUtil:
Classes principais
O SankhyaUtil possui dezenas de classes e métodos, a seguir são apresentados alguns dos métodos mais usados, com exemplos de sua aplicação.
- StringUtils
- XMLUtils:
- TimeUtils
- SQLUtils
- JsonUtils
- JDBCUtils
- BigDecimalUtil
- CollectionUtils
- SessionFile
StringUtils
Essa classe provê métodos para manipulação de strings.
getEmptyAsNull
Recebe uma string para ser validada.
Retorna o valor null caso a string passada for vazia.
StringBuffer where = new StringBuffer();
for (BigDecimal vendedor : vendedores) {
if (StringUtils.getEmptyAsNull(where.toString()) == null) {
where.append(" (this.CODVEND IN ( ");
where.append(vendedor);
} else {
where.append(" , " + vendedor);
}
}
replaceString
Recebe como argumento a palavra a procurar, a palavra a ser trocada
o texto a ser alterado e uma flag se deve alterar todas as ocorrências.
Troca uma string por outra dentro de um determinado texto.
StringBuffer strForm = new StringBuffer(formula);
StringUtils.replaceString("FORMULA.", "", strForm, true);
StringUtils.replaceString("QUETGFCUS", "TGFCUS", strForm, true);
StringUtils.replaceString("QUETGFCUSITE", "TGFCUSITE", strForm, true);
getNullAsEmpty
Recebe uma string para ser validada.
Retorna o valor vazio caso a string passada for igual a null.
String nomeArquivo = StringUtils.getNullAsEmpty(rsNFe.getString("CHAVENFE"));
if (StringUtils.isEmpty(nomeArquivo)) {
nomeArquivo = StringUtils.getNullAsEmpty(xmlEntradaVO.asString("CHAVEACESSO"));
if (StringUtils.isEmpty(nomeArquivo)) {
nomeArquivo = rsNFe.getBigDecimal("NUNOTA").toString();
}
}
isEmpty
Recebe uma string para ser validada.
Retorna o true caso uma string seja nula ou vazia.
String valor = criterio.getValor();
if (!StringUtils.isEmpty(valor)) {
CampoVO campo = criterio.getCampoCriterio();
String operador;
if (campo.getTipo().equalsIgnoreCase("S")) {
valor = valor + "%";
operador = "like";
} else {
operador = "=";
}
sql.appendSql(String.format("AND UPPER(ORD.%s) %s UPPER(:%s) ", campo.getNome(), operador, campo.getNome()));
sql.setNamedParameter(campo.getNome(), valor);
}
isNotEmpty
Recebe uma string para ser validada.
Retorna o true caso uma string seja diferente de null e com algum conteúdo.
if (StringUtils.isNotEmpty(processStatus.info.getParams())) {
Document params = XMLUtils.buildDocumentFromString(processStatus.info.getParams(), true);
Element config = params.getRootElement();
parametros = config.getChild("parametros");
}
XMLUtils:
Essa classe provê métodos para manipulação de dados em formato XML.
getAttributeAsBigDecimal
Recebe um element xml e o nome do atributo a ser retornado.
Retorna o atributo definido como BigDecimal.
Element param = XMLUtils.getRequiredChild(ctx.getRequestBody(), "param");
BigDecimal codEmp = XMLUtils.getAttributeAsBigDecimal(param, "codEmp");
addContentElement
Recebe um Element xml, um nome do novo elemento filho e um valor para ele.
Altera o elemento pai recebido adicionando um filho com o valor definido.
FieldMetadata fm = (FieldMetadata) camposPorNome.get(iteKey.next());
Element columnElement = new Element("column");
XMLUtils.addContentElement(columnElement, "name", fm.getName());
XMLUtils.addContentElement(columnElement, "label", fm.getDescription());
XMLUtils.addContentElement(columnElement, "type", String.valueOf(fm.getUserType()));
getAttributeAsString
Recebe um element xml e o nome do atributo a ser retornado.
Retorna o atributo definido como String.
Element searchElement = XMLUtils.getRequiredChild(ctx.getRequestBody(), "pesquisa");
String apresentacaoEntityName = XMLUtils.getAttributeAsString(searchElement, "nomeInstancia");
String localEntityName = XMLUtils.getAttributeAsString(searchElement, "nomeInstanciaLocal");
String criteriaField = XMLUtils.getAttributeAsString(searchElement, "campoCriterio");
String criteriaValue = XMLUtils.getAttributeAsString(searchElement, "valorCriterio");
String relationName = XMLUtils.getAttributeAsString(searchElement, "relationName");
getRequiredChild
Recebe um element xml e o nome do element a ser retornado.
Retorna a tag element definida.
Element entityElement = XMLUtils.getRequiredChild(ctx.getRequestBody(), "entity");
String entityName = XMLUtils.getAttributeAsString(entityElement, "name");
setAttibuteValue
Recebe um Element xml, um nome do novo atributo e um valor para ele.
Altera o elemento recebido adicionando um atributo com nome e valor definido.
Element sugestao = new Element("sugestao");
XMLUtils.setAttibuteValue(sugestao, "codParc", itemSugestao.getCodParc());
XMLUtils.setAttibuteValue(sugestao, "nomeParc", itemSugestao.getNomeParc());
TimeUtils
Essa classe provê métodos para manipulação de objetos de data e hora.
getNow
Retorna um Timestamp com a data/hora atual.
NotaGerada nota = new NotaGerada();
nota.setDataInicio(dataInicio != null ? dataInicio : TimeUtils.getNow());
nota.setDataFinal(dataFinal != null ? dataFinal : TimeUtils.getNow());
clearTime
Recebe um Timestamp para ser tratado.
Retorna o Timestamp com a hora minuto e segundos zerados.
Timestamp hoje = TimeUtils.clearTime(TimeUtils.getNow());
getToday
Retorna um long com a data do dia atual. Sem campo de hora.
Timestamp hoje = new Timestamp(TimeUtils.getToday());
add
Recebe um long de data, um int de quantidade e um int de campo de calendar.
Adiciona a data recebida a quantidade definida para o campo de data selecionado.
Timestamp dtFimPeriodo = new Timestamp(TimeUtils.add(dtInicial.getTime(), -1, Calendar.DAY_OF_MONTH));
formataDDMMYYYY
Formata um Timestamp em string de formato DDMMYYYY
Map<String, Object> boleto = new HashMap<String, Object>();
boleto.put("dtVenc", TimeUtils.formataDDMMYYYY(dados.get("DTVENC")));
boleto.put("dtNeg", TimeUtils.formataDDMMYYYY(dados.get("DTNEG")));
SQLUtils
Essa classe provê métodos para manipulação de queries dinâmicas.
buildINClauseByValues
Recebe um nome de campo e uma string dos valores separados por ','.
Retorna uma string de where in: ex ( campo in (1,2) )
NativeSql queSomaIte = new NativeSql(jdbcWrapper);
queSomaIte.appendSql(" SELECT * FROM TGFITE WHERE (SEQUENCIA > 0) AND ").appendSql(SQLUtils.buildINClauseByValues("NUNOTA", notasSelecao));
buildINClauseByValuesWithQuotes
Recebe um nome de campo e uma string dos valores separados por ','.
Retorna uma string de where in: ex ( campo in ("1","2") )
String accountEmailsInClausule = SQLUtils.buildINClauseByValuesWithQuotes("ACCOUNTEMAIL", emails);
removeAlias
Recebe uma String que possa contar alias no corpo ex:(SANKHYA.TEMPO)
Retorna uma String sem o alias ex: TEMPO
String key = SQLUtils.removeAlias(groupBy.split(",")[0]);
buildNOTINClauseByValues
Recebe um nome de campo e uma string dos valores separados por ','.
Retorna uma string de where in: ex ( campo not in (1,2) )
String inProdutos = SQLUtils.buildNOTINClauseByValues("TGFPRO.CODPROD", produtos);
JsonUtils
Essa classe provê métodos para manipulação de dados em formato Json.
getString
Recebe um JsonObject e um nome de propriedade.
Retorna uma String do conteúdo da propriedade do json.
for (JsonElement je: adFields) {
JsonObject field = je.getAsJsonObject();
String type = JsonUtils.getString(field, "type");
String name = JsonUtils.getString(field, "name");
if (type.equals("number")) cmvVO.set(name, JsonUtils.getBigDecimal(field, "value"));
else if (!type.equals("D")) cmvVO.set(name, JsonUtils.getString(field, "value"));
else if (!"".equals(JsonUtils.getString(field, "value"))) {
cmvVO.set(name, new Date(TimeUtils.toDate(JsonUtils.getString(field, "value"))));
}
}
getBigDecimal
Recebe um JsonObject e um nome de propriedade.
Retorna um BigDecimal do conteúdo da propriedade do json.
for (JsonElement element: array) {
JsonObject obj = element.getAsJsonObject();
BigDecimal codcbe = JsonUtils.getBigDecimal(obj, "CODCBE");
if (codcbe != null) list.add(codcbe);
}
getBoolean
Recebe um JsonObject e um nome de propriedade.
Retorna um Boolean do conteúdo da propriedade do json.
boolean isCreate = JsonUtils.getBoolean(requestBody, "isCreating");
getTimestamp
Recebe um JsonObject e um nome de propriedade.
Retorna um Timestamp do conteúdo da propriedade do json.
Timestamp dtRefEmp = JsonUtils.getTimestamp(requestBody, "dtRefEmp");
getJsonArray
Recebe um JsonObject e um nome de propriedade.
Retorna a propriedade em formato de JsonArray.
JsonArray datasParaProcessarJson = JsonUtils.getJsonArray(requestBody, "datasParaProcessar");
JDBCUtils
Essa classe provê métodos para otimização da obtenção e uso de dados.
closeResultSet
Recebe um resultset e o fecha se o mesmo estiver aberto.
ResultSet rset = null;
try {
rset = pstm.executeQuery();
if (rset.next()) {
if (useLoadOnFind) {
populateLoadOnFindCache(rset, false);
}
} else {
throw new InstanceNotFoundException(((entity.getDescription() != null) ? entity.getDescription() : entity.getName()) + " no existe: " + key);
}
} finally {
JdbcUtils.closeResultSet(rset);
}
closeStatement
Recebe um Statement e o fecha se o mesmo estiver aberto.
CallableStatement cstmt = null;
try {
Connection c = jdbc.getConnection();
cstmt = c.prepareCall("{call STP_CONTROLE_TCBSAL(?)}");
cstmt.setString(1, status == LIGA ? "S" : "N");
cstmt.execute();
} finally {
JdbcUtils.closeStatement(cstmt);
}
BigDecimalUtil
Essa classe provê métodos para manipulação objetos do tipo BigDecimal.
getValueOrZero
Recebe um BigDecimal e retorna ou o valor de entrada ou null se o BigDecimal for igual a nulo.
BigDecimal vlrDebMes = BigDecimalUtil.getValueOrZero(rs_queRegI355.getBigDecimal("DEBMES"));
getRounded
Recebe um valor e um inteiro de escala para fazer um arredondamento HALF_UP.
Retorna um BigDecimal arredondado.
BigDecimal value = BigDecimalUtil.getRounded(cmvVO.asBigDecimalOrZero("VLRBEN"), 2);
valueOf
Recebe um double, long ou string e o converte para BigDecimal.
BigDecimal valor = BigDecimalUtil.valueOf(criterio.getValor().replaceAll(",", "."));
getRoundedDouble
Recebe um valor e um inteiro de escala para fazer um arredondamento HALF_UP.
Retorna um Double arredondado.
double meanConcurrentCon = BigDecimalUtil.getRoundedDouble(statsConcurrentCon.mean, 2);
isEmpty
Retorna true se o BigDecimal recebido é zero ou null.
if (BigDecimalUtil.isEmpty(produto.codLocal)) {
prodVO.setProperty("CODLOCAL", BigDecimal.ZERO);
}
CollectionUtils
Essa classe provê métodos para manipulação de coleções, como arrays e maps.
isNotEmpty
Retorna true se a collection não for vazia.
Retorna false se a collection for vazia.
boolean informouDocumentos = CollectionUtils.isNotEmpty(documentos);
isEmpty
Retorna true se a collection for vazia.
boolean contarTempoForaTurnos = CollectionUtils.isEmpty(filtro.getTurnos());
SessionFile
Essa classe provê métodos para manipulação de arquivos da sessão.
createSessionFile
Cria um arquivo de sessão com o nome, tipo e conteúdo passado como argumento.
fileReport = SessionFile.createSessionFile(nomeArquivo.toString(), "application/pdf", reportFile);
buildTempFile
Cria um arquivo na pasta de temp dp servidor com a extensão informada. O arquivo estará vazio.
File reportFile = SessionFile.buildTempFile("pdf");
getTempViewerFileDir
Retorna uma referencia do diretório de arquivos temp do servidor.
File tempFolder = SessionFile.getTempViewerFileDir();
Como tirar dúvidas?
Para tirar dúvidas e compartilhar informações, use a sala SankhyaUtil da comunidade Sankhya Developer.
Updated about 1 year ago