freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

t產(chǎn)品開發(fā)手冊范本-資料下載頁

2025-06-29 08:48本頁面
  

【正文】 / param name=reportSearchType查詢類型/param/// returns/returnsprotected override string GetDetailSql(object userId, string whereSql, ReportSearchType reportSearchType){1 主SQL = “select **** “2 “from ***** left join *******“3 組織WhereSql:這是難點,自動生成,或者特殊的需要自己手工組織解釋:基類提供了GetWhereSqlFromSearchPlan()直接調(diào)用即可。4 組織數(shù)據(jù)權(quán)限 Sql5 加上排序Order by}}}從上面的代碼可以看出報表服務(wù)的動態(tài) sql 主要由 5 部分組成 1.select 字段2.主表以及根據(jù)顯示字段動態(tài)拼接得 left join 表 3.where 條件4.?dāng)?shù)據(jù)權(quán)限控制 5.order by 排序語句 其中關(guān)鍵是兩點(1) 根據(jù)顯示字段動態(tài)拼接 left join 表: 之前的做法是把所有的查詢字段和所有相關(guān)聯(lián)的表都放到主 sql 中,這樣造成很多數(shù)據(jù)冗余,同時導(dǎo)致整個報表 sql 語句執(zhí)行效率較低。因為大多數(shù)時候用戶不會讓全部數(shù)據(jù)顯示。 基于這個思想,現(xiàn)在的 sql 語句盡量做到動態(tài)拼接。就是根據(jù)顯示字段動態(tài)的拼接 left join 所關(guān)聯(lián)的表。(2) 獨立獲得的 Where 語句。之前的 where 由于主 sql 把所有關(guān)聯(lián)的表都進行了“l(fā)eft join||inner join”,所以直 接返回所有查詢條件拼接的字符串。而由于 中描述對字段和 left join 的處理方式, 所以直接返回所有的查詢條件拼接的字符串就不適用了。因為有可能查詢條件有的條件,而 沒有相關(guān)聯(lián)的 left join 表?,F(xiàn)在的處理方式是,where 不與字段和 left join 表相關(guān)聯(lián), 獨立進行查詢。b、動態(tài) sql 實現(xiàn)方法(1)預(yù)置 selectFieldName 由于之前報表工具沒有實現(xiàn)把“字段設(shè)置”中“選擇字段”導(dǎo)入到“欄目預(yù)置”,導(dǎo)致eap_reporttablecol 中”selectFieldName”字段為空。新報表工具已實現(xiàn)該功能。但這里 有一個要提醒大家,就是如果大家之前在“字段設(shè)置”中把“選擇字段”和“查詢字段”都 預(yù)置成“字段名稱”,也就是這三個預(yù)置數(shù)據(jù)都是字段的別名?,F(xiàn)在用這個工具是不合適的, 因 為 現(xiàn) 在 優(yōu) 化 方 案 中 動 態(tài) 拼 查 詢 字 段 , 而 這 個 字 段 會 用 到 eap_reporttablecol 中selectfieldname,拼成類似與【selectfieldname】+”as”+【別名】。如果三個預(yù)置數(shù)據(jù) 都是一樣,不符合 sql 語法規(guī)則,會報錯。(2)生成字典由于動態(tài)拼 sql,所以需要找到表的別名和物理表之間的對應(yīng)關(guān)系。這樣就需要每個報 表針對 sql 生成一個對應(yīng)關(guān)系的字典。字典是這樣設(shè)計的:”tableAliasName”, 表的別名” RealTable”,”實際物理表”” RelationShip”,”對應(yīng)關(guān)系(left join || inner join || from)”” RelationTable”,”關(guān)聯(lián)表(例如:存貨分類必須和存貨關(guān)聯(lián))”” RelationCondition”,”關(guān)聯(lián)條件(on 后邊的條件,不包括 on)”” IsMainTable”,”是否是主表(“true”||”false”)”這個字典主要用在根據(jù)查詢字段動態(tài)拼 left join,以及動態(tài)拼 where 語句。(3)基類方法protected void GetSelectSqlAndLeftJoinSql(StringBuilder fieldsSql, StringBuilderleftTableSql){…….}該GetSelectSqlAndLeftJoinSql方法實現(xiàn)了根據(jù)查詢字段動態(tài)拼接left join。該方法有兩 個參數(shù)是必傳的,fieldsSql和leftTableSql。第一個返回select查詢字段,第二個返回left join語句。該方法進行了重載,大家可以根據(jù)需要調(diào)用所需要的方法。//返回 where 語句。protected string GetWhereSqlFromSearchPlan(){…….}(4)子類要進行的操作 重寫兩個屬性:protected override string SearchName{//查詢方案名稱…}protected override string ReportName{//報表名稱…}因為在得到主sql之前要進行一些初始化操作,所以要重寫這兩個屬性。 重寫兩個方法報表服務(wù)中,報表都繼承了基類using . AbstractDetailReport我們主要是重載下面這兩函數(shù)//得到查詢報表明細的完整的 sql, 這個方法主要是拼主 sql。調(diào)用上面介紹的基類 中//兩個方法。具體用法大家可以參考“銷貨單明細表”和“銷貨單執(zhí)行表”。protected override string GetDetailSql(object userId, string whereSql,ReportSearchType reportSearchType)//數(shù)據(jù)字典,GetDetailSql()需要根據(jù)這個字典來拼寫 sqlprotected override Dictionarystring, Dictionarystring, string GetFieldsAndLeftTablesMapping(){}提示:由于 left join 是根據(jù)查詢字段進行動態(tài)拼接的,所以查詢字段的 selectFieldName 是必須有值的,且這個值是必須帶”.”的,這樣我才可以解析”.”前邊表的別名,找到對 應(yīng)的字典。從而進行 left join 的拼接。否則我無法找到對應(yīng)的字典。由于[…]+”.id”都是不可以顯示的字段,而這些字段又都是有用的字段,我無法判斷 什么時候加和不加。所以我現(xiàn)在的處理方式是統(tǒng)一都加?,F(xiàn)在設(shè)計的主表只有一個,也就是只有一個根節(jié)點。這樣就有一種可能,就是顯示字段 只和主表關(guān)聯(lián)。這種情況 left join 就不會關(guān)聯(lián)到表頭信息,而數(shù)據(jù)權(quán)限需要用到表頭信 息。這種情況就需要大家在返回的 leftTableSql 進行判斷了。具體可以參考“銷貨單明細 表”?,F(xiàn)對這里用到的一個主要方法參數(shù)進行說明一下:protected void GetSelectSqlAndLeftJoinSql(Dictionarystring, string specialFields,IListstring needShowFields, IListstring noShowFields, StringBuilder fieldsSql,StringBuilder leftTablesSql){}specialFields,特殊處理字段。例如預(yù)置數(shù)據(jù)中 selectFieldName 的值是””,而實際sql 中是””,別名是“a”。這種情況,就需要用到這個參數(shù)了,”a”,””。key 是進行特殊處理字段的別名,value 是別名”as”前的值。 needShowFields,還需要進行處理的字段。就是有些字段不符合上面的規(guī)則,但有時可現(xiàn)實 的字段,我會統(tǒng)一放到這個集合里。這里有一個特別需要大家會用到該參數(shù)的地方。就是如 果該字段是通過報表工具的輸出表達式得到,我會把所需要的所有字段都放在里邊,如果不 是特殊處理字段。例如:a=b+c,如果 b、c 不在 specialFields 里,我也會把 b、c 放到 needShowFields 里。 noShowFields,不顯示字段。例如執(zhí)行表中,根據(jù)查詢條件不同,顯示字段不同,可以通過 這個參數(shù)進行控制。報表在拼動態(tài)的 selectField 時,先從特殊字段中查找,如果是特殊字段則加入到 選 擇字段中來,如果不是特殊字段則根據(jù)欄目設(shè)置來拼查詢字段。如果有些字段并不是某些物 理表的字段,而是通過查詢多個表的有關(guān)字段組裝而來的,因改在報表服務(wù)中重載基類的 getSpecialAndNoShowFields()這個函數(shù),在該函數(shù)中寫出數(shù)據(jù)字典c、字典的設(shè)計方法與工作原理以一個簡單的 sql 語句為例select voucherdate,單據(jù)日期 quantity, 數(shù)量2 QuantityPrecision 數(shù)量的精度為 2from SA_SaleOrder_b SaleOrderDetailDTO 主表left join SA_SaleOrder SaleOrder on = 輔 表根據(jù)下面的數(shù)據(jù)字典設(shè)計格式:”tableAliasName”, 表的別名” RealTable”,”實際物理表”” RelationShip”,”對應(yīng)關(guān)系(left join || inner join || from)”” RelationTable”,”關(guān)聯(lián)表(例如:存貨分類必須和存貨關(guān)聯(lián))”” RelationCondition”,”關(guān)聯(lián)條件(on 后邊的條件,不包括 on)”” IsMainTable”,”是否是主表(“true”||”false”)”我們設(shè)計了這樣的字典:protected override Dictionarystring, Dictionarystring, string GetFieldsAndLeftTablesMapping(){Dictionarystring, Dictionarystring, string groupFieldsInfos = new Dictionarystring,Dictionarystring,string()。 groupFieldsInfos[SaleOrderDetailDTO] = (SA_SaleOrder_b, from, , True)。groupFieldsInfos[SaleOrder] = (SA_SaleOrder , left join, SaleOrderDetailDTO, =, False)。return groupFieldsInfos。}但是對于上面所列出的 sql 中,因為“2 QuantityPrecision”這個字段比較特殊,但不是某 個物理表中實際存在的字段,我們需要對該字段設(shè)計一個特殊的字典。specialFields[QuantityPrecision ] = @2。既然字段設(shè)計好了,那么根據(jù)字典拼寫字段和表的過程是怎樣的? 下面的代碼簡要解釋了字典的工作原理。1. ReportTableColumnInfo df (根據(jù)預(yù)置數(shù)據(jù)初始化欄目信息)//先說明下 df 的幾個屬性字段//例: voucherdate// df. FieldName 字段名(別名) voucherdate// df. SelectFieldName 選擇字段名 2. 按照先特殊字段后普通字段,得到選擇字段的集合,特殊字段:字典:specialFields[QuantityPrecision ] = @2。算法: selectFields[()] = specialFields[()] + as +。結(jié)果:selectFields[QuantityPrecision]= 2 as QuantityPrecision普通字段selectFields[()] = + as + 。 結(jié)果:selectFields[“voucherdate”] = + as + voucherdate。3. 得到關(guān)聯(lián)表的集合,區(qū)分主表和輔表if (!(aliasTableName)){if (fieldAndTableMapping[aliasTableName][IsMainTable] == true){leftTables[aliasTableName] = fieldAndTableMapping[aliasTableName][RelationShip] + + fieldAndTableMapping[aliasTableName][RealTable] + as + aliasTableName + \n。}else{leftTables[aliasTableName] = fieldAndTableMapping[aliasTableName][RelationShip] + + fieldAndTableMapping[aliasTableName][RealTable] + as + aliasTableName + on + fieldAndTableMapping[aliasTableName][RelationCondition] + \n。}}4 .解析 selectFields,leftTables,得到選擇字段 和關(guān)聯(lián)表的完整的 sql。d、數(shù)據(jù)權(quán)限在報表服務(wù)中我們拼 sql 時需要把該報表的數(shù)據(jù)權(quán)限的控制也加上,對與銷售模塊來 說,我們調(diào)用了基類的函數(shù) (),調(diào)用這個函數(shù)是關(guān)鍵是參數(shù)要正 確,如果某個權(quán)限控制字段是可有可無,比如說:“業(yè)務(wù)員”在銷售訂單上時可以為空的
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1