There are two main things required to enable Rowburner. First, you need to create Salesforce reports or SOQL queries that are filtered so that they either:
- Display records – the report or query returns rows
- Don’t display records – the report or query returns no rows
Essentially, you want to filter in a way so that the dataset gives you a Boolean value. Let’s look at a very basic example of how this works.
Here is an Opportunity with three associated line items. Each one is a product that belongs to a different product family: apps, services or training.
Here are three ‘Opportunities with Products’ reports, each filtered for a dynamic Opportunity ID and a hard coded product family:
When the Opportunity has products in all three families, the results aren’t very exciting. Each report returns the relevant line items, and they’re all merged into the table in a predefined order:
However, if products are removed so that one of the reports returns no rows (no products in its defined product family), rows start to disappear:
Rowburner doesn’t have to just remove table rows, however. Placing any content (text, merge fields, entire tables, images, etc.) between your TableStart/TableEnd tags that reference the same Boolean-style reports or queries will either show the content or completely decimate it. If there are no products in the services product family, we get results like these:
Those are the basic mechanics of Rowburner, let’s put this trick into context and discuss a few ways it makes sense to implement for business purposes.
Rowburner is great for displaying or destroying terms and conditions, additional provisions specific to a deal, or just about any kind of contractual language that may or not apply to a particular transaction. You can reference the same report or query more than once in a document like we did to burn the services row as well as the additional language about services in the previous example. Use this method to make your contracts “smart” and only display the information specific to the deal in question.
Granular Control over Line Item Placement
Conga Composer offers a feature called TableGroup that allows you to group on a specific field to create multiple tables on a dynamic basis. Sticking with the previous examples, I could TableGroup on product family to create individual tables for line items that belong to each product family, and even separate them across different pages. However, we see a lot of situations where separate tables aren’t the goal. The requirements are to keep everything inside one table in a defined order. Granted, Opportunity Products can be sorted natively in Salesforce, so the sweet spot for this feature is when you’re working with custom related lists or more than one related list. The result is nice and “smart” thanks to Rowburner and rows are merged in a predetermined order. Plus you can still do useful things like AutoSum the results for a dynamic calculation.
Additional Charges on Quotes & Invoices
Whether they’re concessions, pro-rated fees, excess usage charges or regional taxes, you can use Rowburner to show/hide additional charges related to a quote or invoice. For example, if excess usage charges are being applied to a customer’s renewal invoice for a subscription service, using Rowburner in your Word template can show charges anywhere the data is placed in the document if the excess usage charges are not $0.