/// <summary> /// Helper function to prevent GetPersonForEdit from getting crazy long. Given a list of Rock.Client.GroupMember, /// this gets the all families (as Rock.Client.Group) for each GroupMember. /// </summary> static void GroupMembersToFamilyGroups(Rock.Client.Person refreshedPerson, List <Rock.Client.GroupMember> groupMembers, PersonEditResponseDelegate response) { // first, we need to get the families for each group member int groupMembersResolved = 0; List <Rock.Client.Group> groupFamilies = new List <Rock.Client.Group>( ); foreach (Rock.Client.GroupMember member in groupMembers) { RockApi.Get_FamiliesOfPerson(member.PersonId, string.Empty, delegate(HttpStatusCode statusCode, string statusDescription, List <Rock.Client.Group> groups) { if (Rock.Mobile.Network.Util.StatusInSuccessRange(statusCode)) { // serialize the responses on the UI thread so we can be sure it's all thread safe Rock.Mobile.Threading.Util.PerformOnUIThread( delegate { // first, add the returned groups to our global list. foreach (Rock.Client.Group group in groups) { // make sure we don't already have this group in our list Rock.Client.Group resultGroup = groupFamilies.Where(g => g.Id == group.Id).FirstOrDefault( ); if (resultGroup == null) { groupFamilies.Add(group); } } // now see if we're done waiting for all responses. groupMembersResolved++; if (groupMembersResolved == groupMembers.Count) { GroupsToFamilies(groupFamilies, refreshedPerson, response); } }); } // if any of them fail, then fail. else { response(null, null); } }); } }
public static void GetFamiliesOfPerson(Rock.Client.Person person, HttpRequest.RequestResult <List <Rock.Client.Group> > resultHandler) { string oDataFilter = "?$expand=GroupType,Campus,Members/GroupRole,GroupLocations/Location,GroupLocations/GroupLocationTypeValue,GroupLocations/Location/LocationTypeValue"; RockApi.Get_FamiliesOfPerson(person.Id, oDataFilter, resultHandler); }