/// <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> /// 取得指定資料表符合條件的資料。 /// </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> /// 執行 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) { }