/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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); } } }
/// <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)); }
/// <summary> /// 執行 Select 方法後呼叫的方法 /// </summary> /// <param name="inputArgs"></param> /// <param name="outputResult"></param> protected virtual void DoAfterSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult) { }
/// <summary> /// 執行 Select 方法前呼叫的方法 /// </summary> /// <param name="inputArgs"></param> /// <param name="outputResult"></param> protected virtual void DoBeforeSelect(GSelectInputArgs inputArgs, GSelectOutputResult outputResult) { }