Hi All,
Most of us tend to find the Answer for this Question "How to I execute Connected Query XMLP report through Peoplecode or AE Peoplecode?"
Here it is, what you are seeking for,
Please mark a comment below, if you need any clarity..
Most of us tend to find the Answer for this Question "How to I execute Connected Query XMLP report through Peoplecode or AE Peoplecode?"
Here it is, what you are seeking for,
import PSXP_RPTDEFNMANAGER:ReportDefn;
import PT_CONQRS:QUERYITEMPROMPT:*;
import PT_CONQRS:CONQRSMGR:*;
Global string &BU, &Invoice;
Local array of PT_CONQRS:QUERYITEMPROMPT &prompts;
Local File &xmlFile;
&reportDefinition = "XX_CONNQRY";
&connQueryName = "BI_INV_PRNT_CQRY_V1";
/* Start by creating the Connected Query Object */
&connQueryObject = create PT_CONQRS:CONQRSMGR("", &connQueryName);
If Not (&connQueryObject.Open( False)) Then
/* If it can't be opened, throw an error */
Error ("Failed to open Connected Query.");
End-If;
If Not (&connQueryObject.Validate()) Then
/* Validate that all PSQueries within the Connected Query Exist */
Error ("Unable to validate Connected Query.");
End-If;
/* Can only be executed in Online pages */
<*If Not &connQueryObject.SetRunControlData("", False, False) Then
Warning "Unable to set the RunControl Data for Connected Query";
End-If;*>
&prompts = &connQueryObject.QueriesPromptsArray;
/* This will return an Array of Records with the prompts for each Query within the Connected Query */
&promptRecord = &prompts [1].QueryPromptRecord;
/* Set the key fields */
&promptRecord.BUSINESS_UNIT.Value = &BU;
&promptRecord.INVOICE.Value = &Invoice;
/* Run the Connected Query to a String object */
&xmlString = &connQueryObject.RunToXMLFormattedString(&prompts);
/* However, since it is "formatted" XML Publisher will insert Carriage Return and Line Feeds in the report.
* We have to strip these out */
&xmlString = Substitute(&xmlString, Char(13), ""); /*13 = Carriage Return */
&xmlString = Substitute(&xmlString, Char(10), "");/*10 = Line Feed*/
&xmlString = Substitute(&xmlString, Char(9), ""); /*9 = Tab*/
/* Now that the string is without formatting, write it out to an XML file.
* Make sure to use a unique filename here, just in case it's ran from multiple locations */
&xmlFileName = &connQueryName | "_" | &BU | "_" | &Invoice | ".xml";
&xmlFile = GetFile(&xmlFileName, "W");
&xmlFile.WriteString(&xmlString);
&xmlFilePath = &xmlFile.Name;
/* Might be useful for Opening the XML File */
&xmlFile.Close();
/* Now it's time for XML Publisher to do it's work. Create the Report Definition Object and Get() the report*/
&reportDefnObject = create PSXP_RPTDEFNMANAGER:ReportDefn(&reportDefinition);
&reportDefnObject.Get();
/* Set this if you want the output file with Dynamic Name (filetype is not required) */
&OutputFile = &BU | "_" | &Invoice;
&reportDefnObject.ReportFileName = &OutputFile;
/* Since the Report Definition's Data Source is an XML file, we can pass in the file we created at runtime */
&reportDefnObject.SetRuntimeDataXMLFile("C:\temp\" | &xmlFileName);
/* Process the report, thus running XML Publisher against the XML file that was created from the Connected Query */
&reportDefnObject.ProcessReport("", "", %Date, "PDF");
/* Execute this if you are in AE to publish output in Report Manager */
&reportDefnObject.Publish("", "", "", &ProcessInstance);
/* Use the DisplayOutput() to open Output Directly */
/* &reportDefnObject.DisplayOutput(); */
/* Now to clean up the file on the App Server, don't want any junk lying around out there.
* If you need to look at the file for debugging purposes, obviously comment this out.
* The file, by default, is placed on the $PS_HOME/appserv//files directory */
&xmlFile = GetFile(&xmlFileName, "W");
&xmlFile.Delete();
Please mark a comment below, if you need any clarity..
A Connected Query gives me no Report, When run via a runcontrol page, but works fine in BI Query Report Scheduler page . Why ?
ReplyDeleteParent query %1 returned no rows. (241,248) PT_CONQRS.CONQRSMGR.OnExecute Name:Run PCPC:22632 Statement:531
Hi,
DeleteMake sure you are binding the run control parameters to the query prompts before executing the Query through PeopleCode.
And also verify that parent and child keys are properly mapped.
Thanks,
does every child/sibling query must have prompts as with the parent query? I have parent query with prompts but not the child and siblings. Child and siblings are tied with mapped fields. Query output is perfect when run via the scheduler or the viewer but running with PeopleCode on the app server returns error message that parent query doesn't return any data. Suggestions, please?
ReplyDelete