Kaizen #44 - Handling Attachments API in Java and Java SDK (Part 1/2)

Kaizen #44 - Handling Attachments API in Java and Java SDK (Part 1/2)

Hello everyone!

Welcome back to yet another post in the Kaizen series.
This week, we will discuss about the attachments API in Java and Java SDK.

1. Introduction to Attachments API

Attachments in Zoho CRM are an important aspect of any record as they add additional information in the form of documents such as Marketing Collateral, Sales Quotes/Orders/Invoices, SLA and etc to the existing record. A record can contain multiple attachments. However, the attachments hold a maximum limit per record. The attachment limit per record is 100Mb. It can be either a single file or multiple files. In the case of multiple files, the total file size of the multiple files must not exceed 100Mb. The allowable limit for an image is 10Mb, and the resolution is 10megapixel. 

Let's discuss some important details concerning the attachments API. 
i. While uploading an attachment or an image through a curl request, the image must be included in the request with the content type as multipart/form-data

ii. The oauth scopes required for attachment API : 
ZohoCRM.modules.all 
(or) 
ZohoCRM.modules.{module_name}.{operation_type}
(and) 
ZohoCRM.modules.attachments.all

iii. The possible oauth scope module_names are: 
leads, accounts, contacts, deals, campaigns, tasks, cases, events, calls, solutions, products, vendors, pricebooks, quotes, salesorders, purchaseorders, invoices, custom, and notes.

2. Operations in the Attachments API

The attachments API in Zoho CRM allows a user to get a list of attachments, upload or download a file and delete them as well. Our focus for this week will be on executing the following operations using Java's HTTP client and CRM's Java SDK.
a. List attachments
b. Upload attachments

a. List Attachments

To get the list of attachments of a specific record. 

Request method:  GET
Request URL:  
{{api-domain}}/crm/v2/{module_api_name}/{record_id}/attachments

Sample URL:
{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments

Java SDK Code -
In Java SDK, we employ the getAllAttachmentsDetails() method to fetch all the necessary details. We will need the record_id for whom the attachment details are fetched. Here, the record_id provided is 3719520000000659047. After fetching the details, we iterate over the response and just print the necessary details. 
public void getAllAttachmentsDetails() throws Exception {
              ZCRMRecord record=ZCRMRecord.getInstance("Leads",3719520000000659047L); 
 int page=1;
              int per_page=200;
 BulkAPIResponse responseIn=record.getAllAttachmentsDetails(page, per_page,null);
        List <ZCRMAttachment> attchments=(List<ZCRMAttachment>)responseIn.getData(); 
        if(attchments!=null) 
        {
            for(ZCRMAttachment attchmentIns : attchments)
            {
                System.out.println(attchmentIns.getId()); 
                System.out.println(attchmentIns.getFileName()); 
                System.out.println(attchmentIns.getFileType());
                System.out.println(attchmentIns.getSize()); 
                ZCRMRecord parentRecord1=attchmentIns.getParentRecord();
                System.out.println(parentRecord1.getEntityId());
                ZCRMUser createdBy1=attchmentIns.getCreatedBy();
                System.out.println(createdBy1.getId()); 
                System.out.println(createdBy1.getFullName());
                ZCRMUser modifiedBy1=attchmentIns.getModifiedBy();
                System.out.println(modifiedBy1.getId()); 
                System.out.println(modifiedBy1.getFullName());
                ZCRMUser owner1=attchmentIns.getOwner();
                System.out.println(owner1.getId()); 
                System.out.println(owner1.getFullName()); 
                System.out.println(attchmentIns.getCreatedTime()); 
                System.out.println(attchmentIns.getModifiedTime()); 
            }
        }
}


Java Code 
In the absence of Java SDK, we make a GET request to the mentioned URL and display the response.
public void getAllAttachmentDetails() throws Exception
 {
  CloseableHttpClient httpclient = HttpClients.createDefault();
     HttpGet httpget = new HttpGet("{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments");
     httpget.addHeader("Authorization", "Zoho-oauthtoken 1000.9XXX.6XXX");
     System.out.println("Request Type: "+httpget.getMethod());
     HttpResponse httpresponse = httpclient.execute(httpget);
     Scanner sc = new Scanner(httpresponse.getEntity().getContent());
     System.out.println(httpresponse.getStatusLine());
     while(sc.hasNext()) {
          System.out.println(sc.nextLine());
     }
 }


Sample Response
{
    "data": [
        {
            "Owner": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "Modified_Time": "2020-08-12T10:28:07+05:30",
            "File_Name": "testimg.jpg",
            "Created_Time": "2020-08-12T10:28:07+05:30",
            "Size": "120335",
            "Parent_Id": {
                "name": "Johnson Charles",
                "id": "3719520000000659047"
            },
            "$editable": true,
            "$file_id": "8urshba63343dcc7b41418d74eeca1d4c323e",
            "$type": "Attachment",
            "$se_module": "Leads",
            "Modified_By": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "$state": "save",
            "id": "3719520000000981001",
            "Created_By": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "$link_url": null
        }
    ],
    "info": {
        "per_page": 200,
        "count": 2,
        "page": 1,
        "more_records": false
    }
}

b. Upload Attachments

To attach a file to a record.

Request method :  POST
Request URL:
{{api-domain}}/crm/v2/{module_api_name}/{record_id}/attachments

Sample URL:
 
{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments

Java SDK Code
For uploadAttachment(), we need the record_id and the file to upload as a pre-requisite. We employ the uploadAttachment() to upload our file to the record.
public void uploadAttachment() throws Exception{
  ZCRMRecord record=ZCRMRecord.getInstance("Leads",3719520000000659047L); 
  APIResponse responseIn=record.uploadAttachment("/Users/srivathsan-8829/Downloads/record.txt"); 
  System.out.println( "Status:"+ responseIn.getMessage()); 
        System.out.println( "Message:"+ responseIn.getStatus()); 
        System.out.println("http code"+ responseIn.getStatusCode()); 
        System.out.println( " Code:"+responseIn.getResponseJSON().toString());
 }


Java Code 

Uploading an attachment to a record in Java without Java SDK can be a tedious task. As shown below, the request needs to be multipart request. 

public void uploadAttachments() throws Exception
 {
    CloseableHttpClient httpclient = HttpClients.createDefault();
       File file = new File("/Users/srivathsan-8829/Downloads/record.txt");
       FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
       MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
       entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
       HttpEntity mutiPartHttpEntity = entitybuilder.build();
       RequestBuilder reqbuilder = RequestBuilder.post("{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments");
       reqbuilder.setEntity(mutiPartHttpEntity);
       reqbuilder.addHeader("Authorization", "Zoho-oauthtoken 1000.9XXX.6XXX");
       HttpUriRequest multipartRequest = reqbuilder.build();
       HttpResponse httpresponse = httpclient.execute(multipartRequest);
       System.out.println(EntityUtils.toString(httpresponse.getEntity()));
       System.out.println(httpresponse.getStatusLine());
 }

Sample Response
{
    "data": [
        {
            "code": "SUCCESS",
            "details": {
                "Modified_Time": "2020-08-12T10:28:07+05:30",
                "Modified_By": {
                    "name": "Patricia Boyle",
                    "id": "3719520000000191015"
                },
                "Created_Time": "2020-08-12T10:28:07+05:30",
                "id": "3719520000000981001",
                "Created_By": {
                    "name": "Patricia Boyle",
                    "id": "3719520000000191015"
                }
            },
            "message": "attachment uploaded successfully",
            "status": "success"
        }
    ]
}

Note :-
FILE_SIZE_MORE_THAN_ALLOWED_SIZE - This error is specific to the attachments API which is returned when you try to upload an attachment/photo exceeding the allowed size.

We hope you found this post useful. In our next kaizen post, we will discuss how to download and delete an attachment via Java HTTP Client and Java SDK. Let us know your thoughts in the comment section or reach us out at support@zohocrm.com.

Cheers!







    Access your files securely from anywhere







                            Zoho Developer Community




                                                  • Desk Community Learning Series


                                                  • Digest


                                                  • Functions


                                                  • Meetups


                                                  • Kbase


                                                  • Resources


                                                  • Glossary


                                                  • Desk Marketplace


                                                  • MVP Corner


                                                  • Word of the Day


                                                  • Ask the Experts



                                                            • Sticky Posts

                                                            • Kaizen #217 - Actions APIs : Tasks

                                                              Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
                                                            • Kaizen #216 - Actions APIs : Email Notifications

                                                              Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
                                                            • Kaizen #152 - Client Script Support for the new Canvas Record Forms

                                                              Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved
                                                            • Kaizen #142: How to Navigate to Another Page in Zoho CRM using Client Script

                                                              Hello everyone! Welcome back to another exciting Kaizen post. In this post, let us see how you can you navigate to different Pages using Client Script. In this Kaizen post, Need to Navigate to different Pages Client Script ZDKs related to navigation A.
                                                            • Kaizen #210 - Answering your Questions | Event Management System using ZDK CLI

                                                              Hello Everyone, Welcome back to yet another post in the Kaizen Series! As you already may know, for the Kaizen #200 milestone, we asked for your feedback and many of you suggested topics for us to discuss. We have been writing on these topics over the


                                                            Manage your brands on social media



                                                                  Zoho TeamInbox Resources



                                                                      Zoho CRM Plus Resources

                                                                        Zoho Books Resources


                                                                          Zoho Subscriptions Resources

                                                                            Zoho Projects Resources


                                                                              Zoho Sprints Resources


                                                                                Qntrl Resources


                                                                                  Zoho Creator Resources



                                                                                      Zoho CRM Resources

                                                                                      • CRM Community Learning Series

                                                                                        CRM Community Learning Series


                                                                                      • Kaizen

                                                                                        Kaizen

                                                                                      • Functions

                                                                                        Functions

                                                                                      • Meetups

                                                                                        Meetups

                                                                                      • Kbase

                                                                                        Kbase

                                                                                      • Resources

                                                                                        Resources

                                                                                      • Digest

                                                                                        Digest

                                                                                      • CRM Marketplace

                                                                                        CRM Marketplace

                                                                                      • MVP Corner

                                                                                        MVP Corner









                                                                                          Design. Discuss. Deliver.

                                                                                          Create visually engaging stories with Zoho Show.

                                                                                          Get Started Now


                                                                                            Zoho Show Resources

                                                                                              Zoho Writer

                                                                                              Get Started. Write Away!

                                                                                              Writer is a powerful online word processor, designed for collaborative work.

                                                                                                Zoho CRM コンテンツ



                                                                                                  Nederlandse Hulpbronnen


                                                                                                      ご検討中の方




                                                                                                              • Recent Topics

                                                                                                              • editing/applying online payments

                                                                                                                We have customers who pay part or all of an invoice and then cancel their service and want the payment as a credit to future work. It would be ideal if we could make it an excess payment and then void the invoice. I can't make it an excess payment because
                                                                                                              • Contacts per department

                                                                                                                Hello, Is it possible to limit Contacts to a Department? Thanks
                                                                                                              • Good news! Calendar in Zoho CRM gets a face lift

                                                                                                                Dear Customers, We are delighted to unveil the revamped calendar UI in Zoho CRM. With a complete visual overhaul aligned with CRM for Everyone, the calendar now offers a more intuitive and flexible scheduling experience. What’s new? Distinguish activities
                                                                                                              • Is there a plan to allow for the hierarchical organization of Customers / Companies in Zoho Billing?

                                                                                                                We have a few customers who have organizational structures that we haven't quite found a way to deal with in Zoho Billing. In CRM, these sub-companies (or subsidiaries or whatever you want to call them) all have another CRM account as the parent account.
                                                                                                              • This site can’t be reached mail.zoho.com took too long to respond

                                                                                                                In my office at any system, we couldnt able to login zoho email. it shows " This site can’t be reached mail.zoho.com took too long to respond". please fix it soon.
                                                                                                              • Credit Management: #2 Configuring Right Payment Terms for Credit Control

                                                                                                                Think about the last time you ordered something online and saw that little note at the checkout, "Pay on Delivery" or "Pay later". It's simple, but it actually sets the tone. As a business owner, you know exactly when payment is expected. Now, imagine
                                                                                                              • Can send email from zoho mail, but can't receive any.

                                                                                                                Hi, My domain is sattvameditationresort.com. I've updated MX records with those of Zoho. But i can't send any mails to this email id from gmail. I have checked the MX status with MXTOOLS, its showing the correct entry either. The error is as shown below:
                                                                                                              • My domain did not activate

                                                                                                                Hi, my domain (apsaindustrial.com.ar) did not activate, and the phone verification message never arrived. Please would you solve this problem? Thanks.
                                                                                                              • Paid Support Plans with Automated Billing

                                                                                                                We (like many others, I'm sure) are designing or have paid support plans. Our design involves a given number of support hours in each plan. Here are my questions: 1) Are there any plans to add time-based plans in the Zoho Desk Support Plans feature? The
                                                                                                              • Host not found?

                                                                                                                Howdy! So i'm trying to add my custom domain for with the mail server. I have 100% control of my DNS and have tried every single option (TXT, CNAME, and even HTML) multiple times, ensuring i did it properly, to no luck. I get the same error message every
                                                                                                              • Emails are going to notification folder and not in inbox

                                                                                                                emails are going to notification folder and not into inbox
                                                                                                              • Error AS101 when adding new email alias

                                                                                                                Hi, I am trying to add apple@(mydomain).com The error AS101 is shown while I try to add the alias.
                                                                                                              • Related list Mobile Device

                                                                                                                Hello, We use an the Zoho creator application to make reports linked to Accounts. On the computer: it's easy to go the Account and see all the created reports in the related list below On iPad/Phone ZOHO CRM APP: we cannot see the reports on those accounts
                                                                                                              • Report on opportunities showing only the last note added.

                                                                                                                Hi I need to create a report that shows the most recent note added to each opportunity. This is so management can see what the latest update is according to the assigned salesperson. One workaround is to use the status field but this implies added manual work and mistakes as the salesperson would have to copy the existing status to a note before adding the latest status... otherwise the activity history would be lost. My current workaround is a report on Notes with Opportunities as the related module.
                                                                                                              • Please add Zelle as an online payment option

                                                                                                                Hello, I would like to request Zelle be added to the online payment service providers for Zoho Invoice. Considering how ubiquitous Zelle has become as a way to pay people via the major banking institutions, I feel like many freelancers would benefit from
                                                                                                              • Zoho Sheet for Desktop

                                                                                                                Does Zoho plans to develop a Desktop version of Sheet that installs on the computer like was done with Writer?
                                                                                                              • This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details

                                                                                                                Hello, Just signed up to ZOHO on a friend's recommendation. Got the TXT part (verified my domain), but whenever I try to add ANY user, I get the error: This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details I have emailed as well and writing here as well because when I searched, I saw many people faced the same issue and instead of email, they got a faster response here. My domain is: raisingreaderspk . com Hope this can be resolved.  Thank you
                                                                                                              • How to display the CONTACT ID in the Contact page

                                                                                                                Hi, I've seen this conversation below and it is exactly the same question I'm raising now, but unfortunately the last message is not solved https://help.zoho.com/portal/community/topic/show-contact-id-while-editing-contact-form I need to show the ContactId and I don't know how to do this. The last message included in the conversaton shows the way but not it is not completed. "I am sorry by default we do not have the option to show the record ID for the contacts in the field in a record. When you
                                                                                                              • CRM x WorkDrive: We're rolling out the WorkDrive-powered file storage experience for existing users

                                                                                                                Release plan: Gradual rollout to customers without file storage add-ons, in this order: 1. Standalone CRM 2. CRM Plus and Zoho One DCs: All | Editions: All Available now for: - Standalone CRM accounts in Free and Standard editions without file storage
                                                                                                              • Create Canvas list view templates from images powered by Zia

                                                                                                                Currently available for all paid editions of Zoho CRM in the US, EU, IN, JP & CN DCs. Designing a personalized CRM interface just got even easier. In today’s fast-evolving digital landscape, AI is transforming the way we work by automating complex tasks
                                                                                                              • Painfully Slow Zoho mail

                                                                                                                Since yesterday Zoho Mail seems to have starting functioning very slowly and having a few bugs. It's slow to open mails, slow to send, slow to change between email accounts. Sometimes clicking on a particular folder (eg Sent folder) stops working and
                                                                                                              • "Wrong password or login" Problem to configure Zoho on MAIL App on my Macbook

                                                                                                                Hi, I'm having problems to configure my e-mail on my MAIL App(Macbook pro). My e-mail is hari@trespontoum.net Actually was working perfectly, and still working on my Iphone. My MAIL App prompt me that my login or password is wrong. I tried to change 3
                                                                                                              • "User already exist in your org"

                                                                                                                Hello, I've just read a discussion about this issue, which didn't solve my problem. I'm trying to add the following emails: sales@kiss-my-boutique.co.uk returns@kiss-my-boutique.co.uk orders@kiss-my-boutique.co.uk I'm getting an error message each time I try and add them. None of them are primary or secondary emails and none of them have been created as users before. I know this as when I try and login and do 'forgot my password' all I get is an error message saying 'user invalid'. Please advise.
                                                                                                              • Operation Not Permitted

                                                                                                                Hi, I have problem in adding user after verifying the domain but it seems like error appeared which is "operation not permitted". For your information, I had delete other domain before did it.
                                                                                                              • Email forwarding setup fails

                                                                                                                I'm trying to set up email forwarding from my Zoho email to my gmail address. I followed the directions to set up email forwarding here: https://www.zoho.com/mail/help/email-forwarding.html. I did only steps 1-6. After doing this, rather than setting
                                                                                                              • Passing the CRM

                                                                                                                Hi, I am hoping someone can help. I have a zoho form that has a CRM lookup field. I was hoping to send this to my publicly to clients via a text message and the form then attaches the signed form back to the custom module. This work absolutely fine when
                                                                                                              • Shopify store email issues- Not getting emails

                                                                                                                Hi We have migrated from Microsoft outlook to Zoho back in March, we have a shopify store, the domain is hosted on namesilo, not shopify, I have seen some people here complaining about not getting emails from customers who fill out the contact form on
                                                                                                              • How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.

                                                                                                                How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.
                                                                                                              • Invoice Discount Account

                                                                                                                Is there a way to change the account used for Discounts applied to an invoice? The current Discount account (ZB native account) type is an "Income" type. I would like to change it to "Other Income", but that is not possible, I am assuming because it contains
                                                                                                              • Need Inactive accounts to be visible in Reports in Zoho Books

                                                                                                                I N=need Inactive accounts to be visible in Reports in Zoho Books to do recons of the accounts but when i see the same they are not visible in the Accountant - Account Transactions report
                                                                                                              • API Support for Creating Invoices with Batch-Tracked Items

                                                                                                                Hi Zoho Community, I am working on an integration where we create invoices in ERPNext and push them to Zoho Books. I need to send batch-tracked items (batch numbers) when creating invoices. I could not find any reference in the Zoho Books API documentation.
                                                                                                              • javax.mail.authenticationfailedexception 535 authentication failed

                                                                                                                Hi, I am facing 535 authentication failed error when trying to send email from zoho desktop as well as in webmail. Can you suggest to fix this issue,. Regards, Rekha
                                                                                                              • Phantom Opening Balance

                                                                                                                While experimenting w/ creating a composite item, Zoho added funds to Petty Cash and added Bank Account equal to previous day's balance. I'm unable to undo the adding of funds. Attaching screenshots of both bank account and petty cash transactions.
                                                                                                              • Importing customer comments and multiple shipto addresses

                                                                                                                I am evaluating Zoho Books and have most of my data imported with two exceptions: (1) Import customer comments - in my current system I have several comments of different types, and I need to bring these into Zoho. Preferably Books customer records, but
                                                                                                              • Detailed Account Reports - Add Running Balance

                                                                                                                When one clicks into an account from a report (say P/L or Balance Sheet), the default reports have the Debit, Credit, and then the Amount. The Amount column (last one) is duplicate information. It would be far better and fit more peoples' use cases if
                                                                                                              • How to Billed from two different GST Numbers

                                                                                                                How to Billed from two different GST Numbers. Suppose ABC & Co had GST registration in Delhi and Haryana and Zoho account is created with Delhi GST Registration number. Now i also want to issue invoice from Haryana GST Registration number. How can i proceed ?
                                                                                                              • Payment system for donations management

                                                                                                                I manage an organization where we receive donations from payers. Hence, there is no need to first create invoices and then create payments received against the invoices. What are the recommended best practices to do this in ZohoBooks?
                                                                                                              • How do I associate pricebooks to a customer?

                                                                                                                I setup a few pricebooks, that worked fine. But now the only thing I can do with it, when I enter a quote or sales order, I can select which pricebook to use, but I have to do this product by product every time I add one. Is there a way to connect a pricebook
                                                                                                              • Zoho IP blocked by SpamHaus

                                                                                                                ERROR CODE :550 - 5.7.0 Your server IP address is in the SpamHaus SBL-XBL database, bye
                                                                                                              • IMAP Communication Problems - IMAP Down Again

                                                                                                                We are experiencing the same problems over the last week or so that were supposedly 'solved' according to this thread. Zoho Imap Down Again This is affecting attempts to use IMAP on multiple ISPs and users so is definitely narrowed down to Zoho problems.
                                                                                                              • Next Page