TaskRay Best Practices: Chatter Collaboration and Email Notifications

Effective communication and collaboration is the key to success in any organization.

This becomes crucial when managing tasks and projects.

That is one of the main reasons we integrated Chatter functionality to TaskRay, allowing users to to quickly communicate with each other as well as attach related files and links to TaskRay Tasks and Projects.

By having all of your conversations and files logged in TaskRay users can easily find and refer to them in the future. So, if a colleague is out sick and you need to pick up the pieces or you need to look at a similar project you did in the past you can quickly find all the related Chatter conversations, files and links. There’s no need to go digging through your email or have IT recover old messages or files from the system of previous employees. It’s all right here at your fingertips within Salesforce.

Here’s an overview of Chatter from the TaskRay User Guide: http://bracketlabs.com/taskray-guide#collaboration-chatter

So, now that we are all using Chatter within TaskRay to collaborate on Tasks and Projects what are our notification options? How does Eric know when I have made a comment regarding one of his tasks? How do I as a Project Manager get notified when someone moves a key task to “Finished”?

As with most things in TaskRay (and Salesforce) we have a number of options which means it can be tailored to your specific needs.


When writing a Chatter comment you can choose to also enter a user or Chatter group name by using the @Mention functionality (e.g. @DarrenGeary, @Bracket Labs, @Marketing). By doing so, this will result in an instant email notification going to that person/group members with a link to the conversation to which they can then respond.

So, if I’m working on a task and need Eric’s input to help complete it I could simply go to the Chatter tab of that task and say, “@Eric Wu where is the latest file for this?” Eric will then get an instant email notification from Salesforce with a link to the conversation. He can follow that link and respond accordingly, “Here it is!” and then either directly attach or add a link to the location of the document.

Here’s an overview of @mentions from the Salesforce help documentation: https://help.salesforce.com/apex/HTViewHelpDoc?id=collab_add_mentioning_people.htm&language=en_US

If someone is @mentioned in a Chatter conversation they will get an email notification. If someone is not @mentioned then they will not get an email notification.

However, if you make a comment and then someone else comments after you (without an @mention), you will still get an email notification and will continue to get notifications on further comments added to that conversation.

This relates to the "Comments After Me" Chatter setting in Salesforce which is typically turned on and can be found here: Click on your name at the top right of Salesforce then My Settings| Chatter| Email Notifications and you’ll see the below options:


These are personal settings and can be configured by individual users but in general its best to keep all of them checked to ensure you do not miss anything.

An overview of these settings can be found here: https://help.salesforce.com/HTViewHelpDoc?id=collab_email_notify.htm&language=en_US

Here’s an example that shows which Chatter comments will produce an automated email notification when all those settings above are checked:

For example:

User A: "@Darren Geary - what do you think of this task?" (I will get an email notification with an @mention)

Then in the same conversation: User B: "Let me know if you need help on this" (I will not get a notification, however it will show in my Chatter feed if I am following that Task)

If in Chatter I "like" or "Bookmark" User A's initial comment above then I would get an email notification of UserB's comment on the same conversation.

This occurs when the "Comments on an item I bookmarked" and “Comments on an item I like" options are set to on which they are in the above screenshot.

If in the same conversation: Darren Geary says: "I think we can complete this task today" (I will not get an email notification to my own comment)

Then: User A: "I have an offsite meeting today" (I will get an email notification because User A commented after me)

And: User B: "I can get this done by 2pm" (I will continue to get email notifications on comments after my comment).

So, be sure to use @mention’s effectively and configure your personal Chatter Settings accordingly.

Following tasks/projects

Within TaskRay it is possible to follow tasks and projects just as you follow users within Chatter: http://bracketlabs.com/taskray-guide#collaboration-follow

When you follow a task/project any updates made to it will show up in your Chatter feed.

Chatter feed tracking

However, even if you are following a task and a change is made to it, (e.g. Eric moves it to “Finished” status) that specific change may not necessarily show in your Chatter feed. Why not? Because your Chatter Feed tracking settings are only tracking changes to certain task fields.

Here’s how to modify the Chatter Feed Tracking for  TaskRay fields:


So, now you can easily follow and track the Deadline field or the List (status) field or any other field which is important to you and any changes made to those fields will be tracked for users to see in Chatter.

Salesforce Daily Chatter email

As you know, Salesforce sends a daily digest email that summarises recent Chatter Activity related to you and the items which you follow. This email includes the 50 latest posts from the previous day along with the last three comments on each post. It is recommended to have these emails set to active and the frequency as Daily. However individuals can change this to Weekly and Never by clicking on their name at the top right of Salesforce and going to My Settings | Chatter | Email Notifications

You can also set the digest frequency for Groups that you are a part of.

Chatter is great for communication and collaboration with your team to accomplish tasks and projects however, it does not tell you what tasks you have upcoming or send notifications when a task is overdue. This is where the TaskRay Daily Planner Email and Workflow Rules can help.

TaskRay Daily Planner Email

TaskRay offers a Daily Planner Email that includes a list of all your overdue tasks, tasks due today and tasks due this week. Individual users can turn this email on/off via the Tools and Settings section in TaskRay: http://bracketlabs.com/taskray-guide#basics-preferences

New Task Owner Email Notification

When a task owner is changed from one person to another a notification email is sent to that new owner with a link to access the task.

Individual users can toggle this notification on/off via the "Don’t send email notifications when I change task owner" box in the TaskRay Tools and  Preferences section: http://bracketlabs.com/taskray-guide#basics-preferences

Email Alert Workflow Rules

There may be situations where you would like to get a notification email when a task meets a certain criteria. For example, you may want project stakeholders to be notified whenever a certain task is finished or when a task has been overdue for a day.

To do that go to Setup | Create | Workflow & Approvals | Workflow Rules and click the “New Rule” button.

Then select the TaskRay Task object which the rule will apply to, enter the rule name and set your criteria for when the rule will fire. (E.g. When the list/status field does not equal finished and when the deadline date field is greater than today).

Next, set the workflow action to be a new email alert.

Now, before you create the workflow action you’ll need ensure that you have an email template built that will be used for this alert.  

To do that go to Setup | Administer | Communication Templates | Email Templates and click “New Template”.

With your email template you can enter merge fields that will auto-populate for example the subject line could read as:

Task {!TASKRAY__Project_Task__c.Name} for {!TASKRAY__Project_Task__c.TASKRAY__Project__c} Finished

Then the body of the email could look something like this:

Task {!TASKRAY__Project_Task__c.Name} relating to {!TASKRAY__Project_Task__c.TASKRAY__Project__c} has been finished on {!TASKRAY__Project_Task__c.LastModifiedDate} by {!TASKRAY__Project_Task__c.LastModifiedBy}

The above example, is an email alert that tells us that a specific task has been finished along with the date it was finished and by whom.

Here’s further information on how to create workflow rules: https://help.salesforce.com/apex/HTViewHelpDoc?id=creating_workflow_rules.htm&language=en_US

And here’s further info on how to create email templates within Salesforce: https://help.salesforce.com/HTViewHelpDoc?id=admin_emailtemplates.htm&language=en_US

An alternative to Workflow Rules could be to take advantage of the new Salesforce Process Builder functionality: https://help.salesforce.com/HTViewHelpDoc?id=process_overview.htm&language=en_US You could use this to build a process that sends an email to specific users when a task is marked as “Finished”or to create a new Project when an Opportunity status changes to “Closed Won”.

So, think about the situations and types of notifications that you or your users would like to receive related your tasks and projects and feel free to create and experiment with your own workflow rule email alerts.

All of these collaboration tools and notifications within TaskRay can be utilized to help ensure your team is successful in driving tasks and projects forward to completion on time, every time.

Have a question about any of these notification options and configurations? We're always ready to help, feel free to post your question in the comments or contact us at support (at) bracketlabs.com

A New Year & a New Look for Campaign Calendar!

Happy New Year!

For our first blog post in the New Year we are excited to announced a new release of Campaign Calendar just in time for 2015 Marketing Plans. Here is a quick look at some of our new features:

New Toolbar

Campaign Calendar got a subtle makeover, including a redesigned toolbar. This streamlined look lets us increase the screen real estate dedicated to what matters most - the calendar. We also added a new count indicator which counts the campaigns displayed in the selected view.

Inline Editing

One of our most exciting productivity enhancements is inline editing inside of the Campaign Detail window. You can now quickly edit your Campaign fields and avoid the extra click of the Edit button.

Personal Color Settings

Users can now choose between the default Company Color Settings (managed by administrators) or a Personal Color Setting.



There is now a configurable hover on each Campaign to display campaign details without opening the Campaign Detail window. Another productivity win! 

Here are some highlights of additional enhancements we are delivering in this release. For a full list of features and bug fixes, check out our release notes page.

Upcoming Webinars

New to Campaign Calendar?

Join us for an introduction to Salesforce Campaigns + a demo overview of Campaign Calendar including the new features from our recent release!

Learn how Campaign Calendar's interactive features can help your users quickly plan, schedule, and share a visual marketing calendar.

Date: Thursday, January 29th  Time: 9 am PT / 12 pm ET / 5 pm GMT   REGISTER HERE

Ready to Get Started?

If you're already a Campaign Calendar customer you will be receiving an upgrade link via email.

If you're not a Campaign Calendar customer yet, we offer a free trial so you can see for yourself how Campaign Calendar will help make marketing easier. Install the free trial directly from the AppExchange, just click the green Get It Now button.

Still have questions? You can always mention us on twitter, post on our facebook wall, or send us an email at team@bracketlabs.com.

Happy Holidays!

The holidays are often a time of reflection and thankfulness. As I look back on 2014 at Bracket Labs, I continue to be tremendously thankful for our amazing customers, our growth, and most of all our team - our very awesome team. 

And especially for the hire of this guy:

Happy Holidays from all of us here at Bracket Labs, but especially from Darren Geary, full of cheer and the guy that makes us all laugh every day!

Automating TaskRay Template Project Creation With Visual Flow and Process Builder - Part 3

This is Part 3 of a series on using Visual Flow and Process Builder to automate the creation of fully populated TaskRay projects within Salesforce. Previously in Part 1 we installed the TaskRay clone flow plugin, and in Part 2 we covered the details of building a custom visual flow.

Process Builder

So, now we will use Salesforce’s new Process Builder set up our flow to run automatically when an opportunity becomes Closed Won.

In order to access this, go to Setup->”Processes” and click on New Process.

Name this process: “Create TaskRay Project on Opp Closed Won”

Add a description, something like: “This process will clone a TaskRay project template if an opportunity becomes Closed Won and has a TaskRay template specified.”

Click Save

You should now have something that looks like this:


Click the gray Add Object node on the screen, set Object to “Opportunity”, and set the radio button below to “created or edited”

Now click Save.

Next, click on the Add Criteria diamond, name this criteria “isWon” and leave the radio buttons with their default values (don't change anything) and set the Field to “Won” equals true.

Finally, check the “Yes” checkbox that says you want to execute the actions only if the record was created or edited to meet criteria. You should have something that looks like:

Click Save.

Now we need to add an action when the process determines the opportunity isWon.

Click the Add an action under “Immediate actions”

Set the action name to “RunCloneFlow”

And Flow to “Clone_TaskRay_Template_From_Opportunity”,

Click “Add Row” and set the Flow Variable to opportunityId and the value to our opportunity’s Id. The method for doing this is a little tricky, you click on the pencil, then you see it changes to a lookup icon, now you can select the main dropdown and find OpportunityId in the list. At the end it should look like this:

Now we need to activate our new process by clicking the activate button at the top of the Process Builder ineterface.

Test everything

To test this, let’s associate an opportunity with a TaskRay template project and see what happens when we change it to close won. Here's a screencast of the action: 


As you can see the TaskRay concurrency picks up the data inserted by the flow and we are able to see the associations the flow has made to the opportunity and account.

What are you going to build?

This was a simple example of how Visual Flow and Process Builder can be combined to create sophisticated automation in Salesforce without any custom code. And while our example uses a TaskRay Clone Flow plugin we've provided, that's specific to the TaskRay template use case. You can easily put these tools to work in automating Salesforce interactions without any plugins.  If you build something cool we'd love to hear about it, feel free to post descriptions in the comments.


Automating TaskRay Template Project Creation With Visual Flow and Process Builder - Part 2

This is Part 2 of a series on using Visual Flow and Process Builder to automate the creation of fully populated TaskRay projects within Salesforce. In this post we will cover the details of building a custom visual flow. You can find Part 1 here.

Create the trigger ready flow

For our example automation (templated TaskRay project created when an Opportunity is Closed Won) we will need to create a Visual Flow that can be used with Process Builder. This flow will take an input parameter of "opportunityId" and then utilize the Apex flow plugin we installed in Part 1 to clone a TaskRay project.

To start flow creation we will go to Setup -> Flows -> New Flow

Resource creation

The first thing we need to do is create some variables for our flow to use.

In order to create these variables, go to the "Resources" tab of the left sidebar of the flow designer, and double click "Variable" under the "CREATE NEW" section. You should get a popup that looks like this:

All of the variables for this flow will be "Text" type so we really just need to update the "Unique Name" and "Input/Output Type" for our variables. Create the variables detailed in the table below:

Unique NameInput/Output Type
opportunityIdInput Only

Now save your flow! Let's name it "Clone TaskRayTemplate From Opportunity"

Next we need to create some Formulas for our flow to use.

In order to create formulas, double click on the "Formulas" button under the Create New section of the left sidebar. It should present you with a dialog that looks like this:

All of our formulas are going to be of the text data type so all we need to do is populate the Unique Name field and populate the formula in the text area on the bottom of the dialog. We're going to create the three formulas detailed below.

newProjectName: Create a Formula with the Unique Name set to "newProjectName". We are going to use this formula field to figure out what our newly created project's name will be. For this implementation we are going to use a formula of:

"Customer Onboarding for: "+{!accountName}+" - "+{!opportunityName}

When you're done it should look like this:


taskFieldOverrideJSON: Create a Formula with the Unique Name set to "taskFieldOverrideJSON". The purpose of this formula is to map some TaskRay task field updates we would like to perform after our template clone has been created. For this implementation we are going to update the TaskRay Task fields Account__c and Opportunity__c with the values sourced from the opportunity we are passing in. To do this we are going to use a JSON string, if you are unfamiliar with JSON don't worry about it, it’s just an easy way for us to represent some key-value pairs. The formula for this field will be:


projectFieldOverrideJSON: Create a Formula with the Unique Name set to "projectFieldOverrideJSON". This formula maps field updates we will apply to TaskRay project records after our template clone has been created . For this implementation we are going to update the project fields Account__c and Opportunity__c with the values sourced from the opportunity we are passing in. To do this we are going to use another JSON string.


Now that we have done this initial setup it’s time to start doing some flow design! Also, you should probably hit Save!

Opportunity Record Lookup

In order to get some information about the Opportunity Id being passed, we need to add a “Record Lookup” from the left sidebar on the “Palette” tab. To do this, just drag the "Record Lookup" element from the sidebar into the main work area and drop it. 

Now you're presented with a dialog to complete, let's name this Record Lookup "OpportunityLookup". Now we have to complete the assignments section for this record lookup:

In the "Look up" field select Opportunity as the object, if you just start typing “Opp”, it will autocomplete.

Now under "Field" set the “Select field” to “Id”, the operator to “equals”, and the value to our input parameter,

Now scroll down to the variable assignment section, now we can fill up some of our other private variables..

In the field dropdown, assign:

field “AccountId” to the variable {!accountId}

field “TaskRay_Template_Project__c” to the variable {!templateProjectId}

field “Name”” to the variable {!opportunityName}

and check the “Assign null values to the variable(s) if no records are found”, because that just sounds like a good idea.

Finalize these settings by clicking "OK"

No Template Decision

Now we need to make a decision in our flow; if there is no Template assigned to the Opportunity, we need to stop the flow.

From the palette tab of the left sidebar, select a “Decision” (under the logic header), and drag it below Record Lookup and drop. Name this Decision: "Opp Template Assigned". Add an outcome called "Opportunity has template", and set the resource to {!templateProjectId}, operator “does not equal”, and leave the value field blank. Now click on the default outcome on the left and name that “No template” and click "OK".

Account Record Lookup

Now we need to populate some more variables from the account the opportunity belongs to.

Pull another Record Lookup from the left sidebar and put it under the decision you just made. Now name this one “AccountLookup”. Under filters and assignments, set the selected object to Account, set the field to “Id”, operator to “equals”, and “Value” to accountId.

Now assign the field “Name” to the variable {!accountName}, and check the assign null values to the variables if no records are found checkbox. At the end it should look like this:

TaskRay Clone Plugin

Now we need to pass all the data we have gathered to the Apex plugin we installed. This plugin is what is going to perform the template clone operation for us. To do this drag the "CloneProjectFlowPlugin" under the TaskRay header on the left sidebar of the flow pane below the last Record Lookup (named AccountLookup) in the center pane.

Name this plugin: Clone TaskRay Template

Under inputs, set templateProjectId’s source to {!templateProjectId}

Now we need to add some optional parameters by clicking Add Row:

Set newProjectName to the {!newProjectName} formula

Set projectFieldOverridesJSON to the {!projectFieldOverrideJSON} formula

Set taskFieldOverridesJSON to the {!taskFieldOverrideJSON} formula


Under outputs:

Set newParentProjectId to the {!newParentProjectId} variable

The dialog should now look like this:

Now click "OK", and you should probably click Save on your flow designer, ignore the warnings for now.

Wiring the flow

That was a lot of work. Now we have all four components created and we just have to wire them up.

Click and drag the little diamond on the bottom of the Opportunity Record Lookup box in the center pane to the diamond on the bottom of the Decision box right below it.

Now click and drag the diamond on the Decision box to the Account Record Lookup's diamond, and when prompted set “Opportunity has template” as the decision outcome for this line.

Now drag the AccountLookup diamond to the CloneProjectFlowPlugin diamond.

Finally,  set the start item of the flow by hovering over the OpportunityLookup header and clicking the downward facing arrow with a green background.

Hit save, Close, then activate the flow.

Testing the flow

We can test our flow to make sure what we want to happen occurs manually. To do this, let’s populate our TaskRay_Template_Project__c field on a sample opportunity record. I am going to associate a template called “Template: Customer Onboarding” to an Opportunity named “Test Opportunity”.


Note that our “Test Opportunity” has an ID of: 006e0000007yoa3 - we'll need this to test our flow.

To execute the flow manually we’re going to navigate back to our newly created flow, and click the run button. This should take us to a URL similar to: /flow/Clone_TaskRay_Template_From_Opportunity/301e00000004bI0AAI

We will need to pass in our Opportunity's ID (called opportunityId) to get our flow to execute. To do this simply delete the end of the resulting flow url so it looks like


Once this loads, you should see “YOUR FLOW FINISHED”. If you get some kind of exception, you can view the exceptions by opening the developer console and viewing the debug logs for the flow transaction.

Now we should be able to see what happened in TaskRay:

We can also check to make sure that our field updates processed as intended:

A quick way to verify this is to go look at the related lists on the Opportunity. Since we have lookups back to Opportunity on all of our TaskRay tasks and projects, a successful execution of our flow will result in TaskRay Projects and Tasks being displayed in related lists on our “Test Opportunity”. See the screenshot's TaskRay Projects and TaskRay Tasks related lists.

Halfway there

After all of that we’ve done pretty much all the hard work. We have a Flow that will take an OpportunityId as input, decide if it needs to clone a TaskRay project, then clones a project template we have specified on the Opportunity.

Now all we need to do is get this flow to run automatically when an opportunity becomes close won. That's Part 3.