0

我正在做一个 Java 应用程序,它只需要从业务对象服务器下载预定报告。为了安排我正在使用信息查看的报告,请按以下方式

1) 点击报告 2) 行动 --> 计划 3) 设置重复、格式和目标

然后,该报告具有多个实例,而不是具有零实例的非计划报告。

在代码中,对于我正在使用的单独的计划报告

com.crystaldecisions.sdk.occa.infostore.ISchedulingInfo

IInfoObject ifo = ((IInfoObject) result.get( i ))
ISchedulingInfo sche = ifo.getSchedulingInfo();

这应该提供有关调度的信息吗?但由于某种原因,这会为未计划的报告返回一个对象(不是null,我想它应该如何返回) 。其方法返回的信息(比如 getBeginDate、getEndDate 等)对于这两种类型都是相似的。

我尝试使用SI_CHILDREN > 0过滤报告

SELECT * FROM CI_INFOOBJECTS WHERE SI_PROGID = 'CrystalEnterprise.Webi' "
+ AND SI_CHILDREN > 0  AND SI_PARENTID = " + String.valueOf( privateFolderId )
+ " ORDER BY SI_NAME ASC "

这是过滤预定报告的正确方法吗?

4

2 回答 2

3

所以Webi、Crystal等实现了ISchedulable接口。这意味着您的非实例 InfoObject 将返回一个 ISchedulingInfo,无论它是否已被调度。

如果一个对象被调度,则使用 SI_SCHEDULE_STATUS = 9 (ISchedulingInfo.ScheduleStatus.PENDING) 创建一个实例

然后作业运行 (SI_SCHEDULE_STATUS = 0),或者完成 (SI_SCHEDULE_STATUS=1) 或失败 (SI_SCHEDULE_STATUS = 3)。也可以暂停(SI_SCHEDULE_STATUS = 8)

因此,要查找所有已安排的实例,您需要如下查询:

select * from ci_infoObjects where si_instance=1 and si_schedule_status not in (1,3)

这将为您带来任何不是成功或失败的东西

于 2014-05-29T14:22:44.523 回答
1

计划报告将具有一个子实例,该子实例保存计划信息并将计划报告作为其父实例。(您可以在 BI Launch Pad 的历史列表中看到此实例。)

您可以像这样从 CMS 检索定期调度的子实例:

SELECT * FROM CI_INFOOBJECTS WHERE SI_PROGID = 'CrystalEnterprise.Webi' 
and si_recurring = 1 

这将隔离任何计划执行的报告(或更准确地说,是上述子“计划”实例)。然后,您可以在子实例上调用 getSchedulingInfo() 以获取有关此调度的更多信息。

请记住,上述查询返回的 SI_PARENTID 字段而不是 SI_ID 字段为您提供了初始 WebI 报告的 ID。

于 2014-05-20T08:04:47.830 回答