Esempio n. 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);
        }
Esempio n. 2
0
        /// <summary>
        /// 執行 Find 方法的實作。
        /// </summary>
        /// <param name="inputArgs"></param>
        /// <param name="outputResult"></param>
        protected virtual void DoFind(GFindInputArgs inputArgs, GFindOutputResult outputResult)
        {
            var selectArgs = new GSelectInputArgs {
                TableName = this.ProgID, SelectFields = inputArgs.SelectFields, FilterItems = inputArgs.FilterItems
            };
            var selectResult = Select(selectArgs);

            outputResult.EntityTable = selectResult.Table;
        }
Esempio n. 3
0
        /// <summary>
        /// 取得查詢資料
        /// </summary>
        /// <param name="tableDefine">資料表定義</param>
        /// <param name="formID">單據編號</param>
        /// <returns></returns>
        private GEntityTable GetQueryTable(GTableDefine tableDefine, string formID)
        {
            var fieldName = tableDefine.IsMaster ? SysFields.ID : SysFields.MasterID;
            var args      = new GSelectInputArgs {
                TableName = tableDefine.TableName, FilterItems = { new GFilterItem(fieldName, formID) }
            };

            foreach (GFilterItem filterItem in tableDefine.FilterItems)
            {
                args.FilterItems.Add(filterItem.Clone());
            }
            var result = Select(args);

            return(result.Table);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
 /// <summary>
 /// 執行 Move 方法的實作。
 /// </summary>
 /// <param name="inputArgs"></param>
 /// <param name="outputResult"></param>
 protected virtual void DoMove(GMoveInputArgs inputArgs, GMoveOutputResult outputResult)
 {
     outputResult.EntitySet = new GEntitySet(this.ProgID);
     foreach (GTableDefine tableDefine in this.ProgramDefine.Tables)
     {
         if (tableDefine.IsMaster)
         {
             var selectArgs = new GSelectInputArgs {
                 TableName = tableDefine.TableName, FilterItems = { new GFilterItem(SysFields.ID, inputArgs.FormID) }
             };
             var selectResult = Select(selectArgs);
             outputResult.EntitySet.Tables.Add(selectResult.Table);
         }
         else
         {
             var selectArgs = new GSelectInputArgs {
                 TableName = tableDefine.TableName, FilterItems = { new GFilterItem(SysFields.MasterID, inputArgs.FormID) }
             };
             var selectResult = Select(selectArgs);
             outputResult.EntitySet.Tables.Add(selectResult.Table);
         }
     }
 }
Esempio n. 6
0
 /// <summary>
 /// 建立 Select 語法的資料庫命令。
 /// </summary>
 /// <param name="inputArgs">Select 方法的傳入引數。</param>
 public virtual DbCommand BuildSelectCommand(GSelectInputArgs inputArgs)
 {
     return(BuildSelectCommand(inputArgs.TableName, inputArgs.SelectFields, inputArgs.FilterItems,
                               inputArgs.UserFilter, inputArgs.IsOrderBy));
 }
Esempio n. 7
0
 /// <summary>
 /// 執行 Select 方法後呼叫的方法
 /// </summary>
 /// <param name="inputArgs"></param>
 /// <param name="outputResult"></param>
 protected virtual void DoAfterSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult)
 {
 }
Esempio n. 8
0
 /// <summary>
 /// 執行 Select 方法前呼叫的方法
 /// </summary>
 /// <param name="inputArgs"></param>
 /// <param name="outputResult"></param>
 protected virtual void DoBeforeSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult)
 {
 }