⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jco.java

📁 SAP这个系统的一个转换器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                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 + -