第一个问题:
我想以工作流程的任务编辑的形式实现文档的预览...我该怎么做?我尝试将document-details.xml
和document-details.ftl
调整为workflow-details.xml
和workflow-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
页面中看到带有签名的文档。这个页面的预览有所不同吗?我该如何实现此预览?
答案 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>
...
结果可能如下所示。
答案 3 :(得分:0)
这是一个处理多个文档并使用Web预览组件的简单解决方案:
在您的share-config-custom.xml覆盖packageItems字段中:
<field id="packageItems" set="items">
<control template="/com/yourdomain/components/form/controls/workflow/packageitems.ftl" />
</field>
控制模板(/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>