Skip to content
Groovy 40 – Create a Copy Button for Account Object

Create a Copy Button for Account Object

Create a custom text field on the Account object called RaisePopup_c (do not expose this field).

Next, implement the functions below:

1. Account Object Function 1

Function Name: getAssociatedContacts

Returns: List

No Parameters

     
        def var_relationship = Relationship
        def var_contact = []
        def var_info = []
        
        while (var_relationship.hasNext()) {
            def row = var_relationship.next()
            var_contact.add(row.getAttribute('ObjectId'))
        }
        
        def arrayLength = var_contact.size()
        
        for (def i = 0; i < arrayLength; i++) {
            if (var_contact[i] != null) {
                def var_contact_view = newView('PersonProfile')
                def criteria = newViewCriteria(var_contact_view)
                def randCont = criteria.createRow()
                def vctr = randCont.ensureCriteriaItem('PartyId')
                vctr.setOperator('=')
                vctr.setValue(var_contact[i])
                criteria.insertRow(randCont)
                var_contact_view.appendViewCriteria(criteria)
                var_contact_view.executeQuery()
        
                while (var_contact_view.hasNext()) {
                    def row2 = var_contact_view.next()
                    var_info.add(row2.PartyId)
                }
            }
        }
        
        return var_info
        
        

2. Account Object Function 2

Function Name: raisePopupFunction

Returns: void

No Parameters

    
        def ran = new Random()
        setAttribute('RaisePopup_c', ran.nextInt())
       
        

3. Action Button Code

        
        // Account
        // copyAccount
        def tm = now()
        def nme = nvl(OrganizationName, '') + '-' + tm
        def locid
        def locvo
        def newloc
        
        // Create Address
        if (PartySite.getEstimatedRowCount() != 0) {
            locvo = newView('Location')
            newloc = locvo?.createRow()
            newloc.setAttribute('CreatedByModule', 'ZCM')
            newloc.setAttribute('Country', PrimaryAddressCountry)
            newloc.setAttribute('City', PrimaryAddressCity)
            newloc.setAttribute('State', PrimaryAddressState)
            newloc.setAttribute('PostalCode', PrimaryAddressPostalCode)
            newloc.setAttribute('Address1', PrimaryAddressLine1)
            newloc.setAttribute('Address2', PrimaryAddressLine2)
            locvo.insertRow(newloc)
            locid = newloc.getAttribute('LocationId')
        }
        
        // Create OrganizationParty
        def opvo = newView('OrganizationParty')
        def newop = opvo?.createRow()
        newop.setAttribute('CreatedByModule', 'ZCM')
        opvo.insertRow(newop)
        
        // Create PartySite for OrganizationParty
        def newPtySiteColl
        def newPtySite
        if (PartySite.getEstimatedRowCount() != 0) {
            newPtySiteColl = newop.PartySite
            newPtySite = newPtySiteColl?.createRow()
            newPtySite.setAttribute('CreatedByModule', 'ZCM')
            newPtySite.setAttribute('LocationId', locid)
            newPtySiteColl.insertRow(newPtySite)
        }
        
        // Create PartySiteUse for PartySite
        def newPtySiteUseColl
        def newPtySiteUse
        if (PartySite.getEstimatedRowCount() != 0) {
            newPtySiteUseColl = newPtySite.PartySiteUse
            newPtySiteUse = newPtySiteUseColl?.createRow()
            newPtySiteUse.setAttribute('CreatedByModule', 'ZCM')
            newPtySiteUse.setAttribute('SiteUseType', 'SELL_TO')
            newPtySiteUseColl.insertRow(newPtySiteUse)
        }
        
        // Create OrganizationProfile for OrganizationParty
        def vo = newop.OrganizationProfile
        def newAcct = vo?.createRow()
        newAcct.setAttribute('OrganizationName', nme)
        newAcct.setAttribute('CreatedByModule', 'ZCM')
        vo.insertRow(newAcct)
        
        // Create PartySite for PartyUsageAssignment
        def newPSUColl = newop.PartyUsageAssignment
        def newPSU = newPSUColl?.createRow()
        newPSU.setAttribute('CreatedByModule', 'ZCM')
        newPSU.setAttribute('PartyUsageCode', 'SALES_ACCOUNT')
        newPSUColl.insertRow(newPSU)
        
        def allContacts = []
        allContacts = getAssociatedContacts()
        def primaryContact = PreferredContactPersonId
        
        // Add the Contacts
        if (allContacts.size() != 0) {
            for (int i = 0; i < allContacts.size(); i++) {
                def relationshipcollection = newop.Relationship
                def relationshipRow = relationshipcollection.createRow()
                relationshipRow.setAttribute('SubjectType', 'PERSON')
                relationshipRow.setAttribute('SubjectTableName', 'HZ_PARTIES')
                relationshipRow.setAttribute('ObjectType', 'ORGANIZATION')
                relationshipRow.setAttribute('ObjectTableName', 'HZ_PARTIES')
                relationshipRow.setAttribute('SubjectId', allContacts[i])
                relationshipRow.setAttribute('ObjectId', newop.PartyId)
                relationshipRow.setAttribute('CreatedByModule', 'ZCM')
                relationshipRow.setAttribute('RelationshipCode', 'CONTACT')
                relationshipRow.setAttribute('RelationshipType', 'CONTACT')
                relationshipRow.setAttribute('PartyUsageCodeForObject', 'CUSTOMER_CONTACT')
                relationshipRow.setAttribute('Role', 'CONTACTORG')
                relationshipcollection.insertRow(relationshipRow)
        
                if (PreferredContactPersonId == allContacts[i]) {
                    newop.setAttribute('PreferredContactPersonId', allContacts[i])
                }
            }
        }
        
        // Create SalesAccount
        def salesAccountObject = newView('SalesAccountVO')
        def salesAccountParty = salesAccountObject.createRow()
        salesAccountParty.setAttribute('PartyId', newop.PartyId)
        salesAccountParty.setAttribute('ExistingFlag', 'N')
        salesAccountParty.setAttribute('NamedAccountFlag', 'N')
        salesAccountParty.setAttribute('AssgnExceptionFlag', 'N')
        salesAccountObject.insertRow(salesAccountParty)
        
        // Add team members
        def teamIter = Team
        teamIter.reset()
        while (teamIter.hasNext()) {
            def teamRow = teamIter.next()
            if (teamRow?.ResourceId != adf.util.getUserPartyId()) {
                def SalesAccountResourceIterator = salesAccountParty?.SalesAccountResource
                def addMemeber = SalesAccountResourceIterator.createRow()
                addMemeber.setAttribute('SalesAccountId', salesAccountParty.SalesAccountId)
                addMemeber.setAttribute('ResourceId', teamRow?.ResourceId)
                addMemeber.setAttribute('AccessLevelCode', 200)
                addMemeber.setAttribute('LockAssignmentFlag', 'Y')
                addMemeber.setAttribute('AssignmentTypeCode', 'MANUAL')
                SalesAccountResourceIterator.insertRow(addMemeber)
            }
        }
        raisePopupFunction()
      
        

4. Field Validation Rule on RaisePopup_c

Error Message: Copy record created, please click save/save and close to keep the copy

        
        adf.error.warn(null)