/// <summary> /// Get the instance of a Business Data Connectivity entity /// </summary> /// <param name="site"></param> /// <param name="nameSpace"></param> /// <param name="entityName"></param> /// <param name="entityId"></param> /// <returns></returns> private static IEntityInstance GetEntityInstance(SPSite site, string nameSpace, string entityName, string entityId) { //Use the scope of the currently opened site SPServiceContext ctx = SPServiceContext.GetContext(site); SPServiceContextScope scope = new SPServiceContextScope(ctx); //Get the BDC service of the local SP farm BdcService service = SPFarm.Local.Services.GetValue <BdcService>(); IMetadataCatalog catalog = service.GetDatabaseBackedMetadataCatalog(ctx); IEntity entity = catalog.GetEntity(nameSpace, entityName); ILobSystemInstance LobSysteminstance = entity.GetLobSystem().GetLobSystemInstances()[0].Value; IEntityInstance entInstance = null; //Loop through the methods defined in the LOB foreach (KeyValuePair <string, IMethod> method in entity.GetMethods()) { IMethodInstance methodInstance = method.Value.GetMethodInstances()[method.Key]; //Get the Specific Finder method of the LOB if (methodInstance.MethodInstanceType == MethodInstanceType.SpecificFinder) { //Find the record with the ID from the datasource Microsoft.BusinessData.Runtime.Identity id = new Microsoft.BusinessData.Runtime.Identity(entityId); entInstance = entity.FindSpecific(id, entity.GetLobSystem().GetLobSystemInstances()[0].Value); } } return(entInstance); }
internal static OutputQueue UserHasAccess(out bool hasAccess, string accountName = null) { var outputQueue = new OutputQueue(); hasAccess = false; if (string.IsNullOrEmpty(accountName)) { accountName = WindowsIdentity.GetCurrent().Name; } var mossContext = SPServiceContext.GetContext(SPServiceApplicationProxyGroup.Default, new SPSiteSubscriptionIdentifier(Guid.Empty)); using (var scope = new SPServiceContextScope(mossContext)) { SPIisWebServiceApplication app = null; outputQueue.Add(GetUserProfileApplication(out app)); if (app != null) { var accessControl = app.GetAccessControl(); if (accessControl != null) { var accessRules = accessControl.GetAccessRules(); foreach (var rule in accessRules) { if (rule.Name.ToUpperInvariant().EndsWith(accountName.ToUpperInvariant(), StringComparison.CurrentCultureIgnoreCase)) { hasAccess = rule.AllowedRights == SPIisWebServiceApplicationRights.FullControl; if (hasAccess) { break; } } } } } } return(outputQueue); }
internal static OutputQueue EnsureUserAccess(string accountName = null) { var outputQueue = new OutputQueue(); if (string.IsNullOrEmpty(accountName)) { accountName = WindowsIdentity.GetCurrent().Name; } var mossContext = SPServiceContext.GetContext(SPServiceApplicationProxyGroup.Default, new SPSiteSubscriptionIdentifier(Guid.Empty)); using (var scope = new SPServiceContextScope(mossContext)) { SPIisWebServiceApplication app = null; outputQueue.Add(GetUserProfileApplication(out app)); if (app != null) { var isAdmin = false; outputQueue.Add(UserIsAdministrator(out isAdmin, accountName)); if (!isAdmin) { var aac = app.GetAdministrationAccessControl(); aac.AddAccessRule(new SPAclAccessRule <SPCentralAdministrationRights>(new NTAccount(accountName), SPCentralAdministrationRights.FullControl)); app.SetAdministrationAccessControl(aac); } var hasAccess = false; outputQueue.Add(UserHasAccess(out hasAccess, accountName)); if (!hasAccess) { var ac = app.GetAccessControl(); ac.AddAccessRule(new SPAclAccessRule <SPIisWebServiceApplicationRights>(new NTAccount(accountName), SPIisWebServiceApplicationRights.FullControl)); app.SetAccessControl(ac); } app.Update(); } } return(outputQueue); }
private static bool ProcessWorkMatterDocuments() { inProgress = true; bool success = false; try { foreach(string libraryName in Settings.Default.LibrariesToProcess) { using (SPSite site = new SPSite(ConfigurationManager.AppSettings["SiteUrl"], SPUserToken.SystemAccount)) { Console.WriteLine("Successfully connected to site at " + site.Url); using (SPWeb web = site.OpenWeb()) { Console.WriteLine("Successfully opened SPWeb at " + web.Url); SPList workMatterDocumentLibrary = web.Lists[libraryName]; SPQuery query = new SPQuery(); query.ViewXml = Util.GetViewQuery(); query.QueryThrottleMode = SPQueryThrottleOption.Override; do { SPListItemCollection items = workMatterDocumentLibrary.GetItems(query); int totalItems = items.Count; Console.WriteLine("Processing items " + (query.ListItemCollectionPosition != null ? query.ListItemCollectionPosition.ToString() : "0") + " to " + query.ListItemCollectionPosition + totalItems); query.ListItemCollectionPosition = items.ListItemCollectionPosition; for (int i = 0; i < items.Count; i++) { SPListItem item = items[i]; try { web.AllowUnsafeUpdates = true; Records.BypassLocks(item, delegate (SPListItem delegateItem) { using (DisabledEventsScope scope = new DisabledEventsScope()) { SPBusinessDataField field = delegateItem.Fields[Resource.FieldBCSWorkMatterDocument] as SPBusinessDataField; string documentId = Util.GetDocumentId(delegateItem); using (SPServiceContextScope ctxScope = new SPServiceContextScope(SPServiceContext.GetContext(site))) { try { Util.SetBCSField(delegateItem, field, documentId, "GetWorkMatterDocumentBySPID"); Util.ClearFields(item); if (delegateItem.Fields.ContainsField(Resource.FieldBCSWorkMatterDocumentStatus) && delegateItem[Resource.FieldBCSWorkMatterDocumentStatus] != null && delegateItem[Resource.FieldBCSWorkMatterDocumentStatus].ToString() == "Final") { Util.LockItem(delegateItem); } } catch (Exception ex) { // Swallow the error at this level } } Console.WriteLine("Document updated. ItemId=" + delegateItem.ID); } }); } catch (Exception ex) { Util.LogError("Error updating document: " + ex.Message); Console.WriteLine("Error updating document: " + ex.Message); } finally { web.AllowUnsafeUpdates = false; } } } while (query.ListItemCollectionPosition != null); } } } success = true; } catch (Exception ex) { success = false; Util.LogError("Error in ProcessWorkMatterDocuments(): " + ex.Message); Console.WriteLine("Error in ProcessWorkMatterDocuments(): " + ex.Message); } inProgress = false; return success; }