| opPrimeKey | output | longchar | Primary Key field value of loaded record(s). Keys are chr(4) separated. Key fields are chr(2) separated. |
| oiReturnStatus | output | integer | Return status of the method. |
for each t_sSODException by rowid(t_sSODException) on error undo, throw:
/* ================================================================= */
/* Lookup object by logical key */
/* When in create mode, skip lookup. */
/* ================================================================= */
if vcActivityCode <> "Create":U
then do:
vcFreeform = "for each SODException where SODException.SODExceptionCode = '":U + t_sSODException.SODExceptionCode + "'":U.
<M-1 run DataLoad
(input '' (icRowids),
input '' (icPkeys),
input '' (icObjectIds),
input vcFreeform (icFreeform),
input yes (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
if viFcReturnSuper >= 0
then do:
/* DataLoad succeeded, no no-error needed */
find first tSODException where tSODException.SODExceptionCode = t_sSODException.SODExceptionCode.
if tSODException.tc_Status <> ""
then do:
<M-2 run SetMessage
(input #T-11'Duplicate entry in input ($1).':255(332074471)T-11# (icMessage),
input t_sSODException.SODExceptionCode (icArguments),
input 'tSODException.SODExceptionCode' (icFieldName),
input t_sSODException.SODExceptionCode (icFieldValue),
input 'E' (icType),
input 3 (iiSeverity),
input t_sSODException.tc_Rowid (icRowid),
input 'BLF-251':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
assign oiReturnStatus = -1.
return.
end.
end.
end.
/* ================================================================= */
/* When in delete mode, ignore input data. */
/* When object not found, do not return an error. */
/* ================================================================= */
if vcActivityCode = "Delete":U
then do:
if viFcReturnSuper = -4
then delete t_sSODException.
else do:
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
create tFcRowidConvert.
assign tFcRowidConvert.tcFcOldRowid = t_sSODException.tc_Rowid
tFcRowidConvert.tcFcNewRowid = tSODException.tc_Rowid
tFcRowidConvert.tlFcOk = true.
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sSODException.tc_Rowid = tSODException.tc_Rowid
t_sSODException.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tSODException.SODException_ID).
end.
next.
end.
if vcActivityCode = "Create":U
or viFcReturnSuper = -4
then do:
/* ================================================================= */
/* When object not found and in modify only mode, return an error. */
/* ================================================================= */
if vcActivityCode = "Modify":U
then do:
<M-3 run SetMessage
(input #T-2'Policy exception with code ($1) does not exist.':255(73479516)T-2# (icMessage),
input t_sSODException.SODExceptionCode (icArguments),
input 'tSODException.SODExceptionCode' (icFieldName),
input t_sSODException.SODExceptionCode (icFieldValue),
input 'E' (icType),
input 3 (iiSeverity),
input t_sSODException.tc_Rowid (icRowid),
input 'BLF-252':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
assign oiReturnStatus = -1.
return.
end.
/* ================================================================= */
/* When object not found or in create mode, create it. */
/* ================================================================= */
<M-4 run AddDetailLine
(input 'SODException' (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sSODException.tc_Status = "N":U.
end.
else do:
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sSODException.tc_Status = "C":U
tSODException.tc_Status = "C":U.
end.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* Delete existing detail */
/* ================================================================= */
for each tSODExceptionLn where
tSODExceptionLn.tc_ParentRowid = tSODException.tc_Rowid on error undo, throw:
assign tSODExceptionLn.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update / add detail */
/* ================================================================= */
for each t_sSODExceptionLn where
t_sSODExceptionLn.tc_ParentRowid = t_sSODException.tc_Rowid on error undo, throw:
find first tSODExceptionLn where
tSODExceptionLn.tc_ParentRowid = tSODException.tc_Rowid and
tSODExceptionLn.tcDomainCode = t_sSODExceptionLn.tcDomainCode and
tSODExceptionLn.tcCompanyCode = t_sSODExceptionLn.tcCompanyCode and
tSODExceptionLn.tcSODCategory1Code = t_sSODExceptionLn.tcSODCategory1Code and
tSODExceptionLn.tcSODCategory2Code = t_sSODExceptionLn.tcSODCategory2Code no-error.
if available tSODExceptionLn
then if tSODExceptionLn.tc_Status = "D":U
then assign t_sSODExceptionLn.tc_Status = "C":U
tSODExceptionLn.tc_Status = "C":U.
else do:
vcKey = (if t_sSODExceptionLn.tcDomainCode = ""
or t_sSODExceptionLn.tcDomainCode = ?
then ""
else #T-6'Domain':20(8454)T-6# + " = " + t_sSODExceptionLn.tcDomainCode)
+ (if t_sSODExceptionLn.tcCompanyCode = ""
or t_sSODExceptionLn.tcCompanyCode = ?
then ""
else ", " + #T-7'Entity':15(8455)T-7# + " = " + t_sSODExceptionLn.tcCompanyCode)
+ (if t_sSODExceptionLn.tcSODCategory1Code = ""
or t_sSODExceptionLn.tcSODCategory1Code = ?
then ""
else ", " + #T-8'SOD Category 1':20(356540589)T-8# + " = " + t_sSODExceptionLn.tcSODCategory1Code)
+ (if t_sSODExceptionLn.tcSODCategory2Code = ""
or t_sSODExceptionLn.tcSODCategory2Code = ?
then ""
else ", " + #T-9'SOD Category 2':20(957894087)T-9# + " = " + t_sSODExceptionLn.tcSODCategory2Code).
<M-10 run SetMessage
(input #T-10'Duplicate entry in input ($1).':255(332074471)T-10# (icMessage),
input vcKey (icArguments),
input 'tSODExceptionLn.tcSODCategory2Code' (icFieldName),
input t_sSODExceptionLn.tcSODCategory2Code (icFieldValue),
input 'E' (icType),
input 3 (iiSeverity),
input t_sSODExceptionLn.tc_Rowid (icRowid),
input 'BLF-253':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
assign oiReturnStatus = -1.
return.
end.
else do:
<M-5 run AddDetailLine
(input 'SODExceptionLn' (icTable),
input tSODException.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BSODPolicyException>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_sSODExceptionLn.tc_Status = "N":U
tSODExceptionLn.tcDomainCode = t_sSODExceptionLn.tcDomainCode
tSODExceptionLn.tcCompanyCode = t_sSODExceptionLn.tcCompanyCode
tSODExceptionLn.tcSODCategory1Code = t_sSODExceptionLn.tcSODCategory1Code
tSODExceptionLn.tcSODCategory2Code = t_sSODExceptionLn.tcSODCategory2Code.
end.
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
create tFcRowidConvert.
assign tFcRowidConvert.tcFcOldRowid = t_sSODExceptionLn.tc_Rowid
tFcRowidConvert.tcFcNewRowid = tSODExceptionLn.tc_Rowid
tFcRowidConvert.tlFcOk = true.
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sSODExceptionLn.SODExceptionLn_ID = tSODExceptionLn.SODExceptionLn_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sSODExceptionLn.SODException_ID = tSODExceptionLn.SODException_ID
t_sSODExceptionLn.tc_Rowid = tSODExceptionLn.tc_Rowid
t_sSODExceptionLn.tc_ParentRowid = tSODException.tc_Rowid.
end.
<I-19 {UpdateTransString
&TABLE = "SODException"}>
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
create tFcRowidConvert.
assign tFcRowidConvert.tcFcOldRowid = t_sSODException.tc_Rowid
tFcRowidConvert.tcFcNewRowid = tSODException.tc_Rowid
tFcRowidConvert.tlFcOk = true.
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sSODException.SODException_ID = tSODException.SODException_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sSODException.tc_Rowid = tSODException.tc_Rowid
t_sSODException.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tSODException.SODException_ID).
end.