Páginas filhas
  • Dados Protegidos no Browse

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. O QUE É UM BROWSE?

Browse é o componente que exibe uma lista de registros para a execução de ações como Incluir, Alterar, Excluir, etc, nas rotinas de cadastros. 

Geralmente essas listagens são montadas considerando o alias de uma tabela (como SA1 no Cadastro de Clientes) e os campos para serem exibidos são carregados a partir do dicionário de campos (SX3), avaliando regras para exibir a coluna/campo.


02. QUAIS SÃO OS COMPONENTES UTILIZADOS PARA MONTAGEM DE BROWSES?

Os componentes para construção de browses são separados em funções ou classes, e também divididas entre: Baseada em Dicionário e Construídas Dinamicamente.

Os componentes disponíveis são: 

MBrowse e MarkBrow: São funções, que permitem a construção a partir de alias/dicionário ou tabelas temporárias (tabelas temporárias não são resultado direto de queries).

FwMBrowse e FwMarkBrowse: São classes, que permitem a construção a partir de alias/dicionário ou tabela temporária.

FwFormBrowse e FwBrowse também são classes, contudo a construção de browses com essas classes é dinâmica, permitindo browses de array, resultado de query, tabelas temporárias ou alias/dicionário.


03. COMO FUNCIONARÁ O OFUSCAMENTO DE COLUNAS NO BROWSE?

As colunas no browse são representadas internamente pela classe FwBrwColumn, e nela foi adicionada a propriedade lObfuscate para indicar que a coluna tenha seu conteúdo ofuscado.

Com isso o ofuscamento de dados no browse acontece utilizando esta propriedade. Para os componentes que utilizam dicionário, esta marcação para realização do ofuscamento acontece utilizando o conteúdo das propriedades cId ou cReadVar, comparando com os nomes dos campos registrados nas tabelas de Dados Protegidos no momento que acontece a atribuição das colunas para o browse.


04. O QUE PRECISA SER FEITO COM MBROWSE E MARKBROW PARA OFUSCAR AS COLUNAS?

Para os browses criados utilizando alias e a configuração padrão, nada precisa ser realizado, pois na construção do browse será feita a avaliação das colunas a serem ofuscadas, conforme o cadastro para Dados Protegidos.

Para os browses construídos utilizando tabela temporária "TRB", será exigida alteração para informar os nomes das colunas que precisam ser ofuscadas. Esta alteração será adicionar um array com o formato lista de campos ({“CAMPO1”,“CAMPO2”}) na chamadas da função que monta o browse.

Exemplo:

aOfuscar := {"CAMPO1","CAMPO2"}

MBrowse(par1, par2…. aOfuscar)

MarBrow(par1, par2…. aOfuscar)


05. O QUE PRECISA SER FEITO COM FWMBROWSE E FWMARKBROWSE?

Estes browses possuem comportamento similar ao das funções mBrowse/MarkBrow, sendo:

- A construção por alias, que confia na leitura das colunas a partir do dicionário. Nada precisa ser feito;

- A construção baseada em tabela temporária, precisa da informação da lista dos campos através de método e não parâmetro (o que diferencia das funções que recebe por parâmetro).

Exemplos:

oBrowse := FWMBrowse():New()

oBrowse:SetAlias(cAliasTmp)

oBrowse:SetTemporary(.T.)

// Define os campos

aAdd(aBrowse, {"Filial","FILIAL","C",006,0,"@!",,,,,,"FILIAL"}) 

aAdd(aBrowse, {"Numero","NUMERO","C", 006, 0, "@!",,,,,,"NUMERO"})

aAdd(aBrowse, {"Tipo","TIPO","C", 001, 0, "@!",,,,,,"TIPO"})

aAdd(aBrowse, {"Cliente","CLIENTE","C", 006, 0,"@!",,,,,,"CLIENTE"})

aAdd(aBrowse, {"Pedido Exp.","PEDEXP","C",020,0,"@!",,,,,,"PEDEXP"})

aEval := {"FILIAL", "NUMERO", "TIPO", "CLIENTE", "PEDEXP"}

// Define os campos que serão ofuscados

aOfuscar := FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

oBrowse:SetObfuscFields(aOfuscar)

oBrowse:SetFields(aBrowse)

oBrowse:Activate()

No código de demonstração acima, a variável aBrowse é a lista de colunas para o browse, e a partir dela que são descobertas as colunas para serem ofuscadas. 

A alteração na construção padrão das colunas é para informar o ID da coluna, que permite posteriormente a associação do que deve ser ofuscado.


06. O QUE PRECISA FAZER PARA FWFORMBROWSE E FWBROWSE?

Essas duas classes estão associadas com a construção personalizada das colunas e dados a serem exibidos, portanto são casos em que é exigido que aconteça a definição e informação das colunas que precisam ser ofuscadas no objeto.

Assim como no exemplo mostrado para FwMBrowse e FwMarkBrowse, é necessário utilizar o método SetObfuscFields para definir quais colunas serão ofuscadas conforme o ID ou marcar diretamente a coluna como ofuscável com SetColObfuscate no objeto da classe FwBrwColumn.

Exemplos:

Lista de campos para ofuscar

oBrowse := FWBrowse():New()

oBrowse:SetDataArray()

oBrowse:SetArray(aDataArray)

aEval := {"C5_NUM", "C5_CLIENTE", "C5_LOJA", "C5_DATA", "C5_PEDEXP", "C5_TIPO", "C5_CONDPG"}

aOfucar:= {} //FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

aAdd( aOfucar, "C5_CLIENTE" )

aAdd( aOfucar, "C5_PEDEXP"  )

aAdd( aOfucar, "C5_TIPO"  )

oBrowse:SetObfuscFields(aObsFields)

oBrowse:SetColumns(aColumns)

oBrowse:Activate()


Coluna marcada para ofuscar

oBrowse := FWBrowse():New()

.

.

.

aOfuscar := FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

For nContFlds := 1 To Len( aFields )

  nCol := Len(aColumns)

  lObfuscate := aScan(aOfuscar,{|x|x:cField == aFields[nContFlds]}) > 0

  AAdd( aColumns, FWBrwColumn():New() )

  aColumns[nCol]:SetData(&("{||(cTemp)->"+aFields[nContFlds]+"}"))

  aColumns[nCol]:SetData(&("{||(cTemp)->" + aFields[nContFlds]+"}"))

  aColumns[nCol]:SetTitle( aFields[nContFlds] )

  aColumns[nCol]:SetSize( 15 )

  aColumns[nCol]:SetID( aFields[nContFlds] )

  aColumns[nCol]:SetObfuscateCol( lObfuscate )

Next nContFlds

oBrowse:SetColumns(aColumns)

oBrowse:Activate()


07. O QUE VAI ACONTECER QUANDO UM INICIALIZADOR DE BROWSE RETORNAR UM VALOR DE CAMPO SENSÍVEL OU PESSOAL?

Por padrão o conteúdo será apresentado. Os blocos de preenchimento de conteúdo não serão restringidos e portanto, os campos virtuais sendo exibidos no browse precisam ser cadastrados nos dicionários para Dados Protegidos (XAL e XAM) ou a função de busca do conteúdo precisará ela mesma restringir o resultado, cifrando ou deixando o conteúdo anônimo.




Templatedocumentos


HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>