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.