在Alfresco中从属性页面动态更新文档模板

时间:2016-05-06 11:46:04

标签: alfresco-share

我有一个文档模板,就像附加的屏幕截图一样。现在我的要求是当我将其在alfresco网站上传时,我想动态更新该文档的某些值。我将通过节点模板或上传创建该文档。我想从文档属性页面提供这些值。 任何人都可以帮助我,我怎样才能做到这一点。

我尝试使用java脚本,但我遇到了一些问题。所以我想使用Alfresco CMIS API。但我在alfresco cmis中相当新。所以任何人都可以告诉我可以用于此任务的更好方法。

提前致谢。enter image description here

1 个答案:

答案 0 :(得分:2)

我认为你应该通过Rule

触发自定义操作

当有人更新节点时(例如通过编辑属性),您的操作将被触发,您将能够:

  • 获取节点的内容
  • 获取节点的属性
  • 使用alfresco提供的apache poi库(我的猜测是你使用word文档)来查找你的参数,并用你在属性节点中找到的值替换它们。

Here是了解如何创建自定义操作的优秀教程。

注意:如果您想第二次更改属性(例如,使用版本控制),则可能必须保留原始模板文档。

编辑(请参阅下面的讨论):

我假设您知道如何在露天使用规则:http://docs.alfresco.com/5.0/tasks/library-folder-rules-define.html

  1. 声明要分配给规则的新操作。当删除或更新Excel时,必须触发此操作

    1. 创建实现您需求的操作:

      public class MyAction extends ActionExecuterAbstractBase {
      ...
      
          @Override
          protected void executeImpl(final Action arg0, final NodeRef arg1) {
              // your code here
          }
      ....
      }
      

      此操作将:

      1. 获取nodeRef参数(即excel文件)并加载文件

        ...
        Inputstream inputstream = getFileFolderService().getReader(arg1).getContentInputStream();
        ...
        NPOIFSFileSystem fs = null;
        HSSFWorkbook workbook = null;
        try {
        fs = new NPOIFSFileSystem(inputstream);
        workbook = new HSSFWorkbook(fs.getRoot(), true);
        //get your data with POI
        
      2. 对于Excel的每一行:

        1. 制作模板的副本:

          • 找到它:

            getSearchService().query(searchParameters)
            
          • 复制它:

            getFileFolderService().copy(sourceNodeRef, targetParentRef, newName)
            
        2. 对新单词内容进行转换(查找出现并替换为poi库)。
        3. 更新新文件的内容:

          ContentWriter writerDoc = getContentService().getWriter(document.getNodeRef(), ContentModel.PROP_CONTENT,
                  true);
          writerDoc.putContent(file/inputStream);
          
    2. 在您的上下文文件中,声明您的操作:

      <bean id="my-action" class="x.y.z.MyAction" parent="action-executer">
          <property name="searchService">
              <ref bean="searchService" />
          </property>
          <property name="nodeService">
              <ref bean="nodeService" />
          </property>
          <property name="contentService">
              <ref bean="contentService" />
          </property>
          <property name="fileFolderService">
              <ref bean="FileFolderService" />
          </property>
          ....
      </bean>
      
  2. 在“共享”中,使用您创建的操作为文件夹指定规则。