Как изменить дашлеты для автоматического обновления?

Есть ли простой способ изменить дашлет для автоматической периодической перезагрузки?

Я особенно думаю о дашлете "Мои задачи" - мы используем объединенные рабочие процессы проверки, поэтому задачи могут приходить и уходить все время по мере их создания, а затем запрашиваться.

Пользователям может быть неприятно продолжать нажимать на задачи, которые, как оказалось, уже были заявлены - или не забывать постоянно перезагружать свою страницу панели инструментов. Я бы предпочел, чтобы дашлет обновлялся через определенный интервал времени, поэтому он всегда достаточно актуален.

1 ответ

Решение

Для этого вам нужно будет добавить новую возможность в класс на стороне клиента. 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
   });
})();

Это не идеальная среда разработки, вы можете изменить файл JS непосредственно в веб-приложении Share, хотя вам также потребуется обновить соответствующий -min.js файл.

Как только вы это сделаете, убедитесь, что это работает, запустив следующую строку в консоли JavaScript вашего браузера

Alfresco.util.ComponentManager.findFirst("Alfresco.dashlet.MyTasks").reloadData();

Если это работает, то вы можете подключить свой новый метод к действию в строке заголовка (дополнительную информацию см. В моей презентации DevCon) в веб-скрипте дашлета. Метод зависит от того, используете ли вы v4.2 или предыдущую версию, но если это последняя версия, вам нужно добавить некоторый код в файл Freemarker дашлета. my-tasks.get.html.ftl (под WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets).

В этом файле вы должны увидеть некоторый код JavaScript внутри <script> tag, это устанавливает экземпляр класса на стороне клиента и некоторые служебные классы, содержимое которых вы можете заменить на следующее, чтобы добавить свое собственное действие в строке заголовка.

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

Вам нужно будет добавить несколько стилей для указанного имени класса в CSS-файле дашлета my-tasks.css такие как следующие

.my-tasks .titleBarActions .refresh
{
    display: none;
    background-image: url('refresh-icon.png');
}

Файл значка ( здесь вы можете использовать повторно) должен находиться в том же каталоге, что и файл CSS.

Наконец, вам нужно определить метку dashlet.refresh.tooltop используется для всплывающей подсказки в строке заголовка. Вы можете сделать это в веб-скрипте дашлета .properties файл.

Для аналогичного примера посмотрите источник моего дашлета Train Times, который имеет функцию обновления строки заголовка.

В некотором смысле на самом деле проще определить свои собственные дашлеты, чем расширять предоставляемые Alfresco, но если у вас есть возможность использовать 4.2.x, новый метод позволяет расширять существующие компоненты без дублирования какого-либо кода, что очевидно, делает обновления намного проще.

Другие вопросы по тегам