TaskRay Tip: Exclude Weekends from Date Driven Templates

Nobody likes to work weekends so why should our TaskRay Tasks have a deadline date of a Saturday or Sunday?

As you know, it's possible to automatically set task deadline dates when cloning Project templates as noted in this awesome post

That workflow rule and process is great, however, occasionally it may cause a task deadline to automatically be populated as a weekend day.

By adjusting our workflow rule formula we can ensure that deadlines never fall on a weekend when cloning a project.

To do that we'll go to:  Setup | Build | Create | Workflow & Approvals | Workflow Rules and select our "Project Templates: Create Deadlines" Workflow Rule.

Then click edit to edit the workflow rule action and copy/paste the below to replace the formula with:

MOD(TASKRAY__Project__r.TASKRAY__Project_Start__c - DATE(1900, 1, 7), 7), 
0, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + FLOOR((Days_from_Start__c-1)/5)*2, 
1, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + FLOOR((Days_from_Start__c)/5)*2, 
2, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + FLOOR((Days_from_Start__c+1)/5)*2, 
3, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + FLOOR((Days_from_Start__c+2)/5)*2, 
4, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + FLOOR((Days_from_Start__c+3)/5)*2, 
5, (TASKRAY__Project__r.TASKRAY__Project_Start__c) + Days_from_Start__c + CEILING((Days_from_Start__c)/5)*2, 
6, (TASKRAY__Project__r.TASKRAY__Project_Start__c) - IF(Days_from_Start__c>0,1,0) + Days_from_Start__c + CEILING((Days_from_Start__c)/5)*2, 

Once activated here's an example of how it will behave:

 If we have a project that starts Friday, July 10 and the deadline for task 1 should be 2 business days from project start date then the days from start field value would be 2 and the formula would result in a deadline date of Tuesday July 14 (two business days from July 10) and not Sunday July 12 (two days from July 10).

Test it out, see how it works then sit back, relax and enjoy the weekend!

Note: At this time it's not easy to exclude Business Holidays (e.g. Christmas and New Year) from formula's without doing some kind of APEX trigger. This is due to the fact that the Salesforce Holiday object is not accessible for formulas and workflows. Feel free to vote on this Salesforce idea to help enable that feature: https://success.salesforce.com/ideaview?id=08730000000BpWdAAK

TaskRay Teams Can Now Include Queues

Queues in Salesforce have been a long-time customer favorite. They are typically used to help teams manage lead and case assignment. In TaskRay we see our customers most often use queues to manage Unassigned tasks in templates.

While it has long been possible to assign a queue to a task, it required 4 clicks. As TaskRay designers we feel 4 clicks is 3 too many when it comes to frequently used actions. Today we are releasing additional queue support that now allows you to drag and drop assign queues to tasks!

Queue Availability

Here are all of the places you can now use queues:

  • Add as project contributor
  • Drag and drop reassignment (Queues can even receive assignment emails.)
  • Task Owner custom filters
  • Project View As custom filters
  • Bulk add contributors
  • Bulk remove contributors

By expanding Queue support we hope we can help your teams manage the distribution of projects and tasks. Whether your queue is...

  • empty, such as an Unassigned queue, perfect for tasks contained in templates and not ready for owner assignment


  • full, containing a groups of users, such as a Customer Success or Support queue, where members of the queue can view tasks available for assignment

...we think queues add additional collaboration and distribution options for your project workflow.

Set-up Note

Please note queues must be connected to both the TaskRay Task and the TaskRay Project objects. This is a slight change from the current set-up requirements which only you to associate to tasks or projects. For complete setup instructions visit our customization guide.

Ready to Get Started?

This release is available now in the AppExchange. If you are a current customer and would like this release, please send a quick note to Support letting us know you would like to receive the upgrade now. Otherwise, you will be seeing this feature available in a mini-release scheduled for early July.

If you're not a TaskRay customer yet, we offer a free trial so you can see for yourself why TaskRay is the #1 rated project management app in Salesforce. Install the free trial directly from the AppExchange.

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

Bracket Labs Celebrates Its 5th Anniversary

Bracket Labs at Coors Field in June 2015.

Bracket Labs at Coors Field in June 2015.

On June 10, Bracket Labs celebrated a huge milestone for the company—it's fifth anniversary. We are grateful to all of our customers, partners, and friends for an outstanding first 5 years.

As the new(ish) Director of Marketing, I’ll let you in on a little secret. Bracket Labs is an awesome place to work, and not just because we have great snacks on hand at all times. It is a great place to work because of the people. The culture is hands down the best one I’ve ever experienced.  We are committed to excellence, committed to our customers, and committed to helping each other grow as professionals.

I’ve been working long enough to know creating a successful company with a stellar team and culture doesn’t happen by accident.

So while we were celebrating the anniversary at Coors Field, new members of the team were lucky enough to hear the “origin story” of Bracket Labs firsthand.

It’s a great story worth preserving and sharing.

“A little over 5 years ago Eric was working as a consultant at the company where Blakely was working. They realized they had many similar values and experiences in the working world. (Not all of them as positive as they would have hoped.) They talked a bit about starting a company together that would be a place where they themselves wanted to work.

The talk was pretty high-level at first since Blakely had small children and Eric was expecting his first child at the time.  But things progressed quickly and about three months later they were signing the papers to formalize the business to be known as Bracket Labs.

Fun Fact: The name Bracket Labs came from a vibrant strategy conversation where Blakely and Eric were talking about what product to develop first. They were kicking around ideas for building different apps for Salesforce when Eric said,”You know what salespeople want in Salesforce? They want an app that will allow them to manage their March Madness brackets!”

The newly formalized company moved quickly to develop its first productCampaign Calendaran app that allows marketers to schedule and manage campaigns more easily in Salesforce. They were working with a contract developer at the time using Blakely’s basement as office headquarters. Within the first few months customers started signing up (and paying) for the app.

 Hard at work at Bracket Labs first office in Blakely's basement aka "The War Room".

 Hard at work at Bracket Labs first office in Blakely's basement aka "The War Room".

As all entrepreneurs will tell you the first few years are exciting, challenging, fun, terrible, hard, and everything in-between; And like all entrepreneurs Blakely and Eric have many funny, scary, and inspirational stories to share (the next time you see them you should ask).

But to keep this to a Reader’s Digest version, we’ll move ahead to a couple of years later. The bootstrapped company is growing and a new product has been addedTaskRaya modern project management app for Salesforce.

Right away they realize they have a hit.  It starts taking off and quickly becomes the lead product of the three offerings (MyDay being the third). Blakely and Eric have worked with a few different contract developers when they hit a development snag. No one can seem to figure out how to solve this particular problem. Enter the missing piece to the Bracket Labs co-founders’ team, Mike Tetlow.

Mike is a fastidious developer who believes in doing things right. He solves the problem, joins the team, and begins working to solidify the foundational elements of TaskRay. He and Blakely continue to push the product to greater levels of performance and usability while Eric continues selling. All three of them are also doing several other jobs including customer support, marketing, and taking out the trash when necessary.

That brings us to almost present day.

As the company continues to grow Blakely, Eric, and Mike realize they need more help to get to all the different parts of the business that need attention. In the first half of 2014, they have so much business they decide to add a new team member to help. Enter Darren Geary customer support and sales manager at Bracket Labs.

It also marks the first time Bracket Labs has office space outside of Blakely’s home. The team sets up shop in beautiful downtown Louisville, CO (right outside of Boulder).

At the end of 2014 they begin looking for a marketing resource. I joined the team in winter of 2015. In early spring of 2015 it was time to focus on bolstering the development team. Aaron Marks and Laura Hasemeyer joined to make the Bracket Labs’s team what it is today.”

And this team is fired up!  We’ll be headed to Dreamforce for the 5th year in a row, but this time in a booth (come find us). We are ready to take this company to the 10th anniversary and beyond all while maintaining the wonderful culture, outstanding product offering, and unwavering customer support that Bracket Labs has cultivated over the past five years.

Thanks again to all who made these first five years possible.  

Time Tracking for TaskRay

TaskRay is awesome! - (but you knew that already)

Not only can you efficiently manage and track all of your tasks and projects directly in Salesforce (and on mobile via Salesforce1), you can also make numerous customizations including; custom fields, reports, automations, notifications, workflow rules, triggers, processes, etc..

This is thanks to the native architecture of TaskRay which allows our customers to tailor the app to the unique needs of their business.

A great example of a killer customization is adding the ability to easily track time on your TaskRay tasks.

There are many reasons why you may want to track time in TaskRay, for example, you may need to:

  • Track and report upon billable vs. non-billable hours in a project
  • Calculate the number of hours completed/remaining to date
  • Manage resources and estimate the number of completed/remaining hours by user
  • Calculate project time and rate costs
  • Analyze and optimize processes by identifying which tasks and projects take the most time

All of this is possible and can be achieved in 30 minutes or less with easy point and click admin customization within Salesforce.

Design Considerations - Object Relationships

Before we set up time tracking we need to make a design decision. We will be creating a new custom Time object in Salesforce, and there are two different methods that can be used to relate your new Time object to the TaskRay Task object, so we will need to choose between creating 1. A Master-Detail Relationship or 2. A Lookup Relationship. The method you choose will depend upon your requirements for tracking and reporting upon time entries. 

Method 1: Use a Master-Detail Relationship

Master-Detail Relationships allow for Roll-up summary fields, meaning, that we can potentially create many time log entries to one task and calculate the sum total of those entries into a field on the task object. 

This is a great solution in situations where users will potentially enter a number of different time entries to one task (e.g. 1 hour in the morning, 2 hours in the afternoon then another hour tomorrow thus making a total of 3 time entries with 4 hours combined).

However, the drawback to this option is that only the owner of the Master record (TaskRay Task) can be the owner of the Detail record (time). This is due to the fact that detail records automatically set to the owner of the master record.

So if we have two users collaborating on a task and user one logs 3 hours then changes the task owner to user two who then logs one hour Salesforce will show that a total of 4 hours have been logged by just a single user, in this case user two. This means any reports will not show that user one spent any time on this task. 

So, if your users will be working collaboratively on tasks and you need to track the number of hours logged by each individual then method two would be your best option.

Otherwise should your tasks be completed 100% by one single resource each time method 1 would be your best bet. 

Method 2: Use a Lookup Relationship

For this method instead of using a Master-Detail relationship we will use a Lookup Relationship between our TaskRay Task and Time objects. By using a Lookup Relationship between TaskRay Tasks and Time it means that we can have different users log time to the same task without the loss of data on who spent time on the task. This will be our best solution in situations where  tasks are often shared between resources.

Now, in general, a Lookup Relationship field does not allow for easy rollup summary fields on the related object. This is a key difference between Lookup and Master-Detail relationships. This means that we will not be able to summarize the value of multiple time entries as a field on our task records (e.g. 3 entries of two hours each to roll up and calculate to 6 hours) without some extra effort. This extra effort could be as simple as implementing another (free) app such as Rollup Helper or Andy in the Cloud's Solution, or it could be as sophisticated as implementing some custom Apex code. 

Ready to Build!

OK, now that we understand our different options and have selected one based on our needs, how do we actually set up time tracking for TaskRay?

Below are six simple steps to get started. The steps are the same for both methods described above with a couple of differences which are highlighted.

Let's get started:

Step 1: Create a new Time object in Salesforce.

This object will store time entry records and can be as simple or as complex as your business requires. We'll describe the simple case in this article.

To create the new object go to Setup-Create-Objects and click "New Custom Object"

Here enter the Label and Object Name fields as "Time".

Record Name field should be "Time Record".

Data Type: Auto Number

Display Format: {MM}-{DD}-{YYYY}-{0}

Starting Number: 1

Be sure to also check the boxes for Allow Reports and Track Field History.

And ensure the "Deployed" radio button is selected before clicking on "Save".

Step 2: Add fields to the Time object.

To do that go to Setup-Create-Objects and click on the "Time" object. Then under the Custom Fields and Relationships section click "New".

For Method 1: create a Master-Detail Relationship field called "Task" that relates to the TaskRay Task.

For Method 2: create a Lookup Relationship field called "Task" that relates to the TaskRay Task.

Once either relationship is defined click "Save & New" to add these other fields to the Time object: 

- Field Name: Project, Type: Formula field with the formula of:


- Field Name: Date, Type: Date field with a default value formula of: Today()

- Field Name: Hours, Type: Number with 2 decimal places

- Field Name: Billable, Type: Checkbox (this field is optional and would be used to differentiate time entries that are billable to a client versus non-billable time entries).

Step 3: Create Chatter Action.

Once these fields are added we can then create a Chatter Action to the TaskRay Task which will then reference this new Time object.

To do that go to: Setup-Create-Objects-click on TaskRay Task-Scroll down to the Buttons, Links and Actions section and click on "New Action" and enter the following field values:

Action Type: Create a Record

Target Object: Time

Standard Label Type: --None--

Label: Enter Time

Name: Enter_Time

Then click Save.

Step 4: Add Action to TaskRay Page Layout.

Now that the Chatter Action is created the last step is to add that action to the TaskRay Task Page Layout.

To do that go to: Setup-Create-Objects-Click on TaskRay Task-Scroll Down to the Page Layout section and click Edit

Then in the left side of the top grid click on "Actions" and drag/drop the new "Enter Time" action to the 'Actions in the Publisher' section below. You can also re-order these if needed. Personally I like to have it listed third after "Post" and "File" so it's easily accessible.

                                           Drag the "Enter Time" action to the Actions in the Publisher Section.

                                           Drag the "Enter Time" action to the Actions in the Publisher Section.

Once done click Save on the top left of the Page Layout grid.

Step 5: Test it out.

Lastly,  we'll want see how this looks, so go back to the TaskRay tab, open up a task and go to the Chatter Tab (quick tip - you can click on the Chatter Icon on a Task Card to go directly to it's Chatter Tab), there we'll see that new Enter Time action where users can log and add the hours spent on a task.

As users click the green "Create" button shown below that will create and add that time entry to the Chatter feed of the associated Task.

Note: Should your users be assigned to a Salesforce profile you may want to ensure that those user profiles have the ability to view and edit our new "Time" object, otherwise they may not be able to enter time.

To do that go to Setup - Manage Users - Profiles select the relevant profile and click Edit.

Then scroll down to the Custom Object Permission settings and find that Time Object. There you can change the Time object settings for the profile to allow for read, create, edit and delete.

Once done hit save and do the same for any other profiles who may also need access to that object. 

Those users should then be able to successfully log their time.

Step 6: Add Completed Hours Field.

Now, if our new Time object is a Master-Detail relationship (Method 1) to the TaskRay Task it means that users can log multiple time entries to one task (e.g. log one hour today, another tomorrow and again the day after). 

To help calculate and display the total number of task hours completed to date we can simply add a roll-up summary field to the TaskRay Task object.

To do that go to:

Setup - Create - Objects - TaskRay Task and click New next to the Custom Fields and Relationships section. 

Select the field type to be "Roll-Up Summary" and click Next

Enter the field name/label as "Hours (Completed)" and click Next

Select the following: 

Summarized Object as Time Rollup Type as SUM and Field to Aggregate as Hours

Also ensure the "All records should be included in the calculation" radio button is selected

Once done click Next and Save to create the field.

Lastly, add that new field to the TaskRay Task field set:

Go to Setup - Create - Objects - TaskRay Task - scroll to the Field Set section and click edit next to the TaskRay Task Field Set.

Next, drag/drop that new "Hours (Completed)" field into the field set below and click Save.

Now the next time we go back into TaskRay and open up a TaskRay Task we'll see that new Hours (Completed) field along with it's associated value.

Should our Task/Time relationship be a Lookup (Method 2) then for this step we'll need to take advantage of another app such as Rollup Helper (described above) to calculate and display the sum total of multiple time entries.

...but wait there's more!....

Take TaskRay Time Tracking to the Next Level:

Not only can we efficiently enter, calculate and display our time in TaskRay but we can also report upon it and calculate additional metrics to help with resource allocation, rate calculations and so on.

For example, you could add an Hours (Estimated) field as well as a Remaining Hours formula field which calculates the difference between the Completed and Estimated Hours.

Or we could add a Rate field that show the hourly rate for the task (e.g. $80 per hour) and combine that with a Total Cost field that calculates the sum of the rate and completed hours.

All of these fields and TaskRay data is reportable and can be represented in powerful, actionable dashboards.

For example, each TaskRay Task is assigned to an Owner and if we are tracking the Estimated, Completed and Remaining Task Hours we can easily create a Dashboard that shows all the remaining task hours by resource for the week, month, quarter, etc. 

Now, we can quickly see who is overburdened, who can take on extra work and who needs help.

So there you have it! Six easy steps to quickly add time tracking to TaskRay.

Try it out, see how it works and perhaps even add further customization to meet your needs. To give you a sense of what's possible, here's an example of how a Salesforce Consulting Partner customized TaskRay to manage their professional services engagements. Based on these customizations they even developed their own enhanced time tracking tool that includes a custom stopwatch feature.

And remember, it's not how much time you put in, it's what you put into your time that counts!

Happy time tracking!

Share & Collaborate on Files and Documents in TaskRay

As you may know, Chatter collaboration is embedded into TaskRay allowing for easy communication across all of your tasks and projects.

It also allows users to share and collaborate on files and documents directly in TaskRay/Salesforce.

So whether you are working on marketing collateral, legal documents, contracts or any other type of file it can be easily attached to TaskRay Tasks and Projects and shared with others, both internal and external.

But first of all, how do we attach files and links to TaskRay Tasks and Projects?

To attach a file to a TaskRay Task simply open up the task to the Chatter tab. A quick way to do that is to click on the Task Chatter icon on the front of the Task Card.

Once on the Chatter tab of a Task click on the "File" option. 

Here, we can either attach a file that already resides in Salesforce or upload direct from your computer.

Alternatively if we click the "More" dropdown we can instead add a URL link - which is great when we want to share a web address as well as any files that are stored elsewhere such as Dropbox, Google Drive, Box.com, etc. 

Once we've added the file/link click "Share". It will then be posted to the Chatter feed of that TaskRay Task. 

Alternatively, users can drag/drop files from their desktop directly into Chatter: http://bracketlabs.com/blog/2015/3/25/quick-tip-drag-and-drop-files-in-taskray

For quick access, clickable files and links are aggregated and listed on the TaskRay project sidebar:

 TaskRay users can easily view and access these files as well as communicate on them via the task Chatter tab:


How do we share files with external contacts?

If needed, we can also share file attachments with others, both inside and outside of Salesforce (e.g. clients and vendors). To do that just click the "More Actions" dropdown next to the file and select "File Sharing Settings". 

Here we can share the file with any other user or group within Salesforce or with anyone externally via the "Anyone with Link" button.

Once we click the "Anyone with Link" button Salesforce will automagically create a URL which can then be sent to anyone who needs to view or download the file.

Other useful functions that we'll find under the "More Actions" dropdown next to a document include the ability to see a preview of the file without needing to download it first. Users can also upload a new version to replace the existing file or they can view more details about the file:

What if we store our files in Office 365?

Even if you store your files in Sharepoint or Office 365 it's possible to connect with them via Chatter. First however, you (or your Salesforce Admin) will need to turn on Salesforce Files Connect. Here's how.

Once done, users will be able to go to the Chatter tab of any TaskRay Task and attach Sharepoint located files.

Plus coming soon in the Summer '15 release of Salesforce users will be able to use File Connect to efficiently access files from Google Drive, so look out for that soon!

How do we restrict visibility on files?

As you know it's possible to make TaskRay Projects private so that only those users who are added as contributors can view and access its data

This includes any files, links, or attachments which are added to tasks within private projects.

As a result we can be comfortable in the knowledge that any sensitive files, links or attachments on a task which are a part of a private project can only been seen by those who have been assigned as a contributor to the project. 

So, no matter what type of task or project you are working on it's quick, easy and efficient to upload, view, share, and collaborate on any type of file within TaskRay and Salesforce.