이 장에서는 X-UP에서 발생하는 Exception에 대한 처리 방법과 Nexacro 어플리케이션의 Callback에서 처리할 수 있는 ErrorCode, ErrorMsg를 처리하는 방법에 대해 알아봅니다.
Exception 처리 방법
Legacy, X-UP Model의 Logic class 그리고 X-UP Engine 등 에서 Exception이 발생했을 경우에 Exception 처리 방법에 대해 기술합니다.
위와 같은 모델에서 SAP RFC Invoke에서 Exception이 발생한 경우 다음과 형태로 처리할 수 있습니다.
Exception 발생 시 ErrorCode, ErrorMsg 전달
SAP RFC Invoke에서 오류가 발생했으며 전달된 Exception을 Throw 하여 이후 Logic을 수행하지 않습니다. 하지만 error code는 -1 이 아닌 임의의 error code를 전달하고자 하는 경우 입니다. 이 경우 SAP RFC Invoke의 Exception tab을 통해 아래와 같이 coding을 수행함으로써 error code를 전달할 수 있습니다.
if(e instanceof AutomationFailException) { AutomationFailException exception = (AutomationFailException) e; exception.setErrorCode(-9999); throw exception; } else { AutomationFailException exception = new AutomationFailException(e.getMessage(), e); exception.setErrorCode(-9999); throw exception; }
Exception 발생 시 무시
아래와 같은 경우에는 InvokeSkip Exception을 생성하여 throw해 처리합니다.
에러가 발생해 해당 invoke 처리를 중단하고 다음 logic으로 진행 해야 하는 경우
SAP RFC Invoke에서 exception이 발생했을 경우
SAP RFC Invoke 이후 logic 수행은 중단하고 바로 UserMethod 수행이 필요한 경우
InvokeSkip invokeSkipException = new InvokeSkip(e.getMessage(), e); throw invokeSkipException;
또한, ErrorCode와 ErrorMsg를 UI에 출력하기 위해서는 다음과 같이 처리할 수 있습니다.
globalParameterSet.getParameter("ErrorCode").setValue(new Integer(-999)); globalParameterSet.getParameter("ErrorMsg").setValue("consumption data failed."); InvokeSkip invokeSkipException = new InvokeSkip(e.getMessage(), e); throw invokeSkipException;
Exception 발생 시 Throw
Invoke에서 Exception이 발생 하였을 경우 더 이상 모델의 Logic을 수행하지 않고 오류를 바로 출력할 경우 특별한 처리는 필요없습니다.
ErrorCode, ErrorMsg 처리 방법
Nexacro 어플리케이션의 Callback Function에서 ErrorCode 및 ErrorMsg를 처리하기 위해 X-UP에서 처리하는 방법에 대해 설명합니다.
ErrorCode, ErrorMsg를 처리하지 않을 경우
개발자가 별도로 처리 하지 않을 경우 X-UP은 다음과 같이 처리합니다.
정상 처리
ErrorCode : 0
ErrorMsg : 공백
Exception 발생 시
ErrorCode : -1
ErrorMsg : [요청한 Model 정보] + [System Error Code] + Exception Message
ErrorCode, ErrorMsg 처리 방법
Model의 Logic 상에서 ErrorCode, ErrorMsg를 다음과 같이 처리합니다.
Model 내에서 ErrorCode, ErrorMsg 이름의 Variable 생성
UserMethod 혹은 Exception 처리 부분에서 원하는 ErrorCode 값과 ErrorMsg값을 Variable에 설정
globalParameterSet.getParameter("ErrorCode").setValue(new Integer(-999)); globalParameterSet.getParameter("ErrorMsg").setValue("consumption data failed.");
Modify Invoke의 추가적인 Exception 처리
Modify Invoke의 경우 Exception이 발생하였을 경우 추가적인 예외 처리를 할 수 있습니다.
RowSkip : Modify Invoke에만 적용되는 사항이며 Row단위 처리 시 특정 Row를 처리하는 중 예외가 발생했을 경우 해당 Row에 대한 예외를 무시하고 다음 Row를 처리하게 됩니다.
다음은 RowSkip에 대한 예입니다.
throw new RowSkip("ignore exception", e);
위의 그림 중 onExceptionOccured(ParameterSet globalParameterSet, Throwable e, InvokingErrorInfo errInfo) 메서드는 Invoke 실행 중 예외가 발생했을 경우 호출되는 메서드입니다.
해당 메서드의 매개변수(parameter)에 대한 설명입니다.
globalParameterSet : Invoke 시 필요한 parameter와 데이터소스로 부터 획득한 모든 parameter들이 있는 ParameterSet입니다.
e : 실제 로직에서 발생한 예외입니다.
errInfo : 발생한 예외에 대한 정보를 담고 있는 객체입니다.