Nota | ||
---|---|---|
| ||
Caro Cliente, O TOTVS ECM 3.0 foi fundamentado na tecnologia de interface Flash, do qual a Adobe irá descontinuar seu suporte em 31/12/2020. Recomendamos que nossos clientes avaliem a utilização do TOTVS Fluig Plataforma, que proporciona uma maior abrangência de recursos e importantes inovações tecnológicas. São inúmeras novidades não só em ECM e BPM que o Fluig entrega aos seus mais de 4 mil clientes, mas também conta com recursos de portais, social e identidade única. Entre em contato com seu executivo de conta para saber mais detalhes desta oferta. |
Índice | ||||||||
---|---|---|---|---|---|---|---|---|
|
O TOTVS | ECM é um produto que permite disponibilizar informações provindas de várias fontes de dados através de formas variadas de apresentação. Dentre estas formas, destacam-se os processos Workflow, Formulários e Portais.
...
No Webdesk 2.04, cada componente que faria uso da informação era responsável pela sua extração. Em outras palavras, se os dados de um determinado fichário devessem ser apresentados em um portal, cabia ao portlet responsável pela formatação a extração destes dados. Da mesma forma, se um determinado processo workflow exigisse o uso deste mesmo fichário, também ele deveria fazer a extração destes dados. O diagrama abaixo apresenta um esquema básico da organização deste modelo.
...
O TOTVS | ECM introduz um novo conceito de componente – Dataset – que permite padronizar o acesso às informações, independente da origem dos dados. Isto significa que, uma vez que um Dataset esteja disponível no sistema, ele poderá ser invocado de qualquer parte do sistema e de forma consistente, independente da sua origem.
...
O diagrama abaixo apresenta um modelo conceitual sobre os Datasets.
...
Atualmente existem três tipos de Datasets gerenciados pelo produto:
...
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 não haverá impacto para o processo workflow (ou para os demais pontos que utilizem o Dataset), desde que se observe o nome dos campos.
...
Pelo painel de controle é possível navegar pelos Datasets disponíveis bem como visualizar o seu conteúdo. Com isto é possível verificar quais os campos disponíveis, tanto para filtros quanto para acesso, bem como fazer testes sobre Datasets customizados.
O exemplo abaixo apresenta um exemplo de Dataset sendo visualizado.
...
Neste exemplo, é possível visualizar os campos disponíveis (seq, name e desc) e os registros retornados pelo Dataset. Note que estas informações são essenciais para o uso dos Datasets, principalmente quando há necessidade de restringir os dados que queremos acessar.
Vários pontos do sistema podem fazer uso dos Datasets. Dependendo do local onde o Dataset é utilizado, podem ocorrer variações na forma de acessá-lo ou de manuseá-lo.
Quando um Dataset é acessado via um ponto de customização, como eventos de um fichário ou de um processo, isto é feito através de chamadas JavaScript que serão executadas no lado servidor.
...
Informações | ||
---|---|---|
| ||
O valor considerado no sqlLimit é sempre o initialValue, o que for informado no finalValue não será considerado. |
...
Existe outra constraint especial utilizada somente para acesso a dataset de fichários, ela indica se ao buscar o serviço de dados devem ser retornados APENAS os dados das fichas do fichário principal. A constraint é a onlyMainCards e por padrão seu valor é false, ou seja, são retornados os dados das fichas do fichário principal e sub-fichários.
...
Aviso | ||
---|---|---|
| ||
As constraints podem ser utilizadas apenas para datasets internos. Datasets customizados não aceitam constraints, pelo fato de os dados serem externos, não sendo possível 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 informações desnecessárias. |
...
Considere os valores da tabela abaixo sendo utilizadas como um serviço de dados a partir de um fichário para exemplificação dos exemplos:
Código | Nome | Cidade |
---|---|---|
1 | Javier Spiva | São Paulo |
2 | Cody Ballow | Rio de Janeiro |
3 | Javier Naramore | São Paulo |
4 | Max Nevius | Rio de Janeiro |
5 | Noemi Roiger | São Paulo |
6 | Lonnie Cadwallader | Rio de Janeiro |
7 | Lorrie Spece | Brasília |
Exemplos de retorno de dados
Bloco de código |
---|
var c1 = DatasetFactory.createConstraint("codigo", "1", "4", ConstraintType.MUST); |
Será retornado:
Código | Nome | Cidade |
---|---|---|
1 | Javier Spiva | São Paulo |
2 | Cody Ballow | Rio de Janeiro |
3 | Javier Naramore | São Paulo |
4 | Max Nevius | Rio de Janeiro |
Bloco de código |
---|
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", "Brasília", "Brasília", ConstraintType. SHOULD); |
Será retornado:
Código | Nome | Cidade |
---|---|---|
3 | Javier Spiva | São Paulo |
5 | Noemi Roiger | São Paulo |
6 | Lonnie Cadwallader | Rio de Janeiro |
7 | Lorrie Spece | Rio de Janeiro |
...
Bloco de código |
---|
var c1 = DatasetFactory.createConstraint("cidade", "Brasília", "Brasília", ConstraintType.MUST_NOT); |
Será retornado
Código | Nome | Cidade |
1 | Javier Spiva | São Paulo |
2 | Cody Ballow | Rio de Janeiro |
3 | Javier Naramore | São Paulo |
4 | Max Nevius | Rio de Janeiro |
5 | Noemi Roiger | São Paulo |
6 | Lonnie Cadwallader | Rio de Janeiro |
...
...
Informações | ||
---|---|---|
| ||
A biblioteca “vcXMLRPC.js“ era incompatível com algumas tecnologias disponíveis, como por exemplo o jQuery UI. Para aperfeiçoar a customização de formulários e possibilitar a utilização de bibliotecas Javascript complementares, foi desenvolvida a nova biblioteca de integração de datasets “ecm_datasets.js”. Esta nova biblioteca pode ser utilizada da mesma forma que a “vcXMLRPC.js“ e deverá ser utilizada para construção de novas customizações. As customizações que já utilizam a antiga biblioteca “vcXMLRPC.js“ continuarão funcionando normalmente, entretanto esta biblioteca está depreciada. |
O TOTVS | ECM permite especificar um Dataset em um campo select (combo-box). Quando isto é feito, as opções do combo são automaticamente criadas de acordo com os dados existentes no Dataset.
...
No exemplo acima, o campo “estado” foi configurado para que as opções do combo sejam criadas a partir do Dataset “estadosBR”. Como valor do campo será utilizado o campo “Sigla”, embora para o usuário será apresentado o campo “Estado”.
Os Datasets também podem ser utilizados para permitir gerar conteúdo dinâmico em páginas de Sites. A sintaxe utilizada para o acesso e navegação aos fichários é muito similar aos casos anteriormente vistos, embora adaptada para o uso pelo FreeMarker (engine utilizado pelo Site).
...
Bloco de código |
---|
[#assign myDataset = DatasetFactory.getDataset("workflowProcess", null, null, null) ] <table> [#list myDataset.getMap() as processos] <tr> <td>${processos.processInstanceId}</td> </tr> [/#list] </table> |
O TOTVS | ECM disponibiliza um conjunto de WebServices que permitem integrar aplicações de terceiros ao produto. Dentre os serviços disponibilizados, o serviço DatasetService permite fazer o acesso a um Dataset. Para verificar a lista de serviços disponíveis 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 aplicação cliente. Consulte a documentação da tecnologia escolhida pra obter detalhes sobre como acessar Web Services.
...
Um Dataset pode ser construído a partir de um código JavaScript. Uma vez que o próprio Dataset é criado a partir de um código JavaScript, é possível fazer chamadas a outros Datasets, chamadas à serviços externos ou apenas criar o Dataset a partir de valores codificados.
...
Note que o código JavaScript que cria o Dataset recebe como parâmetros os campos, as constraints e a ordem dos campos. Cabe ao código que implementa um JavaScript customizado utilizar estes valores na sua lógica. Caso o script desconsidere algum destes campos, o engine que gerencia os Datasets não fará o filtro.
...
Bloco de código |
---|
function beforeTaskSave(colleagueId,nextSequenceId,userList) { //Cria as constraints para buscar as fichas ativas var cst1 = DatasetFactory.createConstraint("metadata#active", "true", "true", ConstraintType.MUST); // É obrigatório informar a constraint X para indicar o usuario que sera validada a permissão 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, número da ficha e versão (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); // É obrigatório informar a constraint X para indicar o usuario que sera validada a permissão 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")); } } } |
Exemplo 2
Utilizando um dos modelos de Dataset acima, é possível recuperar os valores “filhos” das fichas ativas, ou seja, a última versão criada. Existem alguns parâmetros obrigatórios, que devem ser passados através de constraints, onde o valor inicial e final devem ser iguais. A forma de recuperar esses valores é opcional. Segue abaixo a nomenclatura obrigatória de cada parâmetro:
...