GitHub
CRM
copyAttachmentsBetweenModules

Copy Attachments Between CRM Modules

How to copy record attachments between two CRM modules. In this example, we will copy from the Accounts module and move attachments to the Contacts module.

We need to start with an Account_ID.

Most likely - you'll pass this account_ID in through the workflow automation, when the function is triggered according to some rule. In this case, we'd need to setup a workflow associated with the Accounts module to trigger this funciton, and we'd need to pass in an account ID each time.

See the code comments for more details about this funciton.

//get the account JSON object for the given Account_ID
accountResponse = zoho.crm.getRecordById("Accounts",Account_ID);
customList = list();
customList.add(accountResponse);
//you can add multiple accounts to this list by doing another customList.add(<Account_Object>) statement.
 
 
//for each Account, iterate this loop. If there is only one account, still add it to
//customList with the .add function and this loop will only run one time
for each  record in customList
{
    //get the Account ID
	id = record.get("id");
	
    //find related attachments with this Account
	relatedAttachments = zoho.crm.getRelatedRecords("Attachments","Accounts",id.toLong());
	
    //get the first Contact assocaited with this Account
	relatedContact = zoho.crm.getRelatedRecords("Contacts","Accounts",id.toLong(),1,1);
	
    //get the record ID and name of this Contact
	contactId = relatedContact.get(0).getJson("id");
	contactName = relatedContact.get(0).getJson("Stud_Name");
	
    //for each attachment associated with the current Account, iterate this loop
	for each  rec in relatedAttachments
	{
        //get the file name and record ID of the attachment
		fileName = rec.get("File_Name");
		fileRecordId = rec.get("id");
		
        //generate a formatted URL for the api call
		formattedUrl = "https://zohoapis.com/crm/v3/accounts/" + id + "/attachments/" + fileRecordId;
		invokeParams = Map();
		invokeParams.put("fields_attachment_id",fileRecordId);
		
        //execute API call to download the attachment
		downloadResponse = invokeurl
		[
			url : formattedUrl
			type : GET
			parameters : invokeParams
			connection : "<Oauth_Connection_Name>"
		];
		
        	//upload this attachment back to the target module, in this case "Contacts"
		uploadResponse = zoho.crm.attachFile("Contacts",contactId,downloadResponse, "allmodules");
	}
}
//if you get a return error, you may need to uncomment this return statement
// return "";

Contributor: Daniel Whiteside daniel.w@zohocorp.com Last Updated: 5/14/2023