Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Недавно наш клиент попросил сделать так, чтобы при нажатии на иконку документа (в библиотеке документов) открывался сам документ. Говорят, в старых версиях так и было. Сейчас же нажатие на иконку вызывает выбор документа для последующих операций (ставится 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);
})();