Você está na página 1de 4

PRINT DOCS

Local string &REPORT_DEFN_ID, &TMPLDEFN_ID;


Component Rowset &RO_XML;
Local XmlDoc &inXMLDoc;
Local boolean &ret;
Local string &str;
Local Rowset &Rs;
Local number &i;
Local string &Solution_Type;

&Rs = GetLevel0()(1).GetRowset(Scroll.TT_PRNT_DOC_VW);

For &i = 1 To &Rs.ActiveRowCount


If &Rs.GetRow(&i).GetRecord(Record.TT_PRNT_DOC_VW).GetField(Field.TT_MANDATORY).Value = "Y" Then
&REPORT_DEFN_ID = &Rs.GetRow(&i).GetRecord(Record.TT_PRNT_DOC_VW).GetField(Field.REPORT_DEFN_ID).Value;
&TMPLDEFN_ID = &Rs.GetRow(&i).GetRecord(Record.TT_PRNT_DOC_VW).GetField(Field.TMPLDEFN_ID).Value;
TT_Generate_Report(&REPORT_DEFN_ID, &TMPLDEFN_ID);
End-If;
End-For;

GENERATE REPORT
Function TT_Generate_Report(&ReportDefn_ID As string, &TemplateDefn_ID As string)

Evaluate &TemplateDefn_ID
When = "REPORTE_1"
&XMLReport = REPORTE_1 (“Diego”, “Cabot”, “Alem 1134”, “27123456”, “10-01-1979” );
Break;
When = "REPORTE_2"
&XMLReport = REPORTE_2 ();
Break;
When-Other
Error MsgGet(27200, 45, "Message not found.");
Break;
End-Evaluate;

TT_Publish_XML(&ReportDefn_ID, &TemplateDefn_ID, &XMLReport);


End-Function;
ARMA EL XML PARA POSTEARLO
Function REPORTE_1 (&Nombre As string, &Apellido As string, &Direccion As string, &DNI As string, &Fecha_Nac As string ) Returns XmlDoc
Local XmlDoc &OutXMLDoc;
&OutXMLDoc= CreateXmlDoc("<?xml version='1.0' encoding='UTF-8'?><DATOS_RBL/>");
&Node = &OutXMLDoc.DocumentElement.AddElement("NOMBRE");
&Node.NodeValue = String((&Nombre);
&Node = &OutXMLDoc.DocumentElement.AddElement("APELLIDO");
&Node.NodeValue = String(&Apellido);
&Node = &OutXMLDoc.DocumentElement.AddElement("DIRECCION");
&Node.NodeValue = String(&Direccion);
&Node = &OutXMLDoc.DocumentElement.AddElement("DNI");
&Node.NodeValue = String(&DNI);
&Node = &OutXMLDoc.DocumentElement.AddElement("FECHA_NAC");
&Node.NodeValue = String(&Fecha_Nac);
Return &OutXMLDoc ;
End-Function;

&Vec_Autos {Patente, Marca, Modelo}


Function REPORTE_2 (&DNI As string, &Nombre As string, &Apellido As string, &Direccion As string, &Fecha_Nac As string, &Vec_Autos As array of array of string ) Returns XmlDoc

&Node = &outXMLDoc.DocumentElement.AddElement("DNI");
&Node.NodeValue = String(&DNI);
&Node = &outXMLDoc.DocumentElement.AddElement("Nombre");
&Node.NodeValue = String(&Nombre);
&Node = &outXMLDoc.DocumentElement.AddElement("Apellido");
&Node.NodeValue = String(&Apellido);
/*ROWSET Autos*/
If &Vec_Autos [1].Len = 0 Then
&Vec_Autos = CreateArrayRept(CreateArrayRept("", 1), 32);
End-If;
For &k = 1 To &Vec_Autos [1].Len
&Node2 = &outXMLDoc.DocumentElement.AddElement("Autos");
&Node3 = &Node2.AddElement("Patente");
&Node3.NodeValue = &Vec_LifePolicy [1][&k];
&Node3 = &Node2.AddElement("Marca");
&Node3.NodeValue = &Vec_LifePolicy [2][&k];
&Node3 = &Node2.AddElement("Modelo");
&Node3.NodeValue = &Vec_LifePolicy [3][&k];
End-For;
/*ROWSET Autos*/
Return &outXMLDoc;
End-Function;

PUBLICA EL REPORTE
Function TT_Publish_XML(&ReportDefn_ID As string, &TemplateDefn_ID As string, &inXMLDoc As XmlDoc)
/* --> Set-Up variables */
Local XmlNode &Node;
Local string &outStr;
Local File &MYFILE;
Local string &sourcepath;
Local PSXP_RPTDEFNMANAGER:ReportDefn &oRptDefn;
Local PSXP_RPTDEFNMANAGER:TemplateFile &oTmplFile;
Local number &format;
Local date &Effdt;
Local string &sFileExt;
Local string &sDirSep, &sOutputDir;
Local string &sTmplFile;
Local string &sOutputFile;
Local string &sOutputFileXSL;
Local string &sErr;
Local boolean &bRtn;
Local PSXP_ENGINE:FOProcessor &oFOProcessor;
Local PSXP_ENGINE:RTFProcessor &oRTFProcessor;
Local PSXP_RPTDEFNMANAGER:Utility &oUtil;

/* get report definition object */


&oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&ReportDefn_ID);
&oRptDefn.Get();

/* --> Use directories splits: '/' */


&sDirSep = GetDirSeparator();

/* --> Use report extention type : 'rtf'


--> Server's Directoy: GetEnv */
&sOutputDir = GetEnv("PS_SERVDIR") | &sDirSep | "files" | &sDirSep | "XMLP" | &sDirSep | UuidGen();
CreateDirectory(&sOutputDir, %FilePath_Absolute);

/* Load XML into the Server */


&outStr = &inXMLDoc.GenXmlString();
&sourcepath = &sOutputDir | &sDirSep | &TemplateDefn_ID;
&MYFILE = GetFile(&sourcepath, "W", "UTF8", %FilePath_Absolute);
&MYFILE.WriteLine(&outStr);
&MYFILE.Close();

/* --> Generación de la salida del reporte */


&oFOProcessor = create PSXP_ENGINE:FOProcessor();
&oFOProcessor.Locale = GetLocaleCode(%Language_User);

/* Take effdt from report */


SQLExec("SELECT Max(EFFDT) FROM PSXPRPTTMPLF_VW WHERE REPORT_DEFN_ID = :1 AND TMPLDEFN_ID = :2", &ReportDefn_ID, &TemplateDefn_ID, &Effdt);

/* --> Se toma el Template cargado en la parametría */


&oTmplFile = &oRptDefn.GetTemplate(&TemplateDefn_ID).GetTemplateFile(&Effdt);
&sTmplFile = &oTmplFile.GetFile();
/* --> &sOutputFile: File rtf's name
--> &sOutputFileXSL: File xsl's name */
&sFileExt = "pdf";
&sOutputFile = &sOutputDir | &sDirSep | Split(GetFileNameFromPath(&sTmplFile), ".")[1] | "_pvw." | &sFileExt;
&sOutputFileXSL = &sOutputDir | &sDirSep | Split(GetFileNameFromPath(&sTmplFile), ".")[1] | "_pvw.xsl";

/* --> Generate the XSL with Template taking into account the input parameters */
&oRTFProcessor = create PSXP_ENGINE:RTFProcessor();
If &oRTFProcessor.generateXSL(&sTmplFile, &sOutputFileXSL, &sErr) = False Then
Error ("Error generating the XSL File");
End-If;

/* --> Generate the report output in order to show it into a new windows */

/*rtf=1 pdf=2 html=3 eXCELL= 4 */


If Not &oFOProcessor.generateOutput(&sOutputFileXSL, &sourcepath, "", &sOutputFile, 2, &sErr) Then
Error MsgGet(235, 2309, "Error generating report output: %1", &sErr);
End-If;

/* This commit is neccesary to show the output file */


CommitWork();

/* Take the generating report using PSXP_RPTDEFNMANAGER librery */


&oUtil = create PSXP_RPTDEFNMANAGER:Utility();
&bRtn = &oUtil.zipAndViewAttachment(&sOutputFile);

/*Clean temporal directory*/


RemoveDirectory(&sOutputDir, %FilePath_Absolute + %Remove_Subtree);

End-Function;

Você também pode gostar