报告可选提示不再起作用。

2020-09-20 11:19发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)几年前,在以前版本的Crysta...

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

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


几年前,在以前版本的Crystal Reports中,可选提示无法正常工作,我不得不将值设置为零并对此进行测试,而不是使用HasValue函数。 我最近升级到v22,现在发现我的所有带有支持值列表的参数的报告都在提示用户输入值,即使列表中包含值也是如此。

此例程已经使用了几年,用于将值列表设置为参数:

公共子ApplyIDS()
         Dim pdv作为ParameterDiscreteValue
         使用_parameter.CurrentValues
             。明确()
             选择案例_IDs.Count
                 案例0
                     如果为零空参数则
                         Report.SetParameterValue(_parameter.ParameterFieldName,0)
                     其他
                         .IsNoValue =真
                     万一
                 情况1
                     如果_parameter.ParameterType = CrystalDecisions.Shared.ParameterType.StoreProcedureParameter然后
                         Report.SetParameterValue(_parameter.ParameterFieldName,_IDs(0))
                     ElseIf _parameter.ParameterType = CrystalDecisions.Shared.ParameterType.ReportParameter然后
                         SetCrystalParam(Me.Report,_parameter.ParameterFieldName,_IDs(0))
                     万一
                 其他情况
                     对于每个paramValue作为_ID中的Int32
                         pdv = .AddValue(paramValue)
                     下一个
             结束选择
         结束于
     结束子
 

其他案件是被执行的案件。 退出之后,我可以看到所讨论的参数具有当前值列表。 有问题的报告使用以下代码检查参数:

(((((?MICID} = 0)和hasvalue({?MICShareID})和{vwMICSharesForRedemption.MSID} = {?MICShareID})
 或({vwMICSharesForRedemption.MICID} = {?MICID})
     和({vwMICSharesForRedemption.TransferCertificateRequired} = true
          或{vwMICSharesForRedemption.RedemptionCertificateRequired} = true))
 

在此报告中,MICID通常为零,并且上述代码设置了MICShareID的列表。 从最新版本开始,所有使用此技术的报告现在都忽略已设置的值列表,并提示输入值列表。 在v13和v22之间发生了什么变化?

我有点绝望,因为我需要发布版本,并且打算将所有用户升级到最新的v22运行时。 如果所有报告都提示输入参数,我将无法执行此操作。

谢谢,尼尔

3条回答
Cikesha
2020-09-20 12:05 .采纳回答

唐,我发现了一种解决方法,尽管我不知道它为什么起作用。 基本上," else"代码会根据我认为您以前编写且已改编的例程替换为新函数:

 SetCrystalParamList(Integer)(Me.Report,_parameter.ParameterFieldName,_IDs)
 

新功能是这样的:

 Friend Sub SetCrystalParamList(Of E)(rpt如CrystalDecisions.CrystalReports.Engine.ReportDocument,parameterName如字符串,listOfValues如IEnumerable(Of E))
         Dim ParCount As Integer = rpt.DataDefinition.ParameterFields.Count
         Dim crDiscreteValue作为CrystalDecisions.Shared.ParameterDiscreteValue
         对于每个crParamField作为rpt.DataDefinition.ParameterFields中的CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition
             如果crParamField.Name.ToLower()= parameterName.ToLower()否则" @" + crParamField.Name.ToLower()= parameterName.ToLower()然后
                 尝试
                     将myparameterValues调暗为新的CrystalDecisions.Shared.ParameterValues()
                     'myparameterValues.IndexOf(crParamField.Name)
                     对于每个值,如E在listOfValues中
                         crDiscreteValue =新的CrystalDecisions.Shared.ParameterDiscreteValue()
                         crDiscreteValue.Value =值
                         myparameterValues.Add(crDiscreteValue)
                     下一个
                     crParamField.ApplyCurrentValues(myparameterValues)
                     返回
                 异常捕获
                     MessageBox.Show(例如消息)
                     返回
                 结束尝试
             万一
         下一个
     结束子
 
 

这将成功设置值列表并防止出现提示。 为什么这样做有效,但parameter.AddValue()无效,我不知道。

谢谢,尼尔(Neil)

一周热门 更多>