cancel
Showing results for 
Search instead for 
Did you mean: 

How to define nested structures in MetaData Objects ?

Former Member
0 Kudos

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);

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

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.