任务编辑文档预览组件Alfresco

时间:2016-03-20 18:09:40

标签: alfresco alfresco-share pdf.js alfresco-webscripts

第一个问题:

我想以工作流程的任务编辑的形式实现文档的预览...我该怎么做?我尝试将document-details.xmldocument-details.ftl调整为workflow-details.xmlworkflow-details.ftl但不起作用。我尝试将具有文档详细信息文件的Web预览的组件复制到工作流程详细信息中。有任何暗示要做到这一点吗?

我在 workflow-details.ftl

中有此功能
<#include "include/alfresco-template.ftl" />
<@templateHeader>
   <@script type="text/javascript" src="${url.context}/res/modules/documentlibrary/doclib-actions.js" group="document-details"/>
   <@link rel="stylesheet" type="text/css" href="${url.context}/res/components/document-details/document-details-panel.css" group="document-details"/>
   <@link rel="stylesheet" type="text/css" href="${url.context}/res/components/workflow/task-edit-header.css" group="workflow-details"/>
   <@templateHtmlEditorAssets />
</@>


<@templateBody>
   <@markup id="alf-hd">
   <div id="alf-hd">
      <@region scope="global" id="share-header" chromeless="true"/>
      <@region id="title" scope="template"/>
      <#if page.url.args.nodeRef??>
         <@region id="path" scope="template"/>
      </#if>
   </div>
   </@>
   <@markup id="bd">
   <div id="bd">
      <div class="share-form">
         <@region id="data-header" scope="page" />
         <div class="yui-gc">
            <div class="yui-u first">
                 <#if (config.scoped['WorkflowDetails']['workflow-details'].getChildValue('display-web-preview') == "true")>
                    <@region id="web-preview" scope="template"/>
                 </#if>
            </div>
         </div>
         <@region id="data-form" scope="page" />
         <@region id="data-actions" scope="page" />
      </div>
   </div>
   </@>
</@>

<@templateFooter>
   <@markup id="alf-ft">
   <div id="alf-ft">
      <@region id="footer" scope="global"/>
      <@region id="data-loader" scope="page" />
   </div>
   </@>
</@>

在workflow-details.xml中,我添加了这个组件:

 <component>
         <region-id>web-preview</region-id>
         <sub-components>
            <sub-component id="default">
               <evaluations>
                  <evaluation>
                     <evaluators>
                        <evaluator type="config.component.evaluator">
                           <params>
                              <element>WorkflowDetails/workflow-details/display-web-preview</element>
                           </params>
                        </evaluator>
                     </evaluators>
                     <url>/components/preview/web-preview</url>
                     <properties>
                        <nodeRef>{nodeRef}</nodeRef>
                        <api>api</api>
                        <proxy>alfresco</proxy>
                        <dependencyGroup>workflow-details</dependencyGroup>
                     </properties>
                  </evaluation>
               </evaluations>
            </sub-component>
         </sub-components>
      </component>

这不会显示网络预览,只会创建:

<div id="template_x002e_web-preview_x002e_workflow-details">
<div id="template_x002e_web-preview_x002e_workflow-details_x0023_default"> </div>
</div>

我的错误是什么?

第二个问题:

Aikau页面的预览中,我得到:Warning: unimplemented annotation type: Widget signature在Mozilla Firefox的firebug的控制台中,文档显示时没有数字签名...但是,例如,如果我上传了带有数字签名的文档,我可以在文档的document-details页面中看到带有签名的文档。这个页面的预览有所不同吗?我该如何实现此预览?

4 个答案:

答案 0 :(得分:4)

您遇到的主要问题是,在查看工作流任务时,您没有任何nodeRef请求参数(这会映射到分配给<nodeRef>元素的{nodeRef}标记Web预览组件。因此,Web预览WebScript将没有要呈现的节点。

您要么需要进行自定义,以便在查看工作流任务时使用附加文件的nodeRef作为请求参数,或者使用您自己的WebScript(Web预览WebScript除外)来访问要预览的文档的nodeRef。

此处要考虑的其他一些事情是,完全可以将多个文档分配给工作流,因此您需要处理该方案(即预览哪个文档,或者如何预览所有文件。)

我不认为这将是一个简单的定制。

答案 1 :(得分:3)

使用集成在share(pdf.js)中的javascript预览器可能更容易。如果直接使用javascript库,打开预览应该不难。

项目的官方网站上有一些例子:pdf.js

您可以使用共享webscript来初始化javascript,其中包含附加到工作流程的文档的URL列表。如果附加的文件不是pdf,则需要使用其pdf格式。

答案 2 :(得分:0)

供将来参考。你可以这样做(例子):

创建共享扩展程序并将以下容器添加到/src/main/amp/config/alfresco/templates/org/alfresco/workflow-details.ftl

<div class="yui-gc">
    <div class="yui-u first">
    <#if (config.scoped['DocumentDetails']['document-details'].getChildValue('display-web-preview') == "true")>
        <@region id="web-preview" scope="template"/>
    </#if>
    </div>
</div>

同时添加与@templateHeader中相同的document-details.ftl。您的workflow-details.ftl将如下所示:

<#include "include/alfresco-template.ftl" />
<@templateHeader>
   <@script type="text/javascript" src="${url.context}/res/modules/documentlibrary/doclib-actions.js" group="document-details"/>
   <@link rel="stylesheet" type="text/css" href="${url.context}/res/components/document-details/document-details-panel.css" group="document-details"/>
   <@templateHtmlEditorAssets />
</@>

<@templateBody>
   <@markup id="alf-hd">
   <div id="alf-hd">
      <@region scope="global" id="share-header" chromeless="true"/>
      <@region id="title" scope="template"/>
      <#if page.url.args.nodeRef??>
         <@region id="path" scope="template"/>
      </#if>
   </div>
   </@>
   <@markup id="bd">
   <div id="bd">
      <div class="share-form">
         <@region id="data-header" scope="page" />
         <@region id="data-form" scope="page" />
         <div class="yui-gc">
            <div class="yui-u first">
                <#if (config.scoped['DocumentDetails']['document-details'].getChildValue('display-web-preview') == "true")>
                <@region id="web-preview" scope="template"/>
                </#if>
            </div>
         </div>
         <@region id="data-actions" scope="page" />
      </div>
   </div>
   </@>
</@>

<@templateFooter>
   <@markup id="alf-ft">
   <div id="alf-ft">
      <@region id="footer" scope="global"/>
      <@region id="data-loader" scope="page" />
   </div>
   </@>
</@>

将WebPreview组件添加到\src\main\amp\config\alfresco\site-data\template-instances\workflow-details.xml

<!-- WebPreview -->
<component>
 <region-id>web-preview</region-id>
 <sub-components>
    <sub-component id="default">
       <evaluations>
          <evaluation>
             <evaluators>
                <evaluator type="config.component.evaluator">
                   <params>
                      <element>DocumentDetails/document-details/display-web-preview</element>
                   </params>
                </evaluator>
             </evaluators>
             <url>/components/preview/web-preview</url>
             <properties>
                <nodeRef>{nodeRef}</nodeRef>
                <api>api</api>
                <proxy>alfresco</proxy>
                <dependencyGroup>document-details</dependencyGroup>
             </properties>
          </evaluation>
       </evaluations>
    </sub-component>
 </sub-components>
</component>      

您的workflow-details.xml将如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<template-instance>
   <template-type>org/alfresco/workflow-details</template-type>
   <properties>
      <pageFamily>documentlibrary</pageFamily>
   </properties>
   <components>

      <!-- Site Navigation -->
      <component>
         <region-id>navigation</region-id>
         <sub-components>
            <sub-component id="default">
               <evaluations>
                  <!-- if referred from my tasks page: Task toolbar -->
                  <evaluation id="tasks">
                     <evaluators>
                        <evaluator type="equals.component.evaluator">
                           <params>
                              <referrer>{referrer}</referrer>
                              <tasks>tasks</tasks>
                           </params>
                        </evaluator>
                     </evaluators>
                     <url>/components/workflow/task-toolbar</url>
                  </evaluation>
                  <!-- if referred from my workflows page: Workflows toolbar -->
                  <evaluation id="workflows">
                     <evaluators>
                        <evaluator type="equals.component.evaluator">
                           <params>
                              <referrer>{referrer}</referrer>
                              <workflows>workflows</workflows>
                           </params>
                        </evaluator>
                     </evaluators>
                     <url>/components/workflow/workflow-toolbar</url>
                  </evaluation>
                  <!-- if in site: Site navigation -->
                  <evaluation id="site">
                     <evaluators>
                        <evaluator type="site.component.evaluator"/>
                     </evaluators>
                     <url>/components/navigation/collaboration-navigation</url>
                  </evaluation>
               </evaluations>
            </sub-component>
         </sub-components>
      </component>

       <!-- WebPreview -->
      <component>
         <region-id>web-preview</region-id>
         <sub-components>
            <sub-component id="default">
               <evaluations>
                  <evaluation>
                     <evaluators>
                        <evaluator type="config.component.evaluator">
                           <params>
                              <element>DocumentDetails/document-details/display-web-preview</element>
                           </params>
                        </evaluator>
                     </evaluators>
                     <url>/components/preview/web-preview</url>
                     <properties>
                        <nodeRef>{nodeRef}</nodeRef>
                        <api>api</api>
                        <proxy>alfresco</proxy>
                        <dependencyGroup>document-details</dependencyGroup>
                     </properties>
                  </evaluation>
               </evaluations>
            </sub-component>
         </sub-components>
      </component>      

      <!-- Path -->
      <component>
         <region-id>path</region-id>
         <sub-components>
            <sub-component id="default">
               <evaluations>
                  <!-- if in site: Site title -->
                  <evaluation id="site">
                     <evaluators>
                        <evaluator type="site.component.evaluator"/>
                     </evaluators>
                     <url>/components/document-details/path</url>
                  </evaluation>
                  <!-- otherwise: Repository title -->
                  <evaluation id="repo">
                     <url>/components/document-details/repo/path</url>
                  </evaluation>
               </evaluations>
            </sub-component>
         </sub-components>
      </component>

   </components>
</template-instance>

如果要将组件放在任意区域,可能需要使用JavaScript,例如:

...
var container = YAHOO.util.Dom.get('user-list');
var web_preview = YAHOO.util.Dom.get('template_x002e_web-preview_x002e_workflow-details_x0023_default');
YAHOO.util.Dom.insertAfter(web_preview, container);
...

包含ID==user-list userdetails.ftl的容器我添加到share-config-custom.xml的{​​{1}}内容如下:

... 
<field id="mswf:userDetails" set="userDetails" label="...">
    <control template="/org/alfresco/components/form/controls/workflow/userdetails.ftl" />
</field>
...

结果可能如下所示。

enter image description here

答案 3 :(得分:0)

这是一个处理多个文档并使用Web预览组件的简单解决方案:

  1. 在您的share-config-custom.xml覆盖packageItems字段中:

    <field id="packageItems" set="items">
        <control template="/com/yourdomain/components/form/controls/workflow/packageitems.ftl" />
    </field>
    
  2. 控制模板(/com/yourdomain/components/form/controls/workflow/packageitems.ftl):

    <#include "/org/alfresco/components/form/controls/workflow/packageitems.ftl" />
    <#assign el>${controlId}-wp</#assign>
    <#assign dependencyGroup="web-preview">
    <#include "/org/alfresco/components/preview/include/web-preview-css-dependencies.lib.ftl" />
    <#include "/org/alfresco/components/preview/include/web-preview-js-dependencies.lib.ftl" />
    
    <div class="yui-g" id="${el}"></div>
    <script type="text/javascript">//<![CDATA[
    (function(){
        var nodeRefs = ("${field.value?html}" || "").split(',');
        for (var ni = 0; ni < nodeRefs.length; ni++) {
            Alfresco.util.loadWebscript({
              url: Alfresco.constants.URL_SERVICECONTEXT + "components/preview/web-preview",
              properties: { nodeRef: "${field.value?html}", htmlid: "${el}-preview-" + ni},
              target: "${el}"
            }); 
        }
    })();
    //]]></script>