понедельник, 16 декабря 2013 г.

Фильтр по первой букве

Если список упорядочен по алфавиту в каком-то столбце и количество элементов в списке более 100, целесообразно применить фильтр по первой букве для ускорения навигации.

Для этого необходимо

  1. Добавить в список вычисляемый столбец (с названием, например, firstletter) и с формулой =ЛЕВСИМВ([Имя];1).
  2. Добавить веб-часть редактора содержимого со следующим кодом:

<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.

Получается так:

image

вторник, 3 декабря 2013 г.

Столбцы адреса элемента в рабочем процессе SharePoint Designer

При разработке процесса в SharePoint Designer разработчику предоставляется множество различных столбцов, связанных с адресом элемента.

Какой из них выбрать в нужный момент? Вот что возвращает рабочий процесс при запросе различных столбцов на документе, расположенном в подсайте testsite, в библиотеке test, в папке “Папка” (/testsite/test/Папка/Инструкция%20по%20импорту%20в%20базу%20данных%203д-моделей.docx).

Выбирайте.

 

image

http://server/testsite/test/Папка/Инструкция%20по%20импорту%20в%20базу%20данных%203д-моделей.docx

 

image

Инструкция по импорту в базу данных 3д-моделей

 

image

Инструкция по импорту в базу данных 3д-моделей.docx

 

image

/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx

 

image

/testsite/test/Папка

 

image

/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx

 

image

http://xn--80acmlhv0b.xn--80agflthakqd0d1e/testsite

 

image

http://server/testsite/test/Папка/Инструкция по импорту в базу данных 3д-моделей.docx

среда, 30 октября 2013 г.

Оценка “Мне нравится” на форме просмотра элемента

В SharePoint 2013 есть стандартный функционал оценок:

image

Он работает отлично на обычных табличных представлениях.

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

image

На странице 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>

Получается вполне симпатично:

image

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

Не работает поиск пользователя при фильтрации по группе

SharePoint 2010.

Если настроить в параметрах столбца подстановки пользователя фильтрацию по группе SharePoint

image

Перестает работать поиск в диалоге выбора:

image

Т.е. вводим в поле поиска текст “Bruno”, нажимаем Enter, список пользователей пропадает а затем снова появляются все пользователи.

Хотя если не использовать диалог, а искать прямо на форме элемента, все работает корректно:

image 

В SharePoint 2013 вообще нет диалога выбора, там и без него удобно выбирается пользователь:

image

пятница, 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

image

Для того, чтобы все-таки сохранить сайт в качестве шаблона, нужно изменить в SharePoint Designer параметр SaveSiteAsTemplateEnabled.

image

Результат:

image