Javascript API
Lorsque l'utilisation de formule SPEL s'avère impossible ou peu adaptée, il peut être intéressant de créer des scripts javascripts. Alfresco permet d'exécuter ces scripts sous formes de règles et beCPG permet également de lancer des scripts lors de la formulation de tâches projet ou à la formulation d'une entité. En fonction du contexte de lancement de la règle, plusieurs objets sont disponibles dans le contexte d'exécution du script. Attention la création de règle de type javascript peut impacter fortement les performances ainsi que la multiplication des règles, c'est pourquoi beCPG fournit un certains nombre de helper ainsi qu'un script standard à utiliser en point d'entrée.
Contextes
Règle
Dans le contexte d'une règle alfresco vous avez accés aux objets listés dans la documentation Alfresco:
https://docs.alfresco.com/content-services/latest/develop/reference/repo-root-objects-ref/
Script de formulation
Un script de formulation peut être spécifié sur le modèle d'une entité, il est exécuté en toute fin de la chaîne de formulation. Dans ce context vous avez accès au même contexte que lors de l'exécution d'une règle mais aussi aux objets suivants:
Variable | Description |
---|---|
currentUser | Le login de l'utilisateur courant |
entity | L'entité formulé (ProductData ou ProjectData par exemple) |
Script de tâche
Un script peut être spécifié sur un livrable projet. Il est exécuté lors de la clôture de la tâche
Variable | Description |
---|---|
currentUser | Le login de l'utilisateur courant |
task | L'object TaskListDataItem correspondant à la tâche assigné au livrable en cours |
project | L'object ProjectData |
shareUrl | L'url de l'application |
Point d'entrée
Afin de limiter le nombre de règles, BeCPG préconise de centraliser les règles liées aux entités dans le script classify-entity.js. La fonction rename(product) est donnée à titre d'exemple et doit être implémentée pour par exemple nommer automatiquement les entités de l'entrepôt.
Le script classify-entity.js est également celui qui définit les règles de classement par défaut et peut être modifié.
Helper
beCPG fourni en plus des API javascript Alfresco un certains nombre de fonctions qu'il est conseillé d'utiliser pour avoir un script performant et facile à maintenir.
Pour inclure les helpers beCPG la première ligne du script doit contenir la référence suivante:
Les fonctions à disposition:
Constantes | Description |
---|---|
SIMULATION_SITE_ID | |
VALID_SITE_ID | |
ARCHIVED_SITE_ID | |
SUPPLIER_PORTAL_SITE_ID |
Méthodes | Description |
---|---|
isEmpty(value) alias isNullOrEmpty(value) | returns true if value is empty or null |
orEmpty(value) | returns value or empty if null; |
propValue(node, propName) alias getProp(node, propName) | returns node property value or empty |
mlPropValue(node, propName, locale, exactLocale? false) alias getMLProp(node, propName, locale, exactLocale? false) | returns the node's multilingual property value for the specified locale or empty if exactLocale = true else it will return the default locale |
mlPropConstraint(propValue, propName, locale) alias getMLConstraint(propValue, propName, locale) | display value or empty for multilingual constraint value |
incrementAndGetAutoNumValue(autoNumClassName, propName) alias autoNumValue(autoNumClassName, propName) | increments and return the autonum value of the property's classname provided |
incrementAndGetAutoNumCounter(autoNumClassName, propName) alias autoNumCounter(autoNumClassName, propName) | increments and return the counter value of the property's classname provided (without prefix) |
getAutoNumNodeRef(autoNumClassName, propName) alias autoNumNodeRef(autoNumClassName, propName) | returns the NodeRef of the counter for the property's classname provided |
setAutoNumValue(autoNumClassName, propName, counter) | sets the value of the counter of the autonum value for the property's classname provided |
assocValue(node, assocName) | returns assoc nodeRef array |
assocValues(node, assocName) | assoc nodeRef arrays |
assocPropValues(node, assocName, propName) alias getAssoc(product, assocName, propName?) | returns association property array of values |
assocPropValue(node, assocName, propName) | returns association property value |
assocAssocValues(node, assocName, assocAssocName) | returns association association nodeRef array |
assocAssocValue(node, assocName, assocAssocName) | returns association association nodeRef |
copyAssocPropValue(node, assocName, propName, nodePropName) | Copy association property value to node property |
copyAssocAssocValue(node, assocName, assocAssocName, nodeAssocName) | Copy association association value to node association |
updateAssoc(node, assocName, values) | param values can be nodeRef, nodeRef array, scriptNode, scriptNode array |
setValue(node, propName, value) | Set property value checking if property changed returns if property has changed |
setExtraValue(entity, propName, value) | Set property value on repositoryEntity |
updateMLText(node, propQName, locale, value) | Update multilingual value |
i18n(key, params?) | returns i18n message for current locale |
cleanName(value) alias removeForbiddenChar(value) | returns valid cm:name value |
concatName(name, value, separator?) | param separator default is " " returns concatenated value of name + separator + value |
classifyByHierarchy(productNode, folderNode, propHierarchy?) | classify node by hierarchy |
classifyByPropAndHierarchy(productNode, folderNode, propHierarchy?, propPathName?, locale?) | classify node by prop and hierarchy |
isInSite(productNode, siteId) | returns true if node is in siteId |
isInUserFolder(productNode) | returns true if node is in user folder |
getDocumentLibraryNodeRef(siteId) | returns document library folder for site |
createBranch(node, dest, autoMerge?) | Create new branch of entity |
mergeBranch( node, branchToNode, description, type) | branchToNode can be null if autoMerge |
moveAndRename(node,dest) | Move node and rename if same name exists in destination |
generateEAN13Code(prefix) | returns generate EAN13 code with autonum corresponding to prefix |
setPermissionAsSystem(node, permission, authority) | Set permissions as system, node can be node or nodeRef |
allowWrite(node, authority) | Set write permissions as system bypassing rights |
allowRead(node, authority) | Set read permissions as system bypassing rights |
deleteGroupPermission(node, group) | Remove specific group permissions |
clearPermissions(node, inherit) | Remove permissions as system set on node, node can be node or nodeRef |
copyList( sourceNode, destNode , listQname) | Copy one list from sourceNode to destNode |
listExist( node, listQname) | returns true if list exists and non empty |
listItems( node, listQname) | returns list items |
toISO8601(dateObject, options) | convert date toISO8601 |
submitForm(entity, formDataJson) | applies the given formulary to the entity |
getEntityListFromNode(product, listName) | returns the entity list node for the given list name |
isOnCreateEntity(node) | returns true if the node is on creation |
isOnMergeEntity(node) | returns true if the node is on merge |
isOnMergeMinorVersion(node) | returns true if the node is on merge with minor revision |
isOnMergeMajorVersion(node) | returns true if the node is on merge with major revision |
isOnCopyEntity(node) | returns true if the node is a new copy |
isOnFormulateEntity(node) | returns true if the node is formulated |
isOnBranchEntity(node) | returns true if the node is a new branch |
addAspectToNode(node, aspectId) | add an aspectId to a node if not used |
removeAspectToNode(node, aspectId) | remove an aspectId to a node if used |
Example :
var geo = new Array();
geo.push(search.findNode("workspace://SpacesStore/f61f7026-3457-4468-aa49-28136dce3443"));
geo.push(search.findNode("workspace://SpacesStore/3074da0c-81e8-4f31-923b-05937da09e0a"));
geo.push(search.findNode("workspace://SpacesStore/20a32eb1-3bfa-43df-ac4e-9c640d4de927"));
updateAssoc(product, "bcpg:productGeoOrigin", geo)
Helpers pour la Signature Numérique
beCPG propose un add-on implémentant un service de signature numérique pour lequel plusieurs méthodes de script ont été implémentées.
Pour une documentation plus détaillée : https://github.com/becpg/becpg-artworks
Méthodes | Description |
---|---|
bSign.prepareForSignature(document, recipients, params) | Crée une copie de travail d'un document PDF et y insère des champs de signature document : noeud du document que vous souhaitez préparer recipients : signataires prévus pour la signature params (optionnel) : liste de paramètres précisant l'emplacement, la taille et le mot clé utilisé par les champs de signature (voir la documentation détaillée) |
bSign.getSignatureView(document, userName, task) | Retourne une URL permettant de signer visuellement un document PDF préparé |
bSign.signDocument(document) | Signe numériquement un document PDF (qui a été préparé et signé visuellement) |