Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
<Class name="EDIGW.OperationSQL">
<IncludeCode>EDIGW,%occStatus</IncludeCode>
<Super>Ens.BusinessOperation</Super>
<TimeCreated>64957,54226.616149</TimeCreated>
<Parameter name="ADAPTER">
<Default>EnsLib.SQL.OutboundAdapter</Default>
</Parameter>
<Property name="Adapter">
<Type>EnsLib.SQL.OutboundAdapter</Type>
</Property>
<Parameter name="INVOCATION">
<Default>Queue</Default>
</Parameter>
<Method name="TxnSetRequest">
<FormalSpec>pRequest:EDIGW.ReqSqlTS,*pResponse:Ens.Response</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ..DebugSQL(pRequest,"TxnSetRequest","BEGIN")
Set tSC = ..AssertGroupInterchange(pRequest)
If $$$ISERR(tSC) {
Do ..SuspendMessage(pRequest)
Quit $$$OK
}
Set tSC = ..InsertIIteratorTXN(pRequest)
Do ..DebugSQL(pRequest,"TxnSetRequest","END",tSC)
Quit tSC
]]></Implementation>
</Method>
<Method name="AssertGroupInterchange">
<FormalSpec>pRequest:EDIGW.ReqSqlTS</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ..DebugSQL(pRequest,"AssertGroupInterchange","BEGIN")
Set start = $ZTIMESTAMP
Set strFN = $$$sqlGl(pRequest.IIterator)
For {
Do ..DebugSQL(pRequest,"AssertGroupInterchange","FOR")
If $Data($$$sqlGl("SuspendMessage",pRequest.IIterator)) {
Set tSC = ..UnSuspendMessage(pRequest)
}
If $Data($$$sqlGl("FN",strFN)) {
Set tSC = $$$sqlGl("FN",strFN)
If $$$ISOK(tSC) Quit
If '$Data($$$sqlGl("SuspendMessage",pRequest.IIterator)) Quit
}
If '$Data($$$sqlGl("FN",strFN)) {
Lock $$$sqlGl("FN",strFN):0
If $TEST {
Do ..DebugSQL(pRequest,"AssertGroupInterchange","LOCK")
Set tSC = ..InsertInterchangeGroup(strFN)
Set $$$sqlGl("FN",strFN) = tSC
Lock
Quit
}
}
Do ..DebugSQL(pRequest,"","HANG")
Hang $$$sqlHang
Set timeElapsed = $SYSTEM.SQL.DATEDIFF("ss",start,$ZTIMESTAMP)
If (timeElapsed < $$$sqlHangMAX) Continue
Set tSC = $$$ERROR($$$GeneralError,"Unable to acquire LOCK. Hang Time expired.")
Quit
}
Do ..DebugSQL(pRequest,"AssertGroupInterchange","END",tSC)
Quit tSC
]]></Implementation>
</Method>
<Method name="SuspendMessage">
<FormalSpec>pRequest:EDIGW.ReqSqlTS</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Set tSC = $$$OK
Set $$$sqlGl("SuspendMessage",pRequest.IIterator) = $ZTIMESTAMP
Set ..SuspendMessage = 1
Set tAlert = ##class(Ens.AlertRequest).%New()
Set tAlert.AlertText = "Suspend Message because unable to insert ISA/GS."
Set tAlert.SourceConfigName = "EDIGW.OperationSQL"
Do ..SendAlert(tAlert)
Do ..DebugSQL(pRequest,"SuspendMessage","",tSC)
Quit tSC
]]></Implementation>
</Method>
<Method name="UnSuspendMessage">
<Description>
We attempt to remove failed status code for ISA/GS before we can Resubmit Suspended Message</Description>
<FormalSpec>pRequest:EDIGW.ReqSqlTS</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ..DebugSQL(pRequest,"UnSuspendMessage","BEGIN")
Set strFN = $$$sqlGl(pRequest.IIterator)
Set tSC = $$$sqlGl("FN",strFN) // Current Status code for ISA/GS
If $Data($$$sqlGl("SuspendMessage",pRequest.IIterator)) {
If '$$$ISOK(tSC) {
Lock $$$sqlGl("FN",strFN):0
If $TEST {
Do ..DebugSQL(pRequest,"UnSuspendMessage","LOCK")
Kill $$$sqlGl("FN",strFN)
Set tSC = $$$OK
Lock
}
}
If $$$ISOK(tSC) Kill $$$sqlGl("SuspendMessage",pRequest.IIterator)
}
Do ..DebugSQL(pRequest,"UnSuspendMessage","END",tSC)
Quit tSC
]]></Implementation>
</Method>
<Method name="AssertTableColumns">
<FormalSpec>strClass:%String=""</FormalSpec>
<ReturnType>%List</ReturnType>
<Implementation><![CDATA[
If $Data($$$sqlGl("TC",strClass)) {
Quit $$$sqlGl("TC",strClass)
}
Set listTableColumns=##class(EDIGW.Utility).GetTableColumns(strClass)
Set $$$sqlGl("TC",strClass) = listTableColumns
Quit listTableColumns
]]></Implementation>
</Method>
<Method name="InsertIIteratorTXN">
<FormalSpec>pRequest:EDIGW.ReqSqlTS</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ..DebugSQL(pRequest,"InsertIIteratorTXN","BEGIN")
Try {
// Initialize variables and objects
set tSC = $$$OK
//set pResponse = ##class(common.examples.msgResponse).%New()
set msg = ..Adapter.StayConnected
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"OperationSQL;StayConnected:"_msg_" at "_$ZDateTime($Horolog,8))
// Start the transaction. Set autocommit to 0
set tSC = ..Adapter.SetAutoCommit(0)
$$$ThrowOnError(tSC)
Set k1 = pRequest.IIterator
Set k2 = ""
For {
Set k2=$Order($$$sqlGl(k1,k2)) If k2="" Quit
Set strClass = $List($$$sqlGl(k1,k2),1)
Set strPKey = $List($$$sqlGl(k1,k2),2)
Set srcClass = $Translate(strClass,"_") // Remove underscores
Set tgtTable = $Piece(strClass,".",2) // Table Name after CREPOS.
Set listTableColumns = ..AssertTableColumns(strClass)
Set tSC = ..Insert(srcClass,tgtTable,strPKey,listTableColumns)
$$$ThrowOnError(tSC)
}
// Finalize transaction
set tSC = ..Adapter.Commit()
Do ..DebugSQL(pRequest,"InsertIIteratorTXN","COMMIT",tSC)
$$$ThrowOnError(tSC)
}
Catch err {
Do ..DebugSQL(pRequest,"InsertIIteratorTXN","CATCH")
If (err.%ClassName(1)="common.err.exception") && ($$$ISERR(err.status)) {
set tSC = err.status
}
Else {
// Leave tSC "as is" from above
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"tSC "_tSC_" at "_$ZDateTime($Horolog,8))
//set tSC = $system.Status.Error(err.Code,err.Name,err.Location,err.InnerException)
}
//set pResponse.status = tSC
Set rollbackSt = ..Adapter.Rollback()
Do ..DebugSQL(pRequest,"InsertIIteratorTXN","ROLLBACK",rollbackSt)
}
Do ..DebugSQL(pRequest,"InsertIIteratorTXN","END",tSC)
Quit tSC
]]></Implementation>
</Method>
<Method name="InsertInterchangeGroup">
<FormalSpec>strFN:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"BEGIN OperationSQL;InsertInterchangeGroup at "_$ZDateTime($Horolog,8))
Set tSC = ..InsertByClass("CREPOS.INTCHG_CONTROL",strFN)
If $$$ISERR(tSC) {
Hang $$$retryHang
Set tSC=..InsertByClass("CREPOS.INTCHG_CONTROL",strFN)
}
If $$$ISERR(tSC) Quit tSC
Set tSC=..InsertByClass("CREPOS.FUNCTIONAL_GROUP",strFN)
If $$$ISERR(tSC) {
Hang $$$retryHang
Set tSC=..InsertByClass("CREPOS.FUNCTIONAL_GROUP",strFN)
}
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"END OperationSQL;InsertInterchangeGroup at "_$ZDateTime($Horolog,8))
Quit tSC
]]></Implementation>
</Method>
<Method name="InsertByClass">
<FormalSpec>strClass:%String,strFN:%String=""</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"BEGIN OperationSQL;InsertByClass at "_$ZDateTime($Horolog,8))
Set tSC = $$$OK
Set strWhere = " WHERE FILE_NUMBER = '"_strFN_"'"
Set strSQL="SELECT %ID FROM "_strClass_strWhere_" ORDER BY %ID"
Set tStatement=##class(%SQL.Statement).%New()
Set qStatus=tStatement.%Prepare(strSQL)
If qStatus'=1 {Set ^TEST($I(^TEST))="%Prepare failed: "_qStatus QUIT qStatus}
Set objResultSet=tStatement.%Execute()
If objResultSet.%SQLCODE'=0 {
Set ^TEST($I(^TEST))="objResultSet.%SQLCODE: "_objResultSet.%SQLCODE
Set ^TEST($I(^TEST))="objResultSet.%Message: "_objResultSet.%Message
set tSC = $$$ERROR($$$GeneralError,"InsertByClass %Execute() failed: "_strSQL)
Quit tSC
}
Set srcClass=$Translate(strClass,"_") // Remove underscores
Set tgtTable=$Piece(strClass,".",2) // Table Name after CREPOS.
Set listColumns=..AssertTableColumns(strClass)
While objResultSet.%Next() {
Set tSC=..Insert(srcClass,tgtTable,objResultSet.%GetData(1),listColumns)
Quit
}
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"END OperationSQL;InsertByClass at "_$ZDateTime($Horolog,8))
Quit tSC
]]></Implementation>
</Method>
<Method name="Insert">
<FormalSpec>srcClass:%String,tgtTable:%String,key:%String,listColumns:%List</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"BEGIN OperationSQL;Insert at "_$ZDateTime($Horolog,8))
Try {
Set tSC = $$$ERROR($$$GeneralError,"Try "_tgtTable_" Insert "_key_"failed.")
Set source = $CLASSMETHOD(srcClass,"%OpenId",key)
Set strSQL = "INSERT INTO "_tgtTable_"("_$LISTTOSTRING(listColumns)_") VALUES("
Set max = $LISTLENGTH(listColumns)
For ii=1:1:max {
Set p = $LIST(listColumns,ii)
Set p = $Translate(p,"_ ") // remove underscore and space
Set value = $PROPERTY(source,p)
Set value = $Translate(value,"'") // remove apostrophe
Set strSQL = strSQL_"'"_value_"'"
If ii<max Set strSQL=strSQL_","
}
Set strSQL=strSQL_")"
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,strSQL)
Set start=$ZTIMESTAMP
Set tSC = ..Adapter.ExecuteUpdate(.intRows,strSQL)
If $$$DebugOperationSQL {
Set strMessage = intRows_$S(tSC:"",1:"> "_$system.Status.GetOneErrorText(tSC))
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,strMessage)
}
}
Catch myCatch {
set x=$I(^TEST)
Set ^TEST(x,"OperationSQL:Insert")=$ZdateTime($H,8)
Set ^TEST(x,"myCatch")=myCatch
Set ^TEST(x,"AsSystemError")=myCatch.AsSystemError()
Set ^TEST(x,"%objlasterror")=%objlasterror
Set ^TEST(x,"%objlasterrortext")=$System.Status.GetOneErrorText(%objlasterror)
Set ^TEST(x,"Code")=myCatch.Code
Set ^TEST(x,"Data")=myCatch.Data
Set ^TEST(x,"Location")=myCatch.Location
Set ^TEST(x,"Name")=$ZCVT(myCatch.Name,"O","HTML")
}
if $$$ISERR(tSC) {
Set errSQL = ##class(EDIGW.ErrorSQL).%New()
Set errSQL.errDate = $Piece($H,",",1)
Set errSQL.errTime = $Piece($H,",",2)
Set errSQL.errSQL = $Get(strSQL)
Set errSQL.errStatus = tSC
Set errSt = errSQL.%Save()
//set tAlert = ##class(Ens.AlertRequest).%New()
//set tAlert.AlertText = "SQL Insert Error ID "_errSQL.%Id()
//set tAlert.SourceConfigName="EDIGW.OperationSQL"
//do ..SendAlert(tAlert)
If $$$DebugOperationSQL {
Set strMessage = "SQL Insert Error ID "_errSQL.%Id()
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,strMessage)
}
}
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"END OperationSQL;Insert at "_$ZDateTime($Horolog,8))
Quit tSC
]]></Implementation>
</Method>
<Method name="DebugSQL">
<FormalSpec>pRequest:EDIGW.ReqSqlTS,pMethod:%String,pPrefix:%String,pStatus:%Status=""</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
If $$$DebugOperationSQL {
Set msg = "OperationSQL IIterator:"_pRequest.IIterator
Set msg = msg_$Select(pPrefix="":"",1:" ")_pPrefix
set msg = msg_" "_pMethod
If (pStatus'="") {
Set strStatus = $TR($system.Status.GetOneErrorText(pStatus),$C(10))
Set msg = msg_" Status:"_strStatus
}
Set msg = msg_" at "_$ZDateTime($Horolog,8)
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,msg)
}
Quit $$$OK
]]></Implementation>
</Method>
<Method name="OnError">
<Description>
Override this method to provide custom error handling. Return 0 means skip standard AlertOnError behavior. </Description>
<FormalSpec><![CDATA[&pStatus:%Status]]></FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
Do ##class(EDIGW.Utility).DEBUG($$$DebugOperationSQL,"OperationSQL;OnError at "_$ZDateTime($Horolog,8))
//$$$LOGERROR("Operation SQL ERROR: "_$system.Status.GetOneErrorText(pStatus))
set x=$I(^TEST)
Set ^TEST(x,"OperationSQL:OnError")=$ZdateTime($H,8)
Set ^TEST(x,"OnError","pStatus")=pStatus
Set ^TEST(x,"OnError","%objlasterror ")=%objlasterror
Quit pStatus
]]></Implementation>
</Method>
<XData name="MessageMap">
<Data><![CDATA[
<MapItems>
<MapItem MessageType="EDIGW.ReqSqlTS">
<Method>TxnSetRequest</Method>
</MapItem>
</MapItems>
]]></Data>
</XData>
</Class>
</Export>