Árvore de páginas

Versões comparadas

Chave

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

...

Utilizado quando é preciso fazer validação customizada nas propriedades da tela de publicação/edição de documentos antes de salva-lo no banco de dados. Dentre todas as propriedades da tela de publicação/edição de documentos não serão tratados os campos customizados, pois já existe um evento que trata esta situação.

Além disso, implementamos também um exemplo de como tornar o campo 'Descrição/Versão/Revisão' de preenchimento obrigatório, apresentado no momento do check in do documento. O exemplo é apresentado como: Exemplo 1 - Tornar campo descrição/versão/revisão obrigatório.

Exemplo:

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {

	// Exemplo de evento que impede o usuário de publicar um documento com descrição 
	// repetida em uma determinada pasta .
	
	
	var state = getValue("WKState");
	

	if (state == "PUBLISH") {

		var doc = getValue("WKDocument");

		// Faz validações apenas se o documento estiver sendo publicado na pasta
		// 624
		if (doc.getParentDocumentId() == 624) {
			// Reduzir o retorno de registros para reduzir impacto em
			// performance.
			var constraintDocument1 = DatasetFactory.createConstraint(
					'sqlLimit', '1', '1', ConstraintType.MUST);
			// Passando código da pasta pai para o Dataset
			var constraintDocument2 = DatasetFactory.createConstraint(
					'parentDocumentId', doc.getParentDocumentId(), doc
							.getParentDocumentId(), ConstraintType.MUST);
			// Consultando apenas registros de documentos ativos.
			var constraintDocument3 = DatasetFactory.createConstraint(
					'activeVersion', 'true', 'true', ConstraintType.MUST);
			// Consultando apenas nos documentos não foram removidos.
			var constraintDocument4 = DatasetFactory.createConstraint(
					'deleted', 'false', 'false', ConstraintType.MUST);
			// Consultando documentos que tenham a mesma descrição informada na
			// publicação
			var constraintDocument5 = DatasetFactory.createConstraint(
					'documentDescription', doc.getDocumentDescription(), doc
							.getDocumentDescription(), ConstraintType.MUST);
			
			var datasetDocument = DatasetFactory.getDataset('document', null,
					new Array(constraintDocument1, constraintDocument2,
							constraintDocument3, constraintDocument4,
							constraintDocument5), null);

			if (datasetDocument.rowsCount > 0) {
				throw "Já existe um documento com a mesma descrição informada";
			}

		}
	}
}

São disponibilizadas algumas propriedades referentes ao documento que está sendo criado ou editado, porém somente para consulta através do método getValue.

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
WKDocumentEditObjeto do Documento

DocumentDto¹

¹Apenas para atualizar o campo keyWord do documento.

WKSubjectDescrição do Assunto do documentoString
WKListApproverLista dos Aprovadores do documentoList<ApproverDto>
WKListSecurityLista com a segurança do documento

List<DocumentSecurityConfigDto>

WKListRelatedDocument

Lista com os documentos relacionados ao documento

List<RelatedDocumentDto>
WKStateEstado da ação: PUBLISH ou MODIFYString
WKUserUsuário logadoString
WKCompanyCódigo da Empresa

int


O produto retorna null quando for necessário pegar umas das propriedades do documento que não exista.

Por exemplo: Nem todos os documentos publicados tem aprovador, logo a variável WKListApprover só terá informações quando realmente existirem aprovadores na publicação.


Exemplos de implementação:

Deck of Cards
historyfalse
idExemplos beforeDcoumentPublisher
Card
label1- Validar informações do documento

É possível usar vários objetos e fazer validações e é muito comum validar permissões específicas ao negócio do cliente e não permitir a inclusão do documento.

No exemplo abaixo, o trecho de código está mostrando todos os possíveis atributos, declara os possíveis objetos, exibe no log algumas informações desses objetos, depois verifica os aprovadores, validando que não pode conter um usuário administrador como aprovador e exibe todos documentos relacionados.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher(){
                
                var doc = getValue("WKDocument");
                var subject = getValue("WKSubject");
                var listApprover = getValue("WKListApprover");
                var listSeg = getValue("WKListSecurity");
                var listRelated = getValue("WKListRelatedDocument");
                var state = getValue("WKState");
                var user = getValue("WKUser");
                var company = getValue("WKCompany");
 
 
        
Bloco de código
languagejs
titleExemplo 1 - Tornar campo descrição/versão/revisão obrigatório
linenumberstrue
function beforeDocumentPublisher() { var doc = getValue("WKDocument"); // Verifica se a descrição da versão não está preenchida if (doc.getVersionDescription() == "") {
        log.info("
###
Usuário 
Documento
Logado: " + 
doc.getDocumentId() + " - Versão: " + doc.getVersion() + " não está com a Descrição da Versão preenchida!");
user);
 
 
                log.info("Empresa: " + company);
        
//
 
Informa
 
somente
 
o
 
numero
 
do
 
documento
 
de
 
origem,

 
para
 
o
 
caso
 
de
 
checkin
 
com
 
nova
 
versao/revisao
        
var constraintDocument1 = DatasetFactory.createConstraint('allocatedDocumentPK.sourceDocument',
log.info("Número do documento: "+ doc.getDocumentId()
,
 + " - Versão: "+ doc
.
getDocumentId
getVersion()
, ConstraintType.MUST
);
     
//
 
Instanciando
 
o
 
dataset
        
var

 
datasetDocument
 
=
 
DatasetFactory.getDataset('allocatedDocument',
 
null,
 
new
 
Array(constraintDocument1),
 
null);
 
        
// Verifica se o documento esta em checkout/checkin e exibe a mensagem
if(listApprover!=null){
                   
if
 for(
datasetDocument.rowsCount
j 
>
= 0
) {
; j < listApprover.size(); j++) {          
              
throw
 
"Para
 
efetuar
 
o
 
checkin
 
é
 
necessário
 
informar
 
a
 
Descrição
 
da Versão!";
if (listApprover.get(j).getColleagueId().equals("adm")){
                            throw "O usuário adm não 
}
pode ser aprovador de 
} }

São disponibilizadas algumas propriedades referentes ao documento que está sendo criado ou editado, porém somente para consulta através do método getValue.

...

List<DocumentSecurityConfigDto>

...

Lista com os documentos relacionados ao documento

...

int

O produto retorna null quando for necessário pegar umas das propriedades do documento que não exista.

Por exemplo: Nem todos os documentos publicados tem aprovador, logo a variável WKListApprover só terá informações quando realmente existirem aprovadores na publicação.

Exemplo:

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher(){
documentos";
                        }
                    }
                }
 
 
                if(listSeg != null){
                    for(j = 0; j < listSeg.size(); j++) {    
                        if (listSeg.get(j).getAttributionValue().equals("cvd")){
                      
var
     
doc
 
=
throw 
getValue("WKDocument");
"O usuário cvd não pode estar na segurança de documentos";
                     
var
 
subject
 
= getValue("WKSubject");
 }
                 
var
 
listApprover
 
= getValue("WKListApprover");
 }
                
var
}
 
listSeg = getValue("WKListSecurity");

 
                
var
if( listRelated != 
getValue("WKListRelatedDocument");
null){
                 
var
 
state
 
=
 
getValue
log.info("
WKState");
Os seguintes documentos estão relacionados a este 
documentos: ");
       
var
 
user
 
=
 
getValue("WKUser");
              for(j = 
var
0; 
company
j 
=
< 
getValue("WKCompany"
listRelated.size();
 
j++) {         

      
log.info("Usuário
 
Logado:
 
"
 
+
 
user);
 
 
                log.info("
Empresa
Nr. documento: "
+ 
company
listRelated.get(j).getRelatedDocumentId());
                
        
}
      
log.info("Número
 
do
 
documento:
 
"+
 
doc.getDocumentId()
 
+
 
"
 
-
 
Versão:
 
"+ doc.getVersion());
 }
                
log.info("Assunto: " + subject);
     
if(listApprover!=null){
           log.info("Estado: " + state);
}
Card
label2- Impedir publicação com descrição repetida

Exemplo de evento que impede o usuário de publicar um documento com descrição repetida em uma determinada pasta.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {

	// Exemplo de evento 
for(j
que 
=
impede 
0;
o 
j
usuário 
< listApprover.size(); j++) { if (listApprover.get(j).getColleagueId().equals("adm")){ throw "O usuário adm não pode ser aprovador de documentos"; } } } if(listSeg != null){ for(j = 0; j < listSeg.size(); j++) { if (listSeg.get(j).getAttributionValue().equals("cvd")){ throw "O usuário cvd não pode estar na segurança de documentos"; } } }
de publicar um documento com descrição 
	// repetida em uma determinada pasta .
	
	
	var state = getValue("WKState");
	

	if (state == "PUBLISH") {

		var doc = getValue("WKDocument");

		// Faz validações apenas se o documento estiver sendo publicado na pasta
		// 624
		if (doc.getParentDocumentId() == 624) {
			// Reduzir o retorno de registros para reduzir impacto em
			// performance.
			var constraintDocument1 = DatasetFactory.createConstraint(
					'sqlLimit', '1', '1', ConstraintType.MUST);
			// Passando código da pasta pai para o Dataset
			var constraintDocument2 = DatasetFactory.createConstraint(
					'parentDocumentId', doc.getParentDocumentId(), doc
							.getParentDocumentId(), ConstraintType.MUST);
			// Consultando apenas registros de documentos ativos.
			var constraintDocument3 = DatasetFactory.createConstraint(
					'activeVersion', 'true', 'true', ConstraintType.MUST);
			// Consultando apenas nos documentos não foram removidos.
			var constraintDocument4 = DatasetFactory.createConstraint(
					'deleted', 'false', 'false', ConstraintType.MUST);
			// Consultando documentos que tenham a mesma descrição informada na
			// publicação
			var constraintDocument5 = DatasetFactory.createConstraint(
					'documentDescription', doc.getDocumentDescription(), doc
							.getDocumentDescription(), ConstraintType.MUST);
			
			var datasetDocument = DatasetFactory.getDataset('document', null,
					new Array(constraintDocument1, constraintDocument2,
							constraintDocument3, constraintDocument4,
							constraintDocument5), null);

			if (datasetDocument.rowsCount > 0) {
				throw "Já existe um documento com a mesma descrição informada";
			}

		}
	}
}
Card
label3- Tornar campo descrição/versão/revisão obrigatório

Exemplo de como tornar o campo 'Descrição/Versão/Revisão' de preenchimento obrigatório, apresentado no momento do check-in do documento. 

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {

    var doc = getValue("WKDocument");

    // Verifica se a descrição da versão não está preenchida
    if (doc.getVersionDescription() == "") {
        log.info("### Documento: " + doc.getDocumentId() + " - Versão: " + doc.getVersion() + " não está com a Descrição da Versão preenchida!");

        // Informa somente o numero do documento de origem, para o caso de checkin com nova versao/revisao
        var constraintDocument1 = 
if( listRelated != null){
DatasetFactory.createConstraint('allocatedDocumentPK.sourceDocument', doc.getDocumentId(), doc .getDocumentId(), ConstraintType.MUST);
        // Instanciando o dataset
        var datasetDocument = 
log
DatasetFactory.
info("Os seguintes documentos estão relacionados a este documentos: ");
getDataset('allocatedDocument', null, new Array(constraintDocument1), null); 
        // Verifica se o documento esta em checkout/checkin e exibe 
for(j = 0; j < listRelated.size(); j++) {
a mensagem
        if (datasetDocument.rowsCount > 0) {
            throw "Para efetuar o checkin é necessário informar a Descrição da Versão!";
        
log.info("Nr. documento: "+ listRelated.get(j).getRelatedDocumentId()); }
}
    }
}
Card
label4- Parametrizar keyword do documento

Exemplo de uso do parâmetro WKDocumentEdit no evento, para que seja possível atualizar o campo keyWord do documento.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {
    var doc 
}
= getValue("WKDocument");
    
log.info("
Assunto
KeyWord Atual: " + 
subject
doc.getKeyWord());

    var docEdit = getValue("WKDocumentEdit");
    
docEdit.setKeyWord("Novo");
    log.info("
Estado
KeyWord Novo: " + 
state
docEdit.getKeyWord());
}


AfterDocumentPublisher

Utilizado quando é preciso fazer alguma manipulação customizada nas propriedades da tela de publicação/edição de documentos depois que ele foi salvo no banco de dados. Dentre todas as propriedades da tela de publicação/edição de documentos não serão tratados os campos customizados.

...