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)); }
/// <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); }
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 }