A trace reveals this order:
Poll with this command:
<businessObject>Ice.Proxy.BO.ReportMonitorImpl</businessObject>
<methodName>GetRowsKeepIdleTimeWithBallonInfo</methodName>
...
<parameter name="whereClauseSysRptLst" type="System.String"><![CDATA[((PrintDriver='TEXT' AND (AutoAction='PRINT' OR AutoAction='PREVIEW')) OR (PrintDriver='CRYSTAL' AND (AutoAction='PRINT' OR AutoAction='AUTOPRT' OR AutoAction='PREVIEW' OR AutoAction='AUTOPRV')) OR (PrintDriver='EPIFIN' AND (AutoAction='PRINT' OR AutoAction='PREVIEW')) OR (PrintDriver='BARTENDER' AND (AutoAction='AUTOPRT' OR AutoAction='AUTOPRV')) OR (PrintDriver='EDI' AND AutoAction<>'') OR (PrintDriver='SSRS' AND (AutoAction='PREVIEW' OR AutoAction='PRINT') AND LastAction='SSRSREADY')) AND WorkStationID='WORKSTATION']]></parameter>
I would probably use a different whereClause to restrict to the report I’m looking for, and checking for errors.
Once the result set comes in they call:
<businessObject>Ice.Proxy.BO.ReportMonitorImpl</businessObject>
<methodName>Update</methodName>
It updates the Status to In Process then it grabs the report stream:
<businessObject>Ice.Proxy.BO.ReportMonitorImpl</businessObject>
<methodName>GetReportBytes</methodName>
<returnType>System.Byte[]</returnType>
Once you have your bytes, you save to a location of your choice.
Finally, call update again to change your status to Preview or Printed or whatever.