public static ObjectReference FromXML(string xmlData) { ObjectReferenceSAXHandler handler = new ObjectReferenceSAXHandler(); MgSAXParser parser = new MgSAXParser(handler); parser.Parse(xmlData); return(handler.ParsedReference); }
/// <summary> /// To allocate and fill inner objects of the class /// </summary> /// <param name = "foundTagName">possible tag name , name of object, which need be allocated</param> /// <param name="parentForm">the form of the task that called the current task (note: NOT triggering task)</param> protected virtual bool initInnerObjects(String foundTagName, MgFormBase parentForm) { XmlParser parser = Manager.GetCurrentRuntimeContext().Parser; switch (foundTagName) { case XMLConstants.MG_TAG_HELPTABLE: if (_helpTab == null) { _helpTab = new Helps(); } if (Events.ShouldLog(Logger.LogLevels.Development)) { Events.WriteDevToLog(string.Format("{0} ...", foundTagName)); } _helpTab.fillData(); break; case XMLConstants.MG_TAG_DVHEADER: if (Events.ShouldLog(Logger.LogLevels.Development)) { Events.WriteDevToLog(string.Format("{0} ...", foundTagName)); } DataView.fillHeaderData(); break; case XMLConstants.MG_TAG_PROP: _propTab.fillData(this, 'T'); break; case XMLConstants.MG_TAG_FORM: Form = FormInitData(parentForm); break; case XMLConstants.MG_TAG_ASSEMBLIES: int start = parser.getCurrIndex(); int endContext = parser.getXMLdata().IndexOf('/' + XMLConstants.MG_TAG_ASSEMBLIES, parser.getCurrIndex()); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); String assemblyData = parser.getXMLdata().Substring(start, parser.getCurrIndex() - start); //read assemblies data using sax parser try { var mgSAXParser = new MgSAXParser(new AssembliesSaxHandler()); mgSAXParser.Parse(assemblyData); } catch (Exception ex) { Events.WriteExceptionToLog(ex); } break; case XMLConstants.MG_ATTR_MENU_CONTENT: // set current index after tag name end parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.MG_ATTR_MENU_CONTENT, parser.getCurrIndex()) + XMLConstants.MG_ATTR_MENU_CONTENT.Length + 1); endContext = parser.getXMLdata().IndexOf("</" + XMLConstants.MG_ATTR_MENU_CONTENT, parser.getCurrIndex()); _menusContent = Encoding.Unicode.GetBytes(parser.getXMLsubstring(endContext)); Manager.MenuManager.getApplicationMenus(this); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); break; default: return(false); } return(true); }
/// <summary> /// Fill inner members and needed links for the current 'fld' /// </summary> /// <param name = "((DataView)dataView)">reference to all DataView object, which consist relevant fields </param> private bool initInnerObjects(XmlParser parser, String foundTagName, DataView dataView) { switch (foundTagName) { case XMLConstants.MG_TAG_FLD: if (_isOwnerFld) // init <fld id = recompute_by=> first time, init reference by id { fillFldField(parser, dataView); _isOwnerFld = false; // must to be after FillFldField } else { fillFldField(parser, dataView); // it's not need ((DataView)dataView), it's not first <fld > } break; case ConstInterface.MG_TAG_LINK: fillLink(parser, dataView); break; case XMLConstants.MG_TAG_CONTROL: if (_ctrlProps == null) { _ctrlProps = new PropTable(); } // fill the prop table using the existing properties _ctrlProps.fillDataByExists(Task); //if virtual field causes recompute of repeatable control if (_ctrlProps.getCtrlRef() != null && _ctrlProps.getCtrlRef().IsRepeatable&& OwnerFld.IsVirtual && (!(OwnerFld.hasInitExp()))) { OwnerFld.causeTableInvalidation(true); } break; case XMLConstants.MG_TAG_FORM_PROPERTIES: if (_formProps == null) { _formProps = new PropTable(); } // fill the prop table using the existing properties _formProps.fillDataByExists(Task); break; case ConstInterface.MG_TAG_FLD_END: parser.setCurrIndex2EndOfTag(); return(false); case XMLConstants.MG_TAG_DCVALUES: string segment = parser.ReadToEndOfCurrentElement(); var handler = new DCValuesRecomputeSaxHandler(Task); MgSAXParser.Parse(segment, handler); AddRecomputeItem(handler.DcValuesRecomputeAction); break; default: Logger.Instance.WriteExceptionToLog( "There is no such tag in Recompute. Insert else if to Recompute.initInnerObjects for " + foundTagName); return(false); } return(true); }