저는 JCo 라이브러리를 사용하여 SAP 표준 BAPI에 액세스하고 있습니다. TID (TransactionID)를 사용할 때 RETURN 테이블이 항상 비어 있다는 점을 제외하고는 모든 것이 또한 작동합니다.SAP JCo RETURN TransactionID를 사용할 때 테이블이 비어 있습니다.
TID를 제거하면 Warnings 등으로 채워진 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;
}
}
업데이트 2013년 1월 10일 :가 마침내 모두를 얻을 수 있었다, RETURN 테이블 작성 및 입력은 최선을 다하고. 해결책은 TID가없는 커밋과 RETURN 테이블을 얻은 다음 TID를 사용하여 다시 커밋하는 것뿐입니다.
아주 이상하지만 JCo 커밋의 올바른 사용법 일 수 있습니다. 누군가이 설명을 해줄 수 있습니까?
거래를 사용할 때 수출 값이나 표를 가져올 수 없습니다. 트랜잭션을 사용하지 않으면 5-10 분 전경 실행 시간 제한에 도달 할 수 있습니다. –