SAP JCo业务情景:在线发票
以下示例项目描述了SAP JCo在业务场景中的用法,该业务场景使客户可以选择从SAP供应商系统在线检索和显示其发票。
客户交货的数据存储在供应商SAP系统中,但实际客户发票存储在文档管理系统中。在单据管理系统中,通过单据ID选择单据,该ID与发票编号一起存储在SAP系统中。因此,业务情景必须在SAP系统中找到客户数据,然后连接到文档管理系统以检索所请求的发票。
图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;
}