Как создать новый тип контента в SharePoint с помощью MS Graph/REST?

Я попытался добавить новый тип контента в список с помощью MS Graph Explorer:

Запрос:

POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/contenttypes

с телом:

{
  "description": "MyCustomContentType's description",
  "group": "List Content Types",
  "hidden": false,
  "id": "0x010300B8123BA6FE3D6045BF4F6DF992B6ABE7",
  "name": "MyCustomContentType",
  "parentId": "0x0103",
  "readOnly": false,
  "sealed": false
}

Ответ:

{
    "error": {
        "code": "itemNotFound",
        "message": "The specified site content type was not found",
        "innerError": {
            "request-id": "1ac12fed-eaf3-4d03-a3c4-b44ddacada72",
            "date": "2020-05-16T17:12:11"
        }
    }
}

Также попробовал это с Graph API sdk в коде Java:

IGraphServiceClient graphClient = GraphServiceClient.builder()
        .authenticationProvider(authenticationProvider)
        .buildClient();

ContentType contentType = new ContentType();
contentType.name = "MyCustomContentType";
contentType.description = "MyCustomContentType's description";
contentType.group = "List Content Types";
contentType.hidden = false;
contentType.parentId = "0x0103";
contentType.id = "0x010300B8123BA6FE3D6045BF4F6DF992B6ABE7";
contentType.readOnly = false;
contentType.sealed = false;

contentType = graphClient.sites(siteId)
        .lists(listId)
        .contentTypes()
        .buildRequest()
        .post(contentType);

результат тот же...

Также я попытался добавить тип контента в список с помощью REST API, но столкнулся с другой проблемой: тип контента создается, но игнорирует переданный идентификатор и всегда наследуется от типа контента Item. Та же проблема описана здесь: Как для создания типа контента сайта с идентификатором с помощью REST API. Похоже на ошибку REST API.

Можно ли создать тип контента в SharePoint с помощью MS Graph или REST API? Может быть, есть другие способы создать его с помощью Java?

Спасибо!


person Foat Sharafutdinov    schedule 16.05.2020    source источник
comment
Я также застрял с ошибкой ID в подходе REST и теперь больше не могу делать это через CSOM, потому что он поддерживает только устаревшую аутентификацию, и она постепенно отключается. Еще не пробовал график, но, глядя на ваш пример, я предполагаю, что проблема может заключаться в том, что вы пытаетесь создать тип контента непосредственно в списке. Попробуйте создать его на уровне SITE (/sites/{site-id}/contenttypes), а затем сделайте еще один вызов, чтобы связать тип контента сайта со списком.   -  person Martin D    schedule 05.09.2020


Ответы (1)


Мой ответ будет немного длинным, потому что я постараюсь объяснить все максимально понятно.

Прежде всего, запрос на создание типа контента должен быть отправлен как POST-запрос на конечную точку sites/{siteId}/contenttypes. Тело должно быть объектом, который содержит свойства: Имя, Описание, Группа и База. Первые три свойства (имя, описание и группа) не требуют пояснений, а свойство Base — это просто ссылочный объект родительского Content-Type. В свойстве Base необходимо указать Id родительского типа контента и при желании также можно указать имя Вот ссылка на официальную документацию MS по этому поводу: Создать тип контента — MS

В качестве базового элемента существует ряд предопределенных параметров (типов контента), которые вы можете использовать. Обратите внимание, что вы также можете использовать только что созданные Content-Type в качестве базового типа. Мое предложение состоит в том, чтобы вы сделали вызов запроса GET к конечной точке https://graph.microsoft.com/beta/sites/{siteId}/contentTypes, а затем увидели результаты.

Из полученных результатов вы должны увидеть, что все типы содержимого, которые вы можете использовать в качестве родительских ссылок. Чтобы лучше понять типы контента, я предлагаю вам прочитать об идентификаторах типов контента по этой ссылке MS Docs — идентификаторы типов контента

Итак, чтобы обернуть это, ваш запрос должен выглядеть примерно так:

POST: https://graph.microsoft.com/beta/sites/{siteId}/contentTypes

{
    "name": "Your Content Type Name",
    "description": "Description for your content type",
    "base": {
        "name": "Name of the parent content type",
        "id": "0x0120D520" //Id of the parent content type
    },
    "group": "Your Content Type Group" 
}
person Genc Hani    schedule 05.07.2021