2016-10-28 7 views
0

フォルダ内のすべてのドキュメントのリンクをプログラムで作成する必要があります。 私は正常にリンクを作成するために管理し、私のファイルのリンク・ノードは次のようになります。ここAlfrescoのリンクをプログラムで更新する方法は?

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

DISPLAY_NAMEが表示されているファイル名を参照します。

ただし、元のファイルの名前を更新すると、更新されたファイルへの別のリンクが生成されます。この問題を回避し、特定のファイルへのリンクを1つだけ維持することは可能ですか?

+0

どこに/トリガされ実行されている投稿したコードはありますか? – Gagravarr

+0

@ Gagravarr私は「文書」と呼ばれるフォルダを作成しており、そこにルール設定を更新しています。ルールはアクションクラス 'CreateLink.java'に関連付けられています。アクションクラスには上記のコードが含まれています。 – BlueStar

答えて

1

display_Nameここに表示されるファイル名を参照してください。

display_Nameは単なるリンク名であり、リンクされたオブジェクト名と異なる場合があります。

NodeService.createNode()戻り2つのノード間の親子関係を表しChildAssociationRefクラス、(parentchild - 作成されたlinkを)。 ChildAssociationRef.getChildRef()戻り値linkNodeRefを返します。たとえば、workspace://SpacesStore/8dc27c51-cf23-4262-9431-f154edc913d0NodeRef.toString())です。リンクされたノードの名前を変更すると、そのノードのNodeRefは変更されません。

この実装を試してみてください:

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; 
} 

あなたもdocumentLinkService.createDocumentLink(toLinkRef,parentRef)を使用することができ、それを注入:

<property name="documentLinkService" ref="DocumentLinkService" /> 
関連する問題