Windows更新KB4284835后,用于删除排序字段的现有代码不再起作用

2020-09-16 23:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在VS2015中使用VS版本13.0.23的CR,我们有一个VB应用程序,可以有选择地从Engine.ReportDocument中删除一个或两个排序字段。 直到上周为止,此方法都运行良好,并且我们能够确定是Windows更新KB4284835引起的。 我会复制我们使用的语法,但似乎以一种奇怪的格式粘贴。

为了描述它,我们将一个Fields对象设置为ReportDocument.ReportClientDocument.DataDefinition.ResultFields。 然后,在其上使用FindField方法返回我们要查找的排序字段。 然后使用DataDefController.SortController,我们使用CanSortOn函数来验证它是一个排序字段,最后,我们使用SortController的.Remove方法,向它提供字段对象。

我们收到的错误是:无效的索引。 (来自HRESULT的异常:0x8002000B(DISP_E_BADINDEX))

如果我硬编码而不是.Remove方法中的字段对象,则它可以工作(但这不是一个好的最终解决方案)。 如果我对排序字段进行迭代以找到合适的索引值,将其存储在变量中并将该变量输入.Remove方法,则它将失败,并出现相同的错误。

所以我非常喜欢""?" 用这个观点。

任何帮助将不胜感激-谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在VS2015中使用VS版本13.0.23的CR,我们有一个VB应用程序,可以有选择地从Engine.ReportDocument中删除一个或两个排序字段。 直到上周为止,此方法都运行良好,并且我们能够确定是Windows更新KB4284835引起的。 我会复制我们使用的语法,但似乎以一种奇怪的格式粘贴。

为了描述它,我们将一个Fields对象设置为ReportDocument.ReportClientDocument.DataDefinition.ResultFields。 然后,在其上使用FindField方法返回我们要查找的排序字段。 然后使用DataDefController.SortController,我们使用CanSortOn函数来验证它是一个排序字段,最后,我们使用SortController的.Remove方法,向它提供字段对象。

我们收到的错误是:无效的索引。 (来自HRESULT的异常:0x8002000B(DISP_E_BADINDEX))

如果我硬编码而不是.Remove方法中的字段对象,则它可以工作(但这不是一个好的最终解决方案)。 如果我对排序字段进行迭代以找到合适的索引值,将其存储在变量中并将该变量输入.Remove方法,则它将失败,并出现相同的错误。

所以我非常喜欢""?" 用这个观点。

任何帮助将不胜感激-谢谢!

付费偷看设置
发送
4条回答
代楠1984
1楼 · 2020-09-16 23:47.采纳回答

嗨,戴夫,

我请研发部门的Soda看看这个变化,他有这样的话:

'删除PCI列以进行排序
 resultFields = xtalReport.ReportClientDocument.DataDefinition.ResultFields
 sortField = resultFields.FindField(" ado.pa_APCI",
 CrFieldDisplayNameTypeEnum.crFieldDisplayNameLong,CeLocale.ceLocaleEnglishUS)
 sortController = xtalReport.ReportClientDocument.DataDefController.SortController
 如果sortController.CanSortOn(sortField)然后
     sortController.Remove(sortField)'<-这行错误
  万一

 的
 高亮sortField是CrystalDecisions.ReportAppServer.DataDefModel.Field,但对于SortController.Remove(object
 排序),输入参数应该是一个排序对象。

 因此,他应该将代码更新为以下内容:
 _sort = sortController.FindSort(sortField)
  如果sortController.CanSortOn(sortField)然后
     sortController.Remove(_sort)'<-这行错误
  万一
 

奇怪的是它曾经起作用,MS KBA打破了它...

谢谢

Don

clever101
2楼-- · 2020-09-16 23:28

嗨,戴夫,

我看过那个KBA,但看不到它将如何影响排序方向....奇怪....

您是否正在使用内置的Window 10 1803?

您可以卸载该KBA吗?

我没有它,如果没有IT小组先确定补丁,我将无法安装补丁。

我们确实进行了一次安全更新,可能导致此KBA受到影响,但它只是为我们的ENUM之一分配了一个值,所以我看不到它将如何影响它...

我将对R&D进行Ping,并让他们看看这篇文章。

单击上方栏上的"代码"按钮,然后粘贴您的代码。

me_for_i
3楼-- · 2020-09-16 23:53

嗨唐,

我的想法完全是:奇怪。 是的,我们正在运行Win101803。是的,当前,我们正在手动卸载该更新(同时尝试使用Windows Update Services处理该更新)。

代码:

'删除PCI列以进行排序
 resultFields = xtalReport.ReportClientDocument.DataDefinition.ResultFields
 sortField = resultFields.FindField(" ado.pa_APCI",CrFieldDisplayNameTypeEnum.crFieldDisplayNameLong,CeLocale.ceLocaleEnglishUS)
 sortController = xtalReport.ReportClientDocument.DataDefController.SortController
 如果sortController.CanSortOn(sortField)然后
    sortController.Remove(sortField)'<-这行错误
 万一
 

在上面,xtalReport是一个打开的CrystalDecisions.CrystalReports.Engine.ReportDocument。

谢谢

戴夫·德拉姆斯塔德

嗨,唐,

谢谢您和苏打水:我测试了它,它可以工作。 不论是否奇怪,我都会接受:)

谢谢

戴夫·德拉姆斯塔德

一周热门 更多>