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);


      });
    }
Esempio n. 10
0
    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;
    }
Esempio n. 11
0
 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;
 }