| 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. |
/* === BBusinessRelation:DataLoadByInput === */
/* ================== */
/* Exception handling */
/* ================== */
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
/* ======================================== */
/* Start queries that are used in all cases */
/* ======================================== */
/** ================== */
/* Start main block */
/* ================== */
PROCESSBLOCK: DO :
/* ============================================================================================================ */
/* First loop on the main table to load all business-relations that need to be loaded into the instance */
/* Raise no error in case the data couldn't be read as this will be checked later on combined with the activity */
/* The max-length a character field (like vcDataLoadFreeFrom) is limited to 32 Kb so we need to do several */
/* DataLoads to load all db-instances into the business-instance: we will do a DataLoadfor every 500 business- */
/* relations as counting them is much more performant then just checking the length of a string. */
/* ============================================================================================================ */
if vcActivityCode <> "Create":U
then do :
assign vcDataLoadFreeFrom = "":U.
for each t_sBusinessRelation :
if vcDataLoadFreeFrom = "":U
then assign vcDataLoadFreeFrom = "for each BusinessRelation where ":U.
else assign vcDataLoadFreeFrom = vcDataLoadFreeFrom + " or ":U.
assign vcDataLoadFreeFrom = " BusinessRelation.BusinessRelationCode = '":U + t_sBusinessRelation.BusinessRelationCode + "'":U
viBusRelCounter = viBusRelCounter + 1.
if viBusRelCounter > 500
then do :
<M-36 run DataLoad
(input ? (icRowids),
input ? (icPkeys),
input ? (icObjectIds),
input vcDataLoadFreeFrom (icFreeform),
input true (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0 and
viFcReturnSuper <> -4
then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0
then Leave PROCESSBLOCK.
assign vcDataLoadFreeFrom = "":U
viBusRelCounter = 0.
end. /* if viBusRelCounter > 500 */
end. /* for each t_sBusinessRelation */
if vcDataLoadFreeFrom <> "":U
then do :
<M-37 run DataLoad
(input ? (icRowids),
input ? (icPkeys),
input ? (icObjectIds),
input vcDataLoadFreeFrom (icFreeform),
input true (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0 and
viFcReturnSuper <> -4
then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0
then Leave PROCESSBLOCK.
end. /* if vcDataLoadFreeFrom <> "":U */
end. /* if vcActivityCode <> "Create":U */
/* =========================================================================================================== */
/* Now go through the input BusRels and take the appropriate actions for each input BusRel record of the input */
/* =========================================================================================================== */
for each t_sBusinessRelation by t_sBusinessRelation.tc_Rowid:
/* =================================== */
/* Create mode: create new BusRel */
/* =================================== */
if vcActivityCode = "Create":U
then do :
<M-40 run AddDetailLine
(input 'BusinessRelation':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
/* Update input to allow correct matching */
assign t_sBusinessRelation.tc_Status = "N":U.
end. /* if vcActivityCode = "Create":U */
else do :
/* ======================================================= */
/* Not in create mode: try to find the BusRel */
/* ======================================================= */
find first tBusinessRelation where
tBusinessRelation.BusinessRelationCode = t_sBusinessRelation.BusinessRelationCode
no-error.
/* ======================================= */
/* Actions when we cannot find the BusRel */
/* ======================================= */
if not available tBusinessRelation
then do :
/* For delete: just remove the input record and go to the next one */
if vcActivityCode = "Delete":U
then do :
delete t_sBusinessRelation.
Next.
end. /* if vcActivityCode = "Delete":U */
else /* For delete: raise an error */
if vcActivityCode = "Modify":U
then do :
assign vcMessage = trim(substitute(#T-42'Business-relation with code &1 cannot be updated as it cannot be found.':255(73461913)T-42#,t_sBusinessRelation.BusinessRelationCode))
viLocalReturnStatus = -3.
<M-41 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tBusinessRelation.BusinessRelationCode':U (icFieldName),
input t_sBusinessRelation.BusinessRelationCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sBusinessRelation.tc_Rowid (icRowid),
input 'QadFin-9583':U:U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
Leave PROCESSBLOCK.
end. /* if vcActivityCode = "Modify":U */
/* For non-delete and non-modify (thus also including blank) activity: create just one */
else do :
<M-43 run AddDetailLine
(input 'BusinessRelation':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
/* Update input to allow correct matching */
assign t_sBusinessRelation.tc_Status = "N":U.
end. /* Not if vcActivityCode = "Modify":U */
end. /* if not available tBusinessRelation */
/* ======================================= */
/* Actions when we can find the BusRel */
/* ======================================= */
else do:
/* ======================================================= */
/* If we can find the record with a filled tc_status then */
/* this means we have a duplicate record in our input */
/* ======================================================= */
if tBusinessRelation.tc_Status <> "":U
then do :
assign vcMessage = trim(substitute(#T-46'Business-relation with code &1 was detected multiple times in the input. Unable to state which one should be the one to handle.':255(332065570)T-46#,t_sBusinessRelation.BusinessRelationCode))
viLocalReturnStatus = -3.
<M-44 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tBusinessRelation.BusinessRelationCode':U (icFieldName),
input t_sBusinessRelation.BusinessRelationCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sBusinessRelation.tc_Rowid (icRowid),
input 'QadFin-9606':U:U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
Leave PROCESSBLOCK.
end. /* if tBusinessRelation.tc_Status <> "":U */
/* ======================================================================== */
/* For delete: just mark the input record as deleted and go to the next one */
/* ======================================================================== */
if vcActivityCode = "Delete":U
then do :
/* Update input to allow correct matching and go to the next one */
assign tBusinessRelation.tc_status = "D":U
t_sBusinessRelation.tc_status = "D":U
t_sBusinessRelation.tc_Rowid = tBusinessRelation.tc_Rowid
t_sBusinessRelation.tc_ParentRowid = "":U
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4)) +
string(tBusinessRelation.BusinessRelation_ID).
Next.
end. /* if vcActivityCode = "Delete":U */
/* ================================== */
/* For modify: just set the tc_status */
/* ================================== */
else assign t_sBusinessRelation.tc_Status = "C":U /* Update input to allow correct matching */
tBusinessRelation.tc_Status = "C":U.
end. /* Not if not available tBusinessRelation */
end. /* Not if vcActivityCode = "Create":U */
/* ===================================================== */
/* Delete existing Addresses of the BusinessRelation */
/* ===================================================== */
for each tAddress where
tAddress.tc_ParentRowid = tBusinessRelation.tc_Rowid:
assign tAddress.tc_Status = "D":U.
end. /* For each tAddress where */
/* ===================================================== */
/* Actions for the new Addresses of the BusinessRelation */
/* ===================================================== */
for each t_sAddress where
t_sAddress.tc_ParentRowid = t_sBusinessRelation.tc_Rowid and
t_sAddress.tc_Status <> "D":U:
/* Try to find the address based upon the parentrowid and the first logical unique key of the table */
find first tAddress where
tAddress.tc_ParentRowid = tBusinessRelation.tc_Rowid and
tAddress.AddressStreet1 = t_sAddress.AddressStreet1 and
tAddress.AddressStreet2 = t_sAddress.AddressStreet2 and
tAddress.AddressStreet3 = t_sAddress.AddressStreet3 and
tAddress.AddressZip = t_sAddress.AddressZip and
tAddress.AddressCity = t_sAddress.AddressCity and
tAddress.tcAddressTypeCode = t_sAddress.tcAddressTypeCode
no-error.
/* Try to find the address based upon the parentrowid and the second logical unique key of the table */
if not available tAddress
then find first tAddress where
tAddress.tc_ParentRowid = tBusinessRelation.tc_Rowid and
tAddress.AddressLogicKeyString = t_sAddress.AddressLogicKeyString and
tAddress.tcAddressTypeCode = t_sAddress.tcAddressTypeCode
no-error.
/* Mark the record as being changed or create new record in case it could not be found */
if available tAddress
then assign t_sAddress.tc_Status = "C":U
t_sAddress.Address_ID = tAddress.Address_ID.
else do :
<M-22 run AddDetailLine
(input 'Address':U (icTable),
input tBusinessRelation.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
assign t_sAddress.tc_Status = "N":U. /* Update input to allow correct matching */
end. /* Not if available tAddress */
/* ===================================================== */
/* Delete existing Contacts of the Address */
/* ===================================================== */
for each tContact where
tContact.tc_ParentRowid = tAddress.tc_Rowid:
assign tContact.tc_Status = "D":U.
end. /* for each tContact where */
/* ===================================================== */
/* Actions for the new Contacts of the Address */
/* ===================================================== */
for each t_sContact where
t_sContact.tc_ParentRowid = t_sAddress.tc_Rowid and
t_sContact.tc_Status <> "D":U:
/* Try to find the address based upon the parentrowid and the first logical unique key of the table */
find first tContact where
tContact.tc_ParentRowid = tAddress.tc_Rowid and
tContact.ContactName = t_sContact.ContactName no-error.
/* Mark the record as being changed or create new record in case it could not be found */
if available tContact
then assign t_sContact.tc_Status = "C":U.
else do:
<M-23 run AddDetailLine
(input 'Contact':U (icTable),
input tAddress.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
assign t_sContact.tc_Status = "N":U. /* Update input to allow correct matching */
end. /* Not if available tContact */
/* ============================================== */
/* Update input-contact to allow correct matching */
/* ============================================== */
assign t_sContact.Contact_ID = tContact.Contact_ID
t_sContact.Address_ID = tContact.Address_ID
t_sContact.tc_Rowid = tContact.tc_Rowid
t_sContact.tc_ParentRowid = tAddress.tc_Rowid.
end. /* for each t_sContact where */
/* ============================================== */
/* Update input-contact to allow correct matching */
/* ============================================== */
assign t_sAddress.Address_ID = tAddress.Address_ID
t_sAddress.BusinessRelation_ID = tAddress.BusinessRelation_ID
t_sAddress.tc_Rowid = tAddress.tc_Rowid
t_sAddress.tc_ParentRowid = tBusinessRelation.tc_Rowid.
end. /* for each t_sAddress where */
/* ========================================================= */
/* Delete existing BusRelSafDefaults of the BusinessRelation */
/* ========================================================= */
for each tBusRelationSafDefault where
tBusRelationSafDefault.tc_ParentRowid = tBusinessRelation.tc_Rowid :
assign tBusRelationSafDefault.tc_Status = "D":U.
end. /* For each tBusRelationSafDefault where */
/* ============================================================= */
/* Actions for the new BusRelSafDefaults of the BusinessRelation */
/* ============================================================= */
for each t_sBusRelationSafDefault where
t_sBusRelationSafDefault.tc_ParentRowid = t_sBusinessRelation.tc_Rowid and
t_sBusRelationSafDefault.tc_Status <> "D":U :
/* Try to find the BusRelSafDefaults based upon the parentrowid and the logical unique key of the table */
find first tBusRelationSafDefault where
tBusRelationSafDefault.tc_ParentRowid = tBusinessRelation.tc_Rowid and
tBusRelationSafDefault.tcSafConceptCode = t_sBusRelationSafDefault.tcSafConceptCode
no-error.
/* Mark the record as being changed or create new record in case it could not be found */
if available tBusRelationSafDefault
then assign t_sBusRelationSafDefault.tc_Status = "C":U.
else do:
<M-24 run AddDetailLine
(input 'BusRelationSafDefault':U (icTable),
input tBusinessRelation.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
assign t_sBusRelationSafDefault.tc_Status = "N":U. /* /* Update input to allow correct matching */ */
end. /* Not if available tBusRelationSafDefault */
/* ======================================================== */
/* Update input-BusRelSafDefaults to allow correct matching */
/* ======================================================== */
assign t_sBusRelationSafDefault.BusRelationSafDefault_ID = tBusRelationSafDefault.BusRelationSafDefault_ID
t_sBusRelationSafDefault.BusinessRelation_ID = tBusRelationSafDefault.BusinessRelation_ID
t_sBusRelationSafDefault.tc_Rowid = tBusRelationSafDefault.tc_Rowid
t_sBusRelationSafDefault.tc_ParentRowid = tBusinessRelation.tc_Rowid.
end. /* for each t_sBusRelationSafDefault where */
/* =================================================== */
/* Delete existing VATNumbers of the BusinessRelation */
/* =================================================== */
for each tVatNumber where
tVatNumber.tc_ParentRowid = tBusinessRelation.tc_Rowid:
assign tVatNumber.tc_Status = "D":U.
end. /* for each tVatNumber where */
/* ======================================================= */
/* Actions for the new VATNumbers of the BusinessRelation */
/* ======================================================= */
for each t_sVatNumber where
t_sVatNumber.tc_ParentRowid = t_sBusinessRelation.tc_Rowid and
t_sVatNumber.tc_Status <> "D":U:
/* Try to find the address based upon the parentrowid and the logical unique key of the table */
find first tVatNumber where
tVatNumber.tc_ParentRowid = tBusinessRelation.tc_Rowid and
tVatNumber.VatNumberIdentity = t_sVatNumber.VatNumberIdentity and
tVatNumber.tcIdentityCountryCode = t_sVatNumber.tcIdentityCountryCode
no-error.
/* Mark the record as being changed or create new record in case it could not be found */
if available tVatNumber
then assign t_sVatNumber.tc_Status = "C":U.
else do:
<M-25 run AddDetailLine
(input 'VatNumber':U (icTable),
input tBusinessRelation.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
if viFcReturnSuper <> 0
then viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave PROCESSBLOCK.
assign t_sVatNumber.tc_Status = "N":U. /* Update input to allow correct matching */
end. /* Not if available tVatNumber */
/* ============================================== */
/* Update input-contact to allow correct matching */
/* ============================================== */
assign t_sVatNumber.VatNumber_ID = tVatNumber.VatNumber_ID
t_sVatNumber.BusinessRelation_ID = tVatNumber.BusinessRelation_ID
t_sVatNumber.tc_Rowid = tVatNumber.tc_Rowid
t_sVatNumber.tc_ParentRowid = tBusinessRelation.tc_Rowid.
end. /* or each t_sVatNumber where */
/* ============================================== */
/* Update input-contact to allow correct matching */
/* ============================================== */
assign t_sBusinessRelation.BusinessRelation_ID = tBusinessRelation.BusinessRelation_ID
t_sBusinessRelation.tc_Rowid = tBusinessRelation.tc_Rowid
t_sBusinessRelation.tc_ParentRowid = "":U
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4)) +
string(tBusinessRelation.BusinessRelation_ID).
end. /* for each t_sBusinessRelation by t_sBusinessRelation.tc_Rowid: */
END. /* PROCESSBLOCK: DO : */
/* =============================================================================== */
/* Start queries that are used in all cases and queries that are used conditionaly */
/* =============================================================================== */
/* ================== */
/* Exception handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.