function beforeDocumentPublisher() {
// Exemplo de evento que impede o usuário de publicar um documento com descrição
// repetida em uma determinada pasta levando em consideração também se o documento esta na lixeira.
// caso não queira considerar a lixeira é só remover a validação da mesma, porem o documento poderá
// ser restaurando da lixeira para pasta duplicando assim o nome do arquivo.
var state = getValue("WKState");
if (state == "PUBLISH") {
var doc = getValue("WKDocument");
// Faz validações apenas se o documento estiver sendo publicado na pasta selecionada (trocar o "6" pelo numero da pasta desejada)
// Valida também se o documento esta sendo publicado como novo opção (getVersionOption), caso seja somente alteração ou seja, nova revisão ou versão passa
if (doc.getParentDocumentId() == 6 && doc.getVersionOption() == 0) {
//###############################################################################################
//documentos ativos
// Reduz o retorno de registros para reduzir impacto em performance.
var constraintDocument1 = DatasetFactory.createConstraint(
'sqlLimit', '0', '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 que 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 datasetDocumentActive = DatasetFactory.getDataset('document', null,
new Array(constraintDocument1, constraintDocument2,
constraintDocument3, constraintDocument4,
constraintDocument5), null);
//###############################################################################################
//Considera o documento que esta na lixeira
// Consultando apenas registros de documentos inativos.
constraintDocument3 = DatasetFactory.createConstraint(
'activeVersion', 'false', 'false', ConstraintType.MUST);
// Consultando apenas nos documentos que foram removidos.
constraintDocument4 = DatasetFactory.createConstraint(
'deleted', 'true', 'true', ConstraintType.MUST);
var datasetDocumentDeleted = DatasetFactory.getDataset('document', null,
new Array(constraintDocument1, constraintDocument2,
constraintDocument3, constraintDocument4,
constraintDocument5), null);
var isExistDoc = datasetDocumentActive != null && datasetDocumentActive.rowsCount > 0
&& (datasetDocumentActive.getValue(0, "documentDescription") == doc.getDocumentDescription());
var isExistDocDeleted = datasetDocumentDeleted != null && datasetDocumentDeleted.rowsCount > 0
&& (datasetDocumentDeleted.getValue(0, "documentDescription") == doc.getDocumentDescription());
if (isExistDoc || isExistDocDeleted) {
throw "Já existe um documento com a mesma descrição informada";
}
}
}
}
|