https://fractalprovisioner.codeplex.com
Блог об эффективной (в первую очередь высокоуровневой) разработке решений на платформе SharePoint. Если у вас вопрос не по теме поста, напишите в скайп asapozhkov.
четверг, 5 ноября 2015 г.
Fractal Provisioner для создания ваших пакетов
https://fractalprovisioner.codeplex.com
суббота, 2 мая 2015 г.
Упрощение Single Sign On в Office 365
На просторах Интернета можно найти множество инструкций по настройке Single Sign On в Office 365. Вот один из хороших примеров:
https://technet.microsoft.com/en-us/magazine/jj631606.aspx
Но почти все они скрывают одну неприятную правду: при обычном употреблении пользователю все же приходится вводить имя пользователя, или как минимум любое имя пользователя но с корректным доменом, т.к. именно по домену страница перенаправляет автоматически пользователя на соответствующий сервис федерации, развернутый в инфраструктуре компании.
Я считаю, это не очень удобно для пользователя, и к счастью, я нашел обходной путь для этого.
Мы можем указать определенный Url в качестве домашней страницы браузера с помощью групповой политики. Например, если мы хотим направить пользователя на узел SharePoint, как https://sapozhkovtest.sharepoint.com, а суффикс upn (домен пользователя) sapozhkov.net, тогда нам нужно указать следующий адрес в качестве страницы по умолчанию с помощью групповой политики:
В этом случае пользователь будет автоматически перенаправлен на корпоративный сервис федерации, затем обратно на страницу входа, а затем, наконец, на адрес SharePoint.
Проблема: учетные записи не синхронизируются из AD в SharePoint multitenant User Profile Service Application
Столкнулся с такой проблемой на проекте.
В AD у заказчика вложенные OU для каждой дочерней организации:
Domain
Customers
Customer1
Users
User1
User2
Customer2
Users
User3
User4
SharePoint build: 15.0.4693.1000
Profile service создан с использованием ключа -PartitionMode, т.е. база данных поделена на разделы. Каждая организация(SiteSubscription) имеет свой раздел.
Специальная команда PowerShell для создания раздела запущена для каждой организации:
Add-SPSiteSubscriptionProfileConfig -id <SiteSubscription> -SynchronizationOU ‘Customer1’
Коннектор синхронизации создан и OU “Customers” выбран.
Полная синхронизация выполняется без единой ошибки, в центре администрирования все выглядит обещающе:
MOSS
Stage SharePoint Server import
Additions 3311
Updates 46
Unchanged 0
.............................
Successes 3357
Failures 0
Start Time 4/30/2015 11:00:03 PM
End Time 4/30/2015 11:01:58 PM
Несмотря на это ни один профиль не создан. ULS чист, как и журнал приложений и miisclient. Абсолютно.
Я начал подозревать несколько вероятных источников проблемы, и решил провести несколько экспериментов. И хотя это заняло приличное время, я думаю, оно не потрачено зря, т.к. теперь Вам не придется тратить время. Просто можете ознакомиться с описанием экспериментов, сделанных мной.
Тест 1. Грубая попытка
Моими первыми подозрениями были:
- SharePoint проверяет только название непосредственно родительского OU, когда распределяет пользователей по разделам.
- SharePoint сравнивает OU, указанное для SiteSubscription с OU, отдельно отмеченное при настройке коннектора синхронизации
- После того, как учетная запись импортирована в SharePoint но не приписана к определенному разделу, при следующих синхронизациях в любом случае учетная запись будет игнорирована, т.к. на стороне AD не произошло изменений учетной записи, т.е. нечего реплицировать.
Я сделал 2 изменения:
- Удалил коннектор и создал новый, выделив отдельно OU каждой организации. Т.е. я отметил “Customer1”, “Customer2”, и т.д., вместо того, чтобы выделить один родительский “Customers” целиком, как я делал в прошлый раз, когда синхронизация провалилась.
- Выполнил следующую PowerShell команду для привязки прямого родительского OU с пользователями:
Set-SPSiteSubscriptionProfileConfig -id <SiteSubscription> -SynchronizationOU ‘Users’
Затем я запустил полную синхронизацию.
В результате я получил всех пользователей из всех OU “Users” в одном разделе (к которому я и применил команду).
Чтобы просмотреть количество профилей, привязанных к каждому SiteSubscription, я использовал следующий PowerShell скрипт:
Foreach ( $sub in ( Get-SPSiteSubscription ) )
{
$sub
$serviceContext = Get-SPServiceContext -SiteSubscription $sub
$profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager( $serviceContext );
$profileManager.Count
}
Вывод:
SharePoint сравнивает только название прямого родителя при фильтрации пользователей.
Тест 2. Поиск корректной привязки
Теперь я решил найти способ привязки точно заданного OU “Users” к кажому подписчику. Т.е. каждому SiteSubscription должен быть назначен определенный OU “Users”.
Но для начала мне нужно было удалить профили, созданые на предыдущем этапе:
Remove-SPSiteSubscriptionProfileConfig -id <SiteSubscription>
Далее я начал применять различные формы указания на OU:
'Customer1\Users'
'Customer1/Users'
'Customer1*'
'Users,OU=Customer1’
'DomainName/Customers/Customer1/Users'
'*Customer1'
Например,
Set-SPSiteSubscriptionProfileConfig -id <SiteSubscription> -SynchronizationOU 'Customer1\Users’
Я указал данные значения для разных подписчиков и снова запустил полную синхронизацию.
Ни одного профиля не было создано.
Вывод (предварительный):
Единственный известный способ связывания OU с SiteSubscription это указывать атрибут “name” OU. Например, “Users”.
Тест 3. Очистка
Да, эта правда была не из тех, которую я предпочитал, но меня никто не спросил.
Раз я уже начал эксперименты, я решил получить чуть больше результатов.
Вот очередное подозрение, которое я захотел развеять:
Возможно, пользователи не были созданы в предыдущем тесте (даже с любыми мыслимыми формулировками OU) по простой причине: Они не были изменены и нет изменений, которые требуется реплицировать в профили SharePoint.
Я снова связал одного из подписчиков с OU “Users”:
Set-SPSiteSubscriptionProfileConfig -id <SiteSubscription> -SynchronizationOU ‘Users’
В результате после запуска полной синхронизации все профили были снова созданы в одном разделе.
Вывод:
Нет необходимости заново создавать коннектор при изменении привязки OU. Достаточно запустить полную синхронизацию.
Тест 4. Что отмечать
Единственное, что осталось выяснить: есть ли зависимость от уровня OU, который отмечен в коннекторе синхронизации.
В последних тестах были специально отмечены OU организаций, такие как “Customer1”, “Customer2” и т.д. Я изменил коннектор и отметил только родительский OU, “Customers”.
Так же мне пришлось снова удалить профили с использованием команд Remove-SPSiteSubscriptionProfileConfig и Add-SPSiteSubscriptionProfileConfig.
Полный импорт снова создал все профили в заданном разделе.
Вывод:
Не имеет значения как выбирать OU в коннекторе – один родительский OU или все дочерние. То же самое для multitenat приложения службы профилей.
Further investigation
Теперь, когда я стал более уверенным в том что для фильтрации учетных записей используется только название непосредственного родительского OU, я смог найти похожие истории в Интернете:
Тут Патрик нашел SQL-процедуру в базах данных SharePoint которая выполняет эту “умную” привязку:
И в этой статье есть ссылка на форум, который сообщяет
The developent team (Microsoft support) canned the fix. This functionality will not be part of the CU2 updates or any future updates. They thought it worked as designed.
По-русски это означает, что разработчики Microsoft законсервировали фикс. Они считают, что все работает так как было задумано.
Решение
Пока что нет. Я не нашел пока что хорошего решения в сложившейся ситуации. Такое поведение означает что мы должны реструктурировать AD. И честно говоря, это врядли возможно, т.к. заказчик использует внешнюю систему управления структурой AD и объектами. Я надеюсь, что я еще вернусь к этому посту и обновлю его хэппи эндом. В другой раз. Спасибо за чтение!
P.S.
Решил провести еще одну небольшую проверку и не удаляя созданные профили поменять привязку и проверить, что произойдет если поменять привязку на другого подписчика и запустить полную синхронизацию. В результате все профили остались на месте, привязанными к старому подписчику. Т.е. если вы хотите при импорте привязать профили к другому подписчику, необходимо предварительно удалить профили.
среда, 15 января 2014 г.
Служба метаданных недоступна
Внезапно перестала работать служба метаданных.
При открытии страницы администрирования службы выдается ошибка “В настоящий момент подключение или служба управляемых метаданных недоступна. Возможно, не были запущены веб-служба управляемых метаданных или пул приложений. Обратитесь к администратору.”
Помогло следующее
- Создал второе (временное) приложение-службу;
- В свойствах первоначального приложения службы скопировал в буфер обмена имя базы данных:

- Удалил первоначальную службу, выдающей ошибку. При этом оставил галку удаления данных

- Пересоздал первоначальную службу, указав скопированное название базы данных;
- Удалил временное приложение.
понедельник, 16 декабря 2013 г.
Фильтр по первой букве
Если список упорядочен по алфавиту в каком-то столбце и количество элементов в списке более 100, целесообразно применить фильтр по первой букве для ускорения навигации.
Для этого необходимо
- Добавить в список вычисляемый столбец (с названием, например, firstletter) и с формулой =ЛЕВСИМВ([Имя];1).
- Добавить веб-часть редактора содержимого со следующим кодом:
<style>
.lettersfilter
{
margin-bottom: -10px;
}
.lettersfilter .letter
{
background-color: #f0f0f0;
display: inline-block;
width: 40px;
padding-bottom: 5px;
text-align: center;
vertical-align: middle;
font-size: 2em;
margin-right: 6px;
margin-bottom: 10px;
}
.lettersfilter .letter.all
{
width: 90px;
}
</style>
<div class="lettersfilter">
<a class="letter all" href="Справочник%20сотрудников.aspx">Все</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B0">А</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B1">Б</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B2">В</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B3">Г</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B4">Д</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B5">Е</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%91">Ё</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B6">Ж</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B7">З</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B8">И</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%B9">Й</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BA">К</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BB">Л</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BC">М</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BD">Н</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BE">О</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D0%BF">П</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%80">Р</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%81">С</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%82">Т</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%83">У</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%84">Ф</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%85">Х</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%86">Ц</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%87">Ч</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%88">Ш</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%89">Щ</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%8D">Э</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%8E">Ю</a>
<a class="letter" href="Справочник%20сотрудников.aspx?FilterField1=firstletter&FilterValue1=%D1%8F">Я</a>
</div>
В коде заменить “Справочник%20сотрудников” на URL-страницы, где настроено представление.
Заменить “firstletter” на внутреннее название столбца, созданного на шаге 1.
Получается так:
вторник, 3 декабря 2013 г.
Столбцы адреса элемента в рабочем процессе SharePoint Designer
При разработке процесса в SharePoint Designer разработчику предоставляется множество различных столбцов, связанных с адресом элемента.
Какой из них выбрать в нужный момент? Вот что возвращает рабочий процесс при запросе различных столбцов на документе, расположенном в подсайте testsite, в библиотеке test, в папке “Папка” (/testsite/test/Папка/Инструкция%20по%20импорту%20в%20базу%20данных%203д-моделей.docx).
Выбирайте.
http://server/testsite/test/Папка/Инструкция%20по%20импорту%20в%20базу%20данных%203д-моделей.docx
Инструкция по импорту в базу данных 3д-моделей
Инструкция по импорту в базу данных 3д-моделей.docx
/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx
/testsite/test/Папка
/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx
http://xn--80acmlhv0b.xn--80agflthakqd0d1e/testsite
http://server/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx
среда, 30 октября 2013 г.
Оценка “Мне нравится” на форме просмотра элемента
В SharePoint 2013 есть стандартный функционал оценок:
Он работает отлично на обычных табличных представлениях.
Но не очень понятно, как реализовать, например, оценку фотографий, когда пользователю необходимо просмотреть фотографии и тут же их оценить.
На странице DispForm нет кнопки “Нравится”, есть только в табличном представлении.
Но можно добавить эту кнопку следующим кодом:
<div class="LikeSection"><span class="likecount"></span><a href="#" onclick="LikePage()" class="LikeButton"></a></div>
<SharePoint:ScriptLink language="javascript" name="reputation.js" OnDemand="true" runat="server" Localizable="false"/>
<script type="text/javascript">
function getQueryStringParameter(urlParameterKey) {
var params = document.URL.split('?')[1].split('&');
var strParams = '';
for (var i = 0; i < params.length; i = i + 1) {
var singleParam = params[i].split('=');
if (singleParam[0] == urlParameterKey)
return decodeURIComponent(singleParam[1]);
}
}
function LikePage() {
var like = false;
var likeButtonText = $("a.LikeButton").text();
if (likeButtonText != "") {
if (likeButtonText == "Нравится")
like = true;
var aContextObject = new SP.ClientContext();
EnsureScriptFunc('reputation.js', 'Microsoft.Office.Server.ReputationModel.Reputation', function () {
Microsoft.Office.Server.ReputationModel.
Reputation.setLike(aContextObject,
_spPageContextInfo.pageListId.substring(1, 37),
getQueryStringParameter('ID'), like);
aContextObject.executeQueryAsync(
function () {
//alert(String(like));
GetLikeCount();
}, function (sender, args) {
//alert('F0');
});
});
}
}
function GetLikeCount() {
var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);
var list = context.get_web().get_lists().getById(_spPageContextInfo.pageListId);
var item = list.getItemById(getQueryStringParameter('ID'));
context.load(item, "LikedBy", "ID", "LikesCount");
context.executeQueryAsync(Function.createDelegate(this, function (success) {
// Check if the user id of the current users is in the collection LikedBy.
var likeDisplay = true;
var $v_0 = item.get_item('LikedBy');
var itemc = item.get_item('LikesCount');
if (!SP.ScriptHelpers.isNullOrUndefined($v_0)) {
for (var $v_1 = 0, $v_2 = $v_0.length; $v_1 < $v_2; $v_1++) {
var $v_3 = $v_0[$v_1];
if ($v_3.$1E_1 === _spPageContextInfo.userId) {
//cb(true, item.get_item('LikesCount'));
//alert("Liked by me");
likeDisplay = false;
}
}
}
ChangeLikeText(likeDisplay, itemc);
}), Function.createDelegate(this, function (sender, args) {
//alert('F1');
}));
}
function ChangeLikeText(like, count) {
if (like) {
$("a.LikeButton").text('Нравится');
}
else {
$("a.LikeButton").text('Разонравилось');
}
var htmlstring = '<img alt="" src="/_layouts/15/images/LikeFull.11x11x32.png" />' + ' ' + String(count);
if (count > 0)
$(".likecount").html(htmlstring)
else
$(".likecount").html("");
}
$(document).ready(function () {
GetLikeCount();
$("a.LikeButton").click(function () {
LikePage();
});
});
</script>
Получается вполне симпатично:
понедельник, 30 сентября 2013 г.
Не работает поиск пользователя при фильтрации по группе
SharePoint 2010.
Если настроить в параметрах столбца подстановки пользователя фильтрацию по группе SharePoint
Перестает работать поиск в диалоге выбора:
Т.е. вводим в поле поиска текст “Bruno”, нажимаем Enter, список пользователей пропадает а затем снова появляются все пользователи.
Хотя если не использовать диалог, а искать прямо на форме элемента, все работает корректно:
В SharePoint 2013 вообще нет диалога выбора, там и без него удобно выбирается пользователь:
пятница, 27 сентября 2013 г.
Адреса перенаправления на функции личного сайта
| Назначение | URL относительно узла личных сайтов |
| Личный сайт текущего пользователя | /_layouts/15/MySite.aspx |
| SkyDrive текущего пользователя | /_layouts/15/MySite.aspx?MySiteRedirect=AllDocuments |
| Каталог сайтов текущего пользователя | /_layouts/15/MySite.aspx?MySiteRedirect=AllSites |
| Все задачи текущего пользователя | /_layouts/15/MySite.aspx?MySiteRedirect=AllTasks |
| Блог текущего пользователя | /_layouts/15/MySite.aspx?Blog=1 |
Если знаете еще полезные адреса – пишите в комментариях, пожалуйста.
Заранее благодарен.
вторник, 24 сентября 2013 г.
Использование url /social
Не используйте url /social для узла личных сайтов.
Сайты пользователей при этом не создаются:
Не удалось создать сайт /sites/администратор. Исключение: Нельзя использовать "Social" как имя сайта. Имена сайтов не могут содержать определенные зарезервированные слова и не могут начинаться со знака подчеркивания. Введите другое имя.
воскресенье, 22 сентября 2013 г.
Сохранение в качестве шаблона не доступно
Ссылка “Сохранение сайта в качестве шаблона” исчезает со страницы параметров сайта при включении на сайте возможности публикации. Для того, чтобы вернуть ссылку, недостаточно просто деактивировать возможность.
Если просто использовать перейти по ссылке /_layouts/15/savetmpl.aspx, выведется ошибка:
[SPException: Действие "Сохранить сайт как шаблон" не поддерживается на этом сайте.]
Microsoft.SharePoint.SPSolutionExporter.ThrowIfCantExportSite(SPWeb web, Boolean workflowExportModeIsEnabled) +324
Microsoft.SharePoint.ApplicationPages.SaveAsTemplatePage.OnLoad(EventArgs e) +1320
ASP._layouts_15_savetmpl_aspx.OnLoad(EventArgs e) in c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\savetmpl.aspx:25
System.Web.UI.Control.LoadRecursive() +95
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2936
Для того, чтобы все-таки сохранить сайт в качестве шаблона, нужно изменить в SharePoint Designer параметр SaveSiteAsTemplateEnabled.
Результат:
Ошибка при вызове New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager из PowerShell
Писал скрипт для массового обновления профилей и столкнулся с такой ошибкой.
New-Object : Исключение при вызове ".ctor" с "1" аргументами: "UserProfileAppli
cationNotAvailableException_Logging :: UserProfileApplicationProxy.ApplicationP
roperties ProfilePropertyCache does not have 61e2df3d-e19e-46d0-85c4-e46f4721c2
04"
Как оказалось, для того, чтобы в PowerShell вызывать службу профилей, недостаточно просто иметь права на службу:
Нужно еще иметь роль SharePoint_Shell_Access в базе данных конфигурации.
Для того, чтобы узнать перечень учетных записей с такой ролью, можно выполнить команду get-SPShellAdmin
Решение было найдено тут:
понедельник, 16 сентября 2013 г.
Ошибка при установке Project Server без домена
Установил программные файлы SharePoint Server, Project Server.
Не запуская мастера настройки продуктов, установил обновления PU March и CU August.
Для того, чтобы настроить ферму без домена, запустил команду
New-SPConfigurationDatabase
Вывелась ошибка
New-SPConfigurationDatabase : Эта ферма SharePoint в настоящий момент имеет отл
оженные обновления. Командлет New-SPConfigurationDatabase не может быть выполне
н до завершения обновления.
строка:1 знак:1
+ New-SPConfigurationDatabase
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-SPConfigurationDataba
se], SPException
+ FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletNewSPCon
figurationDatabase
Предполагаю, ошибка возникла из-за того, что установка обновлений не завершилась. Перезагрузка сервера не помогла.
Запустил команду
PSCONFIG.EXE -cmd upgrade -wait -force -inplace b2b
После этого ферма успешно создалась.
Решение нашел тут: http://gb-sharepointsnippets.blogspot.ru/2012/11/fehlermeldung-this-sharepoint-farm.html
понедельник, 2 сентября 2013 г.
Объединение логических условий в рабочем процессе в SharePoint Designer
Как объединятся три условия рабочего процесса, если между первыми двумя условиями стоит оператор “или”, а между вторым и третьим – “и”?
Например, что выведет рабочий процесс в данном случае?
По идее по правилам булевой алгебры сначала выполняется оператор “и”, а затем “или”. В результате в журнал должно записаться “Верно”.
Но в случае с SharePoint это не так. Вычисляются условия по порядку написания. Сначала первые два, затем их итог объединяется с третьим и т.д. В результате данный процесс выводит “Не верно”.
Аналогично работают и условия в настройках фильтрации в представлениях.
четверг, 29 августа 2013 г.
Ошибка в рабочем процессе “… должны содержаться данные другого типа”
Условия
SharePoint 2010
Рабочий процесс в SharePoint Designer
В рабочем процессе есть действие “Обновить элемент в списке”, в котором обновляется столбец типа “Пользователь или группа”
Рабочий процесс нормально работает под пользователем, являющимся администратором семейства.
При запуске пользователем, не администратором, если в столбец подставляется пользователь, еще не добавленный в список сведений о пользователях, процесс завершается с ошибкой.
В журнале рабочего процесса:
“Обновить элемент в рабочем процессе не удалось, возможно потому, что в одном или нескольких столбцах для этого элемента должны содержаться данные другого типа.”
“The workflow could not update the item, possibly because one or more columns for the item require a different type of information”
В журнале SharePoint:
08/28/2013 17:21:21.39 w3wp.exe (0x1690) 0x20F0 SharePoint Foundation Workflow Infrastructure 88xr Unexpected WinWF Internal Error, terminating workflow Id# 29853693-81f2-49a1-9041-b807a1e38710
08/28/2013 17:21:21.39 w3wp.exe (0x1690) 0x20F0 SharePoint Foundation Workflow Infrastructure 98d4 Unexpected System.ArgumentException: Элемент не существует. Возможно, он был удален другим пользователем. at Microsoft.SharePoint.SPList.GetItemById(String strId, Int32 id, String strRootFolder, Boolean cacheRowsetAndId, String strViewFields, Boolean bDatesInUtc) at Microsoft.SharePoint.Workflow.SPWinOEWSSService.RetrieveListItem(SPWeb web, Guid id, Guid listId, SPItemKey itemKey, Boolean allowCreate) at Microsoft.SharePoint.Workflow.SPWinOEWSSService.UpdateListItemInternal(Guid id, Guid listId, SPItemKey itemKey, Hashtable itemProperties) at Microsoft.SharePoint.Workflow.SPWinOEWSSService.UpdateListItem(Guid id, Guid listId, SPItemKey itemKey, Hashtable itemProperties) at Microsoft.SharePoint.WorkflowActions.ActivityHelper.DoCorrectUpdateMethod(WorkflowContext theContext, SPItemK...
08/28/2013 17:21:21.39* w3wp.exe (0x1690) 0x20F0 SharePoint Foundation Workflow Infrastructure 98d4 Unexpected ...ey item, Guid listId, Hashtable properties, IListItemService hostInterface) at Microsoft.SharePoint.WorkflowActions.WithKey.UpdateItemActivity.DoUpdate(ActivityExecutionContext provider) at Microsoft.SharePoint.WorkflowActions.WaitForDocumentUnlockActivity.Execute(ActivityExecutionContext executionContext) at Microsoft.SharePoint.WorkflowActions.WithKey.UpdateItemActivity.Execute(ActivityExecutionContext provider) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext) at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime) at System...
08/28/2013 17:21:21.39* w3wp.exe (0x1690) 0x20F0 SharePoint Foundation Workflow Infrastructure 98d4 Unexpected ....Workflow.Runtime.Scheduler.Run()
Причина
Причина в том, что пользователь, в контексте которого выполняется рабочий процесс, не имеет прав на создание новых записей в списке сведений о пользователях. Процесс не может создать нового пользователя и поэтому не может осуществить подстановку несуществующей записи.
Решение
В рабочем процессе перенести действие обновление элемента списка в шаг олицетворения и опубликовать процесс пользователем, имеющим права администратора семейства.
среда, 21 августа 2013 г.
Ссылки на страницы Web Analytics
на одном из проектов столкнулись с тем, что в дизайне не предусмотрена левая панель сайта, при этом не отображаются ссылки на отчеты Web Analytics
Можно использовать следующие ссылки для перехода по отчетам:
| Трафик | ||
| Число просмотров страницы | /_layouts/WebAnalytics/Report.aspx?t=PageViewTrend&l=sc | |
| Уникальных посетителей за день | /_layouts/WebAnalytics/Report.aspx?t=UniqueVisitorsTrend&l=sc | |
| Число источников ссылок | /_layouts/WebAnalytics/Report.aspx?t=ReferrerTrendReport&l=sc | |
| Самые посещаемые страницы | /_layouts/WebAnalytics/Report.aspx?t=TopPageForPageReport&l=sc | |
| Самые активные посетители | /_layouts/WebAnalytics/Report.aspx?t=TopVisitorsReport&l=sc | |
| Смаые популярные источники | /_layouts/WebAnalytics/Report.aspx?t=TopReferrerForPageReport&l=sc | |
| Популярные конечные страницы | /_layouts/WebAnalytics/Report.aspx?t=TopDestinationForPageReport&l=sc | |
| Самые популярные браузеры | /_layouts/WebAnalytics/Report.aspx?t=TopBrowsersReport&l=sc | |
| Поиск | ||
| Число запросов | /_layouts/WebAnalytics/Report.aspx?t=SearchTrafficTrendReport&l=sc | |
| Самые популярные запросы | /_layouts/WebAnalytics/Report.aspx?t=PopularSearchesReport&l=sc | |
| Неудачные запросы | /_layouts/WebAnalytics/Report.aspx?t=SearchFailureReport&l=sc | |
| Использование наиболее подходящих элементов | /_layouts/WebAnalytics/Report.aspx?t=BestBetPerformanceReport&l=sc | |
| Предложение наиболее подходящих элементов | /_layouts/WebAnalytics/Report.aspx?t=BestBetRecommendationReport&l=sc | |
| Журнал действий по предложению наиболее подходящих элементов | /_layouts/WebAnalytics/Report.aspx?t=BestBetActionReport&l=sc | |
| Ключевые слова поиска | /_layouts/listkeywords.aspx# | |
| Опись | ||
| Использование хранилища | /_layouts/WebAnalytics/Report.aspx?t=StorageTrendsReport&l=sc | |
| Число сайтов | /_layouts/WebAnalytics/Report.aspx?t=SiteTrendsReport&l=sc | |
| Самые популярные версии продуктов на сайте | /_layouts/WebAnalytics/Report.aspx?t=Site_ProductInventoryReport&l=sc | |
| Самые популярные языки на сайте | /_layouts/WebAnalytics/Report.aspx?t=Site_LanguageInventoryReport&l=sc | |
| Настраиваемые отчеты | /AnalyticsReports/Forms/AllItems.aspx |
четверг, 23 мая 2013 г.
Отображение столбца подстановки без ссылки
Иногда не требуется, чтобы значение в столбце подстановки отображалось как ссылка на свазанный элемент. Например, если связанный список является простым справочником, содержащий только названия категорий.
Представим, что у нас есть уже столбец и мы хотим убрать ссылку из него.
1. В параметрах столбца меняем название столбца. Например, добавляем в конец названия единицу:
2. В параметрах подстановки отмечаем галкой дополнительное поле “Название”:
3. В параметрах нового столбца “Бренд: Название” меняем имя столбца на “Бренд”
4. В параметрах основного столбца Бренд1 убираем единицу.
5. В настройках представления убираем старый столбец и добавляем новый.
понедельник, 25 марта 2013 г.
Реализация выбора из справочника
Часто при разработке функционала требуется реализовать пользовательский выбор из набора вариантов.
Например, при создании новой заявки нужно выбрать отдел, к бюджету которого относится заявка:
Есть 2 типа столбца, позволяющие реализовать такой выбор:
- Выбор (меню);
- Подстановка;
- Управляемые метаданные.
Преимущества первого варианта:
- Простота настройки – все настройки столбца в одном месте;
- Возможность упорядочивания выпадающего списка;
- При удалении элемента из справочника выбранные данные сохраняются;
- Возможность устанавливать вариант по умолчанию;
- Возможность указывать вариант не из списка, ввести с клавиатуры;
- Более высокая производительность при большом количестве элементов;
- Возможность выбора 1 кликом (в формате переключателей);
- Возможность использования в гибких фильтрах (“начинается с” и “содержит”);
- Выбор в 2 клика;
- Возможность использования в вычисляемых столбцах;
- Доступен в SharePoint Foundation;
- Возможность навигации для метаданных (в левом меню).
Преимущества второго варианта:
- Возможность ведения справочника стандартными пользовательскими средствами;
- Ограничение доступа к вариантам выбора через права на список подстановки;
- Возможность хранения дополнительных полей списка подстановки (структурированный справочник);
- Возможность централизации справочника, использование в нескольких столбцах/списках;
- Выбор в 2 клика;
- Доступен в SharePoint Foundation.
Преимущества третьего варианта:
- Возможность настройки иерархического справочника;
- Возможность пополнения справочника в процессе выбора;
- Многоязычные справочники;
- Возможность подсказок по синонимам;
- Фильтрация в результатах поиска;
- Возможность навигации для метаданных (в левом меню);
- Возможность централизации справочника, использование в нескольких столбцах/списках/сайтах/семействах/веб-приложениях.
Выбирайте, что важнее в конкретном случае и разрабатывайте!
среда, 6 марта 2013 г.
Веб-часть “Сведения о контакте” отображает не всех пользователей
Столкнулся на проекте с тем, что при выборе сотрудника в стандартной веб-части “Сведения о контакте” подстановка пользователя не сохраняется. Веб-часть показывает, что пользователь не выбран:
Выяснилось, что так веб-часть поступает только при выборе определенных пользователей. А именно тех, кто ни разу не входил на портал.
Анализ показал следующее: когда в этой веб-части выбирается пользователь, ни разу не входивший на портал, для него в списке пользователей (userinfo) создается запись, причем учетная запись указывается в формате обычной аутентификации, не на основании утверждений. Когда же пользователь входит на портал, ему создается еще одна запись, именно в формате аутентификации на основе утверждений. И после этого становится возможно выбрать его в веб-части “Сведения о контакте”. Причем, если пользователь уже входил на портал и для него создана только учетная запись на утверждениях, то при указании его в веб-части “Сведения о контакте” запись не на утверждениях не создается.
Обходное решение. Добавлять вручную пользователя в список пользователей на семейство сайтов. При этом пользователь добавляется именно в формате аутентификации на основе утверждений (если таковая используется). После этого пользователь нормально выбирается в веб-части “Сведения о контакте”.
среда, 27 февраля 2013 г.
Семинар "SharePoint 2013 для Ваших отделов"
06 марта 2013 с 9:30 до 13:30
Офис Microsoft (Санкт-Петербург, Аптекарская наб. 20а, бизнес-центр «Авеню»)
Компания Conteq приглашает на семинар, посвященный возможностям платформы Microsoft SharePoint и приуроченный к выходу новой версии 2013. На семинаре будут представлены варианты применения платформы SharePoint для прикладных бизнес задач.
- Как повысить эффективность управления персоналом и создать условия для поддержки обратной связи с сотрудниками?
- Как построить единое информационное пространство?
- Как повысить эффективность работы с документами и архивами документов?
- Как обеспечить прозрачность и контроль в управлении?
Приглашаем на мероприятие руководителей компаний, исполнительных директоров, директоров по производству и ИТ руководителей. Участие в семинаре бесплатное при условии предварительной регистрации.
Программа семинара
09.30-10.00
Регистрация, приветственный кофе
10.00-10.45
SharePoint 2013 для пользователей (Павел Чужмаров, Microsoft)
Облачная платформа Microsoft.
Демонстрация новых возможностей SharePoint 2013
10.45-11.15
SharePoint для отделов PR и HR (Станислав Газуль, Контек)
Создание корпоративного портала с использованием Conteq IntraSpace
Создание учебного центра
Объединяя возможности: внутренний портал и внешний сайт на SharePoint. Примеры реализации
11.15-11.45
SharePoint для договорного отдела (Максим Савельев, Контек)
Создание системы электронного согласования договоров в Conteq DocSpace за 60 мин
Электронный архив договоров
11.45-12.15
Кофе-брейк
12.15-12.45
SharePoint для отдела закупок (Максим Савельев, Контек)
Демонстрация примера системы автоматизации закупочных процедур
12.45-13.15
SharePoint в кармане руководителя (Максим Савельев, Контек)
Мобильное рабочее место руководителя - бизнес всегда под контролем
Управление задачами подчиненных – эффективный инструмент управления бизнесом. Conteq TaskSpace
13.15-13.45
SharePoint для специалистов ИТ службы (Станислав Газуль, Контек)
Новое в архитектуре SharePoint 2013
Схемы миграции на SharePoint 2013
Изменения в лицензировании SharePoint 2013
13.45-14.00
Заключительная часть, ответы на вопросы
Зарегистрироваться на семинар можно
- заполнив форму внизу страницы http://conteq.ru/promo/seminar_sharepoint_2013/
- по телефону: +7 (812) 610-3331;
- по электронной почте: info@conteq.ru, указав название компании, свое имя, фамилию, должность и контактный номер телефона.