public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); switch (i_AdditionalObjQuery) { case eAdditionalObjectQuery.ServicesInResourcesTimeDomain: deserializeServicesInResourcesTimeDomain(i_ABData, deserializedQuery, async); break; case eAdditionalObjectQuery.ResourcesAdditionalObjects: i_ABData.ABAdditionalObjects.ResBreaksAndShiftsByResId = deserializedQuery.records.ToDictionary(record => record.Id); break; case eAdditionalObjectQuery.ResourceTerritories: deserializedResourceTerritories(i_ABData, deserializedQuery.records); break; case eAdditionalObjectQuery.Capacities: i_ABData.ABAdditionalObjects.Capacities = deserializedQuery.records; break; case eAdditionalObjectQuery.Calendars: i_ABData.ABAdditionalObjects.Calendars = deserializedQuery.records; break; default: break; } }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); i_ABData.VisitingHours = deserializedQuery.records; }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: add support for long responses that has to be pulled with identifier DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); i_ABData.ObjectivesByDevName = parseAdditionalData(deserializedQuery.records); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (PermissionSetAssignment record in deserializedQuery.records) { m_RelatedRecordIds.Remove(record.AssigneeId); } i_ABData.UnLicensedUsers = m_RelatedRecordIds; }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); if (m_TimeDependencies == null) { m_TimeDependencies = new List <Time_Dependency__c>(deserializedQuery.records); m_Roots = new HashSet <string>(); foreach (Time_Dependency__c dependency in m_TimeDependencies) { m_Roots.Add(dependency.Root_Service_Appointment__c); } } else { if (i_ABData.TimeDependeciesByRootId == null) { i_ABData.TimeDependeciesByRootId = new Dictionary <string, List <Time_Dependency__c> >(); } foreach (Time_Dependency__c dependency in deserializedQuery.records) { if (!m_TimeDependencies.Contains(dependency)) { m_TimeDependencies.Add(dependency); } } foreach (IGrouping <string, Time_Dependency__c> timeDependencies in m_TimeDependencies.GroupBy(dependency => dependency.Root_Service_Appointment__c)) { if (!i_ABData.TimeDependeciesByRootId.ContainsKey(timeDependencies.Key)) { i_ABData.TimeDependeciesByRootId[timeDependencies.Key] = new List <Time_Dependency__c>(); } foreach (Time_Dependency__c dependency in timeDependencies) { i_ABData.TimeDependeciesByRootId[timeDependencies.Key].Add(dependency); } } } }
public static string GetDataByApexRestService(string i_RequestBody) { string header = "\n~~~~~~~~ APEX REST Service ~~~~~~~~"; SFDCScheduleRequest request; request = ParseRequestString(i_RequestBody); connectToSF(request); long elapsedTime = 0; Dictionary <string, decimal> ongoingMeasurments = new Dictionary <string, decimal>(); long totalExtraction = 0; m_FSLClient.setClientURIforApexRest(); RestRequest restRequest = m_FSLClient.getApexRequest(); for (int i = 0; i < 100; i++) { Stopwatch watchExtractDataApexRest = new Stopwatch(); watchExtractDataApexRest.Start(); string responseData = m_FSLClient.RequestABData(restRequest); DeserializedQueryResult deserializedResponse = JsonConvert.DeserializeObject <DeserializedQueryResult>(responseData); elapsedTime += deserializedResponse.m_runtime; Dictionary <string, decimal> measurments = deserializedResponse.measures; watchExtractDataApexRest.Stop(); totalExtraction += watchExtractDataApexRest.ElapsedMilliseconds; watchExtractDataApexRest.Reset(); mergeMeasures(ongoingMeasurments, measurments); } Dictionary <string, decimal> finalMeasurments = getAverageResults(ongoingMeasurments); string log = "\n\n" + header + "\nExtraction of data by APEX REST (average of 100 calls):\nExtraction in SFS MP: " + (elapsedTime / 100) + " ms\n" + "Total extraction of data by REST API took: " + (totalExtraction / 100) + " ms\nMeasurements per query:\n" + dictionaryToString(finalMeasurments) + "\n\n"; LambdaLogger.Log(log); return(log); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: add support for long responses that has to be pulled with identifier DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); parseAdditionalData(deserializedQuery.records); i_ABData.RulesByDevName = new Dictionary <string, List <Work_Rule__c> >(); foreach (Work_Rule__c workRule in deserializedQuery.records) { if (!i_ABData.RulesByDevName.ContainsKey(workRule.DeveloperName)) { i_ABData.RulesByDevName[workRule.DeveloperName] = new List <Work_Rule__c>(); } i_ABData.RulesByDevName[workRule.DeveloperName].Add(workRule); } }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { //TODO: implement this generic for WOLI and Account parents also DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (ServiceParent parent in deserializedQuery.records) { if (parent.SkillRequirements == null) { parent.SkillRequirements = new List <SkillRequirement>(); } foreach (SkillRequirement skillReq in parent.skillRequirementsCollection.records) { parent.SkillRequirements.Add(skillReq); } } i_ABData.ServiceParent = deserializedQuery.records.ToDictionary(parent => parent.Id); }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); ServiceAppointmentUtils serviceUtils = new ServiceAppointmentUtils(i_ABData); Dictionary <string, ServiceAppointment> deserializedServices = serviceUtils.parseAdditionalData(deserializedQuery.records); foreach (KeyValuePair <string, List <Time_Dependency__c> > dependencyTreeByRoot in i_ABData.TimeDependeciesByRootId) { foreach (Time_Dependency__c dependency in dependencyTreeByRoot.Value) { if (!i_ABData.ServicesById.ContainsKey(dependency.Service_Appointment_1__c)) { i_ABData.ServicesById[dependency.Service_Appointment_1__c] = deserializedServices[dependency.Service_Appointment_1__c]; } dependency.Service_Appointment_1__r = deserializedServices[dependency.Service_Appointment_1__c]; if (!i_ABData.ServicesById.ContainsKey(dependency.Service_Appointment_2__c)) { i_ABData.ServicesById[dependency.Service_Appointment_2__c] = deserializedServices[dependency.Service_Appointment_2__c]; } dependency.Service_Appointment_2__r = deserializedServices[dependency.Service_Appointment_2__c]; if (dependency.Service_Appointment_1__c == dependency.Root_Service_Appointment__c) { dependency.Root_Service_Appointment__r = deserializedServices[dependency.Service_Appointment_1__c]; } if (dependency.Service_Appointment_2__c == dependency.Root_Service_Appointment__c) { dependency.Root_Service_Appointment__r = deserializedServices[dependency.Service_Appointment_2__c]; } } } }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); foreach (ServiceTerritoryMember stm in deserializedQuery.records) { if (stm.m_JSONAdditionalData.TryGetValue("ServiceResource", out var resourceToken)) { stm.ServiceResource = resourceToken.ToObject <ServiceResource>(); } } if (m_TerritoryMembers == null) { m_TerritoryMembers = new List <ServiceTerritoryMember>(); } m_TerritoryMembers.AddRange(deserializedQuery.records); i_ABData.TerritoryMembers = m_TerritoryMembers; i_ABData.STMResourcesIDs = m_ABData.STMResourcesIDs; }
private void deserializeServicesInResourcesTimeDomain(AppointmentBookingData i_ABData, DeserializedQueryResult i_DeserializedQuery, bool async) { if (!async) { m_ResourceServices.AddRange(i_DeserializedQuery.records); } if (i_DeserializedQuery.nextRecordsUrl != null) { i_ABData.ABAdditionalObjects.nextRecordsUrl = i_DeserializedQuery.nextRecordsUrl; } else { if (!async) { i_ABData.ABAdditionalObjects.ServicesById = m_ResourceServices.ToDictionary(record => record.Id); } } }
public override void Deserialize(string i_QueryResult, AppointmentBookingData i_ABData, AdditionalObjectsUtils.eAdditionalObjectQuery i_AdditionalObjQuery = default, bool async = false) { DeserializedQueryResult deserializedQuery = JsonConvert.DeserializeObject <DeserializedQueryResult>(i_QueryResult); bool serviceHasSkills = false; Dictionary <string, double?> skillIdToLevel = new Dictionary <string, double?>(); foreach (SkillRequirement skillReq in i_ABData.ServiceParent[i_ABData.ServiceToSchedule.ParentRecordId].SkillRequirements) { skillIdToLevel.Add(skillReq.SkillId, skillReq.SkillLevel); serviceHasSkills = true; } bool matchSkillLevel = false; if (i_ABData.RulesByDevName.ContainsKey("Match_Skills_Service")) { List <Work_Rule__c> matchSkillsRules = i_ABData.RulesByDevName["Match_Skills_Service"]; foreach (Work_Rule__c rule in matchSkillsRules) { if (rule.Match_Skill_Level__c == true) { matchSkillLevel = true; } } } i_ABData.CandidatesById = new Dictionary <string, ServiceResource>(); if (!matchSkillLevel || !serviceHasSkills) { i_ABData.CandidatesById = deserializedQuery.records.ToDictionary(candidate => candidate.Id); } else { foreach (ServiceResource resource in deserializedQuery.records) { if (resource.serviceResourceSkillsCollection == null) { continue; } foreach (ServiceResourceSkill skill in resource.serviceResourceSkillsCollection.records) { if (skillIdToLevel.ContainsKey(skill.SkillId)) { if (matchSkillLevel && skill.SkillLevel < skillIdToLevel[skill.SkillId]) { continue; } if (!i_ABData.CandidatesById.ContainsKey(resource.Id)) { i_ABData.CandidatesById.Add(resource.Id, resource); } } } } } }