Exemplo n.º 1
0
        /// <summary>
        /// Executes the workflow activity.
        /// </summary>
        /// <param name="executionContext">The execution context.</param>
        protected override void Execute(CodeActivityContext executionContext)
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension <ITracingService>();

            if (tracingService == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
            }

            tracingService.Trace("Entered " + _processName + ".Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
                                 executionContext.ActivityInstanceId,
                                 executionContext.WorkflowInstanceId);

            // Create the context
            IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>();

            if (context == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
            }

            tracingService.Trace(_processName + ".Execute(), Correlation Id: {0}, Initiating User: {1}",
                                 context.CorrelationId,
                                 context.InitiatingUserId);

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                string keyName = KeyName.Get(executionContext);

                //look up team template by name
                QueryByAttribute querybyexpression = new QueryByAttribute("new_keyvaluepair");
                querybyexpression.ColumnSet = new ColumnSet("new_name",
                                                            "new_stringvalue",
                                                            "new_decimalvalue",
                                                            "new_integervalue",
                                                            "new_datevalue",
                                                            "new_dateandtimevalue",
                                                            "new_valuetype"
                                                            );
                querybyexpression.Attributes.AddRange("new_name");
                querybyexpression.Values.AddRange(keyName);
                EntityCollection retrieved = service.RetrieveMultiple(querybyexpression);

                //if we find something, we're set
                if (retrieved.Entities.Count > 0)
                {
                    Entity kvp = retrieved.Entities[0];
                    StringValue.Set(executionContext, (string)kvp["new_stringvalue"]);
                    IntegerValue.Set(executionContext, (int)kvp["new_integervalue"]);
                    DecimalValue.Set(executionContext, (decimal)kvp["new_decimalvalue"]);
                    DateValue.Set(executionContext, (DateTime)kvp["new_datevalue"]);
                    DateTimeValue.Set(executionContext, (DateTime)kvp["new_dateandtimevalue"]);
                }
                else
                {
                    //throw exception if unable to find a matching template
                    throw new Exception("could not find key-value pair for: " + keyName);
                }
            }
            catch (FaultException <OrganizationServiceFault> e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());

                // Handle the exception.
                throw;
            }
            catch (Exception e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());
                throw;
            }

            tracingService.Trace("Exiting " + _processName + ".Execute(), Correlation Id: {0}", context.CorrelationId);
        }