ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)

2024-01-10 07:20

本文主要是介绍ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

 

Connecting to an external source via Java Connector
(By Bob Billings)
Overview... 1
1st. The Collective Search Help. 2
2nd. The Elementary Search Help. 3
3rd. The View that supports the Elementary Search Help. 3
4th. The SM59 transaction defining the RFC destination connection.4
5th. ABAP. 4
6th. JAVA.. 6
Overview
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.
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.
1st. The Collective Search Help
2nd. The Elementary Search Help
3rd. The View that supports the Elementary Search Help
4th. The SM59 transaction defining the RFC destination connection.
 
5th. ABAP
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 TYPE SHLP_DESCR_TAB_T
*"      RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*"     VALUE(SHLP) TYPE SHLP_DESCR_T
*"     VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*"----------------------------------------------------------------------
data: matnr like mara-matnr,
maktx like makt-maktx,
desc like makt-maktx,
recs_to_return like lfa1-bbsnr,
recs_returned like lfa1-bbsnr,
is_selopt    like DDSHSELOPT,
is_shlp_tab like 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,
matnr like mara-matnr,
maktx like 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) LIKE MAKT-MAKTG
*"     VALUE(MAX_LINES) LIKE LFA1-BBSNR
*" EXPORTING
*"     VALUE(COUNT) LIKE LFA1-BBSNR
*" TABLES
*"      RESULT_TAB STRUCTURE ZPM_RETURN
*"----------------------------------------------------------------------
ENDFUNCTION.


6th. JAVA
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();
        }
    }
url: http://www.erpgenie.com/sapgenie/docs/search%20help%20to%20java.doc
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述

这篇关于ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589995

相关文章

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程