Bracket Labs delivers incredibly useful enterprise apps through the Salesforce AppExchange.  Our products help thousands of users plan & manage their work, share it with their teams, and get more done. Best of all, our apps are designed to be simple to use! Learn more about each product below.

Connecting TaskRay with GridBuddy for easy mass updates!

Editor's Note: We are big fans of Salesforce MVP Brad Gross and the work of his Salesforce consulting firm, Information Logistics, so we were delighted when they became a TaskRay customer. Like many MVPs, Brad is amazingly crafty when it comes to finding unique ways to solve problems in Salesforce. Brad's guest post this week cleverly demonstrates the power of interoperability between two Salesforce apps. We should not only say power, but also the simplicity of integrating two apps that are built natively on the platform. In this case Brad will show the elegance of TaskRay alongside the awesome GridBuddy built by AppBuddy

Guest Post by Brad Gross

Integrating TaskRay and GridBuddy for easier Project Management

Both TaskRay and GridBuddy are great at their respective functionality and features. TaskRay makes it easy to create tasks against projects and then manage them visually. GridBuddy works hard to allow mass editing and viewing of Salesforce records.

For as visual TaskRay is, we needed some way to mass edit tasks in the system. With these tools and a simple formula field(s) its easy to get both. This piece will show you how to build a grid that can be called from TaskRay and show tasks tied to the particular project.

Configure Grid - Initial Setup

The first step is to create the grid in GridBuddy. For us we created a number of custom fields within the TaskRay Task object so your fields may be different. The Parent Object field should be set to TaskRay Project. We usually also set the grid to open in Edit mode and NOT in Read-Only. Makes it easier for the user.

Configure Grid - Field Selection


In the next step pick the fields that your users are going to edit more often. Just a note that you have to specify at least ONE field on the TaskRay Project object. Your users may never see it but it has to be there.

Configure Grid - Grid Filters

Next is to pick the filters. The Project records do not need to be adjusted or filtered at all. For Tasks however, the field List is definitely one to be sorted on. Also Deadline is not a bad field.


Configure Grid - Grab the URL


Once the grid is saved, launch the grid. It will show all TaskRay projects and their tasks. That's ok. We will handle the filtering in a later step. For now copy the URL.


For example the URL above ends in /apex/Grid?gname=Project%20Task%20Grid

Create Field in TaskRay Project


Now in Setup | Create | Objects click on TaskRay Project and then create a new custom Formula field with the return type Text.

In the formula field put in the FULL URL from above into the formula. It cannot be the relative link since we are asking Salesforce to switch namespaces from TaskRay to GridBuddy.

Here is our formula: HYPERLINK("PLACE YOUR URL HERE&id="+Id , "Tasks in a Grid")

For us the formula is: HYPERLINK(""+ Id  , "Tasks in a Grid")

Add field to TaskRay Project Field Set


For the field to show up in the TaskRay Project detail window you need to edit the Field Set for the TaskRay Project object.  On the object page scroll down to the Field Sets section and add the new field to the list.

Repeat for TaskRay Task

Repeat the above field creation for the TaskRay Task object, so that your users can access the grid from both the project and the task detail windows.

Launch Project Grid

Now watch the fun! From any TaskRay Project or Task click on the field Tasks in a Grid and watch the grid pop-up filtered to tasks just to that project.


Project Grid for a Single Project


Want More?

Love Brad's TaskRay & GridBuddy customizations? Contact Brad & his team at Information Logistics here to see how they can help you customize TaskRay to meet your specific business needs.

Why is TaskRay Different?

I recently had a conversation with a TaskRay customer about the difference between TaskRay and products that are specifically designed for managing Agile Software Development. This question is something that has fundamentally shaped TaskRay from its earliest days, before a line of code was written. It's a question that highlights not only the philosophical underpinnings of TaskRay, but also the values that we've tried to bake into the DNA of the company. And while our team focuses on the answer daily, I thought it might be useful to explain it in a blog post.

Capital "A" Agile VS lowercase "a" agile

It's not an overstatement to say that the Agile Manifesto has produced revolutionary change in the way that software products are built. In a very short time, some form of Agile has become the standard way of working for most software development teams. And in that same time an impressive number of consultancies, alliances, coaches, and even product companies have been created to help teams implement and optimize their Agile processes. Along the way, the practice of Agile has become a bit dogmatic and rigid, with rules and rhythms that are easily expounded but less easily practiced on a daily basis.

Having worked on teams using this "heavy duty" version of Agile, we knew that it wasn't what we wanted to do when we founded Bracket Labs. Not only was it more than we needed as a startup team, it simply wasn't very fun. But of course we needed some sort of process for managing our development work, and in exploring alternatives we kept coming back to the Agile Manifesto and what it really had to say:

"Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan"

The Agile Manifesto doesn't prescribe any process at all, but rather suggests the right things to emphasize. This manifesto summed up the essence of the best things we had seen in practicing Agile, but it didn't require any of the administrative overhead we had come to associate with traditional Agile. We started calling this lowercase "a" agile to differentiate from the capital "A" Agile processes being evangelized by the various gurus.

Putting "a" Into TaskRay

In a nutshell, lowercase "a" agile is how TaskRay differs from the products designed to manage Agile Software Development processes. It is not rigid in its devotion to an agile methodology, but rather adopts the "spirit of the law" to provide features that promote visiblity, conversation and rapid work.

A typical TaskRay project display - optimized for understanding priority and status of tasks

A typical TaskRay project display - optimized for understanding priority and status of tasks

First and foremost, TaskRay is designed to present a visual model of a workflow. This visualization is easy to read and understand, and we think of it as the start to a conversation. Key information such as status, priority, and deadline are all quickly understood by anyone viewing the board so they can take the next step of asking questions, offering input and quickly making decisions with their teammates.

Full Chatter integration enables conversation and collaboration directly within TaskRay

Full Chatter integration enables conversation and collaboration directly within TaskRay

While no product will ever replace the high bandwidth efficiency of a face to face conversation, TaskRay's deep integration of Chatter provides the next best thing. Chatter provides a low friction, high visibility communication feed about the work in progress. It offers seamless collaboration via threaded messages, file sharing and the ability to easily subscribe to relevant updates. And without having to think about documenting their efforts, TaskRay users are generating searchable history of their activity directly within Salesforce.

Easy yet powerful customization of TaskRay fields to reflect customer processes

Easy yet powerful customization of TaskRay fields to reflect customer processes

The ability to custom tailor TaskRay to any customer's processes is another example of an agile product in action. TaskRay's native use of custom Salesforce objects allows powerful customization through standard Salesforce admin actions such as custom field creation, Chatter Actions, and workflow rules.

Ultimately, TaskRay was designed to both support lowercase "a" agile processes as well as to embody a lowercase "a" agile philosophy.  And true to that philosophy, as we learn more about how our customers are using TaskRay, through feedback, conversations, and surveys, we're able to continually improve the product. We are constantly working on additional functionality, enhancing the user experience, and anticipating where our customers will want to go next. Do you have ideas for what TaskRay could do better? Or would you like to see what other TaskRay customers are asking for? Check out the TaskRay User Voice forums where you can submit ideas as well as vote on other customers' ideas. And don't be shy, your feedback is critical to our lowercase "a" process.

3 Tips for Optimizing TaskRay Templates

The ability to clone projects in TaskRay is one of the most popular features in the product. It saves time entering project details, it standardizes work processes, and it can even be combined with a workflow rule to dynamically assign deadlines.

Probably the most common use case is to clone "template" projects. These template projects are simply projects which have been populated with the typical steps of a specific project type, and when they're cloned they allow a team to hit the ground running with a pre-built project plan. We've had the opportunity to work with many different TaskRay customers and their processes, and we've discovered a few tricks for tweaking templates to make them even easier to use and maintain.

1. Name your templates descriptively

The best template is worthless if your team can't find it easily when they need it. And nothing makes it easier to find the right template than a good name. We recommend prefacing all templates with the word "Template" and then using as much of the 80 allowed characters as you need to make sure your team understands the template's purpose.


This "Template" trick is not just for making it obvious that the project is a template. Anyone searching for a template in TaskRay can just type "template" into TaskRay's search and they'll get a list of all templates available. 

2. Use a queue for the template task owner

Because a template project is really just another project inside TaskRay, each task in the template must have an owner. But if a template task is owned by an actual person, that incomplete task will show up on their My Board display as well as any reporting on open tasks.

This can be fixed by creating a Salesforce queue and using it as the template task owner. We like something simple like a queue called "Unassigned" but you can call it anything that makes sense for your team's process. Make your new queue the owner of all template tasks, and then assign ownership to actual people once the template is cloned.


3. Consider archiving and organizing your templates

TaskRay lets you search for and clone projects easily, even if they're archived. So if you've got a long list of template projects, you may want to consider putting them into the archive to reduce the amount of visual clutter on the screen. Assuming you also used tip #1 above, your team can now just search for the right template in the archived projects and clone it.


This tip isn't for everyone. If your team has trouble remembering to search for templates you might want to keep the templates on their screens and considering putting them into a hierarchy that can be collapsed in the sidebar.


Using these three simple tips should help you optimize how your templates are configured and used by your team. But what did we miss? If you've got a great tip for using templates, share it in the comments!

Lookup Relationships + TaskRay = Awesome Salesforce Integration

We've covered this topic in the past, but given that this is probably the most popular customization in TaskRay, I thought it might be useful to revisit the concept and go a little deeper into the details. If you're just looking for instructions, feel free to scroll down to the How To section.

TaskRay is built 100% native to the Salesforce platform. This means that "behind the scenes" TaskRay's data is stored and accessed in the same way that any other data is stored and accessed in Salesforce. If you have ever customized a standard object like Accounts, Contacts, or Leads then you will feel right at home when you open up the admin panel to customize a TaskRay object - they behave exactly the same. This native functionality allows TaskRay customers to leverage all of the powerful features available in Salesforce, such as validation rules, workflow rules, visual flow, Apex triggers, reporting, dashboards, and more. The most important, and commonly used, customization in the TaskRay objects is the ability to add custom fields.

Any field type that Salesforce makes available is usable on a TaskRay object, which means that you can use these custom fields for much more than simply entering additional data on your TaskRay Tasks or Projects. Of particular interest to most TaskRay customers is the ability to create a field that contains a Lookup Relationship to integrate TaskRay with other objects in a Salesforce instance.

Here's how the Saleforce documentation describes Lookup Relationships:

Creates a relationship between two records so you can associate them with each other. For example, opportunities have a lookup relationship with cases that lets you associate a particular case with an opportunity. A lookup relationship creates a field that allows users to click a lookup icon and select another record from a popup window. On the associated record, you can then display a related list to show all of the records that are linked to it. You can create lookup relationship fields that link to users, standard objects, or custom objects. If a lookup field references a record that has been deleted, Salesforce clears the value of the lookup field by default. Alternatively, you can choose to prevent records from being deleted if they’re in a lookup relationship.

That's a lot of Salesforce vocabulary crammed into a few sentences, so for those of you who aren't fluid in Salesforce's language (or who skip blocks of text on principle) let me break it down:

Custom Lookup Relationship fields make it incredibly easy to link your TaskRay Tasks and Projects to any other data in Salesforce. And that relationship is full featured, highly visible, and reportable.

When you create a custom Lookup Relationship field in TaskRay and use it to integrate with other Salesforce data, you create a relationship that:

  • Displays the related record as a linked label on your TaskRay Task or Project card in TaskRay
  • Creates a related list of all TaskRay Tasks or Projects associated with the record in the standard Salesforce view of the record
  • Forms a reportable link between the TaskRay Task or Project and the other record, allowing the relationship to be summarized and analyzed using standard Salesforce Reporting and Dashboard
  • Provides a relationship available for cross-object formulas and workflow

And the best part is these fields take roughly 2 minutes for an admin to create. It's the sort of simple and powerful integration of data that is only possible with a native Salesforce app like TaskRay.

With all of that explanation out of the way, let's take a look at how to do it!

How To Add a Lookup Relationship Field to TaskRay

Create the custom Lookup Relationship Field on the desired TaskRay object

  1. Go to Setup > Create > Objects and select the TaskRay Task object if you want to add the field to your Tasks or select TaskRay Project if you want to add the field to your Projects. (Pro Tip: Typically it makes sense to add Lookup Relationships for Accounts and Opportunities onto the Project object)
  2. Scroll to Custom Fields & Relationships and click New
  3. Select Lookup Relationship and click Next
  4. Select the correct target object (such as Account or Opportunity) from the Related To drop down picklist, then click Next
  5. Give your new field the Label you’d like to display for the field (most cases just use the default value), hit tab to auto-populate the Field Name and click Next 
  6. Grant field-level security to the right user profiles and click Next 
  7. Leave Project Task Layout or Project Layout (depending on which TaskRay object you're customizing) checked and click Next 
  8. Specify the name of the section that will display the related TaskRay records on the standard Salesforce layout for the target object and then select any target object layouts that should not display the related list and click Save
Setting the Field Name for new custom Lookup field. Note the naming constraints.

Setting the Field Name for new custom Lookup field. Note the naming constraints.

Add the new Lookup field to the TaskRay object Field Set

You now have a custom Lookup Relationship field that integrates your selected TaskRay object with another Salesforce object. But it's only visible in the standard Salesforce interface right now. We will want to make this available in the TaskRay card interface so that TaskRay users can easily view and edit the field. To do this, we will add the new custom field to the TaskRay object's Field Set.

  1. Go to Setup Create > Objects and select either the TaskRay Task object or the TaskRay Project object depending upon where you added the custom Lookup field above.
  2. Scroll to Field Sets and click Edit next to TaskRay Task Field Set or TaskRay Project Field Set, depending on your selected TaskRay object.
  3. Drag the new custom field into the In The Field Set section at bottom of page. Note that you can also drag and drop the elements of the In The Field Set section to change the layout displayed in the TaskRay card
  4. Click Save at the top of the page

Example of Field Set layout control on TaskRay Project

You're done!

I told you it was easy, right? After completing these two steps, you'll now see your custom Lookup field in the cards for your TaskRay Tasks or Projects (wherever you added it) and you'll also see a related list of TaskRay records on the page layout of the target object you specified. By editing the value in the Lookup field you'll be relating the TaskRay Task or Project to another Salesforce record.

If you run into any questions while building this custom field, don't hesitate to contact us using the Feedback link in the upper right corner of TaskRay. We'll be happy to help.

Bracket Labs Dreamforce Roundup #4: Real Time Data Feeds Using The Streaming API

This is our fourth and final Dreamforce '13 Roundup! This is a developer focused session where we discuss how to implement real time data feeds to your Salesforce web application. Data which is never out of sync is rapidly becoming a requirement of all web applications.

The first approach we discuss is utilizing Salesforce's Streaming API.  With this API we are able to register for notifications of changes in the Database, and have them pushed down to users which have subscribed to them. This is definitely the way to go if you are looking to quickly implement a real time data feed. Unfortunately, sometimes this approach does not always work due to limitations currently placed on the Streaming API. Specifically, not all standard objects can be streamed from, and limits placed upon how many users are currently subscribing to the Streaming API events.

If the Streaming API does not work for your project, you can also utilize an interval polling approach. This simply pulls down a data set from the server and compares the new results against a cached version on the client. In the second portion of this presentation, I give an overview of how to accomplish this with Visualforce Remote Actions.

I've added the demo application, including both approaches, to this github repo: My recommendation would be to clone this repo and try it out in a dev org or sandbox to discover which approach works best for your projects.