Esempio n. 1
0
        protected override void ExecuteWorkflowLogic()
        {
            var reviseQuoteRequest = new ReviseQuoteRequest()
            {
                ColumnSet = new ColumnSet("quoteid"),
                QuoteId   = Quote.Get(Context.ExecutionContext).Id
            };

            var reviseQuoteResponse = (ReviseQuoteResponse)Context.UserService.Execute(reviseQuoteRequest);

            RevisedQuote.Set(Context.ExecutionContext, reviseQuoteResponse.Entity.ToEntityReference());
        }
Esempio n. 2
0
        /// <summary>
        /// Close existing <c>Quote</c> as <c>Revised</c> status and create a new <c>Quote</c> as <c>Draft</c> status.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.revisequoterequest(v=crm.7).aspx
        /// </para>
        /// </summary>
        /// <param name="id">Existing <c>Quote</c> Id</param>
        /// <param name="closeBeforeRevise">
        /// Set this <c>true</c> if your <c>Quote</c> record is currently <c>Active</c> status.
        /// Otherwise SDK throws an exception "The quote cannot be revised because it is not in closed state."
        /// </param>
        /// <param name="retrieveColumns">
        /// Default attributes are "quoteid", "name", "quotenumber", "revisionnumber".
        /// If you need more or different attributes please set this parameter
        /// </param>
        /// <returns>
        /// Returns revised /newly created <c>Queote</c> in <see cref="ReviseQuoteResponse.Entity"/> property with attributes that defined in <c>retrievedQuoteColums</c> parameter
        /// </returns>
        public ReviseQuoteResponse Revise(Guid id, bool closeBeforeRevise, params string[] retrieveColumns)
        {
            ExceptionThrow.IfGuidEmpty(id, "id");

            string[] columns = !retrieveColumns.IsNullOrEmpty() ? retrieveColumns : _quoteColumns;

            if (closeBeforeRevise)
            {
                /*
                 * INFO : We have to "Close" as revised current quote before revised.
                 * Otherwise SDK throws an exception "The quote cannot be revised because it is not in closed state."
                 */

                Close(id, QuoteClosedStatusCode.Revised, 0, "", "", null);
            }

            ReviseQuoteRequest request = new ReviseQuoteRequest()
            {
                QuoteId   = id,
                ColumnSet = new ColumnSet(columns)
            };

            return((ReviseQuoteResponse)this.OrganizationService.Execute(request));
        }
        public void Execute(IServiceProvider serviceProvider)
        {
            // Instancia do servico e
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IPluginExecutionContext     context        = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationService        service        = (IOrganizationService)serviceFactory.CreateOrganizationService(context.UserId);

            // Log de plugins - Trace

            ITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            tracing.Trace($"Forma de registrar um log no CDS para monitorar a execução do plug-in. {DateTime.Now}");

            // ID da Conta

            Entity accountCreated = (Entity)context.InputParameters["Target"];

            // 1 - QueryExpresion

            QueryExpression qe = new QueryExpression("account");

            qe.ColumnSet.AddColumns("websiteurl");
            qe.Criteria.AddCondition("accountid", ConditionOperator.Equal, accountCreated.Id);

            var resultSet_1 = service.RetrieveMultiple(qe);

            // 2 - FetchXml

            var fetchXml = "" +
                           "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" +
                           "<entity name='account'>" +
                           "<attribute name='name' /> " +
                           "<attribute name='primarycontactid' /> " +
                           "<attribute name='telephone1' /> " +
                           "<attribute name='accountid' /> " +
                           "<order attribute='name' descending='false' /> " +
                           "<filter type='and'> " +
                           "<condition attribute='accountid' operator='eq' uiname='TESTING COMPANY' uitype='account' value='" + accountCreated.Id + "' />" +
                           "</filter> " +
                           "</entity> " +
                           "</fetch>";

            var resutSet_2 = service.RetrieveMultiple(new FetchExpression(fetchXml));

            // 2 - Retrieve

            var accountRetrieved = service.Retrieve("account", accountCreated.Id, new ColumnSet("websiteurl"));

            Entity entity = new Entity("contact");

            entity["fullname"]         = "NOME FIXO";
            entity["emailaddress1"]    = accountRetrieved.GetAttributeValue <string>("websiteurl");
            entity["parentcustomerid"] = new EntityReference(accountCreated.LogicalName, accountCreated.Id);

            var contatoId = service.Create(entity);


            // Update

            var updateContato = new Entity("contact", contatoId);

            updateContato["fullname"] = "Qualquer outra coisa";

            service.Update(updateContato);

            // Delete

            service.Delete("contact", contatoId);

            // Execute - ReviseQuote

            var request = new ReviseQuoteRequest();

            request.ColumnSet = new ColumnSet(true);
            request.QuoteId   = new Guid("df8004eb-303f-eb11-a813-000d3ac058c3");

            var response = (ReviseQuoteResponse)service.Execute(request);
        }
Esempio n. 4
0
        public void Should_Create_New_Quote_With_Lines_When_Revisioning()
        {
            var context = new XrmFakedContext();
            var service = context.GetOrganizationService();

            var quote = new Entity
            {
                LogicalName = "quote",
                Id          = Guid.NewGuid(),
                Attributes  = new AttributeCollection
                {
                    { "statuscode", new OptionSetValue(1) },
                    { "name", "Adventure Quote" }
                }
            };

            var quoteDetail = new Entity
            {
                LogicalName = "quotedetail",
                Id          = Guid.NewGuid(),
                Attributes  = new AttributeCollection
                {
                    { "quoteid", quote.ToEntityReference() },
                    { "extendedamount", new Money(1000m) }
                }
            };

            context.Initialize(new[]
            {
                quote, quoteDetail
            });

            var executor = new ReviseQuoteRequestExecutor();

            var req = new ReviseQuoteRequest
            {
                ColumnSet = new ColumnSet(true),
                QuoteId   = quote.Id
            };

            executor.Execute(req, context);

            quote = service.RetrieveMultiple(new QueryExpression("quote")
            {
                ColumnSet = new ColumnSet(true),
                Criteria  = new FilterExpression(LogicalOperator.And)
                {
                    Conditions =
                    {
                        new ConditionExpression("quoteid", ConditionOperator.NotEqual, quote.Id)
                    }
                }
            }).Entities.SingleOrDefault();

            Assert.NotNull(quote);
            Assert.Equal("Adventure Quote", quote.GetAttributeValue <string>("name"));

            var quoteLines = service.RetrieveMultiple(new QueryExpression("quotedetail")
            {
                ColumnSet = new ColumnSet(true),
                Criteria  = new FilterExpression(LogicalOperator.And)
                {
                    Conditions = { new ConditionExpression("quoteid", ConditionOperator.Equal, quote.ToEntityReference()) }
                }
            }).Entities.ToList();

            Assert.Equal(1, quoteLines.Count);
            Assert.Equal(new Money(1000m), quoteLines.Single().GetAttributeValue <Money>("extendedamount"));
        }