protected void Page_Load(object sender, EventArgs e) { RedirectToLoginIfNecessary(); if (ContactToEdit == null) { RecordNotFoundError.Visible = true; ContactInformation.Visible = false; return; } var parentAccount = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : XrmContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id); var accountAccessPermissionsForParentAccount = parentAccount == null ? new List <Entity>() : XrmContext.GetAccountAccessByContact(Contact).Where(a => a.GetAttributeValue <EntityReference>("adx_accountid") != null && a.GetAttributeValue <EntityReference>("adx_accountid").Equals(parentAccount.ToEntityReference())).ToList(); var contactAccessPermissions = parentAccount == null ? new List <Entity>() : XrmContext.GetContactAccessByContact(Contact).ToList(); var contactAccessPermissionsForParentAccount = parentAccount == null ? new List <Entity>() : contactAccessPermissions.Where(c => c.GetAttributeValue <EntityReference>("adx_accountid") != null && c.GetAttributeValue <EntityReference>("adx_accountid").Equals(parentAccount.ToEntityReference()) && c.GetAttributeValue <OptionSetValue>("adx_scope").Value == (int)Enums.ContactAccessScope.Account).ToList(); var canEditContacts = false; var canReadContacts = false; var canManagePermissions = false; if (parentAccount == null) { ContactInformation.Visible = false; NoParentAccountError.Visible = true; return; } if (!contactAccessPermissions.Any()) { ContactInformation.Visible = false; NoContactAccessPermissionsRecordError.Visible = true; return; } if (!contactAccessPermissionsForParentAccount.Any()) { ContactInformation.Visible = false; NoContactAccessPermissionsForParentAccountError.Visible = true; return; } foreach (var access in contactAccessPermissionsForParentAccount) { if (access.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false)) { canEditContacts = true; canReadContacts = true; } if (access.GetAttributeValue <bool?>("adx_read").GetValueOrDefault(false)) { canReadContacts = true; } } foreach (var access in accountAccessPermissionsForParentAccount) { if (access.GetAttributeValue <bool?>("adx_managepermissions").GetValueOrDefault(false)) { canManagePermissions = true; } } if (!canReadContacts) { ContactInformation.Visible = false; return; } if (!canEditContacts) { ContactEditFormView.Visible = false; ContactReadOnlyFormView.Visible = true; ContactAccessWritePermissionDeniedMessage.Visible = true; } ManagePermissionsButton.Visible = canManagePermissions; var formViewDataSource = new CrmDataSource { ID = "WebFormDataSource", CrmDataContextName = ContactEditFormView.ContextName }; var fetchXml = string.Format("<fetch mapping='logical'><entity name='{0}'><all-attributes /><filter type='and'><condition attribute = '{1}' operator='eq' value='{{{2}}}'/></filter></entity></fetch>", "contact", "contactid", ContactToEdit.GetAttributeValue <Guid>("contactid")); formViewDataSource.FetchXml = fetchXml; ContactInformation.Controls.Add(formViewDataSource); ContactEditFormView.DataSourceID = "WebFormDataSource"; ContactReadOnlyFormView.DataSourceID = "WebFormDataSource"; }