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