SAP JCo业务情景:在线发票

SAP JCo业务情景:在线发票

以下示例项目描述了SAP JCo在业务场景中的用法,该业务场景使客户可以选择从SAP供应商系统在线检索和显示其发票。

客户交货的数据存储在供应商SAP系统中,但实际客户发票存储在文档管理系统中。在单据管理系统中,通过单据ID选择单据,该ID与发票编号一起存储在SAP系统中。因此,业务情景必须在SAP系统中找到客户数据,然后连接到文档管理系统以检索所请求的发票。
图1
图1电子商务方案:使用SAP JCo在线显示发票

在这种情况下,通常可以使用标准BAPI。但是,在这种情况下,将开发一个新对象:Z_BAPI_GET_DOCUMENT_ID。

业务对象 BAPI 描述
Z_BAPI_GET_DOCUMENT_ID GETDOCUMENT 获取文档ID
输入:公司代码
发票号码
财政年度
输出:文档ID
GETAPPENDIX 获取文档附录ID
输入:公司代码
发票号码
财政年度
输出:文档附录ID

已实现SessionBean来联系该对象。Bean包含方法getDocid(),该方法返回ID,如图3所示。

图3 SessionBean中的方法getDocid()

	/**
     * Getting Document-ID, Document-Appendix-ID from SAP/R3 by invoice number
     *
     * @return Document ID
     */
    public String getDocid() {
        String sDocid = "";
        JCO.Client jcoConnection = null;
        IRepository repository = null;

        // getting properties
        try {
            String sClient = vrb.getString("client", ""); // client
            String sUserid = vrb.getString("userid", ""); // userid
            String sPassword = vrb.getString("password", ""); // password
            String sLanguage = vrb.getString("language", ""); // language
            String sHost = vrb.getString("host", ""); // host
            String sSysnr = vrb.getString("sysnr", ""); // system number
            String sBukrs = vrb.getString("companycode", ""); // account number
            String rgID = "";

            // SAP-login
            jcoConnection = JCO.createClient(sClient, sUserid, sPassword, sLanguage, sHost, sSysnr);
            jcoConnection.connect();

            // building repository
            repository = new JCO.Repository("ASG", jcoConnection);

            // executing BAPI

            // Document
            JCO.Function bapiDocument = repository.getFunctionTemplate("Z_BAPI_TOA02_GETDOCUMENT").getFunction();

            if (bapiDocument != null) {
                jcoConnection.execute(bapiDocument);
                JCO.ParameterList input = bapiDocument.getImportParameterList();
                input.setValue(sBukrs, "BUKRS"); // accounting area
                input.setValue(sBelnr, "BELNR"); // invoice number
                input.setValue(sGjahr, "GJAHR"); // financial year
                jcoConnection.execute(bapiDocument);
                JCO.ParameterList output = bapiDocument.getExportParameterList();

                if (output != null) {
                    JCO.Structure structure = output.getStructure("DOCUMENT");
                    sDocid = structure.getString("DOC_ID");
                    sArchivid = structure.getString("ARCHIV_ID");
                }
            }

            // Appendix
            if (!sDocid.equals("")) {
                JCO.Function bapiAppendix = repository.getFunctionTemplate("Z_BAPI_TOA02_GETAPPENDIX").getFunction();
                if (bapiAppendix != null) {
                    jcoConnection.execute(bapiAppendix);
                    // Input Parameter
                    JCO.ParameterList input = bapiAppendix.getImportParameterList();
                    input.setValue(sBukrs, "BUKRS"); // accounting area
                    input.setValue(sBelnr, "BELNR"); // invoice number
                    input.setValue(sGjahr, "GJAHR"); // financial year
                    jcoConnection.execute(bapiAppendix);

                    JCO.ParameterList output = bapiAppendix.getTableParameterList();
                    JCO.Table table = output.getTable(0);

                    if (table != null) {
                        if (table.getNumRows() > 0) {
                            do {
                                for (JCO.FieldIterator e = table.fields(); e.hasMoreElements(); ) {
                                    JCO.Field field = e.nextField();
                                    if (field.getName().equals("ARCHIV_ID"))
                                        sAnlagearchivid = field.getString();
                                    else if (field.getName().equals("DOC_ID"))
                                        sAnlagedocid = field.getString();
                                }
                            } while (table.nextRow());
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jcoConnection != null)
                jcoConnection.disconnect();
        }

        this.sDocid = sDocid;
        return sDocid;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章