select下拉控件在IE6中穿透弹层的问题分析

by weiyina 2016.12.20 15:56
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。 远程客户电脑问题截图:       问题描述:先点击某一个节点,在窗口中打开这个界面(带有select控件的界面),然后点击portal首页左上角导航菜单,弹出对应的菜单弹层(如上截图),出现下方界面中带有select控件的元素会穿透到菜单弹层中,客户描述部分电脑上会出现这个问题。       问题分析:自己在本机的portal上执行同样操作,确实没有重现这个问题(本地环境:win7+IE9),远程客户有bug的电脑环境xp+IE8,添加了兼容视图、安全站点。按理说V5.0的portal在IE中执行的都是Quircks 模式,如果有此类问题应该都会出现才对,试了几台其他同学的电脑访问v5.0的portal也没重现,然后又找刚哥要了个远程服务器虚拟机中刚好有xp系统的环境,里面的IE好像也是IE8,测试依然没重现此问题,网上查询了下资料,发现只有IE6内核的浏览器才会出现这个问题,于是乎想在IE6中验证这个问题,可是现在IE6几乎都绝了。网上下载了一个IEtester,其中含有多个不同IE版本(备注:很多人说这软件测试的效果和原版IE6还是有一定出入),所幸做了一个小demo确实是重现了这个问题,demo的效果截图如下: IE6: IE8:  chrome: HTML:    Css:   Demo中我试图将select的z-index值设置低于弹层的z-index值,IE6中依然是select会穿透半透明层,关于z-index的定义w3c标准中是这样说的,见下方截图(这个属性仅配合定位元素才生效): 那么,再给select加上定位且设置层级小于弹层的z-index值试试?结果IE6中依然会穿透…… 这里又查询了select的定位,发现select是一个窗口控件,截图如下: 它既然是一个窗口控件,我的理解是类似于alert提示框或者window.open()显示的这种窗体控件,默认都是显示在最上方的,所以在IE6中,浏览器解析的时候自动提升了它的层级且优先级是高于我们通过div来模拟的弹窗,然而查询了一些资料后,发现网上高人还是挺多的,看到了一个关于用嵌套空iframe来解决select穿透的解决方案,带着试试的态度在demo中尝试了下,ok!~此方法是可行的。 Demo要达到的层级效果是:div.popup(div.box1为弹窗中实际需要被操作的元素,不能被遮挡)>  p.aaa  >iframe >select,请参照下方截图:   HTML:    css:     demo截图(IE6):   图中select被遮挡在iframe下方没有显示出来,若设置关闭弹窗的同时移除iframe,select即可正常显示,加载弹层的同时并创建iframe即可遮挡,当然这种方式就满足了我们实际要解决的问题。 Portal中在二级菜单被点击的时候,添加代码如下:   点击弹出三、四级菜单界面及添加iframe后的HTML结构:       问题总结:select下拉控件在IE6中会穿透自写div弹层,可添加空iframe需设置定位并添加z-index,上图中div.item-list即当前菜单弹层,它也是通过定位并设置z-index值高于iframe的层级值,只要保证当前弹层区域下方有一个同它一样大小的空iframe层即可阻止弹层下方有select控件的元素穿透出来,亲测这个bug只是在IE6中会有,其他浏览器下都是正常渲染~   疑问:问题的最后,还有点没搞懂的是为啥客户的电脑是IE8但是呈现的bug现象却是IE6中才会出现的…

记录一个UBFStudio的BUG

by 祁宏伟 2013.4.26 16:56
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。 当在 Componet目录的App下放一个 随意的 .xml 文件,会导致 UBFStudio 打不开,直接报错退出。 原因:   > UFSoft.UBF.MD.Controls.MDExplorer.dll!UFSoft.UBF.MD.Controls.SimpleAssembly.LoadFrom(string fileName = "D:\\View2.5\\U9Product\\U9.VOB.Product.Component\\App\\CAChangeVoucherNum.sub.xml") 行54 + 0x3 字节 C#  UFSoft.UBF.MD.Controls.MDExplorer.dll!UFSoft.UBF.MD.Controls.SimpleRefelectService.Load() 行67 + 0x9 字节 C#  UFSoft.UBF.MD.Explorer.dll!UFSoft.UBF.MD.Explorer.MDExplorer.LoadAssemblyIndexMethod(object state = null) 行46 + 0x14 字节 C#       public static SimpleAssembly LoadFrom(string fileName)        {            XmlDocument doc = new XmlDocument();            doc.Load(fileName);            XmlNode assemblyNode = doc.DocumentElement.SelectSingleNode("assembly/name");            SimpleAssembly assembly = new SimpleAssembly(assemblyNode.InnerXml, null);            assembly.FileName = fileName;            XmlNodeList memberNodes = doc.DocumentElement.SelectNodes("members/member");            Dictionary<string, SimpleNameSpace> nameSpaceDic = new Dictionary<string, SimpleNameSpace>();            Dictionary<string, SimpleClass> clsDic = new Dictionary<string, SimpleClass>();    未处理 System.NullReferenceException  Message="未将对象引用设置到对象的实例。"  Source="UFSoft.UBF.MD.Controls.MDExplorer"  StackTrace:       在 UFSoft.UBF.MD.Controls.SimpleAssembly.LoadFrom(String fileName) 位置 d:\CCViews\UBFCode_INV\U9.VOB.UBF\ADF\Model\Metadata\UFSoft.UBF.MD.Controls.MDExplorer\SimpleRefelect\SimpleAssembly.cs:行号 54       在 UFSoft.UBF.MD.Controls.SimpleRefelectService.Load() 位置 d:\CCViews\UBFCode_INV\U9.VOB.UBF\ADF\Model\Metadata\UFSoft.UBF.MD.Controls.MDExplorer\SimpleRefelect\SimpleRefelectService.cs:行号 67       在 UFSoft.UBF.MD.Explorer.MDExplorer.LoadAssemblyIndexMethod(Object state) 位置 d:\CCViews\UBFCode_INV\U9.VOB.UBF\ADF\Model\Metadata\UFSoft.UBF.MD.Explorer\MDExplorer.cs:行号 46       在 System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)       在 System.Threading.ExecutionContext.runTryCode(Object userData)       在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)       在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)       在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)       在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)        public void Load()        {            if (!_loaded)            {                lock (_lock)                {                    if (!_loaded)                    {                        if (_assemblies == null)                            _assemblies = new List<SimpleAssembly>();                        if (_visiter == null)                            _visiter = new SimpleElementVisterBase();                           foreach (string file in GetAssemblyFileList())                        {                            SimpleAssembly assembly = SimpleAssembly.LoadFrom(file);                            _assemblies.Add(assembly);                        }                        _loaded = true;                    }                }            }        }

oql解析问题:不要在on语句中引用实体

by ldf 2012.12.13 09:31

关于报表取枚举名称clr函数GetEnumName报错问题

by 马杰 2012.8.17 14:45
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。    如果报错为F_GetEnumName,Error 那么确定为加载的枚举项中存在多语言信息丢失的问题,需要补下多语言信息   注意:不是当前的多语项丢失,而在存在丢失的项所以报错!          string retval = null;            try            {                EnumValueStoreInstance evsi = DataStore.ExtEnumValueTable;                retval = (string)evsi.GetDisplayName( Code, Evalue, SysMLFlag);                return retval;            }            catch (Exception e)            {                return "<<F_GetEnumName,Error>>";            }   补上杨砚的分析: private void LoadTypeData(){    this.EnumTypeList= new SortedList<string, EnumTypeInfo>(0xbb8, StringComparer.OrdinalIgnoreCase);    this.BlackList= new SortedList<string, long>();    try    {        this.EnumValueCount= 0;        using (SqlConnection connection = new SqlConnection(Constant.ConnStr))        {            connection.Open();            SqlDataReader reader = new SqlCommand("select b.Code, b.ID , COUNT(*) as c  from UBF_Sys_ExtEnumValue as a  left join UBF_Sys_ExtEnumType as b on ( a.ExtEnumType = b.ID )  group by b.Code ,b.ID order by Code", connection).ExecuteReader();            using (reader)            {                while (reader.Read())                {                    if (!reader.IsDBNull(0))                    {                        string key = reader.GetString(0);                        EnumTypeInfo info = new EnumTypeInfo();                        info.ID = reader.GetInt64(1);                        info.Count = reader.GetInt32(2);                        this.EnumTypeList.Add(key, info);                        if (info.Count >= 200)                        {                            this.BlackList.Add(key, info.ID);                            BlackEnumCacheUnit unit = new BlackEnumCacheUnit();                            if (this._BlackEnumValueCache == null)                            {                                this._BlackEnumValueCache = new SortedDictionary<long, BlackEnumCacheUnit>();                            }                            this._BlackEnumValueCache.Add(info.ID, unit);                        }                        else                        {                            this.EnumValueCount += info.Count;                        }                    }                }            }        }    }上面标黄色部分的代码,是取出所有枚举类型的枚举项个数。 这段代码是根据上一步得出的个数,一次性加载后,逐一遍历枚举项。因此在执行F_GetEnumName(xxx,’5141’) 取5141这项时空引用,而是中间某一项为空,导致空引用异常。客户现场没办法调试,猜测解决。解决之后,仔细看了看杨历发的邮件,问题差不多,但也有不同,之前邮件说的是出错的那项枚举信息为空,而实际上只要有空值,都可能发生异常。主要是因为一次性加载。  

权限--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.3.31 10:16
参照多选的方案:
参照支持直接传入实现多选: _refInputCtrl.AddParams("IsMultiRefTag", true);
同时,支持在ContextChange事件中获取多选结果集的DataTable.
this._refInputCtrl.GetReturnValuesTable();
[更多...]

权限接口-数据权限开关

by 祁宏伟 2012.1.5 12:18
接口名: UFSoft.UBF.View.Query.QueryCompiler.DisableSecurity [更多...]

U9 系统字段 修改人与修改时间 所带来的问题

by 祁宏伟 2011.12.27 11:18
U9系统字段 创建人,创建时间,修改人,修改时间都是由平台直接维护的,只要实体变动,就会将当前上下文的UserName 更改上去。
[更多...]

UI开发规范之UIAction与动作权限控制原理与规范

by 祁宏伟 2011.12.7 15:04
UI开发规范之UIAction与动作权限控制原理与规范 [更多...]

UI加载数据

by pkn 2011.11.25 16:52
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。201111090066   加载头行数据,使用如下写法                       this.CommonAction.Load(model.SaleInvoiceHead);                this.CommonAction.Load(model.SaleInvoiceHead_SaleInvoiceLine);                this.CommonAction.Load(model.SaleInvoiceHead_SaleTaxInvoiceLine);   加载后,发现model.SaleInvoiceHead_SaleInvoiceLine和model.SaleInvoiceHead_SaleTaxInvoiceLine有大量数据, 没有按单头过滤,加载了数据库中所有的行记录,导致效率问题。   正确的写法 this.CommonAction.Load(model.SaleInvoiceHead, model.SaleInvoiceHead_SaleInvoiceLine, model.SaleInvoiceHead_SaleTaxInvoiceLine);               

权限-数据权限视图设置的注意事项

by 祁宏伟 2011.11.4 15:00
权限-数据权限视图设置的注意事项 --相应问题--目前不好解决。
客开人员得新发布 权限丢失 垃圾数据
[更多...]

UI控件编程-其它控件问题与解答集--望无解答问题知晓者评论回复

by 祁宏伟 2011.11.4 11:50
UI控件 编程 问题 解答 [更多...]

U9---平台测试存在小问题收集

by chenss1 2011.11.1 13:53
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。1.一个用户绑定两个不同组织(相同名称,不同编码)如果用户特定选取0000全产品的组织登陆,实际是进入了000全产品的组织(通过赋予用户不同的权限,只能在进入主页,再切换组织才能进入0000全产品组织.) 2.在团队协同中,当某个管理员建立了一个公告后,授权给其他角色观看,用其他角色登录后,点击授权的角色列表,由于没有权限,不应该能打开(只有创建协同区的角色才有权修改邮箱等,或者每个角色只能修改自己的邮箱。),此处却可以打开,但是无显示。 3.C1角色在应用中原本开启了应收管理菜单访问权限,后期修改(通过覆盖的形式,非新增,非删除)为总账的菜单权限。再次登录S1用户,S2用户。理论上S1,S2此时只能访问总账的菜单,但是发现两用户仍然能访问应收管理的菜单。 分析:在覆盖的时候,数据库中没有更新彻底,存在冗余的权限数据? 4.料品下的图片不受下发参数(可修改)的限制 5.ea登录,在组织机构节点下选定某一组织(用户多的为宜)如:(之前已有40条),批量添加用户,翻页选取某个用户,添加后,该组织框架中显示的用户小于40条。  6.某角色开启某一模块的菜单权限,已经把其他关联的用户删除,删除该角色的时候报错,提示已经被引用。金盘无出现此情况。(是否跟之前的删除角色后,动态视图不可删除有直接联系。) 7.销售分销中的标准出货,原本当输入 本次出货数量1会自动联动数量和计价数量两项。但是当把交易中的本次出货数量1扩展到行页签上来的时候,输入本次出货数量1,计价数量会联动,而数量却没没有联动起来。切到交易页签再切回来。数量的值就可发生联动? 8. 供应商门户管理员,授予了某用户个性化报表的权限,添加后,在添加角色管理中仍能看到个性化报表的权限(V2.0SP1)。供应商门户组织用户的导出报表的权限一经删除便不可再次添加(V2.1SP1)。客户应该同上理。   9.动作权限下->基础设置->料品->进行保存/放弃等操作.理论上在动作权限查询时出现一列。即:表单名称:料品 动作:保存 执行:拒绝.  但设置保存后,其会出现三列表单:料品,料品图片,料品状态 其权限都为拒绝。(之前改动表单后没有更新?)   10.总账下的参数设置,在表单权限中找不到?属性权限查询详细查询会出现实体名称字段没有显示。属性权限查询当角色未关联上任何用户时,直接查询不到。需要点击 查询角色明细授权按钮 才可查询,按钮名称是否应该修改?   11.一个金盘的BUG:导出报表权限角色的应用为基础设置,当一用户绑定其他业务的系统管理员时(如:总账管理员,销售分销管理员)。本身理论不存在开启基础设置的菜单模块。但是绑定导出报表权限(系统默认预置角色)角色后,该用户便可拥有开启基础设置的菜单权限(用户自己新增的角色开启相应应用没有出现如上情况,正常.)。原因:导出报表权限预置的基础设置的权限为:系统管理员(Type=5)而并非普通用户、目前已经通过修改,并检验了导出报表权限不受脚本的影响,验证PASS。           已解决   12.CSS1(全产品-新闻撰稿权限),CSS2(全产品-新闻审核权限),CSS4(全产品无权限/集团公司-新闻撰稿权限),CSS5(集团公司-审核权限)。用例:1:CSS1撰稿-CSS2发布 PASS 2:CSS1撰稿 CSS5发布 CSS2 撤销 PASS 3.CSS4撰稿(切换组织) CSS1审核 CSS5撤销 ERROR  用例3发现CSS4在切换组织时,集团公司没有发布撤销的权限,但是在全产品中,由于新闻版块在新建时,把管理员权限赋给了CSS4,且再全产品中无角色的限制,存在BUG 使得用户在切换组织后仍可发布撤销新闻。解决办法:在ea中通过跨组织角色分配可限制。不足:当某个用户绑定多个组织时,劳动量就增加了,且没有达到ea的统筹管理功能,反而是抑制某个用户权限而存在。目前没有好的解决办法。   13.团队协同下的成员管理,当用户添加成员数据超出一页时,在添加完成后,保存之前点击列表的下一页,列表会出现错误。   14.团队协同下,新增日历,添加日历的内容,当内容超过一张列表时,点选后几页日历的内容,打开后会显示第一页第一行日历事项的内容。   15.协同区成员角色维护  给协同区管理员角色添加用户时 ,搜索不可用。   16.团队协同下,跨组织切换,报错。   17.料品A图片为A1,下发到别的组织后,修改图片为A2,再次回原组织,A的图片也变为A2,打开图片编辑,仍然显示为A1。(同一IE访问切换组织页签的时候出现)   18.生产环境新装,补丁升级引擎中的补丁列表时测试环境上已经安装的?(不是生产环境安装的?)

关于无法将类型为“xxx”的对象强制转换为类型“xxx” (前后是相同对象)......

by 李国强 2011.10.31 10:03
关于无法将类型为“xxx”的对象强制转换为类型“xxx” (前后是相同对象) [更多...]

UI控件编程-Grid开发遇到的问题与解答

by 祁宏伟 2011.10.27 21:30
UI控件 编程 Grid 使用Grid开发遇到的问题与解答 [更多...]

通知管理的升级问题

by 祁宏伟 2011.10.18 10:01
通知管理的升级问题:
实体事件并不是在模型上设计的,而是在发布生成脚本时自动产生的GUID.每次都会变。
[更多...]

服务器日期时间格式设定带来的问题

by tyg 2011.9.28 16:12
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。解决支持问题9201107140238时发现,BE上有个日期字段,数据库里存的是"2011-07-15 09:7:30", 界面显示的是"2011-07-15 09:07:30",工作流审核时得到的是"2011-07-15 09:7:30"。 Portal和Job引擎格式一致,为”HH:m:ss”; 工作流引擎则未指定格式,使用本机默认格式为:”H:mm:ss”。   工作流审核时,DateTime.ToString() 和数据中保存的字符串判等,认为不相等,因此报错。          我怀疑是下面这两个文件设置了时间格式(System.Globalization.CultureInfo)          CCViews\UBFCode_INV\U9.VOB.UBF\ADF\UI\NewPortal\UFSoft.UBF.UI.Portal\UI\PageBase.cs CCViews\UBFCode_INV\U9.VOB.UBF\ADF\Analysis\Filter\UFSoft.UBF.Report.Filter.FilterWebControl\Pages\BasePage.cs          可能MailService没有设置默认时间格式。          Portal和Job引擎设置明确的默认格式是可取的,工作流引擎也应保持一致。   前台展示的时间格式是在登陆语言里设置的,默认为”HH:mm:ss”, 和Portal、Job引擎又不同。 我觉得比较靠谱的是Portal、Job、MailService 三者默认情况下都应该一致。          支持问题本身已经解决了,就是把数据库里的字符串转化为时间,两个时间进行判等。 撞一次鬼认倒霉 但是前几天在解决另一个客户问题时发现,很多模块都报错:“从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值” 而这些代码有财务的,有成本的,有各个部门的,都几百年没改过。共性是在创建日期参数时,画蛇添足的ToString() new OqlParam("param3",UFIDA.U9.Base.Context.LoginDate.ToString() 按默认格式转化成字串啊,不使用工作流时没有问题,使用工作流时一旦服务器设置了不同的日期时间格式就废了。 类似的坑应该还有许多。

PDM导U9的接口问题再次出现

by 祁宏伟 2011.9.21 08:56
PDM导U9的接口问题再次出现,接口,ISV [更多...]

持久化加载数据的返回NULL还是报异常

by 祁宏伟 2011.9.15 19:38
持久化加载数据的返回NULL还是报异常--权限问题导致的开发代码问题。 [更多...]

参照携带返回的一个问题--参照内容带特殊字符

by 祁宏伟 2011.9.7 15:17
参照携带返回的一个问题-参照内容带特殊字符 [更多...]

RecentComments

评论 RSS

Statistics

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