/// <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);
        }
Example #2
0
        /// <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());
        }