/// <summary> /// Executes the workflow activity. /// </summary> /// <param name="executionContext">The execution context.</param> public override void ExecuteCRMWorkFlowActivity(CodeActivityContext executionContext, LocalWorkflowContext crmWorkflowContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); if (tracingService == null) { throw new InvalidPluginExecutionException("Failed to retrieve tracing service."); } tracingService.Trace("Entered RefDataPermitToApplication.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("RefDataPermitToApplication.Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); // Elevated rights service IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(null); try { //Retrieve the application Entity application = service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, new ColumnSet(Application.Permit)); if (application.Attributes.Contains(Application.Permit) && application[Application.Permit] != null) { //Init the copier DataAccessPermit copier = new DataAccessPermit(service, Permit.EntityLogicalName, ((EntityReference)application[Application.Permit]).Id, Application.EntityLogicalName, application.Id); //Copy Location and Location details from Permit to Application DataAccessApplication.MirrorPermitLocationsAndDetailsToApplication(service, application.Id); //LinkEntitiesToTarget Lines copier.CopyAs( PermitLine.EntityLogicalName, PermitLine.Permit, new[] { PermitLine.Name, PermitLine.PermitType, PermitLine.StandardRule, PermitLine.Owner }, ApplicationLine.EntityLogicalName, ApplicationLine.ApplicationId, true, null); } } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } tracingService.Trace("Exiting RefDataPermitToApplication.Execute(), Correlation Id: {0}", context.CorrelationId); }
/// <summary> /// Executes the WorkFlow. /// </summary> /// <param name="crmWorkflowContext">The <see cref="WorkFlowActivityBase.LocalWorkflowContext"/> which contains the /// <param name="executionContext" > <see cref="CodeActivityContext"/> /// </param> public override void ExecuteCRMWorkFlowActivity(CodeActivityContext executionContext, LocalWorkflowContext crmWorkflowContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); if (tracingService == null) { throw new InvalidPluginExecutionException("Failed to retrieve tracing service."); } tracingService.Trace("Entered CopyApplicationDataToApplication.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("CopyApplicationDataToApplication.Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); // Elevated rights service IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(null); try { EntityReference fromApplication = ApplicationFrom.Get(executionContext); EntityReference toApplication = ApplicationTo.Get(executionContext); if (fromApplication != null && toApplication != null) { //Init the copier DataAccessPermit copier = new DataAccessPermit(service, Application.EntityLogicalName, fromApplication.Id, Application.EntityLogicalName, toApplication.Id); //Copy Location and Location details from Application to Permit DataAccessApplication.MirrorApplicationLocationsAndDetailsToApplication(service, fromApplication.Id, toApplication.Id); //Copy Lines copier.CopyAs( ApplicationLine.EntityLogicalName, ApplicationLine.ApplicationId, new[] { ApplicationLine.Name, ApplicationLine.PermitType, ApplicationLine.StandardRule, ApplicationLine.Owner }, ApplicationLine.EntityLogicalName, ApplicationLine.ApplicationId, true, new ConditionExpression(PermitLine.LineType, ConditionOperator.Equal, (int)LineTypes.RegulatedFacility)); } } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } tracingService.Trace("Exiting CopyApplicationDataToApplication.Execute(), Correlation Id: {0}", context.CorrelationId); }