Bursting cognos report to Local File system and also run a script so that bursted reports can be renamed.
1) Go to the dispatcher -- ( See the picture below for reference )
2) Click on the dispatcher link to see the content manager service.
3) Go to the settings tab and click on edit on advance setting line -
4) Create following 2 variables and provide the path where you want to get the files bursted.
5) Save it and go to cognos configuration to do the following setting.
6) Run the report that you have to burst with the following settings.
set dest=D:/Reports
echo "BurstKey Script" >> %dest%/batch.txt
echo Batch File Log >> %dest%/batch.txt
rem Set the values for the PDF file and XML
rem to environment variables
rem the reason for this is the scripting language
rem cannot read variables as parameters
set parameter_pdf=%1%
set parameter_xml=%2%
rem Logs the variables to a batch log file
echo values set >> %dest%/batch.txt
echo Parameter_pdf: %parameter_pdf% >> %dest%/batch.txt
echo Parameter_xml: %parameter_xml% >> %dest%/batch.txt
rem Calls the script file
call %dest%/burstKeyRename.vbs
echo Completed >> %dest%/batch.txt
'
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set xmlDoc = CreateObject("MSXML.DOMDocument")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("process")
' Values for Environment can be "user", "system", "volitile" and "process
' The value "process" is the only valid one for this type of operation.
Set WshSysEnv = WshShell.Environment("process")
' To check the value for process environment variable
' this can be tested at the command prompt.
' Uncomment the next line and run this from command line
' WScript.Echo WshSysEnv("parameter_xml")
' Initializing Variables
xFile = WshSysEnv("PARAMETER_XML") 'Name of the XML file
sFile = WshSysEnv("PARAMETER_PDF") 'Name of the PDF file
' ***** Start override section for testing outside Cognos environment *****
'
' Set the following if-then condition to "true" for local testing using files that
' have already been burst. If the if=then condition is set to "false", then the
' environment variables must be set properly otherwise a run-time error will occur.
'
If (false) Then
'The filename component of the output file. Do not include the extension.
tempName = "D:\C83Outputs\wottcattondxp\TestOutputs\911_1190657394280"
' Derive the name of the XML descriptor file
xFile = tempName & "_desc.xml"
' Derive the name of the new output file.
sFile = tempName & ".pdf"
End If
'
' ***** End override section for testing outside Cognos environment *****
sMsg = ""
sNewFileName = ""
'
' Read the XML descriptor file created by CRN/Cognos 8 to get the value of the element. This
' value will be used as the new filename. If there is no value in the element, a new file will not
' be created. It is assumed that the value of the element does not contain any of the
' reserved characters the underlying OS uses for filename.
'
xmlDoc.async = False
xmlDoc.Load xFile
If (xmlDoc.parseError.errorCode <> 0) Then
sMsg = xFile & " : Error parsing XML " + xmlDoc.parseError.reason
Else
Set rootXML = xmlDoc.documentElement
Set oNodeList = rootXML.childNodes
iNode = 0
For Each Item in oNodeList
If (xmlDoc.documentElement.childNodes.Item(iNode).basename = "burstKey") Then
sNewFileName = xmlDoc.documentElement.childNodes.Item(iNode).text
If (sNewFileName = "") Then
sMsg = xFile & " : element in '" & xFile & "' is empty. Unable to copy file."
Else
sMsg = xFile & " : Burst key value is '" & sNewFileName & "'"
End If
' This if condition was added to support the use of CAMID for the burst key
if (instr(sNewFilename, "CAMID")) Then
intFirstPosition = instr(sNewFilename, ":")
intSecondPosition = instr(intFirstPosition, sNewFilename, ")")
sNewFileName = mid (sNewFilename, intFirstPosition + 1, intSecondPosition - (intFirstPosition + 2))
sMsg = xFile + " : Value extracted from CAMID is '" & sNewFileName & "'"
End If
End If
iNode = iNode + 1
Next
Set oNodeList = Nothing
Set rootXML = Nothing
End If
'
' If there is a new filename, make of copy of it otherwise just log an error. A local log file with a name
' that is derived using the filename given to the output by CRN/Cognos 8 will be created so it is easy
' to determine if the file copied successfully or not. Since this information will also be written to the
' persistent log file, writing to the local log file can be bypassed if writing it creates too much clutter in the
' location specified in CM.OUTPUTLOCATION.
'
if (sNewFileName <> "") Then
sNewFileName = getPath(sFile) & sNewFileName & ".pdf"
writeLocalLogFile sFile, sMsg & vbCrLf & "Copying file named '" & sFile & "' to '" & sNewFileName & "'" & vbCrLf
objFSO.CopyFile sFile, sNewFileName
Else
' Set this variable to an error message so it will be picked up below when writing to the persistent log file.....
sNewFileName = ""
writeLocalLogFile sFile, sMsg & vbCrLf
End If
'
' Update the persistent log file with the result. This log file will have data appended to it in order to keep the history.
'
sMsg = "----- Start of entry -----" & vbCrLf
sMsg = sMsg & "Date : " & date & vbTab & "Time : " & time & vbCrLf
sMsg = sMsg & vbCrLf & "Original Name :" & sFile & vbCrLf
sMsg = sMsg & "New Name : " & sNewFileName & vbCrLf
sMsg = sMsg & "----- End of entry -----" & vbCrLf & vbCrLf
sPersistLogFile = getPath(sFile) & "crn_pdf_rename.txt"
writePersistLogFile sPersistLogFile, sMsg
'
' All done.. Release references to the objects used in this app.
'
Set objFSO = Nothing
Set xmlDoc = Nothing
Set WshShell = Nothing
Set WshSysEnv = Nothing
Function getPath(sFileName)
sPathOnly = ""
lastSlashPos = InStrRev(sFileName, "\")
if (lastSlashPos > 0) Then
getPath = mid (sFileName, 1, lastSlashPos)
End If
End Function
'
' writeLocalLogFile
' Create a log file using a name derived from the filename that was generated by
' CRN/C8 before it was written to the location specified by CM.OUTPUTLOCATION.
'
Sub writeLocalLogFile(sFileName, sData)
sLogFile = left(sFileName, instr(sFileName,".")-1) + "_log.txt"
writeLogFile sLogFile, sData
End Sub
'
' writePersistLogFile
' Write a record to the persistent log file
'
Sub writePersistLogFile(sFileName, sData)
writeLogFile sFileName, sData
End Sub
'
' writeLogFile
' Generic routine to open a file, append a record to it and close the file
'
Sub writeLogFile(sFileName, sData)
If (objFSO.FileExists(sFileName)) Then
Set logFile = objFSO.GetFile(sFileName).OpenAsTextStream(8)
Else
Set logFile = objFSO.CreateTextFile(sFileName)
End If
logFile.Write sData
logFile.Close
Set logFile = Nothing
End Sub
1) Go to the dispatcher -- ( See the picture below for reference )
2) Click on the dispatcher link to see the content manager service.
3) Go to the settings tab and click on edit on advance setting line -
4) Create following 2 variables and provide the path where you want to get the files bursted.
5) Save it and go to cognos configuration to do the following setting.
6) Run the report that you have to burst with the following settings.
7) You will get the output in D:/Report folder, now you want that bursted reports should get proper names or they should get names according to there bursted key.
8) Create a notepad file giving it a name "burstKey.bat" and paste the following contents and save it in D:\Reports folder.
@echo off
Rem this batch file is launched with a working directory of \bin set dest=D:/Reports
echo "BurstKey Script" >> %dest%/batch.txt
echo Batch File Log >> %dest%/batch.txt
rem Set the values for the PDF file and XML
rem to environment variables
rem the reason for this is the scripting language
rem cannot read variables as parameters
set parameter_pdf=%1%
set parameter_xml=%2%
rem Logs the variables to a batch log file
echo values set >> %dest%/batch.txt
echo Parameter_pdf: %parameter_pdf% >> %dest%/batch.txt
echo Parameter_xml: %parameter_xml% >> %dest%/batch.txt
rem Calls the script file
call %dest%/burstKeyRename.vbs
echo Completed >> %dest%/batch.txt
9) create a file "burstKeyRename.vbs" and paste the following contenets in there and save it in D:\Reports folder.
'
'
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set xmlDoc = CreateObject("MSXML.DOMDocument")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("process")
' Values for Environment can be "user", "system", "volitile" and "process
' The value "process" is the only valid one for this type of operation.
Set WshSysEnv = WshShell.Environment("process")
' To check the value for process environment variable
' this can be tested at the command prompt.
' Uncomment the next line and run this from command line
' WScript.Echo WshSysEnv("parameter_xml")
' Initializing Variables
xFile = WshSysEnv("PARAMETER_XML") 'Name of the XML file
sFile = WshSysEnv("PARAMETER_PDF") 'Name of the PDF file
' ***** Start override section for testing outside Cognos environment *****
'
' Set the following if-then condition to "true" for local testing using files that
' have already been burst. If the if=then condition is set to "false", then the
' environment variables must be set properly otherwise a run-time error will occur.
'
If (false) Then
'The filename component of the output file. Do not include the extension.
tempName = "D:\C83Outputs\wottcattondxp\TestOutputs\911_1190657394280"
' Derive the name of the XML descriptor file
xFile = tempName & "_desc.xml"
' Derive the name of the new output file.
sFile = tempName & ".pdf"
End If
'
' ***** End override section for testing outside Cognos environment *****
sMsg = ""
sNewFileName = ""
'
' Read the XML descriptor file created by CRN/Cognos 8 to get the value of the element. This
' value will be used as the new filename. If there is no value in the element, a new file will not
' be created. It is assumed that the value of the element does not contain any of the
' reserved characters the underlying OS uses for filename.
'
xmlDoc.async = False
xmlDoc.Load xFile
If (xmlDoc.parseError.errorCode <> 0) Then
sMsg = xFile & " : Error parsing XML " + xmlDoc.parseError.reason
Else
Set rootXML = xmlDoc.documentElement
Set oNodeList = rootXML.childNodes
iNode = 0
For Each Item in oNodeList
If (xmlDoc.documentElement.childNodes.Item(iNode).basename = "burstKey") Then
sNewFileName = xmlDoc.documentElement.childNodes.Item(iNode).text
If (sNewFileName = "") Then
sMsg = xFile & " : element in '" & xFile & "' is empty. Unable to copy file."
Else
sMsg = xFile & " : Burst key value is '" & sNewFileName & "'"
End If
' This if condition was added to support the use of CAMID for the burst key
if (instr(sNewFilename, "CAMID")) Then
intFirstPosition = instr(sNewFilename, ":")
intSecondPosition = instr(intFirstPosition, sNewFilename, ")")
sNewFileName = mid (sNewFilename, intFirstPosition + 1, intSecondPosition - (intFirstPosition + 2))
sMsg = xFile + " : Value extracted from CAMID is '" & sNewFileName & "'"
End If
End If
iNode = iNode + 1
Next
Set oNodeList = Nothing
Set rootXML = Nothing
End If
'
' If there is a new filename, make of copy of it otherwise just log an error. A local log file with a name
' that is derived using the filename given to the output by CRN/Cognos 8 will be created so it is easy
' to determine if the file copied successfully or not. Since this information will also be written to the
' persistent log file, writing to the local log file can be bypassed if writing it creates too much clutter in the
' location specified in CM.OUTPUTLOCATION.
'
if (sNewFileName <> "") Then
sNewFileName = getPath(sFile) & sNewFileName & ".pdf"
writeLocalLogFile sFile, sMsg & vbCrLf & "Copying file named '" & sFile & "' to '" & sNewFileName & "'" & vbCrLf
objFSO.CopyFile sFile, sNewFileName
Else
' Set this variable to an error message so it will be picked up below when writing to the persistent log file.....
sNewFileName = ""
writeLocalLogFile sFile, sMsg & vbCrLf
End If
'
' Update the persistent log file with the result. This log file will have data appended to it in order to keep the history.
'
sMsg = "----- Start of entry -----" & vbCrLf
sMsg = sMsg & "Date : " & date & vbTab & "Time : " & time & vbCrLf
sMsg = sMsg & vbCrLf & "Original Name :" & sFile & vbCrLf
sMsg = sMsg & "New Name : " & sNewFileName & vbCrLf
sMsg = sMsg & "----- End of entry -----" & vbCrLf & vbCrLf
sPersistLogFile = getPath(sFile) & "crn_pdf_rename.txt"
writePersistLogFile sPersistLogFile, sMsg
'
' All done.. Release references to the objects used in this app.
'
Set objFSO = Nothing
Set xmlDoc = Nothing
Set WshShell = Nothing
Set WshSysEnv = Nothing
Function getPath(sFileName)
sPathOnly = ""
lastSlashPos = InStrRev(sFileName, "\")
if (lastSlashPos > 0) Then
getPath = mid (sFileName, 1, lastSlashPos)
End If
End Function
'
' writeLocalLogFile
' Create a log file using a name derived from the filename that was generated by
' CRN/C8 before it was written to the location specified by CM.OUTPUTLOCATION.
'
Sub writeLocalLogFile(sFileName, sData)
sLogFile = left(sFileName, instr(sFileName,".")-1) + "_log.txt"
writeLogFile sLogFile, sData
End Sub
'
' writePersistLogFile
' Write a record to the persistent log file
'
Sub writePersistLogFile(sFileName, sData)
writeLogFile sFileName, sData
End Sub
'
' writeLogFile
' Generic routine to open a file, append a record to it and close the file
'
Sub writeLogFile(sFileName, sData)
If (objFSO.FileExists(sFileName)) Then
Set logFile = objFSO.GetFile(sFileName).OpenAsTextStream(8)
Else
Set logFile = objFSO.CreateTextFile(sFileName)
End If
logFile.Write sData
logFile.Close
Set logFile = Nothing
End Sub
now follow the 6th step again and you will get proper pdf output with name same as burst key.
Regards
Cognos Teacher..
(concept taken from cognos-ibm.blogspot.com)
I am William..I just browsing through some blogs and came across yours! Excellent blog, good to see someone actually uses for quality posts.Your site kept me on for a few minutes unlike the rest :)Keep up the good work!Thanks for sharing a important information on cognos
ReplyDeletewonderful information, I had come to know about your blog from my friend nandu , hyderabad,i have read atleast 7 posts of yours by now, and let me tell you, your website gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new posts, once again hats off to you! Thanks a ton once again, Regards, cognos online trainingamong the cognos in Hyderabad. Classroom Training in Hyderabad India
ReplyDeleteHi Srinu,
ReplyDeleteThanks for this wonderful post and great program snippets.
I am having the same requirement: renaming my burst files to burst key and I tried using the code you have mentioned here. The code correctly renamed my files to my burst key. However, it also keeps the files with system generated names. So, for each value of burstKey, I have two files: one with name of burstKey value and the other with system generated name. Can you please let me know what changes should be made to the code in order to have only one file named as the burstKey value?
Thanks in advance!
It is really a very excellent blog find all of your blogs were amazing and awesome...................Please contact us for Oracle Fusion Financials Training
ReplyDeleteGreat work!keep sharing like this and is really a good information.Thanks for sharing.cognos online tutorial
ReplyDeleteNice post.Keep updating Cognos TM1 online training Hyderabad
ReplyDeleteThis site has lots of advantage.I found many interesting things from this site. It helps me in many ways.
ReplyDeleteOracle Fusion PPM Training in Ameerpet
This Post doesn't tell about Cognos Server having multiple dispatchers if the report is scheduled and the report gets saved to the file system associated to the dispatcher server. What to do IF I need to save the file in just one of the Cognos Server
ReplyDeleteThis post is really nice and informative. The explanation given is really comprehensive and useful.... cognos training online
ReplyDelete
ReplyDeleteThat is nice article from you , this is informative stuff . Hope more articles from you . I also want to share some information about cognos tutorial and cognos training videos
Nice post,keep sharing.
ReplyDeletecognos tm1 online training
Thanks just ran into this issue.
ReplyDelete