Как изменить дашлеты для автоматического обновления?
Есть ли простой способ изменить дашлет для автоматической периодической перезагрузки?
Я особенно думаю о дашлете "Мои задачи" - мы используем объединенные рабочие процессы проверки, поэтому задачи могут приходить и уходить все время по мере их создания, а затем запрашиваться.
Пользователям может быть неприятно продолжать нажимать на задачи, которые, как оказалось, уже были заявлены - или не забывать постоянно перезагружать свою страницу панели инструментов. Я бы предпочел, чтобы дашлет обновлялся через определенный интервал времени, поэтому он всегда достаточно актуален.
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, новый метод позволяет расширять существующие компоненты без дублирования какого-либо кода, что очевидно, делает обновления намного проще.