четверг, 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 Мб, то Вы увидете следующее: