I was recently asked to create a schedule for multiple reports and jobs. Now, creating the schedule for one report is fairly simple. You login into the portal, navigate to the report that you would like to schedule, set the schedule options, and viola! You are all set.
Creating the schedule for multiple reports posed more of a challenge. I did not want to manually navigate to each report path and edit the schedule for each report when I could whip up a simple script for doing the same automatically. Little did I know that the simple script would turn out to be not-so-simple.
I had a looooooong list of requirements that pretty much included having the entire list of options available on the portal UI such as
The below code snippets are part of what I use to perform these operations. They are written in VB.NET. Some of the code is taken from the original Cognos SDK sample code. The part that is not, is mine.
Create a new Schedule object
Dim newSched As New schedule()
Set up options to set the schedule start time and date, frequency / recurrence pattern, etc
These are available as methods under the newSched object which is of class schedule
For the schedule to work, the system has to have valid user credentials. Below code gets the user credentials. That would be the current logged on user through the SDK
getCredential is a function that I wrote to get the credential of the current logged on user
Dim schedCred As credential = getCredential()
Dim credentials As New baseClassArrayProp()
credentials.value = New baseClass() {schedCred}
newSched.credential = credentials
Save the report output. Note that this saves the output under the same report output and not as a reportView
saveOutput.name = runOptionEnum.saveOutput
saveOutput.value = True
Set schedule email options
Dim deliveryOptionString As New deliveryOptionString
deliveryOptionString.name = deliveryOptionEnum.subject
deliveryOptionString.value = reportName
Dim deliveryOptionAddrSMTPArray As New deliveryOptionAddressSMTPArray
deliveryOptionAddrSMTPArray.name = deliveryOptionEnum.toAddress
Dim addrSMTP As addressSMTP() = New addressSMTP(1) {}
addrSMTP(0) = New addressSMTP
addrSMTP(0).Value = "email@emailprovider.com"
addrSMTP(1) = New addressSMTP
addrSMTP(1).Value = "email2@emailprovider.com"
deliveryOptionAddrSMTPArray.value = addrSMTP
Dim deliveryOptionMemoPart As New deliveryOptionMemoPart
deliveryOptionMemoPart.name = deliveryOptionEnum.memoPart
Dim memoPart As New memoPartComposite
memoPart.contentDisposition = smtpContentDispositionEnum.inline
memoPart.contentType = smtpContentTypeEnum.alternative
deliveryOptionMemoPart.value = memoPart
Dim parts As memoPart() = New memoPart(1) {}
Dim memoPartString As New memoPartString
memoPartString.contentDisposition = smtpContentDispositionEnum.inline
memoPartString.text = "Report Body"
Dim memoPartMIMEAttachment As New memoPartMIMEAttachment
memoPartMIMEAttachment.contentDisposition = smtpContentDispositionEnum.inline
memoPartMIMEAttachment.dataType = "text/html"
memoPartMIMEAttachment.dataSize = "0"
Dim bArr() As Byte = System.Text.Encoding.UTF8.GetBytes("asdf")
memoPartMIMEAttachment.data = bArr ' Byte array
parts(0) = memoPartString
parts(1) = memoPartMIMEAttachment
emailAsAttachment.name = runOptionEnum.emailAsAttachment
emailAsAttachment.value = True
emailAsUrl.name = runOptionEnum.emailAsURL
emailAsUrl.value = True
email.name = runOptionEnum.email
email.value = True
END Set schedule email options
Once the schedule email options are added, these options need to be added into an array of type 'option'.
Dim opts() As [option] = New [option](5) {}
opts(0) = emailAsAttachment
opts(1) = emailAsUrl
opts(2) = deliveryOptionString
opts(3) = deliveryOptionAddrSMTPArray
opts(4) = deliveryOptionMemoPart
opts(5) = email
Next, this options array will have to be added to the schedule object
Dim schOpts As New optionArrayProp
schOpts.value = opts
newSched.options = schOpts
Finally, create a new schedule (or update an existing schedule) for the report / job by using the add method of the contentmanagerservice1 class
Creating the schedule for multiple reports posed more of a challenge. I did not want to manually navigate to each report path and edit the schedule for each report when I could whip up a simple script for doing the same automatically. Little did I know that the simple script would turn out to be not-so-simple.
I had a looooooong list of requirements that pretty much included having the entire list of options available on the portal UI such as
- Having the flexibility of being able to choose which of the output formats (HTML, PDF, XLS 2003, XLS 2007, CSV) would be needed for which report.
- Having the flexibility of being able to choose if the report should be saved to the file system.
- Having the flexibility of being able to choose if the report (link or attachment or both) should be emailed, and if yes then the list of email addresses.
- And of course, the schedule (daily / weekly / monthly), start time, end time, recurrence pattern, etc.
The below code snippets are part of what I use to perform these operations. They are written in VB.NET. Some of the code is taken from the original Cognos SDK sample code. The part that is not, is mine.
Create a new Schedule object
Dim newSched As New schedule()
Set up options to set the schedule start time and date, frequency / recurrence pattern, etc
These are available as methods under the newSched object which is of class schedule
For the schedule to work, the system has to have valid user credentials. Below code gets the user credentials. That would be the current logged on user through the SDK
getCredential is a function that I wrote to get the credential of the current logged on user
Dim schedCred As credential = getCredential()
Dim credentials As New baseClassArrayProp()
credentials.value = New baseClass() {schedCred}
newSched.credential = credentials
Save the report output. Note that this saves the output under the same report output and not as a reportView
saveOutput.name = runOptionEnum.saveOutput
saveOutput.value = True
Set schedule email options
Dim deliveryOptionString As New deliveryOptionString
deliveryOptionString.name = deliveryOptionEnum.subject
deliveryOptionString.value = reportName
Dim deliveryOptionAddrSMTPArray As New deliveryOptionAddressSMTPArray
deliveryOptionAddrSMTPArray.name = deliveryOptionEnum.toAddress
Dim addrSMTP As addressSMTP() = New addressSMTP(1) {}
addrSMTP(0) = New addressSMTP
addrSMTP(0).Value = "email@emailprovider.com"
addrSMTP(1) = New addressSMTP
addrSMTP(1).Value = "email2@emailprovider.com"
deliveryOptionAddrSMTPArray.value = addrSMTP
Dim deliveryOptionMemoPart As New deliveryOptionMemoPart
deliveryOptionMemoPart.name = deliveryOptionEnum.memoPart
Dim memoPart As New memoPartComposite
memoPart.contentDisposition = smtpContentDispositionEnum.inline
memoPart.contentType = smtpContentTypeEnum.alternative
deliveryOptionMemoPart.value = memoPart
Dim parts As memoPart() = New memoPart(1) {}
Dim memoPartString As New memoPartString
memoPartString.contentDisposition = smtpContentDispositionEnum.inline
memoPartString.text = "Report Body"
Dim memoPartMIMEAttachment As New memoPartMIMEAttachment
memoPartMIMEAttachment.contentDisposition = smtpContentDispositionEnum.inline
memoPartMIMEAttachment.dataType = "text/html"
memoPartMIMEAttachment.dataSize = "0"
Dim bArr() As Byte = System.Text.Encoding.UTF8.GetBytes("asdf")
memoPartMIMEAttachment.data = bArr ' Byte array
parts(0) = memoPartString
parts(1) = memoPartMIMEAttachment
emailAsAttachment.name = runOptionEnum.emailAsAttachment
emailAsAttachment.value = True
emailAsUrl.name = runOptionEnum.emailAsURL
emailAsUrl.value = True
email.name = runOptionEnum.email
email.value = True
END Set schedule email options
Once the schedule email options are added, these options need to be added into an array of type 'option'.
Dim opts() As [option] = New [option](5) {}
opts(0) = emailAsAttachment
opts(1) = emailAsUrl
opts(2) = deliveryOptionString
opts(3) = deliveryOptionAddrSMTPArray
opts(4) = deliveryOptionMemoPart
opts(5) = email
Next, this options array will have to be added to the schedule object
Dim schOpts As New optionArrayProp
schOpts.value = opts
newSched.options = schOpts
Finally, create a new schedule (or update an existing schedule) for the report / job by using the add method of the contentmanagerservice1 class