Esempio n. 1
0
        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";
        }