识别计划的业务对象报告

时间:2014-05-19 16:35:31

标签: java business-objects business-objects-sdk infoview

我正在做一个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 "

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

2 个答案:

答案 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。