예제 #1
0
        internal override ReturnResultBase Execute()
        {
            List <IDataSourceViewDefinition> dataControlsSourceDefs = DataSourceDefinitionsBuilder.BuildDataControlSourceDefinitions(Task);
            GatewayResult result = LocalDataviewManager.CreateDataControlViews(dataControlsSourceDefs);

            return(result);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        internal override ReturnResultBase Execute()
        {
            ReturnResultBase result = null;

            if (LocalDataviewManager.UserSorts != null)
            {
                TaskViews.ApplySort(LocalDataviewManager.UserSorts);
            }
            else
            {
                if (!KeepUserSort)
                {
                    TaskViews.ApplySort(Task.RuntimeSorts);
                }
            }

            TaskViews.ApplyUserRangesAndLocates();

            SetTaskMode();

            if (RefreshMode == ViewRefreshMode.CurrentLocation)
            {
                InitCurrentPosition();
                if (startPosition != null)
                {
                    result = ExecuteRefreshAndKeepCurrentLocation();
                    if (result.Success)
                    {
                        LocalDataviewManager.UserGatewayLocates.Clear();
                        LocalDataviewManager.UserLocates.Clear();
                        LocalDataviewManager.UserSorts = null;
                    }

                    return(result);
                }
            }

            // clean the position cache
            LocalDataviewManager.Reset();

            // Release the ViewMain cursor and re-prepare it.
            if (TaskViews.ViewMain != null)
            {
                TaskViews.ViewMain.ReleaseCursor();
                TaskViews.ViewMain.Prepare();
            }

            result = base.Execute();

            if (result.Success)
            {
                DataviewSynchronizer.SetCurrentRecordByIdx(0);
                LocalDataviewManager.UserGatewayLocates.Clear();
                LocalDataviewManager.UserLocates.Clear();
                LocalDataviewManager.UserSorts = null;
            }

            return(result);
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            LocalDataviewManager localDataViewManager = Task.DataviewManager.LocalDataviewManager;

            RuntimeReadOnlyView dataControlView = localDataViewManager.TaskViews.GetDataControlViewByBoundControlId(control.getDitIdx());

            DataSourceId dataSourceId = dataControlView.DataSourceViewDefinition.TaskDataSource.DataSourceDefinition.Id;

            DataControlRangeDataCollection rangeData = new DataControlRangeDataCollection(dataSourceId, dataControlView.RangeBuilder, control.getDitIdx());

            //remove old DataControlRangeDataCollection entry from map.
            localDataViewManager.rangeToDcValuesMap.Remove(rangeData);

            //build new DC values for control
            LocallyComputedDcValuesBuilder dcValuesBuilder = new LocallyComputedDcValuesBuilder(dataControlView);
            var dataControlValues = dcValuesBuilder.Build();

            localDataViewManager.DataviewSynchronizer.ApplyDCValuesAndRefreshControl(dataControlValues, rangeData, control);

            return(new ReturnResult());
        }
        /// <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());
        }
예제 #5
0
        /// <summary>
        /// !!
        /// </summary>
        /// <param name="command"></param>
        internal override ReturnResultBase Execute()
        {
            LocalDataviewManager.TaskViewsBuilder.FieldsBuilder = new FieldsBuilder();
            RecordingManagerBuilder recordingManagerBuilder = new RecordingManagerBuilder();

            LocalDataviewManager.BuildRecorder();
            LocalDataviewManager.BuildViewsCollection(Task);
            LocalDataviewManager.RecordingManager.StartRecording();


            GatewayResult retVal = OpenTables();


            //      if (l != tskr->dbs || !tskRt->AllDCTblsOpened)
            //{
            //   if (!(MAIN_PRG_PRG(tsk) && (BOOLEAN)ENV::backgnd_mode))
            //      tsk_close (l, TRUE, depth, FALSE, calltype, call_idx);
            //   return (FALSE);
            //}

            ///return retVal;

            return(retVal);
        }
 /// <summary>
 /// Reset user locates add by LocateAdd function.
 /// </summary>
 /// <returns></returns>
 internal override ReturnResultBase Execute()
 {
     LocalDataviewManager.ResetUserLocates();
     return(new ReturnResult());
 }
예제 #7
0
        /// <summary>
        /// execute the view refresh command while keeping the current location.
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        ReturnResultBase ExecuteRefreshAndKeepCurrentLocation()
        {
            ReturnResultBase result = new GatewayResult();

            LocalDataviewManager.Reset();

            //In order to build startposition using user locates reset the startposition.
            if (LocalDataviewManager.HasUserLocates)
            {
                startPosition = null;
            }
            // Release the ViewMain cursor and re-prepare it.
            if (TaskViews.ViewMain != null)
            {
                TaskViews.ViewMain.ReleaseCursor();
                TaskViews.ViewMain.Prepare();
            }

            //Performing UpdateAfterFetch(),  while fetching recs with startpos, may cause the task to enter in create/EmptyDataView mode, if
            //no recs are fetched. This should be avoided because if no recs are fetched we should try fetching recs with no startpos.
            PerformUpdateAfterFetch = false;

            //if the location in not on 1st line, fetch from the current location backward
            if (this.RefreshMode == ViewRefreshMode.CurrentLocation)
            {
                result = FetchBackward();
            }

            // fetch from current location forward
            if (result.Success)
            {
                result = base.Execute();
            }

            PerformUpdateAfterFetch = true;

            //look for the right record to set the dataview on
            int currentRecordId = FindCurrentRecordRow();

            // set the dataview on the right record - either the same record, if found, or the same line in te table,
            // if the previously current record was deleted
            if (currentRecordId != 0)
            {
                DataviewSynchronizer.SetCurrentRecord(currentRecordId);
            }
            else
            {
                //If no record found with CurrentLocation. Then set the RefreshMode as FirstRecord, Re-Execute ViewRefresh command.
                if (((DataView)Task.DataView).getSize() == 0)
                {
                    RefreshMode = ViewRefreshMode.FirstRecord;
                    result      = Execute();
                }
                else
                {
                    //If CurrentRecordRow is out of boundary of total records fetched, then set CurrentRecordRow on last record fetched.
                    CurrentRecordRow = CurrentRecordRow > ((DataView)Task.DataView).getSize() ? ((DataView)Task.DataView).getSize() : CurrentRecordRow;
                    DataviewSynchronizer.SetCurrentRecordByIdx(CurrentRecordRow - 1);
                }
            }

            Task.RefreshDisplay();

            return(result);
        }
예제 #8
0
 /// <summary>
 /// CTOR
 /// </summary>
 /// <param name="viewBoundaries"></param>
 /// <param name="cursorPositionFlag"></param>
 public ViewRangeDataBuilder(ViewBoundaries viewBoundaries, LocalDataviewManager dataviewManager)
 {
     this.viewBoundaries  = viewBoundaries;
     this.dataviewManager = dataviewManager;
 }
예제 #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="viewDefinition"></param>
 /// <param name="localDataviewManager"></param>
 public void Initialize(IDataSourceViewDefinition viewDefinition, LocalDataviewManager localDataviewManager)
 {
     DataSourceViewDefinition = viewDefinition;
     LocalDataviewManager     = localDataviewManager;
     RangeBuilder             = new ViewRangeDataBuilder(ViewBoundaries, ViewBoundaries.RuntimeViewBase.LocalDataviewManager);
 }