Using the SAP
System Connector
The SAP
System adapter for the
SAP Enterprise Portal 6.0 is a connector framework implementation based
on the J2EE Java Connectivity Architecture (JCA 1.0), the SAP RFC
library, and the SAP Java Connector (JCO). It enables connectivity
to SAP ERP systems, CRM
(Customer Relations Management) and BI (Business Intelligence).
The connector
framework has connection management. This overcomes a common problem
that occurs when using the JCo client service, where the developer hat
to take care about connection management himself. Therefore it is strongly
recommended not to use JCo client service any more and migrate existing
EP 5.0 applications that use the JCo client service to Connector
Framework.
The Connector
Framework BAPI Example in the PDK
See also
JCO Client Service
Prerequisites for
using a connector
Connector Gateway
Service
Example for a connection
to a SAP system using the
connector
gateway service:
IConnection connection = null;
try { // get the Connector Gateway Service
Object connectorservice = PortalRuntime.getRuntimeResources().getService( IConnectorService.KEY);
IConnectorGatewayService cgService =(IConnectorGatewayService) connectorservice;
if (cgService == null) {
response.write("Error in get Connector Gateway Service <br>");
}
try {
connection = cgService.getConnection(sapsystem, request);
} catch (Exception e) {
response.write("Connection to SAP system failed <br>");
}
if (connection == null) {
response.write("No connection <br>");
}
else {
response.write("Connection succesful");
}
} catch (Exception e) {
response.write("Exception occurred");
}
|
Executing a BAPI
Function
In the following
example we execute a BAPI function. The result is a returned RecordSet object. A RecordSet
object has a pointer that points to its current data row. Initially, the
pointer is positioned before the first row. The method next moves the pointer to the next row. If there
are no more rows, the method next returns false.
try {
// Get the Interaction interface for executing the command
IInteraction ix = connection.createInteractionEx();
// Get interaction spec and set the name of the command to run
IInteractionSpec ixspec = ix.getInteractionSpec();
// the well known example BAPI SALESORDER
String functionName = "BAPI_SALESORDER_GETLIST";
// Put Function Name into interaction Properties.
ixspec.setPropertyValue("Name", functionName);
// return structure
String function_out = "SALES_ORDERS";
RecordFactory rf = ix.getRecordFactory();
MappedRecord input = rf.createMappedRecord("input");
// put function input parameters
input.put("CUSTOMER_NUMBER", new String("0000001172"));
input.put("SALES_ORGANIZATION", new String("1000"));
MappedRecord output = (MappedRecord) ix.execute(ixspec, input);
Object rs = null;
try {
Object result = output.get(function_out);
if (result == null) {
rs = new String(" ");
} else if (result instanceof IRecordSet) {
rs = (IRecordSet) result;
}
// result object returned
else {
rs = result.toString();
}
} catch (Exception ex) {
printException(ex);
}
return rs;
} catch (Exception e) {
printException(e);
}
|
Connecting to an SAP
System on WebAS 6.20 without the Connector Service
You can connect to
a SAP system directly by providing the username and the
password, for example for testing purposes. The EISConnection can be initialized directly with JNDI
support.
// physical connection
IConnection mm_con = null;
//connection factory of the SAP connector to get the connection
IConnectionFactory connectionFactory;
Context initctx = null;
try {
//get the initial JNDI context
Hashtable env = null;
initctx =
new com.sapportals.portal.prt.jndisupport.InitialContext(env);
// perform JNDI lookup to get the connection factory
connectionFactory =
(IConnectionFactory) initctx.lookup("EISConnections/SAPFactory");
} catch (Exception e) {
}
try {
// retrieve the ConnectionSpec and set the values
IConnectionSpec spec = connectionFactory.getConnectionSpec();
/*
* set connection properties according to SAP JCO javadoc:
* static String[][] login_params = {
*{ "client" , "000" },
*{ "user" , "timtaylor" },
*{ "passwd" , "binford" },
*{ "language", "EN" },
*{ "ashost", "mymachine.mycompany.com"};
*...
*};
*/
// set properties
spec.setPropertyValue("client", "000");
spec.setPropertyValue("user", "timtaylor");
spec.setPropertyValue("passwd", "binford");
spec.setPropertyValue("lang", "EN");
spec.setPropertyValue("ashost", "myserver.mycompa??/Ad??Yd??Rny.corp");
spec.setPropertyValue("sysnr", "00");
// Retrieve the connection handle
mm_con = connectionFactory.getConnectionEx(spec);
mm_con.close();
} catch (Exception e) {
}
|
Connecting to an SAP
System on WebAS 6.40 without the Connector Service
The connector JDNI
name was changed from WebAS 6.20 to 6.40. In 6.20, as shown in the above
sample, look for "EISConnections/<connector_name>" to get a connector
factory instance.
When migrating code
with such a hard-coded look-up string to WebAS 6.40, the JNDI lookup name for
the connector needs to be changed to the following format:
deployedAdapters/<connector_name>/shareable/<connector_name>
For example:
...
...
...
try {
//get the initial JNDI context
Hashtable env = null;
initctx =
new com.sapportals.portal.prt.jndisupport.InitialContext(env);
// perform JNDI lookup to get the connection factory
connectionFactory =
(IConnectionFactory) initctx.lookup("deployedAdapters/SAPFactory/
shareable/SAPFactory for SAP connector");
deployedAdapters/SAPFactory/shareable/SAPFactory for SAP connector
...
...
...
|

It is highly
recommended that content developers use the portal connector gateway service,
as described above, to establish a connection to the back end. Code that uses
this service doesn't require any change when migrating to WebAS
6.40.
See also:
Using a JCO Client for
Several Portal Requests
Using the JDBC
Connector