如何修改dashlets自动刷新?

时间:2012-11-29 20:54:16

标签: yui alfresco alfresco-share dashlet

是否有一种简单的方法可以修改dashlet以定期自动重新加载?

我特别想到“我的任务”小面板 - 我们正在使用合并的审核工作流程,因此任务可能会随着创建然后被声明而来来去去。

对于用户来说,继续点击已经声明的任务 - 或者必须记住继续重新加载他们的仪表板页面可能会令人沮丧。我更喜欢小版本按照定时间隔刷新,所以它总是合理的更新。

1 个答案:

答案 0 :(得分:4)

要执行此操作,您需要向文件Alfresco.dashlet.MyTasks中的客户端类components/dashlets/my-tasks.get.jsdocssource)添加新功能。首先,您需要将新方法添加到指定为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网页脚本中将新方法连接到标题栏操作(请参阅我的DevCon presentation以获取更多背景信息)。该方法取决于您使用的是v4.2还是以前的版本,但如果是后者,则需要在dashlet的Freemarker文件my-tasks.get.html.ftl中添加一些代码(WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets下)。

在该文件中,您应该在<script>标记内看到一些JavaScript代码,这会设置客户端类的实例和一些实用程序类,其内容可以替换使用以下内容,添加自定义标题栏操作。

(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');
}

图标文件(您可以重复使用的here is one)必须与CSS文件位于同一目录中。

最后,您需要定义用于标题栏操作的工具提示的标签dashlet.refresh.tooltop。您可以在dashlet web脚本的.properties文件中执行此操作。

对于类似的示例,请查看我的Train Times dashlet的来源,其中包含刷新标题栏操作。

在某些方面,定义自己的小面板实际上比扩展Alfresco提供的小面板更容易,但如果您可以选择使用4.2.x,则新方法允许您扩展现有组件而不重复任何代码,这显然使升级更容易。