SAP 接口 普通参数 表参数 扁平结构参数
最近为SAP的接口开发调测伤透,项目进度再急,也有必要整理下笔记。
1.SAP接口文档
接口中有三种类型的参数:a. 字符串参数 ; b.表参数; c.扁平结构参数 (SAP术语,个人认为可以理解为在java数据交互中常用的view对象,按照一定表结构初始化的伪表对象,为方便数据组装和流转)
接口名: ZINDEX_LLD_CREATE
输入参数:
SI_HEAD ZLLD_HEAD 领料单抬头
输入表: TI_ITEM ZLLD_ITEM 领料单明细
输出参数:
O_LLDNO 领料单号码
SO_HEAD ZLLD_HEAD
O_OK 成功标识
输出表: TO_ITEM ZLLD_ITEM 领料单明细
TO_ERROR 错误消息
ZLLD_HEAD
LLDNO CHAR 10 0 领料单号
LLDTY CHAR 1 0 领料单类型
LLDTR CURR 13 2 领料单金额
LLDAR CURR 13 2 领料单过账金额
SO CHAR 1 0 销售订单
WO CHAR 1 0 生产订单
CO CHAR 1 0 成本中心
JOBNO CHAR 35 0 工作令号
WERKS CHAR 4 0 工厂
AUFNR CHAR 12 0 订单号
VBELN CHAR 10 0 销售和分销凭证号
2.字符串参数及表参数的传参接参方式
sapConn = createConn();
if(sapConn.isAlive())
log.info("SAP连接成功!");
JCO.Function fun = createFunction(sapConn, rfcFunName);
JCO.ParameterList inputList = fun.getImportParameterList();
inputList.setValue((String) params.get("jobNum"), "I_JOBNO"); //jobNum 工作令号
inputList.setValue((String) params.get("ipAddress"), "I_IPADDRESS"); //ipAddress IP地址
inputList.setValue((String) params.get("pcName"), "I_COMPUTER"); //pcName 计算机名
inputList.setValue((String) params.get("userName"), "I_USERNAME"); //userName 用户名
inputList.setValue((String) params.get("proNum"), "I_VERSION"); //proNum 程序版本号
List
JCO.Table quotaData = fun.getTableParameterList().getTable(inputTableName);
for(int i = 0; i < quotaList.size(); i++){
WeldQuotaInfo weldQuotaInfo = quotaList.get(i);
quotaData.appendRow();
quotaData.setRow(i);
quotaData.setValue(weldQuotaInfo.getJobNum(), "KDMAT");
quotaData.setValue(weldQuotaInfo.getGapCode(), "WLDNO");
quotaData.setValue(weldQuotaInfo.getMatCode(), "MATNR");
quotaData.setValue(weldQuotaInfo.getWeldMatName(), "WLDNA");
quotaData.setValue(weldQuotaInfo.getWeldMaterial(), "WLDME");
quotaData.setValue(weldQuotaInfo.getMatSize(), "GUIGE");
quotaData.setValue(weldQuotaInfo.getQuotaCount(), "MENGE_DE");
quotaData.setValue(weldQuotaInfo.getWeldMatDesc(), "MAKTX");
}
try{
sapConn.execute(fun);
JCO.ParameterList outputList = fun.getExportParameterList();
if(null != outputList){
log.info("outputList=" + outputList.toString());
}
result = outputList.getString("E_FLAG");
}catch(Exception ex){
log.error("执行RFC函数异常!函数名:" + rfcFunName);
}finally{
closeConn();
}
return result;
3.难点---扁平结构参数处理
总结:主要难在第一次处理,不知道对于所谓扁平结构怎么入参,尝试过getImportParameterList(),getTableParameterList()皆不可。
我知道入参SI_HEAD对应的结构为ZLLD_HEAD,所以尝试构造一个JCO.MetaData结合JCO.createTable处理,如下
JCO.MetaData jcoMetaComp = new JCO.MetaData(parTableName);
jcoMetaComp.addInfo("ZLLD_HEAD",JCO.TYPE_CHAR,21,0,0);
JCO.Table jcoTable = JCO.createTable(jcoMetaComp);
parDate.setValue((String) billHeadMap.get("LLDTY"), "LLDTY");
parDate.setValue((String) billHeadMap.get("JOBNO"), "JOBNO");
JCO.ParameterList inputList = fun.getImportParameterList();
inputList .setTableParameterList(jcoTable );
多番尝试还是失败,于是寻来SAP接口代码研究。摘录如下:
function zindex_lld_create.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(SI_HEAD) LIKE ZLLD_HEAD STRUCTURE ZLLD_HEAD
*" EXPORTING
*" REFERENCE(O_OK) TYPE CHAR1
*" REFERENCE(O_LLDNO) TYPE ZLLDNO
*" VALUE(SO_HEAD) TYPE ZLLD_HEAD
*" TABLES
*" TI_ITEM STRUCTURE ZLLD_ITEM
*" TO_ITEM STRUCTURE ZLLD_ITEM OPTIONAL
*" TO_ERROR STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
tables: marc.
data: l_lldno like zlld_head-lldno.
data: l_short(1).
data: gt_index like zhjindex occurs 0 with header line.
********* check data *********
refresh: to_error,to_item.
clear: to_error,to_item.
move si_head to zlld_head.
to_item = ti_item.
zlld_head-source = 'GY'.
zlld_head-lldty = 'HC'.
zlld_head-stats = '1'.
zlld_head-prntx = 'X'.
* zlld_head-gy = 'X'.
* zlld_head-gz = 'X'.
* CLEAR zlld_head-sg.
发现亮点两处
IMPORTING
*" REFERENCE(SI_HEAD) LIKE ZLLD_HEAD STRUCTURE ZLLD_HEAD
move si_head to zlld_head.
我看到了构造器 STRUCTURE ,以及SI_HEAD和ZLLD_HEAD之间的关系。
于是在JCO中寻找适合的对象,简略若干,最终可行代码如下:
public List
---------------------
作者:-飞奔的小蜗牛-
来源:CSDN
原文:https://blog.csdn.net/cicada688/article/details/9359249
版权声明:本文为博主原创文章,转载请附上博文链接!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
