Example #1
0
        /// <summary>
        /// 執行 Select 方法的實作
        /// </summary>
        /// <param name="inputArgs"></param>
        /// <param name="outputResult"></param>
        protected virtual void DoSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult)
        {
            var sTableName   = inputArgs.TableName;
            var oTableDefine = this.ProgramDefine.Tables[sTableName];

            if (BaseFunc.IsNull(oTableDefine))
            {
                return;
            }

            // 因為 Find 與 Move 都會統一進入 Select
            // 所以放在這邊統一做判斷過濾條件是否有包含 SYS_ID 欄位且其值是 *
            // 如滿足條件則需要判斷資料型別,並更改其查詢值
            CheckFilterItemsForDbType(inputArgs.FilterItems);

            // 取得 Select 的欄位集合字串
            var sSelectFields = GetSelectFields(oTableDefine, inputArgs.SelectFields);

            var oDbCommandBuilder = this.CreateDbCommandBuilder();
            var oDbCommand        = oDbCommandBuilder.BuildSelectCommand(sTableName, sSelectFields, inputArgs.FilterItems, inputArgs.UserFilter,
                                                                         inputArgs.IsOrderBy);

            if (BaseFunc.IsNull(oDbCommand))
            {
                return;
            }

            var oDataTable = base.DbAccess.ExecuteDataTable(this.DatabaseID, oDbCommand);

            oDataTable.TableName = sTableName;

            if (inputArgs.IsBuildVirtualField)
            {
                // 加入虛擬欄位
                var oVFBuilder = new GVirtualFieldBuilder(oTableDefine, oDataTable);
                oVFBuilder.Execute();
            }
            else
            {
                // 判斷 Select 的欄位是否有虛擬欄位
                var oVFBuilder = new GVirtualFieldBuilder(oTableDefine, oDataTable);
                oVFBuilder.Execute(sSelectFields);
            }

            // 設定資料表中每個欄位的預設值
            BusinessFunc.SetDataColumnDefaultValue(oTableDefine, oDataTable);

            // 設定DataTable主索引鍵
            if (StrFunc.StrIsNotEmpty(oTableDefine.TablePrimaryKey))
            {
                DataFunc.DataTableSetPrimaryKey(oDataTable, oTableDefine.TablePrimaryKey);
            }

            // 資料表同意變更,讓資料表無異動狀態
            oDataTable.AcceptChanges();
            outputResult.Table = new GEntityTable(oDataTable);
        }
Example #2
0
        /// <summary>
        /// 取得指定資料表符合條件的資料。
        /// </summary>
        /// <param name="inputArgs"></param>
        /// <returns></returns>
        public GSelectOutputResult Select(GSelectInputArgs inputArgs)
        {
            var outputResult = new GSelectOutputResult();

            DoBeforeSelect(inputArgs, outputResult);
            if (inputArgs.Cancel)
            {
                return(outputResult);
            }

            DoSelect(inputArgs, outputResult);

            DoAfterSelect(inputArgs, outputResult);

            return(outputResult);
        }
Example #3
0
 /// <summary>
 /// 執行 Select 方法後呼叫的方法
 /// </summary>
 /// <param name="inputArgs"></param>
 /// <param name="outputResult"></param>
 protected virtual void DoAfterSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult)
 {
 }
Example #4
0
 /// <summary>
 /// 執行 Select 方法前呼叫的方法
 /// </summary>
 /// <param name="inputArgs"></param>
 /// <param name="outputResult"></param>
 protected virtual void DoBeforeSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult)
 {
 }