вторник, апреля 09, 2013

Sharepoint и Windows Store - 3

Буквально через три дня после предыдущего поста на эту животрепещущую тему  обнаружилась прекрасная наводка от Mark Racley на решение проблемы использования CSOM-библиотек для подключения к удалённому серверу Sharepoint. Действительно, Windows Runtime Component с подключёнными SP-сборками выполняет подключение к ферме, запрашивает и отдаёт данные:

 image

Сборки использовались от Sharepoint 2013, 2010-е использовать невозможно из-за конфликта версий .NET (очень уж древней оказалась версия, использованная в SP-2010). Сам компонент стандартным образом подключается в проект для Windows Store:

image

Код для доступа к удалённым SP-узлам тот же, что в утилите SpfExplorer. Были некоторые сомнения относительно передачи и использования в CSOMWinRTComponent делегатов из SPExplorerCSOM Win8 (CS) (всё же, версии framework’ов, вроде бы, разные). Но всё обошлось, делегаты передаются и узлы деревьев благополучно рисуют.

Следующее возникшее сомнение – при выборе средств построения пользовательского интерфейса. Вариантов, собственно, два – C# + XAML или HTML + JS

При использовании C# нужно бороться с ужасной хренью в виде XAML с его жуткой моделью элементов интерфейса. "Стандарты" в виде студийных проектов предполагают использование MVVM с биндингом данных. В случае же "деревянных" данных, как в SP, слабо представляется, что и как там надо привязывать. Да и дерева там, собственно, нет, все советуют реализовывать его самостоятельно…

При использовании JS есть надежда, что борьбу с ним можно ослабить при использовании TypeScript, а строить дерево на HTML когда-то все умели… Правда, при внимательном рассмотрении выясняется, что и на HTML программы предлагается делать так же, как на XAML (через специфические атрибуты). Может, конечно, и "обычный" HTML пойдёт, но экспериментировать с этим как-то не сильно хочется…

В итоге, с учётом всех мнений, выбран вариант C# + XAML, дерево для вывода данных – собственного изготовления. После долгих кровопролитных сражений с XAML (о ходе и результатах сражений как-нибудь попозже в отдельных постах) получилась программка, пригодная для эксплуатации на планшете с использованием пальцетыканья. Нормально подключается к серверам SP-2010 и SP-2013 и выводит данные в виде дерева:

8. tree and buttons

Следующая, совсем отдельная задача – размещение программки в магазине Windows 8 (а другого официального способа распространения и нет, вроде бы). Здесь вовсе уж цирк – проверка в Студии на соответствие требованиям не проходит:

image

Собственно, уговорить разработчиков Sharepoint исправить ситуацию с использованием “не того” API (а список неправильных вызовов довольно длинный) я не могу, остаётся только удивляться, почему это некоторый вызов “не поддерживается для данного типа приложений”, если в программке он наверняка используется и вполне себе работает… Щас отправлю пакет, поглядим…

6 комментариев:

Станислав Выщепан комментирует...

можно распространять через system center в корпоративной среде.

но чтобы публиковать в маркете надо через rest api ходить в шарик

Konstantin M. Dyakov комментирует...

Я, вообще-то, в курсе, но пускай официально напишут, буду хранить как очередной анекдот от MS. А программку, если кому понадобится, отдам в исходниках. Хотя сильно сомневаюсь, учитывая, что планшеток на Win8 продано всего ничего...

P.S. Yасчёт использования REST - может, когда-то и осилю это дело, но сейчас у меня основное поле для работы - 2010-я версия, для неё уже есть много чего через CSOM, и прикручивать туда через известное место REST не сильно хочется.

Max Belugin комментирует...

"остаётся только удивляться, почему это некоторый вызов “не поддерживается для данного типа приложений”, если в программке он наверняка используется и вполне себе работает…"

Часть API запрещена из-за безопасности - чтобы гарантировать что разные приложения не вмешиваются в работу друг друга и системы

Konstantin M. Dyakov комментирует...

Называется "танец на собственных яйцах" - любимое занятие корпорации.
Так сильно, выходит, приложения нужны, если собственные библиотеки запрещают использовать.
Ну, и пускай, мне-то что, я жутких бабок в системку не грохал...

Max Belugin комментирует...

Дык библиотеки-то были написаны раньше чем win8 и не могут учитывать его модель безопасности. Ты бы почитал что-нибудь по моделям безопасности мобильных ОС. В iOS, насколько я знаю, то же самое. Если нужна полная совместимость - пиши win32 приложение.

Konstantin M. Dyakov комментирует...

Очень похоже, когда наши "политики" возражают: "...а вот в Америке - такая же хрень..." ;-)
Для iOS, вроде, проблемы пустого магазина и маленькой доли рынка не существует...
А win32-программка у меня есть (собственно, из неё и сделал эту), но пальцами, всё же, удобнее тыкать в метрошном интерфейсе...