如何解决页面访问出现的“关键业务点菜单参数不匹配”错误

by jizw 2016.7.1 09:13
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。   背景:    不久前发现用户可以通过修改URL绕过权限系统管控,例如销售管理下的统计期间:http://20.10.130.50/U9/erp/display.aspx?lnk=CBO.Pub.StatPeriodStatus.StatPeriodStatus&ApplicationID=3015&sId=3015nid 如果去掉上面标注的参数,即使设置了对该用户的菜单拒绝权限,该用户还是可以正常访问! 原因是:菜单权限通过URI和PageParameter来确定菜单,当缺少ApplicationID=3015参数时,只通过URI:CBO.Pub.StatPeriodStatus.StatPeriodStatus匹配不到具体菜单,这种情况直接判定为通过。   这种情况属于非法访问,应该拒绝掉。所以就做了优化:当所访问的Form存在菜单装配信息,同时当前访问的URL和所有菜单装配的PageParameter都不匹配时,视为非法操作,默认拒绝掉。   解决办法:   补齐需要传递的参数   参数查询脚本:   URI: SELECT t1.Name,t1.URI,t1.PageParameter FROM dbo.UBF_Assemble_Menu t1 WHERE t1.URI='SCM.PM.PM5010_10' 或 FormID: SELECT t1.Name,t1.URI,t1.PageParameter FROM dbo.UBF_Assemble_Menu t1 INNER JOIN dbo.UBF_Assemble_Page t2 ON t2.URI = t1.URI INNER JOIN dbo.UBF_Assemble_Part t3 ON t3.Page=t2.ID INNER JOIN dbo.UBF_MD_UIForm t4 ON t3.Component=t4.UID WHERE t4.UID='86417851-c72a-49a6-9ad8-3f74e3476cc0'   由于补丁发布到现场后出现大量无法访问的节点,解决方案进行优化: 当某个节点缺少参数时,不再直接抛出“关键业务点菜单参数不匹配”错误,而是根据UBFConfig\U9FormSettings.Config文件里配置的默认参数来管控权限。

删除默认查询方案的方法

by jizw 2015.10.29 09:38
在实际使用查询过程中,经常发现由于特殊原因设置的默认方案导致了页面错误(抛黄页等),而导致无法正常进入画面,需要手动删除默认方案,下面提供列表和报表默认方案的删除方法。 列表:  查出对应节点的CaseModelID(可以在可正常访问的环境另存一个方案按名字来查): SELECT CaseModelID FROM dbo.Query_QueryCase WHERE Title = 'jizwTest' 删除方案:DELETE t FROM dbo.Query_QueryCase t WHERE CaseModelID='C4DAE642-0187-4070-90B7-092CBC083AA5' AND CaseType>-1 如果要精确删除某个用户的方案可以加上Org和User的条件。    报表: 确认要删除的报表ReportCaseID、UserID、OrgID: SELECT t1.cName 报表名称,t2.cName 方案名称, t3.lUserID ,t3.lOrgID , t3.uReportCaseID FROM dbo.UBF_MD_ASRPT_Category t1LEFT JOIN dbo.UBF_MD_ASRPT_UserCase t2 ON t1.ID=t2.uReportIDLEFT JOIN dbo.UBF_MD_ASRPT_UserCaseInfo t3 ON t2.ID=t3.uReportCaseIDWHERE t1.cName LIKE '%明细账%' AND t3.iUserCaseType = 6 根据以上信息删除默认方案: DELETE t FROM dbo.UBF_MD_ASRPT_UserCaseInfo t WHERE uReportCaseID='36F8D4C1-A9D7-4150-8D0E-77449B855A31' AND lOrgID=1001202263224223 AND lUserID =1001205240100022   不删除方案快速调试参考:http://u9service.ufida.com.cn/U9blog/post/2012/10/16/查询方案快速调试和诊断小技巧-列表画面无法进入.aspx  

在系统中移除协同搜索方法

by 温丽兵 2015.7.16 13:25
在系统中移除协同搜索方法 [更多...]

U9表数据清理脚本(非业务数据表,可考虑通过执行脚本删除)

by 张刚 2014.12.8 15:51
主题 U9表数据清理脚本(非业务数据表,可考虑通过执行脚本删除) 发件人 张刚 收件人 zhanggangb@yonyou.com 发送时间 2014年12月8日 15:48         --U9表数据清理脚本(非业务数据表,可考虑通过执行脚本删除) 1.删除无用调度信息 步骤一:创建清理Job存储过程 IF EXISTS(SELECT*FROM sys.objects WHERE object_id=OBJECT_ID(N'[dbo].[P_CleanJob]')AND type in(N'P',N'PC')) DROP PROCEDURE[dbo].[P_CleanJob] GO create procedure[dbo].[P_CleanJob] as begin          declare @lastMonth as datetime set @lastMonth=DATEADD("Month",-1,GETDATE())          --保留近一个月的数据          delete UBF_Job_Request_Trl where ID in(select top(100)id from UBF_Job_Request where state=2 and CreatedOn<@lastMonth) delete top(100)from UBF_Job_Request where state=2 and CreatedOn<@lastMonth while @@ROWCOUNT> 0 begin                    delete UBF_Job_Request_Trl where ID  in(select top(100)id from UBF_Job_Request where state=2 and CreatedOn<@lastMonth)                    delete top(100)from UBF_Job_Request where state=2 and CreatedOn<@lastMonth          end end 步骤二:执行清理Job存储过程(晚上执行) exec P_CleanJob     2.删除用户操作日志(保留一个月) while (1>0) begin DELETE top (100) FROM UBF_Portal_OperationRecord WHERE OccurrenceTime<DATEADD(month,-1,GETDATE()) end     3.系统敏感日志清理(保留一个月) --注意: 日期自己看时间来调整。 delete top(100)  from ubf_md_attributelog where ID in (select ID from  ubf_md_attributelog where CreatedOn<='2013-05-10 '  ) while @@ROWCOUNT > 0 begin  delete top(100)  from ubf_md_attributelog where ID in (select ID from  ubf_md_attributelog where CreatedOn<='2013-05-10 '  ) end GO

分布式事务错误及解决配置方式

by 祁宏伟 2014.2.28 11:25
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。MSDTC事务错误及开启方式: System.Transactions.TransactionAbortedException: 已中止事务。 ---> System.Transactions.TransactionPromotionException: 试图提升事务时失败。 ---> System.Data.SqlClient.SqlException: 服务器 'PT09' 上的 MSDTC 不可用。 这种是服务没有开启,一般不会出现,默认是服务启动的。     System.Transactions.TransactionException: 该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 (异常来自 HRESULT:0x8004D025) ---> System.Runtime.InteropServices.COMException: 该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 (异常来自 HRESULT:0x8004D025)          把该勾的都勾上。 3. 应用服务器和数据库服务器最好关闭防火墙,如果开启,请把DTC加入例外.       其它: --如:虚拟机标识重复。每台服务器重装一下DTC就可以了。    

Disable Admin Approval Mode[禁用管理员批准模式]

by 刘红军 2013.1.28 14:58
禁用windows的管理员批准模式 即:每一个加入管理员的成员都是超级管理员
省去了Run as Administrator...
[更多...]

JOB服务启动不了几个原因:

by 祁宏伟 2013.1.17 11:47
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。1.注意看LOG,可能是LOG.可能是错误导致。解决错误。 2.可能是调度中的挂起数据过多导致(启动时要检查挂起的?),用 SELECT * FROM UBF_Job_Request where state=4 3.1 在访问微软的服务器上添加这样一行,可解决系统管理服务启动慢问题。 (其他服务启动慢问题也可以如此方法解决)    U9V25\Portal\ApplicationServer\UFIDA.UBF.SystemManage.ApplicationService.exe.config ------------ <?xml version="1.0" encoding="utf-8" ?> <configuration>   <runtime>     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">       <probing privatePath="Bin;Libs;ReportTool"/>     </assemblyBinding>     <generatePublisherEvidence enabled="false"/>   </runtime>    <appSettings>     <add  key="LicenseLogFile" value="LicenEngine.log"/>     <add  key ="LicenseLogLevel" value ="DEBUG"/>   </appSettings> </configuration> 3.2 http://u9blog/u9blog/post/2012/12/27/启动JobServer报错:在-本地计算机-无法启动-UfApplicationService_21服务。错误-1053-服务没有及时响应启动或控制请求.aspx 可能3.1与3.2一样,均是避免了去访问认证。

权限-动态视图-动态视图增加作用范围(仅报表、仅UI、全部)

by 祁宏伟 2013.1.7 14:11
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。 主题 答复: 关于权限动态视图增加作用范围(仅报表、仅UI、全部) 发件人 刘淑文 收件人 'Huang Shu'; '韩明星'; 'kxl'; qihw@yonyou.com; '邓瑶'; yanfeng@ufida.com; 'wuyg' 发送时间 2012年12月14日 10:21     验证的数据: 用户将数据权限设置在 存储地点实体,如 code in ('A','B'), 库存单据的权限设置成关联实体。 数据权限不影响单据。(ok) 报表可按存储地点过滤出正确数据。(存在一些问题)     程序问题: 是不是bug:角色引用了某一动态视图后,修改动态试图,再查报表,数据权限还是按修改前的视图查的。(再到数据权限保存一下 角色的数据权限才生效) Bug:用户删除某一数据权限的角色后,再查报表还是按原来的数据权限过滤的数据。 库存(数量)报表 数据不正确: 查未审核单据时调用了存储过程。比如"计划入数量"是通过存储过程查询的,设置了数据权限后,查出的数量=0.不设置数据权限,可以从未审核的杂收单中查出计划入数量,大于0,是正确的。     应用方面: 1.报表要设置哪些实体的数据权限问题 具体的每个报表,应该设置哪些实体的数据权限,设置的这些数据权限是否在报表查询中一定会用得到,这个问题对用户来讲设置起来还是挺麻烦的。 比如库存数量报表,涉及以下的实体,异动单据实体都会涉及,但是正确查出这个报表,是否需要设置这么多实体,还是要具体分析的,简单的设置就是把更新异动的数据表全都设置上数据权限。 报表名称 涉及实体 库存数量 UFIDA::U9::InvTrans::InvTotalStatPeriod::StatPeriodLine    UFIDA::U9::InvTrans::Trans::TransLine    UFIDA::U9::InvTrans::WhQoh::WhQoh    UFIDA::U9::InvDoc::MiscRcv::MiscRcvTransL 等异动单据实体     2.数据权限设置后对其他模块的报表的影响 异动单据包括采购收货、销售出库、生产领料等等,这些同时是异动数据,也是业务数据。     如果用户除查库存报表外,还需要查上面提到的业务报表 并且 权限控制 还不一样,这种情况报表处理不了。     综合来看,对具体项目可能通过设置 仅报表生效的数据权限,实现报表权限的需求。 因为上面提到的应用方面问题,用数据权限解决报表权限,是一个 在某些条件下可行的解决方案。         发件人: 祁宏伟 [mailto:qihw@ufida.com.cn] 发送时间: 2012年12月7日 15:18 收件人: 'xyy'; 'kxl' 抄送: '黄枢'; '丁伯超'; chenss1@ufida.com.cn 主题: 关于权限动态视图增加作用范围(仅报表、仅UI、全部)              按 广青项目库存报表查询权限控制  要求.               解决方案: 昨天定方案通过增加 权限动态视图增加作用范围(仅报表、仅UI、全部)来解决。          同时希望能解决数据权限影响后台实体加载导致的数据加载错误。                      因为 PlatformContext.cs 文件没法签入集成流(有前置没完成),所以,暂不提供常量。只用手写字符串:     协同更改:              报表:(KXL关注)                    在进行报表查询之前,在上下文中赋上值:                             PlatformContext.Current["Security_DynamicViewScope"] = "Report";      OQL:(XYY关注)          在OQL缓存处:增加按作用范围进行分开缓存。取作用范围string类型.可为null.               PlatformContext.Current["Security_DynamicViewScope"] ;             注:          考虑到兼容老版本,所以默认情况下,该上下文为null或空串 .            后续增持: 如果在实体上处理,加载退出后要清空,报表目前应该不用。               PlatformContext.Current["Security_DynamicViewScope"] = null ; 同时支持,如果是后台实体关联加载,则可通过. PlatformContext.Current["Security_DynamicViewScope"] = "Entity";  //则不进行权限控制,后续增加。                              参考:权限获取判断逻辑:                                         string scope = PlatformContext.Current["Security_DynamicViewScope"] as string ;                                 if (string.IsNullOrEmpty(scope))                                     audit = new EntityAuthority(info.Read, info.ReadDV);//原权限内容                                 else if (scope == "Report")                                    audit = new EntityAuthority(info.ReadForReport, info.ReadDVForReport); //仅报表权限内容和全范围内容                                 else if (scope == "UI")                                     audit = new EntityAuthority(info.ReadForUI, info.ReadDVForUI); //目前等同于原权限内容                                 else //目前如果传其它状态,权限为null。如 "Entity"                                     audit = EntityAuthority.Empty;                                 break;            

权限-角色-预置全应用查看员角色脚本

by 祁宏伟 2012.12.13 09:31
权限-角色-预置全应用查看员角色脚本 [更多...]

数据权限:关于null的问题一例

by 祁宏伟 2012.11.27 15:05
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。 主题 答复: 两位帮忙看下数据权限的问题,有没有什么解决办法 发件人 黎平 收件人 '祁宏伟'; '熊悦阅' 发送时间 2012年11月27日 15:01     附图:     发件人: 黎平 [mailto:lipingc@ufida.com.cn] 发送时间: 2012年11月27日 14:55 收件人: '祁宏伟'; '熊悦阅' 主题: 答复: 两位帮忙看下数据权限的问题,有没有什么解决办法     多谢二位指导,设置"or ID is null"后,就能够查询到数据了,下面是SQL:     select  A.[RelationItem], A2.[Code] as [ManufacturerCode], A3.[Name] as [ManufacturerName], A2.[ID] as [ManufacturerID], A.[RelationItemVer], A1.[Code] as [RelationItemCode], A1.[Name] as [RelationItemName], A1.[StandardPotency], A1.[StartPotency], A1.[EndPotency], A1.[StandardGrade], A1.[StartGrade], A1.[EndGrade], A1.[IsDualQuantity], A1.[IsVersionQtyControl], A1.[IsGradeControl], A1.[IsPotencyControl], A1.[IsTrademark], A4.[ID] as [SalesUOMID], A4.[Code] as [SaleUOMCode], A5.[Name] as [SaleUOMName], A4.[Round_Precision] as [SaleUOMPrecision], A4.[Round_RoundValue] as [SaleUOMRoundValue], A4.[Round_RoundType] as [SaleUOMRoundType], A6.[ID] as [BaseUOMID], A6.[Code] as [SaleBaseUOMCode], A7.[Name] as [SaleBaseUOMName], A6.[Round_Precision] as [BasePrecision], A6.[Round_RoundValue] as [BaseRoundValue], A6.[Round_RoundType] as [BaseRoundType] from  CBO_ItemRelation as A  inner join CBO_ItemMaster as A1 on (A.[RelationItem] = A1.[ID])  left join [CBO_Supplier] as A2 on (A.[RelationItemTradeMark] = A2.[ID])  left join [CBO_Supplier_Trl] as A3 on (A3.SysMlFlag = 'zh-CN') and (A2.[ID] = A3.[ID])  left join [Base_UOM] as A4 on (A1.[SalesUOM] = A4.[ID])  left join [Base_UOM_Trl] as A5 on (A5.SysMlFlag = 'zh-CN') and (A4.[ID] = A5.[ID])  left join [Base_UOM] as A6 on (A4.[BaseUOM] = A6.[ID])  left join [Base_UOM_Trl] as A7 on (A7.SysMlFlag = 'zh-CN') and (A6.[ID] = A7.[ID])  left join [CBO_SupplierCategory] as A8 on (A2.[Category] = A8.[ID]) where  ((((((((A.[Item] = @item) and (A.[Org] = @Org)) and (A.[ItemRelationType] = 1)) and (A.[Effective_IsEffective] = 1)) and (A.[Effective_EffectiveDate] <= @NowDate)) and (A.[Effective_DisableDate] >= @NowDate)) and (A.[ItemVer] = @ItemVer)) and ((((Left(A2.[Segment1],1) != 'Y') and (A2.[State] = 0)) or (A8.[Segment1] = 99)) or A2.[ID] is null))         发件人: 黎平 [mailto:lipingc@ufida.com.cn] 发送时间: 2012年11月27日 10:22 收件人: '祁宏伟'; '熊悦阅' 主题: 答复: 两位帮忙看下数据权限的问题,有没有什么解决办法     是的     发件人: 祁宏伟 [mailto:qihw@ufida.com.cn] 发送时间: 2012年11月27日 10:19 收件人: '熊悦阅'; '黎平' 主题: 答复: 两位帮忙看下数据权限的问题,有没有什么解决办法     你的意思是不是 这些料品关系数据中的供应商是空,但是拼上条件后,导致这些数据过滤不出来了?     发件人: 熊悦阅 [mailto:xyy@ufsoft.com.cn] 发送时间: 2012年11月27日 10:08 收件人: '黎平'; '祁宏伟' 主题: 答复: 两位帮忙看下数据权限的问题,有没有什么解决办法     你关联了供应商,当然会拼上供应商的权限!     发件人: 黎平 [mailto:lipingc@ufida.com.cn] 发送时间: 2012年11月27日 9:17 收件人: '祁宏伟'; 'U9研发熊悦阅' 主题: 两位帮忙看下数据权限的问题,有没有什么解决办法         供应商实体的权限设置如下图,数据结构中料品关系实体引用了供应商档案,实际数据中料品关系并未录供应商(为空), 现在要对料品关系进行查询,在Select中会返回料品关系.供应商.Name,最终生成的查询SQL的 Where条件中包含了数据权限中设置的条件,以至于查不出任何数据:     最终生成的SQL如下,黄色背景部分为数据权限中设置的条件: select  A.[RelationItem], A2.[Code] as [ManufacturerCode], A3.[Name] as [ManufacturerName], A2.[ID] as [ManufacturerID], A.[RelationItemVer], A1.[Code] as [RelationItemCode],  A1.[Name] as [RelationItemName], A1.[StandardPotency], A1.[StartPotency],  A1.[EndPotency], A1.[StandardGrade], A1.[StartGrade], A1.[EndGrade], A1.[IsDualQuantity],  A1.[IsVersionQtyControl], A1.[IsGradeControl], A1.[IsPotencyControl], A1.[IsTrademark],  A4.[ID] as [SalesUOMID], A4.[Code] as [SaleUOMCode], A5.[Name] as [SaleUOMName],  A4.[Round_Precision] as [SaleUOMPrecision], A4.[Round_RoundValue] as [SaleUOMRoundValue],   A4.[Round_RoundType] as [SaleUOMRoundType], A6.[ID] as [BaseUOMID], A6.[Code] as [SaleBaseUOMCode],   A7.[Name] as [SaleBaseUOMName], A6.[Round_Precision] as [BasePrecision],   A6.[Round_RoundValue] as [BaseRoundValue], A6.[Round_RoundType] as [BaseRoundType]    from  CBO_ItemRelation as A  inner join CBO_ItemMaster as A1 on (A.[RelationItem] = A1.[ID])     left join [CBO_Supplier] as A2 on (A.[RelationItemTradeMark] = A2.[ID])     left join [CBO_Supplier_Trl] as A3 on (A3.SysMlFlag = 'zh-CN') and (A2.[ID] = A3.[ID])     left join [Base_UOM] as A4 on (A1.[SalesUOM] = A4.[ID])     left join [Base_UOM_Trl] as A5 on (A5.SysMlFlag = 'zh-CN') and (A4.[ID] = A5.[ID])     left join [Base_UOM] as A6 on (A4.[BaseUOM] = A6.[ID])     left join [Base_UOM_Trl] as A7 on (A7.SysMlFlag = 'zh-CN') and (A6.[ID] = A7.[ID])     left join [CBO_SupplierCategory] as A8 on (A2.[Category] = A8.[ID])    where  ((((((((A.[Item] = 1001805142264333) and (A.[Org] =1001108250100221)) and (A.[ItemRelationType] = 1))    and (A.[Effective_IsEffective] = 1)) and (A.[Effective_EffectiveDate] <= GETDATE()))    and (A.[Effective_DisableDate] >= GETDATE())) and (A.[ItemVer] = ''))    and (((Left(A2.[Segment1],1) != 'Y') and (A2.[State] = 0)) or (A8.[Segment1] = 99)))         黎平 U9供应链开发部 电话:010-62435796 邮箱:lipingc@ufida.com.cn    

关于客户供应商门户的数据权限问题

by 祁宏伟 2012.8.31 11:36
关于客户门户 供应商门户的数据权限问题
-- [更多...]

反启用模块脚本

by 刘红军 2012.8.10 12:47
反启用模块脚本--支持问题备忘 [更多...]

删除数据管理工具`实体字段维护`新增的字段

by 刘红军 2012.8.9 16:23
删除数据管理工具`实体字段维护`新增的字段--支持问题备忘 [更多...]

数据管理工具 敏感数据 导出脚本

by 刘红军 2012.8.3 08:48
数据管理工具敏感数据导出脚本--支持问题备忘 [更多...]

系统管理-通知-通知管理功能使用详解

by 祁宏伟 2012.6.13 14:29
系统管理-通知-通知管理功能使用详解- [更多...]

权限-权限问题需求收集-权限设计方案

by 祁宏伟 2012.5.25 09:42
权限-权限问题需求收集-权限设计方案 [更多...]

权限--OQL导致权限JOIN不出数据问题

by 祁宏伟 2012.5.17 17:53
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。2012-05-17 --更新: OQL正修正相关问题。等待确认是否解决。 1.6   支持问题:9201201060142  -9201204170090    -重要没有解决的问题。        对销售订单设置权限 :  SaleDepartment.ID = GetCurrentOperatorDept()        在做退回申请单时,拉出货单。出货单中关联了销售订单。导致了最后拼出的SQL如下:         inner join [SM_SOLine] as A71 on (A1.[SOLine] = A71.[ID])         left join [SM_SO] as A72 on (A71.[SO] = A72.[ID])  left join [CBO_Department] as A73 on (A72.[SaleDepartment] = A73.[ID])         where  (A73.[ID] = 2010071009582928)        由于部分出货单没有对应的销售订单,导致此处显示不出数据来。        原因在于:1. inner join 要改成left join . OQL自动拼接成inner join 理由是与SO是组合的1..1-n关系,但由于 SO本身是被外部left join ,所以此处 soline也得 left join 。                      2.  条件中也要写明A73.[ID]为null的可能。部门为null。也就是条件也要改成:             SaleDepartment is null or SaleDepartment   .ID = GetCurrentOperatorDept()

值集值设置权限通用方法

by 马杰 2012.5.11 09:52
值集值设置权限通用方法 [更多...]

权限-权限查询全角色数据完整脚本

by 祁宏伟 2012.3.6 15:39
权限-权限查询全角色数据完整脚本 [更多...]

权限功能-权限预置角色的功能详情

by 祁宏伟 2012.2.23 17:24
权限功能-权限预置角色的功能详情 [更多...]

RecentComments

评论 RSS

Statistics

989 篇文章
0 个单页
589740 条评论
11 次评分
559138 次访问
访问统计开始于 2019年9月14日
平均日访问 8345 次
当前 138 人在线