/// <summary> /// Determines the changes in the screen's dataset and submits them to the /// Server. /// </summary> /// <param name="AInspectDS">The screen's dataset /// </param> /// <returns>True if saving of data succeeded, otherwise false.</returns> private Boolean SaveChanges(ref PartnerEditTDS AInspectDS) { Boolean ReturnValue = false; PartnerEditTDS SubmitDS = null; TSubmitChangesResult SubmissionResult; TVerificationResultCollection VerificationResult; TVerificationResult VerificationResultItem; System.Windows.Forms.DialogResult UnitParentAssignment; int RowIndex; int NumRows; Int32 MaxColumn; Boolean SavedPartnerIsNewPartner = false; bool PartnerAttributesOrRelationsChanged = false; System.Int32 ChangedColumns; #if SHOWCHANGES String DebugMessage; #endif #if DATASETDEBUGGING Int16 TmpRowCounter; string TmpDebugString = String.Empty; #endif // Be sure to fire the OnLeave event on the active control of any user control FPetraUtilsObject.ForceOnLeaveForActiveControl(); FPetraUtilsObject.OnDataSavingStart(this, new System.EventArgs()); // Don't allow saving if user is still editing a Detail of a List if (FPetraUtilsObject.InDetailEditMode()) { ReturnValue = false; return ReturnValue; } // Make sure that DataBinding writes the value of the active Control to the underlying DataSource! TDataBinding.EnsureDataChangesAreStored(this); GetDataFromControls(); // Clear any validation errors so that the following call to ValidateAllData starts with a 'clean slate'. FPetraUtilsObject.VerificationResultCollection.Clear(); if (ValidateAllData()) { // Ask the user about non-critical warnings, if they are the only 'errors' in the collection if (FPetraUtilsObject.VerificationResultCollection.HasOnlyNonCriticalErrors && (TDataValidation.ProcessAnyDataValidationWarnings(FPetraUtilsObject.VerificationResultCollection, MCommonResourcestrings.StrFormSaveDataAnywayQuestion, this.GetType()) == false)) { return false; } // Fire the DataSavingValidated event, which is the last chance to cancel the save System.ComponentModel.CancelEventArgs eCancel = new System.ComponentModel.CancelEventArgs(false); FPetraUtilsObject.OnDataSavingValidated(this, eCancel); if (eCancel.Cancel == true) { return false; } foreach (DataTable InspectDT in AInspectDS.Tables) { foreach (DataRow InspectDR in InspectDT.Rows) { InspectDR.EndEdit(); } } if (FPetraUtilsObject.HasChanges) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataInProgress); this.Cursor = Cursors.WaitCursor; /* $IFDEF SHOWCHANGES MessageBox.Show('SaveChanges: AInspectDS.PLocation.Rows[0].HasVersion(DataRowVersion.Original): ' + AInspectDS.PLocation.Rows[0].HasVersion(DataRowVersion.Original).ToString + '; LocationKey: ' + *AInspectDS.PLocation.Row[0].LocationKey.ToString); $ENDIF */ /* $IFDEF SHOWCHANGES MessageBox.Show('SaveChanges: AInspectDS.PLocation.Rows[1].HasVersion(DataRowVersion.Original): ' + AInspectDS.PLocation.Rows[1].HasVersion(DataRowVersion.Original).ToString + '; LocationKey: ' + *AInspectDS.PLocation.Row[1].LocationKey.ToString); $ENDIF */ if (!FPetraUtilsObject.SubmitChangesContinue) { foreach (DataTable InspectDT in AInspectDS.Tables) { // MessageBox.Show('inspectDataTable: ' + InspectDT.ToString); if ((InspectDT.TableName != PLocationTable.GetTableName()) && (InspectDT.TableName != PPartnerLocationTable.GetTableName())) { MaxColumn = InspectDT.Columns.Count; ChangedColumns = DataUtilities.AcceptChangesForUnmodifiedRows(InspectDT, MaxColumn); if (ChangedColumns != 0) { #if SHOWCHANGES MessageBox.Show(InspectDT.TableName + " - changed colums: " + ChangedColumns.ToString()); #endif } } else if (InspectDT.TableName == PLocationTable.GetTableName()) { MaxColumn = new PLocationTable().Columns.Count; // MessageBox.Show('PLocation MaxColumn: ' + MaxColumn.ToString); ChangedColumns = DataUtilities.AcceptChangesForUnmodifiedRows(AInspectDS.PLocation, MaxColumn, true); if (ChangedColumns != 0) { #if SHOWCHANGES MessageBox.Show(PLocationTable.GetTableName() + " - changed colums: " + ChangedColumns.ToString()); #endif } } else { MaxColumn = new PPartnerLocationTable().Columns.Count; // MessageBox.Show('PPartnerLocation MaxColumn: ' + MaxColumn.ToString); ChangedColumns = DataUtilities.AcceptChangesForUnmodifiedRows(AInspectDS.PPartnerLocation, MaxColumn, true); if (ChangedColumns != 0) { #if SHOWCHANGES MessageBox.Show(PPartnerLocationTable.GetTableName() + " - changed colums: " + ChangedColumns.ToString()); #endif } } #if SHOWCHANGES foreach (DataRow InspectDR in InspectDT.Rows) { DebugMessage = InspectDT.ToString(); if ((InspectDR.RowState == DataRowState.Modified) || (InspectDR.RowState == DataRowState.Added)) { ChangedColumns = 0; if (InspectDR.RowState == DataRowState.Modified) { DebugMessage = DebugMessage + " --- changed columns:" + Environment.NewLine; } else { DebugMessage = DebugMessage + " --- inserted Row. Column contents:" + Environment.NewLine; } for (int Counter1 = 0; Counter1 <= MaxColumn - 1; Counter1 += 1) { if ((InspectDR.RowState == DataRowState.Added) || (InspectDR != InspectDR[Counter1, DataRowVersion.Current])) { ChangedColumns = ChangedColumns + 1; DebugMessage = DebugMessage + " " + (InspectDT.Columns[Counter1].ColumnName).ToString() + ": " + InspectDR[Counter1, DataRowVersion.Current].ToString() + Environment.NewLine; } } if (ChangedColumns != 0) { MessageBox.Show(DebugMessage); } else { DebugMessage = DebugMessage + " NO changed columns."; MessageBox.Show(DebugMessage); } } // (inspectDataRow.RowState = DataRowState.Modified) or (inspectDataRow.RowState = DataRowState.Added) else { // MessageBox.Show('inspectDataRow.RowState: ' + inspectDataRow.RowState.ToString("G")); if (InspectDR.RowState == DataRowState.Deleted) { DebugMessage = DebugMessage + " --- deleted Row. Original Column[0] contents: " + InspectDR[0, DataRowVersion.Original].ToString(); MessageBox.Show(DebugMessage); } } } // for inspectDataRow in inspectDataTable.Rows do #endif } // for inspectDataTable in inspectDataSet.Tables do } // If changes have been made to pm_staff_data (commitments) then update the partner's family's Gift Destination records TGiftDestination GiftDestination = new TGiftDestination(); if (GiftDestination.UpdateGiftDestination(ref AInspectDS)) { // set the gift destination on this screen and all other open partner edit screens for the same family SetGiftDestinationAllScreens(); } SubmitDS = AInspectDS.GetChangesTyped(true); if (SubmitDS == null) { // There is nothing to be saved. // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); this.Cursor = Cursors.Default; // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); return true; } if ((SubmitDS.Tables.Contains(PPartnerAttributeTable.GetTableName())) || (SubmitDS.Tables.Contains(PPartnerRelationshipTable.GetTableName()))) { PartnerAttributesOrRelationsChanged = true; } #if DATASETDEBUGGING TLogging.Log("Before submitting data to the Server. Client DataSet: " + SubmitDS.GetXml()); #endif // Submit changes to the PETRAServer try { if (!FPetraUtilsObject.SubmitChangesContinue) { FResponseDS = null; SubmissionResult = FPartnerEditUIConnector.SubmitChanges(ref SubmitDS, ref FResponseDS, out VerificationResult); } else { SubmissionResult = FPartnerEditUIConnector.SubmitChangesContinue(out SubmitDS, ref FResponseDS, out VerificationResult); } } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return ReturnValue; } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return ReturnValue; } catch (Exception) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); throw; } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: SavedPartnerIsNewPartner = IsNewPartner(AInspectDS); // MessageBox.Show('DUMMY: ' + (SubmitDS.Tables['Locations'].Rows[0]['DUMMY']).ToString() ); if ((SharedTypes.PartnerClassStringToEnum(AInspectDS.PPartner[0].PartnerClass) == TPartnerClass.UNIT) && SavedPartnerIsNewPartner) { /* * A new Partner of PartnerClass UNIT has been created * -- give option to assign 'Parent' in Unit Hierarchy */ UnitParentAssignment = MessageBox.Show(StrQueryUnitParent, StrQueryUnitParentTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (UnitParentAssignment == System.Windows.Forms.DialogResult.Yes) { TFrmUnitHierarchy HierarchyForm = new TFrmUnitHierarchy(this.ParentForm); HierarchyForm.Show(); HierarchyForm.ShowThisUnit(AInspectDS.PPartner[0].PartnerKey); } } #if DATASETDEBUGGING TLogging.Log("After submtting returned Server DataSet: " + SubmitDS.GetXml()); MessageBox.Show("Before CleanupAddressesBeforeMerge"); #endif // Get rid of any new Addresses; they are returned back with different LocationKeys (based on a Sequence) ucoLowerPart.CleanupAddressesBeforeMerge(); #if DATASETDEBUGGING MessageBox.Show("After CleanupAddressesBeforeMerge"); if ((SubmitDS.PLocation != null) && (SubmitDS.PLocation.Rows.Count > 0)) { MessageBox.Show( "Location[0] LocationKey: " + SubmitDS.PLocation[0].LocationKey.ToString() + "; PartnerLocation[0] LocationKey: " + SubmitDS.PPartnerLocation[0].LocationKey.ToString()); } #endif // Delete all added Rows in the original dataset. They will automatically // be put back in with the Merge. If added Rows are deleted they will // be removed from the Row collection on the server. In that case the // client will not be aware of that. For modified Rows: if they are // deleted on the server they will not be taken out of the collection // but come back to the client as being marked as 'Deleted'. Therefore // with deleting the added Rows beforehand we are making sure that // the dataset on the client is synchronized with the one on the server. foreach (DataTable t in AInspectDS.Tables) { if ((t == AInspectDS.PBankingDetails) || (t == AInspectDS.PPartnerBankingDetails) || (t == AInspectDS.PDataLabelValuePartner)) { NumRows = t.Rows.Count; for (RowIndex = NumRows - 1; RowIndex >= 0; RowIndex -= 1) { DataRow InspectDR = t.Rows[RowIndex]; // delete all added Rows. if (InspectDR.RowState == DataRowState.Added) { InspectDR.Delete(); } } } } // Update UserDefaults, if necessary MaintainUserDefaults(); if (SubmitDS.Tables.Contains(PPartnerTaxDeductiblePctTable.GetTableName())) { UpdateTaxDeductiblePct(); } // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server AInspectDS.AcceptChanges(); #if DATASETDEBUGGING TLogging.Log("After getting rid now of any deleted columns Client DataSet: " + AInspectDS.GetXml()); if (AInspectDS.Tables.Contains(PLocationTable.GetTableName())) { for (TmpRowCounter = 0; TmpRowCounter < AInspectDS.Tables[PLocationTable.GetTableName()].Rows.Count; TmpRowCounter++) { TmpDebugString = TmpDebugString + PLocationTable.GetTableName() + ".Row[" + TmpRowCounter.ToString() + "]: PLocationKey: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetLocationKeyDBName()]. ToString() + "(); PSiteKey: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetSiteKeyDBName()]. ToString() + "(); Modification TimeStamp: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetModificationIdDBName()]. ToString() + "\r\n"; } } if (AInspectDS.Tables.Contains(PPartnerLocationTable.GetTableName())) { TmpDebugString = TmpDebugString + "\r\n"; for (TmpRowCounter = 0; TmpRowCounter < AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows.Count; TmpRowCounter++) { TmpDebugString = TmpDebugString + PPartnerLocationTable.GetTableName() + ".Row[" + TmpRowCounter.ToString() + "]: PLocationKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetLocationKeyDBName()].ToString() + "(); PSiteKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetSiteKeyDBName()].ToString() + "(); PPartnerKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetPartnerKeyDBName()].ToString() + "(); Modification TimeStamp: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetModificationIdDBName()].ToString() + "\r\n"; } MessageBox.Show(TmpDebugString, "DEBUG: PLocation / PPartnerLocation local contents [#1]"); } #endif // Merge back with data from the Server (eg. for getting Sequence values) AInspectDS.Merge(SubmitDS, false); #if DATASETDEBUGGING TLogging.Log("After Merge back with data from the Server Server DataSet: " + SubmitDS.GetXml()); TLogging.Log("After Merge back with data from the Server Client DataSet: " + AInspectDS.GetXml()); if (AInspectDS.Tables.Contains(PLocationTable.GetTableName())) { TmpDebugString = ""; for (TmpRowCounter = 0; TmpRowCounter < AInspectDS.Tables[PLocationTable.GetTableName()].Rows.Count; TmpRowCounter++) { TmpDebugString = TmpDebugString + PLocationTable.GetTableName() + ".Row[" + TmpRowCounter.ToString() + "]: PLocationKey: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetLocationKeyDBName()]. ToString() + "(); PSiteKey: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetSiteKeyDBName()]. ToString() + "(); Modification TimeStamp: " + AInspectDS.Tables[PLocationTable.GetTableName()].Rows[TmpRowCounter][PLocationTable. GetModificationIdDBName()]. ToString() + "\r\n"; } } if (AInspectDS.Tables.Contains(PPartnerLocationTable.GetTableName())) { TmpDebugString = TmpDebugString + "\r\n"; for (TmpRowCounter = 0; TmpRowCounter < AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows.Count; TmpRowCounter++) { TmpDebugString = TmpDebugString + PPartnerLocationTable.GetTableName() + ".Row[" + TmpRowCounter.ToString() + "]: PLocationKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetLocationKeyDBName()].ToString() + "(); PSiteKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetSiteKeyDBName()].ToString() + "(); PPartnerKey: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetPartnerKeyDBName()].ToString() + "(); Modification TimeStamp: " + AInspectDS.Tables[PPartnerLocationTable.GetTableName()].Rows[TmpRowCounter][ PPartnerLocationTable.GetModificationIdDBName()].ToString() + "\r\n"; } MessageBox.Show(TmpDebugString, "DEBUG: PLocation / PPartnerLocation local contents [#2]"); } #endif ucoUpperPart.UpdateStatusUpdatedDate(); // this is to refresh 'Status Updated' if it has been changed in the ComboBox and then saved... ucoLowerPart.RefreshRecordsAfterMerge(); ucoLowerPart.RefreshPersonnelDataAfterMerge(PartnerAttributesOrRelationsChanged); // Call AcceptChanges so that we don't have any changed data anymore! AInspectDS.AcceptChanges(); #if DATASETDEBUGGING TLogging.Log("After calling AcceptChanges on the Client DataSet: " + AInspectDS.GetXml()); #endif // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataSuccessful); this.Cursor = Cursors.Default; EnableSave(false); // If the screen was opened for a NEW Partner, remove the 'NEW:' indicator from the Window Title Bar and // set this Partner to be the "Last Used Partner". if (SavedPartnerIsNewPartner) { FPetraUtilsObject.HasNewData = false; SetScreenCaption(); // Set Partner to be the "Last Used Partner" TUserDefaults.NamedDefaults.SetLastPartnerWorkedWith(AInspectDS.PPartner[0].PartnerKey, TLastPartnerUse.lpuMailroomPartner, SharedTypes.PartnerClassStringToEnum(FPartnerClass)); } // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); FPetraUtilsObject.SubmitChangesContinue = false; // Assign PartnerKey. This is needed in case this was a new Partner before saving! FPartnerKey = AInspectDS.PPartner[0].PartnerKey; ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); if ((VerificationResult != null) && (VerificationResult.HasCriticalOrNonCriticalErrors)) { TDataValidation.ProcessAnyDataValidationErrors(false, VerificationResult, this.GetType(), null); } break; case TSubmitChangesResult.scrError: this.Cursor = Cursors.Default; if (!(VerificationResult.Contains((System.Object) "Location Change Promotion: Information"))) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataErrorOccured); TDataValidation.ProcessAnyDataValidationErrors(false, VerificationResult, this.GetType(), null); } else { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataCancelled); VerificationResultItem = (TVerificationResult)VerificationResult.FindBy( (object)"Location Change Promotion: Information"); MessageBox.Show(VerificationResultItem.ResultText, VerificationResultItem.ResultTextCaption, MessageBoxButtons.OK, MessageBoxIcon.Information); } FPetraUtilsObject.SubmitChangesContinue = false; ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrNothingToBeSaved: // If there were no changes discovered then still need to call AcceptChanges to get rid now of // any deleted columns AInspectDS.AcceptChanges(); // Update UI this.Cursor = Cursors.Default; FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); // We don't have unsaved changes anymore EnableSave(false); FPetraUtilsObject.HasChanges = false; ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrInfoNeeded: this.Cursor = Cursors.Default; #if DATASETDEBUGGING for (int Counter2 = 0; Counter2 < FResponseDS.Tables.Count; Counter2++) { MessageBox.Show( "Table #" + Counter2.ToString() + "'s name is " + FResponseDS.Tables[Counter2].TableName + ". It has " + FResponseDS.Tables[Counter2].Rows.Count.ToString() + " Rows. Type: " + FResponseDS.Tables[Counter2].GetType().ToString()); } if (FResponseDS.Tables.Contains(MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME)) { MessageBox.Show("FResponseDS Type: " + FResponseDS.GetType().ToString()); MessageBox.Show(MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME + " Type: " + FResponseDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME].GetType().ToString()); MessageBox.Show( "FResponseDS.Tables[" + MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME + "].Rows.Count: " + FResponseDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME].Rows.Count.ToString()); // Check if there is a Parameter Row that is not yet processed DataView ExistingLocationParametersDV = new DataView( FResponseDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME], PartnerAddressAggregateTDSSimilarLocationParametersTable.GetAnswerProcessedClientSideDBName() + " = false", "", DataViewRowState.CurrentRows); if (ExistingLocationParametersDV.Count > 0) { MessageBox.Show("ExistingLocationParametersDV.Count: " + ExistingLocationParametersDV.Count.ToString()); MessageBox.Show( "Row[0].LocationKey: " + (ExistingLocationParametersDV[0].Row as PartnerAddressAggregateTDSSimilarLocationParametersRow).LocationKey. ToString()); } } #endif ucoLowerPart.SimilarLocationsProcessing( (PartnerAddressAggregateTDSSimilarLocationParametersTable)FResponseDS.Tables[MPartnerConstants. EXISTINGLOCATIONPARAMETERS_TABLENAME]); #if DATASETDEBUGGING if (FResponseDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME].Rows.Count > 0) { MessageBox.Show("Reuse?: " + (FResponseDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME] as PartnerAddressAggregateTDSSimilarLocationParametersTable)[0].AnswerReuse.ToString()); } if (FResponseDS.Tables.Contains(MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME)) { MessageBox.Show(MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME + " Type: " + FResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME].GetType().ToString()); MessageBox.Show( "FResponseDS.Tables[" + MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME + "].Rows.Count: " + FResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME].Rows.Count.ToString()); //Check if there is a Parameter Row that is not yet processed DataView AddressAddedOrChangedParametersDV = new DataView( FResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME], PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetAnswerProcessedClientSideDBName() + " = false", "", DataViewRowState.CurrentRows); if (AddressAddedOrChangedParametersDV.Count > 0) { MessageBox.Show("AddressAddedOrChangedParametersDV.Count: " + AddressAddedOrChangedParametersDV.Count.ToString()); MessageBox.Show( "Row[0].LocationKey: " + (AddressAddedOrChangedParametersDV[0].Row as PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow). LocationKey. ToString()); } } #endif ucoLowerPart.AddressAddedOrChangedProcessing( (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable) FResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME], (PartnerAddressAggregateTDSChangePromotionParametersTable) FResponseDS.Tables[MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME]); #if DATASETDEBUGGING MessageBox.Show("After AddressAddedOrChangedProcessing"); #endif // Recursive call! FPetraUtilsObject.SubmitChangesContinue = true; ReturnValue = SaveChanges(ref AInspectDS); return ReturnValue; } } else { // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); this.Cursor = Cursors.Default; EnableSave(false); // We don't have unsaved changes anymore FPetraUtilsObject.HasChanges = false; ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); } } else { FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(false)); } // if the partner has been saved then broadcast a message to any listening forms to inform them if (ReturnValue) { TFormsMessage BroadcastMessage; TFormsMessage BroadcastMessageGiftDestination; String PartnerShortNameForBroadcast; long FamilyPartnerKey; String FamilyShortName; if (SavedPartnerIsNewPartner) { BroadcastMessage = new TFormsMessage(TFormsMessageClassEnum.mcNewPartnerSaved, FCallerContext); } else { BroadcastMessage = new TFormsMessage(TFormsMessageClassEnum.mcExistingPartnerSaved, FCallerContext); } if (!FMainDS.PPartner[0].IsPartnerShortNameNull()) { PartnerShortNameForBroadcast = FMainDS.PPartner[0].PartnerShortName; } else { PartnerShortNameForBroadcast = String.Empty; } BroadcastMessage.SetMessageDataPartner( FPartnerKey, SharedTypes.PartnerClassStringToEnum(FPartnerClass), PartnerShortNameForBroadcast, FMainDS.PPartner[0].StatusCode); TFormsList.GFormsList.BroadcastFormMessage(BroadcastMessage); if ((SubmitDS.PPartnerGiftDestination != null) && (SubmitDS.PPartnerGiftDestination.Rows.Count > 0)) { BroadcastMessageGiftDestination = new TFormsMessage(TFormsMessageClassEnum.mcPersonnelCommitmentChanged, FCallerContext); if (FPartnerClass == TPartnerClass.FAMILY.ToString()) { FamilyPartnerKey = FPartnerKey; FamilyShortName = PartnerShortNameForBroadcast; } else { FamilyPartnerKey = ((PPersonRow)FMainDS.PPerson.Rows[0]).FamilyKey; FamilyShortName = String.Empty; } BroadcastMessageGiftDestination.SetMessageDataPartner( FamilyPartnerKey, TPartnerClass.FAMILY, FamilyShortName, FMainDS.PPartner[0].StatusCode); TFormsList.GFormsList.BroadcastFormMessage(BroadcastMessageGiftDestination); } } return ReturnValue; }
private void OpenUnitHierarchy(object sender, EventArgs e) { TFrmUnitHierarchy HierarchyForm = new TFrmUnitHierarchy(this.ParentForm); HierarchyForm.Show(); HierarchyForm.ShowThisUnit(FMainDS.PPartner[0].PartnerKey); }