public static JsonStoreFilter CreFromSelection(VSingleSelection selection) { if (selection != null) { var locate = new JsonStoreFilter() { FromPosition = 0 }; locate.Items.Add(new JSFilterItemCondition { FieldName = selection.ValueField, CmpOperator = JSFilterComparisionOperatorType.Eq, FieldValue = selection.Value }); return locate; } else return null; }
public Object Clone() { var result = new JsonStoreFilter { FromPosition = this.FromPosition }; lock (this) { foreach (ICloneable prm in this.Items) result.Items.Add((JSFilterItem)prm.Clone()); } return result; }
public void Locate(Params bioPrms, EventHandler<OnSelectEventArgs> callback, JsonStoreFilter locate, Boolean forceRemote = false) { CRTObject v_row = null; if (!forceRemote) v_row = this._locateInternal(locate); if (v_row != null) this._doOnLocation(v_row, null, callback); else { this.Load(bioPrms, (s, a) => { if (a.Response.Success) this._doOnLocation(this._lastLocatedRow, null, callback); else this._doOnLocation(null, a.Response.Ex, callback); }, locate, null, 0); } }
public void Locate(EventHandler<OnSelectEventArgs> callback, JsonStoreFilter locate, Boolean forceRemote = false) { this.Locate(null, callback, locate, forceRemote); }
private static Boolean _checkFilter(CRTObject row, Int64 rowPos, JsonStoreFilter filter) { if ((row != null) && (filter != null)) { if (rowPos >= filter.FromPosition) { return filter.Check(row); } return false; } return false; }
private CRTObject _locateInternal(JsonStoreFilter locate) { if (this.DS0 != null) { var rows = this.DS0.Cast<CRTObject>().ToArray(); for (var i = 0; i < rows.Length; i++) { var rowPos = i + this.StartFrom; if (_checkFilter(rows[i], rowPos, locate)) { locate.FromPosition = rowPos + 1; return rows[i]; } } } return null; }
public void Load(Params bioPrms, AjaxRequestDelegate callback, JsonStoreFilter locate) { this.Load(bioPrms, callback, locate, null, null); }
public void Load(Params bioPrms, AjaxRequestDelegate callback, JsonStoreFilter locate, Int64? pageSize, Int64? startFrom) { this._load(CJSRequestGetType.GetData, bioPrms, callback, locate, pageSize, startFrom, null); }
private void _load ( CJSRequestGetType getType, Params bioPrms, AjaxRequestDelegate callback, JsonStoreFilter locate, Int64? pageSize, Int64? startFrom, String selection ) { var v_selection = selection; var v_locate = locate; if (pageSize.HasValue) this.PageSize = pageSize.Value; if (startFrom.HasValue) this.StartFrom = startFrom.Value; if (this.AjaxMng == null) throw new EBioException("Свойство \"ajaxMng\" должно быть определено!"); if (String.IsNullOrEmpty(this.BioCode)) throw new EBioException("Свойство \"bioCode\" должно быть определено!"); this._doBeforLoadData(bla => { if (bla.Cancel) { return; } if (bioPrms != null) { if (this.BioParams == null) this.BioParams = bioPrms.Clone() as Params; else { this.BioParams.Clear(); this.BioParams = this.BioParams.Merge(bioPrms, true); } } else { if (this.BioParams == null) this.BioParams = new Params(); } var isMetadataObsolete = false; var isFirstLoad = false; this._detectIsFirstLoad(this.BioCode, this.BioParams, ref isMetadataObsolete, ref isFirstLoad); if (isFirstLoad) { this.StartFrom = 0; } this._lastRequestedBioCode = this.BioCode; JsonStoreSort sortDefinition = null; if (!isMetadataObsolete && (this.DS0 != null)) { var cv = (this.DS0 as ICollectionView); if (cv != null) sortDefinition = this._genJSSortDefinition(cv.SortDescriptions); } this._lastRequestedParams = (Params)this.BioParams.Clone(); var reqst = new JsonStoreRequestGet { BioCode = this.BioCode, getType = getType, BioParams = this.BioParams, Prms = null, Packet = new JsonStoreData { Limit = this.PageSize, Start = this.StartFrom, IsFirstLoad = isFirstLoad, IsMetadataObsolete = isMetadataObsolete, Locate = v_locate }, Sort = sortDefinition, selection = v_selection, Callback = (sndr, args) => { try { Type rowType = null; var rq = (JsonStoreRequest)args.Request; var rsp = args.Response as JsonStoreResponse; if (rsp != null) { if ((rsp.packet != null) && (rsp.packet.Rows != null)) { if (BioGlobal.Debug) { if (rsp.Ex != null) throw new EBioException("Unhandled exception!!!! silent:[" + rq.Silent + "]", rsp.Ex); } if (rq.Packet.IsMetadataObsolete) { this._metadata = rsp.packet.MetaData; var fldDefs = _creFldDefsRmt(this._metadata); rowType = this._creRowType(fldDefs); this.DS0 = this._creDSInst(rowType); } this._doOnJsonStoreResponseSuccess(rq, rsp); this._loadDS(rowType, rsp); this._doOnJsonStoreDSLoaded(this.DS0, rq, rsp); if (rq.Packet.Locate != null) this._lastLocatedRow = this._locateInternal(rq.Packet.Locate); } else { if (BioGlobal.Debug) { var m = "Bad response: "; if (rsp.packet == null) m = m + "rsp.packet=null;"; else if (rsp.packet.Rows == null) m = m + "rsp.packet.rows=null;"; throw new EBioException(m); } } } else { //if (BioGlobal.Debug) { // var biorsp = args.Response as BioResponse; // if (biorsp == null) // throw new EBioException("Bad response: biorsp=null"); //} } } finally { this._doOnAfterLoadData(args); if (callback != null) callback(this, args); } } }; this.AjaxMng.Request(reqst); }); }
public void Init( JsonStoreData packet, Params bioParams, JsonStoreFilter filter, JsonStoreSort sorter, String selection, Int32 timeout ) { this.rqPacket = packet; this._rq_bioParams = bioParams; this._rq_filter = filter; this._rq_sorter = sorter; this._rq_selection = selection; if (this.rqPacket == null) this.rqPacket = this._creJSData(); XmlElement SQLtext = detectSQLTextElement(this.CursorIniDoc, this.bioCode); _applyParamsTypes((XmlElement)SQLtext.ParentNode, this.rqBioParams); this.InitCursorFields(); if (this.rqBioParams == null) this._rq_bioParams = new Params(); base.Init(SQLtext.InnerText, this.rqBioParams); String vSQL = this.preparedSQL; Boolean v_filterIsDefined = this._applyFilter(this._rq_filter, ref this._rq_bioParams, ref vSQL); Boolean v_sorterIsDefined = this._applySorter(this._rq_sorter, ref vSQL); if (String.IsNullOrEmpty(this._rq_selection)) { JsonStoreFilter vLocate = (this.rqPacket != null) ? this.rqPacket.Locate : null; if (vLocate != null) { // ищем запрошенную запись var v_min_start = vLocate.FromPosition; String vSQLStr = null; var v_lprms = new Params(); vLocate.BuildSQLConditions(ref vSQLStr, v_lprms); if (!String.IsNullOrEmpty(vSQLStr)) vSQLStr = vSQLStr + " AND"; v_lprms = v_lprms.Merge(this.rqBioParams, true); v_lprms.SetValue("loc_start_from", v_min_start); vSQLStr = String.Format(csLocateNextSQLTemplate, vSQL, vSQLStr); int rnum = Convert.ToInt32(SQLCmd.ExecuteScalarSQL(this.Connection, vSQLStr, v_lprms, timeout)); if (this.rqPacket.Limit > 0) this.rqPacket.Start = Math.Max(((rnum - 1) / this.rqPacket.Limit) * this.rqPacket.Limit, 0); } this._applyPagging(this.rqPacket, !v_filterIsDefined && !v_sorterIsDefined, ref this._rq_bioParams, ref vSQL, timeout); } else { this._buildSelectSelectionSQL(this._rq_selection, this.rqBioParams, ref vSQL); } this.preparedSQL = vSQL; }
private Boolean _applyFilter(JsonStoreFilter filter, ref Params bioParams, ref String vSQL) { // фильтруем String vCondition = null; if (filter != null) { var v_prms = new Params(); filter.BuildSQLConditions(ref vCondition, v_prms); bioParams = v_prms.Merge(bioParams, true); } Boolean vFilterIsDefined = !String.IsNullOrEmpty(vCondition); if (vFilterIsDefined) { vSQL = String.Format(csFltrSQLTemplate, vSQL, vCondition); return true; } return false; }