1+ package com .genexus .sap ;
2+
3+ import com .genexus .ModelContext ;
4+ import com .sap .conn .jco .JCoException ;
5+
6+ import com .sap .conn .jco .JCoMetaData ;
7+ import com .sap .conn .jco .JCoRecordMetaData ;
8+ import com .sap .conn .jco .server .JCoServer ;
9+ import com .sap .conn .jco .server .DefaultServerHandlerFactory ;
10+
11+ import com .sap .conn .jco .server .JCoServerFactory ;
12+ import com .sap .conn .jco .JCoCustomRepository ;
13+ import com .sap .conn .jco .JCoFunctionTemplate ;
14+ import com .sap .conn .jco .JCoListMetaData ;
15+ import com .sap .conn .jco .JCo ;
16+ import com .genexus .diagnostics .Log ;
17+
18+ public class DocumentReceiver
19+ {
20+ private static final int BLOB_LENGTH = 1022 ;
21+ private String serverName = "" ;
22+ private String repositoryName = "" ;
23+ private ModelContext _context = null ;
24+ JCoServer receiver = null ;
25+
26+
27+ public DocumentReceiver (String server , String repository , ModelContext context )
28+ {
29+ this .serverName = server ;
30+ this .repositoryName = repository ;
31+ this ._context = context ;
32+ }
33+
34+ public void start ()
35+ {
36+ Log .info ("GX SAP - DMS Receiver Start " + serverName + " " + repositoryName );
37+ try {
38+ receiver = setupServerDownload (serverName , repositoryName );
39+ receiver .start ();
40+ }
41+ catch (JCoException ex )
42+ {
43+ Log .error ("GX SAP - Error Starting " + ex .toString ()) ;
44+ }
45+ }
46+
47+ public void stop ()
48+ {
49+
50+ String receiverName = "" ;
51+ if (serverName == null || serverName .equals ("" ))
52+ {
53+ Object receiverObj = _context .getContextProperty ("SAPReceiverServerName" );
54+ if (receiverObj != null )
55+ {
56+ receiverName = (String )receiverObj ;
57+ }
58+ }
59+ else
60+ {
61+ receiverName = serverName ;
62+ }
63+
64+ try {
65+ if (!receiverName .equals ("" ))
66+ {
67+ receiver = JCoServerFactory .getServer (receiverName );
68+ if (receiver != null ) receiver .stop ();
69+ Log .info ("GX SAP - DMS Receiver stop " + receiverName );
70+ }
71+ else
72+ {
73+ Log .error ("GX SAP - Error Stopping receiver." );
74+ }
75+ }
76+ catch (JCoException ex )
77+ {
78+ Log .error ("GX SAP - Error Stopping " + ex .toString ()) ;
79+ }
80+
81+ }
82+
83+ public JCoServer setupServerDownload (String serverName , String repositoryName ) throws JCoException
84+ {
85+ JCoServer server = JCoServerFactory .getServer (serverName );
86+ JCoCustomRepository repo = JCo .createCustomRepository (repositoryName );
87+ JCoListMetaData imports , exports , tables ;
88+ JCoFunctionTemplate FTP_R3_TO_CLIENT ;
89+
90+ imports = JCo .createListMetaData ("IMPORTING" );
91+ imports .add ("FNAME" , JCoMetaData .TYPE_CHAR , 256 , 512 , JCoListMetaData .IMPORT_PARAMETER );
92+ imports .add ("LENGTH" , JCoMetaData .TYPE_INT , 4 , 4 , JCoListMetaData .IMPORT_PARAMETER );
93+ imports .add ("MODE" , JCoMetaData .TYPE_CHAR , 1 , 2 , JCoListMetaData .IMPORT_PARAMETER | JCoListMetaData .OPTIONAL_PARAMETER );
94+ imports .lock ();
95+
96+ exports = JCo .createListMetaData ("EXPORTING" );
97+ exports .add ("ERROR" , JCoMetaData .TYPE_INT , 4 , 4 , JCoListMetaData .EXPORT_PARAMETER );
98+ exports .add ("LENGTH" , JCoMetaData .TYPE_INT , 4 , 4 , JCoListMetaData .EXPORT_PARAMETER );
99+ exports .lock ();
100+
101+ JCoRecordMetaData tabLine = JCo .createRecordMetaData ("BLOB" );
102+ tabLine .add ("LINE" , JCoMetaData .TYPE_BYTE , BLOB_LENGTH , 0 , BLOB_LENGTH , 0 );
103+ tabLine .lock ();
104+ tables = JCo .createListMetaData ("TABLES" );
105+ tables .add ("BLOB" , JCoMetaData .TYPE_TABLE , tabLine , 0 );
106+ tables .lock ();
107+
108+ FTP_R3_TO_CLIENT = JCo .createFunctionTemplate ("FTP_R3_TO_CLIENT" , imports , exports , null , tables , null );
109+ repo .addFunctionTemplateToCache (FTP_R3_TO_CLIENT );
110+ server .setRepository (repo );
111+
112+ DefaultServerHandlerFactory .FunctionHandlerFactory handlerFactory = new DefaultServerHandlerFactory .FunctionHandlerFactory ();
113+ handlerFactory .registerHandler ("FTP_R3_TO_CLIENT" , new DocumentClient .FTP_R3_TO_CLIENTHandler ());
114+ server .setCallHandlerFactory (handlerFactory );
115+
116+ DocumentClient .ErrorHandler hdl = new DocumentClient .ErrorHandler ();
117+ server .addServerErrorListener (hdl );
118+ server .addServerExceptionListener (hdl );
119+
120+ return server ;
121+ }
122+
123+ }
0 commit comments