2016-10-28 2 views
0

Ich muss für alle Dokumente innerhalb eines Ordners programmatisch Verknüpfungen erstellen. ich es geschafft, die Links zu erstellen erfolgreich und meine Datei-Link-Knoten ähnelt folgenden:Wie programmiere ich Links in Alfresco programmatisch?

linkNode = nodeService.createNode(
    linkFolderNode, 
    ContentModel.ASSOC_CONTAINS, 
    QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, display_Name), 
    ApplicationModel.TYPE_FILELINK, 
    props 
).getChildRef(); 

display_name hier auf dem angezeigten Dateinamen verweist.

Wenn Sie jedoch den Namen der Originaldatei aktualisieren, wird ein weiterer Link zur aktualisierten Datei generiert. Ist es möglich, dieses Problem zu vermeiden und nur einen einzigen Link zu einer bestimmten Datei beizubehalten?

+0

Wo ist der Code, den Sie gebucht haben, läuft/anspringen? – Gagravarr

+0

@Gagravarr Ich habe einen Ordner mit dem Namen "Dokumente", der die Regeleinstellungen erstellt und aktualisiert. Die Regel ist der Aktionsklasse zugeordnet. Die Aktionsklasse "CreateLink.java" enthält den obigen Code. – BlueStar

Antwort

1

display_Name bezieht sich hier auf den angezeigten Dateinamen.

display_Name ist nur der Name des Links und kann den verknüpften Objektnamen abweichen.

NodeService.createNode() kehrt ChildAssociationRef Klasse, die zwischen zwei Knoten (parent und child - link, die erstellt wurde) ein Kind-Beziehung darstellt. ChildAssociationRef.getChildRef() liefert linkNodeRef, zum Beispiel: workspace://SpacesStore/8dc27c51-cf23-4262-9431-f154edc913d0 (NodeRef.toString()). Wenn Sie den Namen des verknüpften Knotens ändern, ändert sich dessen NodeRef nicht.

Versuchen Sie, diese Umsetzung:

public NodeRef createLink(NodeRef parentRef, NodeRef toLinkRef, 
          boolean isDocument, String linkName){ 

    linkName = QName.createValidLocalName(linkName); 
    QName linkQName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, linkName); 

    Map<QName, Serializable> props = new HashMap<QName, Serializable>(); 
    props.put(ContentModel.PROP_NAME, linkName); 
    props.put(ContentModel.PROP_LINK_DESTINATION, toLinkRef); 

    final NodeRef linkRef = nodeService.createNode(
     parentRef, 
     ContentModel.ASSOC_CONTAINS, 
     linkQName, 
     isDocument ? ApplicationModel.TYPE_FILELINK : ApplicationModel.TYPE_FOLDERLINK, 
     props 
    ).getChildRef(); 
    return linkRef; 
} 

Sie documentLinkService.createDocumentLink(toLinkRef,parentRef) zu können, ist es einfach injizieren:

<property name="documentLinkService" ref="DocumentLinkService" /> 
Verwandte Themen