*** Infraestrutura
Melhoria: O método DataSet.getField() passa a suportar um segundo parâmetro chamado options. Os valores possíves são:
GetFieldOptions.BEFORE_VALUE: Obtém o valor do campo antes da edição ou inserção atual ter sido iniciada. Se o DataSet não estiver em edição ou inserção, o valor retornado será o mesmo do campo corrente. GetFieldOptions.ORIGINAL_VALUE: Obtém o valor original do campo, antes de qualquer edição desde a criação do DataSet ou do último applyUpdates. Esta opção requer que a propriedade DataSet.logChanges seja true e o que dataSet possua os campos iKey/CHAVE e iVersion/VERSAO. GetFieldOptions.IGNORE_FIELD_NOT_FOUND: Retorna null ao invés de gerar um erro caso o campo informado não exista.
Obs: Antes desta melhoria, o segundo parâmetro do dataSet era o "ignoreInvalidFieldName" do tipo Boolean. O suporte a este parâmetro foi mantido como deprecated. Códigos novos devem utilizar a nova sintaxe.
Exemplo:
var ds = connection.getDataSet( "Select CHAVE, VERSAO, CODIGO From ENTIDADE Where CHAVE = 4131044") ds.codigo = 'maria' ds.applyUpdates() var ds = connection.getDataSet( "Select CHAVE, VERSAO, CODIGO From ENTIDADE Where CHAVE = 4131044") this.checkEquals( 'maria', ds.getField('CODIGO')) this.checkEquals( 'maria', ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( 'maria', ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE)) ds.codigo = 'jose' this.checkEquals( 'jose', ds.getField('CODIGO')) this.checkEquals( 'maria', ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( 'maria', ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE)) ds.post() this.checkEquals( 'jose', ds.getField('CODIGO')) this.checkEquals( 'jose', ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( 'maria', ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE)) ds.applyUpdates() this.checkEquals( 'jose', ds.getField('CODIGO')) this.checkEquals( 'jose', ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( 'jose', ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE)) ds.append() ds.codigo = 'francisco' this.checkEquals( 'francisco', ds.getField('CODIGO')) this.checkEquals( null, ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( null, ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE)) ds.post() this.checkEquals( 'francisco', ds.getField('CODIGO')) this.checkEquals( 'francisco', ds.getField('CODIGO', GetFieldOptions.BEFORE_VALUE)) this.checkEquals( null, ds.getField('CODIGO', GetFieldOptions.ORIGINAL_VALUE))
Alteração: Foi criada a classe DataSetStates com propriedades que representam os valores que DataSet.state pode assumir. Os valores são: DataSetStates.INACTIVE, DataSetStates.BROWSE, DataSetStates.INSERT e DataSetStates.EDIT.
Exemplo:
var ds = new DataSet() this.checkEquals( DataSetStates.INACTIVE, ds.state) ds.createField( 'key', 'integer') ds.create() this.checkEquals( DataSetStates.BROWSE, ds.state) ds.append() ds.key = 10 this.checkEquals( DataSetStates.INSERT, ds.state) ds.post() this.checkEquals( DataSetStates.BROWSE, ds.state) ds.key = 20 this.checkEquals( DataSetStates.EDIT, ds.state) ds.post() this.checkEquals( DataSetStates.BROWSE, ds.state) ds.close() this.checkEquals( DataSetStates.INACTIVE, ds.state)
Obs: DataSet.INACTIVE_STATE, DataSet.BROWSE_STATE, DataSet.EDIT_STATE e DataSet.INSERT_STATE continuam a ser suportados como depreacted. Códigos novos devem utilizar a nova sintaxe.
Correção: A utilização da propriedade DataSet.filter gerava uma perda de (qtd registros / 8) bytes de memória na finalização da sessão JavaScript. Corrigido.
Correção: Um clone de um DataSet poderia retornar informações desatualizadas quando este estava posicionado exatamente sobre um registro que foi alterado por outro clone. Corrigido.
*** Erp
Melhoria: Foram realizadas melhorias no desempenho da abertura de pedidos. É necessário upgrade completo da licença ERP Infrastructure e executar o script "/Admin/Manutencoes/Movimentacoes/Cria Vinculos entre Acessorios e Pedidos" na base do cliente.