实用云,提供最全最实时的云市场资讯

手机站:/m

金山云_数据库bit_12月免费

时间:2021-09-08 16:02编辑:实用云来源:实用云当前位置:主页 > 云数据库 >

你知道JavaScript是面向对象的(基于原型)吗?你知道JavaScript中有一个instanceof操作符(提醒你Java等等)吗?你当然知道,直到昨天我还以为不值得写博客,但是,在我直接从SAP调试了一些UI5代码之后,情况发生了变化…

假设我们已经将对某个UI5控件的引用保存在JavaScript变量中,并希望编写基于所引用控件类型的不同行为的代码。这是我在CRM我的联系人应用程序中发现的:

我假设

第一个条件实际上是检查sap.m.DatePicker控件第二个条件是检查sap.m.Select控件第三个条件是检查sap.m.Input控件第四个条件是检查sap.m.RadioButton或sap.m.CheckBox控件

但是,大数据前景如何,条件的实现方式很容易出错。另外,我会降低代码的可维护性。为什么?

首先,以上if的顺序非常重要。例如,如果你想切换第3个和第1个条件,那么你就实现了一个不错的bug(或者特性?),因为sap.m.Input和sap.m.DatePicker都继承自sap.m.InbutBase,因此它们具有value属性和相应的getValue()方法。换句话说:sap.m.DatePicker控件永远不会命中第三个条件,因为第一个条件总是命中。所以顺序是非常重要的。

第二,上面的代码有一个可怕的错误,必须存在相当长的时间-我将在几秒钟内证明这一点!但首先是从用户角度来看的错误:

我们最近在Fiori 2 FLP(内部部署)中从SAP升级到了最新的My Contacts应用程序:

启动应用程序时,只需从主列表中选择一个联系人,然后按编辑按钮,或者只需创建一个新联系人。这将引导您进入"编辑/创建"窗体/视图:

最后按save并查看发生了什么(如果您在不更改任何内容的情况下添加现有的contact press save,您将非常惊讶发生了什么):

因为您可以看到几乎所有字段都被清除了!是的,这甚至发生在您在编辑模式下的现有联系人,并按保存,甚至没有改变任何东西!嗯…现在连必填字段Last Name都是空的,后端已经接受了空的必填字段/值。在我看来这一点都不对!甚至没有某种前端验证…我可以用一些其他的发现(即与OData、数据绑定等相关的发现)继续计算,但是我们不要说太远…

但是为什么这些字段被清除了呢?这是上面看到的UI5代码中的一个bug。现在让我们从开发人员的角度来看这个bug:

在S4中。控制器.js私有方法_fillNewObject行799具有以下代码n(基本上与上面相同):

因此代码正在检查控件是否具有API方法getSelectedKey,然后尝试调用此方法。我们假设开发人员只希望在sap.m.Select控件的情况下执行此代码(如上所述)。在新版本的SAPUI5中,对此类控件执行的检查/检测容易出错。

在UI5版本1.28.43中,控件sap.m.Input没有名为selectedKey的属性。但是,在UI5的更新版本(如1.44.13)中,sap.m.Input控件突然有一个属性selectedKey(很可能是自动建议功能…)。因此,轻云,edit视图中的所有输入字段都会命中上面代码示例中的第二个if语句,并最终通过调用getSelectedKey()获得新值。但是,这将返回一个空字符串作为"新值",这也是清除所有输入字段的最终原因。所有这些都是因为开发人员试图通过检查某个属性的存在来检测控件,而这是一个糟糕的检查!它完全失败了!在chromedev工具中,您可以看到firstName输入字段输入了(错误的)if块。这是我向你承诺的证明的第一部分。

那么我们能从中学到什么呢?好吧,不要检查是否存在派生UI5控件的类型/类的属性/方法。如何才能做得更好?有多种方法,我更喜欢这里的方法:

所以使用instanceof操作符可以帮助我们。对我来说,代码更易于阅读,具有更好的可维护性,并且使注释毫无用处(因此我删除了它们)。此外,我还添加了花括号

现在最棒的部分是:

UI5中sap.m.Input的相应变化打破了我的联系人应用程序,大数据分析是什么,现在已经有好几个月了,tnrt新零售企业应用中心,请看github上的相应变化。从2016年10月14日开始,这个问题今天仍然存在于我的联系人应用程序中——这是我向你承诺的证明的第二部分!我的一些同事独立提出了这样一个问题:"如果尚未解决/检测到这样的问题,那么除了我们之外,云端云服务器,还有多少人实际使用CRM my Contacts应用程序?"这不是个好问题吗?此外,我想知道其他CRM应用程序中是否存在类似的问题-这让我有些头痛…

当然,我会为此创建一个注释,我会让您知道结果。我相信每个人都会受到这个问题的影响-或者至少有5个人使用我的联系人应用程序:p

编辑(2017年6月29日):2017年6月23日发布了一个说明,解决了上面提到的bug

上一篇网站建设_腾讯企业邮箱mx设置_价格

下一篇金山云_中国企业邮箱排名_年度促销

世界之最排行

世界之最精选