public virtual bool PreResolve(IWorkflowContext context) { return(Resolve(context)); }
protected override void ExecuteWorkflowLogic(CodeActivityContext executionContext, IWorkflowContext context, IOrganizationService service) { var incidentCloseRequest = new CloseIncidentRequest() { Status = IncidentStatus.Get(executionContext), IncidentResolution = new Entity("incidentresolution") { ["subject"] = Subject.Get(executionContext), ["incidentid"] = Incident.Get(executionContext), ["actualend"] = CloseDate.Get(executionContext), ["description"] = Description.Get(executionContext) } }; service.Execute(incidentCloseRequest); }
public override void Enter(IWorkflowContext context) { var users = Actor.Resolve(context).OrderBy(o => o.Rank); string instanceId = context.FlowInstance.Id; var lastItem = context.FlowInstance.WorkItems.OrderByDescending(o => o.ItemId).First(); DateTime dt = DateTime.Now; int i = 1; string levelCode = context.CurrentTask.LevelCode; string keyInfo = context.CurrentTask.ParallelInfo; if (!context.LevelCode.Equals(context.CurrentTask.LevelCode, StringComparison.CurrentCultureIgnoreCase)) { //从普通审批步骤,进入到会签入的审批步骤,或者从会签入的审批步骤,退出到普通的审批步骤,都会进入这里。 //主要体现是上下文中的levelCode不等于当前工作项的levelCode,因为经过“并行开始”或“并行结束”步骤,都会把上下文的levelCode改掉。 levelCode = context.LevelCode; if (levelCode.EndsWith(":")) { //并行开始步骤 直接 连接 审批步骤 时,会进入这里。levelCode不能单纯取上下文中的levelCode,要去自动生成 //上下文的可能是00-4:,自动生成后,就会变成00-4:01,00-4:02.... levelCode = context.FlowInstance.GetLevelCode(context.LevelCode, 1)[0]; } else { if (levelCode != "00") { //从嵌套会签中退出外层会签时,需要为当前工作项找回外层会签的并行keyInfo var firstWorkItem = context.FlowInstance.WorkItems.OrderBy(o => o.ItemId).FirstOrDefault(o => o.LevelCode == levelCode); if (firstWorkItem != null) { keyInfo = firstWorkItem.ParallelInfo; } } } } foreach (var user in users) { var workflowItem = ObjectHelper.GetObject <IWorkflowItem>(); workflowItem.PartUserId = user.Id; workflowItem.PartUserName = user.Name; workflowItem.InstanceId = instanceId; workflowItem.ItemId = lastItem.ItemId + i; workflowItem.ItemSeq = lastItem.ItemSeq + 1; workflowItem.PartDepepartmentName = user.Department.Name; workflowItem.PartDepartmentId = user.Department.Id; workflowItem.ParallelInfo = keyInfo; if (ResponseRuleType == ResponseRuleType.SerialResponse && i != 1) { workflowItem.Status = WorkItemStatus.Pause; } else { workflowItem.Status = WorkItemStatus.Sent; //如果是 串行审批 工作项的状态在这里是不一样的。 } workflowItem.ReceiveTime = dt; workflowItem.ExpiredTime = GetExpiredTime(); workflowItem.PreItemId = context.CurrentTask.ItemId; workflowItem.AppCode = context.FlowInstance.ApplicationId; workflowItem.CurrentActivity = this.Name; workflowItem.Alias = Alias; workflowItem.LevelCode = levelCode; workflowItem.PasserUserId = context.CurrentUser.Id; workflowItem.PasserUserName = context.CurrentUser.Name; context.FlowInstance.InsertWorkItem(workflowItem); i++; } SendOtherToRead(context); }
} //Notificado #endregion protected override void Execute(CodeActivityContext executionContext) { //Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); //Create the context IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { EntityReference usCaseType = CaseType.Get <EntityReference>(executionContext); OptionSetValue usEstado = StatusCode.Get <OptionSetValue>(executionContext); //tracingService.Trace("usCaseType " + CaseType.ToString()); //tracingService.Trace("usEstado " + usEstado.Value); //Local Variables int estado = usEstado.Value; string typeCase = ""; DateTime modifiedOn = DateTime.Now; int estadoC = 0; Entity entity = (Entity)context.InputParameters["Target"]; if (entity.LogicalName != "incident") { return; } if (entity == null) { return; } Entity dataCase = service.Retrieve("incident", entity.Id, new ColumnSet("statuscode", "ust_dateofnotification")); //tracingService.Trace("dataCase " + dataCase.Id); if (dataCase.Attributes.Contains("ust_dateofnotification") && dataCase.Attributes["ust_dateofnotification"] != null) { modifiedOn = (DateTime)dataCase.Attributes["ust_dateofnotification"]; } DateTime fechatemp = modifiedOn; int diaT = fechatemp.Day; int mesT = fechatemp.Month; int anioT = fechatemp.Year; Entity caseType = service.Retrieve("amxperu_casetype", usCaseType.Id, new Microsoft.Xrm.Sdk.Query.ColumnSet("ust_code")); if (caseType.Attributes.Contains("ust_code") && caseType.Attributes["ust_code"] != null) { tracingService.Trace("ust_code " + caseType.Attributes.Contains("ust_code").ToString()); //Get the Case Type Code typeCase = caseType.Attributes["ust_code"].ToString(); //004 Reclamo OSIPTEL } //myTrace.Trace("typeCase :" + typeCase.ToString()); tracingService.Trace("estado " + estado.ToString()); if (typeCase == "004" && estado == 864340003) //Tipo reclamo OSIPTEL and Estado(Notificado) { //Buscar si hay hijo del reclamo Abierto string codeQueja = "005"; var fetchQueja = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + "<entity name='amxperu_casetype'>" + "<attribute name='amxperu_casetypeid' />" + "<attribute name='amxperu_name' />" + "<attribute name='createdon' />" + "<order attribute='amxperu_name' descending='false' />" + "<filter type='and'>" + "<condition attribute='ust_code' value ='" + codeQueja + "' operator= 'eq' />" + "</filter>" + "</entity>" + "</fetch>"; EntityCollection resultQ = service.RetrieveMultiple(new FetchExpression(fetchQueja)); foreach (var c in resultQ.Entities) { var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + "<entity name='incident'>" + "<attribute name='title' />" + "<attribute name='ticketnumber' />" + "<attribute name='createdon' />" + "<attribute name='caseorigincode' />" + "<attribute name='etel_isdispute' />" + "<attribute name='incidentid' />" + "<attribute name='statuscode' />" + "<attribute name='statecode' />" + "<order attribute='title' descending='false' />" + "<filter type='and'>" + "<condition attribute='amxperu_casetype' operator='eq' uiname='' uitype='amxperu_casetype' value='" + c.Id + "' />" + "<condition attribute='statecode' value='0' operator='eq' /> " + "<condition attribute='parentcaseid' value='" + entity.Id + "' uitype='incident' operator='eq' /> " + "</filter>" + "</entity>" + "</fetch>"; EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetchXml)); foreach (var d in result.Entities) { var fetchXmlCon = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + "<entity name='etel_crmconfiguration'>" + "<attribute name='etel_crmconfigurationid' />" + "<attribute name='etel_name' />" + "<attribute name='createdon' />" + "<attribute name='etel_value' />" + "<attribute name='statecode' />" + "<order attribute='etel_name' descending='false' />" + "<filter type='and'>" + "<condition attribute='etel_name' operator='eq' uiname='' value='ResolveOSIPTELClaim' />" + "</filter>" + "</entity>" + "</fetch>"; EntityCollection resultCon = service.RetrieveMultiple(new FetchExpression(fetchXmlCon)); if (resultCon[0].Attributes["etel_value"].ToString() != null) { double plazo = Convert.ToUInt32(resultCon[0].Attributes["etel_value"]); for (int i = 0; i < plazo; i++) { if (modifiedOn.DayOfWeek == DayOfWeek.Sunday || modifiedOn.DayOfWeek == DayOfWeek.Saturday) { plazo = plazo + 1; } modifiedOn = modifiedOn.AddDays(1); } DateTime fechaUtil = modifiedOn.AddDays(1); DateTime fechaActual = DateTime.Now; if (fechaUtil < fechaActual) { if (d.Attributes.Contains("statecode") && d["statecode"] != null) { estadoC = ((OptionSetValue)dataCase.Attributes["statecode"]).Value; if (estadoC != 0) { Entity resolution = new Entity("incidentresolution"); resolution["subject"] = "Closed"; resolution["incidentid"] = new EntityReference(dataCase.LogicalName, dataCase.Id); CloseIncidentRequest closecase = new CloseIncidentRequest(); closecase.IncidentResolution = resolution; closecase.Status = new OptionSetValue(5); CloseIncidentResponse closeresponse = (CloseIncidentResponse)service.Execute(closecase); } } else { Entity resolution = new Entity("incidentresolution"); resolution["subject"] = "Closed"; resolution["incidentid"] = new EntityReference(dataCase.LogicalName, dataCase.Id); CloseIncidentRequest closecase = new CloseIncidentRequest(); closecase.IncidentResolution = resolution; closecase.Status = new OptionSetValue(5); CloseIncidentResponse closeresponse = (CloseIncidentResponse)service.Execute(closecase); } } } } } } //throw new InvalidPluginExecutionException("Mensaje de error. "); } } catch (global::System.Exception) { throw; } }
public override async Task <IList <object> > GenerateInputParameters(string configuration, IWorkflowContext context) { return(await Task.FromResult(new List <object> { })); }
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { DateTime originalDate = OriginalDate.Get(executionContext); int businessDaysToAdd = BusinessDaysToAdd.Get(executionContext); EntityReference holidaySchedule = HolidayClosureCalendar.Get(executionContext); Entity calendar = null; EntityCollection calendarRules = null; if (holidaySchedule != null) { calendar = service.Retrieve("calendar", holidaySchedule.Id, new ColumnSet(true)); if (calendar != null) { calendarRules = calendar.GetAttributeValue <EntityCollection>("calendarrules"); } } DateTime tempDate = originalDate; if (businessDaysToAdd > 0) { while (businessDaysToAdd > 0) { tempDate = tempDate.AddDays(1); if (tempDate.DayOfWeek == DayOfWeek.Sunday || tempDate.DayOfWeek == DayOfWeek.Saturday) { continue; } if (calendar == null) { businessDaysToAdd--; continue; } bool isHoliday = false; foreach (Entity calendarRule in calendarRules.Entities) { DateTime startTime = calendarRule.GetAttributeValue <DateTime>("starttime"); //Not same date if (!startTime.Date.Equals(tempDate.Date)) { continue; } //Not full day event if (startTime.Subtract(startTime.TimeOfDay) != startTime || calendarRule.GetAttributeValue <int>("duration") != 1440) { continue; } isHoliday = true; break; } if (!isHoliday) { businessDaysToAdd--; } } } else if (businessDaysToAdd < 0) { while (businessDaysToAdd < 0) { tempDate = tempDate.AddDays(-1); if (tempDate.DayOfWeek == DayOfWeek.Sunday || tempDate.DayOfWeek == DayOfWeek.Saturday) { continue; } if (calendar == null) { businessDaysToAdd++; continue; } bool isHoliday = false; foreach (Entity calendarRule in calendarRules.Entities) { DateTime startTime = calendarRule.GetAttributeValue <DateTime>("starttime"); //Not same date if (!startTime.Date.Equals(tempDate.Date)) { continue; } //Not full day event if (startTime.Subtract(startTime.TimeOfDay) != startTime || calendarRule.GetAttributeValue <int>("duration") != 1440) { continue; } isHoliday = true; break; } if (!isHoliday) { businessDaysToAdd++; } } } DateTime updatedDate = tempDate; UpdatedDate.Set(executionContext, updatedDate); } catch (Exception ex) { tracer.Trace("Exception: {0}", ex.ToString()); } }
public async Task <IWorkfalowActivityResult> Execute(WorkfalowActivity activity, IWorkflowContext context) { //跟踪活动 context.CurrentActivity = activity.ID; context.TraceService.Trace(context.ResourceType, context.ResourceInfo, context.UserInfo, context.CurrentDescription, context.CurrentNode, context.CurrentAction, context.CurrentBlock, context.CurrentActivity, string.Empty); List <object> inputParameters = new List <object>(); //获取输入参数 foreach (var pItem in activity.InputParameters.Values) { inputParameters.Add(await pItem.Calculate(context)); } var service = getService(activity.Type); //获取从配置文件获取额外输入参数 var extraInputParameters = await service.GenerateInputParameters(activity.Configuration, context); inputParameters.AddRange(extraInputParameters); return(await service.Execute(inputParameters, context)); }
protected override void Execute(CodeActivityContext executionContext) { try { // Create tracing service for the plugin trace ITracingService tracingService = executionContext.GetExtension <ITracingService>(); tracingService.Trace("Create Service"); #region Retrieve the execution context service. IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); #endregion tracingService.Trace("Retrieve Campaign Response"); #region Retrieve the campaign response. tracingService.Trace("Retrieve the GUID for campaign response"); // Retrieve the GUID for campaign response _campaignResponseId = this.inputContract.Get(executionContext).Id; #endregion // Instantiate QueryExpression QEaccount var QEaccount = new QueryExpression("account"); // Add columns to QEaccount.ColumnSet QEaccount.ColumnSet.AddColumns("accountnumber", "accountid"); // Add link-entity QEaccount_activityparty var QEaccount_activityparty = QEaccount.AddLink("activityparty", "accountid", "partyid"); QEaccount_activityparty.EntityAlias = "partyid"; // Add link-entity QEaccount_activityparty_campaignresponse var QEaccount_activityparty_campaignresponse = QEaccount_activityparty.AddLink("campaignresponse", "activityid", "activityid"); QEaccount_activityparty_campaignresponse.EntityAlias = "cr"; // Define filter QEaccount_activityparty_campaignresponse.LinkCriteria QEaccount_activityparty_campaignresponse.LinkCriteria.AddCondition("activityid", ConditionOperator.Equal, _campaignResponseId); tracingService.Trace("Create EntityCollection to store entity results and retrieve Account."); //Create EntityCollection to store entity results and retrieve contracts. Just in case there are multiple contracts associated. EntityCollection crAccounts = service.RetrieveMultiple(QEaccount); Entity _cracct = new Entity(); tracingService.Trace("Return Total Accounts " + crAccounts.TotalRecordCount); tracingService.Trace("Return Accounts: " + crAccounts.EntityName); tracingService.Trace("Return Accounts: " + crAccounts.Entities.Count); tracingService.Trace("Return Accounts: " + crAccounts.Entities.ToString()); if (crAccounts.Entities.Count > 0) { //Iterate the collection for the contractline which should only be one. foreach (var cracct in crAccounts.Entities) { tracingService.Trace("Return Campaign Responses: " + cracct.Attributes["accountid"]); // Assign Contract to Contract Entity property _cracct = cracct; } tracingService.Trace("Return Found Account"); outAccount.Set(executionContext, new EntityReference("account", (Guid)_cracct.Attributes["accountid"])); } }catch (Exception e) { throw new Exception(e.Message); } }
private void ExecuteWorkflow(CodeActivityContext executionContext, IWorkflowContext workflowContext, IOrganizationServiceFactory serviceFactory, IOrganizationService service, ITracingService tracing) { }
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { EntityReference emailToSend = EmailToSend.Get(executionContext); Guid roleId = IsGuid(RecipientRole.Get(executionContext)); bool sendEmail = SendEmail.Get(executionContext); if (roleId == Guid.Empty) { tracer.Trace("Invalid Role GUID"); throw new InvalidWorkflowException("Invalid Role GUID"); } List <Entity> ccList = new List <Entity>(); Entity email = RetrieveEmail(service, emailToSend.Id); if (email == null) { UsersAdded.Set(executionContext, 0); return; } //Add any pre-defined recipients specified to the array foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("cc").Entities) { ccList.Add(activityParty); } EntityCollection users = GetRoleUsers(service, roleId); ccList = ProcessUsers(users, ccList); //Update the email email["cc"] = ccList.ToArray(); service.Update(email); //Send if (sendEmail) { SendEmailRequest request = new SendEmailRequest { EmailId = emailToSend.Id, TrackingToken = string.Empty, IssueSend = true }; service.Execute(request); } UsersAdded.Set(executionContext, ccList.Count); } catch (Exception ex) { tracer.Trace("Exception: {0}", ex.ToString()); } }
private void ExecuteWorkflow(CodeActivityContext executionContext, IWorkflowContext workflowContext, IOrganizationServiceFactory serviceFactory, IOrganizationService service, ITracingService tracing) { //YOUR WORKFLOW-CODE GO HERE }
/// <summary> /// If the imageName is populated and the PostEntityImages contains the given imageName Key, the Value is cast to the Entity type T, else null is returned /// If the imageName is not populated, than the first image in PostEntityImages with a value, is cast to the Entity type T, else null is returned /// </summary> /// <typeparam name="T"></typeparam> /// <param name="context"></param> /// <returns></returns> public static T GetPostEntity <T>(this IWorkflowContext context) where T : Entity { return(context.PreEntityImages.GetEntity <T>(DLaBExtendedWorkflowContext.WorkflowImageNames.PostImage)); }
protected override void Execute(CodeActivityContext wfContext) { ITracingService ITracingService = wfContext.GetExtension <ITracingService>(); IWorkflowContext context = wfContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory IOrganizationServiceFactory = wfContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = IOrganizationServiceFactory.CreateOrganizationService(context.UserId); try { string allFields = fields.Get <string>(wfContext); string allArabicFields = arabicFields.Get <string>(wfContext); string[] allFieldsArray = allFields.Split(','); string[] allArabicFieldsArray = allArabicFields.Split(','); ColumnSet set = new ColumnSet(allFieldsArray); Entity entity = service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, set); if (entity.Id != Guid.Empty) { Entity currentEntity = new Entity(); currentEntity.LogicalName = context.PrimaryEntityName; currentEntity.Id = context.PrimaryEntityId; for (int i = 0; i < allFieldsArray.Length; i++) { string value = string.Empty; if (entity.Attributes.Contains(allFieldsArray[i])) { // Create the request RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest { EntityLogicalName = context.PrimaryEntityName, LogicalName = allFieldsArray[i], RetrieveAsIfPublished = false }; // Execute the request RetrieveAttributeResponse attributeResponse = (RetrieveAttributeResponse)service.Execute(attributeRequest); //if (context.PrimaryEntityName == "new_contracting" || attributeResponse.AttributeMetadata.AttributeType.Value.ToString() == "Money") if (entity[allFieldsArray[i]] is Money) { value = ((Money)entity[allFieldsArray[i]]).Value.ToString(); value = String.Format("{0:N}", Convert.ToDouble(value)); } else { value = entity[allFieldsArray[i]].ToString(); } if (value != string.Empty) { string[] valueArray = value.Split('.'); currentEntity[allArabicFieldsArray[i]] = ConvertNumeralsToArabic(valueArray[0]); } } } service.Update(currentEntity); } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message); } }
public override bool PreResolve(IWorkflowContext context) { return(true); }
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracingService = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); tracingService.Trace("{0}{1}", "Start Custom Workflow Activity: SetOperatingCapacity", DateTime.Now.ToLongTimeString()); var recordId = context.PrimaryEntityId; try { //Get Global Capacity values var capacity = new Services.CapacityFactors(service); Services.OperatingCapacity capacityService = new Services.OperatingCapacity(service, tracingService, capacity); #region Update Draft Project Requests //Update Draft Project Requests var projectRequestFetchXML = "<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" distinct=\"false\">" + "<entity name=\"caps_project\" > " + "<attribute name=\"caps_facility\" /> " + "<attribute name=\"caps_changeindesigncapacitykindergarten\" /> " + "<attribute name=\"caps_changeindesigncapacityelementary\" /> " + "<attribute name=\"caps_changeindesigncapacitysecondary\" /> " + "<attribute name=\"caps_futurelowestgrade\" /> " + "<attribute name=\"caps_futurehighestgrade\" /> " + "<order attribute=\"caps_projectcode\" descending=\"false\" /> " + "<filter type=\"and\" > " + "<condition attribute=\"statuscode\" operator=\"eq\" value=\"1\" /> " + "<filter type=\"or\" > " + "<condition attribute=\"caps_changeinoperatingcapacitykindergarten\" operator=\"not-null\" /> " + "<condition attribute=\"caps_changeinoperatingcapacityelementary\" operator=\"not-null\" /> " + "<condition attribute=\"caps_changeinoperatingcapacitysecondary\" operator=\"not-null\" /> " + "</filter> " + "</filter> " + "</entity> " + "</fetch> "; EntityCollection projectResults = service.RetrieveMultiple(new FetchExpression(projectRequestFetchXML)); foreach (caps_Project projectRecord in projectResults.Entities) { if (projectRecord.caps_FutureLowestGrade != null && projectRecord.caps_FutureHighestGrade != null) { var startingDesign_K = 0; var startingDesign_E = 0; var startingDesign_S = 0; //if facility exists, then retrieve it if (projectRecord.caps_Facility != null && projectRecord.caps_Facility.Id != Guid.Empty) { var facility = service.Retrieve(caps_Facility.EntityLogicalName, projectRecord.caps_Facility.Id, new ColumnSet("caps_adjusteddesigncapacitykindergarten", "caps_adjusteddesigncapacityelementary", "caps_adjusteddesigncapacitysecondary")) as caps_Facility; if (facility != null) { startingDesign_K = facility.caps_AdjustedDesignCapacityKindergarten.GetValueOrDefault(0); startingDesign_E = facility.caps_AdjustedDesignCapacityElementary.GetValueOrDefault(0); startingDesign_S = facility.caps_AdjustedDesignCapacitySecondary.GetValueOrDefault(0); } } var changeInDesign_K = startingDesign_K + projectRecord.caps_ChangeinDesignCapacityKindergarten.GetValueOrDefault(0); var changeInDesign_E = startingDesign_E + projectRecord.caps_ChangeinDesignCapacityElementary.GetValueOrDefault(0); var changeInDesign_S = startingDesign_S + projectRecord.caps_ChangeinDesignCapacitySecondary.GetValueOrDefault(0); var result = capacityService.Calculate(changeInDesign_K, changeInDesign_E, changeInDesign_S, projectRecord.caps_FutureLowestGrade.Value, projectRecord.caps_FutureHighestGrade.Value); var recordToUpdate = new caps_Project(); recordToUpdate.Id = recordId; recordToUpdate.caps_ChangeinOperatingCapacityKindergarten = Convert.ToInt32(result.KindergartenCapacity); recordToUpdate.caps_ChangeinOperatingCapacityElementary = Convert.ToInt32(result.ElementaryCapacity); recordToUpdate.caps_ChangeinOperatingCapacitySecondary = Convert.ToInt32(result.SecondaryCapacity); service.Update(recordToUpdate); } else { //blank out operating capacity var recordToUpdate = new caps_Project(); recordToUpdate.Id = recordId; recordToUpdate.caps_ChangeinOperatingCapacityKindergarten = null; recordToUpdate.caps_ChangeinOperatingCapacityElementary = null; recordToUpdate.caps_ChangeinOperatingCapacitySecondary = null; service.Update(recordToUpdate); } } #endregion this.error.Set(executionContext, false); } catch (Exception ex) { tracingService.Trace("Error Details: {0}", ex.Message); //might want to also include error message this.error.Set(executionContext, true); this.errorMessage.Set(executionContext, ex.Message); } tracingService.Trace("{0}{1}", "End Custom Workflow Activity: SetOperatingCapacity", DateTime.Now.ToLongTimeString()); }
protected override void Execute(CodeActivityContext executionContext) { #region "Load CRM Service from context" Common objCommon = new Common(executionContext); objCommon.tracingService.Trace("Load CRM Service from context --- OK"); #endregion #region "Read Parameters" String _FetchXML = this.FetchXML.Get(executionContext); if (_FetchXML == null || _FetchXML == "") { return; } objCommon.tracingService.Trace("_FetchXML=" + _FetchXML); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); #endregion #region "RollupFunctions Execution" string pagingCookie = null; int recordCount = 0; int pageNumber = 1; int fetchCount = 250; List <object> objNumbers = new List <object>(); while (true) { _FetchXML = _FetchXML.Replace("{PARENT_GUID}", context.PrimaryEntityId.ToString()); string xml = CreateXml(_FetchXML, pagingCookie, pageNumber, fetchCount); RetrieveMultipleRequest fetchRequest1 = new RetrieveMultipleRequest { Query = new FetchExpression(xml) }; EntityCollection returnCollection = ((RetrieveMultipleResponse)objCommon.service.Execute(fetchRequest1)).EntityCollection; foreach (var c in returnCollection.Entities) { KeyValuePair <string, object> attribute = new KeyValuePair <string, object>(); foreach (KeyValuePair <string, object> att in c.Attributes) { attribute = att; break; } objCommon.tracingService.Trace("Value: " + attribute.Value); objNumbers.Add(attribute.Value); } if (returnCollection.MoreRecords) { pageNumber++; pagingCookie = returnCollection.PagingCookie; } else { break; } } objCommon.tracingService.Trace("Query Data --- Done"); decimal _count = 0; decimal _sum = 0; decimal _min = 0; decimal _max = 0; decimal _average = 0; if (objNumbers.Count > 0) { foreach (object obj in objNumbers) { _count++; decimal number = this.GetValue(obj); _sum += number; if (number < _min || _count == 1) { _min = number; } if (number > _max || _count == 1) { _max = number; } } if (_count > 0) { _average = _sum / _count; } } this.Count.Set(executionContext, _count); this.Sum.Set(executionContext, _sum); this.Average.Set(executionContext, _average); this.Min.Set(executionContext, _min); this.Max.Set(executionContext, _max); #endregion }
//internal static string CustomEntityName = "new_isvactivityverifier"; protected override void Execute(CodeActivityContext executionContext) { IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId); ServiceBusListener serviceBusListener = new ServiceBusListener(); MessageBufferClient messageBufferClient = serviceBusListener.GetMessageBufferClient(); Message message = null; try { message = messageBufferClient.Retrieve(); } catch (FaultException) { //MessageBufferClient.Retrieve() will throw a timeout exception, if there are no packets to retrieve. So, do not throw if it is a TimeOutException. //if (!(fe.Message.Contains("Message could not be retrieved"))) //{ // throw fe; //} //continue; } catch (Exception) { //MessageBufferClient.Retrieve() will throw a timeout exception, if there are no packets to retrieve. So, do not throw if it is a TimeOutException. //if (!(ex.GetType().Name.Equals("TimeoutException") && ex.Message.Equals("Message could not be retrieved: RequestTimeout, Request Timeout"))) //{ // throw ex; //} //continue; } foreach (MessageHeader header in message.Headers) { if (header.Name != "SecurityToken") { continue; } StringBuilder sb = new StringBuilder(); var writer = XmlWriter.Create(sb); header.WriteHeader(writer, MessageVersion.Default); writer.Close(); string headerString = sb.ToString(); string startNode = "<SecurityToken xmlns=\"ns\">"; int startIndex = headerString.IndexOf(startNode) + startNode.Length; int endIndex = headerString.LastIndexOf("</SecurityToken>"); string tokenString = headerString.Substring(startIndex, endIndex - startIndex); } switch (message.Headers.Action) { case "https://schemas.microsoft.com/xrm/2011/Contracts/IServiceEndpointPlugin/Execute": ProcessMessages(message.GetBody <RemoteExecutionContext>(), service); break; //} //end - infinite for loop } }
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 GenerateNoteMapActivity.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("GenerateNoteMapActivity.Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); if (_service == null) { IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); _service = serviceFactory.CreateOrganizationService(context.UserId); _privService = serviceFactory.CreateOrganizationService(null); } try { tracingService.Trace("Retriving Annotation"); Annotation annotation = (Annotation)_privService.Retrieve( Annotation.EntityLogicalName, context.PrimaryEntityId, new ColumnSet(new string[] { "annotationid", "objectid" })); tracingService.Trace("Retriving Property List"); jll_propertylist propertyList = (jll_propertylist)_privService.Retrieve( jll_propertylist.EntityLogicalName, annotation.ObjectId.Id, new ColumnSet(new string[] { "jll_autozooming", "jll_mapzoom", "jll_pageorientation" })); tracingService.Trace("Have data"); EntityCollection rows = GetPropertyData(annotation.ObjectId.Id, _privService); if (rows.Entities.Any()) { XmlDocument xdoc = new XmlDocument(); var dataSetsNode = xdoc.CreateElement("datasets"); xdoc.AppendChild(dataSetsNode); DocGeneration.MapHelper.SerialiseData(dataSetsNode, "parent", rows, tracingService); XPathNavigator navigator = xdoc.CreateNavigator(); XPathNodeIterator _longitudeNodes = navigator.Select(@"//jll_longitude"); XPathNodeIterator _latitudeNodes = navigator.Select(@"//jll_latitude"); XPathNodeIterator _dataNodes = navigator.Select(@"//Entity"); if (_longitudeNodes.Count == 0 && _latitudeNodes.Count == 0) { return; } decimal coeff = 1.413542M; decimal width = GetValue(_privService, "map_width", 1010); //decimal width = 1010; decimal height = (int)(width / coeff); string name = @"landscape"; if (propertyList.jll_pageorientation != null) { //portrait if (propertyList.jll_pageorientation.Value == 856480001) { height = GetValue(_privService, "map_height", 1010); width = (int)(1010 / coeff); name = @"portrait"; } } string bingMapsKey = GetBingMap(_privService); string culture = GetValue(_privService, @"BingMapCulture", @"en"); string pinType = GetValue(_privService, @"PinType", @"0"); decimal?zoom = DocGeneration.MapHelper.CheckZooming(propertyList.jll_mapzoom.IsNullToDecimal(), tracingService); bool autoZooming = (propertyList.jll_autozooming ?? true); /*END OF */ string mapData = DocGeneration.MapHelper.GetMap(_longitudeNodes, _latitudeNodes, width, height, bingMapsKey, culture, zoom, autoZooming, null, null, pinType, null, _dataNodes, tracingService); Annotation note = new Annotation() { AnnotationId = context.PrimaryEntityId, Subject = name, //string.Format("{0}/{1}", width, height), IsDocument = true, DocumentBody = mapData, FileName = @"map.jpeg", MimeType = @"image/jpeg", NoteText = string.Format("{0} rows", rows.Entities.Count) }; _privService.Update(note); } } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); throw; } tracingService.Trace("Exiting GenerateNoteMapActivity.Execute(), Correlation Id: {0}", context.CorrelationId); }
public async Task <IWorkfalowActivityResult> Execute(IWorkflowContext context) { return(await _imp.Execute(this, context)); }
protected override void Execute(CodeActivityContext context) { int duration = 0; int firstReminderDuration = 0; int secondReminderDuration = 0; bool isRecurring = false; string startDatevalue = string.Empty; string endDatevalue = string.Empty; string renewalDatevalue = string.Empty; string firstReminderDatevalue = string.Empty; string secondReminderDatevalue = string.Empty; DateTime endDate; DateTime renewalDate; DateTime firstReminderDate; DateTime secondReminderDate; log = new StringBuilder(string.Empty); IWorkflowContext workFlowContext = context.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory factory = context.GetExtension <IOrganizationServiceFactory>(); _crmService = factory.CreateOrganizationService(null); serviceEntityId = workFlowContext.PrimaryEntityId; Entity serviceEntity = _crmService.Retrieve(CrmFields.ServiceLogicalName, serviceEntityId, new ColumnSet(true)); if (serviceEntity.Contains(CrmFields.Recurring)) { isRecurring = serviceEntity.GetAttributeValue <Boolean>(CrmFields.Recurring); } if (serviceEntity.Contains(CrmFields.Duration)) { duration = serviceEntity.GetAttributeValue <OptionSetValue>(CrmFields.Duration).Value; } if (serviceEntity.Contains(CrmFields.FirstReminderDuration)) { firstReminderDuration = serviceEntity.GetAttributeValue <Int32>(CrmFields.FirstReminderDuration); } if (serviceEntity.Contains(CrmFields.SecondReminderDuration)) { secondReminderDuration = serviceEntity.GetAttributeValue <Int32>(CrmFields.SecondReminderDuration); } if (serviceEntity.Contains(CrmFields.StartDate)) { startDatevalue = serviceEntity.GetAttributeValue <DateTime>(CrmFields.StartDate).ToString(); } if (serviceEntity.Contains(CrmFields.EndDate)) { endDatevalue = serviceEntity.GetAttributeValue <DateTime>(CrmFields.EndDate).ToString(); } if (serviceEntity.Contains(CrmFields.RenewDate)) { renewalDatevalue = serviceEntity.GetAttributeValue <DateTime>(CrmFields.RenewDate).ToString(); } //if (serviceEntity.Contains(CrmFields.FirstReminderDate)) //{ // firstReminderDatevalue = serviceEntity.GetAttributeValue<DateTime>(CrmFields.FirstReminderDate).ToString(); //} //if (serviceEntity.Contains(CrmFields.SecondReminderDate)) //{ // secondReminderDatevalue = serviceEntity.GetAttributeValue<DateTime>(CrmFields.SecondReminderDate).ToString(); //} //Set renewal date //if (!string.IsNullOrEmpty(startDatevalue)) //{ // switch (duration) // { // case (int)CrmFields.DurationValues.Monthly : // renewalDate = DateTime.Parse(startDatevalue).AddMonths(1); // break; // case (int)CrmFields.DurationValues.Bimonthly: // renewalDate = DateTime.Parse(startDatevalue).AddMonths(2); // break; // case (int)CrmFields.DurationValues.Quarterly: // renewalDate = DateTime.Parse(startDatevalue).AddMonths(3); // break; // case (int)CrmFields.DurationValues.Semiannually: // renewalDate = DateTime.Parse(startDatevalue).AddMonths(6); // break; // case (int)CrmFields.DurationValues.Annually: // renewalDate = DateTime.Parse(startDatevalue).AddMonths(12); // break; // } //} //else //{ // renewalDate = DateTime.Parse(renewalDatevalue).AddMonths(duration); // //renewalDate = DateTime.Parse(renewalDatevalue).AddHours(duration); //} ////throw new NotImplementedException(); //Set First Reminder Date endDate = DateTime.Parse(endDatevalue); if (firstReminderDuration != 0) { firstReminderDate = endDate.AddDays(-(firstReminderDuration)); //firstReminderDate = renewalDate.AddMinutes(-(firstReminderDuration)); serviceEntity[CrmFields.FirstReminderDate] = firstReminderDate; //FirstReminderDate.Set(context, firstReminderDate); } //Set Second Reminder Date if (secondReminderDuration != 0) { secondReminderDate = endDate.AddDays(-(secondReminderDuration)); //secondReminderDate = renewalDate.AddMinutes(-(secondReminderDuration)); serviceEntity[CrmFields.SecondReminderDate] = secondReminderDate; //SecondReminderDate.Set(context, secondReminderDate); } //serviceEntity[CrmFields.RenewDate] = renewalDate; //this.RenewalDate.Set(context, renewalDate); _crmService.Update(serviceEntity); }
protected override void Execute(CodeActivityContext context) { try { // Get the context service. IWorkflowContext Icontext = context.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = context.GetExtension <IOrganizationServiceFactory>(); // Use the context service to create an instance of IOrganizationService. IOrganizationService service = serviceFactory.CreateOrganizationService(Icontext.InitiatingUserId); //get input fields var birthDate = Birthdate.Get(context) == new DateTime(0001, 01, 01) ? new DateTime(1753, 01, 01) : Birthdate.Get(context); var firstName = Firstname.Get(context); var lastName = Lastname.Get(context); var userName = Username.Get(context) == null ? "" : Username.Get(context); // made in fetchXML builder // Instantiate QueryExpression QEcontact var QEcontact = new QueryExpression("contact"); // Add columns to QEcontact.ColumnSet QEcontact.ColumnSet.AddColumns("fullname", "firstname", "lastname", "birthdate", "sdu_brugernavn", "sdu_domne", "emailaddress1", "address1_city", "jobtitle", "sdu_crmomkostningssted", "sdu_brugernavn", "address1_line1"); // Define filter QEcontact.Criteria // all must match birthdate + sdu_crmudlb + opdateret fra fim var QEcontact_Criteria = new FilterExpression(); QEcontact.Criteria.AddFilter(QEcontact_Criteria); // Define filter QEcontact_Criteria // either match on username, or firstname + lastname QEcontact_Criteria.FilterOperator = LogicalOperator.Or; QEcontact_Criteria.AddCondition("sdu_brugernavn", ConditionOperator.Equal, userName); var QEcontact_Criteria_name = new FilterExpression(); QEcontact_Criteria.AddFilter(QEcontact_Criteria_name); // Define filter QEcontact_Criteria_name_birthdate QEcontact_Criteria_name.AddCondition("firstname", ConditionOperator.Like, "%" + firstName + "%"); QEcontact_Criteria_name.AddCondition("lastname", ConditionOperator.Like, "%" + lastName + "%"); QEcontact_Criteria_name.AddCondition("birthdate", ConditionOperator.On, birthDate); var QEcontact_Criteria_state = new FilterExpression(); QEcontact.Criteria.AddFilter(QEcontact_Criteria_state); // define filter QEcontact_Criteria_dates QEcontact_Criteria_state.AddCondition("statecode", ConditionOperator.Equal, RecordStatus.Get(context) == false ? 1 : 0); // kontoen er inaktiv QEcontact_Criteria_state.AddCondition("sdu_crmudlb", ConditionOperator.OnOrAfter, DateTime.Today.AddMonths(ExpirationDateLimit.Get(context) * -1)); // CRM udløb er maksimalt 13 måneder gammelt QEcontact_Criteria_state.AddCondition("sdu_crmudlb", ConditionOperator.OnOrBefore, DateTime.Today.AddDays(-1)); // CRM er igår eller før QEcontact_Criteria_state.AddCondition("jobtitle", ConditionOperator.NotLike, "%Studentermedhjælp%"); //find records var queryResult = service.RetrieveMultiple(QEcontact); if (queryResult.Entities.Count == 1) { foreach (var record in queryResult.Entities) { // fullname FullnameOutput.Set(context, record.GetAttributeValue <string>("fullname")); // contactid ContactID.Set(context, record.GetAttributeValue <Guid>("contactid").ToString()); // omkostningssted var omkStedIdLocal = SearchForRecord(service, "sdu_brugeradmomksted", new KeyValuePair <string, string>("sdu_omksted", record.GetAttributeValue <EntityReference>("sdu_crmomkostningssted").Id.ToString()), new KeyValuePair <string, string>("", ""), "sdu_brugeradmomkstedid"); OmkStedId.Set(context, omkStedIdLocal); // domæne String[] seperator_domaene = { "_" }; if (omkStedIdLocal != "") { Domaene.Set(context, SearchForRecord(service, "sdu_domner", new KeyValuePair <string, string>("sdu_brugeradmomksted", omkStedIdLocal.Split(seperator_domaene, StringSplitOptions.RemoveEmptyEntries).GetValue(0).ToString()), new KeyValuePair <string, string>("sdu_name", record.GetAttributeValue <string>("sdu_domne")), "sdu_domnerid")); // email domæne String[] seperator_emailDomaene = { "@" }; var emailDomainFromContact = "@" + record.GetAttributeValue <string>("emailaddress1").Split(seperator_emailDomaene, StringSplitOptions.RemoveEmptyEntries).GetValue(1).ToString(); EmailDomaene.Set(context, SearchForRecord(service, "sdu_emaildomne", new KeyValuePair <string, string>("sdu_brugeradmomksted", omkStedIdLocal.Split(seperator_domaene, StringSplitOptions.RemoveEmptyEntries).GetValue(0).ToString()), new KeyValuePair <string, string>("sdu_name", emailDomainFromContact.Replace(" ", "")), // remove whitespaces "sdu_emaildomneid")); } else { // set output parameters to empty strings, if no omk sted Domaene.Set(context, ""); EmailDomaene.Set(context, ""); } // lokation + arbejdsadresse var LokationOptionSetValue = ""; switch (record.GetAttributeValue <string>("address1_city")) { case "Odense": LokationOptionSetValue = "100000000"; break; case "Odense M": LokationOptionSetValue = "100000000"; break; case "Odense C": LokationOptionSetValue = "100000000"; break; case "Sønderborg": LokationOptionSetValue = "100000001"; break; case "Esbjerg": LokationOptionSetValue = "100000002"; break; case "Slagelse": LokationOptionSetValue = "100000003"; break; case "Kolding": LokationOptionSetValue = "100000004"; break; default: break; } var workAddress = record.GetAttributeValue <string>("address1_line1") == null ? "" : record.GetAttributeValue <string>("address1_line1"); if (workAddress.Contains("Campusvej")) { LokationOptionSetValue = LokationOptionSetValue + "_" + "100000000"; } else if (workAddress.Contains("J.B. Winsløws Vej")) { LokationOptionSetValue = LokationOptionSetValue + "_" + "100000001"; } Lokation.Set(context, LokationOptionSetValue); // stillingsbetegnelse StillingsBetegnelse.Set(context, SearchForRecord(service, "sdu_stikogruppe", new KeyValuePair <string, string>("sdu_name", record.GetAttributeValue <string>("jobtitle") == null ? "" : record.GetAttributeValue <string>("jobtitle")), new KeyValuePair <string, string>("", ""), "sdu_stikogruppeid")); // fødselsdato BirthDateOutput.Set(context, record.GetAttributeValue <DateTime>("birthdate") < new DateTime(1900, 01, 01) ? DateTime.Now : record.GetAttributeValue <DateTime>("birthdate")); // brugernavn UsernameOutput.Set(context, record.GetAttributeValue <string>("sdu_brugernavn")); } } else { FullnameOutput.Set(context, ""); ContactID.Set(context, ""); OmkStedId.Set(context, ""); Domaene.Set(context, ""); EmailDomaene.Set(context, ""); Lokation.Set(context, ""); StillingsBetegnelse.Set(context, ""); BirthDateOutput.Set(context, DateTime.Now); UsernameOutput.Set(context, ""); } } catch (Exception ex) { throw (ex); } }
private void Process(CodeActivityContext executionContext, IWorkflowContext context, IOrganizationService service, OrganizationServiceContext orgContext) { trace.Trace("In Process function"); trace.Trace("Process function ends"); }
/// <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 CreateConfigXml.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("CreateConfigXml.Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { ConfigWRExists.Set(executionContext, true); string ns = Namespace.Get(executionContext); bool traceEnable = EnableTrace.Get(executionContext); XDocument xDoc = null; Guid webresourceId = Guid.Empty; QueryByAttribute query = new QueryByAttribute("webresource"); query.AddAttributeValue("name", XML_WEBRESOURCE); query.AddAttributeValue("webresourcetype", 4); query.ColumnSet = new ColumnSet("name", "content"); EntityCollection ec = service.RetrieveMultiple(query); #region Create or Update existing XML WebResource if (ec == null || ec.Entities.Count == 0) { ConfigWRExists.Set(executionContext, false); if (CreateConfigWR.Get(executionContext)) { #region xDoc = RetrieveEntityMetadata(service, ns: ns, traceEnable: traceEnable); Entity xmlWebResource = new Entity("webresource"); xmlWebResource["name"] = XML_WEBRESOURCE; xmlWebResource["displayname"] = "GenericHierarchyRollupXml.xml"; xmlWebResource["content"] = Convert.ToBase64String(UnicodeEncoding.UTF8.GetBytes(xDoc.ToString())); xmlWebResource["webresourcetype"] = new OptionSetValue(4); webresourceId = service.Create(xmlWebResource); ec.Entities.Add(xmlWebResource); PublishWebResource(webresourceId, service); #endregion } } else if (RefreshConfig.Get <bool>(executionContext)) { #region xDoc = RetrieveEntityMetadata(service, ns: ns, traceEnable: traceEnable); bool webResourceChanged = false; byte[] binary = Convert.FromBase64String(ec.Entities[0].Attributes["content"].ToString()); XDocument xDocExisting = XDocument.Parse(UnicodeEncoding.UTF8.GetString(binary)); foreach (XElement xe in xDoc.Root.Elements("entity")) { if (xDocExisting.Root.Elements("entity").Where(a => a.Attribute("ReferencingEntity").Value == xe.Attribute("ReferencingEntity").Value&& a.Attribute("ReferencingAttribute").Value == xe.Attribute("ReferencingAttribute").Value&& a.Attribute("ReferencedEntity").Value == xe.Attribute("ReferencedEntity").Value).Count() == 0) { xDocExisting.Root.Add(xe); webResourceChanged = true; } } if (webResourceChanged) { ec.Entities[0].Attributes["content"] = Convert.ToBase64String(UnicodeEncoding.UTF8.GetBytes(xDocExisting.ToString())); service.Update(ec.Entities[0]); PublishWebResource(ec.Entities[0].Id, service); } #endregion } #endregion if (!string.IsNullOrEmpty(EnabledItems.Get <string>(executionContext))) { #region Set IsEnable string[] enabledItemList = EnabledItems.Get <string>(executionContext).Split(new char[] { ',' }); byte[] binary = Convert.FromBase64String(ec.Entities[0].Attributes["content"].ToString()); XDocument xDocExisting = XDocument.Parse(UnicodeEncoding.UTF8.GetString(binary)); UpdateConfigXML(enabledItemList, xDocExisting, ns: ns, traceEnable: traceEnable); ec.Entities[0].Attributes["content"] = Convert.ToBase64String(UnicodeEncoding.UTF8.GetBytes(xDocExisting.ToString())); service.Update(ec.Entities[0]); PublishWebResource(ec.Entities[0].Id, service); #endregion } if (ec != null && ec.Entities.Count > 0) { XDocument xDocData = XDocument.Parse(UnicodeEncoding.UTF8.GetString(Convert.FromBase64String(ec.Entities[0].Attributes["content"].ToString()))); Namespace.Set(executionContext, xDocData.Root.Attribute("HierarchyColumnNamespace").Value); EnableTrace.Set(executionContext, string.Compare(xDocData.Root.Attribute("EnableTrace").Value, "true", true) == 0 ? true : false); ConfigHtml.Set(executionContext, XmlToHtmlTransformation(service, xDocData)); } } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } tracingService.Trace("Exiting CreateConfigXml.Execute(), Correlation Id: {0}", context.CorrelationId); }
protected override void Execute(CodeActivityContext executionContext) { //Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); //Create the context IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { //Query for all active payment records QueryExpression query = new QueryExpression(); query.EntityName = "revfinal_paymentrecord"; query.ColumnSet = new ColumnSet(new string[] { "revfinal_payment" }); query.Criteria.AddCondition("statuscode", ConditionOperator.Equal, "Active"); EntityCollection collection = service.RetrieveMultiple(query); //Queries updated APR value QueryExpression query2 = new QueryExpression(); query.EntityName = "revfinal_configuration"; query.ColumnSet = new ColumnSet(new string[] { "revfinal_value" }); query.Criteria.AddCondition("revfinal_name", ConditionOperator.Equal, "baseApr"); EntityCollection collection2 = service.RetrieveMultiple(query2); Entity config = collection2.Entities[0]; Double apr = Convert.ToDouble(config.Attributes["revfinal_value"]); //Query margin value QueryExpression query3 = new QueryExpression(); query.EntityName = "revfinal_configuration"; query.ColumnSet = new ColumnSet(new string[] { "revfinal_value" }); query.Criteria.AddCondition("revfinal_name", ConditionOperator.Equal, "Margin"); EntityCollection collection3 = service.RetrieveMultiple(query2); Entity config2 = collection3.Entities[0]; Double margin = Convert.ToDouble(config2.Attributes["revfinal_value"]); for (int i = 0; i < collection.TotalRecordCount; i++) { //loop through all active payment records and update monthly payment EntityReference mortgage = ((EntityReference)collection.Entities[0].Attributes["revfinal_mortgagerequestid"]); Entity mortgageReq = service.Retrieve(mortgage.LogicalName, mortgage.Id, new ColumnSet(new string[] { "revfinal_contact", "revfinal_mortgageamount", "revfinal_mortgageterm" })); string terms = mortgageReq.Attributes["revfinal_mortgageterm"].ToString(); Double amount = Convert.ToDouble(mortgageReq.Attributes["revfinal_mortgageamount"]); EntityReference contactRef = ((EntityReference)mortgageReq.Attributes["revfinal_contact"]); Entity contact = service.Retrieve(contactRef.LogicalName, contactRef.Id, new ColumnSet(new string[] { "revfinal_riskscore", "address1_country", "address1_stateorprovince" })); Double tax; //Query for State tax or Country tax if (contact.Attributes["address1_country"].ToString() == "Canada") { //Query for Canada's tax QueryExpression query4 = new QueryExpression(); query.EntityName = "revfinal_configuration"; query.ColumnSet = new ColumnSet(new string[] { "revfinal_value" }); query.Criteria.AddCondition("revfinal_name", ConditionOperator.Equal, "Canada"); EntityCollection collection4 = service.RetrieveMultiple(query4); Entity config4 = collection4.Entities[0]; tax = Convert.ToDouble(config4.Attributes["revfinal_value"]); } else { //Query for Statetax using the Contact's state field QueryExpression query4 = new QueryExpression(); query.EntityName = "revfinal_configuration"; query.ColumnSet = new ColumnSet(new string[] { "revfinal_value" }); query.Criteria.AddCondition("revfinal_name", ConditionOperator.Equal, contact.Attributes["address1_stateorprovince"].ToString()); EntityCollection collection4 = service.RetrieveMultiple(query4); Entity config4 = collection4.Entities[0]; tax = Convert.ToDouble(config4.Attributes["revfinal_value"]); } Double finalApr = Convert.ToDouble(((apr + margin) / 100) + Math.Log(Convert.ToDouble(contact.Attributes["revfinal_riskscore"]) + tax)); Double monthlyPayment = Convert.ToDouble((amount * (finalApr / 12)) / (1 - Math.Pow((1 + (finalApr / 12)), -(12 * Convert.ToDouble(terms))))); collection.Entities[i].Attributes["revfinal_payment"] = monthlyPayment; service.Update(collection.Entities[i]); } } }
protected override async Task <IWorkfalowActivityResult> RealExecute(IList <object> inputParameters, IWorkflowContext context) { int type = (int)inputParameters[0]; Guid blockID = (Guid)inputParameters[1]; int status = (int)inputParameters[2]; string actionName = (string)inputParameters[3]; return(await Task.FromResult(new WorkflowActivityResultDefault() { GoTo = new WorkflowGoToResult() { Type = type, BlockID = blockID, Status = status, ActionName = actionName } })); }
protected abstract void Execute(CodeActivityContext activityContext, IWorkflowContext workflowContext, IOrganizationService orgService, ITracingService tracingService);
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); tracer.Trace("Inicialize context"); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); //Create an Organization Service tracer.Trace("Inicialize serviceFactory"); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); tracer.Trace("Inicialize orgService"); IOrganizationService orgService = serviceFactory.CreateOrganizationService(context.InitiatingUserId); //Registered Step Guid var pluginStepGuid = Guid.Empty; try { //Plugin Step object tracer.Trace("Inicialize pluginStep"); CrmPluginStep pluginStep = new CrmPluginStep(); pluginStep.PrimaryEntity = PrimaryEntity.Get <string>(executionContext); tracer.Trace("PrimaryEntity: " + pluginStep.PrimaryEntity); pluginStep.PluginAssemblyName = AssemblyName.Get <string>(executionContext); tracer.Trace("PluginAssemblyName: " + pluginStep.PluginAssemblyName); pluginStep.EventHandler = EventHandler.Get <string>(executionContext); tracer.Trace("EventHandler: " + pluginStep.EventHandler); pluginStep.Mode = Mode.Get <int>(executionContext); tracer.Trace("Mode: " + pluginStep.Mode); pluginStep.Rank = Rank.Get <int>(executionContext); tracer.Trace("Rank: " + pluginStep.Rank); pluginStep.FilteringAttributes = FilteringAttributes.Get <string>(executionContext); tracer.Trace("FilteringAttributes: " + pluginStep.FilteringAttributes); pluginStep.InvocationSource = InvocationSource.Get <int>(executionContext); tracer.Trace("InvocationSource: " + pluginStep.InvocationSource); pluginStep.Stage = Stage.Get <int>(executionContext); tracer.Trace("Stage: " + pluginStep.Stage); pluginStep.Deployment = Deployment.Get <int>(executionContext); tracer.Trace("Deployment: " + pluginStep.Deployment); pluginStep.Message = Message.Get <string>(executionContext); tracer.Trace("Message: " + pluginStep.Message); pluginStep.Name = pluginStep.EventHandler + ": " + pluginStep.Message + " of " + pluginStep.PrimaryEntity; tracer.Trace("Name: " + pluginStep.Name); pluginStep.tracer = tracer; tracer.Trace("--- Register Plugin Step --- "); //Register Step pluginStepGuid = pluginStep.RegisterPluginStep(ref orgService); tracer.Trace("pluginStepGuid: " + pluginStepGuid); PluginStepGuid.Set(executionContext, pluginStepGuid.ToString()); } catch (Exception e) { throw new InvalidPluginExecutionException("(RegisterPluginStep) Error! " + e.Message); } }
internal static decimal RunCalculation(ITracingService tracingService, IWorkflowContext context, IOrganizationService service, Guid recordId) { tracingService.Trace("{0}{1}", "Regarding Record ID: ", recordId); var columns = new ColumnSet("caps_schooltype" , "caps_projecttype" , "caps_includenlc" , "caps_communitylocation" , "caps_municipalfees" , "caps_constructioncostsspir" , "caps_hostschooldistrict" , "caps_changeindesigncapacitykpositive" , "caps_changeindesigncapacityepositive" , "caps_changeindesigncapacityspositive" , "caps_changeindesigncapacityknegative" , "caps_changeindesigncapacityenegative" , "caps_changeindesigncapacitysnegative" , "caps_facility" , "caps_demolitioncost" , "caps_abnormaltopographycost" , "caps_temporaryaccommodationcost" , "caps_othercost" , "caps_schbadditionalspaceallocation"); var projectRequestRecord = service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, columns) as caps_Project; var projectTypeRecord = service.Retrieve(projectRequestRecord.caps_ProjectType.LogicalName, projectRequestRecord.caps_ProjectType.Id, new ColumnSet("caps_budgetcalculationtype")) as caps_ProjectType; var communityLocationRecord = service.Retrieve(projectRequestRecord.caps_CommunityLocation.LogicalName, projectRequestRecord.caps_CommunityLocation.Id, new ColumnSet("caps_projectlocationfactor")) as caps_BudgetCalc_CommunityLocation; var hostSchoolDistrictRecord = service.Retrieve(projectRequestRecord.caps_HostSchoolDistrict.LogicalName, projectRequestRecord.caps_HostSchoolDistrict.Id, new ColumnSet("caps_freightrateallowance")) as edu_schooldistrict; int adjustedDesignK = 0; int adjustedDesignE = 0; int adjustedDesignS = 0; if (projectRequestRecord.caps_Facility != null) { tracingService.Trace("Facility: {0}", projectRequestRecord.caps_Facility.Id); var facilityColumnSet = new ColumnSet("caps_designcapacitykindergarten" , "caps_strongstartcapacitykindergarten" , "caps_designcapacityelementary" , "caps_strongstartcapacityelementary" , "caps_designcapacitysecondary" , "caps_strongstartcapacitysecondary"); var facilityRecord = service.Retrieve(projectRequestRecord.caps_Facility.LogicalName, projectRequestRecord.caps_Facility.Id, new ColumnSet(true)) as caps_Facility; adjustedDesignK = (int)facilityRecord.caps_DesignCapacityKindergarten.GetValueOrDefault(0) + facilityRecord.caps_StrongStartCapacityKindergarten.GetValueOrDefault(0); adjustedDesignE = (int)facilityRecord.caps_DesignCapacityElementary.GetValueOrDefault(0) + facilityRecord.caps_StrongStartCapacityElementary.GetValueOrDefault(0); adjustedDesignS = (int)facilityRecord.caps_DesignCapacitySecondary.GetValueOrDefault(0) + facilityRecord.caps_StrongStartCapacitySecondary.GetValueOrDefault(0); } int increaseDesignK = (int)projectRequestRecord.caps_ChangeinDesignCapacityKPositive.GetValueOrDefault(0); int increaseDesignE = (int)projectRequestRecord.caps_ChangeinDesignCapacityEPositive.GetValueOrDefault(0); int increaseDesignS = (int)projectRequestRecord.caps_ChangeinDesignCapacitySPositive.GetValueOrDefault(0); int decreaseDesignK = (int)projectRequestRecord.caps_ChangeinDesignCapacityKNegative.GetValueOrDefault(0); int decreaseDesignE = (int)projectRequestRecord.caps_ChangeinDesignCapacityENegative.GetValueOrDefault(0); int decreaseDesignS = (int)projectRequestRecord.caps_ChangeinDesignCapacitySNegative.GetValueOrDefault(0); int subtotalDesignK = adjustedDesignK + decreaseDesignK; int subtotalDesignE = adjustedDesignE + decreaseDesignE; int subtotalDesignS = adjustedDesignS + decreaseDesignS; tracingService.Trace("CalculateScheduleB: {0}", "Populate Variable"); var scheduleB = new ScheduleB(service, tracingService); //set parameters scheduleB.SchoolType = projectRequestRecord.caps_SchoolType.Id; scheduleB.BudgetCalculationType = projectTypeRecord.caps_BudgetCalculationType.Value; scheduleB.IncludeNLC = projectRequestRecord.caps_IncludeNLC.GetValueOrDefault(false); scheduleB.ProjectLocationFactor = communityLocationRecord.caps_ProjectLocationFactor.GetValueOrDefault(1); tracingService.Trace("Facility - K:{0} E:{1} S:{2}", adjustedDesignK, adjustedDesignE, adjustedDesignS); tracingService.Trace("Subtotal - K:{0} E:{1} S:{2}", subtotalDesignK, subtotalDesignE, subtotalDesignS); tracingService.Trace("Approved - K:{0} E:{1} S:{2}", subtotalDesignK + increaseDesignK, subtotalDesignE + increaseDesignE, subtotalDesignS + increaseDesignS); scheduleB.ExistingAndDecreaseDesignCapacity = new Services.DesignCapacity(subtotalDesignK, subtotalDesignE, subtotalDesignS); scheduleB.ExtraSpaceAllocation = projectRequestRecord.caps_SchBAdditionalSpaceAllocation; scheduleB.ApprovedDesignCapacity = new Services.DesignCapacity(subtotalDesignK + increaseDesignK, subtotalDesignE + increaseDesignE, subtotalDesignS + increaseDesignS); scheduleB.MunicipalFees = projectRequestRecord.caps_MunicipalFees.GetValueOrDefault(0); //scheduleB.ConstructionNonStructuralSeismicUpgrade = projectRequestRecord.caps_ConstructionCostsNonStructuralSeismicUpgr; scheduleB.ConstructionSeismicUpgrade = projectRequestRecord.caps_ConstructionCostsSPIR; //scheduleB.ConstructionSPIRAdjustment = projectRequestRecord.caps_ConstructionCostsSPIRAdjustments; //scheduleB.SPIRFees = projectRequestRecord.caps_SeismicProjectIdentificationReportFees; scheduleB.FreightRateAllowance = hostSchoolDistrictRecord.caps_FreightRateAllowance.GetValueOrDefault(0); //Supplemental Items scheduleB.Demolition = projectRequestRecord.caps_DemolitionCost.GetValueOrDefault(0); scheduleB.AbnormalTopography = projectRequestRecord.caps_AbnormalTopographyCost.GetValueOrDefault(0); scheduleB.TempAccommodation = projectRequestRecord.caps_TemporaryAccommodationCost.GetValueOrDefault(0); scheduleB.OtherSupplemental = projectRequestRecord.caps_OtherCost.GetValueOrDefault(0); //call Calculate tracingService.Trace("CalculateScheduleB: {0}", "Call Calculate Function"); CalculationResult result = scheduleB.Calculate(); //Update PRFS Option with Calculations var recordToUpdate = new caps_Project(); recordToUpdate.Id = recordId; //Section 2 recordToUpdate.caps_SchBSpaceAllocationNewReplacement = result.SpaceAllocationNewReplacement; recordToUpdate.caps_SchBTotalSpaceAllocation = result.SpaceAllocationNewReplacement + projectRequestRecord.caps_SchBAdditionalSpaceAllocation.GetValueOrDefault(0); //recordToUpdate.caps_SchBSpaceAllocationNLC = result.SpaceAllocationNLC; //Section 3 recordToUpdate.caps_SchBBaseBudgetRate = result.BaseBudgetRate; recordToUpdate.caps_SchBProjectSizeFactor = result.ProjectSizeFactor; recordToUpdate.caps_SchBProjectLocationFactor = result.ProjectLocationFactor; recordToUpdate.caps_SchBUnitRate = result.UnitRate; //Section 4 recordToUpdate.caps_SchBConstructionNewSpaceReplacement = result.ConstructionNewReplacement; recordToUpdate.caps_SchBConstructionRenovations = result.ConstructionRenovation; recordToUpdate.caps_SchBSiteDevelopmentAllowance = result.SiteDevelopmentAllowance; recordToUpdate.caps_SchBSiteDevelopmentLocationAllowance = result.SiteDevelopmentLocationAllowance; //Section 5 recordToUpdate.caps_schbdesignfees = result.DesignFees; recordToUpdate.caps_SchBPostContractNewReplacement = result.PostContractNewReplacement; recordToUpdate.caps_SchBPostContractRenovations = result.PostContractRenovation; recordToUpdate.caps_SchBPostContractSeismic = result.PostContractSeismic; //recordToUpdate.caps_SchBMunicipalFees = result.MunicipalFees; recordToUpdate.caps_SchBEquipmentNew = result.EquipmentNew; recordToUpdate.caps_SchBEquipmentReplacement = result.EquipmentReplacement; recordToUpdate.caps_SchBProjectManagementFees = result.ProjectManagement; recordToUpdate.caps_SchBLiabilityInsurance = result.LiabilityInsurance; recordToUpdate.caps_SchBPayableTaxes = result.PayableTaxes; recordToUpdate.caps_SchBRiskReserve = result.RiskReserve; recordToUpdate.caps_SchBRiskReservePercent = result.RiskReservePercent; recordToUpdate.caps_SchBNLCBudgetAmount = result.NLCBudgetAmount; service.Update(recordToUpdate); return(result.Total); }
public bool ShowUserSelect(IWorkflowContext context) { return(CanExitInner(context, false)); }
public abstract bool Resolve(IWorkflowContext context);