我正在使用JCo庫訪問SAP標準BAPI。那麼一切都還在工作,除了當我使用TID(TransactionID)時,RETURN表總是空的。使用TransactionID時SAP JCo RETURN表爲空
當我剛剛刪除TID時,我得到了填充警告等的RETURN表。但不幸的是我需要使用事務BAPI的TID,否則更改不提交。
爲什麼使用TID時RETURN TABLE爲空?
或者我必須如何更改事務性BAPI?的BAPI訪問
這裏speudo代碼:
import com.sap.conn.jco.*;
import org.apache.commons.logging.*;
public class BapiSample {
private static final Log logger = LogFactory.getLog(BapiSample.class);
private static final String CLIENT = "400";
private static final String INSTITUTION = "1000";
protected JCoDestination destination;
public BapiSample() {
this.destination = getDestination("mySAPConfig.properties");
}
public void execute() {
String tid = null;
try {
tid = destination.createTID();
JCoFunction function = destination.getRepository().getFunction("BAPI_PATCASE_CHANGEOUTPATVISIT");
function.getImportParameterList().setValue("CLIENT", CLIENT);
function.getImportParameterList().setValue("INSTITUTION", INSTITUTION);
function.getImportParameterList().setValue("MOVEMNT_SEQNO", "0001");
// Here we will then all parameters of the BAPI....
// ...
// Now the execute
function.execute(destination, tid);
// And getting the RETURN Table. !!! THIS IS ALWAYS EMPTY!
JCoTable returnTable = function.getTableParameterList().getTable("RETURN");
int numRows = returnTable.getNumRows();
for (int i = 0; i < numRows; i++) {
returnTable.setRow(i);
logger.info("RETURN VALUE: " + returnTable.getString("MESSAGE"));
}
JCoFunction commit = destination.getRepository().getFunction("BAPI_TRANSACTION_COMMIT");
commit.execute(destination, tid);
destination.confirmTID(tid);
} catch (Throwable ex) {
try {
if (destination != null) {
JCoFunction rollback = destination.getRepository().getFunction("BAPI_TRANSACTION_ROLLBACK");
rollback.execute(destination, tid);
}
} catch (Throwable t1) {
}
}
}
protected static JCoDestination getDestination(String fileName) {
JCoDestination result = null;
try {
result = JCoDestinationManager.getDestination(fileName);
} catch (Exception ex) {
logger.error("Error during destination resolution", ex);
}
return result;
}
}
UPDATE 2013年1月10日:我終於能夠同時獲得,灌裝和輸入返回表COMMITED。解決方案是隻執行兩個,沒有TID的提交,獲取RETURN表,然後再次使用TID提交。
非常奇怪,但也許正確使用JCo提交。 有人可以向我解釋這個嗎?
當您使用事務時,您無法獲取任何導出值或表。當你不使用交易時,你可以達到5-10分鐘的前臺執行時間限制。 –