private static bool GetAllReceivingFields(long AConferenceKey, ref DataTable AFieldsTable) { TDBTransaction ReadTransaction; Boolean NewTransaction = false; TLogging.LogAtLevel(9, "TConferenceOptions.GetAllReceivingFields called!"); TDataBase db = DBAccess.Connect("GetAllReceivingFields"); ReadTransaction = db.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead, out NewTransaction); try { OdbcParameter[] ParametersArray; ParametersArray = new OdbcParameter[0]; DataSet TmpDS = ReadTransaction.DataBaseObj.Select( "SELECT PUB_" + PUnitTable.GetTableDBName() + '.' + PUnitTable.GetPartnerKeyDBName() + ", PUB_" + PUnitTable.GetTableDBName() + '.' + PUnitTable.GetUnitNameDBName() + " FROM PUB_" + PUnitTable.GetTableDBName() + ", PUB_" + PPartnerTable.GetTableDBName() + ", " + "PUB_" + PPartnerTypeTable.GetTableDBName() + " WHERE PUB_" + PUnitTable.GetTableDBName() + '.' + PUnitTable.GetPartnerKeyDBName() + " = PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " AND PUB_" + PPartnerTypeTable.GetTableDBName() + '.' + PPartnerTypeTable.GetPartnerKeyDBName() + " = PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " AND PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetStatusCodeDBName() + " = \"ACTIVE\"" + " AND PUB_" + PPartnerTypeTable.GetTableDBName() + '.' + PPartnerTypeTable.GetTypeCodeDBName() + " = \"LEDGER\"" + " ORDER BY PUB_" + PUnitTable.GetTableDBName() + '.' + PUnitTable.GetUnitNameDBName() + " ASC", "TempTable", ReadTransaction, ParametersArray); DataTable ResultTale = TmpDS.Tables[0]; for (int Counter = 0; Counter < ResultTale.Rows.Count; ++Counter) { DataRow NewRow = AFieldsTable.NewRow(); NewRow[SELECTION] = false; NewRow[UNIT_KEY] = ResultTale.Rows[Counter][PUnitTable.GetPartnerKeyDBName()]; NewRow[UNIT_NAME] = ResultTale.Rows[Counter][PUnitTable.GetUnitNameDBName()]; NewRow[USED_IN_CONFERENCE] = true; AFieldsTable.Rows.Add(NewRow); } } finally { if (NewTransaction) { ReadTransaction.Commit(); TLogging.LogAtLevel(7, "TConferenceOptions.GetReceivingFields: committed own transaction."); } } return(true); }
/// <summary> /// Determines whether a specified Partner Type code is contained in the PPartnerTypeTable /// that is passed in. The AExactMatch parameter determines whether the check is done on an /// exact string match, or a 'starts with' string match. /// </summary> /// <param name="APartnerType"></param>Partner Type code that should be checked for /// <param name="APPartnerTypeDT"></param>PPartnerTypeTable containing rows of Partner Types /// <param name="AExactMatch"></param>Exact string match for APartnerType if true, /// otherwise 'starts with' string match /// <returns>true if APartnerType was found in APPartnerTypeDT, otherwise false</returns> public static bool HasPartnerType(string APartnerType, PPartnerTypeTable APPartnerTypeDT, bool AExactMatch) { DataRow[] foundRows; PPartnerTypeRow Row; if (APPartnerTypeDT == null) { throw new ArgumentException("APPartnerTypeDT must not be null"); } if (APartnerType == "") { return(false); } if (APPartnerTypeDT.Rows.Count != 0) { if (AExactMatch) { foundRows = APPartnerTypeDT.Select(PPartnerTypeTable.GetTypeCodeDBName() + " = '" + APartnerType + "'"); } else { foundRows = APPartnerTypeDT.Select(PPartnerTypeTable.GetTypeCodeDBName() + " LIKE '" + APartnerType + "%'"); } foreach (DataRow untypedRow in foundRows) { Row = (PPartnerTypeRow)untypedRow; if ((Row.IsValidFromNull() || (Row.ValidFrom.Value.CompareTo(DateTime.Now) <= 0)) && (Row.IsValidUntilNull() || (Row.ValidUntil.Value.CompareTo(DateTime.Now) >= 0))) { return(true); } } // if APartnerType hasn't been found, false will be returned from this method because of the next statement! } return(false); }
/// <summary> /// Determines whether a specified Partner Type code is contained in the PPartnerTypeTable /// that is passed in. The AExactMatch parameter determines whether the check is done on an /// exact string match, or a 'starts with' string match. /// </summary> /// <param name="APartnerType"></param>Partner Type code that should be checked for /// <param name="APPartnerTypeDT"></param>PPartnerTypeTable containing rows of Partner Types /// <param name="AExactMatch"></param>Exact string match for APartnerType if true, /// otherwise 'starts with' string match /// <returns>true if APartnerType was found in APPartnerTypeDT, otherwise false</returns> public static bool HasPartnerType(string APartnerType, PPartnerTypeTable APPartnerTypeDT, bool AExactMatch) { DataRow[] foundRows; PPartnerTypeRow Row; if (APPartnerTypeDT == null) { throw new ArgumentException("APPartnerTypeDT must not be null"); } if (APartnerType == "") { return false; } if (APPartnerTypeDT.Rows.Count != 0) { if (AExactMatch) { foundRows = APPartnerTypeDT.Select(PPartnerTypeTable.GetTypeCodeDBName() + " = '" + APartnerType + "'"); } else { foundRows = APPartnerTypeDT.Select(PPartnerTypeTable.GetTypeCodeDBName() + " LIKE '" + APartnerType + "%'"); } foreach (DataRow untypedRow in foundRows) { Row = (PPartnerTypeRow)untypedRow; if ((Row.IsValidFromNull() || (Row.ValidFrom.Value.CompareTo(DateTime.Now) <= 0)) && (Row.IsValidUntilNull() || (Row.ValidUntil.Value.CompareTo(DateTime.Now) >= 0))) { return true; } } // if APartnerType hasn't been found, false will be returned from this method because of the next statement! } return false; }
public static PUnitTable GetLedgerUnits() { PUnitTable UnitTable = new PUnitTable(); PUnitRow UnitRow; TLogging.LogAtLevel(9, "TPartnerDataReaderWebConnector.GetLedgerUnits called!"); TDBTransaction Transaction = null; DBAccess.GDBAccessObj.BeginAutoReadTransaction(IsolationLevel.ReadCommitted, ref Transaction, delegate { // Load data string SqlStmt = "SELECT pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetPartnerKeyDBName() + ", pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetUnitNameDBName() + " FROM " + PUnitTable.GetTableDBName() + ", " + PPartnerTypeTable.GetTableDBName() + " WHERE pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetPartnerKeyDBName() + " = pub_" + PPartnerTypeTable.GetTableDBName() + "." + PPartnerTypeTable.GetPartnerKeyDBName() + " AND " + PPartnerTypeTable.GetTypeCodeDBName() + " = '" + MPartnerConstants.PARTNERTYPE_LEDGER + "'"; // sort rows according to name SqlStmt = SqlStmt + " ORDER BY " + PUnitTable.GetUnitNameDBName(); DataTable events = DBAccess.GDBAccessObj.SelectDT(SqlStmt, "ledgers", Transaction); foreach (DataRow eventRow in events.Rows) { UnitRow = (PUnitRow)UnitTable.NewRow(); UnitRow.PartnerKey = Convert.ToInt64(eventRow[0]); UnitRow.UnitName = Convert.ToString(eventRow[1]); UnitTable.Rows.Add(UnitRow); } }); return(UnitTable); }
/// <summary> /// todoComment /// </summary> /// <param name="AChangingPartnerTypeRow"></param> /// <param name="AIsRemoval"></param> /// <returns></returns> public Boolean PerformPartnerTypeAddOrRemoval(DataRow AChangingPartnerTypeRow, out Boolean AIsRemoval) { const String TYPECODE_COSTCENTRE = "COSTCENTRE"; Boolean ReturnValue = false; AIsRemoval = false; String TypeCode; DataRow ExistingMatchingDataRow; PPartnerTypeTable PartnerTypeTable; PPartnerTypeRow TheNewRow; PTypeRow CheckTypeRow; DataRowView[] CheckTypeRows; DialogResult CheckTypeRowsAnswer; TRecalculateScreenPartsEventArgs RecalculateScreenPartsEventArgs; String CostCentreLink; PartnerTypeTable = FMainDS.PPartnerType; try { TypeCode = AChangingPartnerTypeRow["TypeCode"].ToString(); ExistingMatchingDataRow = PartnerTypeTable.Rows.Find(new Object[] { ((PPartnerRow)FMainDS.PPartner.Rows[0]).PartnerKey, TypeCode }); if (ExistingMatchingDataRow == null) { /* * Add Special Type */ // Check security permission if (!UserInfo.GUserInfo.IsTableAccessOK(TTableAccessPermission.tapCREATE, PPartnerTypeTable.GetTableDBName())) { TMessages.MsgSecurityException(new ESecurityDBTableAccessDeniedException("", "create", PPartnerTypeTable.GetTableDBName()), this.GetType()); AChangingPartnerTypeRow.CancelEdit(); // reset to unchecked return(false); } // Check: is this Partner Type assignable? // MessageBox.Show("Perform check: is PartnerType assignable? TypeCode: " + TypeCode); CheckTypeRows = FDataCache_PartnerTypeListDV.FindRows(TypeCode); if (CheckTypeRows.Length > 0) { CheckTypeRow = (PTypeRow)CheckTypeRows[0].Row; if (!CheckTypeRow.ValidType) { /*CheckTypeRowsAnswer = TMessages.MsgQuestion( * ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_VALUEUNASSIGNABLE, TypeCode), * this.GetType(), false);*/ CheckTypeRowsAnswer = MessageBox.Show( string.Format(StrTheCodeIsNoLongerActive, TypeCode), Catalog.GetString("Invalid Data Entered"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (CheckTypeRowsAnswer == DialogResult.No) { // reset to unchecked AChangingPartnerTypeRow.CancelEdit(); return(false); } } } // add new row to PartnerType table PartnerTypeTable = FMainDS.PPartnerType; TheNewRow = PartnerTypeTable.NewRowTyped(); TheNewRow.PartnerKey = FMainDS.PPartner[0].PartnerKey; TheNewRow.TypeCode = TypeCode; TheNewRow.CreatedBy = UserInfo.GUserInfo.UserID; TheNewRow.DateCreated = DateTime.Now.Date; PartnerTypeTable.Rows.Add(TheNewRow); // Fire OnRecalculateScreenParts event RecalculateScreenPartsEventArgs = new TRecalculateScreenPartsEventArgs(); RecalculateScreenPartsEventArgs.ScreenPart = TScreenPartEnum.spCounters; OnRecalculateScreenParts(RecalculateScreenPartsEventArgs); ReturnValue = true; AIsRemoval = false; } else { /* * Remove Special Type */ // Check security permission if (!UserInfo.GUserInfo.IsTableAccessOK(TTableAccessPermission.tapDELETE, PPartnerTypeTable.GetTableDBName())) { TMessages.MsgSecurityException(new ESecurityDBTableAccessDeniedException("", "delete", PPartnerTypeTable.GetTableDBName()), this.GetType()); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } // perform check: If COSTCENTRE is to be removed then check whether Partner has a link to costcentre set up if (TypeCode == TYPECODE_COSTCENTRE) { try { if (FPartnerEditUIConnector.HasPartnerCostCentreLink(out CostCentreLink)) { MessageBox.Show(String.Format(StrPartnerHasCostCentreLink, CostCentreLink, StrPartnerHasCostCentreLinkTitle)); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } } catch (ESecurityAccessDeniedException Exp) { TMessages.MsgSecurityException(Exp, this.GetType()); MessageBox.Show(StrSecurityPreventsRemoval, StrSecurityPreventsRemovalTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } catch (Exception) { throw; } } // Delete row from PartnerType table ExistingMatchingDataRow.Delete(); // Fire OnRecalculateScreenParts event RecalculateScreenPartsEventArgs = new TRecalculateScreenPartsEventArgs(); RecalculateScreenPartsEventArgs.ScreenPart = TScreenPartEnum.spCounters; OnRecalculateScreenParts(RecalculateScreenPartsEventArgs); ReturnValue = true; AIsRemoval = true; } /* * Check if this change could be applied to Family Members */ // TODO PartnerTypeFamilyMembersPropagationSelectionWinForm Dialog still missing #if TODO if (SharedTypes.PartnerClassStringToEnum(FMainDS.PPartner[0].PartnerClass) == TPartnerClass.FAMILY) { if (HasFamilyFamilyMembers()) { if (FDelegatePartnerTypePropagationSelection != null) { if (!AIsRemoval) { FMainDS.Merge(FDelegatePartnerTypePropagationSelection(TypeCode, "ADD")); } else { FMainDS.Merge(FDelegatePartnerTypePropagationSelection(TypeCode, "DELETE")); } } } } #endif } catch (Exception E) { MessageBox.Show(E.ToString()); ReturnValue = false; } return(ReturnValue); }
/// <summary> /// Performs Special Types promotion to Family Members. /// /// </summary> /// <param name="AInspectDS">The Main DataSet of the UIConnector</param> /// <param name="ASubmitChangesTransaction">Running transaction in which the DB commands /// will be enlisted</param> /// <returns>true if processing was successful, otherwise false /// </returns> private bool SpecialSubmitProcessingPartnerTypes(PartnerEditTDS AInspectDS, TDBTransaction ASubmitChangesTransaction) { bool ReturnValue = true; PartnerEditTDSPartnerTypeChangeFamilyMembersPromotionTable FamilyChangePromotionTable; PPartnerTypeTable PPartnerTypeSubmitTable; PPartnerTypeRow PPartnerTypeSubmitRow; bool PartnerTypeDBExists; PPartnerTypeTable PartnerType; if (AInspectDS.Tables.Contains(PartnerEditTDSPartnerTypeChangeFamilyMembersPromotionTable.GetTableName())) { // TLogging.LogAtLevel(7, "TPartnerEditUIConnector.SpecialSubmitProcessingPartnerTypes: " + PartnerEditTDSPartnerTypeChangeFamilyMembersPromotionTable.GetTableName() + " passed in."); FamilyChangePromotionTable = AInspectDS.PartnerTypeChangeFamilyMembersPromotion; if (FamilyChangePromotionTable.Rows.Count > 0) { // TLogging.LogAtLevel(7, "SpecialSubmitProcessingPartnerTypes: " + PartnerEditTDSPartnerTypeChangeFamilyMembersPromotionTable.GetTableName() + // ".Rows.Count: " + FamilyChangePromotionTable.Rows.Count.ToString()); PPartnerTypeSubmitTable = new PPartnerTypeTable(); for (int Counter = 0; Counter <= FamilyChangePromotionTable.Rows.Count - 1; Counter += 1) { PartnerTypeDBExists = PPartnerTypeAccess.Exists(FamilyChangePromotionTable[Counter].PartnerKey, FamilyChangePromotionTable[Counter].TypeCode, ASubmitChangesTransaction); // TLogging.LogAtLevel(7, "SpecialSubmitProcessingPartnerTypes: Row[" + Counter.ToString() + "]: DB Exists: " + PartnerTypeDBExists.ToString()); if ((!PartnerTypeDBExists && (FamilyChangePromotionTable[Counter].AddTypeCode)) || (PartnerTypeDBExists && (FamilyChangePromotionTable[Counter].RemoveTypeCode))) { /* * Action is needed since the PartnerType is either or is either not * in the DB when it should be. */ PPartnerTypeSubmitRow = PPartnerTypeSubmitTable.NewRowTyped(false); PPartnerTypeSubmitRow.PartnerKey = FamilyChangePromotionTable[Counter].PartnerKey; PPartnerTypeSubmitRow.TypeCode = FamilyChangePromotionTable[Counter].TypeCode; if (PartnerTypeDBExists) { // get the latest modificationID, otherwise it is emtpy, and that would cause trouble // when deleting the partner type. PartnerType = PPartnerTypeAccess.LoadByPrimaryKey( FamilyChangePromotionTable[Counter].PartnerKey, FamilyChangePromotionTable[Counter].TypeCode, ASubmitChangesTransaction); PPartnerTypeSubmitRow.ModificationId = PartnerType[0].ModificationId; } PPartnerTypeSubmitTable.Rows.Add(PPartnerTypeSubmitRow); if (FamilyChangePromotionTable[Counter].RemoveTypeCode) { // TLogging.LogAtLevel(7, "SpecialSubmitProcessingPartnerTypes: Row[" + Counter.ToString() + "]: Adding to PPartnerTypeSubmitTable - for deletion."); // Mark Type for deletion so that it will be deleted in the DB PPartnerTypeSubmitRow.AcceptChanges(); PPartnerTypeSubmitRow.Delete(); } else { // TLogging.LogAtLevel(7, "SpecialSubmitProcessingPartnerTypes: Row[" + Counter.ToString() + "]: Adding to PPartnerTypeSubmitTable - for addition."); // Type is added, so it will be added in the DB } } } ReturnValue = true; } } return ReturnValue; }
private PPartnerTypeTable GetPartnerTypesInternal(out Int32 ACount, Boolean ACountOnly) { TDBTransaction ReadTransaction; Boolean NewTransaction = false; PPartnerTypeTable PartnerTypesDT; PartnerTypesDT = new PPartnerTypeTable(); try { ReadTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead, TEnforceIsolationLevel.eilMinimum, out NewTransaction); if (ACountOnly) { ACount = PPartnerTypeAccess.CountViaPPartner(FPartnerKey, ReadTransaction); } else { // TLogging.LogAtLevel(7, "TPartnerEditUIConnector.GetDataPartnerTypesInternal: loading Partner Types for Partner " + FPartnerKey.ToString() + "..."); try { PartnerTypesDT = PPartnerTypeAccess.LoadViaPPartner(FPartnerKey, ReadTransaction); } catch (Exception) { throw; } ACount = PartnerTypesDT.Rows.Count; } } finally { if (NewTransaction) { DBAccess.GDBAccessObj.CommitTransaction(); TLogging.LogAtLevel(7, "TPartnerEditUIConnector.GetDataPartnerTypesInternal: committed own transaction."); } } return PartnerTypesDT; }
public static void UpdatePartnerType(int AExtractId, Boolean AAdd, String ATypeCode) { PPartnerTypeTable PartnerTypeTable; PPartnerTypeRow PartnerTypeRow; MExtractTable ExtractTable; string SqlStmt = ""; TDBTransaction Transaction = null; bool SubmissionOK = false; DBAccess.GDBAccessObj.BeginAutoTransaction(IsolationLevel.Serializable, ref Transaction, ref SubmissionOK, delegate { if (AAdd) { PartnerTypeTable = new PPartnerTypeTable(); ExtractTable = MExtractAccess.LoadViaMExtractMaster(AExtractId, Transaction); // query all rows of given extract foreach (MExtractRow ExtractRow in ExtractTable.Rows) { if (!PPartnerTypeAccess.Exists(ExtractRow.PartnerKey, ATypeCode, Transaction)) { // create record if this type does not exist for this partner yet PartnerTypeRow = PartnerTypeTable.NewRowTyped(); PartnerTypeRow.PartnerKey = ExtractRow.PartnerKey; PartnerTypeRow.TypeCode = ATypeCode; PartnerTypeTable.Rows.Add(PartnerTypeRow); } } PPartnerTypeAccess.SubmitChanges(PartnerTypeTable, Transaction); } else { SqlStmt = "DELETE FROM pub_" + PPartnerTypeTable.GetTableDBName() + " WHERE " + PPartnerTypeTable.GetPartnerKeyDBName() + " IN (SELECT " + MExtractTable.GetPartnerKeyDBName() + " FROM pub_" + MExtractTable.GetTableDBName() + " WHERE " + MExtractTable.GetExtractIdDBName() + " = " + AExtractId + ")" + " AND " + PPartnerTypeTable.GetTypeCodeDBName() + " = '" + ATypeCode + "'"; DBAccess.GDBAccessObj.ExecuteNonQuery(SqlStmt, Transaction); } SubmissionOK = true; }); }
public static void UpdatePartnerType(int AExtractId, Boolean AAdd, String ATypeCode) { PPartnerTypeTable PartnerTypeTable; PPartnerTypeRow PartnerTypeRow; MExtractTable ExtractTable; TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.Serializable); string SqlStmt = ""; try { if (AAdd) { PartnerTypeTable = new PPartnerTypeTable(); ExtractTable = MExtractAccess.LoadViaMExtractMaster(AExtractId, Transaction); // query all rows of given extract foreach (MExtractRow ExtractRow in ExtractTable.Rows) { if (!PPartnerTypeAccess.Exists(ExtractRow.PartnerKey, ATypeCode, Transaction)) { // create record if this type does not exist for this partner yet PartnerTypeRow = PartnerTypeTable.NewRowTyped(); PartnerTypeRow.PartnerKey = ExtractRow.PartnerKey; PartnerTypeRow.TypeCode = ATypeCode; PartnerTypeTable.Rows.Add(PartnerTypeRow); } } PPartnerTypeAccess.SubmitChanges(PartnerTypeTable, Transaction); } else { SqlStmt = "DELETE FROM pub_" + PPartnerTypeTable.GetTableDBName() + " WHERE " + PPartnerTypeTable.GetPartnerKeyDBName() + " IN (SELECT " + MExtractTable.GetPartnerKeyDBName() + " FROM pub_" + MExtractTable.GetTableDBName() + " WHERE " + MExtractTable.GetExtractIdDBName() + " = " + AExtractId + ")" + " AND " + PPartnerTypeTable.GetTypeCodeDBName() + " = '" + ATypeCode + "'"; DBAccess.GDBAccessObj.ExecuteNonQuery(SqlStmt, Transaction); } DBAccess.GDBAccessObj.CommitTransaction(); } catch (Exception Exc) { TLogging.Log("An Exception occured during the updating of Partner Types:" + Environment.NewLine + Exc.ToString()); DBAccess.GDBAccessObj.RollbackTransaction(); throw; } }
public static PUnitTable GetLedgerUnits(string ALedgerName) { PUnitTable UnitTable = new PUnitTable(); PUnitRow UnitRow; TDBTransaction ReadTransaction; Boolean NewTransaction = false; if (ALedgerName == "*") { ALedgerName = ""; } else if (ALedgerName.EndsWith("*")) { ALedgerName = ALedgerName.Substring(0, ALedgerName.Length - 1); } TLogging.LogAtLevel(9, "TPartnerDataReaderWebConnector.GetLedgerUnits called!"); ReadTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead, TEnforceIsolationLevel.eilMinimum, out NewTransaction); try { // Load data string SqlStmt = "SELECT pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetPartnerKeyDBName() + ", pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetUnitNameDBName() + " FROM " + PUnitTable.GetTableDBName() + ", " + PPartnerTypeTable.GetTableDBName() + " WHERE pub_" + PUnitTable.GetTableDBName() + "." + PUnitTable.GetPartnerKeyDBName() + " = pub_" + PPartnerTypeTable.GetTableDBName() + "." + PPartnerTypeTable.GetPartnerKeyDBName() + " AND " + PPartnerTypeTable.GetTypeCodeDBName() + " = '" + MPartnerConstants.PARTNERTYPE_LEDGER + "'"; if (ALedgerName.Length > 0) { // in case there is a filter set for the event name ALedgerName = ALedgerName.Replace('*', '%') + "%"; SqlStmt = SqlStmt + " AND " + PUnitTable.GetUnitNameDBName() + " LIKE '" + ALedgerName + "'"; } // sort rows according to name SqlStmt = SqlStmt + " ORDER BY " + PUnitTable.GetUnitNameDBName(); DataTable events = DBAccess.GDBAccessObj.SelectDT(SqlStmt, "ledgers", ReadTransaction); foreach (DataRow eventRow in events.Rows) { UnitRow = (PUnitRow)UnitTable.NewRow(); UnitRow.PartnerKey = Convert.ToInt64(eventRow[0]); UnitRow.UnitName = Convert.ToString(eventRow[1]); UnitTable.Rows.Add(UnitRow); } } catch (Exception e) { TLogging.Log(e.ToString()); } finally { if (NewTransaction) { DBAccess.GDBAccessObj.CommitTransaction(); TLogging.LogAtLevel(7, "TPartnerDataReaderWebConnector.GetLedgerUnits: committed own transaction."); } } return(UnitTable); }
/// <summary> /// return an XmlDocument with all partner info; /// the partners are grouped by class, country, status, and sitekey /// </summary> /// <returns></returns> public static string ExportPartners() { PartnerEditTDS MainDS = new PartnerEditTDS(); LoadDataFromDB(ref MainDS); // Group partners into categories. // // A partner's category is defined by his: class, country, status, and sitekey // It is stored as a string e.g. "FAMILY,DE,ACTIVE,0". // SortedList <string, List <long> > PartnerCategories = GroupPartnersIntoCategories(MainDS); // create XML structure for each category XmlDocument PartnerData = TYml2Xml.CreateXmlDocument(); XmlNode rootNode = PartnerData.FirstChild.NextSibling; Int32 groupCounter = 0; foreach (string category in PartnerCategories.Keys) { // get category data groupCounter++; XmlElement groupNode = PartnerData.CreateElement("PartnerGroup" + groupCounter.ToString()); rootNode.AppendChild(groupNode); Int32 partnerCounter = 0; string[] categoryDetails = category.Split(new char[] { ',' }); // may want to skip the categories with sitekey = -1 // right now, we still export them and ignore the partners 0 and 1000000 later groupNode.SetAttribute("class", categoryDetails[0]); groupNode.SetAttribute("Country", categoryDetails[1]); groupNode.SetAttribute("status", categoryDetails[2]); groupNode.SetAttribute("SiteKey", categoryDetails[3]); List <long> partnerKeys = PartnerCategories[category]; foreach (long partnerKey in partnerKeys) { if ((partnerKey != 0) && (partnerKey != 1000000)) // skip organization root and the 0 when exporting { MainDS.PPartner.DefaultView.RowFilter = PPartnerTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); PPartnerRow partnerRow = (PPartnerRow)MainDS.PPartner.DefaultView[0].Row; PFamilyRow familyRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { MainDS.PFamily.DefaultView.RowFilter = PFamilyTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); familyRow = (PFamilyRow)MainDS.PFamily.DefaultView[0].Row; } PPersonRow personRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { MainDS.PPerson.DefaultView.RowFilter = PPersonTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); personRow = (PPersonRow)MainDS.PPerson.DefaultView[0].Row; } POrganisationRow organisationRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { MainDS.POrganisation.DefaultView.RowFilter = POrganisationTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); organisationRow = (POrganisationRow)MainDS.POrganisation.DefaultView[0].Row; } PUnitRow unitRow = null; UmUnitStructureRow unitStructureRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { MainDS.PUnit.DefaultView.RowFilter = PUnitTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); unitRow = (PUnitRow)MainDS.PUnit.DefaultView[0].Row; MainDS.UmUnitStructure.DefaultView.RowFilter = UmUnitStructureTable.GetChildUnitKeyDBName() + " = " + partnerKey.ToString(); long numParents = MainDS.UmUnitStructure.DefaultView.Count; if (numParents == 1) { unitStructureRow = (UmUnitStructureRow)MainDS.UmUnitStructure.DefaultView[0].Row; } else { throw new Exception( "Units must have exactly one ParentUnit. " + "The unit with partnerKey " + partnerKey.ToString() + " has " + numParents.ToString() + "."); } } PBankRow BankRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { MainDS.PBank.DefaultView.RowFilter = PBankTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); BankRow = (PBankRow)MainDS.PBank.DefaultView[0].Row; } partnerCounter++; XmlElement partnerNode = PartnerData.CreateElement("Partner" + partnerCounter.ToString()); groupNode.AppendChild(partnerNode); partnerNode.SetAttribute("PartnerKey", partnerRow.PartnerKey.ToString()); //groupNode.SetAttribute("ShortName", partnerRow.PartnerShortName.ToString()); if (personRow != null) { partnerNode.SetAttribute("FirstName", personRow.FirstName.ToString()); partnerNode.SetAttribute("LastName", personRow.FamilyName.ToString()); partnerNode.SetAttribute("Title", personRow.Title.ToString()); } else if (familyRow != null) { partnerNode.SetAttribute("FirstName", familyRow.FirstName.ToString()); partnerNode.SetAttribute("LastName", familyRow.FamilyName.ToString()); partnerNode.SetAttribute("Title", familyRow.Title.ToString()); } else if (organisationRow != null) { partnerNode.SetAttribute("Name", organisationRow.OrganisationName.ToString()); } else if (unitRow != null) { partnerNode.SetAttribute("Name", unitRow.UnitName.ToString()); partnerNode.SetAttribute("UnitTypeCode", unitRow.UnitTypeCode.ToString()); if (unitStructureRow != null) { partnerNode.SetAttribute("ParentUnitKey", unitStructureRow.ParentUnitKey.ToString()); } } if (BankRow != null) { partnerNode.SetAttribute("BranchName", BankRow.BranchName); partnerNode.SetAttribute("BranchCode", BankRow.BranchCode); partnerNode.SetAttribute("BranchBic", BankRow.Bic); partnerNode.SetAttribute("EpFormatFile", BankRow.EpFormatFile); } partnerNode.SetAttribute("CreatedAt", partnerRow.DateCreated.Value.ToString("yyyy-MM-dd HH:mm:ss")); // special types string specialTypes = ""; MainDS.PPartnerType.DefaultView.RowFilter = PPartnerTypeTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); foreach (DataRowView rv in MainDS.PPartnerType.DefaultView) { if (specialTypes.Length > 0) { specialTypes += ", "; } specialTypes += ((PPartnerTypeRow)rv.Row).TypeCode; } if (specialTypes.Length > 0) { partnerNode.SetAttribute("SpecialTypes", specialTypes); } // addresses DataView partnerLocationView = MainDS.PPartnerLocation.DefaultView; partnerLocationView.RowFilter = PPartnerLocationTable.GetPartnerKeyDBName() + " = " + partnerRow.PartnerKey.ToString() + "AND " + PPartnerLocationTable.GetLocationKeyDBName() + " <> 0 "; // ignore invalid addresses Int32 addressCounter = 0; foreach (DataRowView rv in partnerLocationView) { XmlElement addressNode = PartnerData.CreateElement("Address" + (addressCounter > 0 ? addressCounter.ToString() : "")); addressCounter++; partnerNode.AppendChild(addressNode); PPartnerLocationRow partnerLocationRow = (PPartnerLocationRow)rv.Row; DataView locationView = MainDS.PLocation.DefaultView; locationView.RowFilter = PLocationTable.GetSiteKeyDBName() + "=" + partnerLocationRow.SiteKey.ToString() + " AND " + PLocationTable.GetLocationKeyDBName() + "=" + partnerLocationRow.LocationKey.ToString(); if (locationView.Count > 0) { PLocationRow locationRow = (PLocationRow)locationView[0].Row; addressNode.SetAttribute("Street", locationRow.StreetName); addressNode.SetAttribute("City", locationRow.City); addressNode.SetAttribute("PostCode", locationRow.PostalCode); } addressNode.SetAttribute("Email", partnerLocationRow.EmailAddress); addressNode.SetAttribute("Phone", partnerLocationRow.TelephoneNumber); addressNode.SetAttribute("MobilePhone", partnerLocationRow.MobileNumber); } // TODO: notes // TODO: This doesn't export as much data as it should? } } } return(TXMLParser.XmlToString(PartnerData)); }
private static void ParsePartners(ref PartnerImportExportTDS AMainDS, XmlNode ACurNode, TDBTransaction ATransaction, ref TVerificationResultCollection AVerificationResult) { XmlNode LocalNode = ACurNode; while (LocalNode != null) { if (LocalNode.Name.StartsWith("PartnerGroup")) { ParsePartners(ref AMainDS, LocalNode.FirstChild, ATransaction, ref AVerificationResult); } else if (LocalNode.Name.StartsWith("Partner")) { PPartnerRow PartnerRow = AMainDS.PPartner.NewRowTyped(); Boolean IsExistingPartner = false; if (!TYml2Xml.HasAttributeRecursive(LocalNode, "SiteKey")) { throw new Exception(Catalog.GetString("Missing SiteKey Attribute")); } if (!TYml2Xml.HasAttributeRecursive(LocalNode, "status")) { throw new Exception(Catalog.GetString("Missing status Attribute")); } // get a new partner key if (TYml2Xml.HasAttribute(LocalNode, "PartnerKey")) { PartnerRow.PartnerKey = Convert.ToInt64(TYml2Xml.GetAttribute(LocalNode, "PartnerKey")); if (PPartnerAccess.Exists(PartnerRow.PartnerKey, ATransaction)) { AMainDS.Merge(PPartnerAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.PPartner.DefaultView.RowFilter = String.Format("{0} = '{1}'", PPartnerTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); PartnerRow = (PPartnerRow)AMainDS.PPartner.DefaultView[0].Row; IsExistingPartner = true; } else { AMainDS.PPartner.Rows.Add(PartnerRow); } } else { PartnerRow.PartnerKey = TImportExportYml.NewPartnerKey; TImportExportYml.NewPartnerKey--; } String PartnerClass = TYml2Xml.GetAttributeRecursive(LocalNode, "class"); TLogging.LogAtLevel(TLogging.DEBUGLEVEL_TRACE, PartnerClass + " " + LocalNode.Name + " " + "PartnerKey=" + PartnerRow.PartnerKey ); if (IsExistingPartner && (PartnerClass != PartnerRow.PartnerClass)) { throw new Exception(String.Format("Error: Yml contains Existing Partner {0} with a different partner class {1}!", PartnerRow.PartnerKey, PartnerClass)); } PartnerRow.PartnerClass = PartnerClass; if (PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { PFamilyRow FamilyRow; if (IsExistingPartner) { AMainDS.Merge(PFamilyAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.PFamily.DefaultView.RowFilter = String.Format("{0} = '{1}'", PFamilyTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); FamilyRow = (PFamilyRow)AMainDS.PFamily.DefaultView[0].Row; } else { FamilyRow = AMainDS.PFamily.NewRowTyped(); FamilyRow.PartnerKey = PartnerRow.PartnerKey; PartnerRow.PartnerClass = MPartnerConstants.PARTNERCLASS_FAMILY; AMainDS.PFamily.Rows.Add(FamilyRow); } FamilyRow.FamilyName = TYml2Xml.GetAttributeRecursive(LocalNode, "LastName"); FamilyRow.FirstName = TYml2Xml.GetAttribute(LocalNode, "FirstName"); FamilyRow.Title = TYml2Xml.GetAttribute(LocalNode, "Title"); if (TYml2Xml.HasAttribute(LocalNode, "CreatedAt")) { FamilyRow.DateCreated = Convert.ToDateTime(TYml2Xml.GetAttribute(LocalNode, "CreatedAt")); } PartnerRow.AddresseeTypeCode = MPartnerConstants.PARTNERCLASS_FAMILY; PartnerRow.PartnerShortName = Calculations.DeterminePartnerShortName(FamilyRow.FamilyName, FamilyRow.Title, FamilyRow.FirstName); } if (PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { PPersonRow PersonRow; if (IsExistingPartner) { AMainDS.Merge(PPersonAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.PPerson.DefaultView.RowFilter = String.Format("{0} = '{1}'", PPersonTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); PersonRow = (PPersonRow)AMainDS.PPerson.DefaultView[0].Row; } else { PersonRow = AMainDS.PPerson.NewRowTyped(); PersonRow.PartnerKey = PartnerRow.PartnerKey; AMainDS.PPerson.Rows.Add(PersonRow); } PersonRow.FamilyName = TYml2Xml.GetAttributeRecursive(LocalNode, "LastName"); PersonRow.FirstName = TYml2Xml.GetAttribute(LocalNode, "FirstName"); PersonRow.Title = TYml2Xml.GetAttribute(LocalNode, "Title"); if (TYml2Xml.HasAttribute(LocalNode, "CreatedAt")) { PersonRow.DateCreated = Convert.ToDateTime(TYml2Xml.GetAttribute(LocalNode, "CreatedAt")); } // PersonRow.Sp PartnerRow.PartnerShortName = Calculations.DeterminePartnerShortName(PersonRow.FamilyName, PersonRow.Title, PersonRow.FirstName); } else if (PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { POrganisationRow OrganisationRow; if (IsExistingPartner) { AMainDS.Merge(POrganisationAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.POrganisation.DefaultView.RowFilter = String.Format("{0} = '{1}'", POrganisationTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); OrganisationRow = (POrganisationRow)AMainDS.POrganisation.DefaultView[0].Row; } else { OrganisationRow = AMainDS.POrganisation.NewRowTyped(); OrganisationRow.PartnerKey = PartnerRow.PartnerKey; AMainDS.POrganisation.Rows.Add(OrganisationRow); } OrganisationRow.OrganisationName = TYml2Xml.GetAttributeRecursive(LocalNode, "Name"); PartnerRow.PartnerShortName = OrganisationRow.OrganisationName; } else if (PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { PUnitRow UnitRow; if (IsExistingPartner) { AMainDS.Merge(PUnitAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.PUnit.DefaultView.RowFilter = String.Format("{0} = '{1}'", PUnitTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); UnitRow = (PUnitRow)AMainDS.PUnit.DefaultView[0].Row; } else { UnitRow = AMainDS.PUnit.NewRowTyped(); UnitRow.PartnerKey = PartnerRow.PartnerKey; AMainDS.PUnit.Rows.Add(UnitRow); } UnitRow.UnitTypeCode = TYml2Xml.GetAttributeRecursive(LocalNode, "UnitTypeCode"); UnitRow.UnitName = TYml2Xml.GetAttributeRecursive(LocalNode, "Name"); if (PartnerRow.PartnerKey < -1) { throw new Exception("Invalid Partner Key or No Partner Key - and no proper handling implemented"); // from here... /* * AVerificationResult.Add(new TVerificationResult( * String.Format(Catalog.GetString("Importing Unit {0}"), UnitRow.UnitName), * Catalog.GetString("You need to provide a partner key for the unit"), * TResultSeverity.Resv_Critical)); */ // ...to here: throws Exception in case of a illegal import file? // The above code must have a glitch } if (!TYml2Xml.HasAttribute(LocalNode, "ParentUnitKey")) { throw new Exception( "The currently being processed unit (PartnerKey " + PartnerRow.PartnerKey + ") requires a ParentUnitKey."); } Int64 ParentKey = Convert.ToInt64(TYml2Xml.GetAttributeRecursive(LocalNode, "ParentUnitKey")); UmUnitStructureRow UnitStructureRow = null; if (IsExistingPartner) { AMainDS.Merge(UmUnitStructureAccess.LoadViaPUnitChildUnitKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.UmUnitStructure.DefaultView.RowFilter = String.Format("{0} = '{1}'", UmUnitStructureTable.GetChildUnitKeyDBName(), PartnerRow.PartnerKey); if (AMainDS.UmUnitStructure.DefaultView.Count > 0) { UnitStructureRow = (UmUnitStructureRow)AMainDS.UmUnitStructure.DefaultView[0].Row; } } if (UnitStructureRow == null) { UnitStructureRow = AMainDS.UmUnitStructure.NewRowTyped(); UnitStructureRow.ParentUnitKey = ParentKey; UnitStructureRow.ChildUnitKey = PartnerRow.PartnerKey; AMainDS.UmUnitStructure.Rows.Add(UnitStructureRow); } else { UnitStructureRow.ParentUnitKey = ParentKey; UnitStructureRow.ChildUnitKey = PartnerRow.PartnerKey; } PartnerRow.PartnerShortName = UnitRow.UnitName; } else if (PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { PBankRow BankRow; if (IsExistingPartner) { AMainDS.Merge(PBankAccess.LoadByPrimaryKey(PartnerRow.PartnerKey, ATransaction)); AMainDS.PBank.DefaultView.RowFilter = String.Format("{0} = '{1}'", PBankTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey); BankRow = (PBankRow)AMainDS.PBank.DefaultView[0].Row; } else { BankRow = AMainDS.PBank.NewRowTyped(); BankRow.PartnerKey = PartnerRow.PartnerKey; AMainDS.PBank.Rows.Add(BankRow); } BankRow.BranchName = TYml2Xml.GetAttribute(LocalNode, "BranchName"); BankRow.BranchCode = TYml2Xml.GetAttribute(LocalNode, "BranchCode"); BankRow.Bic = TYml2Xml.GetAttribute(LocalNode, "BranchBic"); BankRow.EpFormatFile = TYml2Xml.GetAttribute(LocalNode, "EpFormatFile"); if (TYml2Xml.HasAttribute(LocalNode, "CreatedAt")) { BankRow.DateCreated = Convert.ToDateTime(TYml2Xml.GetAttribute(LocalNode, "CreatedAt")); } } else { /* * throw new Exception( * "Unknown Partner Class" + * TYml2Xml.GetAttributeRecursive(LocalNode, "class")); */ // TODO AVerificationResult add failing problem: unknown partner class } PartnerRow.StatusCode = TYml2Xml.GetAttributeRecursive(LocalNode, "status"); // import special types StringCollection SpecialTypes = StringHelper.StrSplit(TYml2Xml.GetAttributeRecursive(LocalNode, "SpecialTypes"), ","); if (IsExistingPartner) { PPartnerTypeAccess.LoadViaPPartner(AMainDS, PartnerRow.PartnerKey, ATransaction); } foreach (string SpecialType in SpecialTypes) { PPartnerTypeRow PartnerTypeRow = null; AMainDS.PPartnerType.DefaultView.RowFilter = String.Format("{0}={1} AND {2}='{3}'", PPartnerTypeTable.GetPartnerKeyDBName(), PartnerRow.PartnerKey, PPartnerTypeTable.GetTypeCodeDBName(), SpecialType ); if (AMainDS.PPartnerType.DefaultView.Count > 0) { PartnerTypeRow = (PPartnerTypeRow)AMainDS.PPartnerType.DefaultView[0].Row; } else { PartnerTypeRow = AMainDS.PPartnerType.NewRowTyped(); PartnerTypeRow.PartnerKey = PartnerRow.PartnerKey; PartnerTypeRow.TypeCode = SpecialType.Trim(); AMainDS.PPartnerType.Rows.Add(PartnerTypeRow); } // Check Partner type exists, or create it bool TypeIsKnown = PTypeAccess.Exists(PartnerTypeRow.TypeCode, ATransaction); if (!TypeIsKnown) { Int32 RowIdx = AMainDS.PType.DefaultView.Find(PartnerTypeRow.TypeCode); // I might have created it a second ago.. if (RowIdx < 0) { PTypeRow TypeRow = AMainDS.PType.NewRowTyped(); TypeRow.TypeCode = PartnerTypeRow.TypeCode; TypeRow.TypeDescription = "Created from YAML import"; AMainDS.PType.Rows.Add(TypeRow); } } } // import subscriptions StringCollection Subscriptions = StringHelper.StrSplit(TYml2Xml.GetAttributeRecursive(LocalNode, "Subscriptions"), ","); foreach (string publicationCode in Subscriptions) { PSubscriptionRow subscription = AMainDS.PSubscription.NewRowTyped(); subscription.PartnerKey = PartnerRow.PartnerKey; subscription.PublicationCode = publicationCode.Trim(); subscription.ReasonSubsGivenCode = "FREE"; AMainDS.PSubscription.Rows.Add(subscription); } // import address XmlNode addressNode = TYml2Xml.GetChild(LocalNode, "Address"); if ((addressNode == null) || (TYml2Xml.GetAttributeRecursive(addressNode, "Street").Length == 0)) { if (!IsExistingPartner) { // add the empty location PPartnerLocationRow partnerlocation = AMainDS.PPartnerLocation.NewRowTyped(true); partnerlocation.SiteKey = 0; partnerlocation.PartnerKey = PartnerRow.PartnerKey; partnerlocation.DateEffective = DateTime.Now; partnerlocation.LocationType = "HOME"; partnerlocation.SendMail = false; partnerlocation.EmailAddress = TYml2Xml.GetAttributeRecursive(addressNode, "Email"); partnerlocation.TelephoneNumber = TYml2Xml.GetAttributeRecursive(addressNode, "Phone"); partnerlocation.MobileNumber = TYml2Xml.GetAttributeRecursive(addressNode, "MobilePhone"); AMainDS.PPartnerLocation.Rows.Add(partnerlocation); } } else { PLocationRow location = AMainDS.PLocation.NewRowTyped(true); location.LocationKey = (AMainDS.PLocation.Rows.Count + 1) * -1; location.SiteKey = 0; if (!TYml2Xml.HasAttributeRecursive(LocalNode, "Country")) { throw new Exception(Catalog.GetString("Missing Country Attribute")); } location.CountryCode = TYml2Xml.GetAttributeRecursive(addressNode, "Country"); location.StreetName = TYml2Xml.GetAttributeRecursive(addressNode, "Street"); location.City = TYml2Xml.GetAttributeRecursive(addressNode, "City"); location.PostalCode = TYml2Xml.GetAttributeRecursive(addressNode, "PostCode"); AMainDS.PLocation.Rows.Add(location); PPartnerLocationRow partnerlocation = AMainDS.PPartnerLocation.NewRowTyped(true); partnerlocation.SiteKey = 0; partnerlocation.LocationKey = location.LocationKey; partnerlocation.PartnerKey = PartnerRow.PartnerKey; partnerlocation.SendMail = true; partnerlocation.DateEffective = DateTime.Now; partnerlocation.LocationType = "HOME"; partnerlocation.EmailAddress = TYml2Xml.GetAttributeRecursive(addressNode, "Email"); partnerlocation.TelephoneNumber = TYml2Xml.GetAttributeRecursive(addressNode, "Phone"); partnerlocation.MobileNumber = TYml2Xml.GetAttributeRecursive(addressNode, "MobilePhone"); AMainDS.PPartnerLocation.Rows.Add(partnerlocation); } // import finance details (bank account number) XmlNode financialDetailsNode = TYml2Xml.GetChild(LocalNode, "FinancialDetails"); ParseFinancialDetails(AMainDS, financialDetailsNode, PartnerRow.PartnerKey, ATransaction); } LocalNode = LocalNode.NextSibling; } }