///<summary>a general function to reduce the amount of code for uploading</summary> private static void SynchGeneric(List <long> PKNumList, SynchEntity entity, double totalCount, ref double currentVal) { //Dennis: a try catch block here has been avoid on purpose. List <long> BlockPKNumList = null; int localBatchSize = BatchSize; if (IsTroubleshootMode) { localBatchSize = 1; } string AtoZpath = ImageStore.GetPreferredAtoZpath(); for (int start = 0; start < PKNumList.Count; start += localBatchSize) { if ((start + localBatchSize) > PKNumList.Count) { localBatchSize = PKNumList.Count - start; } try{ BlockPKNumList = PKNumList.GetRange(start, localBatchSize); switch (entity) { case SynchEntity.patient: List <Patientm> changedPatientmList = Patientms.GetMultPats(BlockPKNumList); mb.SynchPatients(PrefC.GetString(PrefName.RegistrationKey), changedPatientmList.ToArray()); break; case SynchEntity.appointment: List <Appointmentm> changedAppointmentmList = Appointmentms.GetMultApts(BlockPKNumList); mb.SynchAppointments(PrefC.GetString(PrefName.RegistrationKey), changedAppointmentmList.ToArray()); break; case SynchEntity.prescription: List <RxPatm> changedRxList = RxPatms.GetMultRxPats(BlockPKNumList); mb.SynchPrescriptions(PrefC.GetString(PrefName.RegistrationKey), changedRxList.ToArray()); break; case SynchEntity.provider: List <Providerm> changedProvList = Providerms.GetMultProviderms(BlockPKNumList); mb.SynchProviders(PrefC.GetString(PrefName.RegistrationKey), changedProvList.ToArray()); break; case SynchEntity.pharmacy: List <Pharmacym> changedPharmacyList = Pharmacyms.GetMultPharmacyms(BlockPKNumList); mb.SynchPharmacies(PrefC.GetString(PrefName.RegistrationKey), changedPharmacyList.ToArray()); break; case SynchEntity.labpanel: List <LabPanelm> ChangedLabPanelList = LabPanelms.GetMultLabPanelms(BlockPKNumList); mb.SynchLabPanels(PrefC.GetString(PrefName.RegistrationKey), ChangedLabPanelList.ToArray()); break; case SynchEntity.labresult: List <LabResultm> ChangedLabResultList = LabResultms.GetMultLabResultms(BlockPKNumList); mb.SynchLabResults(PrefC.GetString(PrefName.RegistrationKey), ChangedLabResultList.ToArray()); break; case SynchEntity.medication: List <Medicationm> ChangedMedicationList = Medicationms.GetMultMedicationms(BlockPKNumList); mb.SynchMedications(PrefC.GetString(PrefName.RegistrationKey), ChangedMedicationList.ToArray()); break; case SynchEntity.medicationpat: List <MedicationPatm> ChangedMedicationPatList = MedicationPatms.GetMultMedicationPatms(BlockPKNumList); mb.SynchMedicationPats(PrefC.GetString(PrefName.RegistrationKey), ChangedMedicationPatList.ToArray()); break; case SynchEntity.allergy: List <Allergym> ChangedAllergyList = Allergyms.GetMultAllergyms(BlockPKNumList); mb.SynchAllergies(PrefC.GetString(PrefName.RegistrationKey), ChangedAllergyList.ToArray()); break; case SynchEntity.allergydef: List <AllergyDefm> ChangedAllergyDefList = AllergyDefms.GetMultAllergyDefms(BlockPKNumList); mb.SynchAllergyDefs(PrefC.GetString(PrefName.RegistrationKey), ChangedAllergyDefList.ToArray()); break; case SynchEntity.disease: List <Diseasem> ChangedDiseaseList = Diseasems.GetMultDiseasems(BlockPKNumList); mb.SynchDiseases(PrefC.GetString(PrefName.RegistrationKey), ChangedDiseaseList.ToArray()); break; case SynchEntity.diseasedef: List <DiseaseDefm> ChangedDiseaseDefList = DiseaseDefms.GetMultDiseaseDefms(BlockPKNumList); mb.SynchDiseaseDefs(PrefC.GetString(PrefName.RegistrationKey), ChangedDiseaseDefList.ToArray()); break; case SynchEntity.icd9: List <ICD9m> ChangedICD9List = ICD9ms.GetMultICD9ms(BlockPKNumList); mb.SynchICD9s(PrefC.GetString(PrefName.RegistrationKey), ChangedICD9List.ToArray()); break; case SynchEntity.statement: List <Statementm> ChangedStatementList = Statementms.GetMultStatementms(BlockPKNumList); mb.SynchStatements(PrefC.GetString(PrefName.RegistrationKey), ChangedStatementList.ToArray()); break; case SynchEntity.document: List <Documentm> ChangedDocumentList = Documentms.GetMultDocumentms(BlockPKNumList, AtoZpath); mb.SynchDocuments(PrefC.GetString(PrefName.RegistrationKey), ChangedDocumentList.ToArray()); break; case SynchEntity.recall: List <Recallm> ChangedRecallList = Recallms.GetMultRecallms(BlockPKNumList); mb.SynchRecalls(PrefC.GetString(PrefName.RegistrationKey), ChangedRecallList.ToArray()); break; case SynchEntity.deletedobject: List <DeletedObject> ChangedDeleteObjectList = DeletedObjects.GetMultDeletedObjects(BlockPKNumList); mb.DeleteObjects(PrefC.GetString(PrefName.RegistrationKey), ChangedDeleteObjectList.ToArray()); break; case SynchEntity.patientdel: mb.DeletePatientsRecords(PrefC.GetString(PrefName.RegistrationKey), BlockPKNumList.ToArray()); break; } //progressIndicator.CurrentVal+=LocalBatchSize;//not allowed currentVal += localBatchSize; if (Application.OpenForms["FormProgress"] != null) // without this line the following error is thrown: "Invoke or BeginInvoke cannot be called on a control until the window handle has been created." or a null pointer exception is thrown when an automatic synch is done by the system. { FormP.Invoke(new PassProgressDelegate(PassProgressToDialog), new object[] { currentVal, "?currentVal of ?maxVal records uploaded", totalCount, "" }); } } catch (Exception e) { if (IsTroubleshootMode) { string errorMessage = entity + " with Primary Key = " + BlockPKNumList.First() + " failed to synch. " + "\n" + e.Message; throw new Exception(errorMessage); } else { throw e; } } } //for loop ends here }