点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我们正在使用使用Java的Crystal Reports-Java报表组件(JRC)的基于服务器的报表查看器替换原来的Crystal Report Viewer(以前是在本地运行的Visual Basic应用程序)。 不幸的是,某些以前可以运行的报告现在在网页中返回数据库连接器错误。
我们的记录选择公式为:
{eMAR_order_data.FACILITY} = {?FacilityID}和{eMAR_order_data.PATID} = {?ClientID},并且(如果{?EpisodeNumber}从" 1"到" 999999",则{eMAR_order_data.EPISODE_NUMBER} = ToNumber({? EpisodeNumber}),否则,如果{?EpisodeNumber} =" ALLOUTPATIENT",则{eMAR_order_data.tx_setting_code} =" O",如果{?EpisodeNumber} =" ALL",则1 = 1)和{eMAR_order_data.order_start_date} <= {?OrdersActiveThruDate} 和{eMAR_order_data.order_stop_eff_date}> = {?OrdersActiveFromDate}和(如果{?OrderTypes}中的{@OrderTypes>""然后{@OrderTypePacked})和(如果{?HideOrdersEnabled} =" Y",则{eMAR_order_data.hide_order_code} <>" Y",否则,如果{?HideOrdersEnabled} <>" Y",则1 = 1)和((如果{?VerifyOrderReg} =" 1",则{eMAR_order_data.rou_prn_other_code} <>" STAT"和{eMAR_order_data.pharmacy_verified_code} <>" N")或(如果{?VerifyOrderReg} <>" 1",则{eMAR_order_data.rou_prn_other_code} <>" STAT")或(如果{?VerifyOrderRegSTAT} =" 1",则{eMAR_order_data.rou_prn_other_code} =" STAT "和{eMAR_order_data.pharmacy_ver ified_code} <>" N")或(如果是{?VerifyOrderRegSTAT} <>" 1",则{eMAR_order_data.rou_prn_other_code} =" STAT"))
如果?EpisodeNumber是包含数字值的字符串,则此方法运行良好。 但是,如果字符串包含" ALL"或" ALLOUTPATIENT",则报告将产生"意外的数据库连接器错误"。
我玩过唱片选择公式,并替换了:
如果{?EpisodeNumber}从" 1"到" 999999",则{eMAR_order_data.EPISODE_NUMBER} = ToNumber({?EpisodeNumber})否则,如果{?EpisodeNumber} =" ALLOUTPATIENT",则{eMAR_order_data.tx_setting_code} =" O" 否则,如果{?EpisodeNumber} =" ALL",则1 = 1
与
如果{?EpisodeNumber} =" ALL",则1 = 1,否则,如果{?EpisodeNumber} =" ALLOUTPATIENT",则{eMAR_order_data.tx_setting_code} =" O",如果{?EpisodeNumber}在" 1"至" 999999" 然后{eMAR_order_data.EPISODE_NUMBER} = ToNumber({?EpisodeNumber})
这个新公式很好用。 我的问题是:为什么? 我们还有其他报告,我们也知道这些报告在以前运行良好的情况下也会失败。 由于Crystal用于临时报告,因此这可能会影响数百个报告。 有没有办法确定某种语法是否不适用于Java并识别那些报告?
我们正在为数据后端连接到Intersystems Cache 2017数据库。
您好,布莱恩,
我没有适合您的答案,但我已向开发人员发送了请求,以查看他们是否有想法。 我确实知道Java引擎的CR是CR引擎的完整重写版本。 您在COM VB应用程序中使用的CR引擎是用C/C ++编写的,而在CR for Java中使用的是纯Java。 因此,翻译中可能会遗漏一些东西。
我会让你知道我从开发人员那里听到的信息。
Shawn
其他人都有这个吗? 问题? 我至少在两份报告中对此有所体会。 这会破坏某些报告,因为返回的数据量难以管理。 我可以通过编程寻找这种模式吗? 我们遇到的问题是,它在Crystal Report Developer版本14中只能以一种方式工作,但是在使用JRC进行查看时,其行为会有所不同。
Hi Brian,
Dev尝试过 复制问题,仅使用常规公式(无记录选择)时无法复制。 我们还尝试对SQL Server数据库(带有Xtreme示例数据库)使用记录选择公式。 我们使用公式:
如果{?EpisodeNumber}在" 1"到" 999999"中,则为false 否则,如果{?EpisodeNumber} =" ALLOUTPATIENT",则为true 否则,如果{?EpisodeNumber} =" ALL",则为true
其中EpisodeNumber是带有四个可能值" All"," ALLOUTPATIENT"," 1"和" 2"的列表的参数。
我们无法复制该问题-可能是特定于您正在使用的数据库。 您可以针对SQL Server数据库进行测试吗?
Shawn
感谢您的回复。 您是否预计何时会收到开发人员的反馈(这几天或几周)?
嗨,布莱恩,
感谢您所做的所有工作 您要复制它。 我收到了报告,并能够解决问题并将报告传递给开发人员。 当我得到它时,我将传递他们的答复。
Shawn
我已经在SQL Server中重新创建了此问题。 我已经将xtreme.mdb Access数据导入到SQL Server中以创建一个xtreme数据库。 我仅使用"订单"表创建报告。 我有"记录选择公式"的两种变体,下面是Crystal Reports版本14.0.2.34和Java Reporting Components生成的SQL查询。 注意,对于Crystal Reports中的相同值,查询是相同的,但是Java Reporting Components完全省略了SQLEpisodeNumber1.rpt中EpisodeNumber值" ALL"和" ALLOUTPATIENT"的WHERE子句。 这种差异导致大量数据从服务器传输到客户端,然后在客户端进行过滤。 查看器的以前的Visual Basic版本生成的SQL像Crystal Reports,而不是Java Reporting Components。
我们认为缺少WHERE子句和所导致的大查询(如果没有WHERE子句,我们的实际报告将联接多个表并可能生成数百万行)是导致数据库连接器错误的原因。
是否有一种方法可以解决此问题,以便由JRC生成WHERE子句,或者准确地确定JRC何时不生成WHERE子句,因此我们可以帮助确定客户编写的报告将失败或现在很长 运行时间是否取决于初始查询生成的数据量?
我无法附加实际报告(上面的插入文件按钮仅允许jpg等)。 我如何将这些报告发送给您,以便您自己查看结果?
谢谢
布莱恩
一周热门 更多>