コード例 #1
0
        public override void Execute()
        {
            Trace(string.Format(CultureInfo.InvariantCulture, TraceMessageHelper.EnteredMethod, SystemTypeName, MethodBase.GetCurrentMethod().Name));

            using (OrganizationServiceContext = OrganizationServiceContext ?? new CrmServiceContext(OrganizationService))
                using (CrmService = CrmService ?? new CrmService(OrganizationServiceContext, TracingService))
                    using (InitializeEntityService = InitializeEntityService ?? new InitializeEntityService(CrmService, OrganizationServiceContext, WorkflowContext, TracingService))
                    {
                        Trace(string.Format(CultureInfo.InvariantCulture, "{0} : {1} started at {2} milliseconds", SystemTypeName, MethodBase.GetCurrentMethod().Name, Stopwatch.ElapsedMilliseconds));

                        // Call the business logic
                        InitializedEntity output = InitializeEntityService.InitializeEntity(
                            BusinessEntityPrimaryKey.Get <string>(CodeActivityContext)
                            );

                        // Serialize the output in JSON data format
                        string json = SerializationHelper.SerializeJson(output);

                        // Return the JSON data to the caller
                        InitializedEntity.Set(CodeActivityContext, json);

                        Trace(string.Format(CultureInfo.InvariantCulture, "{0} : {1} ended at {2} milliseconds", SystemTypeName, MethodBase.GetCurrentMethod().Name, Stopwatch.ElapsedMilliseconds));
                    }

            Trace(string.Format(CultureInfo.InvariantCulture, TraceMessageHelper.ExitingMethod, SystemTypeName, MethodBase.GetCurrentMethod().Name));
        }
コード例 #2
0
        /// <summary>
        /// Generates the account number and saves the result to the entity.
        /// </summary>
        /// <param name="businessEntityPrimaryKey">BusinessEntity Primary Key.</param>
        /// <returns>Returns a string JSON formatted representation of the output object.</returns>
        public InitializedEntity InitializeEntity(string businessEntityPrimaryKey)
        {
            Trace(string.Format(CultureInfo.InvariantCulture, TraceMessageHelper.EnteredMethod, UnderlyingSystemTypeName, MethodBase.GetCurrentMethod().Name));

            if (string.IsNullOrWhiteSpace(businessEntityPrimaryKey))
            {
                throw new ArgumentNullException(nameof(businessEntityPrimaryKey));
            }

            Account account = CrmService.GetAccountByKey(new Guid(businessEntityPrimaryKey));

            if (account == null)
            {
                throw new InvalidPluginExecutionException(AccountNotExistMessage);
            }

            if (!string.IsNullOrWhiteSpace(account.AccountNumber))
            {
                throw new InvalidPluginExecutionException(AccountNumberAlreadySetMessage);
            }

            account.AccountNumber = string.Format(CultureInfo.InvariantCulture, TextFormat, DateTimeNow.ToString(DateTimeFormat, CultureInfo.InvariantCulture));

            // Save changes in a single call to include all in an atomic transaction
            Trace(string.Format(CultureInfo.InvariantCulture, "{0}: Saving the entity in CRM. at {1}", UnderlyingSystemTypeName, MethodBase.GetCurrentMethod().Name));
            CrmService.SaveChanges(SaveChangesOptions.None);

            // Create the output
            InitializedEntity output = new InitializedEntity(account);

            Trace(string.Format(CultureInfo.InvariantCulture, TraceMessageHelper.ExitingMethod, UnderlyingSystemTypeName, MethodBase.GetCurrentMethod().Name));

            return(output);
        }
コード例 #3
0
        public void InitializeEntityService_InitializeEntityService_SetAccountNumber()
        {
            #region ARRANGE

            // Create the workflow unit test mock context
            WorkflowExecutionContext context = CreateWorkflowExecutionContext();

            // Initialize the unit test
            InitializeUnitTest(context, new InitializeEntity());

            // Setup the mock input
            CodeActivityInput.Add(InitializeEntity.BusinessEntityPrimaryKeyText, _accountKey.ToString());

            // Setup the mock objects
            SetupMockObjectsForCustomCodeActivity();

            // Setup the mock responses
            SetupMockResponseForAccount(_accountKey, null);

            #endregion
            #region ACT

            // Act: Invoke the workflow returns the actual ouput
            CodeActivityOutput = WorkflowInvoker.Invoke(CodeActivityInput);

            #endregion
            #region ASSERT

            // Setup the expected result
            string accountNumber = string.Format(CultureInfo.InvariantCulture,
                                                 InitializeEntityService.TextFormat, InitializeEntityService.DateTimeNow.
                                                 ToString(InitializeEntityService.DateTimeFormat, CultureInfo.InvariantCulture));

            Assert.IsNull((string)CodeActivityOutput[ExceptionText]);
            InitializedEntity account = SerializationHelper.DeserializeJson <InitializedEntity>(
                (string)CodeActivityOutput.SingleOrDefault(x => x.Key.Equals("InitializedEntity")).Value);
            Assert.AreEqual(accountNumber, account.AccountNumber);

            #endregion
        }