public void SaveMasterAsTemplate(SaveAsTemplateQuery query) { DisableCaching(); try { // set flag IsTemplate for Master roster var _confService = new RosterConfigService(); var _dataService = new RosterDataService(); _dataService.SetAsTemplate(query.MasterId); // init filter by MasterRosterId var plannedRostersList = _confService.GetList(TableIDs.PLANNED_ROSTERS); var queryPar = new QueryParams(); var masterRosterFld = plannedRostersList.ListMetadataFields.FirstOrDefault(item => item.InternalName == FieldNames.MASTER_ROSTER_ID); queryPar.WhereCriteria.Add(new Tuple <ListMetadataField, CompareType, ConcateOperator, object, string>(masterRosterFld, CompareType.Equal, ConcateOperator.And, query.MasterId, null)); // get Planned rosters by MasterRosterId var plannedRosters = _dataService.ListRosterEvents(plannedRostersList.Id, queryPar); // limit access to Planned rosters inside Template int rosterAdminGroupId = new RoleService().GetGroupIdForRole(Roster.Presentation.Constants.Role.RosterAdmins, SPContext.Current.Web); foreach (RosterEvent re in plannedRosters) { List <AccessControlItem> reRights = _confService.GetItemAccessControls(re.Id); // clear old if (reRights != null && reRights.Any()) { reRights.ForEach(ipItm => _confService.DeleteAccessControlItem(ipItm.Id)); } // add 'Edit' to RosterAdmins _confService.SaveAccessControlItem(new AccessControlItem { AccessRight = (int)AccessRight.Write, Id = Guid.NewGuid(), ItemId = re.Id, ListMetadataId = plannedRostersList.Id, TrusteeId = rosterAdminGroupId }); // add 'Read' to Everyone _confService.SaveAccessControlItem(new AccessControlItem { AccessRight = (int)AccessRight.Read, Id = Guid.NewGuid(), ItemId = re.Id, ListMetadataId = plannedRostersList.Id, TrusteeId = RoleService.ACCOUNT_ID_EVERYONE }); } } catch (Exception ex) { HandleException(ex); } }