📄 jco.java
字号:
execute(client, function);
int num_rows = fields.getNumRows();
meta = new MetaData(name, num_rows);
meta.setTabLength(exp.getInt(0));
for(int irow = 0; irow < num_rows; irow++)
{
String stype = fields.getString(6);
int ptype = JCO.getJCOType(stype.length() <= 0 ? ' ' : stype.charAt(0));
meta.addInfo(fields.getString(1), ptype, fields.getInt(4), fields.getInt(3), fields.getInt(5));
fields.nextRow();
}
fields.firstRow();
queryStructureInterfaceEpilog(client, meta, fields);
} else
if(version >= 400 && version < 462)
{
imp.appendValue("TABNAME", 0, 30, name);
imp.appendValue("ALL_TYPES", 0, 1, "X");
Structure x030l_wa = JCO.createStructure(x030l_v4);
exp.appendValue("X030L_WA", x030l_wa);
Structure dfies_wa = JCO.createStructure(dfies_v4);
exp.appendValue("DFIES_WA", dfies_wa);
dfies_wa.setValue("", 0);
Table dfies_tab = JCO.createTable(dfies_v4);
tab.appendValue("DFIES_TAB", dfies_tab);
function = new Function("DDIF_FIELDINFO_GET", imp, exp, tab);
execute(client, function);
int num_rows = dfies_tab.getNumRows();
if(num_rows == 0)
{
imp.setValue(dfies_wa.getString(6), 0);
execute(client, function);
}
num_rows = dfies_tab.getNumRows();
meta = new MetaData(name, num_rows);
meta.setTabLength(x030l_wa.getInt(4));
for(int irow = 0; irow < num_rows; irow++)
{
String stype = dfies_tab.getString(13);
int ptype = JCO.getJCOType(stype.length() <= 0 ? ' ' : stype.charAt(0));
meta.addInfo(dfies_tab.getString(1), ptype, dfies_tab.getInt(9), dfies_tab.getInt(4), dfies_tab.getInt(11), null, dfies_tab.getString(27), 0, null, null);
dfies_tab.nextRow();
}
dfies_tab.firstRow();
queryStructureInterfaceEpilog(client, meta, dfies_tab);
} else
if(version >= 462)
{
imp.appendValue("TABNAME", 0, unicode_factor * 30, name);
imp.appendValue("ALL_TYPES", 0, unicode_factor * 1, "X");
Structure x030l_wa;
Structure dfies_wa;
Table lines_descr;
Table dfies_tab;
if(version < 500)
{
IMetaData metatyp = x030l_v4;
x030l_wa = JCO.createStructure(metatyp);
dfies_wa = JCO.createStructure(dfies_v5);
lines_descr = JCO.createTable(ddtypelist_v5);
dfies_tab = JCO.createTable(dfies_v5);
} else
if(!is_unicode)
{
IMetaData metatyp = x030l_v5;
x030l_wa = JCO.createStructure(metatyp);
dfies_wa = JCO.createStructure(dfies_v5);
lines_descr = JCO.createTable(ddtypelist_v5);
dfies_tab = JCO.createTable(dfies_v5);
} else
{
IMetaData metatyp = x030l_v6u;
x030l_wa = JCO.createStructure(metatyp);
dfies_wa = JCO.createStructure(dfies_v6u);
lines_descr = JCO.createTable(ddtypelist_v6u);
dfies_tab = JCO.createTable(dfies_v6u);
}
exp.appendValue("X030L_WA", x030l_wa);
exp.appendValue("DFIES_WA", dfies_wa);
exp.appendValue("DDOBJTYPE", 0, unicode_factor * 31, (String)null);
exp.appendValue("LINES_DESCR", lines_descr);
tab.appendValue("DFIES_TAB", dfies_tab);
function = new Function("DDIF_FIELDINFO_GET", imp, exp, tab);
execute(client, function);
meta = new MetaData(name);
if(x030l_wa.getString(8).equals("L"))
if(lines_descr.getNumRows() == 1)
{
dfies_tab = lines_descr.getTable(2);
meta.type_name = lines_descr.getString(0);
} else
if(dfies_tab.getNumRows() == 0)
dfies_tab.copyFrom(dfies_wa);
byte flag3 = x030l_wa.getByteArray(13)[0];
boolean isNestedType1 = (flag3 & 1) != 0 && (flag3 & 2) == 0;
meta.setTabLength(x030l_wa.getInt(4));
meta.type1_data = isNestedType1 ? meta. new MetaData.Type1Data() : null;
meta = constructMetaData(client, version, is_unicode, dfies_tab, lines_descr, meta, null, 0, 1);
if(meta.type1_data != null)
meta.type1_data.constructMetaData();
}
return meta;
}
private boolean checkType1(MetaData meta)
{
for(int i = 0; i < meta.type.length; i++)
switch(meta.type[i])
{
default:
break;
case 17: // '\021'
if(meta.isNestedType1Structure(i))
break;
MetaData childMeta = (MetaData)meta.getMetaData(i);
if(childMeta.num_odata == 0 || checkType1(childMeta))
break;
// fall through
case 29: // '\035'
case 30: // '\036'
case 99: // 'c'
return false;
}
return true;
}
private MetaData constructMetaData(Client client, int version, boolean is_unicode, Table dfies_tab, Table lines_descr, MetaData meta, String lfieldname,
int base_offset, int level)
{
int num_rows = dfies_tab.getNumRows();
if(num_rows == 0 || dfies_tab.getRow() >= num_rows)
return meta;
int unicode_factor = is_unicode ? -2 : 1;
do
{
if(lfieldname != null && !dfies_tab.getString(43).startsWith(lfieldname))
{
if(level > 1)
dfies_tab.previousRow();
break;
}
String fieldname = dfies_tab.getString(1);
String comptype = dfies_tab.getString(42);
String stype = dfies_tab.getString(13);
int ptype = JCO.getJCOType(stype.length() <= 0 ? ' ' : stype.charAt(0));
if(ptype == -1)
{
String datatype = dfies_tab.getString(12);
if(datatype.equals("STRU"))
ptype = 17;
else
if(datatype.equals("TTYP"))
ptype = 99;
}
if(ptype == 17 || ptype == 99)
{
String rollname = dfies_tab.getString(6);
meta.type_name = rollname;
if(comptype.equals("S"))
{
MetaData meta_new = new MetaData(rollname);
meta_new.setTabLength(dfies_tab.getInt(9));
meta_new.type1_data = meta.isNestedType1Structure() ? meta_new. new MetaData.Type1Data() : null;
String lfieldname_new = dfies_tab.getString(43) + "-";
int offset_new = dfies_tab.getInt(4);
meta.addInfo(dfies_tab.getString(1), ptype, dfies_tab.getInt(8), dfies_tab.getInt(9), dfies_tab.getInt(4) - base_offset, dfies_tab.getInt(11), null, dfies_tab.getString(27), 0, meta_new, null);
dfies_tab.nextRow();
constructMetaData(client, version, is_unicode, dfies_tab, lines_descr, meta_new, lfieldname_new, offset_new, level + 1);
if(meta.isNestedType1Structure() && meta_new.num_odata > 0)
{
meta.flags[meta.num_fields - 1] |= 0x80;
meta_new.type1_data.constructMetaData();
} else
if(meta_new.num_odata > 0)
{
if(checkType1(meta_new))
{
meta_new.type1_data = meta_new. new MetaData.Type1Data();
meta_new.type1_data.constructMetaData();
meta.flags[meta.num_fields - 1] |= 0x80;
}
} else
{
meta_new.type1_data = null;
}
continue;
}
if(comptype.equals("L") || comptype.equals("T"))
{
MetaData meta_new = null;
if(rollname.length() > 0 && super.structure_cache.containsKey(rollname))
{
meta_new = (MetaData)getStructureDefinition(rollname);
if(comptype.equals("L") || dfies_tab.getNumRows() == 1 && "TTYP".equals(dfies_tab.getString(12)))
{
meta.addInfo(dfies_tab.getString(1), ptype, dfies_tab.getInt(8), dfies_tab.getInt(9), dfies_tab.getInt(4) - base_offset, dfies_tab.getInt(11), null, dfies_tab.getString(27), 0, meta_new, null);
} else
{
String curr_rec_name = meta.rec_name;
meta.copy(meta_new);
meta.rec_name = curr_rec_name;
meta.type_name = meta_new.rec_name;
}
continue;
}
if(rollname.length() > 0)
{
Table dfies_tab_new = null;
String rollname_new = rollname;
int irow = 0;
String dataType = null;
String rollNameTemp = null;
while(irow < lines_descr.getNumRows() && dfies_tab_new == null)
{
lines_descr.setRow(irow++);
if(rollname_new.length() > 0 && lines_descr.getString(0).equals(rollname_new))
{
dfies_tab_new = lines_descr.getTable(2);
dfies_tab_new.firstRow();
dataType = dfies_tab_new.getString(12);
rollNameTemp = dfies_tab_new.getString(6);
if(dfies_tab_new.getNumRows() == 1 && dfies_tab_new.getString(42).equals("T") && !rollNameTemp.equals(dfies_tab_new.getString(5)) && ("STRU".equals(dataType) || "TTYP".equals(dataType)))
{
rollname_new = rollNameTemp;
dfies_tab_new = null;
irow = 0;
}
}
}
if(dfies_tab_new != null && (comptype.equals("L") || dfies_tab.getNumRows() == 1 && "TTYP".equals(dfies_tab.getString(12))))
{
meta_new = new MetaData(rollname);
meta_new.type_name = rollname_new;
meta_new.setTabLength(dfies_tab.getInt(9));
ParameterList imp = new ParameterList();
ParameterList exp = new ParameterList();
imp.appendValue("TABNAME", 0, unicode_factor * 30, rollname);
imp.appendValue("ALL_TYPES", 0, unicode_factor * 1, "X");
Structure x030l_wa;
if(version < 500)
x030l_wa = JCO.createStructure(x030l_v4);
else
if(!is_unicode)
x030l_wa = JCO.createStructure(x030l_v5);
else
x030l_wa = JCO.createStructure(x030l_v6u);
exp.appendValue("X030L_WA", x030l_wa);
Function function = new Function("DDIF_FIELDINFO_GET", imp, exp, null);
execute(client, function);
meta_new.setTabLength(x030l_wa.getInt(4));
constructMetaData(client, version, is_unicode, dfies_tab_new, lines_descr, meta_new, null, 0, level + 1);
if(rollname_new != null && rollname_new.length() > 0)
addStructureDefinitionToCache(rollname_new, meta_new);
} else
{
if(dfies_tab_new != null && comptype.equals("T"))
{
ParameterList imp = new ParameterList();
ParameterList exp = new ParameterList();
imp.appendValue("TABNAME", 0, unicode_factor * 30, rollname);
imp.appendValue("ALL_TYPES", 0, unicode_factor * 1, "X");
Structure x030l_wa;
if(version < 500)
x030l_wa = JCO.createStructure(x030l_v4);
else
if(!is_unicode)
x030l_wa = JCO.createStructure(x030l_v5);
else
x030l_wa = JCO.createStructure(x030l_v6u);
exp.appendValue("X030L_WA", x030l_wa);
Function function = new Function("DDIF_FIELDINFO_GET", imp, exp, null);
execute(client, function);
meta.setTabLength(x030l_wa.getInt(4));
constructMetaData(client, version, is_unicode, dfies_tab_new, lines_descr, meta, null, 0, level + 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -