Using 3rd party SMTP Email Providers in SugarCRM
Posted by Christian Wettre

The first thing you do as an administrator of a new SugarCRM system is to specify an SMTP email account SugarCRM can use to send notifications and alerts to your users. These messages may be a subscribed SugarCRM report, a forgotten password retrieval message, an alert about an assigned lead or customer case or a notification about a scheduled activity.
An SMTP account is also needed if you wish to use SugarCRM as an email campaign deliver tool to send bulk email such as newsletters to your customers.
Typically you would use one of your own domain email accounts as a basis for this configuration in Sugar CRM. When using this service for sending out bulk email it is sometimes a concern to use an organizations primary mail server to deliver the mail. The concern is that it is possible that a newsletter email recipient complains about your organization as an email spam originator and that your email server ends up on a blacklist. This could hinder normal email communication delivery for your organization until you go through the effort of resolving the issue with the blacklist organizer. This does not happen often but it does happen frequently enough that it is a real risk,
To avoid this risk many organizations will chose to contract with a full service email communications service such as Constant Contact, MailChimp, Inbox25 or ActOn Software. These services provide excellent integration to SugarCRM and enables you to build, deliver and track your mass email communications to your clients.
Another option and the point of this blog entry is the possibility of using a third part hosted SMTP service. This option provides a very low cost SMTP mail gateway to deliver your SugarCRM email. Typically hosted SMTP providers charge about $1 per 1,000 sent emails.
At W-Systems we use a combination of a hosted SMTP service from Unified Email and third party marketing automation software from ActOn Software (for which we are a reseller and systems integrator).
By selecting these mail delivery services carefully we are able to use each SugarCRM's capabilities to the max. We able deliver our SugarCRM email securely to our own users and too our clients while protecting our normal Office 365 Exchange mail server from abuse complaints in case we make a mistake and email one wrong person.
Unified Email is not the only hosted SMTP option, we also have customers who use SocketLabs or SendGrid for these capabilities.
If you would like advice on these topics, contact me and I would be happy to review in more detail.
SugarCRM PDF Manager for Quotes
Posted by Daniel Ciobanu
Overview
SugarCRM allows us to define PDF templates in order to print/save specific module data as PDF. This goal is achieved using a PDF library called TCPDF (http://www.tcpdf.org/), some SugarCRM classes located in /include/Sugarpdf folder, and specific module customization.
Here, we’ll look at how the process of generating PDF is performed and we’ll show some minor tricks & tips that will help you to quickly modify the PDF templates table layouts or add support for alternate line background colors.
PDF Generation Process
In Short, a PDF template is applied to a specific module record and the PDF file is generated according to the following steps:
1. The PDF template is read from database
2. A temporary file is written on the disk after some processing
3. The temporary file is loaded into the Smarty template engine instance and processed
4. The HTML output from Smarty template is written as PDF using TCPDF library
5. The PDF content is sent to the browser
Now, I’ll show in more detail how this works for Quote PDF generation request. When you try to download a specific quote as PDF, a request like bellow will be issued:
index.php?module=Quotes&record=e0710171-84af-0338-4538-5126b5d2351d &action=sugarpdf&sugarpdf=pdfmanager&pdf_template_id=4710aba3-291f-2775-4ca8-5112e8a3e111
The record parameter represents the specific quote id from database and the pdf_template_id represents the id of the template used to render the quote.
The sugarpdf action is mapped to the sugarpdf view which is defined by the Quotes module in views/view.sugarpdf.php file using QuotesViewSugarpdf class. The view display method is responsible for calling the SugarpdfPdfManager->process method, which performs steps 1,2,3 and 4 as described above, and SugarpdfPdfManager->Output method which performs step 5. The following figure shows the sequence diagram for this flow:

Figure 1
The SugarpdfPdfmanager->preDisplay method performs steps 1 (PdfManager->retrieve) and 2 (SugarpdfPdfmanager-> buildTemplateFile). Then, the display method inherited from SugarpdfSmarty is called to process the smarty template and creates the HTML output as in step 3. The HTML result is written as PDF using writeHTML method from TCPDF. At the end the Output method will send the file to the browser(Step 5).
Here is the class hierarchy responsible for this process:

Figure 2
Note 1
According to the code from buildTemplateFile it seems that there is a specific handling for Quotes module templates:
So, START_PRODUCT_LOOKUP and START_BUNDLE_LOOP are actually for statements. This note will help us later to implement alternate line colors.
Dealing with cell widths in PDF Templates
While working with PDF templates in Sugar you’ll notice that a table like the one below will not look as expected in your generated PDF output. The explanation can be found in include/Sugarpdf/Sugarpdf.pdf file, looking at writeHTMLTable function comments :
// TODO ISSUE - width in % for the td have to be multiply by the number of column.
// ex: for a width of 20% in a table of 6 columns the width will have to be 120% (20*6).
So, if you want your cells to have the expected width, you’ll need to multiply the actual column with by the number of columns, 3 in our case:
A simple method to display lines with alternate background colors
The default Quotes PDF template displays the bundle product list using a markup like below:
As we have seen in Note 1 above, the <!-- START_PRODUCT_LOOP --> denotes actually a for statement. Also, we know that the template will be processed using Smarty engine. That means we can use Smarty functions and variables to accomplish any task we want. In order to make the difference between the odd and even rows we can use a Smarty cycle statement as below:
We defined a variable called color using smarty assign and cycle function. This variable will cycle between two values color1 and color2. So, for odd iterations will use color1 as value and for even iterations will use color2. Depending on that value we render the same product row using a different background color. In this case we used white and grey as background colors, but you can replace them with any valid html color code.
I’d like to emphasize that the added code is enclosed in HTML comments in order to avoid HTML parsing issues.
Links
Web site chat tools that integrate with SugarCRM
Posted by Christian Wettre

We are often asked about which web site chat tools integrate to SugarCRM. This class of tools make your website interactive and encourages a site visitor to request a live web chat session to engage with your staff. Integrations to SugarCRM involve the ability to create new leads or contacts from the chat session, the ability to save the chat transcript to the contacts activity history or to create a new customer service case from the chat session.
Adding such a tool to your website is surprisingly simple. Usually it involves adding a few lines of script code to your web pages.
There are several such tools that integrate to SugarCRM and we contacted representatives from some of the most commonly used ones and asked them to give us a few comments about their products and SugarCRM.
1) Userlike
http://www.userlike.com
We spoke with Pascal van Opzeeland, the Marketing Manager at Userlike:
What makes Userlike unique?
Userlike is built on three building blocks: functionality, design, and ease of use. We do everything to make it a joy to work with our software. This is reflected not only in our chat widget, but also in the clean and orderly backend area.
How does your tool specifically help SugarCRM Users?
SugarCRM is a great software solution to manage your sales, marketing, and support efforts. Userlike live chat can also fulfill a sales, marketing, and/or support function. We created the integration so that SugarCRM users can easily keep track of their live chat interactions in one place. By sending the chat documentation to SugarCRM during or after the chat, a case is created with the chat documentation and contact info. We primarily use the SugarCRM integration to follow up on interesting leads.
Do you have a favorite feature of SugarCRM?
The email templates. These allow you to very easily do standard follow ups to chat conversations and offline messages.
2) LiveChat
http://www.livechatinc.com
We spoke with Błażej Szperliński, the Head of Support and Communication Management at LiveChat:
What makes LiveChat unique?
We approach CRM integrations with emphasis on simplicity. Most customers heavily customize their SugarCRM integration. Converting new chats into cases should never affect the way users have their favorite CRM set up. LiveChat displays a SugarCRM button during conversations. Agents can click it to instantly create a new entry within the CRM and, from that point on, edit, reassign and adapt to their own unique operations. The unique advantage here is that the entire operation is just one, plain click of a button.
How does your tool specifically help SugarCRM Users?
In this context, LiveChat serves primarily as a lead generation tool which can quickly build a big account database within SugarCRM. This is invaluable for sales and knowledge management processes. Using both systems painlessly ties into day-to-day operations, since all it requires is one click.
Do you have a favorite feature of SugarCRM?
It's great to have a broad range of customization capabilities - even if they're not used to their full potential. The way SugarCRM is set up works well right after implementation and this flexibility is just great to have.
3) Velaro
http://www.velaro.com
We spoke with Jeff Mason, Vice President of Marketing:
What makes Velaro unique?
I think you always do better integrating best of breed applications – if they have the ability to be integrated seamlessly. This is why I would select to use a best of breed live chat solution like Velaro with a best of breed CRM application like SugarCRM. Each is a full featured, expert in their niche. Bringing them together seamlessly provides the most complete and comprehensive combination.
How does your tool specifically help SugarCRM Users?
Because of our seamless integration you can consolidate records and the chat agent is able to interact with the CRM system—bi-directionally—from within the chat agent interface. This allows the chat agent to better serve those they are chatting with, because they have access to past information about the client or prospect which is stored in Sugar. They can also be more efficient at creating new sales opportunities by saving chat transcripts and pre-chat survey responses, and then directing them into Sugar from the chat agent interface.
Do you have a favorite feature of SugarCRM?
Probably it's extensibility.
Visit the SugarExchange for more information about applications that integrate with SugarCRM.
SugarCon 2013 From a Developer Perspective
Posted by Ionut Tonita
We just wrapped up SugarCon 2013 a few days ago and I find myself on the flight home eager to share the exciting stuff SugarCRM has in store for us developers. There is a lot.
What's here right now?
While we were expecting to have to wait for SugarCRM 7, SugarCRM surprised us by delivering new developer libraries in the just released 6.7 update. We have a brand spanking wew REST Web Services API (v10) and also a new Java Script UI framework in SugarCRM 6.7 nicknamed Sidecar.
First of all, I know what some of you might think: "oh, a new REST API version, probably just going to add a few more functions". Well, no, the new API is a complete overhaul over the older v4.1; in fact, it's so many steps forward from the current API that Sugar decided to version it as SugarCRM REST API v10... v10 is a beast (in a good way). You will get complete streamlined control over your SugarCRM system, not only that, but it comes with extendable endpoints, so you can further build on that framework with your own functionality.
Oh yeah, and guess what? Remember that scarce documentation and that time you spent trying to figure out how to properly do a REST request? Well that's going to be a thing of the past now. There's new documentation and the SugarDev team has shown a commitment to keeping that updated throught the API life cycle. You can see this right now in the updated SugarCRM Developer Guide.
Sidecar is the star of Sugar7 and as promised, we get a preview 6.7 so we can start playing with it sooner rather than later. Sugar 6.7 has an updated forecasting module that uses this javascript library and we can see clearly the UI enhancements made possible. Inline editing is a welcome enhancement and it has been delivered in style!

What are we still waiting for?
SugarCRM 7 of course! But not for long, they are delivering live preview environments in the May / June time frame. This newest version of SugarCRM comes with a hyper modern HTML5 and Javascript based UI. It is built on the latest BackBone, Bootstrap & Handlebars frameworks. Do they sound familiar? Well they should, they've recently become industry standards and if I were you, I'd start checking them out.
SugarCRM 7 departs from the old way of going about rendering pages through PHP with Smarty or XTemplate. Instead it focuses on building the UI frontend on the clientside atop the Sidecart javascript framework which then connects to the REST webservice. Sugar7 delivers a significant speed boost and makes it much simpler for us developers to plug crazy awesome custom functionality on top of a high performance platform.
But you know what the best part about SugarCon was for me? Getting up on the Waldorf Astoria Grand Ballroom main stage with Chris Wettre to demo our our Quick Campaigns tool in the App Throwdown competition. That was an exhilarating experience for me, since, as all of you know, the best part about creating things is when people appreciate your work.

SugarCon 2013 is over but SugarCon 2014 is already in the planning stages so with that thought I'd like to invite you all to meet up at next year's SugarCon held in beautiful San Francisco. I'll be the guy without a suit permanently bonded to a Starbucks Venti.
See you there!
Integrating SugarCRM with Microsoft Office 365 using Riva
Posted by Christian Wettre
One of the most frequently deployed third party integrations for SugarCRM is the Riva connector to Exchange or Office 365. This powerful tool delivers seamless server to server or cloud to cloud integration between SugarCRM's Email, Calendar and Contacts (or Leads) to Microsoft Exchange or Office 365. As Microsoft Exchange users increasingly migrate to Microsoft Office 365, the combination of SugarCRM, Office 365 and Riva Live enables an organization to run some of their most critical business applications completely in the cloud and completely connected.
Using this tool an organization can avoid the use of any plug-in modules to Outlook and also seamlessly integration a users Outlook environment on Windows, Mac, iPhone / iPad, Android and BlackBerry devices. Contacts, Calendar entries and Email correspondence are synchronized between the systems in near real-time.
A commonly appreciated usage scenario is when a lead contact record has been assigned to a user of SugarCRM. If that user is mobile and accessing their contacts using their iPhone, Riva handles the task of instantly ensuring that the lead gets added to the users iPhone contact address book with all contact information that was entered into SugarCRM.
With Riva's on premise server or their Premium cloud offering, users can also manage their Opportunities, Projects, Quotes and Customer Service cases all from within Outlook.
Here is a detailed video from Riva detailing how the solution works.
Over the past year we have implemented dozens of these systems for our SugarCRM customers and we feel that it represents one of the highest return on investment products on the market. W-Systems is a leading partner of both SugarCRM and Riva.
To learn more about this solution contact us or visit Riva's web site.
Read the case study on how Riva helped Barton Willmore integrate their SugarCRM system with Microsoft Exchange.
Adding a SugarCRM Calendar to your Google Calendar
Posted by Christian Wettre
About 10% of our SugarCRM customers use Google Calendars in their organizations. SugarCRM has integration to Google Calendars but we find that users need some guidance on how to get the two systems connected.
The integration is designed so that SugarCRM allows a user to publish an internet feed of their calendar using the iCal standard. Google calendar can be configured to integrate such an iCal feed into a users Google calendars. The integration is one way only - Google Calendar will be updated with any changes from the SugarCRM calendar but changes to scheduled activities in the Google Calendar are not pushed back to SugarCRM.
Let's set it up, step by step:
First open up your user profile in SugarCRM

Navigate to the Advanced tab and scroll to the bottom


Check that you have a Publish Key. This should be a random mixed character sequence.
Copy the entire entry labeled: iCal Integration URL
Now open your Google Calendar. In your calendar left sidebar, pull down the menu next to 'Other Calendars', select 'Add by URL'

Paste the URL you copied from your SugarCRM Profile ICAL URL setting

After you complete this task you will see Google calendar import your initial feed from your SugarCRM calendar and activities scheduled in Sugar will starting appearing in the Google calendar. Google will going forward refresh this calendar from Sugar periodically.
Creating a Bing Directions Contact tab in SugarCRM
Posted by Ionut Tonita
One of SugarCRM’s core capabilities is openness and ease of integration. Just how easy would it be to add integration to an external resource in a custom tab in SugarCRM? We’ll test that in this tutorial, which will add a directions tab to the Contacts Detail View. The directions tab will generate a Bing directions page taking the current SugarCRM’s user address and routing to the current viewed contact’s address details.

While it is true that you can modify just about anything in Sugar, as commercial developers of SugarCRM solutions we place special care to follow SugarCRM guidelines to ensure that our changes are upgrade safe and are deployable on SugarOnDemand instances. We will demonstrate an upgrade-safe way of including and executing java script code into the SugarCRM Contacts Detail View. The method you are most likely to find on an internet search for examples will suggest accomplishing this by overwriting the custom/modules/Contacts/views/view.detail.php. This method has its drawbacks, and you can easily run into conflict with existing or future modifications that deal with the view detail file.
A different, safer way to do this, is to create a custom after_ui_frame logic hook. This logic hook will load the necessary .js or .css resources and execute the initialization functions.
We start by creating the logic_hooks.php file in the custom/modules/Contacts directory, if it already exists, just add the line that deals with the after_ui_frame hook insertion:
We then create a wBingDirections.php file which contains the function that gets executed by the logic hook. Just loading and initializing the java script code won’t be enough in our case, we also need to transmit a few important arguments, namely the source and target addresses. Luckily enough we have access to both the current user and the current record in the hook function through global $current_user and $contact = $GLOBALS['app']->controller->bean.
We create something like this:
Notice we’ve composed full address values for both the user and the contact. We also need to make sure to properly encode them when passing them to the Init function as parameters.
We will need to create a Bing maps object once we’re on our Contact Detail View and for that we need a Bing Maps API key. Go to http://www.bingmapsportal.com/ and create an account which you can use to register a basic key. In the getMap function below, replace the placeholder text your_secret_bing_api_key with your own secret Bing key.
Let’s have a look at the wBingDirections.js file:
It’s preferable that we keep our environment organized instead of littering the window object with all kinds of variables, so for that purpose I’ve chosen to create one object to deal with all the modifications we’re going to apply to the Details View.
Note that SugarCRM uses the YUI (Yahoo UserInterface) open source library prevalently across its pages. The tabbing control used in the view is one from this Yahoo library, which fortunately makes our life easier when adding a custom tab. We create the tab by simply using new YAHOO.widget.Tab({ label: 'Bing Directions', content: barebone_html }) and then adding it to the current parent control with Contacts_detailview_tabs.addTab(map_tab). The file barebone_html contains the html structure of the new tab, meaning the map div, the itinerary div, and three radio buttons that I selected to include to select routing modes.
As for the rest of the javascript files, the functions createDirections, createRoute and createDirectionsManager are sourced from the Bing API SDK documentation with slight modifications to support the encapsulation I created and to support the different route modes.
After placing the code into a SugarCRM loadable module and uploading to your SugarCRM instance, the last step is to do a Quick Repair & Rebuild in SugarCRM. After this is completed, we should have a new “Bing Directions” tab added at the end of our Contacts Detail View.
So to recap, we integrated Bing Maps Directions with our SugarOnDemand system by using about 60 lines of mostly boiler plate php code and about 60 lines of stock Bing API Documentation copied java script code.
Not bad Sugar, not bad at all.
Using Talend to Upload Data to SugarCRM: Part 2 Creating projects and uploading data into SugarCRM
Posted by Paul Candela
When you open Talend for the first time, you will see the usual license agreements to click through. As always, affirmative answers will move the process along to the point where you can start using the software. Once you’ve clicked through the agreements, you will be brought to the Welcome Screen.
You will see a variation of this screen each time you open Talend. After you create a project, you will always get the screen in Figure 5.
We are going to create a new project called ‘SugarCRM Import’. Enter the name in the ‘Create a New Project’ box and click ‘Create…’ and then ‘Finish’

Figure 4
Once the Project is created the window will change slightly, showing you a list of projects. We only have one project for now, but as new projects are created they can be opened from here.
Select the ‘SugarCRMImport’ project and click ‘Open’.

Figure 5
Connect to TalendForge?
Don’t worry, this isn’t a pay screen. This is asking if you want to connect to TalendForge, the online Talend community. If this sounds like something you might be interested in using, feel free to sign up. It’s not required though, so if you want to skip it click the ‘Skip’ button.

Generation Engine Initialization
This will happen each time you open Talend and can take a few minutes to complete. You can start working with your project while this process is completed, so feel free to let it run in the background.

Talend Open Studio Splash Screen
Unless you turn it off, whenever you open Talend you will be at the Splash Screen. Since we are creating a project, lets click ‘Start Now!’ at the bottom of the middle column.
Creating a Job Design
Talend uses jobs to define the tasks of a given data import. Jobs can be stand-alone items or can be tucked away in a folder with other similar jobs. To keep things organized, I generally create folders for each Sugar module I plan to work with and then create a job in that folder for the given task. In Figure 8, I have created a Contacts folder with an UploadContacts job. I also have a standalone job, ExportUsers, that isn’t in any folder.

To create a job (or folder), simply right-click on ‘Job Designs’ and select the object you wish to create.

When creating a job, you will be presented with a number of options for describing what the job will do. The only field that is required is the Name field. Since spaces are not allowed in the Name field, I stick to mixed case names to make them readable. Talend also offers the ability to mark a job with a version number and a status (development, testing or production), but these are not required.

After you create a job, you will be presented with an empty slate. This space will contain the various connectors to represent the source data, the field mapping and the data destination. To begin creating our import job, we will first create a connector to SQL Server.
Metadata
Connections to Data Sources can take almost any form. Since we are covering importing data to SugarCRM from SQL Server, our work will begin in ‘Metadata’.
As with ‘Jobs Designs’, connections defined in Metadata can be stand-alone items or can be tucked away in folders to better organize the connections. As a personal preference, I almost never put my connections in Metadata in folders, but that’s only because I am rarely working with more than one or two. Your mileage may vary, so use what works best for you.
Under ‘Metadata’, you can add a connection to a SQL Server Data Source by right-clicking on ‘Db Connections’ and selecting ‘Create Connection’.

‘Database Connections’ (like jobs) have a number of properties to describe the name of the connection and what it will be used for. Only the name is required.

The second and final step in creating the connection is defining the data engine connection. In Figure 13, I am selecting Microsoft SQL Server and then defining all of my connection parameters.
Tip: Notice that my connection parameters include instance=sql2012 in the ‘Additional parameters’ box. Since my SQL Server has two instances, I have to specify the instance in additional parameters, not in the server name as one would expect with ODBC or other Windows applications.
Once all the settings have been entered, click ‘Check’ to confirm they are accurate. If successful, click ‘Finish’.

After the database connector has been added, we need to select the tables or views that contain our data. This is done by right-clicking on the connection and selecting ‘Retrieve Schema’.

Retrieving the schema tells Talend about the fields and data types that are contained in the table or view. You can reduce the number of items that will be returned by selecting types (Table, view, Synonym) and by specifying a name filter.


While creating the table or view (in the example provided in Figure 17) is beyond the scope of this post, you will notice that Talend has detected that some of the fields in my view are BIT (True or False) which means I won’t have to do this later when it comes time to map the data to SugarCRM.

After you’ve retrieved the schema, you can drag and drop it into the workspace. Talend will then ask you what type of component to create. Since this is our data source (this is where data is coming FROM), we will select tMSSqlInput.

Next, we need to tell Talend where this data will be GOING. For this, we will switch to the palette and select our SugarCRM Output Connector. As with our schema connection, we can drag and drop this into the workspace.

So now we know where the data is coming from and where it’s going, it’s time to tell Talend how we plan to map the data between data sources. For that, we need a tMAP. You can also find that in the palette list and drag it into the workspace.

Before continuing, you will need to configure it for your SugarCRM system. To do this, simply click on the SugarCRM connector and select the component tab. The key items here are:
· SugarCRM WebService URL: This can be either local, on-premise or on-demand systems. As a general rule of thumb, the URL will be determined by the path you use to get to SugarCRM from your web browser (https://yourcompany.sugarondemand.com or https://sugarcrm.yourcompany.com) followed by /soap.php. So, using the examples above your URL should be entered into Talend as follows (including the quotes):
o “https://yourcompany.sugarondmeand.com/soap.php”
o “https://sugarcrm.yourcompany.com/soap.php”
· Username and Password
· Module: The module where you will be importing data.
· Action: For imports, this will be set to ‘insert’. You can also use Talend for updates (this may be covered in a later post).

With all the pieces in place, it's time to connect them together. Start with the data source (on the left) and move to the right. To connect objects together, right-click and hold on the object and drag the line to the object to the right. When you are connecting tMap to SugarCRM, you will be asked for an Output name. Any descriptive name will do. Talend will then ask you if you want to retrieve the schema from the target component. Click ‘Yes’ to finish up.

Are you tired yet? Don’t worry – we’re almost done.
We are now down to the last two steps, mapping the fields from the source to the destination, and then kicking off the import.
To start mapping, double-click on your tMap component. This will open the mapping window.

Talend can map one of one of two ways: manually, dragging the source field(s) to the destination field(s), or it can automatically map the fields based on the field names. I am super lazy when it comes to mapping, so when I am creating my source views I always make an effort to name my fields to the matching field in SugarCRM. So, when it comes to mapping, I can just click the ‘Auto map!’ button and then check the list to make sure everything was mapped successfully.

You will notice in the example that not all of my fields are mapped, and that’s actually OK. This view contains some extra information (for example, the ID I want to use for the contact, is listed as a custom field). If you don’t see a field listed, but you know it’s in the module (the Contacts module contains an ID column), I can simply drag it over to the end of the list of fields in the right column. I can also do this with custom made fields, which won’t be listed at all.
As a rule, I generally place all of my custom fields at the end of my views to make this easier to do as they show as grouped together. Once you’ve got your mapping in place, go ahead and click ‘OK’. Talend will ask if you want to propagate the changes, so go ahead and say ‘Yes’.
OK – we are finally ready to send some data to SugarCRM. Click on the ‘Run’ tab in your designer and click the ‘Run’ button. The amount to time to upload your data will vary depending on a number of factors, like the amount of data you are importing and the speed of your Internet connection.


So, we have successfully created a project and imported data from our data source to SugarCRM. Talend provides quite a bit of flexibility in uploading data to Sugar. While we only reviewed the process for Contacts, the same workflow (with different data) can be applied to Accounts, Calls, Tasks, Meetings and even E-mail Messages.
If you have found this article helpful, and would like to read more articles in this series, please let us know! We welcome any feedback you might have so we can ensure that you’re data input process goes as smoothly as possible.