BI Publisher Bursting in PeopleSoft

 

Overview

Bursting BI Publisher reports breaks up a single report into multiple output files. Every time the value changes in a specific designated field, a new document is generated.

As delivered, PeopleTools wants bursted reports to run from the Process Scheduler delivering reports to the Report Manager. Users access the bursted reports through the report manager.

Bursting is an older technology rarely used in our current architecture. In most cases, there are better ways than bursting to accomplish the requirements.

PeopleSoft BIP Bursting

Caveats

This discussion will cover bursting and bursting template control.

It will not cover:
• Burst Security
• Burst Search Keys
• Report Manager Configuration and usage

Getting Started

Before setting bursting options, start with a working BI Publisher Report running through the process scheduler. The process generates one report with all documents contained in the XML File.

BIP Data Source

The BIP Data Source defines the structure of an XML file.

The BI Data Source only needs a good example of the expected XML Data file.

PeopleToold version 8.59 and any other currently supported version does not require an XML Schema files.

In older BI Publisher versions, an XML Schema is required for bursting and other advanced functions

BIP Report Definition

A basic report definition working from batch

RTF Template

Your RTF Template defines how the data is presented in your report. Bursting is not defined at the template

App Engine to generate the report in batch

Bursted reports should run in batch and post to the Report Manager

The report distribution option in your App Engine PeopleCode should be publish the report (see Appendix A for entire Peoplecode Event)

&oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&ReportName);
&oRptDefn.Get();
      
&oRptDefn.SetRuntimeDataXMLFile(&xmlFile);

&oRptDefn.ProcessReport(&TemplateId, &LanguageCd, &AsOfDate, &oRptDefn.GetOutDestFormatString(&OutDestFormat));
      
&oRptDefn.Publish("", "", "", &ProcessInstance);

Associated PeopleTools Objects

Pages, components, records, and process definitions to control the process.

Data Source Structure

Bursting a report starts with the design of the source data set.

BI Publisher will only burst on one XML tag in the highest group node of the file. This means the burst field must be in the high-level structure if working with complex report.

When creating a detail report such as a training report or an itemized invoice, ensure the field to burst on is in the highest-level node of the XML File. If using a tool like PSQuery where the data structure is flat, make sure your burst field is in the data area that is not summarized by the tool in a table on a page

Bursting a BI Pub Report

Bursting is controlled though the BIP Report Definition, not the template.

Once you have tested your BI Pub objects and the report is running successfully from the process scheduler, open the BIP Report Definition and navigate to the “Bursting” tab

Navigation: Home > Reporting Tools > BI Publisher > Create BIP Report Definitions

The top of the page contains the “Burst by” field. Clicking on this field’s drop down, a list of all possible burst fields as per your Data Source Definition will appear. If your desired field is not in this list, the data source is not correctly structured for bursting.

In this example, we are busting by the DEPTID field in the XML File.

ReRun the report and review the Report Manager for the generated reports.

The same report run now produced a different report for each distinct DEPTID value in the file. Notice the report name.

In this example, the reports for all employees in DEPTID 22000 are in this document. Each document contains one or more reports as per the Burst Field Value.

Enforce Unique Burst Value

This option forces the report to expect unique values in the Burst By field. The report process will stop and generate an error if a duplicate value is received in the Burst By field.

For example, bursting employee checks by Emplid. With this checkbox selected, the process will error if an employee has two checks.

With this option off, all rows having the same value in the burst field will be combined into a single report.

Bursting Template Selection

We can control which template is used for a burst report through the “Template” section on the BIP Report Definition Bursting page.

Define template control by any field in the highest-level node of the XML File. These templates must already be defined under the “Template” tab of the Report Definition.

In the example above, the report is bursting by Emplid, meaning a document will generate for each EMPLID value in the XML file. The Template is controlled the DEPTID field.

• If the employee’s DEPTID = 10000, then the report will use the X_PT3_BIBRST_ACC template to generate the report
• If the employee’s DEPTID = 13110, then the report will use the X_PT3_BIBRST_HR template to generate the report
• If the employee’s DEPTID is NOT one of the listed values, the default template is used to create the report

It’s important to know that if the “Burst By” field and “Template Controlled by” field are different fields, then all data in a bursted report must have the same value in the “Template” field to use the different template. If at least one row of the Burst section does not have the same value in the Template control field, the report will use the default template.

Here you can see the output from the template control. The templates are essentially the same, just the color scheme has been changed to show us that the different template had been used.

  • Employees in DEPTID 13110 received the purple report
  • Employees in DEPTID 10000 received the green report
  • All other employees received the default template, which has the light blue title and table.

Structural differences with BI Publisher Reports

When bursting BI Pub Reports, it’s important to remember that the BI Publisher Report Generator on the server does not just create multiple reports in one output directory on the file server. The process creates a separate sub-directory under the report’s “/RptInst/” folder for each report.

Where a non-burst BI Publisher process places the result report in the “/RptInst/” folder, the bursting process creates a new individual folder in that “/RptInst/” folder for each of the reports generated. That new sub-folder is simply named with the sequence number of that report. The actual report is in that sub-folder.

Should you run a payroll report for 5,000 employee and burst by EMPLID, the process will create 5,000 sub-directories under the main folder, one for each employee’s report. Below is an example of a report generated 15th in the sequence.

This massive number of additional directories per each run can become a performance issue on your file server if not carefully managed.

Should you use Bursting?

In most cases, no.

There are better ways to control and group BI Reports than bursting. Creating specific data sets before sending them to BI Pub allows finer control of the input and final document produced. You also don’t have to track the sequence a key value appears in the data file against the resulting folder sequence of the bursted reports.

We generally get better system performance running multiple controlled reports rather than parsing a single, huge datafile bursted into multiple reports. BI Publisher recommends we DON’T use PSQuery for larger reports due to the extra overhead of that data source.

We also get to choose where the report runs: batch, online in the user’s section, or both.

So, I would easily find other better ways to produce the results than bursting.

Appendix A

App Engine PeopleCode Event generating Bursted Report

import PSXP_RPTDEFNMANAGER:*;

Function ExecXmlpReport(&RunControlId As string, &ProcessInstance As number, &ReportName As string, &TemplateId As string, &LanguageCd As string, &AsOfDate As date, &OutDestFormat As number) Returns boolean
   Local PSXP_RPTDEFNMANAGER:ReportDefn &oRptDefn;
   Local number &i;
   Local ApiObject &PSMessages;
   Local number &MsgSetNbr, &MsgNbr;
   Local boolean &bResult;
   Local string &xmlFile;
   Local string &sXMLString, &buffer;
   
   Local array of string &Ar_Files;
   
   &xmlFile = RTrim(X_PT3_BRST_AET.FILENAME);
   
   &nOrigPSMessagesMode = %Session.PSMessagesMode;
   %Session.PSMessagesMode = 1;
   
   try
      /* get the report defn object */
      &oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&ReportName);
      &oRptDefn.Get();
      
      &oRptDefn.SetRuntimeDataXMLFile(&xmlFile);
      &oRptDefn.ProcessReport(&TemplateId, &LanguageCd, &AsOfDate, &oRptDefn.GetOutDestFormatString(&OutDestFormat));
      
      &oRptDefn.Publish("", "", "", &ProcessInstance);
      
   catch Exception &Err
      WriteToLog(%ApplicationLogFence_Error, &Err.ToString());
      Return False;
   end-try;
   
   %Session.PSMessagesMode = &nOrigPSMessagesMode;
   
   &bResult = True;
   
   /* check session message for errors */
   If %Session.PSmessages.Count > 0 Then
      &PSMessages = %Session.PSmessages;
      For &i = 1 To &PSMessages.Count
         If (&PSMessages.Item(&i).MessageType <= 1) Then
            &MsgSetNbr = &PSMessages.Item(&i).MessageSetNumber;
            &MsgNbr = &PSMessages.Item(&i).MessageNumber;
            WriteToLog(%ApplicationLogFence_Error, MsgGet(&MsgSetNbr, &MsgNbr, "Message Not Found : " | &MsgSetNbr | "," | &MsgNbr));
            &bResult = False;
            Break;
         End-If;
      End-For;
   End-If;
   
   Return &bResult;
End-Function;

If ExecXmlpReport(X_PT3_BRST_AET.RUN_CNTL_ID, X_PT3_BRST_AET.PROCESS_INSTANCE, X_PT3_BRST_AET.REPORT_DEFN_ID, X_PT3_BRST_AET.TMPLDEFN_ID, "", %Date, 2) = True Then
   Exit (0);
Else
   Exit (1);
End-If;

PeopleSoft Fluid UI Guides

PeopleSoft published the “CSS Guide for PeopleSoft Fluid User Interface” in 2015 with PeopleTools 8.54.  This guide has never been updated with the subsequent PeopleTools releases, but it does provide good insight into the delivered styles available for your pages.

Use this document and a guide, not a literal code bible.  Some of the references are obscure and contain incorrect tag syntax.  Cutting and pasting from the PDF document is also discouraged due to characters such as the dash (“-“) mis-translates in the App Designer.

Finding Code References

Page field fluid styles are stored on the PSPNLFIELDEXT table in the FFSTYLELONG field.   Search this table using SQL to find existing CSS Style Usage in delivered PeopleSoft pages.

SELECT E.PNLNAME, D.DESCR, F.RECNAME, F.FIELDNAME, E.PNLFLDID, E.FFSTYLELONG  
FROM PSPNLFIELDEXT E , PSPNLFIELD F, PSPNLDEFN D
WHERE F.PNLNAME = E.PNLNAME
AND D.PNLNAME = E.PNLNAME
AND F.PNLFLDID = E.PNLFLDID
AND E.FFSTYLELONG LIKE '%psc_invisible%';

EM Measurements

PeopleTools uses EM measurements rather than pixels for size refences in the CSS.

For example:

psc_image-height3em

The above CSS tag sets the image height at 3 EM, not pixels.

Pixel is an absolute unit of measurement that does not scale.  The value is fixed regardless of the user’s browser settings or device.

The element or “em” tag is a relative size that is adjustable to the UI.   The em size is relative to the font size of the element being styled.  If the font size of the current element is 10 pixels:

  • 1 em = 10 pixels
  • 1.5em = 15 pixels
  • 3em = 30 pixels

The user’s browser calculates the pixel each em value of when the page renders.

An important point about the em measurement is that it could change multiple times within a page.  If font sizes change throughout the page, the em size also changes altering the size of your images.

Applying CSS Styles to an Image

Most of the delivered image styles in the Fluid UI are in the PSSTYLEDEF_FMODE stylesheet. I have pulled out several image styles from the May 2015 CSS Guide and placed them in Appendix A below along with a usage example where available.

Fluid Image styles are much like using static images in HTML page controls.   Place the image control on the page and then use the Fluid Properties tab to define the height and width parameters of the image.

Example Fluid Page

This is a simple fluid page with both a static image and a grid containing user uploaded images

App Designer Fluid Page

GroupBoxes

Generally, it’s a good idea to put all your non-grid images in groupboxes.  Apply styles to the groupbox to control where the image is going to be rendered on the page.  

Apply the styles to the page image object to control how the image will display. 

This is the groupbox containing the static image at the top of the page.

Image Object Page Controls

The basic properties control the height and width of the images in “em” measurements.   The delivered controls allow us to change the value from 1 to 15 em in integer increments.  

As a note, the {1-15} is not a CSS variable, but hardcoded options in the PSSTYLEDEF_FMODE stylesheet.  “psc_image-width3em” exists in the css, but “psc_image-width3.8em” does not.   If you require a finer control of sizes than integers, you will  have to create your own custom stylesheet.

Basic Height Controls

  • psc_image-height{1‐15}em
  • psc_imagemaxheight{1‐15}em
  • psc_imageheightauto

Basic Width Controls

  • psc_image-width{1‐15}em
  • psc_imagemaxwidth{1‐15}em
  • psc_imagemaxwidthauto

Most modern browsers, given only an image height or width, will display a proportionally correct image.  However, there are situations given previous style declarations where this may not work as expected.   The psc_imageheightauto and psc_imagewidthauto styles force the browser to render an image proportionately to the original image.

Skewing images

You can inadvertently skew an image if you specify width and height parameters that are not the same aspect ratio of the original image.  

This static image is a perfect circle.  However, we skewed the image by forcing unequal height and width size CSS styles.

Max Styles

Images are more easily reduced in size rather than increased.  Images enlarged past their native size often become pixelated and blurry.  The “max” styles allow us to display images at their native resolution up to a limit.   Any image that is larger than that limit is forced into the max size specified.

The psc_imagemaxheight{1‐15}em and psc_imagemaxwidth{1‐15}em allow the image to render at whatever the original size of the image up to a maximum limit.   This allows smaller images to display naturally.

This example shows the user uploaded images in the page grid to display no larger than 3em high.  The width is auto-calculated as per the height. 

Form Factor Overrides

Mobile device screen real-estate is precious. 

The “Form Factor Override” section on the page object properties Fluid tab allow us to display an image at a different size for different size screens or not at all.

Here is our desktop page rendering and our small factor image rendering of the same page:

The small form factor represents an iPhone.  

  • The static equipment image at the header is eliminated.
  • The user uploaded images display at half the size of the desktop.

Here are the Fluid Property Tabs that changed the rendering for the smaller form factor:

Appendix A: Delivered Fluid Image CSS

Style (From CSS Guide)Context CategorySub CategoryDescriptionExample
(all styles on the page field)
Page ExampleField #
ps_box-imgImageOutermost container for an Image page element.psc_padding-right0_5em
psc_float-left
ps_box-img
psc_label-suppressed
psc_image-width3em
psc_image-height3.8em
psc_padding-3px psc_border
TL_MSS_EMP_MAP_FLU38
ps-imgImageActual HTML Image tag used in pushbuttons, hyperlinks, and image controls.ps-img[Could not find an example in use in HCM PUM 38]
psc_image‐{1‐15}emLayoutImageSets width and height of an image to a specific em size, ranging from 1em to 15em incrementing by 1em.psc_image-2em
psc_display-inline
psc_padding-right1em
GPEE_PSLIPTILE_FLU65
psc_image-height{1‐15}emLayoutImageSets the height of an image.
Values range from 1em to 15em incremented by 1em.
psc_padding-right0_5em
psc_float-left
psc_image-width3em
psc_image-height3.8em
psc_padding-3px
psc_border
HR_DIRTEAM_EP_FLU84
psc_image-width{1‐15}emLayoutImageSets the width of an image.
Values range from 1em to 15em incremented by 1em.
psc_padding-right0_5em
psc_float-left
psc_image-width3em
psc_image-height3.8em
psc_padding-3px
psc_border
HR_DIRTEAM_EP_FLU84
psc_imagemaxheight{1‐15}emLayoutImageSets the MAXIMUM height of an image.
Values range from 1em to 15em incremented by 1em.
psc_image-maxheight2em[Could not find an example in use in HCM PUM 38]
psc_imagemaxwidth{1‐15}emLayoutImageSets the MAXIMUM width of an image.
Values range from 1em to 15em incremented by 1em.
psc_image-maxwidth2em[Could not find an example in use in HCM PUM 38]
psc_imageheightautoLayoutImageSets the height of an image to be automatic.
Use the size of the image assuming no other styling affects sizing
psc_image-heightauto[Could not find an example in use in HCM PUM 38]
psc_image‐widthautoLayoutImageSets the width of an image to be automatic.
Use the size of the image assuming no other styling  affects sizing.
psc_image-widthauto[Could not find an example in use in HCM PUM 38]
psc_imagemaxheightautoLayoutImageSets the MAXIMUM height of an image to be automatic (no maximum height).psc_image-maxheightauto[Could not find an example in use in HCM PUM 38]
psc_imagemaxwidthautoLayoutImageSets the MAXIMUM width of an image to be automatic (no maximum width).psc_image-maxwidthauto[Could not find an example in use in HCM PUM 38]
ps_box-staticimgStatic ImageOutermost container for a static image page element.ps_box-staticimg[Could not find an example in use in HCM PUM 38]
ps‐staticimgStatic ImageActual image HTML for a static image. This differs from other types of image tags, which are typically styled as ps‐img.ps-staticimg[Could not find an example in use in HCM PUM 38]
psc_tile-box-imgTileStyle applied to the tile image.
Applied to Groupbox containing image
psc_tile_content 
psc_tile_content-center
psc_tile-box-img
EP_MSS_TILE_FLU12
psc_tile_content-kpiimageTileStyling for Container of a KPI image within the content area.psc_tile_content-kpi-image[Could not find an example in use in HCM PUM 38]
psc_tile_livedata-imgTileImage style within live data area.psc_tile_livedata-imgPTGP_TILELVDAT_SBF5
psc_tile_livedatatrendimageTileImage used to show trend direction within livedata section.psc_tile_livedata-trendimage[Could not find an example in use in HCM PUM 38]
psc_tile-imgTileBasic style for tile content interior. There are two sections of a grouplet displayed in a tile.
This section (psc_tile_content), which contains the main content of the tile, and then there is the psc_tile_livedata section.
psc_tile-img
or
psc_tile-image
EP_MSS_TILE_FLU7
psc_backgroundtransparentVisualDisables any background image and sets the background color to transparent.
Applied to groupbox
psc_backgroundtransparentTL_WEEKLY_COPY_SBF12
psc_invisibleLayoutHiding buttons, page elementspsc_invisible psc_force-hiddenHCTS_JOB_INT1_FL80

Excel to Component Interface Utility

  To use the Excel to Component Interface utility, you must grant access to the iScript WEBLIB_SOAPTOCI in the permission list of the user w...