Connecting to an external source via Java Connector
(By Bob Billings)
In the process of SAP Order Entry (VA01) it became necessary to provide a “fuzzy” search help from an external source using the Java Connector for a material lookup. I.e. SAP does not store all the possible search options to return a material number. Additional searchable fields related to a material are maintained in an external system and we want to search on these fields.
ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
The way this was accomplished was through an Elementary search help that used the search help exit to connect via a remote function call to the Java Connector.The Elementary search help was then added to a Collective search help via the Included search help list and connected using the parameter assignment button.
Three code snippets follow:
  • The function call which accepts the request and processes the results,
  • the remote function which is merely a conduit to and from the remote destination, and
  • a part of the Java code that accepts input from SAP and returns an internal table of results.
ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)
The global data top include for the actual exit contains the following:
type-pools shlp.
type-pools f4typ."Brücke zu alten F4-Bausteinen
tables: ddshdefsh."Tabelle der Default-Suchhilfen
data %shlpname like dd30v-shlpname.
constants: par%domname like ddshfprop-fieldname value 'DOMNAME',
par%value like ddshfprop-fieldname value 'VALUE',
par%text like ddshfprop-fieldname value 'TEXT',
par%_low like ddshfprop-fieldname value'_LOW',
par%_high like ddshfprop-fieldname value'_HIGH',
par%_text like ddshfprop-fieldname value'_TEXT',
par%rollname like ddshfprop-fieldname value 'ROLLNAME',
par%tabname like ddshfprop-fieldname value 'TABNAME'.
Search help exit definition:
FUNCTION Z_F4_ZMAT_EXIT.
*"----------------------------------------------------------------------
*"*"Local interface:
*"TABLES
*" SHLP_TAB TYPESHLP_DESCR_TAB_T
*" RECORD_TAB STRUCTURESEAHLPRES
*"CHANGING
*" VALUE(SHLP) TYPESHLP_DESCR_T
*" VALUE(CALLCONTROL) LIKEDDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
data: matnr like mara-matnr,
maktx like makt-maktx,
desclike makt-maktx,
recs_to_return like lfa1-bbsnr,
recs_returnedlike lfa1-bbsnr,
is_selopt like DDSHSELOPT,
is_shlp_tablike line of shlp_tab,
is_interface like line of shlp_tab-interface.
data: begin of it_return occurs 0.
include structure ZPM_RETURN.
data: end of it_return.
data: begin of is_disp,
filler type char005,
matnrlike mara-matnr,
maktxlike makt-maktx,
end of is_disp.
data: is_return like line of it_return.
*************************************************************
Case callcontrol-step.
*************************************************************
when 'SELONE' or 'PRESEL1' or 'PRESEL' or 'DISP'.
exit.
when 'SELECT'.
clear: is_disp.
refresh: record_tab.
** Find the search item & number of lines to return
read table shlp_tab index 1 into is_shlp_tab.
read table is_shlp_tab-interface index 1 into is_interface.
if not is_interface-value is initial.
maktx = is_interface-value.
else.
read table shlp-selopt index 1 into is_selopt.
maktx = is_selopt-low.
endif.
recs_to_return = callcontrol-maxrecords.
** call dummy FM that is remotely enabled. The Java listener
** is looking for destination SAP_JAVA
CALL FUNCTION 'Z_RFC_TO_PM'
DESTINATION 'SAP_JAVA'
EXPORTING
MAKTG = maktx
max_lines = recs_to_return
IMPORTING
COUNT = recs_returned
TABLES
RESULT_TAB = it_return.
if recs_returned > 0.
** put the return table into search help display table
loop at it_return into is_return.
is_disp-matnr = is_return-matnr.
is_disp-maktx = is_return-maktx.
append is_disp to record_tab.
endloop.
else.
is_disp-matnr = '*************'.
is_disp-maktx = 'Nothing returned'.
append is_disp to record_tab.
endif.
callcontrol-step = 'DISP'.
exit.
when others.
exit.
endcase.
ENDFUNCTION.
** Remotely enabled function module
FUNCTION Z_RFC_TO_PM.
*"----------------------------------------------------------------------
*"*"Local interface:
*"IMPORTING
*" VALUE(MAKTG) LIKEMAKT-MAKTG
*" VALUE(MAX_LINES) LIKELFA1-BBSNR
*"EXPORTING
*" VALUE(COUNT) LIKELFA1-BBSNR
*"TABLES
*" RESULT_TAB STRUCTUREZPM_RETURN
*"----------------------------------------------------------------------
ENDFUNCTION.


This is the method in server class that handles incoming RFC calls:
public void handleRequest(JCO.Function pFunction) throws java.lang.Exception
{
String className = resolveClassName(pFunction.getName());
if (className != null)
{
IMethod method = (IMethod) Class.forName(className).newInstance();
method.execute(pFunction.getImportParameterList(),
pFunction.getExportParameterList(),
pFunction.getTableParameterList());
} else
{
//Throw JCO.AbapException if we don't handle Function.
throw new NotSupportedException();
}
}
And this one does the work:
public void execute(JCO.ParameterList pImportParameters,
JCO.ParameterList pExportParameters,
JCO.ParameterList pTableParameters) throws PMVSException
{
JCO.Table table = pTableParameters.getTable("RESULT_TAB");
String searchString = pImportParameters.getString("MAKTG");
int maxReturn = new Integer(pImportParameters.getString("MAX_LINES")).intValue();
try
{
ValuesCollection[] results = search(searchString, maxReturn);
if (results != null)
{
String count = "" + results.length;
pExportParameters.setValue(count, "COUNT");
for (int i = 0; i<results.length; i++)
{
DisplayAttrValue[] vals;
String partnum;
String desc;
//Get part num
vals = results[i].get("A-ManufacturerPartNumber");
partnum = vals.length > 0 ? vals[0].getDisplayString() : "null";
//Get description
vals = results[i].get("A-Description");
desc = vals.length > 0 ? vals[0].getDisplayString() : "null";
if (partnum.length() > 18)
{
partnum = partnum.substring(0,18);
}
if (desc.length() > 40)
{
desc = desc.substring(0,40);
}
table.appendRow();
table.setValue(partnum, "MATNR");
table.setValue(desc, "MAKTX");
}
pTableParameters.setValue(table, "RESULT_TAB");
} else
{
pExportParameters.setValue("0", "COUNT");
}
} catch (Exception exc)
{
exc.printStackTrace();
}
}

相关文章:

  • 2022-12-23
  • 2021-07-03
  • 2022-12-23
  • 2022-02-04
  • 2021-10-12
  • 2021-09-02
  • 2021-11-05
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-05-11
  • 2021-08-10
  • 2022-12-23
  • 2021-06-28
  • 2022-12-23
  • 2021-08-13
相关资源
相似解决方案