如何使用JCoFunction设置RFC结构化参数I_VALUE_DATA的内部字段值
如何在Java JCo中给RFC的结构化参数赋值?
从你提供的RFC结构来看,I_VALUE_DATA是一个结构化参数(内部包含E_DATA1字段),不能直接赋值字符串,需要通过JCoStructure来操作内部字段。
你的RFC结构
<z_atcws_t_test> <I_W_INFORMATION>str</I_W_INFORMATION> <I_VALUE_DATA> <E_DATA1>st</E_DATA1> </I_VALUE_DATA> </z_atcws_t_test>
原代码中的问题点
你当前直接给结构化参数赋值字符串的方式是错误的:
// Set the internal value here function.getImportParameterList().setValue("I_VALUE_DATA", "str");
正确的赋值方式
需要先获取结构化参数对应的JCoStructure对象,再操作其内部字段:
public static void TEST() throws JCoException{ String RFC_NAME = "TEST"; System.out.println(RFC_NAME); JCoDestination destination = JCoDestinationManager.getDestination(DestinationConcept.Destinations.TEST); JCoFunction function = destination.getRepository().getFunction(RFC_NAME); if (function == null) throw new RuntimeException(RFC_NAME + " not found in SAP."); try { JCoParameterList input = function.getImportParameterList(); // 给普通字符串参数赋值 input.setValue("I_W_INFORMATION", "str"); // 处理结构化参数I_VALUE_DATA JCoStructure valueDataStruct = input.getStructure("I_VALUE_DATA"); // 给结构内部的E_DATA1字段赋值 valueDataStruct.setValue("E_DATA1", "st"); function.setAbapClassExceptionMode(AbapClassException.Mode.FULL); function.execute(destination); } catch (AbapException e) { System.out.println(e); return; } catch (JCoException e) { System.out.println(e); return; } }
补充说明
getStructure方法返回的是参数列表中该结构的直接引用,所以修改结构内字段后无需再调用setValue放回,修改会直接生效。如果需要显式确认赋值,也可以加上input.setValue("I_VALUE_DATA", valueDataStruct);,结果一致。
内容的提问来源于stack exchange,提问作者Gustavo
相关产品推荐
相关产品推荐

