Как мне узнать, на какую вкладку / место попадает План? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать полный клон сайта группы Microsoft, используя Microsoft Graph, выполнив базовый клон сайта группы, а затем с помощью API скопировать и настроить весь контент.

Моя первая задача - скопировать Планировщик.Я сделал это достаточно далеко, чтобы скопировать все доступные планы, корзины и задачи.

Моя проблема в том, что я не могу понять:

1) К какой вкладке / местоположению принадлежал план в старой команде

2) Как поставить новый планв указанную вкладку / местоположение в новой команде

public async Task<IEnumerable<Channel>> GetChannels(string accessToken, string teamId) {

    string endpoint = $"{GraphRootUri}/teams/{teamId}/channels";
    HttpResponseMessage response =
        await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken); //old functionality of stolen method - ignore these two lines

    string destinationTeamID = "Teamid";

    //find all plans
    endpoint = $"{GraphRootUri}/groups/{teamId}/planner/plans";
    HttpResponseMessage responsePlans = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
    var plansIn = await ParseList<Planner>(responsePlans);

    //the following two sections are just me seeing if I can find references to the plans
    endpoint = $"{GraphRootUri}/teams/{teamId}/channels";
    HttpResponseMessage responseChannels = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
    var inChannels = await responseChannels.Content.ReadAsStringAsync();

    endpoint = $"{GraphRootUri}/teams/{teamId}/channels/mychannellocation/tabs";
    HttpResponseMessage responseTabs = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
    var inTabs = await responseTabs.Content.ReadAsStringAsync();

    //the following code copies the plans, buckets and tasks
    foreach (Planner plan in plansIn) {

        //first we get everything from the previous team plan

        //grab tasks from the previous plan
        endpoint = $"{GraphRootUri}/planner/plans/{plan.id}/tasks";
        HttpResponseMessage responseTasks = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
        var inTasks = await ParseList<plannerTask>(responseTasks);

        //get all buckets
        endpoint = $"{GraphRootUri}/planner/plans/{plan.id}/buckets";
        HttpResponseMessage responseBuckets = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
        var inBuckets = await ParseList<plannerBucket>(responseBuckets);

        endpoint = $"{GraphRootUri}/planner/tasks";
        //HttpResponseMessage responseTasks = await ServiceHelper.SendRequest(HttpMethod.Get, endpoint, accessToken);
        //  .content .Deserialize<plannerPlan>(); ;

        //then we start to create everything in the new team
        //create the plan in the new team
        endpoint = $"{GraphRootUri}/planner/plans";
        var sendPlanResponse =
            await ServiceHelper.SendRequest(HttpMethod.Post, endpoint, accessToken, new plannerStub(plan, destinationTeamID));
        var newPlanString = await sendPlanResponse.Content.ReadAsStringAsync();
        //get the created plan
        var newPlan = JsonConvert.DeserializeObject<Planner>(newPlanString);

        //create buckets in the new team
        Dictionary<string, string> bucketIdMap = new Dictionary<string, string>();
        foreach (plannerBucket bucket in inBuckets) {
            endpoint = $"{GraphRootUri}/planner/buckets";
            var outBucket = new plannerBucketStub(bucket, newPlan.id);
            var sendBucketResponse =
                await ServiceHelper.SendRequest(HttpMethod.Post, endpoint, accessToken, new plannerStub(plan, destinationTeamID));
            //get the created Bucket
            var newBucket = JsonConvert.DeserializeObject<plannerBucket>(await sendPlanResponse.Content.ReadAsStringAsync());
            bucketIdMap[bucket.id] = newBucket.id; //so we can send the tasks to our new bucket

        }

        //create tasks in the new team
        foreach (plannerTask task in inTasks) {
            endpoint = $"{GraphRootUri}/planner/tasks";
            task.bucketId = bucketIdMap[task.bucketId];
            task.planId = newPlan.id;
            var sendBucketResponse = await ServiceHelper.SendRequest(HttpMethod.Post, endpoint, accessToken, task);

        }

        //put planner in appropriate tab - stuck at this point
        endpoint = $"{GraphRootUri}/teams/{newPlan.id}/channels/";

    }
}

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

Команда назначения сейчас является клоном первой команды.

Мое лучшее предположение - использовать «контексты» планировщика, но я не могу найти никакой документации по этому вопросу.Кто-нибудь знает, как с этим справиться?редактировать.Я пытался использовать контексты безрезультатно, я официально потерян.

Кстати, если кто-то нашел репозиторий кода, который делает полный клон сайтов Microsoft Teams, который я был слишком толстым, чтобы найти, пожалуйстадайте мне знать

Всем, кто уделил моему вопросу достаточно времени, чтобы прочитать это далеко, большое спасибо за вашу помощь, любой совет был бы оценен в этот момент.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Поиск позиции вкладки

Вы можете определить положение вкладки канала, проанализировав результаты, возвращаемые /v1.0/teams/{group-id}/channels/{channel-id}/tabs.Полученный массив teamsTab будет содержать вкладки в обратном порядке (первая вкладка последняя):

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#teams('{{id}}')/channels('{id}')/tabs",
  "value": [
    {
      "id": "{id}",
      "displayName": "Tab #2",
      "webUrl": "{url}",
      "configuration": {
        "entityId": null,
        "contentUrl": null,
        "removeUrl": null,
        "websiteUrl": null,
        "wikiTabId": 1,
        "wikiDefaultTab": true,
        "hasContent": false
      }
    },
    {
      "id": "{id}",
      "displayName": "Tab #1",
      "webUrl": "{url}",
      "configuration": {
        "entityId": "{plan-id}",
        "contentUrl": "{url}",
        "removeUrl": "{url}",
        "websiteUrl": "{url}",
        "dateAdded": "2019-02-04T17:38:11.079Z"
      }
    }
  ]
}

Имейте в виду, что беседы и файлы на самом деле не являются вкладками, и их положение фиксировано,Таким образом, ни один из них не будет отображаться в результате /tabs.Ваш код должен предполагать, что ваш порядок вкладок фактически начинается с 3-й позиции вкладки в пользовательском интерфейсе.

Установка позиции вкладки

Чтобы дублировать порядок закрепленных вкладок, вам нужно добавить вкладки в порядкеты хочешь их.Если вам нужно изменить порядок существующих вкладок, вам нужно сначала удалить их и воссоздать их в нужном вам порядке.

0 голосов
/ 04 февраля 2019

В интеграции Команды и Планировщик ссылки на планы поддерживаются командами, поэтому вам лучше всего заглянуть туда, чтобы найти где-нибудь идентификатор плана.К сожалению, я не знаком с этими API.

В Planner есть два необязательных свойства, которые помогают вернуться к командам.Во-первых, это контекст плана, который содержит свойство displayNameSegments.Это должно соответствовать структуре названия команды / канала.Второе - это contextDetails в PlanDetails, который содержит URL для команды.Эти свойства доступны только в бета-версии.Они не гарантированы для заполнения и могут быть неточными.

...