예제 #1
0
        public void Execute(LocalPluginContext localcontext)
        {
            var service          = localcontext.OrganizationService;
            var inputparameters  = localcontext.PluginExecutionContext.InputParameters;
            var outputparameters = localcontext.PluginExecutionContext.OutputParameters;

            var xrmcontext = new XrmContext(service);

            var settingname = inputparameters["SettingName"] as string;

            var appname = inputparameters["AppName"] as string;

            //default values
            outputparameters["Exists"]      = false;
            outputparameters["ValueString"] = string.Empty;


            var definition = xrmcontext.GetSettingDefinitionFor(settingname);

            if (definition != null)
            {
                outputparameters["Exists"] = true;

                //Error handling
                if (!string.IsNullOrEmpty(appname))
                {
                    var appmodule = xrmcontext.GetAppModuleByUniqueName(appname);
                    if (appmodule == null)
                    {
                        throw new InvalidPluginExecutionException($"App with name {appname} doesn't exists");
                    }
                }

                // use OOB RetrieveSEtting function
                var settingdetail = service.RetrieveSetting(settingname, appname);

                outputparameters["ValueString"] = settingdetail.Value;

                switch (definition.DataType)
                {
                case settingdefinition_datatype.Boolean:

                    outputparameters["ValueBool"] = settingdetail.Value.ToLower() == "true";
                    break;

                case settingdefinition_datatype.Number:
                    outputparameters["ValueDecimal"] = decimal.Parse(settingdetail.Value);

                    break;
                }

                outputparameters["IsOverridable"] = definition.IsOverridable ?? false;

                outputparameters["Type"]     = new OptionSetValue((int)definition.DataType);
                outputparameters["TypeName"] = service.GetOptionsetText(SettingDefinition.EntityLogicalName, "datatype", (int)definition.DataType);

                outputparameters["ReleaseLevel"]     = new OptionSetValue((int)definition.ReleaseLevel);
                outputparameters["ReleaseLevelName"] = service.GetOptionsetText(SettingDefinition.EntityLogicalName, "releaselevel", (int)definition.ReleaseLevel);

                outputparameters["OverridableLevel"]     = new OptionSetValue((int)definition.OverridableLevel);
                outputparameters["OverridableLevelName"] = service.GetOptionsetText(SettingDefinition.EntityLogicalName, "overridablelevel", (int)definition.OverridableLevel);
            }
        }
        protected void OnItemInserted(object sender, CrmEntityFormViewInsertedEventArgs e)
        {
            var opportunity = XrmContext.CreateQuery("opportunity").First(o => o.GetAttributeValue <Guid>("opportunityid") == e.EntityId);

            var opportunityProductsFromLead = opportunity.GetAttributeValue <string>("adx_opportunityproductsfromlead");

            var productsList = new List <Entity>();

            if (!string.IsNullOrEmpty(opportunityProductsFromLead))
            {
                var products = XrmContext.CreateQuery("product");

                var words = opportunityProductsFromLead.Split(',');

                foreach (var word in words)
                {
                    foreach (var product in products)
                    {
                        if (product.GetAttributeValue <string>("name").Trim().ToUpper() == word.Trim().ToUpper())
                        {
                            productsList.Add(product);
                        }
                    }
                }
            }

            foreach (var leadProduct in productsList)
            {
                if (!XrmContext.IsAttached(leadProduct))
                {
                    XrmContext.Attach(leadProduct);
                }

                XrmContext.AddLink(opportunity, new Relationship("adx_opportunity_product"), leadProduct);
            }

            opportunity.SetAttributeValue("adx_referencecode", GetOpportunityReferenceCode());

            var salesStage = opportunity.GetAttributeValue <OptionSetValue>("salesstagecode") == null ? 0 : opportunity.GetAttributeValue <OptionSetValue>("salesstagecode").Value;

            var response = (RetrieveAttributeResponse)ServiceContext.Execute(new RetrieveAttributeRequest
            {
                EntityLogicalName = "opportunity",
                LogicalName       = "salesstagecode"
            });

            var picklist = response.AttributeMetadata as PicklistAttributeMetadata;

            if (picklist == null)
            {
                return;
            }

            foreach (var option in picklist.OptionSet.Options)
            {
                if (option != null && option.Value != null && option.Value.Value == salesStage)
                {
                    opportunity.SetAttributeValue("stepname", option.Label.GetLocalizedLabelString());
                }
            }

            var leadType = XrmContext.CreateQuery("adx_leadtype").FirstOrDefault(lt => lt.GetAttributeValue <string>("adx_name") == "Partner Created");

            if (leadType != null)
            {
                opportunity.SetAttributeValue("adx_leadtypeid", leadType.ToEntityReference());
            }

            XrmContext.UpdateObject(opportunity);

            XrmContext.SaveChanges();

            var url = GetUrlForRequiredSiteMarker("Accepted Opportunities");

            Response.Redirect(url);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfAnonymous();

            if (Page.IsPostBack)
            {
                return;
            }

            var opportunityPermissions = XrmContext.GetOpportunityAccessByContact(Contact).ToList();

            if (!opportunityPermissions.Any())
            {
                NoOpportunityPermissionsRecordError.Visible = true;

                OpportunityDetailsPanel.Visible = false;

                return;
            }

            bool createAccess = false;

            foreach (var access in opportunityPermissions)
            {
                var opportunityCreateAccess = (access != null && access.GetAttributeValue <bool?>("adx_create").GetValueOrDefault(false));

                if (opportunityCreateAccess)
                {
                    createAccess = true;
                }
            }

            if (!createAccess)
            {
                OpportunityPermissionsError.Visible = true;

                OpportunityDetailsPanel.Visible = false;

                return;
            }

            var channelPermission               = ServiceContext.GetChannelAccessByContact(Contact);
            var channelCreateAccess             = (channelPermission != null && channelPermission.GetAttributeValue <bool?>("adx_create").GetValueOrDefault(false));
            var parentCustomerAccount           = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : ServiceContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id);
            var validAcccountClassificationCode = parentCustomerAccount != null && parentCustomerAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode") != null && parentCustomerAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode").Value == (int)CustomerManagement.Enums.AccountClassificationCode.Partner;

            if (channelPermission == null)
            {
                NoChannelPermissionsRecordError.Visible = true;

                CreateCustomerButton.Visible = false;
            }
            else
            {
                if (!channelCreateAccess)
                {
                    ChannelPermissionsError.Visible = true;
                }
                else
                {
                    if (parentCustomerAccount == null)
                    {
                        NoParentAccountError.Visible = true;
                    }
                    else
                    {
                        ParentAccountClassificationCodeError.Visible = !validAcccountClassificationCode;
                    }
                }

                if ((!channelCreateAccess) || parentCustomerAccount == null || !validAcccountClassificationCode)
                {
                    CreateCustomerButton.Visible = false;
                }
            }

            var partnerAccounts = ServiceContext.CreateQuery("account").Where(a => a.GetAttributeValue <EntityReference>("msa_managingpartnerid") != null && a.GetAttributeValue <EntityReference>("msa_managingpartnerid").Equals(parentCustomerAccount.ToEntityReference())).ToList();

            var accounts = partnerAccounts
                           .Where(a => a.GetAttributeValue <EntityReference>("primarycontactid") != null)
                           .OrderBy(a => a.GetAttributeValue <string>("name"))
                           .Select(a => new ListItem(a.GetAttributeValue <string>("name"), a.GetAttributeValue <Guid>("accountid").ToString())).ToList();

            if (!accounts.Any())
            {
                Account_dropdown.Enabled = false;

                if (!partnerAccounts.Any())
                {
                    NoManagingPartnerCustomerAccountsMessage.Visible = true;
                }
                else
                {
                    NoPrimaryContactOnManagingPartnerCustomerAccountsMessage.Visible = true;

                    ManageCustomersButton.Visible = true;
                }
            }
            else
            {
                NoManagingPartnerCustomerAccountsMessage.Visible = false;

                NoPrimaryContactOnManagingPartnerCustomerAccountsMessage.Visible = false;

                Account_dropdown.DataSource = accounts;

                Account_dropdown.DataTextField = "Text";

                Account_dropdown.DataValueField = "Value";

                Account_dropdown.DataBind();

                if (ParentCustomerAccount != null)
                {
                    Account_dropdown.ClearSelection();

                    foreach (ListItem li in Account_dropdown.Items)
                    {
                        Guid id;

                        if (Guid.TryParse(li.Value, out id) && id == ParentCustomerAccount.GetAttributeValue <Guid>("accountid"))
                        {
                            li.Selected = true;
                        }
                    }
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfAnonymous();
            RedirectToLoginIfNecessary();

            service = new OrganizationService("Xrm");

            var portalContext = Microsoft.Xrm.Portal.Configuration.PortalCrmConfigurationManager.CreatePortalContext();

            var contact = portalContext.User;

            //var redemreqs = Enumerable.Empty<Entity>();
            //var searchQuery = Request["query"];
            //Guid giftid;

            string WebUrl = WebConfigurationManager.ConnectionStrings["Xrm"].ConnectionString;
            int    index  = WebUrl.IndexOf("=") + 1;
            int    index2 = WebUrl.IndexOf(";");

            WebUrl = WebUrl.Substring(index, index2 - index);

            var memberships =
                from m in XrmContext.CreateQuery("adx_membership")
                join l in XrmContext.CreateQuery("new_loyaltyprogram") on m.GetAttributeValue <EntityReference>("new_loyaltyprogram").Id equals
                l.GetAttributeValue <Guid>("new_loyaltyprogramid")
                join t in XrmContext.CreateQuery("new_tier") on m.GetAttributeValue <EntityReference>("new_membershiplevel").Id equals
                t.GetAttributeValue <Guid>("new_tierid")
                    where m.GetAttributeValue <EntityReference>("new_loyaltyprogram") != null
                    where
                m.GetAttributeValue <EntityReference>("adx_administrativecontactid").Id == contact.Id
                select new
            {
                membershipid = m.Id,
                EntityImage  = "data:image/png;base64," + Convert.ToBase64String(l.GetAttributeValue <byte[]>("entityimage")),
                LPName       = l.GetAttributeValue <string>("new_name"),
                Tier         = t.GetAttributeValue <string>("new_name"),
                PointBalance = Convert.ToInt32(m.GetAttributeValue <decimal?>("new_pointbalance").GetValueOrDefault(0)).ToString("N2")
            };

            _memberships = EnumerableExtensions.CopyToDataTable(memberships);

            //new_new_loyaltyprogram_adx_membership_LoyaltyProgram

            /*
             * _redemreqs = EnumerableExtensions.CopyToDataTable(redemreqs.Select(redemreq => new
             * {
             *  redemreqid = redemreq.GetAttributeValue<Guid>("new_redemptionrequestid"),
             *  //Image = gift.GetRelatedEntity(ServiceContext, new Relationship("new_gift_Annotations")) != null ? gift.GetRelatedEntity(ServiceContext, new Relationship("new_gift_Annotations")).GetAttributeValue<string>("documentbody") : " ",
             *  //EntityImage = WebUrl + redemreq.GetAttributeValue<string>("entityimage_url"),
             *  //EntityImage = WebUrl + redemreq.GetRelatedEntity(ServiceContext, new Relationship("new_new_gift_new_redemptionrequest_Gift")) != null ? redemreq.GetRelatedEntity(ServiceContext, new Relationship("new_new_gift_new_redemptionrequest_Gift")).GetAttributeValue<string>("entityimage_url") : " ",
             *  Code = redemreq.GetAttributeValue<string>("new_name"),
             *  GiftName = redemreq.GetRelatedEntity(ServiceContext, "new_new_gift_new_redemptionrequest_Gift") != null ? redemreq.GetRelatedEntity(ServiceContext, "new_new_gift_new_redemptionrequest_Gift").GetAttributeValue<string>("new_name") : " ",
             * }));//.OrderBy(gift => gift.GiftName));
             */
            _memberships.Columns["EntityImage"].ColumnName  = "Loyalty Image";
            _memberships.Columns["LPName"].ColumnName       = "Loyalty Program Name";
            _memberships.Columns["Tier"].ColumnName         = "Membership Tier";
            _memberships.Columns["PointBalance"].ColumnName = "Points Balance";

            MembershipListView.DataKeyNames = new[] { "membershipid" };
            MembershipListView.DataSource   = _memberships;
            MembershipListView.DataBind();
        }
예제 #5
0
 public static EnvironmentVariableDefinition GetEnvironmentVariableDefinition(this XrmContext xrmcontext, string key)
 => xrmcontext.EnvironmentVariableDefinitionSet.SingleOrDefault(e => e.SchemaName == key);
        protected void Page_Init(object sender, EventArgs e)
        {
            if (ServiceRequestRollupRecord != null)
            {
                var serviceRequestTypeReference =
                    ServiceRequestRollupRecord.GetAttributeValue <EntityReference>("adx_servicerequesttype");

                var serviceRequestType =
                    XrmContext.CreateQuery("adx_servicerequesttype").FirstOrDefault(
                        srt => srt.GetAttributeValue <Guid>("adx_servicerequesttypeid") == serviceRequestTypeReference.Id);

                var entityName = serviceRequestType.GetAttributeValue <string>("adx_entityname");

                RegardingContactFieldName = serviceRequestType.GetAttributeValue <string>("adx_regardingcontactfieldname");

                var trueMetadataRequest = new RetrieveEntityRequest
                {
                    LogicalName   = entityName,
                    EntityFilters = EntityFilters.Attributes
                };

                var trueMetadataResponse = (RetrieveEntityResponse)XrmContext.Execute(trueMetadataRequest);

                var primaryFieldName = trueMetadataResponse.EntityMetadata.PrimaryIdAttribute;

                var entityId = ServiceRequestRollupRecord.GetAttributeValue <string>("adx_entityid");

                var trueRecordId = Guid.Parse(entityId);

                var trueRecord =
                    XrmContext.CreateQuery(entityName).FirstOrDefault(r => r.GetAttributeValue <Guid>(primaryFieldName) == trueRecordId);

                ServiceRequest = trueRecord;



                var regardingContact = ServiceRequest.GetAttributeValue <EntityReference>(RegardingContactFieldName);

                if (regardingContact == null || Contact == null || regardingContact.Id != Contact.Id)
                {
                    AddANote.Enabled      = false;
                    AddANote.Visible      = false;
                    AddNoteInline.Visible = false;
                    AddNoteInline.Enabled = false;

                    RenderCrmEntityFormView(entityName, primaryFieldName, serviceRequestType, trueRecordId, FormViewMode.ReadOnly);

                    var dataAdapterDependencies =
                        new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: PortalName);
                    var dataAdapter = new AnnotationDataAdapter(dataAdapterDependencies);
                    var annotations = dataAdapter.GetAnnotations(ServiceRequest.ToEntityReference(),
                                                                 new List <Order> {
                        new Order("createdon")
                    }, respectPermissions: false);

                    if (!annotations.Any())
                    {
                        NotesLabel.Visible = false;
                        NotesList.Visible  = false;
                    }

                    NotesList.DataSource = annotations;
                    NotesList.DataBind();
                }
                else
                {
                    RenderCrmEntityFormView(entityName, primaryFieldName, serviceRequestType, trueRecordId, FormViewMode.Edit);

                    var dataAdapterDependencies =
                        new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: PortalName);
                    var dataAdapter = new AnnotationDataAdapter(dataAdapterDependencies);
                    var annotations = dataAdapter.GetAnnotations(ServiceRequest.ToEntityReference(),
                                                                 new List <Order> {
                        new Order("createdon")
                    },
                                                                 privacy: AnnotationPrivacy.Web | AnnotationPrivacy.Private | AnnotationPrivacy.Public, respectPermissions: false);

                    NotesList.DataSource = annotations;
                    NotesList.DataBind();
                }

                if (Request.IsAuthenticated && Contact != null)
                {
                    var dataAdapter = CreateAlertDataAdapter();

                    var hasAlert = dataAdapter.HasAlert(Contact.ToEntityReference());

                    AddAlert.Visible    = !hasAlert;
                    RemoveAlert.Visible = hasAlert;
                }
                else
                {
                    AddAlertLoginLink.Visible = true;
                }

                DisplaySlaDetails(serviceRequestType);
            }
        }
        protected void OpportunityUpdated(object sender, CrmEntityFormViewUpdatedEventArgs e)
        {
            var context = PortalCrmConfigurationManager.CreateServiceContext();

            var opportunity = context.CreateQuery("opportunity").First(o => o.GetAttributeValue <Guid>("opportunityid") == e.Entity.Id);

            var partnerReference = opportunity.GetAttributeValue <EntityReference>("msa_partnerid");

            if (partnerReference == null)
            {
                return;
            }

            var partner = context.CreateQuery("account").First(p => p.GetAttributeValue <Guid>("accountid") == partnerReference.Id);

            if (partner.GetAttributeValue <int?>("adx_numberofopportunitiesaccepted").GetValueOrDefault(0) == 0)
            {
                partner.SetAttributeValue("adx_numberofopportunitiesaccepted", 1);
            }

            var oppnote      = new Entity("adx_opportunitynote");
            var oppnote2     = new Entity("adx_opportunitynote");
            var feedbackrate = (double)(partner.GetAttributeValue <int?>("adx_numberofopportunitieswithfeedback").GetValueOrDefault(0)) / (partner.GetAttributeValue <int?>("adx_numberofopportunitiesaccepted").GetValueOrDefault(1));

            if (UpdatePipelinePhase.Checked)
            {
                context.SetOpportunityStatusAndSave(opportunity, "Open", 0);
                opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.InProgress));
                if (!opportunity.GetAttributeValue <bool?>("adx_feedbackyet").GetValueOrDefault(false))
                {
                    if (!(opportunity.GetAttributeValue <bool?>("adx_partnercreated").GetValueOrDefault(false)))
                    {
                        partner.SetAttributeValue("adx_numberofopportunitieswithfeedback", partner.GetAttributeValue <int?>("adx_numberofopportunitieswithfeedback").GetValueOrDefault(0) + 1);
                        partner.SetAttributeValue("adx_feedbackrate", feedbackrate);
                        opportunity.SetAttributeValue("adx_feedbackyet", true);
                    }
                }

                oppnote.SetAttributeValue("adx_name", PipelinePhase.SelectedItem.Text);
                oppnote.SetAttributeValue("adx_date", DateTime.UtcNow);
                oppnote.SetAttributeValue("adx_description", PipelineUpdateDetails.Text);
            }
            else if (WinOpportunity.Checked)
            {
                context.SetOpportunityStatusAndSave(opportunity, "Won", 0);
                opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.Purchased));
                if (!opportunity.GetAttributeValue <bool?>("adx_feedbackyet").GetValueOrDefault(false))
                {
                    if (!(opportunity.GetAttributeValue <bool?>("adx_partnercreated").GetValueOrDefault(false)))
                    {
                        partner.SetAttributeValue("adx_numberofopportunitieswithfeedback", partner.GetAttributeValue <int?>("adx_numberofopportunitieswithfeedback").GetValueOrDefault(0) + 1);
                        partner.SetAttributeValue("adx_feedbackrate", feedbackrate);
                        opportunity.SetAttributeValue("adx_feedbackyet", true);
                    }
                }

                opportunity.SetAttributeValue("adx_wondate", DateTime.UtcNow);
                var wonSetting = XrmContext.CreateQuery("adx_sitesetting").FirstOrDefault(ss => ss.GetAttributeValue <string>("adx_name") == "Won Opportunity Note");
                var wonNote    = "Won";
                wonNote = (wonSetting != null) ? wonSetting.GetAttributeValue <string>("adx_value") : wonNote;

                oppnote.SetAttributeValue("adx_name", wonNote);
                oppnote.SetAttributeValue("adx_date", DateTime.UtcNow);
                oppnote.SetAttributeValue("adx_description", WonDetails.Text);
            }
            else if (CancelOpportunity.Checked)
            {
                context.SetOpportunityStatusAndSave(opportunity, "Lost", 0);
                opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.Canceled));
                if (!opportunity.GetAttributeValue <bool?>("adx_feedbackyet").GetValueOrDefault(false))
                {
                    if (!(opportunity.GetAttributeValue <bool?>("adx_partnercreated").GetValueOrDefault(false)))
                    {
                        partner.SetAttributeValue("adx_numberofopportunitieswithfeedback", partner.GetAttributeValue <int?>("adx_numberofopportunitieswithfeedback").GetValueOrDefault(0) + 1);
                        partner.SetAttributeValue("adx_feedbackrate", feedbackrate);
                        opportunity.SetAttributeValue("adx_feedbackyet", true);
                    }
                }

                var cancelSetting = XrmContext.CreateQuery("adx_sitesetting").FirstOrDefault(ss => ss.GetAttributeValue <string>("adx_name") == "Cancel Opportunity Note");
                var cancelNote    = "Canceled";
                cancelNote = (cancelSetting != null) ? cancelSetting.GetAttributeValue <string>("adx_value") : cancelNote;

                oppnote.SetAttributeValue("adx_name", cancelNote);
                oppnote.SetAttributeValue("adx_date", DateTime.UtcNow);
                oppnote.SetAttributeValue("adx_description", CancelDetails.Text);
            }
            else if (AddContactCheckBox.Checked)
            {
                var selectedGuid = new Guid(AddContactList.SelectedItem.Value);

                var contact = context.CreateQuery("contact").FirstOrDefault(c => c.GetAttributeValue <Guid>("contactid") == selectedGuid);

                var contactCrossover = opportunity.GetRelatedEntities(context, new Relationship("adx_opportunity_contact")).FirstOrDefault(c => c.GetAttributeValue <Guid>("contactid") == contact.GetAttributeValue <Guid>("contactid"));

                if (contactCrossover == null)
                {
                    context.AddLink(opportunity, new Relationship("adx_opportunity_contact"), contact);

                    oppnote2.SetAttributeValue("adx_name", "Contact Added: " + contact.GetAttributeValue <string>("fullname"));
                    oppnote2.SetAttributeValue("adx_date", DateTime.UtcNow);
                    oppnote2.SetAttributeValue("adx_description", "Contact Added: " + contact.GetAttributeValue <string>("fullname"));

                    context.UpdateObject(contact);
                }

                //var opportunity = OpenOpportunity;
            }
            else if (ReturnToNetwork.Checked)
            {
                context.SetOpportunityStatusAndSave(opportunity, "Lost", 0);
                opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.Returned));

                if (!(opportunity.GetAttributeValue <bool?>("adx_partnercreated").GetValueOrDefault(false)))
                {
                    partner.SetAttributeValue("adx_numberofreturnedopportunities", partner.GetAttributeValue <int?>("adx_numberofreturnedopportunities").GetValueOrDefault(0) + 1);
                    partner.SetAttributeValue("adx_returnrate", (double)partner.GetAttributeValue <int?>("adx_numberofreturnedopportunities").GetValueOrDefault(0) / (partner.GetAttributeValue <int?>("adx_numberofopportunitiesaccepted").GetValueOrDefault(1)));
                }

                var returnSetting = XrmContext.CreateQuery("adx_sitesetting").FirstOrDefault(ss => ss.GetAttributeValue <string>("adx_name") == "Return Opportunity Note");
                var returnNote    = "Returned to Network";
                returnNote = (returnSetting != null) ? returnSetting.GetAttributeValue <string>("adx_value") : returnNote;

                oppnote.SetAttributeValue("adx_name", returnNote);
                oppnote.SetAttributeValue("adx_date", DateTime.UtcNow);
                oppnote.SetAttributeValue("adx_description", ReasonForReturn.SelectedItem.Text);

                //add the OpportunityNote entity
            }

            var calculatePartnerDetailsAction = new Entity("adx_calculatepartnercapacityworkflowaction");

            calculatePartnerDetailsAction.SetAttributeValue("adx_accountid", partner.ToEntityReference());
            var assignedto = opportunity.GetRelatedEntity(context, new Relationship("msa_contact_opportunity"));

            if (!String.IsNullOrEmpty(oppnote.GetAttributeValue <string>("adx_name")))
            {
                oppnote.SetAttributeValue("adx_opportunityid", opportunity.ToEntityReference());
                oppnote.SetAttributeValue("adx_assignedto", assignedto != null ? assignedto.GetAttributeValue <string>("fullname") : string.Empty);
                context.AddObject(oppnote);
            }
            if (!String.IsNullOrEmpty(oppnote2.GetAttributeValue <string>("adx_name")))
            {
                oppnote2.SetAttributeValue("adx_opportunityid", opportunity.ToEntityReference());
                oppnote2.SetAttributeValue("adx_assignedto", assignedto != null ? assignedto.GetAttributeValue <string>("fullname") : string.Empty);
                context.AddObject(oppnote2);
            }
            var oppID = opportunity.Id;

            context.UpdateObject(partner);
            context.UpdateObject(opportunity);
            context.SaveChanges();

            if (!(opportunity.GetAttributeValue <bool?>("adx_partnercreated").GetValueOrDefault(false)))
            {
                context.AddObject(calculatePartnerDetailsAction);
            }

            context.SaveChanges();

            var opp = context.CreateQuery("opportunity").FirstOrDefault(o => o.GetAttributeValue <Guid>("opportunityid") == oppID);

            if (opp != null)
            {
                CurrentlyAssignedToLabel.Text = assignedto != null?assignedto.GetAttributeValue <string>("fullname") : string.Empty;

                PipelinePhaseText.Text = HttpUtility.HtmlEncode(opp.GetAttributeValue <string>("stepname"));
            }

            DisableControlsBasedOnPipelinePhaseAndAccessPermissions();

            BindPipelinePhaseDetails();

            GetLeadHistory();

            GetContactList();

            ConfirmationMessage.Visible = true;
        }
 public Generic_Steps()
 {
     CRM     = new XrmContext();
     service = CRM.FakeXrmContext.GetOrganizationService();
 }
        protected void SaveButton_Click(object sender, EventArgs args)
        {
            foreach (GridViewRow row in NewOpportunitiesList.Rows)
            {
                var dataKey = new Guid(NewOpportunitiesList.DataKeys[row.RowIndex].Value.ToString());

                var cellCount = row.Cells.Count;

                var acceptCell = row.Cells[cellCount - 2];

                var accept = acceptCell.FindControl(dataKey + "_accept") as CheckBox;

                var declineCell = row.Cells[cellCount - 1];

                var decline = declineCell.FindControl(dataKey + "_decline") as CheckBox;

                var opportunity = XrmContext.CreateQuery("opportunity").FirstOrDefault(o => o.GetAttributeValue <Guid>("opportunityid") == dataKey);

                if (SavedOpportunities.Contains(dataKey.ToString()) ||
                    (!accept.Checked && !decline.Checked) || (accept.Checked && decline.Checked))
                {
                    continue;
                }

                var partnerReference = opportunity.GetAttributeValue <EntityReference>("msa_partnerid");

                if (partnerReference == null)
                {
                    continue;
                }

                var partner = XrmContext.CreateQuery("account").First(a => a.GetAttributeValue <Guid>("accountid") == partnerReference.Id);

                var oppPermissions = XrmContext.GetOpportunityAccessByContactForParentAccount(Contact).Where(oa =>
                                                                                                             oa.GetAttributeValue <bool?>("adx_acceptdecline").GetValueOrDefault(false));

                if (partner.GetAttributeValue <int?>("adx_numberofopportunitiesdelivered").GetValueOrDefault(0) == 0)
                {
                    partner.SetAttributeValue("adx_numberofopportunitiesdelivered", 1);
                }

                var touchrate = (double)(partner.GetAttributeValue <int?>("adx_numberofopportunitiesaccepted").GetValueOrDefault(0) + (partner.GetAttributeValue <int?>("adx_numberofopportunitiesdeclined").GetValueOrDefault(0))) / (partner.GetAttributeValue <int?>("adx_numberofopportunitiesdelivered").GetValueOrDefault(1));
                partner.SetAttributeValue("adx_touchrate", touchrate);

                if (accept.Checked)
                {
                    if (oppPermissions.ToList().Any())
                    {
                        //we mark this opportunity as accepted
                        opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.Accepted));
                        opportunity.SetAttributeValue("stepname", OpportunityHistory.PipelinePhaseAccepted);
                        opportunity.SetAttributeValue("adx_accepteddate", DateTime.UtcNow);

                        partner.SetAttributeValue("adx_numberofopportunitiesaccepted", partner.GetAttributeValue <int?>("adx_numberofopportunitiesaccepted").GetValueOrDefault(0) + 1);
                    }
                }
                else if (decline.Checked)
                {
                    if (oppPermissions.ToList().Any())
                    {
                        //we mark this opportunity as declined
                        opportunity.SetAttributeValue("statuscode", new OptionSetValue((int)Adxstudio.Xrm.Partner.Enums.OpportunityStatusReason.Declined));
                        opportunity.SetAttributeValue("stepname", OpportunityHistory.PipelinePhaseDeclined);

                        partner.SetAttributeValue("adx_numberofopportunitiesdeclined", partner.GetAttributeValue <int?>("adx_numberofopportunitiesdeclined").GetValueOrDefault(0) + 1);
                        partner.SetAttributeValue("adx_activeopportunitycount", partner.GetAttributeValue <int?>("adx_activeopportunitycount").GetValueOrDefault(0) - 1);

                        XrmContext.AddLink(opportunity, new Relationship("adx_account_declinedopportunity"), partner);
                    }
                }

                opportunity.SetAttributeValue("adx_expirydate", null);

                XrmContext.UpdateObject(opportunity);
                XrmContext.UpdateObject(partner);
                XrmContext.SaveChanges();

                SavedOpportunities += dataKey + ",";
            }

            RestoreCheckedValues();
            //Response.Redirect(Request.RawUrl);
        }
예제 #10
0
        protected void Register_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            // Determine if the user is already in the CRM as either a lead or customer
            var existingContact = XrmContext.ContactSet.FirstOrDefault(c => c.EMailAddress1 == EMail.Text);
            var existingLead    = XrmContext.LeadSet.FirstOrDefault(l => l.EMailAddress1 == EMail.Text);

            var eventParticipant = new ActivityParty();

            if (existingContact != null)
            {
                eventParticipant.contact_activity_parties = existingContact;
                eventParticipant.PartyId = new EntityReference(Contact.EntityLogicalName, existingContact.ContactId.GetValueOrDefault());
            }
            else if (existingLead != null)
            {
                eventParticipant.lead_activity_parties = existingLead;
                eventParticipant.PartyId = new EntityReference(Lead.EntityLogicalName, existingLead.Id);
            }
            else
            {
                // No Contact or Lead previously exsits in the CRM
                // Create the registrant as a lead in the CRM
                var newLead = new Lead
                {
                    Subject                  = string.Format("{0}, {1}: {2}", LastName.Text, FirstName.Text, Campaign.Name),
                    FirstName                = FirstName.Text,
                    LastName                 = LastName.Text,
                    CompanyName              = CompanyName.Text,
                    LeadQualityCode          = 2,
                    Telephone1               = Phone.Text,
                    EMailAddress1            = EMail.Text,
                    Address1_Line1           = Address1.Text,
                    Address1_Line2           = Address2.Text,
                    Address1_Line3           = Address3.Text,
                    Address1_StateOrProvince = State.Text,
                    Address1_PostalCode      = PostalCode.Text,
                    Address1_Country         = Country.Text
                };

                XrmContext.AddObject(newLead);
                XrmContext.SaveChanges();

                existingLead = XrmContext.LeadSet.FirstOrDefault(l => l.EMailAddress1 == EMail.Text);
                if (existingLead != null)
                {
                    eventParticipant.lead_activity_parties = existingLead;
                    eventParticipant.PartyId = new EntityReference(Lead.EntityLogicalName, existingLead.Id);
                }
            }

            // Register user for event by creating a marketing response
            var registration = new CampaignResponse
            {
                Customer           = new[] { eventParticipant },
                RegardingObjectId  = Campaign.ToEntityReference(),
                ResponseCode       = 200000,
                Subject            = string.Format("{0}, {1}: {2}", LastName.Text, FirstName.Text, Campaign.Name),
                ChannelTypeCode    = 200000,
                ReceivedOn         = DateTime.Now,
                FirstName          = FirstName.Text,
                LastName           = LastName.Text,
                MSA_StreetAddress1 = Address1.Text,
                MSA_StreetAddress2 = Address2.Text,
                MSA_StreetAddress3 = Address3.Text,
                MSA_City           = City.Text,
                MSA_State          = State.Text,
                MSA_PostalCode     = PostalCode.Text,
                MSA_Country        = Country.Text,
                CompanyName        = CompanyName.Text,
                MSA_JobTitle       = JobTitle.Text,
                Telephone          = Phone.Text,
                EMailAddress       = EMail.Text,
                Description        = Notes.Text,
                MSA_PreferredMethodofCommunication = CommunicationMethod.SelectedIndex
            };

            XrmContext.AddObject(registration);
            XrmContext.SaveChanges();

            //Show Confirmation
            RegForm.Visible             = false;
            ConfirmationMsg.Visible     = true;
            EventExportLink.NavigateUrl = string.Format("/Event.axd?type=registration&id={0}", Campaign.Id);
        }
예제 #11
0
        protected void OnItemInserted(object sender, CrmEntityFormViewInsertedEventArgs e)
        {
            var contact = XrmContext.CreateQuery("contact").FirstOrDefault(c => c.GetAttributeValue <Guid>("contactid") == e.EntityId);

            if (contact == null)
            {
                throw new Exception(string.Format("Contact could not be found with contactid equal to '{0}'", e.EntityId));
            }

            var parentCustomerAccount = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : ServiceContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id);

            if (parentCustomerAccount == null)
            {
                throw new Exception("Parent Customer Account could not be found associated to the current user's contact.");
            }

            Guid accountId = (Guid.TryParse(CompanyNameList.SelectedValue, out accountId)) ? accountId : Guid.Empty;

            var account = XrmContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == accountId);

            var opportunity = OriginatingOpportunity == null ? null : XrmContext.CreateQuery("opportunity").FirstOrDefault(o => o.GetAttributeValue <Guid>("opportunityid") == OriginatingOpportunity.Id);

            if (opportunity != null)
            {
                var contactCrossover = opportunity.GetRelatedEntities(XrmContext, new Relationship("adx_opportunity_contact")).FirstOrDefault(c => c.GetAttributeValue <Guid>("contactid") == contact.GetAttributeValue <Guid>("contactid"));

                var oppnote = new Entity("adx_opportunitynote");

                if (contactCrossover == null)
                {
                    XrmContext.AddLink(opportunity, new Relationship("adx_opportunity_contact"), contact);

                    oppnote.SetAttributeValue("adx_name", "Contact Added: " + contact.GetAttributeValue <string>("fullname"));
                    oppnote.SetAttributeValue("adx_date", DateTime.UtcNow);
                    oppnote.SetAttributeValue("adx_description", "Contact Added: " + contact.GetAttributeValue <string>("fullname"));
                    oppnote.SetAttributeValue("adx_opportunityid", opportunity.ToEntityReference());
                    var assignedToContact = opportunity.GetRelatedEntity(XrmContext, new Relationship("msa_contact_opportunity"));
                    oppnote.SetAttributeValue("adx_assignedto", assignedToContact != null ? assignedToContact.GetAttributeValue <string>("fullname") : string.Empty);
                    XrmContext.AddObject(oppnote);
                    XrmContext.UpdateObject(opportunity);
                }
            }

            contact.SetAttributeValue("msa_managingpartnerid", parentCustomerAccount.ToEntityReference());

            if (account != null)
            {
                contact.SetAttributeValue("parentcustomerid", account.ToEntityReference());

                XrmContext.UpdateObject(account);
            }

            XrmContext.UpdateObject(contact);

            if (SetAsPrimary)
            {
                if (account == null)
                {
                    throw new Exception(string.Format("Could not find an account with accountid equal to '{0}'.", accountId));
                }

                account.SetAttributeValue("primarycontactid", contact.ToEntityReference());

                XrmContext.UpdateObject(account);
            }

            XrmContext.SaveChanges();

            if (opportunity != null)
            {
                var url = GetUrlForRequiredSiteMarker("Opportunity Details");

                url.QueryString.Set("OpportunityID", opportunity.GetAttributeValue <Guid>("opportunityid").ToString());

                Response.Redirect(url.PathWithQueryString);
            }
            else if (ReturnToAccount)
            {
                if (account == null)
                {
                    throw new Exception(string.Format("Could not find an account with accountid equal to '{0}'.", accountId));
                }

                var url = GetUrlForRequiredSiteMarker("Edit Customer Account");

                url.QueryString.Set("AccountID", account.Id.ToString());

                Response.Redirect(url.PathWithQueryString);
            }
            else if (FromCreateOpportunity)
            {
                if (account == null)
                {
                    throw new Exception(string.Format("Could not find an account with accountid equal to '{0}'.", accountId));
                }

                var url = GetUrlForRequiredSiteMarker("Create Opportunity");

                url.QueryString.Set("AccountId", account.Id.ToString());

                Response.Redirect(url.PathWithQueryString);
            }
            else
            {
                var url = GetUrlForRequiredSiteMarker("Manage Customer Contacts");

                Response.Redirect(url.PathWithQueryString);
            }
        }
예제 #12
0
        protected void Page_Load(object sender, EventArgs e)
        {
            //RedirectToLoginIfAnonymous();

            if (IsPostBack)
            {
                return;
            }

            var parameter = new Parameter("Filter", DbType.String, WebAnnotationPrefix);

            CrmNoteSource.WhereParameters.Add(parameter);

            if (Case == null)
            {
                actionResultMessage.Text   = "Case not found";
                CaseInfoPanel.Visible      = false;
                CaseInfoPanelNotes.Visible = false;
                EditPanel.Visible          = false;
                return;
            }

            TitleLabel.Text        = Case.Title;
            CaseNumberLabel.Text   = " Case Number: " + Case.TicketNumber;
            StatusReasonLabel.Text = Enum.GetName(typeof(Enums.IncidentState), Case.StateCode.GetValueOrDefault());
            string Description = Case.Description;

            if (Description != null)
            {
                Description = Description.TrimStart(); Description = Description.TrimEnd();
                if (Description.Length > 1000)
                {
                    Description += Description.Substring(1, 999);
                }

                descriptionTextBox.Text = Description;
            }
            XrmContext.Attach(Case);

            if (Case.subject_incidents != null)
            {
                SubjectLabel.Text = "| Subject: " + Case.subject_incidents.Title;
            }

            XrmContext.Detach(Case);
            CaseTypeLabel.Text  = "| Case Type: " + GetCaseTypeCodeOptionLabelByValue(Case.CaseTypeCode.GetValueOrDefault());
            CreatedOn.Text      = Case.CreatedOn.GetValueOrDefault().ToLocalTime().ToString();
            LastModifiedOn.Text = Case.ModifiedOn.GetValueOrDefault().ToLocalTime().ToString();

            if (Case.KbArticleId != null)
            {
                KB.Text = "Please see the following KB article: <a href=\"/kb/kb-article?id=" + Case.KbArticleId + "\">" + Case.kbarticle_incidents.Title + "</a><br/>";
            }

            var access = ServiceContext.GetCaseAccessByContact(Contact) as Adx_caseaccess;

            if (access == null || !access.Adx_Write.GetValueOrDefault())
            {
                UpdateFields.Visible = false;
                UpdateButton.Visible = false;
            }

            if (Case.StateCode != (int)Enums.IncidentState.Active)
            {
                EditPanel.Enabled        = false;
                UpdateButton.Visible     = false;
                CancelCaseButton.Visible = false;
                CloseCasePanel.Visible   = false;
                ReopenCase.Visible       = true;
            }

            ////Get Activities for cases.
            var result = new List <Entity>();

            var activityPointer =
                from c in XrmContext.CreateQuery("activitypointer")
                where c.GetAttributeValue <Guid?>("regardingobjectid") == Case.Id
                select c;

            result.AddRange(activityPointer);
            if (result.Count > 0)
            {
                foreach (Entity ent in result)
                {
                    if (!ent.Contains("actualdurationminutes"))
                    {
                        ent.Attributes.Add("actualdurationminutes", "0");
                    }

                    if (ent.Attributes["activitytypecode"].ToString().Trim() == "email")
                    {
                        if (ent.Contains("description"))
                        {
                            string emailDescription = ent.Attributes["description"].ToString();
                            emailDescription = StripHtml(emailDescription);

                            if (emailDescription.Length > 1000)
                            {
                                emailDescription = emailDescription.Substring(0, 1999);
                            }
                            ent.Attributes["description"] = emailDescription;
                        }
                    }
                    if (!ent.Contains("description"))
                    {
                        ent.Attributes.Add("description", "");
                    }
                }
                ActivityList.DataKeyNames = new[] { "activityid" };
                ActivityList.DataSource   = result.ToDataTable(XrmContext);
                //ActivityList.ColumnsGenerator = new CrmSavedQueryColumnsGenerator("Activities Web View");
                ActivityList.DataBind();
            }
        }
예제 #13
0
 private void SetStateCanceled(Entity entity)
 {
     XrmContext.SetState((int)Enums.IncidentState.Canceled, -1, entity);
 }
예제 #14
0
        protected void CloseRelatedActivities()
        {
            XrmContext.Attach(Case);
            var activities = Case.Incident_ActivityPointers;

            XrmContext.Detach(Case);

            if (activities == null)
            {
                return;
            }

            foreach (ActivityPointer a in activities)
            {
                if (a.StateCode == (int)Enums.ActivityPointerState.Open || a.StateCode == (int)Enums.ActivityPointerState.Scheduled)
                {
                    var activityGuid     = a.ActivityId;
                    var activityTypeCode = a.ActivityTypeCode;

                    switch (activityTypeCode)
                    {
                    case "phonecall":
                        var phonecall = XrmContext.PhoneCallSet.Where(pc => pc.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(phonecall);
                        break;

                    case "task":
                        var task = XrmContext.TaskSet.Where(t => t.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(task);
                        break;

                    case "fax":
                        var fax = XrmContext.FaxSet.Where(f => f.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(fax);
                        break;

                    case "email":
                        var email = XrmContext.EmailSet.Where(e => e.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(email);
                        break;

                    case "letter":
                        var letter = XrmContext.LetterSet.Where(l => l.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(letter);
                        break;

                    case "appointment":
                        var appointment = XrmContext.AppointmentSet.Where(ap => ap.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(appointment);
                        break;

                    case "serviceappointment":
                        var serviceAct = XrmContext.ServiceAppointmentSet.Where(s => s.ActivityId == activityGuid).FirstOrDefault();
                        SetStateCanceled(serviceAct);
                        break;

                    default:
                        break;
                    }
                }
            }

            return;
        }
예제 #15
0
        private Entity GetPrimaryContactAndSetCompanyName()
        {
            if (OpenOpportunity == null)
            {
                return(null);
            }

            Entity primaryContact = null;

            var customer = OpenOpportunity.GetAttributeValue <EntityReference>("customerid");

            if (customer.LogicalName == "account")
            {
                var account = XrmContext.CreateQuery("account").First(a => a.GetAttributeValue <Guid>("accountid") == customer.Id);

                CompanyName.Text = account.GetAttributeValue <string>("name");

                primaryContact = account.GetRelatedEntity(XrmContext, new Relationship("account_primary_contact"));

                var channelPermission = XrmContext.GetChannelAccessByContact(Contact);

                var channelWriteAccess = (channelPermission != null && channelPermission.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false));

                var channelReadAccess = (channelPermission != null && channelPermission.GetAttributeValue <bool?>("adx_read").GetValueOrDefault(false));

                var parentAccount = (account.GetAttributeValue <EntityReference>("msa_managingpartnerid") != null) ? XrmContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == account.GetAttributeValue <EntityReference>("msa_managingpartnerid").Id) : null;

                if (parentAccount != null && ((channelPermission != null && channelPermission.GetAttributeValue <EntityReference>("adx_accountid") != null) && channelPermission.GetAttributeValue <EntityReference>("adx_accountid").Equals(parentAccount.ToEntityReference())) && (parentAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode") != null && parentAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode").Value == 100000000))
                {
                    if (channelWriteAccess)
                    {
                        CompanyName.Text = string.Format(@"<a href=""{0}"" class=""Edit"">{1}</a>",
                                                         HttpUtility.HtmlEncode(EditAccountUrl(account.GetAttributeValue <Guid>("accountid"))),
                                                         HttpUtility.HtmlEncode(CompanyName.Text));
                    }
                    else if (channelReadAccess)
                    {
                        CompanyName.Text = string.Format(@"<a href=""{0}"" class=""Edit"">{1}</a>",
                                                         HttpUtility.HtmlEncode(ReadOnlyAccountUrl(account.GetAttributeValue <Guid>("accountid"))),
                                                         HttpUtility.HtmlEncode(CompanyName.Text));
                    }
                }


                //CompanyName.Attributes.Add("style", "white-space: nowrap;");
            }
            else if (customer.LogicalName == "contact")
            {
                primaryContact = XrmContext.CreateQuery("contact").First(c => c.GetAttributeValue <Guid>("contactid") == customer.Id);

                var account = primaryContact.GetRelatedEntity(XrmContext, new Relationship("account_primary_contact"));

                CompanyName.Text = account != null?account.GetAttributeValue <string>("name") : primaryContact.GetAttributeValue <string>("adx_organizationname");
            }

            return(primaryContact);
        }
        protected void OpportunitiesList_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[0].Visible = false;

                e.Row.Cells.Add(new TableHeaderCell {
                    Text = "Accept"
                });
                e.Row.Cells.Add(new TableHeaderCell {
                    Text = "Decline"
                });

                return;
            }

            if (e.Row.RowType != DataControlRowType.DataRow)
            {
                return;
            }

            e.Row.Cells[0].Visible = false;

            var dataKey = HttpUtility.HtmlEncode(NewOpportunitiesList.DataKeys[e.Row.RowIndex].Value.ToString());

            //e.Row.Cells[1].Attributes.Add("style", "white-space: nowrap;");

            foreach (var cell in e.Row.Cells.Cast <DataControlFieldCell>().Where(cell => cell.ContainingField.HeaderText == "Est. Revenue"))
            {
                decimal parsedDecimal;

                if (decimal.TryParse(cell.Text, out parsedDecimal))
                {
                    cell.Text = parsedDecimal.ToString("C");
                }
            }

            var oppPermissions = XrmContext.GetOpportunityAccessByContactForParentAccount(Contact).Where(oa =>
                                                                                                         oa.GetAttributeValue <bool?>("adx_acceptdecline") ?? false == true);

            var acceptCell = new TableCell {
                HorizontalAlign = HorizontalAlign.Center, Width = new Unit("1%")
            };
            var acceptCheckBox = new CheckBox {
                ID = dataKey + "_accept", CssClass = "accept"
            };

            acceptCheckBox.InputAttributes["class"] = dataKey;
            acceptCell.Controls.Add(acceptCheckBox);
            e.Row.Cells.Add(acceptCell);

            var declineCell = new TableCell {
                HorizontalAlign = HorizontalAlign.Center, Width = new Unit("1%")
            };
            var declineCheckBox = new CheckBox {
                ID = dataKey + "_decline", CssClass = "decline"
            };

            declineCheckBox.InputAttributes["class"] = dataKey;
            declineCell.Controls.Add(declineCheckBox);
            e.Row.Cells.Add(declineCell);

            if (!oppPermissions.ToList().Any())
            {
                acceptCheckBox.Enabled  = false;
                declineCheckBox.Enabled = false;
            }
        }
        private void RenderCrmEntityFormView(string entityName, string primaryFieldName, Entity serviceRequestType, Guid trueRecordId, FormViewMode formMode)
        {
            var serviceRequestDataSource = CreateDataSource("SeriveRequestDataSource", entityName, primaryFieldName, trueRecordId);

            Entity entityForm = null;

            entityForm = (serviceRequestType.GetAttributeValue <EntityReference>("adx_entityformid") != null)
                                ? XrmContext.CreateQuery("adx_entityform").FirstOrDefault(e => e.GetAttributeValue <Guid>("adx_entityformid") ==
                                                                                          serviceRequestType.GetAttributeValue <EntityReference>("adx_entityformid").Id) :
                         XrmContext.CreateQuery("adx_entityform").FirstOrDefault(ef => ef.GetAttributeValue <string>("adx_name")
                                                                                 == "Web Service Request Details" && ef.GetAttributeValue <string>("adx_entityname") == entityName);

            if (entityForm != null)
            {
                var formRecordSourceDefinition = new FormEntitySourceDefinition(entityName, primaryFieldName, trueRecordId);

                var entityFormControl = new EntityForm(entityForm.ToEntityReference(), formRecordSourceDefinition)
                {
                    ID                     = "CustomEntityFormControl",
                    FormCssClass           = "crmEntityFormView",
                    PreviousButtonCssClass = "btn btn-default",
                    NextButtonCssClass     = "btn btn-primary",
                    SubmitButtonCssClass   = "btn btn-primary",
                    ClientIDMode           = ClientIDMode.Static                                                         /*,
                                                                                                                          * EntityFormReference	= entityForm.ToEntityReference(),
                                                                                                                          * EntitySourceDefinition = formRecordSourceDefinition*/
                };

                var languageCodeSetting = ServiceContext.GetSiteSettingValueByName(Portal.Website, "Language Code");
                if (!string.IsNullOrWhiteSpace(languageCodeSetting))
                {
                    int languageCode;
                    if (int.TryParse(languageCodeSetting, out languageCode))
                    {
                        entityFormControl.LanguageCode = languageCode;
                    }
                }

                CrmEntityFormViewPanel.Controls.Add(entityFormControl);
            }
            else
            {
                var mappingFieldCollection = new MappingFieldMetadataCollection()
                {
                    FormattedLocationFieldName = serviceRequestType.GetAttributeValue <string>("adx_locationfieldname"),
                    LatitudeFieldName          = serviceRequestType.GetAttributeValue <string>("adx_latitudefieldname"),
                    LongitudeFieldName         = serviceRequestType.GetAttributeValue <string>("adx_longitudefieldname")
                };

                var serviceRequestFormView = new CrmEntityFormView()
                {
                    FormName               = "Web Details",
                    Mode                   = formMode,
                    EntityName             = entityName,
                    CssClass               = "crmEntityFormView",
                    SubmitButtonCssClass   = "btn btn-primary",
                    AutoGenerateSteps      = false,
                    ClientIDMode           = ClientIDMode.Static,
                    MappingFieldCollection = mappingFieldCollection
                };

                var languageCodeSetting = ServiceContext.GetSiteSettingValueByName(Portal.Website, "Language Code");
                if (!string.IsNullOrWhiteSpace(languageCodeSetting))
                {
                    int languageCode;
                    if (int.TryParse(languageCodeSetting, out languageCode))
                    {
                        serviceRequestFormView.LanguageCode         = languageCode;
                        serviceRequestFormView.ContextName          = languageCode.ToString(CultureInfo.InvariantCulture);
                        serviceRequestDataSource.CrmDataContextName = languageCode.ToString(CultureInfo.InvariantCulture);
                    }
                }

                CrmEntityFormViewPanel.Controls.Add(serviceRequestFormView);

                serviceRequestFormView.DataSourceID = serviceRequestDataSource.ID;
            }
        }
예제 #18
0
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfNecessary();

            var parentAccount            = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : XrmContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id);
            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 canCreateContacts = false;

            if (parentAccount == null)
            {
                ContactWebForm.Visible = false;

                NoParentAccountError.Visible = true;

                return;
            }

            if (!contactAccessPermissions.Any())
            {
                ContactWebForm.Visible = false;

                NoContactAccessPermissionsRecordError.Visible = true;

                return;
            }

            if (!contactAccessPermissionsForParentAccount.Any())
            {
                ContactWebForm.Visible = false;

                NoContactAccessPermissionsForParentAccountError.Visible = true;

                return;
            }

            foreach (var access in contactAccessPermissionsForParentAccount)
            {
                if (access.GetAttributeValue <bool?>("adx_create").GetValueOrDefault(false))
                {
                    canCreateContacts = true;
                }
            }

            if (!canCreateContacts)
            {
                ContactWebForm.Visible = false;

                ContactAccessPermissionsError.Visible = true;
            }
        }
예제 #19
0
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfAnonymous();

            if (ContactToEdit == null)
            {
                RecordNotFoundError.Visible = true;

                ManagePermissions.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 accountAccessPermissions = parentAccount == null ? new List <Entity>() : ServiceContext.GetAccountAccessByContact(Contact).ToList();
            var accountAccessPermissionsForParentAccount = parentAccount == null ? new List <Entity>() : accountAccessPermissions.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 channelPermissions     = XrmContext.GetChannelAccessByContact(Contact);
            var opportunityPermissions = XrmContext.GetOpportunityAccessByContact(Contact).FirstOrDefault();
            var contactToEditOpportunityPermissions = XrmContext.CreateQuery("adx_opportunitypermissions").FirstOrDefault(c => c.GetAttributeValue <EntityReference>("adx_contactid") != null && c.GetAttributeValue <EntityReference>("adx_contactid").Equals(ContactToEdit.ToEntityReference()));
            var contactToEditChannelPermissions     = XrmContext.CreateQuery("adx_channelpermissions").FirstOrDefault(c => c.GetAttributeValue <EntityReference>("adx_contactid") != null && c.GetAttributeValue <EntityReference>("adx_contactid").Equals(ContactToEdit.ToEntityReference()));
            var canEditContacts               = false;
            var canManagePermissions          = false;
            var canEditChannelPermissions     = channelPermissions != null;
            var canEditOpportunityPermissions = opportunityPermissions != null;

            if (parentAccount == null)
            {
                ManagePermissions.Visible = false;

                NoParentAccountError.Visible = true;

                return;
            }

            if (!accountAccessPermissions.Any())
            {
                ManagePermissions.Visible = false;

                NoAccountAccessPermissionsRecordError.Visible = true;

                return;
            }

            if (!accountAccessPermissionsForParentAccount.Any())
            {
                ManagePermissions.Visible = false;

                NoAccountAccessPermissionsForParentAccountError.Visible = true;

                return;
            }

            if (!contactAccessPermissions.Any())
            {
                ManagePermissions.Visible = false;

                NoContactAccessPermissionsRecordError.Visible = true;

                return;
            }

            if (!contactAccessPermissionsForParentAccount.Any())
            {
                ManagePermissions.Visible = false;

                NoContactAccessPermissionsForParentAccountError.Visible = true;

                return;
            }

            foreach (var access in accountAccessPermissionsForParentAccount)
            {
                if (access.GetAttributeValue <bool?>("adx_managepermissions").GetValueOrDefault(false))
                {
                    canManagePermissions = true;
                }
            }

            if (!canManagePermissions)
            {
                ManagePermissions.Visible = false;

                AccountAccessManagePermissionsDeniedError.Visible = true;

                return;
            }

            foreach (var access in contactAccessPermissionsForParentAccount)
            {
                if (access.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false))
                {
                    canEditContacts = true;
                }
            }

            if (!canEditContacts)
            {
                ManagePermissions.Visible = false;

                ContactAccessPermissionsError.Visible = true;

                return;
            }

            if (channelPermissions == null && opportunityPermissions == null)
            {
                ManagePermissions.Visible = false;

                NoPermissionsError.Visible = true;

                return;
            }

            if (contactToEditOpportunityPermissions == null & contactToEditChannelPermissions == null)
            {
                ManagePermissions.Visible = false;

                PermissionsRecordsForContactEditNotFoundError.Visible = true;

                return;
            }

            if (!canEditOpportunityPermissions)
            {
                OpportunityPermissions.Visible = false;

                NoOpportunityPermissionsRecordWarning.Visible = true;
            }
            else
            {
                if (contactToEditOpportunityPermissions == null)
                {
                    OpportunityPermissions.Visible = false;

                    OpportunityPermissionsRecordForContactEditNotFoundError.Visible = true;
                }
                else
                {
                    var opportunityPermissionsFormViewDataSource = new CrmDataSource {
                        ID = "OpportunityPermissionsFormViewDataSource", CrmDataContextName = OpportunityPermissionsFormView.ContextName
                    };

                    var opportunityPermissionsFetchXml =
                        string.Format(
                            "<fetch mapping='logical'><entity name='{0}'><all-attributes /><filter type='and'><condition attribute = '{1}' operator='eq' value='{{{2}}}'/></filter></entity></fetch>",
                            "adx_opportunitypermissions", "adx_opportunitypermissionsid", contactToEditOpportunityPermissions.Id);

                    opportunityPermissionsFormViewDataSource.FetchXml = opportunityPermissionsFetchXml;

                    OpportunityPermissions.Controls.Add(opportunityPermissionsFormViewDataSource);

                    OpportunityPermissionsFormView.DataSourceID = "OpportunityPermissionsFormViewDataSource";
                }
            }

            if (!canEditChannelPermissions)
            {
                ChannelPermissions.Visible = false;

                NoChannelPermissionsRecordWarning.Visible = true;
            }
            else
            {
                if (contactToEditChannelPermissions == null)
                {
                    ChannelPermissions.Visible = false;

                    ChannelPermissionsRecordForContactEditNotFoundError.Visible = true;
                }
                else
                {
                    var channelPermissionsFormViewDataSource = new CrmDataSource {
                        ID = "ChannelPermissionsWebViewDataSource", CrmDataContextName = ChannelPermissionsFormView.ContextName
                    };

                    var channelPermissionsFetchXml =
                        string.Format(
                            "<fetch mapping='logical'><entity name='{0}'><all-attributes /><filter type='and'><condition attribute = '{1}' operator='eq' value='{{{2}}}'/></filter></entity></fetch>",
                            "adx_channelpermissions", "adx_channelpermissionsid", contactToEditChannelPermissions.Id);

                    channelPermissionsFormViewDataSource.FetchXml = channelPermissionsFetchXml;

                    ChannelPermissions.Controls.Add(channelPermissionsFormViewDataSource);

                    ChannelPermissionsFormView.DataSourceID = "ChannelPermissionsWebViewDataSource";
                }
            }

            if (!IsPostBack)
            {
                SetControlValues(contactToEditOpportunityPermissions, contactToEditChannelPermissions);
            }

            EnableControlsBasedOnPartnerAccess(opportunityPermissions, channelPermissions);
        }
예제 #20
0
 public static EnvironmentVariableValue GetEnvironmentVariableValue(this XrmContext xrmcontext, EnvironmentVariableDefinition definition)
 => xrmcontext.EnvironmentVariableValueSet.SingleOrDefault(v => v.EnvironmentVariableDefinitionId != null &&
                                                           v.EnvironmentVariableDefinitionId.Id == definition.Id);
        private void BindProductsLeadNotesContactsAndAssignedTo()
        {
            var opportunityContact = OpenOpportunity.GetRelatedEntity(XrmContext, new Relationship("msa_contact_opportunity"));

            CurrentlyAssignedToLabel.Text = (opportunityContact != null) ? opportunityContact.GetAttributeValue <string>("fullname") : string.Empty;

            if (IsPostBack)
            {
                return;
            }

            Products.Text = string.Join(", ", OpenOpportunity.GetRelatedEntities(XrmContext, new Relationship("adx_opportunity_product")).Select(product => product.GetAttributeValue <string>("name")));

            OpportunityNotes.Text = GetFormattedDescription(OpenOpportunity.GetAttributeValue <string>("description"));

            //LeadAssignedTo.Text = OpenOpportunity.adx_PartnerAssignedTo;

            var empli = new ListItem();

            AssignToList.Items.Add(empli);

            //var contacts = XrmContext.GetContactsForContact(Contact).Cast<Contact>();

            AssertContactHasParentAccount();

            var contacts = XrmContext.CreateQuery("contact").Where(c => c.GetAttributeValue <EntityReference>("parentcustomerid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid"));

            foreach (var contact in contacts)
            {
                if (contact.GetAttributeValue <OptionSetValue>("statecode") != null && contact.GetAttributeValue <OptionSetValue>("statecode").Value == 0)
                {
                    var li = new ListItem()
                    {
                        Text  = contact.GetAttributeValue <string>("fullname"),
                        Value = contact.GetAttributeValue <Guid>("contactid").ToString()
                    };

                    if (OpenOpportunity.GetAttributeValue <EntityReference>("msa_partneroppid") != null && li.Value == OpenOpportunity.GetAttributeValue <EntityReference>("msa_partneroppid").Id.ToString())
                    {
                        li.Selected = true;
                    }

                    AssignToList.Items.Add(li);
                }
            }

            var partnerAccount = ServiceContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == (Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? Guid.Empty : Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id));

            if (partnerAccount != null)
            {
                var fetchXmlString = string.Format(@"
					<fetch mapping=""logical"" distinct=""true"">
						<entity name=""contact"">
							<attribute name=""fullname"" />
							<attribute name=""telephone1"" />
							<attribute name=""contactid"" />
							<order attribute=""fullname"" descending=""false"" />
							<link-entity name=""account"" from=""accountid"" to=""parentcustomerid"" alias=""accountmanagingpartnerlink"" link-type=""outer"">
							</link-entity>
							<link-entity name=""adx_opportunity_contact"" from=""contactid"" to=""contactid"" link-type=""outer"">
								<link-entity name=""opportunity"" from=""opportunityid"" to=""opportunityid"" alias=""opportunitylink"" link-type=""outer""></link-entity>
							</link-entity>
							<filter type=""and"">
								<filter type=""or"">
									<condition attribute=""msa_managingpartnerid"" operator=""eq"" value=""{0}"" />
									<condition entityname=""accountmanagingpartnerlink"" attribute=""msa_managingpartnerid"" operator=""eq"" value=""{0}"" />
								</filter>
								<condition entityname=""opportunitylink"" attribute=""opportunityid"" operator=""ne"" value=""{1}"" />
							</filter>
						</entity>
					</fetch>"                    , partnerAccount.Id, OpenOpportunity.Id);

                var fetchXml = XDocument.Parse(fetchXmlString);

                var response = (RetrieveMultipleResponse)ServiceContext.Execute(new RetrieveMultipleRequest
                {
                    Query = new FetchExpression(fetchXml.ToString())
                });

                var customerContacts = response.EntityCollection.Entities.ToList();

                foreach (var li in customerContacts.Select(customerContact => new ListItem()
                {
                    Text = customerContact.GetAttributeValue <string>("fullname"),
                    Value = customerContact.GetAttributeValue <Guid>("contactid").ToString()
                }))
                {
                    AddContactList.Items.Add(li);
                }
            }

            if (AddContactList.Items.Count >= 1)
            {
                return;
            }

            AddContactList.Visible     = false;
            AddContactCheckBox.Visible = false;
        }
 public static AppModule GetAppModuleByUniqueName(this XrmContext xrmcontext, string appname)
 => string.IsNullOrEmpty(appname) ?
 null :
 xrmcontext.AppModuleSet.SingleOrDefault(a => a.UniqueName == appname);