Получить листы, принадлежащие к определенной группе

Как узнать, принадлежит ли лист определенной группе?

Например, у нас есть группа, которая называется RPR, и когда мы создаем листы, мы делимся ими с другими пользователями в нашей организации, применяя эту группу к листу.

// Get all sheets modified within last day    
SmartSheetList = smartsheet
        .SheetResources
        .ListSheets(new SheetInclusion[] { SheetInclusion.OWNER_INFO }, new PaginationParameters(true, null, null))
        .Data
        .Where(d => d.ModifiedAt.Value.Date >= DateTime.Now.AddDays(-1).Date)
        .ToList();

// Get organization sheets
var orgUserSheets = smartsheet.UserResources.SheetResources.ListSheets(true).Data.ToList();

// get specific group
var group = smartsheet.GroupResources.ListGroups(null).Data.Where(grp => grp.Id == some-id-here).First();

С помощью приведенного выше кода я могу видеть, принадлежит ли лист организации, но не могу сказать, принадлежит ли этот лист определенной группе. Любая помощь будет оценена.

1 ответ

Решение

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

Чтобы получить листы, которые совместно используются с определенной группой напрямую или через рабочее пространство, вы можете использовать код, подобный приведенному ниже (в этом примере используется LINQ).

SmartsheetClient cl = new SmartsheetBuilder()
    .SetAccessToken(ACCESS_TOKEN)
    .Build();

var includeAll = new PaginationParameters(true, null, null);
Console.WriteLine("Looking for group " + SOUGHT_GROUP_NAME);
var groups = cl.GroupResources.ListGroups(includeAll);
var soughtGroup = groups.Data.Single((group) => group.Name == SOUGHT_GROUP_NAME);
Console.WriteLine("Found group ID {0} for group {1}.", soughtGroup != null ? soughtGroup.Id.ToString() : "NULL", SOUGHT_GROUP_NAME);
if (soughtGroup == null)
    throw new ArgumentException("Group not found");

var sheets = cl.SheetResources.ListSheets(null, includeAll);
Console.WriteLine("Querying through {0} sheets...", sheets.Data.Count);
var sheetsSharedWithGroup = from sheet in sheets.Data
                            from share in cl.SheetResources.ShareResources.ListShares(sheet.Id.Value, includeAll, ShareScope.Workspace).Data
                            where share.GroupId == soughtGroup.Id
                            select new { Sheet = sheet, Share = share };

var found = sheetsSharedWithGroup.ToList();
Console.WriteLine("Found {0} sheets shared with group {1}.", found.Count, SOUGHT_GROUP_NAME);
found.ForEach(foundSheet => Console.WriteLine("Sheet {0} shared with {1} ({2})", foundSheet.Sheet.Name, foundSheet.Share.Name, foundSheet.Share.Type));

ПРИМЕЧАНИЕ. Я отправил запрос на извлечение для добавления поддержки определенной перегрузки ListShares, которая также возвращает общие ресурсы рабочей области. Это доступно в REST API, но еще не было в C# SDK.

ПРИМЕЧАНИЕ. Приведенный выше код еще не учитывает достопримечательности Smartsheet. Это должно быть возможно с использованием соответствующего REST API для достопримечательностей (т. Е. List Sights, List Sight Shares, но я пока не думаю, что это в C# SDK).

Другие вопросы по тегам