我正在做一个java应用程序,它必须只从Business Object Server下载预定的报告。为了安排报告,我使用Info View以下方式
1)报告上的Clic 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 "
这是过滤预定报告的正确方法吗?
答案 0 :(得分:2)
所以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)
这将为您提供任何不成功或失败的信息
答案 1 :(得分: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。