2

有没有一种简单的方法来修改 dashlet 以定期自动重新加载自身?

我特别想到了“我的任务”dashlet - 我们正在使用汇总审核工作流程,因此任务可能会在创建然后被声明时一直来来去去。

用户可能会感到沮丧,因为他们一直点击结果已经被认领的任务 - 或者不得不记住不断重新加载他们的仪表板页面。我更希望仪表板按时间间隔刷新,因此它始终是最新的。

4

1 回答 1

4

为此,您需要向文件中的客户端类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,新方法允许您扩展现有组件而无需复制任何代码,这显然使升级更容易。

于 2012-11-30T20:04:33.587 回答