SV File I/O status for records locking in NER BSFNs

johndanter

johndanter

Legendary Poster
SV File I/O status in NER BSFNs called via BSSV

Hi folks,

Is it possible for E1 data base exceptions in an E1 NER to throw an exception in a JAVA BSSV call? Or end up with the BSSV terminating? Or a BSSV in E1 to be thrown due to a DB error.

We have a weird issue here in work today whereby someone had recently updated an Oracle trigger on F4801 and for some reason the code in the NER that checks SV File I/O status on an update to F4801 didn't work.

A little background. An external system written in JAVA uses BSSVs to call E1 NERs and feed back info (pass or fail basically)

So the furthest most external part of the following call path:

External sys > BSSV > internal BSSV > E1 NER > Table IO > DB lock/problem

Can the DB lock/problem ever end up being seen by External sys

I've pasted the code below, it's very simple and should return 200001 if a pass and 200003 if a fail.

It returned nothing and confused the external system.

It turns out there was an error on the F4801 update due to a recent trigger deployment today.
But E1 would have known about that and SV File IO would not be SUCCESS, right?
Which means 200003 gets sent back. My colleagues who work on the external system are adamant I didn't pass back either 200001 or 200003.

What I reckon happened is yes E1 NER was executed, the F4801 couldn't update due to the trigger issue, 200003 was fed back but............
JAVA went into the throw exception code and ignored my fed back values.

Now this could happen in my BSSV or even in the external system....?
Is that possible or are they totally isolated from one another in terms of a COM error, like in C++ etc?

Here's the code which should/would have sent back 200003

F0006.Select [Index 1: Cost Center]
VA evt_CostCenterType_F0006_STYL [STYL] = TK Business Unit Type [STYL]
VA evt_Company_F4801_CO [CO] = TK Company [CO]
VA evt_AddNoManager_F4801_ANSA [ANSA] = TK Address Number [AN8]

F0006.FetchNext [Index 1: Cost Center]
VA evt_CostCenter_F0006_MCU [MCU] <- TK Business Unit [MCU]

If SV File_IO_Status is equal to CO SUCCESS

F4801.Update [Index 1: Document Number]
BF MKmnDocumentOrderNo [DOCO] = TK Document (Order No, Invoice, etc.) [DOCO]
VA evt_CostCenter_F0006_MCU [MCU] -> TK Business Unit [MCU]
VA evt_AUDIT_UserId_USER [USER] -> TK User ID [USER]
VA evt_AUDIT_ProgramId_PID [PID] -> TK Program ID [PID]
VA evt_AUDIT_WorkStationId_JOBN [JOBN] -> TK Work Station ID [JOBN]
VA evt_AUDIT_DateUpdated_UPMJ [UPMJ] -> TK Date - Updated [UPMJ]
VA evt_AUDIT_TimeLastUpdated_UPMT [UPMT] -> TK Time of Day [TDAY]

If SV File_IO_Status is not equal to CO SUCCESS
// Can not update F4801 - FAILURE
BF szLOGSourceResultOVE [RESU] = "200003"
BF szLOGDescriptionText [DTX1] = "OVEWOA00694705"
Else
BF szLOGSourceResultOVE [RESU] = "200001"
BF szLOGDescriptionText [DTX1] = "OVEWOA00000000"
End If

CNC picked up these errors

20 Oct 2016 01:07:08,883[WARN][RUNTIME]*ERROR* CallObject@1c871c87: CallObject.executeRequest(): Problem executing function [GTSWOGenericManager] lib [] TM_TRAN_CANCELLED was received from CallObject user:GTSSVCPD Env:JPD900

20 Oct 2016 01:07:08,884[SEVERE][INTEROP]Fail to execute BSFNMethod com.jdedwards.system.kernel.CallObjectSystemException: TM_TRAN_CANCELLED was received from CallObject com.jdedwards.system.connector.dynamic.ServerFailureException: Fail to execute BSFNMethod com.jdedwards.system.kernel.CallObjectSystemException: TM_TRAN_CANCELLED was received from CallObject

20 Oct 2016 01:07:08,884[SEVERE][BSSVFRAMEWORK][Context ID: 10.170.9.12:6374711476943627593:7046] System Exception occured while executing business function. Please try request again. :GTSWOGenericManager(GTS Create WO) oracle.e1.bssvfoundation.exception.BSFNServiceSystemException: System Exception occured while executing business function. Please try request again. :GTSWOGenericManager(GTS Create WO)
 
Last edited:
I think you could add BSFNServiceRuntimeException Exception Catch (by default it's BSFNServiceInvalidArgException and BSFNServiceSystemException) and in the bsfn on If SV File_IO_Status is not equal to CO SUCCESS use Set Ner Error

So, it throw a BSFNServiceRuntimeException, you capture the exception, set E1MessageList error and return


catch (BSFNServiceRuntimeException exception){
E1MessageList returnMessages = new E1MessageList();
returnMessages.addMessage(new E1Message(context, "019FIS", systemEx.getMessage()));
return returnMessages;
}

Try it and feedback please.

Reg
 
Hi John,

Recently I ran into an issue where SV File I/O Status got a value of CO SUCCESS even when the Update statement did not find any record to update. In other words, "Record Not Found for Update" actually is a successful execution of the Update statement! Not sure if that helps with your problem, but thought of sharing that.

We are on E1 8.11SP1.

Thanks,
Prathibha
 
I think you could add BSFNServiceRuntimeException Exception Catch (by default it's BSFNServiceInvalidArgException and BSFNServiceSystemException) and in the bsfn on If SV File_IO_Status is not equal to CO SUCCESS use Set Ner Error

So, it throw a BSFNServiceRuntimeException, you capture the exception, set E1MessageList error and return


catch (BSFNServiceRuntimeException exception){
E1MessageList returnMessages = new E1MessageList();
returnMessages.addMessage(new E1Message(context, "019FIS", systemEx.getMessage()));
return returnMessages;
}

Try it and feedback please.

Reg

Hi

Thanks for the reply but I'm not asking 'how' to do it. I am asking is it possible an SV File IO can throw the external calling application into an exception.

So the furthest most external part of the following call path:

External sys > BSSV > internal BSSV > E1 NER > Table IO > DB lock/problem

Can the DB lock/problem ever end up being seen by External sys
 
Hi John

Did you manage to find a solution to the above issue by any chance?

Thanks
 
Back
Top