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