Fetch customized user inputs, store them globally at the app leve | Community | Zoho Projects

Fetch customized user inputs, store them globally at the app leve | Community | Zoho Projects

This data storage concept enables you to store data related to your extension for both entity properties and extension properties.

In our previous piece, we looked at how to store data for entities using entity properties. In this post, we'll look at an example of using extension properties effectively. Extension properties enable you to record data for an app in its entirety. Refer to this article on the limitations of extension properties for additional details.

Scenario

Let's say that as a developer you want to gather feedback/reviews through your extension. In general, reviews and feedback help you gain insights into users' perspectives.

When designing a review/feedback template, using a standard question with predefined options will restrict the feedback/review process to certain specific standards/requirements. However, your clients may use Zoho Projects to manage a variety of businesses, each with its own set of processes tailored to the needs of that company.

What can you do to standardize and streamline this process for all clients?
It would be beneficial to create a standard feedback/review template for your customers and then enable them to customize the question and its options to meet their own company feedback requirements.

Goal: Create a generic feedback/review template that enables clients to provide their personalized inputs to customize the review/feedback question per their company needs.

Solution

To accomplish this goal, we'll incorporate both entity and app data storage—as well as a few other capabilities—into our extension. Let's look at the features and steps we'll be taking to develop this example.
  • First, we must gather the question and options that the user wants for their feedback/review form. To accomplish this, we can create a bottom navigation bar widget called "Feedback or Review template settings" that enables the user to provide their personalized feedback/review question along with its options as input. We can accomplish this using the widgets approach explained earlier in this post.
  • Next, we must save the values the user provides for the question and options. We can accomplish this by using the data storage extension properties, which will store the data and make it available across the app/extension. (Now that we have the values stored for the entire extension/app, we can retrieve the data and access it across the necessary entities.)
  • In our example, we want to collect feedback/reviews from users for the tasks and issues entities. For this, we can create a widget called "Feedback or Review" in the details page of the task and issue entities, respectively.
  • In this widget, we must populate the question with the options the user previously provided as part of the "Feedback or Review template settings" widget. We can accomplish this by retrieving the previously saved details and displaying them in the relevant entities (tasks and issues, in our example).
  • Once we've displayed the question and options to the user, they can select an option to provide feedback or a review for the entity they're working on.
  • Furthermore, we can save the user's option selection and associate it with the entity. This will enable us to display the previously selected option for that question each time the user accesses the "Feedback or Review" widget, which we can accomplish using the data storage-entity properties concept.
Required components
  • An extension configuration process includes the following:
    • Creating an extension.
    • Configuring the plugin manifest.
    • Setting up the widget code.
  • Bottom navigation bar widget (top_band): Enables the user to input their customized values for the feedback/review template's question and its options.
  • Task details tab widget (task_tab)/Issue details tab (issue_tab): Enables us to fetch and display the value the user enters for the feedback/review template in the respective entities.
Let's explore these components now.

Extension configuration

Extension creation: We've created a new extension for Zoho Projects. Learn more about the steps to create an extension.
                                                                  

Plugin-manifest.json configuration: Once we created the extension, we configured the plugin-manifest.json file to include the widgets. For a more detailed understanding of how to configure the plugin-manifest.json file, refer to our earlier post.

For our extension use case, the plugin-manifest.json file is configured as shown in the screenshot below.

Note: We'll have to set the storage key to true in order for storage space to be allocated in the Zoho Projects product for this extension. By default, the value will be false.
                                                

Setting up the widget code

Now that we've set up the other components, let's move on to writing our widget code and incorporating the data storage feature.

Feedback or Review template settings widget (Bottom navigation bar - top_band) - Enables us to gather personalized user input for the feedback/review template. Please find the index.html code snippet attached in the post.
  • In the code snippet above for the bottom navigation bar widget, the user is presented with two text boxes: one for entering their customized question for feedback/review and the other for entering their customized options, each separated by a comma.
➤ The app.store method in the extension properties is used to store this data against the extension in the form of key-value pairs.
➤ The values for the question and options are constructed as a JSON object and then stored against the key "storedappvalue" using the app.store method.
Note: For user-entered options separated by a comma, these options are converted to an array using the split() method, with the comma serving as the criteria, and then stored against the key.
➤ Finally, when the values are successfully stored after clicking the Add button, the zohoprojects.invoke method is used, and the user is notified with the alert "Data added".
  • Additionally, every time this widget loads, the data stored at the app level in the key "storedappvalue" is obtained using the app.retrieve method.
  • From this retrieved value, any previously stored data against the key "storedappvalue" is removed using the app.remove method.
  • This is done because whenever a user wishes to change their feedback/review question and options, the new data will be added and stored against the key as well. Since we require the newly entered values to be displayed as part of our "Feedback or Review" widget in the tasks and issues entities, the previously stored data is removed, and the new values entered are stored against the key upon clicking on the Add button.

Feedback or Review widget (task details tab - task_tab) - Displays the feedback question and options and enables the user to provide feedback for the entity they're working on. Please find the Taskfeedback.html code snippet attached in the post.
  • In the code snippet above—for task/issue details tab—we're first retrieving the value stored against the extension (in the bottom-band navigation bar) by invoking the app.retrieve method using the key "storedappvalue".
  • From this retrieved value, we fetch the question and its options. The options for the question are displayed in the widget in radio button format, which enables the user to choose one option for the feedback/review question.
  • Once the user chooses an option and clicks the Save button, the data is saved using the entity properties in data storage feature.
➤ Here, the selected review option (selectedreview) value and its index position (selectedoptionnumber) in the radio button element are stored using the entity.store method. We use entity storage here since this value chosen is specific to the entity the user is working on.
  • Every time the widget loads, the chosen value stored using the entity.store method is retrieved using the entity.retrieve method and checked against the radio element options. This allows the chosen value to be enabled and displayed to the user every time the widget loads.
We can use the same snippet across the issue entity as well.

Now that we've completed the setup for both the widgets and have all the extension components ready, let's go ahead and see the output.

Sample output:
                                                

This example demonstrates how to efficiently use data storage for extension properties. The data stored against an extension/app can be retrieved across multiple entities to perform logical functions. Additionally, in this example, we also witnessed code reusability across multiple entities. You may enhance this example by incorporating more than one feedback/review question.

In this way, you can use extension properties to store data across an extension/app. We hope you found this information useful. Follow this space for more insights!

Sign up for a Zoho Developer account and start developing extensions for Zoho Projects using Sigma.

SEE ALSO



      • Recent Topics

      • Ask the Experts 18: Supercharge Self-Service: Simplify Support, Empower Customers!

        Welcome to the Ask the Experts Session 18 focusing on Zoho Desk’s Self-Service features! With the AI buzzing around like busy bees, ever thought of how you can incorporate AI into Self service? Explore how Zoho Desk's Help Center, Knowledge Base (KB),
      • Unparsable Date when hour side is 02

        So this is a crazy error I am getting. I got this one 1-2 years ago as well, and specifically added conditional clauses to workaround that. But now I would like to create a topic and see if anyone else is getting this error. Here is how it goes: We have
      • comment dedicated to specific cell?

        We have built a sheet for a customer, in which they can add comments to specific cells. However, when we filter the sheet it seems that the comment does not stick to the content of a cell, but the cell itself. Resulting in us not knowing to what the client
      • An update to improve email delivery | Email Authentication & Relay

        Dear Zoho Recruit Community, We hope this message finds you well. This post is to inform you about an important update regarding the authentication of all email domains in your Zoho Recruit account. Effective 31st March 2025, emails sent using email addresses
      • Can't add company logo and favicon as a superadmin

        I am logged in as the superadmin but can't add company logo and favicon - the fields are greyed out. Any idea as to what the problem could be?
      • Public links for WorkDrive files

        Our company is considering building an app with Creator that allows one to upload files into the WorkDrive through a Creator form, simultaneously collecting information for a content database in Creator. Ideally, we'd like to centralise the entire workflow
      • Creator to WorkDrive workflow | Missing "Upload file" WorkDrive action in Flow or not?

        I am trying to build a Creator app with a form through which files can be uploaded to WorkDrive and simultaneously added to a Creator database. As far as I understood, automating this Creator-WorkDrive workflow can best be done with Flow, offering greater
      • How can I edit the Picklist History?

        I was working with some custom functions in CRM that inadvertently triggered unwanted changes in a picklist history for the Accounts module. It is absolutely essential for the business that I roll these changes in the subform back because they throw off
      • Zoho Desk Partners with Microsoft's M365 Copilot for seamless customer service experiences

        Hello Zoho Desk users, We are happy to announce that Zoho Desk has partnered with Microsoft's M365 to empower customer service teams with enhanced capabilities and seamless experiences for agents. Microsoft announced their partnership during their keynote
      • how to send recurring estimates instead of recurring invoices

        Hello, Is it possible to use the recurring invoice functionality to send recurring estimate to our customers ? We first need to send them an invoice in order to receive their purchase order and then send them the invoice with their purchase order number
      • Petty cash discrepancy

        How do I record a petty cash discrepancy? We had money go missing and need to document that in the books, but I'm not sure how to put that in. It's not an expense, just a loss of cash.
      • Alternative / optional Position

        How do you create an alternative position or an optional position (article) in offers?
      • Option to copy/duplicate Custom Ticket views

        Hi Team, Hope you're all well. I was wondering if you would consider a feature on Custom Ticket views: The option to copy or duplicate an existing custom ticket view It would help tremendously for views with a lot of criteria that could be reused multiple
      • Hundreds of folders or tags (for each client): best practices?

        I'm preparing to switch from Gmail Workspace where each of my clients has their own label, assigned automatically after I manually set it up when someone becomes a customer. I know that those labels can be converted into folders in Zoho Mail, resulting
      • Announcing new features in Trident for macOS (v.1.6.0)

        Hello everyone! Trident for macOS (v.1.6.0) is here with new features to elevate your workplace communication and productivity. Let's take a quick look at them. Create filters from emails . In addition to creating email filters from Mail Settings, you
      • Changing Color Theme of Guided Conversations

        Hello, We have recently added Guided Conversations to one of our websites, but I am wondering if there is a way to customize the color scheme so it matches the appearance of the website? Thank you in advance!
      • How do I add new line and format text in zoho desk ticket?

        I am generating a ticket via API and looking to update "description" field of ticket whenever I need. Is there a document where I can find supported formatting for description field on a ticket.  I need to find: Adding a new line and adding bold text,
      • Using Snippets in Comments

        One of our Agents asked about using snippets in comments. We don't see this as an option at this time, only in reply mode. Is there a way to enable this?
      • zet pack not working

        We are using the zet pack command to package our Zoho extension. However, after running the command, the extension gets packed, but the resulting package is empty. We've attached a screenshot for reference. Could you please assist us with resolving this
      • How to configure Choice-based Field Rules??

        I have multiple choice, drop down and subform in what i created. However, I can't configure the choice based rules. There's no button link for that. Please help https://forms.zohopublic.com/specialevents1/form/IslandKidsConference2025/formperma/ZCXs
      • Custom module system name

        Is there a way to define custom module system name? Currently it's something like `CustomModuleX` This is different to API name or display name.
      • Line formatting in data coming from Zoho Flow

        I have a flow that creates a zoho desk ticket. The text is not formatted with line breaks once it arrives at Zoho Desk. How do I force line breaks?
      • There is no opton to download the Active User list in Zoho CRM Of users

        There is no opton to download the Active User list in Zoho CRM of Users
      • Session recording PageSense Blank Layers using Canvas

        Hello, We have implemented page sense in our SaaS platform and there are key elements on the pages that are not being show in the recordings. For example, the lower section is a map canvas using webgl and the upper section is a timeline style canvas.
      • Help with Tickets Endpoint

        Hello Team, I am using the ticket lookup endpoint to retrieve the list of tickets associated with a particular account. GET https://desk.zoho.eu/api/v1/accounts/{accountID}/tickets I want to know if there is a way to filter the tickets to retrieve only
      • Why is my deluge code not executing properly? (New and learning deluge)

        I'm trying to update a sales order number through deluge for an automation I'm trying to build. What is wrong with it? /* replacing SO with SOR for sales order pre-fix */ SO = salesorder.get("salesorder_number"); replace = SO.replaceFirst("SO","SOR");
      • merge the Multiple POs to single PO if Vendor of PO"s --in Zoho Inventory

        HI Merge the Multiple POs to single PO if Vendor of PO"s are Same ----in Zoho inventory Please provide any work around to achive this .
      • Flow based on New Deal - layout field problems

        Hi. I've built a Flow to create a Deal-specific folder within WorkDrive. It works except for referencing the Deal's layout.  In my Zoho CRM, there are two types of Deals (separated by layout).  For my Flow: Trigger on New Deal Then, I call 'Fetch module entry' as I am trying to grab the Deal's layout. As I process through my logic, I have a Decision based upon the Deal's layout. However, within the 'Fetch module entry', I had to specify the Deal's layout so all Deals added (no matter their actual
      • CRM

        I have a portal set up where a contact can see other contacts within an account automatically. When a contact in the portal enters a deal, how do I make sure that deal is assigned to the account so other contacts in the account can see the deal was generated?
      • A fresh interface and functionality improvements for Zoho CRM's data sharing settings

        Data sharing is essential for maintaining proper access controls in your CRM. Whether you're setting default permissions or defining custom sharing rules, these settings determine how records are shared among users, roles, and groups. Previously, navigating
      • field is not saving on lead

        Hi, Not sure what i changed but on edit in a lead, i am inputting details and its not saving. just highlights it in yellow with no error message.
      • Zoho AI Translate – No Support for Hebrew?

        I want to use Zoho AI Translate, but I see that it does not support Hebrew. Since Zoho supports multiple languages, I was hoping this function would also work with Hebrew. Is there any plan to add Hebrew support in the near future? Or is there an alternative
      • Based onthe multipick list value want to Show in the pick list field

        Based onthe multipick list value want to Show in the Single pick list field Database Region is multipick list if it contain Saudi and UAE then region pick list want to show Saudi and UAE Database Region is multipick list if it contain Saudi then region
      • How can I view Help Center articles in 'Sandbox' mode?

        I have published some help center articles but when I try to preview the knowledge base page, it says 'We have no content to display'.
      • How Do I Refund a Customer Directly to Their Credit Card?

        Hi, I use books to auto-charge my customers credit card. But when I create a credit note there doesn't seem to be a way to directly refund the amount back to their credit card. Is the only way to refund a credit note by doing it "offline" - or manually-
      • Mass Update Doesn't Trigger Workflow

        Hello there, I made a workflow in Zoho Desk, and its related to Ticket module, when I update the field workflow triggers, but the problem is when I update the field in Tickets module List View (Mass Update) the workflow isn't triggering. If I can't trigger
      • Rejected Accounts still listed for Deal

        Hello guys I have a approval process thats validate the Accounts in CRM The issue is even when a account is rejected you can open a deal with it It's not supposed to appear in the lookup field or the approval process become pointless Can you guys help
      • Announcing new features in Trident for macOS (v.1.14.0)

        Hello everyone! Trident for macOS (v.1.14.0) is here with interesting features and enhancements to elevate your workplace communication. Let's take a quick look at them. Collaborate over audio and video meetings. You can now communicate with your team
      • Instantly refine your CRM dashboard using Filters and download underlying data – all in a few clicks!

        Hello everyone, Imagine you’re a sales manager overseeing multiple product lines across different regions. You're viewing your sales dashboard in Zoho CRM, which gives a powerful overview, but you often need to drill down to see how a specific product
      • Work Flow Rule by Updated Field Not Triggering.

        We have a work flow rule that triggers when we change the owner of a lead. It sends an email to our customer services to let them know who has been given the lead.   If we edit each lead individually then it works but if we mass change owner from a lead veiw then then rule isn't triggered..   Why is this and am I missing something here?   Chris
      • Next Page