/// <summary> /// allocates and initialize inner object according to the found xml data /// </summary> private bool InitInnerObjects(XmlParser parser, String foundTagName) { if (foundTagName == null) { return(false); } switch (foundTagName) { case XMLConstants.MG_TAG_FLDH: FldsTab = new RCFieldsTable(); FldsTab.fillData(); break; case ConstInterface.MG_ATTR_KEY: { var current = new Key(this); current.FillData(); _keys.Add(current); break; } case ConstInterface.MG_TAG_RECORDS: parser.setCurrIndex( parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); //end of outer tad and its ">" break; case ConstInterface.MG_TAG_RECORDS_END: parser.setCurrIndex2EndOfTag(); break; case ConstInterface.MG_TAG_CACHED_TABLE_END: parser.setCurrIndex2EndOfTag(); return(false); case ConstInterface.MG_TAG_REC: { var current = new Record(this); current.fillData(); _records.Add(current); break; } } return(true); }
/// <summary> /// build XML string for the records /// </summary> /// <param name = "fieldsTab">the fields table for the records table /// </param> /// <param name = "message">to build, add parts /// <param name = "skipCurrRec">Skip current record /// <param name = "currRecId">Current record ID /// </param> protected internal void buildXML(FieldsTable fieldsTab, StringBuilder message, bool skipCurrRec, int currRecId) { Record rec, prevRec, orgPrevRec; int recIdx = REC_NOT_FOUND; for (int i = 0; i < _records.Count; i++) { // In case the previous record is not known to the server (OP_INSERT'ed) and is to be // dumped only after this record (it's idx is greater then 'i'), then temporary change // my prev record so the server won't get confused. rec = _records[i]; if (!rec.SendToServer || (skipCurrRec && rec.getId() == currRecId)) { continue; } prevRec = orgPrevRec = rec.getPrevRec(); // QCR #505277: The previous record may be unknown to the server but not in // the modified list yet. Therefore, if the previous record was not found // in that list then do another iteration of the loop. while (prevRec != null && (prevRec.getMode() == DataModificationTypes.Insert || !prevRec.SendToServer) && rec.getMode() == DataModificationTypes.Insert && ((recIdx = getRecIdx(prevRec.getId())) > i || recIdx == REC_NOT_FOUND || !prevRec.SendToServer)) { prevRec = prevRec.getPrevRec(); rec.setPrevRec(prevRec); } rec.buildXML(message, false); if (prevRec != orgPrevRec) { rec.setPrevRec(orgPrevRec); } } }