on 07-01-2005 10:16 AM
We have a problem with nested structures. How do you define them in a MetaData object ?
Take the following sample : ZCD_REMOTE_HEADER_IN_S is the IMPORT_PARAMETER structure.
Within ZCD_REMOTE_HEADER_IN_S there is a field named DTB_KNL_KD. This field should be a ZCD_KNT_DATA structure. Again there is another structure within ZCD_KNT_DATA : field REF_NR -> structure ZCD_REF_NR.
We can't find documentation, samples,... on how to define this.
We've tried several ways to achieve this, but we always got an exception when execution the function : either a NullPointerException or a com.sap.mw.jco.JCO$Exception: (104) RFC_ERROR_SYSTEM_FAILURE: RFC_ERROR_SYSTEM_FAILURE
In a JCo trace following line is being logged :
[JNI-LAYER] RFC.nativeExecute() after RfcCallReceive(2,"ZCD_GET_AFSCHERMNR_NC_1",26984010,269851A0,26985C50,273CFB18) = RFC_INVALID_PARAMETER
When we retrieve the actual metadata dynamically from SAP and dump it to an html page this is the result : http://users.skynet.be/fa853258/function.html
//------------------------------------------------------------------------------
// Add SubStructure MetaData: 'ZCD_REF_NR'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_REF_NR_meta = new JCO.MetaData("ZCD_REF_NR");
s_ZCD_REF_NR_meta.addInfo("CREA_DT", JCO.TYPE_CHAR, 6, 0, 0);
s_ZCD_REF_NR_meta.addInfo("CTR_NR", JCO.TYPE_CHAR, 4, 6, 0);
s_ZCD_REF_NR_meta.addInfo("KLAS_KD", JCO.TYPE_CHAR, 1, 10, 0);
s_ZCD_REF_NR_meta.addInfo("ARCH_KD", JCO.TYPE_CHAR, 1, 11, 0);
s_ZCD_REF_NR_meta.addInfo("VLG_NR", JCO.TYPE_CHAR, 3, 12, 0);
s_ZCD_REF_NR_meta.addInfo("AARD_KD", JCO.TYPE_CHAR, 1, 15, 0);
repository.addStructureDefinitionToCache(s_ZCD_REF_NR_meta);
//------------------------------------------------------------------------------
// Add SubStructure MetaData: 'ZCD_KNT_DATA'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_KNT_DATA_meta = new JCO.MetaData("ZCD_KNT_DATA");
s_ZCD_KNT_DATA_meta.addInfo("BHK_CTR_NR", JCO.TYPE_CHAR, 4, 0, 0);
s_ZCD_KNT_DATA_meta.addInfo("SEC_CTR_NR", JCO.TYPE_CHAR, 4, 4, 0);
s_ZCD_KNT_DATA_meta.addInfo("KLN_NR", JCO.TYPE_CHAR, 7, 8, 0);
s_ZCD_KNT_DATA_meta.addInfo("REF_NR", JCO.TYPE_STRUCTURE, 16, 15, 0); // ???????????????????
s_ZCD_KNT_DATA_meta.addInfo("BEV_NIV_KD", JCO.TYPE_CHAR, 2, 31, 0);
s_ZCD_KNT_DATA_meta.addInfo("FILLER", JCO.TYPE_CHAR, 17, 33, 0);
repository.addStructureDefinitionToCache(s_ZCD_KNT_DATA_meta);
//------------------------------------------------------------------------------
// Add Structure MetaData: 'ZCD_REMOTE_HEADER_IN_S'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_REMOTE_HEADER_IN_S_meta = new JCO.MetaData("ZCD_REMOTE_HEADER_IN_S");
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("REQ_DS", JCO.TYPE_CHAR, 26, 0, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("REQ_ID", JCO.TYPE_CHAR, 28, 26, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN1", JCO.TYPE_CHAR, 13, 54, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("DTB_KNL_KD", JCO.TYPE_STRUCTURE, 2, 67, 0); // ???????????????????
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("SOFT_PAK_KD", JCO.TYPE_CHAR, 4, 69, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("HFD_PGM_NM", JCO.TYPE_CHAR, 8, 73, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("LOG_TPS_KD", JCO.TYPE_CHAR, 8, 81, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("FNK_KD", JCO.TYPE_CHAR, 2, 89, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("MFS_KD", JCO.TYPE_CHAR, 1, 91, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("VNS_NR", JCO.TYPE_CHAR, 4, 92, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("GEBR_KD", JCO.TYPE_CHAR, 20, 96, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("TAAL_KD", JCO.TYPE_CHAR, 1, 116, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("VERS_NR", JCO.TYPE_CHAR, 1, 117, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN2", JCO.TYPE_CHAR, 49, 118, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("DTB_KNL_VAR_ZN", JCO.TYPE_STRUCTURE, 50, 167, 0); // ???????????????????
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN3", JCO.TYPE_CHAR, 50, 217, 0);
repository.addStructureDefinitionToCache(s_ZCD_REMOTE_HEADER_IN_S_meta);
You need to specify the structure-definition as an metadata-object:
//------------------------------------------------------------------------------
// Add SubStructure MetaData: 'ZCD_REF_NR'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_REF_NR_meta = new JCO.MetaData("ZCD_REF_NR");
s_ZCD_REF_NR_meta.addInfo("CREA_DT", JCO.TYPE_CHAR, 6, 0, 0);
s_ZCD_REF_NR_meta.addInfo("CTR_NR", JCO.TYPE_CHAR, 4, 6, 0);
s_ZCD_REF_NR_meta.addInfo("KLAS_KD", JCO.TYPE_CHAR, 1, 10, 0);
s_ZCD_REF_NR_meta.addInfo("ARCH_KD", JCO.TYPE_CHAR, 1, 11, 0);
s_ZCD_REF_NR_meta.addInfo("VLG_NR", JCO.TYPE_CHAR, 3, 12, 0);
s_ZCD_REF_NR_meta.addInfo("AARD_KD", JCO.TYPE_CHAR, 1, 15, 0);
repository.addStructureDefinitionToCache(s_ZCD_REF_NR_meta);
//------------------------------------------------------------------------------
// Add SubStructure MetaData: 'ZCD_KNT_DATA'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_KNT_DATA_meta = new JCO.MetaData("ZCD_KNT_DATA");
s_ZCD_KNT_DATA_meta.addInfo("BHK_CTR_NR", JCO.TYPE_CHAR, 4, 0, 0);
s_ZCD_KNT_DATA_meta.addInfo("SEC_CTR_NR", JCO.TYPE_CHAR, 4, 4, 0);
s_ZCD_KNT_DATA_meta.addInfo("KLN_NR", JCO.TYPE_CHAR, 7, 8, 0);
s_ZCD_KNT_DATA_meta.addInfo("REF_NR", JCO.TYPE_STRUCTURE, 16, 15, 0<b>, 0, s_ZCD_REF_NR_meta</b>); // !!!!!!!!!!!!!!!
s_ZCD_KNT_DATA_meta.addInfo("BEV_NIV_KD", JCO.TYPE_CHAR, 2, 31, 0);
s_ZCD_KNT_DATA_meta.addInfo("FILLER", JCO.TYPE_CHAR, 17, 33, 0);
repository.addStructureDefinitionToCache(s_ZCD_KNT_DATA_meta);
//------------------------------------------------------------------------------
// Add Structure MetaData: 'ZCD_REMOTE_HEADER_IN_S'
//------------------------------------------------------------------------------
JCO.MetaData s_ZCD_REMOTE_HEADER_IN_S_meta = new JCO.MetaData("ZCD_REMOTE_HEADER_IN_S");
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("REQ_DS", JCO.TYPE_CHAR, 26, 0, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("REQ_ID", JCO.TYPE_CHAR, 28, 26, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN1", JCO.TYPE_CHAR, 13, 54, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("DTB_KNL_KD", JCO.TYPE_STRUCTURE, <b>50</b>, 67, 0<b>, 0, s_ZCD_KNT_DATA_meta</b>); // !!!!!!!!!!!!!!!!!!!!
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("SOFT_PAK_KD", JCO.TYPE_CHAR, 4, 69, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("HFD_PGM_NM", JCO.TYPE_CHAR, 8, 73, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("LOG_TPS_KD", JCO.TYPE_CHAR, 8, 81, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("FNK_KD", JCO.TYPE_CHAR, 2, 89, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("MFS_KD", JCO.TYPE_CHAR, 1, 91, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("VNS_NR", JCO.TYPE_CHAR, 4, 92, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("GEBR_KD", JCO.TYPE_CHAR, 20, 96, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("TAAL_KD", JCO.TYPE_CHAR, 1, 116, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("VERS_NR", JCO.TYPE_CHAR, 1, 117, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN2", JCO.TYPE_CHAR, 49, 118, 0);
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("DTB_KNL_VAR_ZN", JCO.TYPE_STRUCTURE, 50, 167, 0); // ???????????????????
s_ZCD_REMOTE_HEADER_IN_S_meta.addInfo("RSV_ZN3", JCO.TYPE_CHAR, 50, 217, 0);
repository.addStructureDefinitionToCache(s_ZCD_REMOTE_HEADER_IN_S_meta);
Furthermore the length parameter must be of the length of the structure. But I did not fix this correctly. Please recalculate that.
It should do than.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
84 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.