| 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. |
MAIN_BLOCK:
do on error undo, leave MAIN_BLOCK:
assign viLocalReturnStatus = 0
oiReturnStatus = -98.
/* ==================================================================== *
* To optimalize performance, keep the instances as open as possible *
* In case of API execution where the DataSave is done in the same run *
* instances can be kept open even after Additional Updates *
* ==================================================================== */
assign vlIsKeepInstOpenBDebtor = true.
/* ====================================== */
/* Fill SharedSetID for excel integration */
/* ====================================== */
assign viSharedSetID = 0.
if vcActivityCode <> "Create":U
then do:
/*SharedSet_ID linked to the current company (viCompanyId)*/
assign vcSharedSetType = {&SHAREDSETTYPECODE-DEBTOR}.
<Q-14 run LookupSharedSetForCompany (all) (Read) (NoCache)
(input viCompanyId, (CompanyId)
input vcSharedSetType, (SharedSetType)
output dataset tqSharedSetForCompany) in BCompany >
find first tqSharedSetForCompany no-error.
if available tqSharedSetForCompany
then assign viSharedSetID = tqSharedSetForCompany.tiSharedSet_ID.
end.
for each t_sDebtor
break by t_sDebtor.DebtorCode:
assign t_sDebtor.SharedSet_ID = viSharedSetID.
/* ================================================================= */
/* Lookup object by logical key */
/* When in create mode, skip lookup. */
/* ================================================================= */
if vcActivityCode <> "Create":U and vcActivityCode <> "CreateNoMfgUpdate":U
then do:
assign vcFreeform = "for each Debtor where Debtor.DebtorCode = '":U + t_sDebtor.DebtorCode + "'":U
+ " and Debtor.SharedSet_ID = " + string(t_sDebtor.SharedSet_ID).
<M-15 run DataLoad
(input '':U (icRowids),
input '':U (icPkeys),
input '':U (icObjectIds),
input vcFreeform (icFreeform),
input yes (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
if viFcReturnSuper >= 0
then do:
find first tDebtor where
tDebtor.DebtorCode = t_sDebtor.DebtorCode and
tDebtor.SharedSet_ID = t_sDebtor.SharedSet_ID
no-error.
if available tDebtor and tDebtor.tc_Status <> "":U
then do:
assign vcMessage = trim(#T-63'This customer was already processed in this transaction.':255(864645554)T-63#) + chr(10) +
substitute(#T-75'Customer Code: &1':255(259600469)T-75#, trim(t_sDebtor.DebtorCode)) + chr(10) +
substitute(#T-37'Shared Set ID: &1':255(95411682)T-37#, trim(string(t_sDebtor.SharedSet_ID)))
oiReturnStatus = -1.
<M-74 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input 'tDebtor.DebtorCode':U (icFieldName),
input t_sDebtor.DebtorCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sDebtor.tc_Rowid (icRowid),
input 'QadFin-541428':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
return.
end. /* if available tDebtor and tDebtor.tc_Status <> "":U */
end. /* if viFcReturnSuper >= 0 */
end. /* if vcActivityCode <> "Create":U and vcActivityCode <> "CreateNoMfgUpdate":U */
/* ================================================================= */
/* 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_sDebtor.
else do:
if viFcReturnSuper <> 0 then viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
<M-85 run SetRowidConvert
(input t_sDebtor.tc_Rowid (icOldRowid),
input tDebtor.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sDebtor.tc_Rowid = tDebtor.tc_Rowid
t_sDebtor.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tDebtor.Debtor_ID).
end.
next.
end.
if vcActivityCode = "Create":U OR vcActivityCode = "CreateNoMfgUpdate":U
or viFcReturnSuper = -4
then do:
/* ================================================================= */
/* When object not found and in modify only mode, return an error. */
/* ================================================================= */
if vcActivityCode = "Modify":U
then do:
assign vcMessage = trim(#T-1'Object with key $1 does not exist.':100(48021)T-1#).
<M-3 run SetMessage
(input vcMessage (icMessage),
input t_sDebtor.DebtorCode (icArguments),
input 'tDebtor.DebtorCode':U (icFieldName),
input t_sDebtor.DebtorCode (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_sDebtor.tc_Rowid (icRowid),
input 'QadFin-5207':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
assign viLocalReturnStatus = -1.
leave MAIN_BLOCK.
end.
/* ================================================================= */
/* When object not found or in create mode, create it. */
/* ================================================================= */
<M-4 run AddDetailLine
(input 'Debtor':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sDebtor.tc_Status = "N":U
tDebtor.tc_Status = "N":U. /* we need to assign this tomake are test for doubles work */
end.
else if available tDebtor
then do:
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_sDebtor.tc_Status = "C":U
tDebtor.tc_Status = "C":U. /* we need to assign this tomake are test for doubles work */
end.
assign t_sDebtor.Debtor_ID = tDebtor.Debtor_ID.
/* insert code for subtables here: DebtorSafDefault */
/* ================================================================= */
/* Delete existing detail */
/* ================================================================= */
for each tDebtorSafDefault where
tDebtorSafDefault.tc_ParentRowid = tDebtor.tc_Rowid:
assign tDebtorSafDefault.tc_Status = "D":U.
end.
/* ================================================================= */
/* Update / add detail */
/* ================================================================= */
for each t_sDebtorSafDefault where
t_sDebtorSafDefault.tc_ParentRowid = t_sDebtor.tc_Rowid:
assign t_sDebtorSafDefault.Debtor_ID = t_sDebtor.Debtor_ID.
/* ============================================ */
/* Get the SafConcept_ID based on the logical key */
/* ============================================ */
if ( t_sDebtorSafDefault.SafConcept_ID = ? or
t_sDebtorSafDefault.SafConcept_ID = 0) and
t_sDebtorSafDefault.tcSafConceptCode <> "" and
t_sDebtorSafDefault.tcSafConceptCode <> ?
then do:
<Q-11 run SafConceptPrim (all) (Read) (NoCache)
(input ?, (SafConceptID)
input t_sDebtorSafDefault.tcSafConceptCode, (SafConceptCode)
output dataset tqSafConceptPrim) in BSafConcept >
find tqSafConceptPrim where
tqSafConceptPrim.tcSafConceptCode = t_sDebtorSafDefault.tcSafConceptCode
no-lock no-error.
if available tqSafConceptPrim
then assign t_sDebtorSafDefault.SafConcept_ID = tqSafConceptPrim.tiSafConcept_ID.
end. /* if t_sDebtorSafDefault_ID = ? or */
find first tDebtorSafDefault
where tDebtorSafDefault.tc_ParentRowid = tDebtor.tc_Rowid
and tDebtorSafDefault.Debtor_ID = t_sDebtorSafDefault.Debtor_ID
and tDebtorSafDefault.SafConcept_ID = t_sDebtorSafDefault.SafConcept_ID
no-error.
if available tDebtorSafDefault
then assign t_sDebtorSafDefault.tc_Status = "C":U.
else do:
<M-5 run AddDetailLine
(input 'DebtorSafDefault':U (icTable),
input tDebtor.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturnStatus = 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viLocalReturnStatus < 0 then leave MAIN_BLOCK.
assign t_sDebtorSafDefault.tc_Status = "N":U.
end.
<M-65 run SetRowidConvert
(input t_sDebtorSafDefault.tc_Rowid (icOldRowid),
input tDebtorSafDefault.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sDebtorSafDefault.DebtorSafDefault_ID = tDebtorSafDefault.DebtorSafDefault_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sDebtorSafDefault.Debtor_ID = tDebtorSafDefault.Debtor_ID
t_sDebtorSafDefault.tc_Rowid = tDebtorSafDefault.tc_Rowid
t_sDebtorSafDefault.tc_ParentRowid = tDebtor.tc_Rowid.
end. /* for each t_sDebtorSafDefault */
<M-8 run SetRowidConvert
(input t_sDebtor.tc_Rowid (icOldRowid),
input tDebtor.tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus)) in BDebtor>
/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_sDebtor.Debtor_ID = tDebtor.Debtor_ID
t_sDebtor.SharedSet_ID = tDebtor.SharedSet_ID
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_sDebtor.tc_Rowid = tDebtor.tc_Rowid
t_sDebtor.tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(tDebtor.Debtor_ID).
if t_sDebtor.TxzTaxZone = "":U or
t_sDebtor.TxzTaxZone = ?
then do:
<Q-87 run AddressByBusinessRelationType (all) (Read) (NoCache)
(input t_sDebtor.tcBusinessRelationCode, (BusinessRelationCode)
input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressTypeCode)
output dataset tqAddressByBusinessRelationType) in BBusinessRelation>
find first tqAddressByBusinessRelationType where
tqAddressByBusinessRelationType.tcBusinessRelationCode = t_sDebtor.tcBusinessRelationCode and
tqAddressByBusinessRelationType.tcAddressTypeCode = {&ADDRESSTYPECODESYSTEM-HEADOFFICE}
no-error.
if available tqAddressByBusinessRelationType
then assign t_sDebtor.TxzTaxZone = tqAddressByBusinessRelationType.tcTxzTaxZone.
end. /*if t_sDebtor.TxzTaxZone = "":U or*/
end. /* for each t_sCreditor */
end. /* of MAIN_BLOCK */
if viLocalReturnStatus < 0
then do:
<M-44 run StopExternalInstances (output viFcReturnSuper (oiReturnStatus)) in BDebtor>
end.
/* Error handling */
assign oiReturnStatus = viLocalReturnStatus.