有没有一种简单的方法来修改 dashlet 以定期自动重新加载自身?
我特别想到了“我的任务”dashlet - 我们正在使用汇总审核工作流程,因此任务可能会在创建然后被声明时一直来来去去。
用户可能会感到沮丧,因为他们一直点击结果已经被认领的任务 - 或者不得不记住不断重新加载他们的仪表板页面。我更希望仪表板按时间间隔刷新,因此它始终是最新的。
有没有一种简单的方法来修改 dashlet 以定期自动重新加载自身?
我特别想到了“我的任务”dashlet - 我们正在使用汇总审核工作流程,因此任务可能会在创建然后被声明时一直来来去去。
用户可能会感到沮丧,因为他们一直点击结果已经被认领的任务 - 或者不得不记住不断重新加载他们的仪表板页面。我更希望仪表板按时间间隔刷新,因此它始终是最新的。
为此,您需要向文件中的客户端类Alfresco.dashlet.MyTasks
(文档、源代码)添加新功能components/dashlets/my-tasks.get.js
。首先,您需要向指定为 中的第二个参数的原型扩展添加一个新方法YAHOO.lang.augmentObject() call
,例如
...
}, // end of last OOTB function - add a comment here
// begin changes
reloadData: function MyTasks_onReady()
{
this.widgets.alfrescoDataTable.loadDataTable(
this.options.filters[this.widgets.filterMenuButton.value]
);
}
// end changes
});
})();
这不是理想的开发环境,您可以直接在 Share webapp 中修改 JS 文件,尽管您还需要更新相应的-min.js
文件。
完成此操作后,通过在浏览器的 JavaScript 控制台中运行以下行来检查它是否有效
Alfresco.util.ComponentManager.findFirst("Alfresco.dashlet.MyTasks").reloadData();
如果可行,那么您可以在 dashlet Web 脚本中将您的新方法连接到标题栏操作(有关更多背景信息,请参阅我的DevCon 演示文稿)。该方法取决于您使用的是 v4.2 还是以前的版本,但如果是后者,则需要在 dashlet 的 Freemarker 文件中添加一些代码my-tasks.get.html.ftl
(在 下WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets
)。
在该文件中,您应该会在标签中看到一些 JavaScript 代码<script>
,这会设置客户端类和一些实用程序类的实例,您可以将其内容替换为以下内容,以添加您的自定义标题栏操作。
(function()
{
var dashlet = new Alfresco.dashlet.MyTasks("${jsid}").setOptions(
{
hiddenTaskTypes: [<#list hiddenTaskTypes as type>"${type}"<#if type_has_next>, </#if></#list>],
maxItems: ${maxItems!"50"},
filters:
{<#list filters as filter>
"${filter.type?js_string}": "${filter.parameters?js_string}"<#if filter_has_next>,</#if>
</#list>}
}).setMessages(${messages});
new Alfresco.widget.DashletResizer("${id}", "${instance.object.id}");
var refreshDashletEvent = new YAHOO.util.CustomEvent("onDashletRefresh");
refreshDashletEvent.subscribe(dashlet.reloadData, dashlet, true);
new Alfresco.widget.DashletTitleBarActions("${args.htmlid}").setOptions(
{
actions:
[
{
cssClass: "refresh",
eventOnClick: refreshDashletEvent,
tooltip: "${msg("dashlet.refresh.tooltip")?js_string}"
},
{
cssClass: "help",
bubbleOnClick:
{
message: "${msg("dashlet.help")?js_string}"
},
tooltip: "${msg("dashlet.help.tooltip")?js_string}"
}
]
});
})();
您需要为指定的类名添加一些样式,在 dashlet 的 CSS 文件my-tasks.css
中,例如以下
.my-tasks .titleBarActions .refresh
{
display: none;
background-image: url('refresh-icon.png');
}
图标文件(这里是您可以重复使用的)必须与 CSS 文件位于同一目录中。
最后,您需要定义dashlet.refresh.tooltop
用于标题栏操作工具提示的标签。您可以在 dashlet Web 脚本的.properties
文件中执行此操作。
对于类似的示例,请查看我的Train Times dashlet的源代码,它具有刷新标题栏操作。
在某些方面,实际上定义自己的 dashlet 比扩展 Alfresco 提供的 dashlet 更容易,但如果您可以选择使用 4.2.x,新方法允许您扩展现有组件而无需复制任何代码,这显然使升级更容易。