我们能覆盖template_name OBIEE /毕普破裂定义虽然调度报告工作使用Schedule



我们在OBIEE12c中有一个带有突发查询的报告。我们使用webservice通过ScheduleService::scheduleReport()使用web服务客户端调度报表作业。在爆炸中查询我们的模板生成的报告。一切正常。

select  "invoice_table"."invid" as "KEY",
**'invoice_template1' as "TEMPLATE",** 
'en-US' as "LOCALE",
'PDF' as "OUTPUT_FORMAT",
'EMAIL' as "DEL_CHANNEL",
'America/Los_Angeles' as "TIMEZONE",
...

新的要求是动态地改变突发查询中的TEMPLATE。有没有办法在调用ScheduleService::scheduleReport()的同时动态地改变burst查询中的TEMPLATE设置,以便生成的报告根据需求改变?

有不同的方法。这完全取决于改变TEMPLATE的条件。如果它在爆破选择命令的范围内,那么你可以使用CASE表达式来选择正确的TEMPLATE。但事实可能并非如此。
我结合为不同报告创建的BI_BURST_CONTROL表进行突发操作,其中包含控制执行所需的所有数据。该表是连接到突发查询的一部分。其中一个示例如下所示,我使用CASE通过邮件发送报告或将其保存到目录中。与此相同,您可以更改TEMPLATE,但前提是您可以为CASE表达式定义条件。

SELECT 
mb.MATBR "KEY",                                     -- DELIVER_BY Node beeing matched to KEY column 
bc.TEMPLATE "TEMPLATE",                             -- Layout template to use (not name of Layout file)
bc.LOCALE "LOCALE",                                 -- Localization (hr-HR)
'PDF' "OUTPUT_FORMAT",                              -- (PDF)
CASE mb.MATBR WHEN '000000' THEN 'File' ELSE 'Email' END "DEL_CHANNEL",                                             -- (Email)                  (File) for not existing MATBR
CASE mb.MATBR WHEN '000000' THEN 'D:File_Delivery' ELSE mb.MAIL END "PARAMETER1",                                  -- (Email)To                (File)Folder='D:File_Delivery'
CASE mb.MATBR WHEN '000000' THEN 'Ost_' || To_Char(bc.ID) || '_' || :PROLAZ || '.pdf' ELSE Null END "PARAMETER2",   -- (Email)Cc=Null           (File)FileName   
CASE mb.MATBR WHEN '000000' THEN Null ELSE bc.PARAMETER3 END "PARAMETER3",                                          -- (Email)From              (File)Null
CASE mb.MATBR WHEN '000000' THEN Null ELSE bc.PARAMETER4 END "PARAMETER4",                                          -- (Email)Subject           (File)Null
CASE mb.MATBR WHEN '000000' THEN Null ELSE bc.PARAMETER5 END "PARAMETER5",                                          -- (Email)Message body      (File)Null
CASE mb.MATBR WHEN '000000' THEN Null ELSE bc.PARAMETER6 END "PARAMETER6",                                          -- (Email)Attachment=true   (File)Null
Null "PARAMETER7",                                      -- (Email)Reply to=Null     (File)Null
Null "PARAMETER8",                                      -- (Email)Bcc=Null          (File)Null
Null "PARAMETER9",                                      -- (Email)=Null             (File)Null
Null "PARAMETER10",                                     -- (Email)=Null             (File)Null
bc.OUTPUT_NAME || mb.MATBR "OUTPUT_NAME"                -- (Email)=AttFileName (with no extension)  (File)Null
FROM 
(
Select 
MATBR "MATBR", 
E_MAIL "MAIL" 
From 
SOME_TABLE@DBLINK 
Where 
DATE_START <= Last_Day(Add_Months(SysDate, -1)) And
Last_Day(Add_Months(SysDate, -2)) < Nvl(DATE_END, To_Date('11.10.2062', 'dd.mm.yyyy'))  And
E_MAIL Is Not Null
UNION
Select '000000' "MATBR", Null "MAIL" From DUAL
) mb
INNER JOIN 
BI_BURST_CONTROL bc ON(bc.OWNER_ID = 'OWNER_ID' And bc.ID = :ID)

另一种方法依赖于调用scheduleeservice的SOAP信封的定义。在我的例子中,这个信封是由处理PL/SQL中的所有条件和决策的包创建的,在这些条件和决策中,更改TEMPLATE或其他任何东西都不是问题。由包生成的示例信封如下:

<?xml version="1.0" encoding="utf-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap-env:Body>
<ns0:scheduleReport xmlns:ns0="http://xmlns.oracle.com/oxp/service/v2">
<ns0:scheduleRequest>
<ns0:dataModelUrl>http://some.url.of.bi.server:9502/xmlpserver/xdmeditor.jsp?f=/%7Euser/DPOP/DataModels/Otpr/Analyze_DataModel.xdm</ns0:dataModelUrl>
<ns0:jobLocale>hr-Hr</ns0:jobLocale>
<ns0:repeatCount>1</ns0:repeatCount>
<ns0:reportRequest>
<ns0:attributeCalendar>Gregorian</ns0:attributeCalendar>
<ns0:attributeFormat>pdf</ns0:attributeFormat>
<ns0:attributeLocale>hr-Hr</ns0:attributeLocale>
<ns0:attributeTemplate>Word_BI_PayListSQL_BLANK_7B.rtf</ns0:attributeTemplate>
<ns0:parameterNameValues>
<ns0:listOfParamNameValues>
<ns0:item>
<ns0:name>PASS_NUMBER</ns0:name>
<ns0:values>
<ns0:item>1</ns0:item>
</ns0:values>
</ns0:item>
<ns0:item>
<ns0:name>STEP</ns0:name>
<ns0:values>
<ns0:item>20</ns0:item>
</ns0:values>
</ns0:item>
</ns0:listOfParamNameValues>
</ns0:parameterNameValues>
<ns0:reportAbsolutePath>/~user/Payments/Reports/Work/PayListSQL_1_ver7_Report.xdo</ns0:reportAbsolutePath>
</ns0:reportRequest>
<ns0:scheduleBurstingOption>True</ns0:scheduleBurstingOption>
<ns0:startDate>2020-10-08T09:00:00+02:00</ns0:startDate>
<ns0:userJobName>PAYMENTS_2020-09_1</ns0:userJobName>
</ns0:scheduleRequest>
<ns0:userID>username</ns0:userID>
<ns0:password>password</ns0:password>
</ns0:scheduleReport>
</soap-env:Body>
</soap-env:Envelope>

我知道这不能解决你的问题,但希望它能给你一个在你的具体情况下如何做的想法。根据我的经验,两者中的一个或两者的结合几乎可以解决你问题中所有可能的问题。问候…

相关内容

  • 没有找到相关文章

最新更新