project QadFinancials > class BMfgEndUser > method MaintainDataBusinessRelation
Description
This method is used to replicate end user information from Financial to MFG when modify a related business relation.
Parameters
tContact | input | temp-table | |
tEndUserAddress | input | temp-table | |
icDomainCode | input | character | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program3/bmfgenduser.p)
/* ====================== */
/* Check input parameters */
/* ====================== */
if not can-find(first tContact)
then return.
/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = -98
viLocalReturnStatus = 0
vlQueryStartedDomainBySharedSet = false
vcListEuMstr = '':U
vcEndUserDomainCode = icDomainCode.
/* ======================================================== */
/* Store the instance id for the Business relation instance */
/* ======================================================== */
if viBBusinessRelationMfgEndUserID = 0 or
viBBusinessRelationMfgEndUserID = ?
then do:
<I-32 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BBusinessRelation"}>
end. /* if viBBusinessRelationMfgEndUserID = 0 */
else do:
<I-33 {bFcOpenInstance
&CLASS = "BBusinessRelation"}>
end. /* NOT if viBBusinessRelationMfgEndUserID = 0 */
/* Fill in tDebtorEndUser table */
empty temp-table tDebtorEndUser.
/* Start queries */
<Q-37 run DebtorEndUserByDebtorByAddress (Start) in BDebtorEndUser >
<Q-38 run DebtorEndUserByDbt (Start) in BDebtorEndUser >
for each tEndUserAddress where
tEndUserAddress.tc_Status = 'C':U or
tEndUserAddress.tc_Status = 'N':U:
<Q-35 run DebtorEndUserByDebtorByAddress (all) (Read) (NoCache)
(input tEndUserAddress.Address_ID, (AddressID)
input false, (DebtorEndUserIsShipto)
input true, (DebtorEndUserIsDebtor)
input ?, (DebtorShipToCode)
input ?, (DebtorID)
input ?, (CompanyId)
output dataset tqDebtorEndUserByDebtorByAddress) in BDebtorEndUser >
find first tqDebtorEndUserByDebtorByAddress where
tqDebtorEndUserByDebtorByAddress.tiAddress_ID = tEndUserAddress.Address_ID and
tqDebtorEndUserByDebtorByAddress.tlDebtorEndUserIsShipTo = false and
tqDebtorEndUserByDebtorByAddress.tlDebtorEndUserIsDebtor = true
no-error.
if available tqDebtorEndUserByDebtorByAddress
then do:
<Q-36 run DebtorEndUserByDbt (all) (Read) (NoCache)
(input ?, (CompanyId)
input tqDebtorEndUserByDebtorByAddress.tiDebtor_ID, (DebtorId)
output dataset tqDebtorEndUserByDbt) in BDebtorEndUser >
find first tqDebtorEndUserByDbt where
tqDebtorEndUserByDbt.tlDebtorEndUserIsDebtor = true and
tqDebtorEndUserByDbt.tiDebtor_ID = tqDebtorEndUserByDebtorByAddress.tiDebtor_ID
no-error.
if available tqDebtorEndUserByDbt
then do:
create tDebtorEndUser.
assign
tDebtorEndUser.Address_ID = tqDebtorEndUserByDbt.tiAddress_ID
tDebtorEndUser.Debtor_ID = tqDebtorEndUserByDbt.tiDebtor_ID
tDebtorEndUser.DebtorEndUser_ID = tqDebtorEndUserByDbt.tiDebtorEndUser_ID
tDebtorEndUser.DebtorEndUserCode = tqDebtorEndUserByDbt.tcDebtorEndUserCode
tDebtorEndUser.DebtorEndUserIsDebtor = tqDebtorEndUserByDbt.tlDebtorEndUserIsDebtor
tDebtorEndUser.DebtorEndUserIsShipTo = tqDebtorEndUserByDbt.tlDebtorEndUserIsShipTo
tDebtorEndUser.LastModifiedDate = tqDebtorEndUserByDbt.ttLastModifiedDate
tDebtorEndUser.LastModifiedTime = tqDebtorEndUserByDbt.tiLastModifiedTime
tDebtorEndUser.LastModifiedUser = tqDebtorEndUserByDbt.tcLastModifiedUser
tDebtorEndUser.SharedSet_ID = tqDebtorEndUserByDbt.tiSharedSet_ID
tDebtorEndUser.tc_Rowid = tqDebtorEndUserByDbt.tc_rowid
tDebtorEndUser.tcAddressCity = tqDebtorEndUserByDbt.tcAddressCity
tDebtorEndUser.tcAddressEMail = tqDebtorEndUserByDbt.tcAddressEMail
tDebtorEndUser.tcAddressFax = tqDebtorEndUserByDbt.tcAddressFax
tDebtorEndUser.tcAddressName = tqDebtorEndUserByDbt.tcAddressName
tDebtorEndUser.tcAddressStreet1 = tqDebtorEndUserByDbt.tcAddressStreet1
tDebtorEndUser.tcAddressStreet2 = tqDebtorEndUserByDbt.tcAddressStreet2
tDebtorEndUser.tcAddressStreet3 = tqDebtorEndUserByDbt.tcAddressStreet3
tDebtorEndUser.tcAddressTelephone = tqDebtorEndUserByDbt.tcAddressTelephone
tDebtorEndUser.tcAddressTypeCode = tqDebtorEndUserByDbt.tcAddressTypeCode
tDebtorEndUser.tcAddressWebSite = tqDebtorEndUserByDbt.tcAddressWebSite
tDebtorEndUser.tcAddressZip = tqDebtorEndUserByDbt.tcAddressZip
tDebtorEndUser.tcBusinessRelationCode = tqDebtorEndUserByDbt.tcBusinessRelationCode
tDebtorEndUser.tcCountryCode = tqDebtorEndUserByDbt.tcCountryCode
tDebtorEndUser.tcCountryDescription = tqDebtorEndUserByDbt.tcCountryDescription
tDebtorEndUser.tcCountyCode = tqDebtorEndUserByDbt.tcCountyCode
tDebtorEndUser.tcCountyDescription = tqDebtorEndUserByDbt.tcCountyDescription
tDebtorEndUser.tcDebtorCode = tqDebtorEndUserByDbt.tcDebtorCode
tDebtorEndUser.tcStateCode = tqDebtorEndUserByDbt.tcStateCode
tDebtorEndUser.tcStateDescription = tqDebtorEndUserByDbt.tcStateDescription
tDebtorEndUser.tiAddressBusinessRelation_ID = tqDebtorEndUserByDbt.tiBusinessRelation_ID
tDebtorEndUser.tiDebtorBusinessRelation_ID = tqDebtorEndUserByDbt.tiBusinessRelation_ID
tDebtorEndUser.tlAddressIsTemporary = tqDebtorEndUserByDbt.tlAddressIsTemporary.
end. /* if available tqDebtorEndUserByDbt */
end. /* if available tqDebtorEndUserByDebtorByAddress */
end. /* for each tEndUserAddress: */
/* Stop queries */
<Q-39 run DebtorEndUserByDebtorByAddress (Stop) in BDebtorEndUser >
<Q-40 run DebtorEndUserByDbt (Stop) in BDebtorEndUser >
CONVERTBLOCK:
DO:
/* ===================================== */
/* Check which records need to be loaded */
/* ===================================== */
for each tDebtorEndUser
break by tDebtorEndUser.SharedSet_ID:
/* =============== */
/* Start the query */
/* =============== */
if vlQueryStartedDomainBySharedSet = false
then do:
<Q-1 run DomainBySharedSetDomain (Start) in BDomain >
assign vlQueryStartedDomainBySharedSet = true.
end. /* if vlQueryStartedDomainBySharedSet = false */
/* ======================================================================================================== */
/* Check if the Customer End User needs to be replicated to one domain or to all domains of this shared set */
/* If icDomainCode is left blank, all domains for this shared set will be replicated. */
/* ======================================================================================================== */
if first-of(tDebtorEndUser.SharedSet_ID)
then do:
<Q-2 run DomainBySharedSetDomain (all) (Read) (Cache)
(input tDebtorEndUser.SharedSet_ID, (SharedSetId)
input 0, (DomainID)
input icDomainCode, (DomainCode)
output dataset tqDomainBySharedSetDomain) in BDomain >
end. /* if first-of(tDebtorEndUser.SharedSet_ID) */
for each tqDomainBySharedSetDomain where
tqDomainBySharedSetDomain.tiSharedSet_ID = tDebtorEndUser.SharedSet_ID and
tqDomainBySharedSetDomain.tcDomainCode = icDomainCode:
/* ============================================================ */
/* Create a list of all teu_mstr records that need to be loaded */
/* ============================================================ */
<Q-3 assign vlFcQueryRecordsAvailable = EuMstrByAddrDomain (NoCache)
(input tqDomainBySharedSetDomain.tcDomainCode, (Domain)
input tDebtorEndUser.DebtorEndUserCode, (Addr)) in BMfgEndUser >
if vlFcQueryRecordsAvailable = true
then assign vcListEuMstr = vcListEuMstr +
(if vcListEuMstr = '':U
then '':U
else chr(4)) +
tqDomainBySharedSetDomain.tcDomainCode +
chr(2) +
tDebtorEndUser.DebtorEndUserCode.
end. /* for each tqDomainBySharedSetDomain: */
end. /* for each tDebtorEndUser */
if vcListEuMstr <> "" and
vcListEuMstr <> ?
then do:
/* ========================= */
/* Load the teu_mstr records */
/* ========================= */
<M-4 run DataLoad
(input '':U (icRowids),
input vcListEuMstr (icPkeys),
input '':U (icObjectIds),
input '':U (icFreeform),
input false (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
if viFcReturnSuper <> 0
then do:
assign viLocalReturnStatus = viFcReturnSuper.
leave CONVERTBLOCK.
end. /* if viFcReturnSuper <> 0 */
end. /* if vcListEuMstr <> "" */
/* ============================================== */
/* Convert table tDebtorEndUser to table teu_mstr */
/* ============================================== */
for each tDebtorEndUser
break by tDebtorEndUser.SharedSet_ID:
/* =============== */
/* Start the query */
/* =============== */
if vlQueryStartedDomainBySharedSet = false
then do:
<Q-5 run DomainBySharedSetDomain (Start) in BDomain >
assign vlQueryStartedDomainBySharedSet = true.
end. /* if vlQueryStartedDomainBySharedSet = false */
/* ======================================================================================================== */
/* Check if the Customer End User needs to be replicated to one domain or to all domains of this shared set */
/* If icDomainCode is left blank, all domains for this shared set will be replicated. */
/* ======================================================================================================== */
if first-of(tDebtorEndUser.SharedSet_ID)
then do:
if tDebtorEndUser.SharedSet_ID = 0 or
tDebtorEndUser.SharedSet_ID = ?
then do:
assign vcMessage = trim(substitute(#T-19'The shared set ID for this customer end user (&1) was not defined.':255(69601)t-19#, trim(tDebtorEndUser.DebtorEndUserCode) ))
viLocalReturnStatus = -3.
<M-6 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 1 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8618':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
leave CONVERTBLOCK.
end. /* if tDebtorEndUser.SharedSet_ID = 0 or */
<Q-7 run DomainBySharedSetDomain (all) (Read) (Cache)
(input tDebtorEndUser.SharedSet_ID, (SharedSetId)
input 0, (DomainID)
input icDomainCode, (DomainCode)
output dataset tqDomainBySharedSetDomain) in BDomain >
end. /* if first-of(tDebtorEndUser.SharedSet_ID) */
for each tqDomainBySharedSetDomain where
tqDomainBySharedSetDomain.tlDomainPropertyIsSetupCompl:
/* ================================================== */
/* Create or update teu_mstr records based on tDebtorEndUser */
/* ================================================== */
find first teu_mstr where
teu_mstr.eu_addr = tDebtorEndUser.DebtorEndUserCode and
teu_mstr.eu_domain = tqDomainBySharedSetDomain.tcDomainCode
no-error.
if not available teu_mstr
then do:
if tDebtorEndUser.tc_Status = "D"
then next.
<M-8 run AddDetailLine
(input 'eu_mstr':U (icTable),
input '':U (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
if viFcReturnSuper <> 0
then do:
assign viLocalReturnStatus = viFcReturnSuper.
leave CONVERTBLOCK.
end. /* if viFcReturnSuper <> 0 */
assign teu_mstr.oid_eu_mstr = <M-9 GetNextOidValue () in BMfgEndUser> no-error.
if error-status:error
then do:
assign
vcMessage = trim(#T-20'The system cannot retrieve an OID value when replicating the customer end user.':255(69602)t-20#) + chr(10) +
trim(substitute(#T-21'Customer End User: &1.':222(69603)T-21#, trim(tDebtorEndUser.DebtorEndUserCode)))
viLocalReturnStatus = -1.
if ERROR-STATUS:NUM-MESSAGES > 0
then
assign
vcMessage = vcMessage +
chr(10) +
trim(substitute(#T-22'Detailed info: &1 (&2).':255(466)T-22#,ERROR-STATUS:GET-MESSAGE(1),string(ERROR-STATUS:GET-NUMBER(1)))).
<M-10 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 1 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8619':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
leave CONVERTBLOCK.
end. /* if error-status:error */
end. /* if not available teu_mstr */
else assign teu_mstr.tc_Status = "C":U.
assign teu_mstr.eu_addr = tDebtorEndUser.DebtorEndUserCode
teu_mstr.eu_domain = tqDomainBySharedSetDomain.tcDomainCode
teu_mstr.eu_cm_nbr = tDebtorEndUser.tcDebtorCode
teu_mstr.tc_Status = (if tDebtorEndUser.tc_Status = "D":U
then tDebtorEndUser.tc_Status
else teu_mstr.tc_Status).
/* get the address information from the business relation instance.*/
empty temp-table tEndUserAddress.
assign vhFcComponent = ?.
<M-11 run GetAddressWithID
(input tDebtorEndUser.address_id (iiAddressID),
input-output tEndUserAddress (tApiAddress),
output viFcReturnSuper (oiReturnStatus)) in BBusinessRelation>
/* find the t_saddress record we just created */
find first tEndUserAddress where
tEndUserAddress.address_id = tDebtorEndUser.address_id
no-error.
if available tEndUserAddress
then assign teu_mstr.eu_lang = tEndUserAddress.tcLngCode
teu_mstr.eu_sort = tEndUserAddress.AddressSearchName.
for each teud_det where
teud_det.eud_domain = teu_mstr.eu_domain and
teud_det.eud_addr = tDebtorEndUser.DebtorEndUserCode:
assign teud_det.tc_Status = 'D':U.
end.
for each tContact:
/* Create an eud_det record for each contact assoicated with the address */
/* Check to see if we have an existing teud_det record for the contact*/
find first teud_det where
teud_det.eud_domain = teu_mstr.eu_domain and
teud_det.eud_addr = tDebtorEndUser.DebtorEndUserCode and
teud_det.eud_sort = tContact.ContactName
no-error.
/* if we don't have eud_det record for this contact then create one */
if not available teud_det
then do:
<M-13 run AddDetailLine
(input 'eud_det':u (icTable),
input teu_mstr.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
assign
teud_det.oid_eud_det = <M-14 GetNextOidValue () in BMfgEndUser>
teud_det.eud_ls_type = {&ADDRESSTYPECODESYSTEM-ENDUSER}
teud_det.eud_domain = teu_mstr.eu_domain.
end. /* if not available teud_det */
else assign teud_det.tc_Status = tContact.tc_Status.
/* assign complex mapping fields */
assign
teud_det.eud_sort = tContact.ContactName
teud_det.eud_title = tContact.ContactTitle
teud_det.eud_type = tContact.ContactFunction
teud_det.eud_phone = tContact.ContactTelephone
teud_det.eud_fax = tContact.ContactFax
teud_det.eud_updt = TODAY
teud_det.eud_nametype = if tContact.ContactisPrimary then "P" else ""
teud_det.eud_addr = tDebtorEndUser.DebtorEndUserCode.
end. /* for each tContact */
end. /* for each tqDomainBySharedSetDomain: */
end. /* for each tDebtorEndUser */
end. /* CONVERTBLOCK */
/* ============== */
/* Stop the query */
/* ============== */
if vlQueryStartedDomainBySharedSet = true
then do:
<Q-15 run DomainBySharedSetDomain (Stop) in BDomain >
assign vlQueryStartedDomainBySharedSet = false.
end. /* if vlQueryStartedDomainBySharedSet = true */
VALIDATEBLOCK:
DO:
if viLocalReturnStatus < 0
then leave VALIDATEBLOCK.
/* ========== */
/* ValidateBC */
/* ========== */
<M-16 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave VALIDATEBLOCK.
/* ================== */
/* Additional Updates */
/* ================== */
<M-17 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave VALIDATEBLOCK.
/* ======== */
/* DataSave */
/* ======== */
<M-18 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BMfgEndUser>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave VALIDATEBLOCK.
end. /* VALIDATEBLOCK */
<I-34 {bFcCloseInstance
&CLASS = "BBusinessRelation"}>
/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.