четверг, 31 июля 2014 г.

SharePoint 2013. Ошибка синхронизации задач

При попытке синхронизации списка задач с Outlook:

можно получить такую ошибку:

Текст ошибки RU:
Нам не удалось синхронизировать ваши задачи. Возможно, ваш почтовый ящик находится на сервере Exchange Server, на котором не поддерживается синхронизация задач. Обратитесь к администратору.
Текст ошибки EN:
We weren't able to sync your tasks. This could be be!cause your mailbox is on an Exchange server that isn't supported for syncing tasks. Please contact your administrator for more help.


Это может быть из-за того, что Ваша почта храниться в Exchange Server. И не в 2013 версии.
В SharePoint 2013 есть возможность синхронизировать элементы именно с Exchange 2013,  а не с только с OutLook. Это дало бы возможность видеть синхронизируемые задачи в OWA и на других компьютерах с OutLook под Вашей учётной записью.
Что бы исправить эту ошибку и иметь возможность синхронизации с outlook - необходимо отключить возможность "Синхронизация задач Exchange на уровне фермы":
 После этого попытайтесь снова подключиться к Outlook, появится диалог:
В самом outlook можно будет видеть задачи:

Повторюсь, если подключаться таким образом, то задачи в Outlook Web Access и в Вашем телефона не появятся, т.к. это прямое соединение конкретного экземпляра Outlook и Sharepoint.

UPD:
По кнопке "Дополнительно" появляется диалог:
Это требует проверки.

вторник, 8 июля 2014 г.

SharePoint создать и загрузить текстовый файл используя JSOM & REST

У меня возникла необходимость генерировать txt и загружать его в библиотеку SharePoint.
Сам процесс аналогичен загрузке файла. Точнее ознакомиться с процессом можно по ссылке.
В коде, по ссылке выше есть метод PerformUploadInit(), один из параметров fileData можно заполнить обычной строкой, в случае текста не на латинице я получал такое отображение файла:
Проблема решилась сменой кодировки в CP-1251 из Unicode. Для смены кодировки я использовал функцию от cryo.

Конечный код решения по генерации .txt и его загрузке в библиотеку SharePoint:
var currentWebUrl;
var context;
var web;
var digest = "";
var DMap = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 1027: 129, 8225: 135, 1046: 198, 8222: 132, 1047: 199, 1168: 165, 1048: 200, 1113: 154, 1049: 201, 1045: 197, 1050: 202, 1028: 170, 160: 160, 1040: 192, 1051: 203, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 1053: 205, 176: 176, 177: 177, 1114: 156, 181: 181, 182: 182, 183: 183, 8221: 148, 187: 187, 1029: 189, 1056: 208, 1057: 209, 1058: 210, 8364: 136, 1112: 188, 1115: 158, 1059: 211, 1060: 212, 1030: 178, 1061: 213, 1062: 214, 1063: 215, 1116: 157, 1064: 216, 1065: 217, 1031: 175, 1066: 218, 1067: 219, 1068: 220, 1069: 221, 1070: 222, 1032: 163, 8226: 149, 1071: 223, 1072: 224, 8482: 153, 1073: 225, 8240: 137, 1118: 162, 1074: 226, 1110: 179, 8230: 133, 1075: 227, 1033: 138, 1076: 228, 1077: 229, 8211: 150, 1078: 230, 1119: 159, 1079: 231, 1042: 194, 1080: 232, 1034: 140, 1025: 168, 1081: 233, 1082: 234, 8212: 151, 1083: 235, 1169: 180, 1084: 236, 1052: 204, 1085: 237, 1035: 142, 1086: 238, 1087: 239, 1088: 240, 1089: 241, 1090: 242, 1036: 141, 1041: 193, 1091: 243, 1092: 244, 8224: 134, 1093: 245, 8470: 185, 1094: 246, 1054: 206, 1095: 247, 1096: 248, 8249: 139, 1097: 249, 1098: 250, 1044: 196, 1099: 251, 1111: 191, 1055: 207, 1100: 252, 1038: 161, 8220: 147, 1101: 253, 8250: 155, 1102: 254, 8216: 145, 1103: 255, 1043: 195, 1105: 184, 1039: 143, 1026: 128, 1106: 144, 8218: 130, 1107: 131, 8217: 146, 1108: 186, 1109: 190};

function GenerateAndUploadTXTFileToSharePointLibrary(library,fileName,folder,content){
 var enodedContent = UnicodeToWin1251(content);
 PerformUpload(library,fileName,folder,content);
}

function UnicodeToWin1251(s) {
    var L = []
    for (var i=0; i&lts.length; i++) {
        var ord = s.charCodeAt(i)
        L.push(String.fromCharCode(DMap[ord]))
    }
    return L.join('')
}

function PerformUpload(libraryTitle, fileName, folderTitle, content) {

    var reqExecutor = new SP.RequestExecutor(currentWebUrl);
    var url = "/registry/_api/web/GetFolderByServerRelativeUrl('" + libraryTitle + "/" + folderTitle + "')/Files/add(url='" + fileName + "', overwrite=true)";
    reqExecutor.executeAsync({
        url: url,
        method: "POST",
        headers: {
            //"Accept": "application/json; odata=verbose",
            "X-RequestDigest": digest
        },
        binaryStringRequestBody: true,
        body: content,
        success: function () {
            console.log("Файл удачно загружен.");
        },
        error: function (x, y, z) {
            alert(x); alert(y); alert(z);
            console.log("Не удалось загрузить файл.");
        }
    });
}

function getWebProperties() {
    console.log("Начало выполнения функции 'getWebProperties()'");
    context = SP.ClientContext.get_current();
 web = context.get_web();
 list = web.get_lists();
    context.load(web, 'ServerRelativeUrl');
    context.executeQueryAsync(
 function () {
     console.log("Удалось получить текущий url сайта");
     currentWebUrl = web.get_serverRelativeUrl();
 },
 function () {
     console.log("Не удалось получить текущий url сайта");
 }
   );
}

function myOnload() {
 $.getScript("/_layouts/15/SP.RequestExecutor.js", function (){});
 digest = $("#__REQUESTDIGEST").val();
 getWebProperties();
}

_spBodyOnLoadFunctionNames.push("myOnload");

Пример вызова:
GenerateAndUploadTXTFileToSharePointLibrary('documentLibraryTitle','fileName.txt','folderTitle','Слово');

Прячем подписи к полям на формах SharePoint используя JavaScript и jQuery

При создании столбца мы имеем возможность заполнить его описание:
 Если это сделать, то на формах создания и редактирования, мы сможем видеть описание столбца:
Может возникнуть необходимость оставить описание, но не показывать его на форме.
Для этого подключите к странице jQuery и используйте код:
$('.ms-metadata').hide()

Но для того что бы спрятать описание типа "Пользователь", надо использовать немного другой код:
$('.ms-usereditor span').hide()

Установить ширину столбца списка в SharePoint используя JavaScript и jQuery

Порой возникает необходимость зафиксировать ширину столбцов в представлении списка.
Для этого можно использовать JavaScript и библиотеку jQuery.
Подключите jQuery и добавьте JavaScript функцию:
function setColumnWidth(field, width)
{ 
    $("TH.ms-vh2:contains('" + field + "')").css( "max-width",width );
}
Пример вызова функции:
setColumnWidth('TitleOfColumn', '100px')

Тип аутентификации и i:0#.w|

Иногда в SharePoint 2013 и изначально в SharePoint 2013 перед доменным именем пользователя можно увидеть "лишние" символы:
i:0#.w|domain\user
Наличие этих символов значит, что используется Claims Based Authenticaiton, по-русски: Аутентификация на основе утверждений.

Ифрэйм в IE ошибка: the content cannot be displayed in a frame

В Центре Администрирования, при попытке редактирования настроек получил ошибку:
Помогло добавление сайте в список надежных узлов в IE.

Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт)


При попытке сохранить сайт в качестве шаблона можно увидеть ошибку:
Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт).
Для того, что бы обойти ограничение - достаточно выполнить PowerShell скрипт ниже:

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
$ContentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ContentService.MaxTemplateDocumentSize = 524288000
$ContentService.Update()

Теперь лимит 500 Мб, это максимальное значение. Вести выше не получится:
Если Ваш сайт занимает < 500 Мб, то Вы увидете следующее:

Действие "Сохранить сайт как шаблон" не поддерживается на этом сайте

При попытке сохранить сайт как шаблон можно получить ошибку:
Действие "Сохранить сайт как шаблон" не поддерживается на этом сайте
Проблема в том, что в propertybag settings сайта свойство SaveSiteAsTemplateEnabled = false:


Поменяйте на true, для этого откройте SharePoint Designer 2013, на ленте инструментов в разделе "Управление" кликните по иконке "Параметры сайта", как на картинке ниже. Появится окно как на картинке выше.



Сделайте изменения. Ошибка пропадет:




Поиск без добавления * ( WildCard) в SharePoint

Изначально поиск SharePoint не подставляет символ подстановки в поисковую строку автоматически, в следствии мы имеем меньшую выдачу, или вообще ничего не имеем:
Если же мы поставим '*' в поисковую строку, то результат будет иной:
Давайте попробуем сделать так, что бы знак подстановки не надо было писать. Т.к. для большинства пользователей это крайне не очевидное телодвижение.
Перейдите в Центр Администрирования -> Управление приложениями -> Управление приложениями-службами -> Ваше приложение-служба поиска.
Слева, в блоке "Запросы и результаты" выберите пункт "Источники результатов".
Перед Вами будет список:

Вам нужно подправить "Local SharePoint Results". Но именно его поправить возможности нет. Поля будут не активны. А под заголовком ошибка:
Похоже, что у вас нет разрешений на просмотр учетных данных учетной записи этого источника результатов. Необходимы разрешения на том же уровне, на котором был создан источник результатов. Например, только в учетной записи с правами администратора для приложения службы поиска можно просматривать учетные данные для источника результатов, созданного на этом уровне.

Что бы достичь нужного результат - вернитесь к общему списку источников результатов и сделайте копию "Local SharePoint Results", потом сделайте его (источник) - источником по умолчанию.

Появится диалог, в нем необходимо задать новое имя и отредактировать значение поля "Преобразование запроса":

Замените {?{searchTerms} -ContentClass=urn:content-class:SPSPeople}
на             {?{searchTerms}* -ContentClass=urn:content-class:SPSPeople}
Должно быть как на картинке:
Теперь созданную нами копию необходимо сделать основной. Вернитесь в список источников результатов и назначьте его по умолчанию:
Давайте теперь попробуем выполнить наш поисковый запрос не подставляя звёздочку:
Результат достигнут.





Ошибка 404 при скачивании файла .exe из библиотеки SharePoint



Порой необходимо хранить исполняемые (.exe) файлы в библиотеке SharePoint.
Через Центр администрирования убираем "exe" из списка запрещенных расширений.
Теперь имеем возможность загрузить .exe файлы в библиотеку. Проблема может быть при скачивании. Через контекстное меню все прекрасно работает, а при клике выдает ошибку 404:

Что бы исправить это - удалим "CGI-exe" из "Handle Mappings" в IIS, перейдите в IIS Manager:


Зайдите в "Handler Mappings" и удалите "CGI-exe":


Теперь все .exe файлы будут нормально скачиваться