I’ve done something kind of similar. On the parent table that is connected to custom object model “Topics” you could have a row action button that opens a sliding panel to 100% width. At the top of the sliding panel, put a button labeled “close” and have it set to close top most sliding panel. Then add a deck component to the sliding panel connected to a “Discussion” custom object (that you create) that is a child object to your main object “Topics”. Then, someone can look at the main table, select the row action of a topic they are interested in and it will open a sliding panel that will show them all the discussion records related to that topic and they can add additional discussion records.
Thank you Skuidward. I like this. I’ll let you know how I get on! Anything special I need to look out for? Did you encounter any issues?
Hi Skuidward,
I’m not sure how the deck component works or helps? Can you explain?
A
A special issue that I would caution you on is that when you close a sliding panel, it doesn’t remove the content in the sliding panel from memory so it could have stale data in it. You should add a requery action to the button that opens the sliding panel to make sure there is fresh data each time the slider is opened.
The deck component is like a fancy table component. You could just use a table If you prefer. Either will display all rows in a model. The deck is just more flexible with the layout. You could make it look virtually any way you want where with tables you are a little more restricted.
Thank you for that. I’ve done the first one!
For the deck it feels like it would be quite good but…It looks pretty ugly right now. I guess I would need some nice CSS for it.
You can add rich text components and style those using the editor or you can add template components and paste in your own HTML to get it to look the way you want. Wrappers can give you containers you can add backgrounds and borders to. The deck itself has properties you can edit like border and background. All things considered you can make it look just about any way you want if you want to put the time in.
Hi Skuidward,
Well this is not working for me. Each row has a drawer indeed, but when I add comments in one drawer it adds that comment to the drawer for the next row. And then when I refresh the page, it’s all gone. I’m querying the model, I’m making sure the drawer doesn’t replace data. I’m rather confused.
If you are using table drawers - there are quite a few things you have to get right in order for the relationships to work correctly. We created a simple example in our Sample Pages repo that shows how it should all work. Download that page xml and play with it in your org and you can see what is required.
Skuidward is suggesting a sliding panel - which allows you to review the conversation for a single record at a time. It is a more straightforward implementation.
Thanks for staying with it. I’m confident you can be successful.
Hi Rob,
I’ve downloaded the sample page but I cannot see anything that looks different to my page. What I want is for people to be able to comment in the drawer and for those comments to stay there. At the moment the drawers open, I can write a comment but the comment is added to all rows’ drawers and when I refresh the page the comments disappear. Do you know why that is?
Many thanks
A
Ok. Here are a few things to check.
Does your “discussion” object have a reference to the record from the table? Does you model have a condition setting the value of the reference - and does your drawer action set that condition value to the ID of the table row? (If that reference is not correcty set - when you reload the page - the discussion isn’t connected.)
Have you looked at the “context” tab of the table in your drawer where you are showing the discussion. It should be something like “ParentId” of discussion record = “Id” of context row. This is how we get the right discussion items connected to the right rows in the table. (Those fields have to be in your models - because all this happens client side).
Hi Rob,
I think the problem I have is that the table that triggers the conversation is a table of tasks. I’m trying to relate to tasks, but it’s just not happening.
Tasks are a strange object, but you should be able to get it to work. Again - what is the relationship from your “Discussion” record to “Tasks”? Is there a lookup? If not - it won’t work. Maybe you can post a picture of the two objects in Schema Builder.
This is Salesforce setup stuff… (but no worries - we’ll get you taken care of…)
I cannot set a lookup from ‘Discussion’ to Tasks. It’s the wrong way round for a one to many. But I have a lookup the other way around.
If you want multiple comments on a single task - you need to have a lookup on the Discussion record that has a single Task as parent. This way the task record could have a “related list” of discussion comments. (except that we’d do the related list in Skuid).
Hi Rob, how do I have discussions to have a single Task as parent? I’m not being very successful with that. As far as I know the Task object can be a child but not a parent.
Oh Salesforce… That’s right, all the normal techniques go right out the window when talking about Tasks and Activities. We laugh about Salesforce standard objects being completely custom, and their custom objects being completely standard…
You may be able to use a Text Field on the discussion object and mark it as an External ID. Then in your Skuid pages you’ll have to set that text field to be the value of the Task ID you are adding Discussion comment to. And when you query your Discussion comments - you’ll just filter the External ID field by the value of the Task ID.
There are downsides to this. Reporting will be hard. This relationship wont be indexed and if you’ve got millions of tasks performance will be challenging.
But regardless of how you present this in Skuid - I think you are going to have to do somthing like this in your Salesforce data model in order to allow more than one comment to be added to a given task.
ok! i’ve got it working. 🥳
one little question for you, how do you get the cards to show below each other?
Glad you got it working. If you put the deck component inside a responsive grid or wrapper component with a max width less than two cards wide, it should force the second card to wrap down below the first card and so on.