Customizao de Datasets Copyright 2009 TOTVS S.A. Todos os direitos reservados. Nenhuma parte deste documento pode ser copiada, reproduzida, traduzida ou transmitida por qualquer meio eletrnico ou mecnico, na sua totalidade ou em parte, sem a prvia autorizao escrita da TOTVS S.A., que reserva-se o direito de efetuar alteraes sem aviso prvio. A TOTVS S.A no assume nenhuma responsabilidade pelas conseqncias de quaisquer erros ou inexatides que possam aparecer neste documento. TOTVS S.A. Av. Santos Dumont, 831, Joinville, SC, Brasil, CEP 89.222-900
3
Customizao de Datasets ndice Problema ............................................................................................. 4 Datasets .............................................................................................. 5 Tipos de Datasets .............................................................................. 5 Visualizando Datasets ....................................................................... 6 Acessando um Dataset ...................................................................... 7 Via pontos de customizao .......................................................................... 7 Exemplificao ............................................................................................... 9 Via JavaScript em formulrio ....................................................................... 11 Via Tags no Formulrio ................................................................................ 12 Via Site ......................................................................................................... 12 Via Web Services ......................................................................................... 14 Construindo um Dataset customizado ........................................... 15 Dataset customizado de fichrio "pai-filho" ................................................. 15 Guia de Referncia de Datasets ...................................................... 19 DatasetFactory ............................................................................................. 19 Dataset ......................................................................................................... 19 Third Party Trademarks ................................................................... 21
4
Customizao de Datasets
Problema O TOTVS | ECM um produto que permite disponibilizar informaes provindas de vrias fontes de dados atravs de formas variadas de apresentao. Dentre estas formas, destacam-se os processos Workflow, Formulrios e Portais. comum que, dependendo da necessidade de cada cliente, seja necessrio apresentar ou processar informaes referentes a dados do prprio aplicativo (como usurios, grupos, papis tarefas, etc.), dados criados pelo usurio mas gerenciados pelo produto (dados das fichas), dados externos (como entidades de um ERP) ou ainda valores fixo (como uma lista de estados ou unidades de medida). No Webdesk 2.04, cada componente que faria uso da informao era responsvel pela sua extrao. Em outras palavras, se os dados de um determinado fichrio devessem ser apresentados em um portal, cabia ao portlet responsvel pela formatao a extrao destes dados. Da mesma forma, se um determinado processo workflow exigisse o uso deste mesmo fichrio, tambm ele deveria fazer a extrao destes dados. O diagrama abaixo apresenta um esquema bsico da organizao deste modelo.
5
Customizao de Datasets
Datasets O TOTVS | ECM introduz um novo conceito de componente Dataset que permite padronizar o acesso s informaes, independente da origem dos dados. Isto significa que, uma vez que um Dataset esteja disponvel no sistema, ele poder ser invocado de qualquer parte do sistema e de forma consistente, independente da sua origem. Um Dataset disponibiliza um conjunto de operaes que permite navegar sobre o seu contedo, como consultar quais so as colunas disponveis, quantas linhas existem ou o valor de cada campo, em cada coluna. O diagrama abaixo apresenta um modelo conceitual sobre os Datasets.
Tipos de Datasets Atualmente existem trs tipos de Datasets gerenciados pelo produto: Built-in Datasets: Este tipo de Dataset permite navegar em dados das entidades do prprio produto, como colaboradores, grupos, processos, tarefas, etc. Os Datasets built-in so pr- definidos no produto e no podem ser alterados pelo cliente. CardIndex Datasets: Este tipo de Dataset permite navegar nos dados existentes nas fichas de um determinado fichrio.
6
Customizao de Datasets
Para que um fichrio seja disponibilizado como Dataset, preciso configurar o campo nome do servio de dados nas propriedades do fichrio. O nome definido neste campo ser utilizado para a busca do Dataset no sistema. CustomizedDataset: Os Datasets customizados permitem que o usurio defina manualmente quais as colunas de um Dataset e os valores de cada um dos registros, atravs da codificao em JavaScript.. Os Datasets customizados podem ser utilizados em uma grande gama de situaes, como para definio de uma lista de valores fixos (como estados de um pas) ou para extrao de dados de um servio externo (via WebServices, por exemplo). Ainda que os Dataset possam ter origens distintas, no existe qualquer diferena sob a perspectiva do componente que far uso deste Dataset. Isto significa, por exemplo, que se um determinado componente fizer uso de um Dataset chamado centro de custo, o seu uso ser exatamente o mesmo, independente deste Dataset ser pr-construdo (o que no o caso), baseado em fichrio ou customizado. Esta caracterstica dos Datasets representa um grande benefcio para os usurios, uma vez que a fonte dos Datasets pode ser alterada sem que isto represente retrabalho nos pontos onde ele utilizado. Por exemplo, considere um processo workflow que precise trabalhar com uma lista de centros de custo. Em um primeiro momento, pode-se trabalhar com um Dataset customizado que monte, de forma fixa, os registros referentes a cada um dos centros de custo necessrios para o usurio. Uma vez que codificar a lista se torne pouco flexvel (devido alteraes freqentes), possvel trocar o centro de custo para que seja baseado em fichrio. Desde que se observe o nome dos campos do Dataset, no haver qualquer impacto sobre o processo workflow. Em um terceiro momento, pode-se optar por migrar o Dataset novamente para o tipo customizado, mas desta vez extraindo os centros de custo do ERP do cliente. Novamente no haver impacto para o processo workflow (ou para os demais pontos que utilizem o Dataset), desde que se observe o nome dos campos. Visualizando Datasets Pelo painel de controle possvel navegar pelos Datasets disponveis bem como visualizar o seu contedo. Com isto possvel verificar quais os campos disponveis, tanto para filtros quanto para acesso, bem como fazer testes sobre Datasets customizados. O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado.
7
Customizao de Datasets
Neste exemplo, possvel visualizar os campos disponveis (seq, name e desc) e os registros retornados pelo Dataset. Note que estas informaes so essenciais para o uso dos Datasets, principalmente quando h necessidade de restringir os dados que queremos acessar.
Acessando um Dataset Vrios pontos do sistema podem fazer uso dos Datasets. Dependendo do local onde o Dataset utilizado, podem ocorrer variaes na forma de acess-lo ou de manuse-lo.
Via pontos de customizao Quando um Dataset acessado via um ponto de customizao, como eventos de um fichrio ou de um processo, isto feito atravs de chamadas JavaScript que sero executadas no lado servidor. O exemplo abaixo apresenta um exemplo simples de chamada a um Dataset. function doTest1() { var dataset = DatasetFactory.getDataset("group", null, null, null); return dataset.rowsCount; }
A classe DatasetFactory a porta de entrada para o acesso a qualquer Dataset. Alm de permitir a carga de um Dataset, ela tambm permite navegar entre todos os Datasets disponveis no sistema.
8
Customizao de Datasets
No exemplo acima, o cdigo JavaScript faz o acesso ao Dataset group, que um Dataset interno do sistema, e retorna a quantidade de linhas disponveis (rowsCount). function doTest2() { // Monta as constraints para consulta var c1 = DatasetFactory.createConstraint("documentPK.documentId", null, "675", ConstraintType.MUST); var c2 = DatasetFactory.createConstraint("documentTypeId", "", "", ConstraintType.MUST_NOT); var c3 = DatasetFactory.createConstraint("colleagueId", "Dir", "Dir", ConstraintType.SHOULD); var c4 = DatasetFactory.createConstraint("colleagueId", "TI", "TI", ConstraintType.SHOULD); var constraints = new Array(c1, c2, c3, c4); // Define os campos para ordenao var sortingFields = new Array("documentPK.documentId"); // Busca o dataset var dataset = DatasetFactory.getDataset("document", null, constraints, sortingFields); if(dataset.rowsCount != expectedValues.length) return false; for(i = 0; i < dataset.rowsCount; i++) { print(dataset.getValue(i, "documentPK.documentId")); } }
O exemplo acima invoca o mtodo getDataset passando alguns argumentos extras como parmetros: Nome do Dataset: Neste caso, buscando o Dataset de documento (document). Campos: Retorna apenas os campos recebidos no array informado. Caso null, retorna todos os campos. Constraints: Vetor com as condies de busca do Dataset. Em cada condio de busca (constraint) deve-se informar o nome do campo que ser filtrado, a faixa de valores inicial e final, e o tipo de Constraint. Os tipos podem ser: o MUST: Indica que todos os registros do Dataset devem satisfazer a esta condio. o SHOULD: Indica que os registros do Dataset podem ou no atender condio. Este tipo mais comum quando se necessita que um mesmo campo tenha valores A ou B (onde cada um ser uma constraint SHOULD). o MUST_NOT: indica que nenhum dos registros pode satisfazer a condio. Existe uma constraint em especial que utilizada para limitar o nmero de registros na consulta do SQL chamada de sqlLimit. Ento possvel definir o nmero mximo de registros que uma consulta SQL pode retornar, porm o nmero de registros pode ser menor que o esperado, devido algumas validaes que so feitas aps o retorno dos dados. Por exemplo: O sqlLimit tem um valor 100 e feita uma consulta em um servio de dados de um fichrio, esta consulta retornar os 100 registros, porm aps isso so executadas validaes para verificar se a ficha est ativa e se o usurio corrente tem permisso para visualizar os dados fazendo com que o retorno possa ser menor que 100. Para o sqlLimit utilizada a seguinte sintaxe:
Obs.: O valor considerado no sqlLimit sempre o initialValue, o que for informado no finalValue no ser considerado. Existe outra constraint especial utilizada somente para acesso a dataset de fichrios, ela indica se ao buscar o servio de dados devem ser retornados APENAS os dados das fichas do fichrio principal. A constraint a onlyMainCards e por padro seu valor false, ou seja, so retornados os dados das fichas do fichrio principal e sub-fichrios.
Obs.: O valor considerado no onlyMainCards sempre o initialValue, o que for informado no finalValue no ser considerado.
ATENO: As constraints podem ser utilizadas apenas para datasets internos. Datasets customizados no aceitam constraints, pelo fato de os dados serem externos, no sendo possvel aplicar o filtro em sua origem. Para datasets customizados o tratamento de filtro deve ser feito no retorno dos dados, manipulando o objeto retornado e retirando as informaes desnecessrias.
Ordenao: Vetor com a lista de campos que ser utilizada para ordenao dos registros no Dataset.
Exemplificao Considere os valores da tabela abaixo sendo utilizadas como um servio de dados a partir de um fichrio para exemplificao dos exemplos: Cdigo Nome Cidade 1 Javier Spiva So Paulo 2 Cody Ballow Rio de Janeiro 3 Javier Naramore So Paulo 4 Max Nevius Rio de Janeiro 5 Noemi Roiger So Paulo 6 Lonnie Cadwallader Rio de Janeiro 7 Lorrie Spece Braslia
Exemplos de retorno de dados Para retornar as linhas que os cdigos estejam entre 1 4. var c1 = DatasetFactory.createConstraint("codigo", "1", "4", ConstraintType.MUST); Ser retornado:
10
Customizao de Datasets
Cdigo Nome Cidade 1 Javier Spiva So Paulo 2 Cody Ballow Rio de Janeiro 3 Javier Naramore So Paulo 4 Max Nevius Rio de Janeiro
Para retornar somente as linhas que os nomes sejam Noemi Roiger, Javier Naramore e Lonnie Cadwallader ou que a cidade seja Braslia. var c1 = DatasetFactory.createConstraint("nome", " Noemi Roiger", " Noemi Roiger", ConstraintType.SHOULD); var c2 = DatasetFactory.createConstraint("nome ", " Javier Naramore", " Javier Naramore", ConstraintType.SHOULD); var c3 = DatasetFactory.createConstraint("nome ", "Lonnie Cadwallader", "Lonnie Cadwallader", ConstraintType.SHOULD); var c4 = DatasetFactory.createConstraint("cidade", "Braslia", "Braslia", ConstraintType. SHOULD);
Ser retornado: Cdigo Nome Cidade 3 Javier Naramore So Paulo 5 Noemi Roiger So Paulo 6 Lonnie Cadwallader Rio de Janeiro 7 Lorrie Spece Braslia
Para retornar todas as linhas exceto onde a cidade seja Braslia. var c1 = DatasetFactory.createConstraint("cidade", "Braslia", "Braslia", ConstraintType.MUST_NOT); Ser retornado: Cdigo Nome Cidade 1 Javier Spiva So Paulo 2 Cody Ballow Rio de Janeiro 3 Javier Naramore So Paulo 4 Max Nevius Rio de Janeiro 5 Noemi Roiger So Paulo 6 Lonnie Cadwallader Rio de Janeiro
11
Customizao de Datasets
Via JavaScript em formulrio O TOTVS | ECM permite acessar os Datasets via cdigo JavaScript no HTML de um fichrio, desde que esteja importada a biblioteca "ecm_datasets.js". Para isto, basta incluir a linha abaixo antes da tag body do HTML: <script src="../ecm_datasets.js"></script> Diferente o caso acima, este modelo de acesso faz com que o Dataset seja transportado do servidor para o cliente, ou seja, o browser do usurio. Por isso, importante observar a quantidade de informaes que ser manuseada, caso contrrio pode-se ter problemas de consumo excessivo de banda ou performance. function showNewDatasetFull() { var div = document.getElementById("myDiv3"); // Busca o dataset try { var dataset = DatasetFactory.getDataset("topic"); var tabela = showDataset(dataset); div.innerHTML = tabela; } catch(erro) { div.innerHTML = erro; } }
function showDataset(dataset) { var tabela = "<TABLE border=1 cellpadding=0 cellspacing=0>"; // monta o cabealho tabela += "<TR><TD>#</TD>"; for(i = 0; i < dataset.columns.length; i++) { tabela += "<TH>" + dataset.columns[i] + "</TH>"; } tabela += "</TR>"; for(r = 0; r < dataset.values.length; r++) { var record = dataset.values[r]; tabela += "<TR><TD>" + r + "</TD>"; for(i = 0; i < dataset.columns.length; i++) { var property = "record[\"" + dataset.columns[i] + "\"]"; tabela += "<TD>"; try { tabela += eval(property); } catch(erro) {} tabela += "</TD>"; } tabela += "</TR>"; } tabela += "</TABLE>"; return tabela; }
No exemplo acima, percebe-se que a forma de se invocar um Dataset muito semelhante ao mtodo apresentado anteriormente, atravs do DatasetFactory. A funo showDataset apresenta um exemplo de cdigo que permite apresentar os dados do Dataset.
function showNewDatasetPartial() { var div = document.getElementById("myDiv4");
var c1 = new SearchConstraint("documentPK.documentId", null, "350, ConstraintType.MUST); var c2 = new SearchConstraint("documentType", "1", "1", ConstraintType.MUST_NOT); var c3 = new SearchConstraint("documentType", "systool", "systool", ConstraintType.MUST_NOT); var c4 = new SearchConstraint("documentType", "sysfolder", "sysfolder",
12
Customizao de Datasets
ConstraintType.MUST_NOT); var c5 = new SearchConstraint("documentType", "blogarea", "blogarea", ConstraintType.MUST_NOT); var c6 = new SearchConstraint("documentDescription", "", "", ConstraintType.MUST_NOT); var c7 = new SearchConstraint("activeVersion", "true", "true", ConstraintType.MUST); var constraints = new Array(c1, c2, c3, c4, c5, c6, c7); // Define os campos para ordenao var sortingFields = new Array("accessCount", "documentDescription"); // Busca o dataset try { var dataset = DatasetFactory.getDataset("document", null, constraints, sortingFields); showDataset(dataset); } catch(erro) { div.innerHTML = erro; } }
Assim como no mtodo anterior, quando preciso filtrar um Dataset preciso criar as constraints que sero utilizadas na busca. Os argumentos utilizados no mtodo getDataset tambm so os mesmos que apresentados anteriormente. OBSERVAO: A biblioteca vcXMLRPC.js era incompatvel com algumas tecnologias disponveis, como por exemplo o jQuery UI. Para aperfeioar a customizao de formulrios e possibilitar a utilizao de bibliotecas Javascript complementares, foi desenvolvida a nova biblioteca de integrao de datasets ecm_datasets.js. Esta nova biblioteca pode ser utilizada da mesma forma que a vcXMLRPC.js e dever ser utilizada para construo de novas customizaes. As customizaes que j utilizam a antiga biblioteca vcXMLRPC.js continuaro funcionando normalmente, entretanto esta biblioteca est depreciada. Via Tags no Formulrio O TOTVS | ECM permite especificar um Dataset em um campo select (combo-box). Quando isto feito, as opes do combo so automaticamente criadas de acordo com os dados existentes no Dataset. <select name="estado" dataset="estadosBR" datasetkey="Sigla" datasetvalue="Estado"> </select>
No exemplo acima, o campo estado foi configurado para que as opes do combo sejam criadas a partir do Dataset estadosBR. Como valor do campo ser utilizado o campo Sigla, embora para o usurio ser apresentado o campo Estado.
Via Site Os Datasets tambm podem ser utilizados para permitir gerar contedo dinmico em pginas de Sites. A sintaxe utilizada para o acesso e navegao aos fichrios muito similar aos casos anteriormente vistos, embora adaptada para o uso pelo FreeMarker (engine utilizado pelo Site).
13
Customizao de Datasets
O exemplo abaixo apresenta um caso simples de acesso a um Dataset no Site. [#assign myDataset = DatasetFactory.getDataset("tipoOferta", null, null, null)] <table> [#list myDataset.getMap() as oferta] <tr> <td>${oferta.name}</td> </tr> [/#list] </table>
No exemplo acima, criada uma varivel chamada myDataset, que contm o Dataset de nome tipoOferta. Em seguida, so percorridos os registros existentes no Dataset ([#list myDataset.getMap as oferta]) e para cada registro apresentado o nome da oferta (${oferta.name}).
O exemplo abaixo apresenta uma carga de Dataset que utiliza filtros: [#assign c1 = DatasetFactory.createConstraint("tipoOferta", P, P, ConstraintType.MUST)] [#assign c2 = DatasetFactory.createConstraint("metadata#active", 'true', 'true', ConstraintType.MUST)] [#assign ofertas = DatasetFactory.getDataset("ofertas", null, [c1, c2], null)] <table> [#list ofertas.getMap() as row] <tr> <td>${row.nome_oferta}</td> <td>${row.texto_oferta}</td> </tr> [/#list] </table>
O exemplo acima pode ser dividido em trs blocos. O primeiro bloco cria as condies que sero utilizadas para filtrar os dados do Dataset. No segundo bloco, invocado o mtodo getDataset para retornar os dados do Dataset de ofertas, segundo as condies passadas como parmetro em array ([c1, c2]). No terceiro e ltimo bloco, como o exemplo abaixo, os dados do Dataset so percorridos e apresentados numa tabela HTML.
Uma particularidade da utilizao dos datasets em sites, referente ao acesso aos atributos definidos na PK do objeto retornado pelo dataset. Nessa situao, no necessrio informar o objeto PK. Basta apenas referenciar diretamente o atributo desejado, pois os atributos da PK so incorporados ao objeto retornado quando instanciados para um site. Exemplo:
Via Web Services O TOTVS | ECM disponibiliza um conjunto de WebServices que permitem integrar aplicaes de terceiros ao produto. Dentre os servios disponibilizados, o servio DatasetService permite fazer o acesso a um Dataset. Para verificar a lista de servios disponveis no produto, acesso a url http://<servidor>:<porta>/webdesk/services. A forma de uso de um Web Service varia de acordo com a tecnologia utilizada pela aplicao cliente. Consulte a documentao da tecnologia escolhida pra obter detalhes sobre como acessar Web Services.
15
Customizao de Datasets
Construindo um Dataset customizado Um Dataset pode ser construdo a partir de um cdigo JavaScript. Uma vez que o prprio Dataset criado a partir de um cdigo JavaScript, possvel fazer chamadas a outros Datasets, chamadas servios externos ou apenas criar o Dataset a partir de valores codificados. function createDataset(fields, constraints, sortFields) { var newDataset = DatasetBuilder.newDataset(); // Cria as colunas newDataset.addColumn("Sigla"); newDataset.addColumn("Estado"); newDataset.addColumn("Capital"); newDataset.addColumn("Area"); // Cria os registros newDataset.addRow(new Array('AM','Amazonas','Manaus',1570746)); newDataset.addRow(new Array('PA','Par','Belm',1247690)); newDataset.addRow(new Array('MT','Mato Grosso','Cuiab',903358)); newDataset.addRow(new Array('TO','Tocantins','Palmas',277621)); newDataset.addRow(new Array('PI','Piau','Teresina',251529));
return newDataset; }
No exemplo acima criado um Dataset cujo os campos e valores esto fixos no cdigo. Para criar um novo Dataset, utilizado o mtodo DatasetBuilder.newDataset(). A partir deste objeto possvel criar as colunas desejadas (addColumn) bem como adicionar linhas (addRow). Note que o cdigo JavaScript que cria o Dataset recebe como parmetros os campos, as constraints e a ordem dos campos. Cabe ao cdigo que implementa um JavaScript customizado utilizar estes valores na sua lgica. Caso o script desconsidere algum destes campos, o engine que gerencia os Datasets no far o filtro.
Dataset customizado de fichrio "pai-filho"
Para acessar informaes de um fichrio pai-filho pode ser utilizado o WebService DatasetService, um Dataset customizado (Exemplo 1), ou ainda um evento do fichrio ou workflow (Exemplo 2).
16
Customizao de Datasets
Exemplo 1 function createDataset(fields, constraints, sortFields) {
// Cria as colunas var newDataset = DatasetBuilder.newDataset(); newDataset.addColumn("Pea"); newDataset.addColumn("ID"); newDataset.addColumn("Quantidade"); newDataset.addColumn("Ficha");
//Cria as constraints para buscar as fichas ativas var cst = DatasetFactory.createConstraint("metadata#active", "true", "true", ConstraintType.MUST); var constraints_principal = new Array(cst);
var datasetPadrao = DatasetFactory.getDataset("fichaexemplo ", null, constraints_principal , null);
for(i = 0; i < datasetPadrao.rowsCount; i++) { //Cria as constraints para buscar os campos filhos, passando o tablename, nmero da ficha e verso (no caso a ltima). var c1 = DatasetFactory.createConstraint("tablename", "tabela_filhos" ,"tabela_filhos", ConstraintType.MUST); var c2 = DatasetFactory.createConstraint("metadata#id", datasetPadrao.getValue(i, "metadata#id"), datasetPadrao.getValue(i, "metadata#id"), ConstraintType.MUST); var c3 = DatasetFactory.createConstraint("metadata#version", datasetPadrao.getValue(i, "metadata#version"), datasetPadrao.getValue(i, "metadata#version"), ConstraintType.MUST); var constraints_filhos = new Array(c1, c2, c3);
// Busca o dataset var datasetFilhos = DatasetFactory.getDataset("fichaexemplo ", null,constraints_filhos , null);
Utilizando um dos modelos de Dataset acima, possvel recuperar os valores filhos das fichas ativas, ou seja, a ltima verso criada. Existem alguns parmetros obrigatrios, que devem ser passados atravs de constraints, onde o valor inicial e final devem ser iguais. A forma de recuperar esses valores opcional. Segue abaixo a nomenclatura obrigatria de cada parmetro: tablename: Atributo utilizado para nomear cada table filha do HTML. Ex:
function beforeTaskSave(colleagueId,nextSequenceId,userList) {
//Cria as constraints para buscar as fichas ativas var cst1 = DatasetFactory.createConstraint("metadata#active", "true", "true", ConstraintType.MUST);
// obrigatrio informar a constraint X para indicar o usuario que sera validada a permisso nas fichas var cst2 = DatasetFactory.createConstraint("userSecurityId", getValue("WKUser"), getValue("WKUser"), ConstraintType.MUST); var constraints_principal = new Array(cst1, cst2);
var datasetPadrao = DatasetFactory.getDataset("fichaexemplo ", null, constraints_principal , null);
for(i = 0; i < datasetPadrao.rowsCount; i++) {
//Cria as constraints para buscar os campos filhos, passando o tablename, nmero da ficha e verso (no caso a ltima). var c1 = DatasetFactory.createConstraint("tablename", "nome_tabela" ,"nome_tabela", ConstraintType.MUST); var c2 = DatasetFactory.createConstraint("metadata#id", datasetPadrao.getValue(i, "metadata#id"), datasetPadrao.getValue(i, "metadata#id"), ConstraintType.MUST); var c3 = DatasetFactory.createConstraint("metadata#version", datasetPadrao.getValue(i, "metadata#version"), datasetPadrao.getValue(i, "metadata#version"), ConstraintType.MUST);
// obrigatrio informar a constraint X para indicar o usuario que sera validada a permisso nas fichas var c4 = DatasetFactory.createConstraint("userSecurityId", getValue("WKUser"), getValue("WKUser"), ConstraintType.MUST);
var constraints_filhos = new Array(c1, c2, c3, c4);
// Busca o dataset var datasetFilhos = DatasetFactory.getDataset("fichaexemplo", null,constraints_filhos , null);
for(j = 0; j < datasetFilhos.rowsCount; j++) { //Utiliza os campos do Dataset. Exibindo como exemplo. log.info(" CAMPO 1 " + datasetFilhos.getValue(j, "peca")); log.info(" CAMPO 2 " + datasetFilhos.getValue(j, "wdk_sequence_id")); log.info(" CAMPO 3 " + datasetFilhos.getValue(j, "qtde")); log.info(" CAMPO 4 " + datasetPadrao.getValue(i, "metadata#id")); } } } <table border="1" tablename="tabela_filhos" addbuttonlabel="Adicionar acessrio"> . . Campos Filhos. . </table>
18
Customizao de Datasets
metadata#id: Nmero do documento que representa a ficha.Ex: 228. metadata#version: Nmero da verso da ficha. Ex: 6000. userSecurityId: Matricula do usurio que ser validada a permisso nas fichas. OBS: Esse parmetro no ser validado na Visualizao de Datasets (Painel de Controle > Dataset), visto que nessa opo um exemplo de visualizao dos dados.
Tambm possvel exibir a ordem dos campos filhos, para isso deve-se utilizar o campo wdk_sequence_id, sendo que este no poder ser utilizado como nome de algum campo do formulrio.
Resultado final do exemplo 1:
19
Customizao de Datasets
Guia de Referncia de Datasets
DatasetFactory
Method Summary public SearchConstraint createConstraint(String field, String initialValue, String finalValue, ConstraintType type)) Cria uma nova constraint para a seleo de registros do Dataset. java.util.List<String> getAvailableDatasets() Retorna lista de datasets. java.lang.String getDataset(String name, String[] fields, SearchConstraint[] constraints, String[] order) Carrega os dados de um Dataset.
Dataset
Method Summary protected void addColumn(java.lang.String colName) Adiciona uma coluna ao Dataset. protected void addRow(java.lang.Object[] values) Adiciona uma linha ao Dataset. java.lang.String getColumnName(int colNum) Retorna o nome de uma coluna do Dataset. int getColumnsCount() Retorna a quantidade de colunas de um Dataset. java.lang.String[ ] getColumnsName() Retorna um array contendo os nomes das colunas do Dataset.
20
Customizao de Datasets
java.util.ArrayList<java.util.HashM ap<java.lang.String,java.lang.Obj ect>> getMap() Retorna os valores do Dataset na forma de uma lista contendo mapas, onde cada registro do Dataset corresponde a um mapa com o nome da coluna como chave. int getRowsCount() Retorna a quantidade de linhas disponveis no Dataset. DefaultDataset getSubDataset(java.lang.String field, java.lang.Object value) Retorna um subconjunto dos dados do Dataset, na forma de um novo Dataset. java.lang.Object getValue(int row, int col) Retorna o valor Dataset, na linha e coluna passadas por parmetro java.lang.Object getValue(int row, java.lang.String colName) Retorna o valor armazenado no Dataset, na linha passada por parmetro e no campo especificado. java.lang.Object[ ][ ] getValues() Retorna um array bidimensional com os dados do Dataset. java.sql.ResultSet toResultSet() Retorna um ResultSet contendo os dados do Dataset.
21
Customizao de Datasets
Third Party Trademarks
Adobe, Flash, Flex, Flex Builder, PostScript and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Apache is a trademark of The Apache Software Foundation.
Apple is a trademark of Apple Inc., registered in the U.S. and other countries
Firefox and Mozilla are registered trademarks of the Mozilla Foundation.
Google, Android and Google Chrome are trademarks of the Google Inc.
IOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used under license
JavaScript is a trademark of Oracle Corporation.
Liferay, Liferay Portal, and the Liferay logo are trademarks or registered trademarks of Liferay, Inc., in the United States and other countries.
Linux is the registered trademark of Linus Torvalds in the U.S. and other countries.
Microsoft, Active Directory, Excel, Internet Explorer, Outlook, PowerPoint, SQL Server, Windows and Windows Vista are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
MySQL is a trademark of Oracle Corporation and/or its affiliates.
openDBcopy is an open-source project by Anthony Smith, published under the terms of the GNU General Public License
OpenLDAP is a registered trademark of the OpenLDAP Foundation
Oracle, Java and OpenOffice.org are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Progress and OpenEdge are trademarks or registered trademarks of Progress Software Corporation or one of its subsidiaries or affiliates in the U.S. and other countries.
Red Hat and JBoss are registered trademarks of Red Hat, Inc. in the United States and other countries.
This product includes software developed by the Visigoth Software Society (http://www.visigoths.org/).
Any other third party trademarks are the property of their respective owners.