/// <summary> /// override - always get a new record, and no need to refresh the position cache /// </summary> /// <returns></returns> protected override IRecord GetBasicRecord() { IRecord record = DataviewSynchronizer.GetRecord(false); GatewayResult result = TaskViews.GetPrimaryView().Fetch(record); if (!result.Success) { DataviewSynchronizer.RemoveRecord(record); record = null; } return(record); }
/// <summary> /// fetch record /// </summary> /// <returns></returns> protected virtual IRecord GetBasicRecord() { IRecord record = DataviewSynchronizer.GetRecord(UseFirstRecord); UseFirstRecord = false; GatewayResult result = TaskViews.GetPrimaryView().Fetch(record); UpdateViewEnd(result); if (!result.Success) { DataviewSynchronizer.RemoveRecord(record); record = null; } return(record); }
internal override ReturnResultBase Execute() { bool isEmptyDataView = ((DataView)(Task.DataView)).isEmptyDataview(); DataviewSynchronizer.SetupDataview(Reverse); IRecord origRecord = DataviewSynchronizer.GetCurrentRecord(); TaskViews.ViewMain.IgnorePositionCache = true; GatewayResult result = TaskViews.OpenCursors(Reverse, new DbPos(true)); if (result.Success) { IRecord record; while ((record = GetBasicRecord()) != null) { if (RecordComputer.Compute(record, true, false, false).Success) { //execute event OnRecordFetchEvent onRecordFetch((Record)record); DataviewSynchronizer.RemoveRecord(record); } } } TaskViews.CloseMainCursor(); TaskViews.ViewMain.IgnorePositionCache = false; if (origRecord != null) { DataviewSynchronizer.SetCurrentRecord(origRecord != null ? origRecord.getId() : Int32.MinValue); ((DataView)(Task.DataView)).takeFldValsFromCurrRec(); } ((DataView)(Task.DataView)).setEmptyDataview(isEmptyDataView); return(result); }
/// <summary> /// find the start record and get its position /// </summary> /// <returns></returns> internal override ReturnResultBase Execute() { IRecord origRecord = DataviewSynchronizer.GetCurrentRecord(); bool recordFound = FindMatchingRecord(); if (recordFound) { // found a record - keep its position IRecord currentRecord = DataviewSynchronizer.GetCurrentRecord(); DbPos outPos; PositionCache.TryGetValue(new PositionId(currentRecord.getId()), out outPos); ResultStartPosition = outPos; LocalDataviewManager.Reset(); DataviewSynchronizer.RemoveRecord(currentRecord); } else { DataviewSynchronizer.SetCurrentRecord(origRecord != null ? origRecord.getId() : Int32.MinValue); } return(new GatewayResult()); }