【问题标题】:Get sheets belonging to a specific group获取属于特定组的工作表
【发布时间】:2016-04-19 23:35:10
【问题描述】:

如何判断工作表是否属于某个组?

例如,我们有一个名为 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();

通过上面的代码,我可以查看工作表是否属于某个组织,但我无法判断该工作表是否属于某个组。任何帮助将不胜感激。

【问题讨论】:

    标签: smartsheet-api smartsheet-c#-sdk-v2


    【解决方案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));
    

    注意:我提交了a pull request 以添加对返回工作区共享的特定 ListShares 重载的支持。这在 REST API 中可用,但在 C# SDK 中尚不可用。

    注意:上面的代码还没有考虑到Smartsheet Sights。应该可以为 Sights 使用相应的 REST API(即List SightsList Sight Shares,但我认为 C# SDK 中还没有。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2022-07-16
      相关资源
      最近更新 更多