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.


Próxima página