| 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. |
if oiReturnStatus = 0
then oiReturnStatus = -98.
for each t_sUsrRole by rowid (t_sUsrRole) on error undo, throw:
/* ================================================================= */
/* Lookup object by logical key */
/* When in create mode, skip lookup. */
/* ================================================================= */
if vcActivityCode <> "Create":U
then do:
if (t_sUsrRole.Usr_ID = 0 or t_sUsrRole.Usr_ID = ?) and
(t_sUsrRole.tcUsrLogin <> '':U and t_sUsrRole.tcUsrLogin <> ?)
then do:
<Q-1 run UserPrim (all) (Read) (NoCache)
(input 0, (UsrId)
input t_sUsrRole.tcUsrLogin, (UsrLogin)
output dataset tqUserPrim) in BUser >
find tqUserPrim where
tqUserPrim.tcUsrLogin = t_sUsrRole.tcUsrLogin
no-lock no-error.
if available tqUserPrim
then assign t_sUsrRole.Usr_ID = tqUserPrim.tiUsr_ID.
end.
if (t_sUsrRole.Role_ID = 0 or t_sUsrRole.Role_ID = ?) and
(t_sUsrRole.tcRoleName <> '':U and t_sUsrRole.tcRoleName <> ?)
then do:
<Q-2 run RolePrim (all) (Read) (NoCache)
(input 0, (RoleID)
input t_sUsrRole.tcRoleName, (RoleName)
output dataset tqRolePrim) in BRole >
find tqRolePrim where
tqRolePrim.tcRoleName = t_sUsrRole.tcRoleName
no-lock no-error.
if available tqRolePrim
then assign t_sUsrRole.Role_ID = tqRolePrim.tiRole_ID.
end.
vcFreeform = "for each UsrRole where UsrRole.Usr_ID = ":U + string(t_sUsrRole.Usr_ID)
+ " and UsrRole.Role_ID = ":U + string(t_sUsrRole.Role_ID).
<M-3 run DataLoad
(input '' (icRowids),
input '' (icPkeys),
input '' (icObjectIds),
input vcFreeform (icFreeform),
input yes (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
if viFcReturnSuper >= 0
then find first tUsrRole where
tUsrRole.Usr_ID = t_sUsrRole.Usr_ID and
tUsrRole.Role_ID = t_sUsrRole.Role_ID no-error.
end. /* if vcActivityCode <> Create */
if vcActivityCode = "Create":U or
viFcReturnSuper = -4 or
(vcActivityCode = "Modify":U and
not available tUsrRole)
then do:
/* ================================================================= */
/* When object not found and in modify only mode, return an error. */
/* ================================================================= */
/*Only need to handle Creates*/
if vcActivityCode = "Modify":U
then do:
assign
vcMessage = trim(substitute(#T-8'Object with key $1 does not exist.':100(8887)T-8#,
trim(t_sUsrRole.tcUsrLogin), trim(t_sUsrRole.tcRoleName) )).
<M-4 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tUsrRole.tcusrLogin':U (icFieldName),
input t_sUsrRole.tcUsrLogin (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sUsrRole.tc_Rowid (icRowid),
input 'BLF-440':U:U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
assign oiReturnStatus = -1.
return.
end. /* if vcActivityCode = Modify */
/* ================================================================= */
/* When object not found or in create mode, create it. */
/* ================================================================= */
<M-5 run AddDetailLine
(input 'UsrRole':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign
t_sUsrRole.tc_Status = "N":U.
end. /* if vcActivityCode = Create */
else do:
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign
t_sUsrRole.tc_Status = "C":U.
end.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* insert code for subtables here */
/* ================================================================= */
/* Update domain links : delete existing links */
/* ================================================================= */
for each tUsrRoleDomain where
tUsrRoleDomain.tc_ParentRowid = tUsrRole.tc_Rowid:
assign tUsrRoleDomain.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update domain links : add new links */
/* ================================================================= */
for each t_sUsrRoleDomain where
t_sUsrRoleDomain.tc_ParentRowid = t_sUsrRole.tc_Rowid:
find first tUsrRoleDomain where
tUsrRoleDomain.tc_ParentRowid = tUsrRole.tc_Rowid and
tUsrRoleDomain.tcDomainCode = t_sUsrRoleDomain.tcDomainCode no-error.
if available tUsrRoleDomain
then
assign t_sUsrRoleDomain.tc_Status = "C":U.
else do:
<M-6 run AddDetailLine
(input 'UsrRoleDomain':U (icTable),
input tUsrRole.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_sUsrRoleDomain.tc_Status = "N":U.
end.
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
<M-10 run SetRowidConvert
(input t_sUsrRoleDomain.tc_Rowid (icOldRowid),
input tUsrRoleDomain.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sUsrRoleDomain.UsrRoleDomain_ID = tUsrRoleDomain.UsrRoleDomain_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sUsrRoleDomain.UsrRole_ID = tUsrRoleDomain.UsrRole_ID
t_sUsrRoleDomain.tc_Rowid = tUsrRoleDomain.tc_Rowid
t_sUsrRoleDomain.tc_ParentRowid = tUsrRole.tc_Rowid.
end.
/* ================================================================= */
/* Update company links : delete existing links */
/* ================================================================= */
for each tUsrRoleCompany where
tUsrRoleCompany.tc_ParentRowid = tUsrRole.tc_Rowid:
assign tUsrRoleCompany.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update company links : add new links */
/* ================================================================= */
for each t_sUsrRoleCompany where
t_sUsrRoleCompany.tc_ParentRowid = t_sUsrRole.tc_Rowid:
find first tUsrRoleCompany where
tUsrRoleCompany.tc_ParentRowid = tUsrRole.tc_Rowid and
tUsrRoleCompany.tcCompanyCode = t_sUsrRoleCompany.tcCompanyCode no-error.
if available tUsrRoleCompany
then
assign t_sUsrRoleCompany.tc_Status = "C":U.
else do:
<M-7 run AddDetailLine
(input 'UsrRoleCompany':U (icTable),
input tUsrRole.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_sUsrRoleCompany.tc_Status = "N":U.
end.
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
<M-11 run SetRowidConvert
(input t_sUsrRoleCompany.tc_Rowid (icOldRowid),
input tUsrRoleCompany.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sUsrRoleCompany.UsrRoleCompany_ID = tUsrRoleCompany.UsrRoleCompany_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sUsrRoleCompany.UsrRole_ID = tUsrRoleCompany.UsrRole_ID
t_sUsrRoleCompany.tc_Rowid = tUsrRoleCompany.tc_Rowid
t_sUsrRoleCompany.tc_ParentRowid = tUsrRole.tc_Rowid.
end.
/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
<M-9 run SetRowidConvert
(input t_sUsrRole.tc_Rowid (icOldRowid),
input tUsrRole.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BUserRole>
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign
t_sUsrRole.UsrRole_ID = tUsrRole.UsrRole_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sUsrRole.tc_Rowid = tUsrRole.tc_Rowid
t_sUsrRole.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tUsrRole.UsrRole_ID).
end.
if oiReturnStatus = -98
then oiReturnStatus = 0.