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

2020-09-20 11:19发布

         点击此处--->   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运行时。 如果所有报告都提示输入参数,我将无法执行此操作。

谢谢,尼尔

         点击此处--->   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
1楼 · 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)

梦想连接
2楼-- · 2020-09-20 11:54

唐,我看了你的例子,但是它似乎没有处理一系列值。 从我从V13升级到V22之前,上面显示的代码至少已经工作了4-5年。 设置单个值可以很好地工作-在1插入的情况下执行代码,并且将单个值分配给参数-不会出现提示。 添加多个值后,将无法识别它们,并显示提示。 在新版本之前,该代码曾经可以使用。

hengyuye
3楼-- · 2020-09-20 11:41

嗨,尼尔,

是,参数流已再次更改。 我编写了一个测试应用程序,该应用程序具有一个下拉列表以获取参数及其值等。

how-to- 视觉工作室的晶体报告中的参数

进行一些更改,看看它是否适合您设置值。

另外,根据课程类型,数据库连接可能无法正常工作,从而导致参数失败。

在连接到SP之前必须设置参数值,并且在获取动态值列表之前必须设置DB连接。

一周热门 更多>