使用Cognos 10.2,我试图获取所有当前计划的报告的列表,以及计划报告将发送到的分发列表。
我可以使用以下代码获取所有单独计划的独立报告的列表及其分发列表:
select ob2.cmid,
c.name as className,
n.name as objectName,
o.DELIVOPTIONS as DeliveryOptions
from CMOBJPROPS2 p
inner join (select cmid, cast(DELIVOPTIONS as nvarchar(2048)) as DELIVOPTIONS from CMOBJPROPS26) as o on p.cmid=o.cmid
inner join CMOBJECTS ob on ob.cmid=o.cmid
inner join CMOBJECTS ob2 on ob.pcmid=ob2.cmid
inner join CMOBJNAMES n on n.cmid=ob2.cmid
inner join CMCLASSES c on ob2.classid=c.classid
但是我仍然希望在IBM Cognos的工作中安排所有报告。上面显示了预定的作业/事件,但没有显示作业及其分布列表中的报告。
我已经运行了表格CMOBJPROPS26表,并且DELIVOPTIONS字段似乎包含我想要的数据,我可以使用CMID将其加入到报表名称/作业中,但是当我查看显示的信息时,我在哪里认为电子邮件地址应该是长字符串,而不是长字符串。我认为这可能是因为来自我们的工作广告组的电子邮件已连接到Cognos,而不是存储在Cognos本身中。系统必须进行查找或知道如何将此长字符串(下面的示例)转换为工作广告组的名称,我想知道是否有人知道我可以做到这一点?
<item xsi:type="bus:memoPartMIMEAttachment">
<contentDisposition xsi:type="bus:smtpContentDispositionEnum">inline</contentDisposition>
<name xsi:type="xsd:string"/>
<data xsi:type="xsd:base64Binary">PEhUTUw+PEJPRFk+SGkgQWxsLDxici8+PGJyLz5UaGUgVmFsaWR1cyBFeHRyYWN0IC0gRmF1bHQgdjQuMiAoQWRtaXJhbCkgaGFzIG5vdyAgcnVuIGFuZCBzaG91bGQgYmUgYXZhaWxhYmxlIGluIFRhcGVzdHJ5IHNob3J0bHkuIFBsZWFzZSBuYXZpZ2F0ZSB0byBUYXBlc3RyeSBIb21lICZndDsgTUkgJmd0OyBUcmFkaW5nUmVwb3J0cyAmZ3Q7IENsYWltcyAmZ3Q7IFZhbGlkdXMgRXh0cmFjdCAgIHRvIHZpZXcgdGhlIHJlcG9ydC48YnIvPjxici8+PGJyLz48YnIvPklmIHRoZSByZXBvcnQgZG9lcyBub3QgYXBwZWFyIG9uIHRhcGVzdHJ5IHBsZWFzZSBjb250YWN0IExvbGVuZSBWZW50ZXIgb3IgYSBtZW1iZXIgb2YgdGhlIEJJICBUZWFtPGJyLz48YnIvPjwvQk9EWT48L0hUTUw+</data>
<dataSize xsi:type="xsd:integer">0</dataSize>
<dataType xsi:type="xsd:string">text/html</dataType>
</item>
我的最终目标是拥有一个为我提供报告名称的输出列表-包含通讯组列表的所有报告的通讯组列表。
非常感谢
[我想我以前曾尝试过此方法,但在有限的时间内得出的结论是:“无法从这里到达那里。”请记住,这是专有系统。 IBM不喜欢我们在他们的数据库中乱搞。 IBM会说您需要使用SDK。
话虽如此...
似乎您发布了DELIVOPTIONS值的一小部分,我认为这是错误的。我认为您需要从DELIVOPTIONS中获取两部分。它们分别标记为to
和toAddress
。您需要将每个<value>
标签解析为XML。
从toAddress
,从数据中读取电子邮件地址。
从to
,从数据中读取CAMID值。然后,您可以将该结果加入CMOBJECTS33以查找用户名。但这仅适用于在Content Store中注册的用户。这意味着可能只有登录到Cognos的用户。另外,我在Content Store中看不到用户的电子邮件地址。因此,对于安全组和通讯组(可能还有用户),您需要使用查询直接针对您的外部名称空间进行查询(例如使用openrowset从数据库服务器查询LDAP系统,但是您没有说什么)您使用的RDBMS。)
可能不是您想要的答案...
更新为包括工作计划(以上是报告计划)
电子邮件地址信息与jobStepDefinition对象一起使用。因此,如果您的jobDefinition对象(作业)为CMID 123,则将得到jobStepDefinition(jobDefinition对象的子对象),例如...
select o.CMID
, n.NAME as JobStepDefinition
, c.NAME as ClassName
, s.DELIVOPTIONS
from CMOBJECTS o
inner join CMOBJNAMES n on n.CMID = o.CMID
inner join CMCLASSES c on c.CLASSID = o.CLASSID
inner join CMOBJPROPS26 s on s.CMID = o.CMID
where n.ISDEFAULT = 1
and o.PCMID = 123
(也输出类名,因此您可以进行验证)这就是基础。如果需要,您可以通过CTE获得更高的评价。
现在,您需要将某些内容解析为XML。您将按照我说的时间表对它们进行评估(如上)。
[toAddress
,ccAddress
,bccAddress
包含电子邮件地址。to
,cc
,bcc
包含CAMID值。
祝你好运。>>
哦,我还没有弄清楚如何列出作业中运行的所有报告。同样,SDK在这方面可能更易于使用。