понедельник, 29 февраля 2016 г.

SharePoint.Создать ярлык документа.

SharePoint позволяет создавать ярлыки к документам.
Ярлык выглядит так:



Чтобы возможность создавать ярлыки появилась - необходимо ее включить. Изначально она не работает. Чтобы ее включить необходимо перейти в настройки списка:

В разделе "Дополнительные параметры" выбрать:


После разрешения управлять типами контента списка, в настройках появится блок "Типы контента". Под ним есть ссылка на добавление типа контента к списку. Перейдите по ссылке "Добавить из существующих типов контента":



Из окна с доступными типами выберите "Связь с документом":




Перед созданием ярлыка необходимо знать путь к документу (из какой-то другой библиотеки) для которого мы создаем ярлык. Простой способ скопировать путь:





Теперь можно создать ярлык документа в другой библиотеке. Для этого перейдите в библиотеку где необходимо создать ярлык, с ленты инструментов создайте его:

Появится форма создания, заполните ее, нажмите "ОК":


А потом еще раз "ОК":


В библиотеке появится элемент как в самом начале статьи:


При клике произойдет переход по указанной ссылке. В нашей ссылке в url был установлен параметр "Web=1", значит офисный документ сразу откроется в Office Web Apps:


Что именно произошло? Была создана страница .aspx:

Работу по перенаправлению в ней выполняет элемент SharePoint:UrlRedirector.


суббота, 30 января 2016 г.

SharePoint 2013. Ошибка на странице "Общий доступ" (Share Access error)

При попытке выдать отдельные права я столкнулся со странным поведением popup окна:


Как видно, появилась вторая полоса прокрутки и пропала ссылка "дополнительно".
Из-за этого не удается выдать права на элемент. Как выяснилось, ошибка содержится в скрипте sharing.js, его надо немного поправить. Для этого его надо открыть и отредактировать. Найти его можно по адресу:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\template\layouts

Теперь необходимо заменить: k.load(g,"ID","FileRef","FileLeafRef","Client_Title")
На: k.load(g,"ID","FileRef","FileLeafRef","Client_Title","Title")

Проблема решена:

среда, 30 декабря 2015 г.

Сдан экзамен 70-492:Upgrade your MCPD: Web Developer 4 to MCSD: Web Applications

Вчера удалось сдать экзамен 70-492:Upgrade your MCPD: Web Developer 4 to MCSD: Web Applications. Вот описание на сайте Microsoft.

С января 2015 года все экзамены сдаются через Person VUE, а не Thomson Prometric. Разницы в общем-то я не увидел, за исключением другого ПО для сдачи. Оплатил картой 60 €, сдавал в СофтЛайне.

Сам экзамен поделен на 2 части. Каждая часть является сокращенной версией экзаменов:
Чтобы пройти экзамен надо по каждой части набрать не менее 700 баллов, что тяжелее стандартного варианта.

Для подготовки рекомендую:

Как мне показалось - вопросы стали заметно адекватнее, чем были раньше на экзаменах по программированию от Microsoft.

понедельник, 30 ноября 2015 г.

SharePoint. Ошибка WebDAV при открытии библиотеки в проводнике. Нет доступа.

На узле имеется библиотека документов с очень большим количеством файлов и папок.
При попытке открыть библиотеку в проводнике - получил ошибку:


Текст ошибки:
Нет доступа к \\server\DavWWWRoot\site\library. Возможно, у вас нет прав на использование этого сетевого ресурса. Обратитесь к администратору этого сервера для получения соответствующих прав доступа.
Присоединенное к системе устройство не работает.


На английском языке:
\\server\DavWWWRoot\site\library is not accessible. You might not have permission to use this network resource. Contact that administrator of this server to find out if you have access permissions.
A device attached to the system is not functioning.

Несмотря на то, что в тексте ошибки речь идёт о правах доступа, к реальности это не имеет никакого отношения. Когда библиотека документов открывается в проводнике windows, то используется протокол WebDAV. Ошибка происходит из-за ограничений на получение количества данных по этому протоколу. Настройки хранятся в реестре Windows. Чтобы исправить описанную выше ошибку, необходимо сделать следующие шаги:

  • Откройте редактор реестра - regedit.
  • Перейдите к ветке реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\
  • Найдите ключ реестра FileAttributesLimitInBytesfor
  • Если его нет, то создайте ключ FileAttributesLimitInBytesfor с типом DWORD.
  • Дальше необходимо изменить его значение. Для удобства измените систему исчисления. Изначально скорее всего будет отмечена шестнадцатеричная:

    Поменяйте на десятичную и задайте значение 50000000, это максимальное значение:
После этого необходимо перезапустить службу "Веб-клиент":
net stop webclientnet start webclient
После выполнения этих шагов библиотека открылась через проводник.
Проблема в том, что эти настройки делаются на клиенте. Вероятно потребуется их распространить через GPO.

пятница, 30 октября 2015 г.

SharePoint. Фильтрация пользователей в PeoplePicker


Изначально в выдачу поля типа "Пользователь" попадают все пользователи домена Active Directory и из доменов с которыми установлены доверительные отношения:



В моём случае мне необходимо было отфильтровать некоторых пользователей. Мне не нужны были пользователи без email адреса, к примеру служебные учётные записи. Т.е. не показывать пользователей с пустым или отсутствующим атрибутом mail из AD. Так же я хотел, чтобы PeoplePicker показывал мне пользователей как в адресной книге из Exchange. Адресная книга не отображает пользователей AD, у кого поле msExchHideFromAddressLists установлено в TRUE.

Поведение PeoplePicker'а можно настроить  через утилиту STSADM.EXE, которая находиться в файловой системе по адресу: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\BIN, так же можно использовать PowerShell.

Для того, чтобы выполнить описанные выше условия, необходимо выполнить следующую команду в STSADM.EXE:

stsadm -o setproperty -pn peoplepicker-searchadcustomfilter -pv "(&(mail=*) (!msExchHideFromAddressLists=TRUE))" -url http://server

Можно делать более сложные условия, например делать как в примере выше, но при этом всё равно отображать особенных пользователей. Их особенность в том, что у них атрибут extensionAttribute5 установлен в "Show":

stsadm -o setproperty -pn peoplepicker-searchadcustomfilter -pv "(|(&(mail=*)(!msExchHideFromAddressLists=TRUE))(extensionAttribute5=Show))" -url http://server

Чтобы просмотреть какой сейчас фильтр установлен - можно выполнить команду:

stsadm -o getproperty -url http://portal -pn peoplepicker-searchadcustomfilter

Для сброса фильтрации:

stsadm -o setproperty -pn peoplepicker-searchadcustomfilter -pv " "

Узнать подробнее про запросы к Active Directory можно по ссылке:

https://technet.microsoft.com/en-us/library/aa996205(EXCHG.65).aspx


SharePoint. Группировка по году создания.

У меня возникла необходимость группировать элементы списка именно по году создания. Если выбрать группировку по дате создания, то это не даст нужного результата, к сожалению.
Для достижения цели нам необходимо, для начала, создать вычисляемый столбец:


Назовите его "Год". И задайте значение поля "Формула" вот так: "=ГОД(Дата)" или "=ГОД(Создано)", если вы не создавали отдельного столбца для хранения даты.
Функция "Год()" может быть вам уже знакома из Microsoft Excel.
Важно отметить, что если у вас другой язык в SharePoint, то и формула должна быть написана на соответствующей языке.

После создания столбца "Год" - он будет заполнен значением года. Теперь необходимо создать новое представление и группировать элементы по полю "Год":





Результат должен быть как на картинке:



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

среда, 30 сентября 2015 г.

SharePoint. Ошибка при просмотре представлений списков.


Внезапно перестали отображаться представления списков. Вместо представления был текст:
"Ну удалось завершить эту операцию" и номер идентификатора взаимосвязи:
По номеру ошибки удалось найти текст исключения:
Error while executing web part: Microsoft.SharePoint.SPException: Не удалось завершить эту операцию.  Повторите попытку. ---> System.Runtime.InteropServices.COMException: Не удалось завершить эту операцию.  Повторите попытку.<nativehr>0x80004005</nativehr><nativestack></nativestack>
    at Microsoft.SharePoint.Library.SPRequestInternalClass.GetTimeZoneInfo(Int32 lcid, UInt16& pwTimeZoneID, Object& pvarBias, Object& pvarStandardDate, Object& pvarDaylightDate, String& pbstrDescription, String& pbstrKeyName)
    at Microsoft.SharePoint.Library.SPRequest.GetTimeZoneInfo(Int32 lcid, UInt16& pwTimeZoneID, Object& pvarBias, Object& pvarStandardDate, Object& pvarDaylightDate, String& pbstrDescription, String& pbstrKeyName)     --- End of inner exception stack trace ---
    at Microsoft.SharePoint....

...SPGlobal.HandleComException(COMException comEx)
    at Microsoft.SharePoint.Library.SPRequest.GetTimeZoneInfo(Int32 lcid, UInt16& pwTimeZoneID, Object& pvarBias, Object& pvarStandardDate, Object& pvarDaylightDate, String& pbstrDescription, String& pbstrKeyName)
    at Microsoft.SharePoint.SPTimeZone.EnsureTZData()
    at Microsoft.SharePoint.SPTimeZone.get_Information()
    at Microsoft.SharePoint.WebPartPages.XsltListViewWebPart.ModifyXsltArgumentList(ArgumentClassWrapper argList)
    at Microsoft.SharePoint.WebPartPages.DataFormWebPart.PrepareAndPerformTransform(Boolean bDeferExecuteTransform)

Из текста ошибки стало ясно, что есть какие-то проблемы с временной зоной.
Как оказалось, владелец узла сменил часовой пояс, пришлось выставить снова верный:

Это решило проблему.