SharePoint : Как сделать иконку в библиотеке докментов кликабельной
Недавно наш клиент попросил сделать так, чтобы при нажатии на иконку документа (в библиотеке документов) открывался сам документ. Говорят, в старых версиях так и было. Сейчас же нажатие на иконку вызывает выбор документа для последующих операций (ставится checkbox).
Я нашел в сети несколько решений, но они все меня не устроили.
Официальный совет от Майкрософт.
https://support.microsoft.com/en-us/kb/2457975
Хм, надо менять xsl файл на сервере? У нас Office 365.
Одно из наиболее интересных решений нашлось здесь
https://spdociconlink.codeplex.com
(
Ключевой файл в решении тут :
С помощью CSR перекрывается поле DocIcon .
)
Недостатки решения:
- Не показывается дополнительная иконка, которая должна показывать статус Checkin/Checkout .
- В случае OWA, ссылка на документ вызывает скачивание вместо того, чтобы открыть документ в редакторе.
Сухой остаток, я пришел к решению, в котором я лично не вижу недостатков :). Плюс, данное решение по максиму использует встроенные функции.
function CustomIcon(ctx, field, listItem, listSchema) {
if (ctx.CurrentItem.FSObjType == '1') {
var ret = [];
ret.push(ComputedFieldWorker.DocIcon(ctx, field, listItem, listSchema));
}
else {
var ret = [];
ret.push("<a href=\"" + ctx.CurrentItem.FileRef);
ret.push("\" onmousedown=\"return VerifyHref(this,event,'");
ret.push(listSchema.DefaultItemOpen);
ret.push("','");
ret.push(listItem["HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon"]);
ret.push("','");
ret.push(listItem["serverurl.progid"]);
ret.push("')\" ");
ret.push(">");
ret.push(ComputedFieldWorker.DocIcon(ctx, field, listItem, listSchema));
ret.push("</a>");
}
return ret.join('');
}
(function () {
var overrideCtx = {};
overrideCtx.Templates = {};
overrideCtx.Templates.Fields = { 'DocIcon': { 'View': CustomIcon } };
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();