вторник, 14 октября 2014 г.

Документирую SharePoint JSGrid

Тружусь сейчас над TypeScript-дефинишенами для JsGrid. Работа долгая и тяжкая: для каждой-каждой функции в JS файле из 24.5k строк нужно определить типы параметров и возвращаемого значения, понять что эта функция делает, и все это описать. Потратил уже несколько дней, по 5+ часов, и пока еще только в начале пути... Между прочим, даже главный шарепойнтовский файл, SP.debug.js, имеет меньший размер - ~21k строк...

Скриншот процесса:


Странно, но JsGrid - совсем неплох!

JsGrid - это один из немногих контролов в SharePoint, который мне действительно нравится. Контрол сделан очень добротно, классы тщательно структурированы, методы названы грамотно. Совсем не похоже на привычную SharePoint-овскую макаронную фабрику... :)

Более того, сам контрол в использовании - ведь очень неплохой. Excel-подобный client-side редактор, с асинхронным сохранением данных, валидацией, undo, сложными редакторами значений и кучей других фич. Прекрасно расширяемый, заточенный на работу с SharePoint-типами данных, и использующийся по умолчанию для отображения списков в режиме Quick Edit...



Да, я знаю, сейчас есть замечательные вещи типа handsontable и SlickGrid, и у них явно попроще API - при сравнимом наборе фич, но в SharePoint столько тонкостей... пейджинг, сохранение, форматы данных, всё это... Поэтому для SharePoint-данных, пожалуй, я всё же предпочту нативный JsGrid! :)

Кроме того, поскольку JsGrid используется для Quick Edit режима отображения списков, то неплохо бы уметь с ним работать, потому как CSR не полностью все еще интегрирован с JsGrid, и умеет накладывать кастомизации только на режим просмотра, но не на режим редактирования.

Проблема документации


Ну а чтобы с чем-то нормально работать, нужна документация, правильно? А документации, как всегда, и нету.

На MSDN есть кое-что по одноименному серверному контролу, но поверьте, это маааленькая вершинка айсберга. JsGrid на самом деле полностью клиентский, и все что делает серверный контрол, это просто рендерит js-код. Получается, что лишь небольшая часть API доступна со стороны сервера, и всё то же самое можно сделать на клиенте. Естественно, что если решение полностью клиентское, оно более универсально, т.к. сразу же без сомнений работает в O365.

Ради справедливости, стоит отметить, что кое-какая информация именно по клиентскому JsGrid всё же есть в интернетах:
  1. Custom Field Type for SharePoint 2013 - Custom "Quick Edit" mode rendering, и продолжение (автор Антон Вишняков)
  2. SharePoint 2013 Quick Edit JavaScript Validation
  3. Моя статья Master-detail with JsGrid
Кстати, если кто-то знает другие хорошие статьи, буду благодарен если скинете в комментарии.

Но в любом случае, информации в статьях очень мало, она путанна и разрозненна. Полномасштабной документации не хватает.

И вот TypeScript-дефинишены - это по большому счету как раз и есть документация:
  1. Во-первых, по дефинишенам можно сгенерить reference-документацию наподобие как на MSDN.
  2. Во-вторых, интеллисенс, проверка типов и inline-документация - это ведь даже лучше, чем reference! :)

Заключение


Всё-таки встречаются порой в SharePoint hidden gem'ы. И у меня такое ощущение, что JsGrid - один из них.

1 комментарий:

  1. Добрый день. Не поможете разобраться с представлением Ганта в SP2013? Похоже, что оно реализовано через jsgrid и css-ом заморозить колонку Имени задачи не получится, а очень хочется. Есть способ сделать это через jsgrid? (там уже закреплены хидеры и первая колонка (но не Title), но я не могу понять, как это реализовано). Спасибо!

    ОтветитьУдалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.