Impossibile cancellare Documenti con Associazioni

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2016 10:32 AM
Salve,
sono diversi giorni che sto cercando di venire a capo di un problema legato alla presenza di associazioni tra documenti.
In sostanza ho definito un tipo custom nel mio model:
<blockcode>
<type name="rassleg:base_type">
<title>Rassegna Legale</title>
<parent>cm:content</parent>
<mandatory-aspects>
<aspect>cm:generalclassifiable</aspect>
<aspect>rassleg:asp_base</aspect>
<aspect>cm:countable</aspect>
<aspect>rassleg:arg_corr</aspect>
<aspect>rassleg:doc_corr</aspect>
</mandatory-aspects>
</type>
</blockcode>
A cui ho aggiunto una serie di aspect, tra cui uno utile per gestire le associazioni tra documenti:
<blockcode>
<aspect name="rassleg:doc_corr">
<title>Documenti correlati</title>
<associations>
<association name="rassleg:relatedDocuments">
<title>Documenti correlati</title>
<source>
<mandatory>false</mandatory>
<many>true</many>
</source>
<target>
<class>rassleg:base_type</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
</blockcode>
Il problema nasce nel momento in cui tento di cancellare un documento su cui erano definite delle associazioni.
Per poter riuscire a cancellare il documento, devo prima cancellare manualmente le associazioni, altrimenti risulta impossibile cancellare il documento.
Nel log viene visualizzato il seguente messaggio d'errore:
<blockcode>
….
2016-03-04 16:24:12,696 ERROR [org.springframework.extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-4] Exception from executeScript - redirecting to status template error: Node does not exist: workspace://SpacesStore/c7d27db7-c2a2-46eb-8df7-52c882ee7a44 (status
tatus[id=1497changeTxnId=dd320ecf-a3f3-482d-a46c-aa91d34f3505, dbTxnId=425, deleted=true])
org.alfresco.service.cmr.repository.InvalidNodeRefException: Node does not exist: workspace://SpacesStore/c7d27db7-c2a2-46eb-8df7-52c882ee7a44 (status
tatus[id=1497changeTxnId=dd320ecf-a3f3-482d-a46c-aa91d34f3505, dbTxnId=425, deleted=true])
at org.alfresco.repo.node.db.DbNodeServiceImpl.getNodePairNotNull(DbNodeServiceImpl.java:182)
at org.alfresco.repo.node.db.DbNodeServiceImpl.getType(DbNodeServiceImpl.java:706)
at sun.reflect.GeneratedMethodAccessor239.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
….
</blockcode>
Chiaramente il nodo c7d27db7-c2a2-46eb-8df7-52c882ee7a44 esiste, in quanto si tratta del documento che sto cercando di eliminare.
Per cercare di aggirare il problema, ho anche tantato di definire un behaviour sulla cancellazione dei nodi, per cercare di forzare la cancellazione delle associazioni:
<blockcode>
public class RuleTriggerBidirectionalAssoc extends RuleTriggerAbstractBase
implements NodeServicePolicies.BeforeDeleteNodePolicy{
Log log = LogFactory.getLog(RuleTriggerBidirectionalAssoc.class);
…..
@Override
public void beforeDeleteNode(NodeRef node) {
try {
QName assocName = QName.createQName(RassegnaLegaleModel.NAMESPACE_RASSEGNA_LEGALE,
RassegnaLegaleModel.ASSOC_RELATED_DOC);
List<AssociationRef> relatedDoc = nodeService.getTargetAssocs(node, assocName);
for (AssociationRef associationRef : relatedDoc) {
NodeRef target = associationRef.getTargetRef();
nodeService.removeAssociation(node, target, assocName);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public void registerRuleTrigger() {
log.info("Called registerRuleTrigger");
…..
this.policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI,"beforeDeleteNode"),
ContentModel.TYPE_CONTENT,
new JavaBehaviour(this,"beforeDeleteNode",NotificationFrequency.FIRST_EVENT)
);
}
}
</blockcode>
L'operazione anche in questo caso non va a buon fine, in quanto la chiamata al metodo removeAssociation va in eccezione con il seguente messaggio:
Qualcuno può darmi una mano con questo problema?
Grazie di cuore a tutti,
Giuseppe.
sono diversi giorni che sto cercando di venire a capo di un problema legato alla presenza di associazioni tra documenti.
In sostanza ho definito un tipo custom nel mio model:
<blockcode>
<type name="rassleg:base_type">
<title>Rassegna Legale</title>
<parent>cm:content</parent>
<mandatory-aspects>
<aspect>cm:generalclassifiable</aspect>
<aspect>rassleg:asp_base</aspect>
<aspect>cm:countable</aspect>
<aspect>rassleg:arg_corr</aspect>
<aspect>rassleg:doc_corr</aspect>
</mandatory-aspects>
</type>
</blockcode>
A cui ho aggiunto una serie di aspect, tra cui uno utile per gestire le associazioni tra documenti:
<blockcode>
<aspect name="rassleg:doc_corr">
<title>Documenti correlati</title>
<associations>
<association name="rassleg:relatedDocuments">
<title>Documenti correlati</title>
<source>
<mandatory>false</mandatory>
<many>true</many>
</source>
<target>
<class>rassleg:base_type</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
</blockcode>
Il problema nasce nel momento in cui tento di cancellare un documento su cui erano definite delle associazioni.
Per poter riuscire a cancellare il documento, devo prima cancellare manualmente le associazioni, altrimenti risulta impossibile cancellare il documento.
Nel log viene visualizzato il seguente messaggio d'errore:
<blockcode>
….
2016-03-04 16:24:12,696 ERROR [org.springframework.extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-4] Exception from executeScript - redirecting to status template error: Node does not exist: workspace://SpacesStore/c7d27db7-c2a2-46eb-8df7-52c882ee7a44 (status

org.alfresco.service.cmr.repository.InvalidNodeRefException: Node does not exist: workspace://SpacesStore/c7d27db7-c2a2-46eb-8df7-52c882ee7a44 (status

at org.alfresco.repo.node.db.DbNodeServiceImpl.getNodePairNotNull(DbNodeServiceImpl.java:182)
at org.alfresco.repo.node.db.DbNodeServiceImpl.getType(DbNodeServiceImpl.java:706)
at sun.reflect.GeneratedMethodAccessor239.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
….
</blockcode>
Chiaramente il nodo c7d27db7-c2a2-46eb-8df7-52c882ee7a44 esiste, in quanto si tratta del documento che sto cercando di eliminare.
Per cercare di aggirare il problema, ho anche tantato di definire un behaviour sulla cancellazione dei nodi, per cercare di forzare la cancellazione delle associazioni:
<blockcode>
public class RuleTriggerBidirectionalAssoc extends RuleTriggerAbstractBase
implements NodeServicePolicies.BeforeDeleteNodePolicy{
Log log = LogFactory.getLog(RuleTriggerBidirectionalAssoc.class);
…..
@Override
public void beforeDeleteNode(NodeRef node) {
try {
QName assocName = QName.createQName(RassegnaLegaleModel.NAMESPACE_RASSEGNA_LEGALE,
RassegnaLegaleModel.ASSOC_RELATED_DOC);
List<AssociationRef> relatedDoc = nodeService.getTargetAssocs(node, assocName);
for (AssociationRef associationRef : relatedDoc) {
NodeRef target = associationRef.getTargetRef();
nodeService.removeAssociation(node, target, assocName);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public void registerRuleTrigger() {
log.info("Called registerRuleTrigger");
…..
this.policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI,"beforeDeleteNode"),
ContentModel.TYPE_CONTENT,
new JavaBehaviour(this,"beforeDeleteNode",NotificationFrequency.FIRST_EVENT)
);
}
}
</blockcode>
L'operazione anche in questo caso non va a buon fine, in quanto la chiamata al metodo removeAssociation va in eccezione con il seguente messaggio:
java.lang.IllegalStateException: Operation not allowed against node pending deletion. Check the node for aspect {http://www.alfresco.org/model/system/1.0}pendingDelete
Qualcuno può darmi una mano con questo problema?
Grazie di cuore a tutti,
Giuseppe.
Labels:
- Labels:
-
Archive
4 REPLIES 4
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2016 01:30 PM
Tipicamente nell'utilizzo delle peer association non c'è alcun vincolo nella cancellazione.
Di solito questi problemi si palesano con le child-association dove avviene invece la rimozione in cascata.
Vedo però che sullo stesso type hai diversi aspect cosa altro hai dichiarato?
Quali altri behavior hai implementato?
A mira di naso mi sembra più un problema dovuto alle eventuali operazioni implementate a livello di behavior.
Di solito questi problemi si palesano con le child-association dove avviene invece la rimozione in cascata.
Vedo però che sullo stesso type hai diversi aspect cosa altro hai dichiarato?
Quali altri behavior hai implementato?
A mira di naso mi sembra più un problema dovuto alle eventuali operazioni implementate a livello di behavior.

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-16-2016 02:01 PM
Grazie mille per la tua risposta!
I vari aspect sono utilizzati per lo più per aggiungere delle properties al tipo di base.
Gli unici due particolari sono "rassleg:arg_corr" e "rassleg:doc_corr". Il primo mi serve per agganciare l'aspect cm:taggable ed il secondo per gestire le associazioni:
Per quanto riguarda i behavior, ne ho implementati solo due legati alla gestione delle associazioni bi-direzionali.
Il mio intento è infatti quello di collegare i documenti in modo bi-direzionale, per cui alla creazione di un associazione creo anche quella inversa.
Questo è il codice completo della classe ( Ho rimosso il metodo beforeDeleteNode e la relativa registrazione visto che non funzionavano 😞
La creazione delle associazioni funziona senza problemi, cosi come la cancellazione.
I problemi nascono nel momento in cui devo cancellare un documento a cui erano agganciate delle associazioni. Come dicevo, sono costretto a cancellare manualmente le associazioni per poter successivamente cancellare il documento.
Ringrazio in anticipo chiunque possa darmi una mano!
Giuseppe.
I vari aspect sono utilizzati per lo più per aggiungere delle properties al tipo di base.
Gli unici due particolari sono "rassleg:arg_corr" e "rassleg:doc_corr". Il primo mi serve per agganciare l'aspect cm:taggable ed il secondo per gestire le associazioni:
<aspect name="rassleg:arg_corr"> <title>Argomenti correlati</title> <mandatory-aspects> <aspect>cm:taggable</aspect> </mandatory-aspects> </aspect> <aspect name="rassleg:doc_corr"> <title>Documenti correlati</title> <associations> <association name="rassleg:relatedDocuments"> <title>Documenti correlati</title> <source> <mandatory>false</mandatory> <many>true</many> </source> <target> <class>rassleg:base_type</class> <mandatory>false</mandatory> <many>true</many> </target> </association> </associations> </aspect>
Per quanto riguarda i behavior, ne ho implementati solo due legati alla gestione delle associazioni bi-direzionali.
Il mio intento è infatti quello di collegare i documenti in modo bi-direzionale, per cui alla creazione di un associazione creo anche quella inversa.
Questo è il codice completo della classe ( Ho rimosso il metodo beforeDeleteNode e la relativa registrazione visto che non funzionavano 😞
…public class RuleTriggerBidirectionalAssoc extends RuleTriggerAbstractBase implements NodeServicePolicies.OnDeleteAssociationPolicy, NodeServicePolicies.OnCreateAssociationPolicy { Log log = LogFactory.getLog(RuleTriggerBidirectionalAssoc.class); public void onDeleteAssociation(AssociationRef nodeAssocRef) { log.info("Called onDeleteAssociation"); nodeService.removeAssociation(nodeAssocRef.getTargetRef(), nodeAssocRef.getSourceRef(), nodeAssocRef.getTypeQName()); } public void onCreateAssociation(AssociationRef nodeAssocRef) { log.info("Called onCreateAssociation"); nodeService.createAssociation(nodeAssocRef.getTargetRef(), nodeAssocRef.getSourceRef(), nodeAssocRef.getTypeQName()); } public void registerRuleTrigger() { log.info("Called registerRuleTrigger"); this.policyComponent.bindAssociationBehaviour(QName.createQName( NamespaceService.ALFRESCO_URI, "onCreateAssociation"), this, new JavaBehaviour(this, "onCreateAssociation")); this.policyComponent.bindAssociationBehaviour(QName.createQName( NamespaceService.ALFRESCO_URI, "onDeleteAssociation"), this, new JavaBehaviour(this, "onDeleteAssociation")); }}
La creazione delle associazioni funziona senza problemi, cosi come la cancellazione.
I problemi nascono nel momento in cui devo cancellare un documento a cui erano agganciate delle associazioni. Come dicevo, sono costretto a cancellare manualmente le associazioni per poter successivamente cancellare il documento.
Ringrazio in anticipo chiunque possa darmi una mano!
Giuseppe.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2016 03:26 PM
<blockquote>Per quanto riguarda i behavior, ne ho implementati solo due legati alla gestione delle associazioni bi-direzionali.
Il mio intento è infatti quello di collegare i documenti in modo bi-direzionale, per cui alla creazione di un associazione creo anche quella inversa.</blockquote>
Forse ho capito male, ma considera che le associazioni sono tutte bidirezionali non serve fare questo.
Sia le associazioni peer che quelle child sono navigabili da entrambe le direzioni.
Siano esse da padre a figlio, figlio a padre (child), oppure associante verso associato oppure associato verso associante (peer).
Il mio intento è infatti quello di collegare i documenti in modo bi-direzionale, per cui alla creazione di un associazione creo anche quella inversa.</blockquote>
Forse ho capito male, ma considera che le associazioni sono tutte bidirezionali non serve fare questo.
Sia le associazioni peer che quelle child sono navigabili da entrambe le direzioni.
Siano esse da padre a figlio, figlio a padre (child), oppure associante verso associato oppure associato verso associante (peer).

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-21-2016 06:13 AM
In realtà ho dovuto implementare quel discorso per far si che all'interno della pagina di dettaglio del documento, mi venga mostrata l'associazione anche nel documento "child".
Diversamente, visualizzo l'associazione solo nella pagina di dettaglio del documento "padre".
Se collego "A" con "B", voglio visualizzare l'associazione anche quando visualizzo il documento "B".
Chiramente utilizzo Alfresco Share come front-end.
Questo è il blocco di codice che ho inserito nel file share-config.xml per visualizzare e modificare le associazioni:
Diversamente, visualizzo l'associazione solo nella pagina di dettaglio del documento "padre".
Se collego "A" con "B", voglio visualizzare l'associazione anche quando visualizzo il documento "B".
Chiramente utilizzo Alfresco Share come front-end.
Questo è il blocco di codice che ho inserito nel file share-config.xml per visualizzare e modificare le associazioni:
<config evaluator="aspect" condition="rassleg:doc_corr"> <forms> <form> <field-visibility> <show id="rassleg:relatedDocuments" /> </field-visibility> <appearance> <field id="rassleg:relatedDocuments" label-id="label.avvproj-rassleg-relatedDocuments"> <control template="/com/avvproj/components/form/controls/association.ftl"> <control-param name="displayMode">items</control-param> <control-param name="showTargetLink">true</control-param> <control-param name="allowNavigationToContentChildren">false</control-param> <control-param name="startLocation">{doclib}</control-param> </control> </field> </appearance> </form> </forms> </config>
