2016-04-19 7 views
1

Wie kann ich feststellen, ob ein Blatt zu einer bestimmten Gruppe gehört?Abrufen von Blättern, die zu einer bestimmten Gruppe gehören

Zum Beispiel haben wir eine Gruppe namens RPR und wenn wir Blätter erstellen, teilen wir sie mit anderen Benutzern in unserer Organisation, indem wir die Gruppe auf das Blatt anwenden.

// 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(); 

Mit dem obigen Code ich sehen kann, wenn ein Blatt zu einer Organisation gehört, aber ich kann nicht sagen, ob das Blatt zu einer bestimmten Gruppe gehört. Jede Hilfe wäre willkommen.

Antwort

1

Sie benötigen eine weitere API-Anforderung für jedes Blatt, um die Liste der Freigaben auf dem Blatt abzurufen. Denken Sie daran, dass Blätter direkt auf dem Blatt oder über einen Arbeitsbereich geteilt werden können.

Um Blätter zu erhalten, die für eine bestimmte Gruppe direkt oder über einen Arbeitsbereich freigegeben sind, können Sie einen Code wie den folgenden verwenden (basierend auf LINQ für dieses Beispiel).

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)); 

HINWEIS: Ich a pull request vorgelegt Unterstützung für die spezifischen ListShares Überlastung hinzufügen, die zu Arbeitsbereich Aktien zurückgibt. Dies ist in der REST-API verfügbar, aber noch nicht im C# SDK.

HINWEIS: Der obige Code berücksichtigt Smartsheet Sights noch nicht. Es sollte möglich sein, die entsprechende REST-API für Sights zu verwenden (d. H. List Sights, List Sight Shares, aber ich glaube nicht, dass dies bereits im C# SDK enthalten ist.

Verwandte Themen