0

I have two remote actions. One returns the result set of an Account query. That Account query has a subquery for Assets, so for all intents and purposes, the query is [Select Id, (Select Id From Assets) From Account];. Any given Account in the result set from that query will look like {Id: "003450345k", Assets: Array(2)} or something like that in JSON.

The second remote action has a method signature of @RemoteAction public static void save(Account account) { ... }. When this remote action is invoked in JavaScript, it fails and reports a "Visualforce Remoting Exception: No such column 'Assets' on sobject of type Account"

Does anyone know of a way that you can do this? It would be really nice to be able to pass the child relationship collections of sObjects back to the server so that I don't need to re-query for them and do something like let {Assets, ...record} = account; and then invoke save(record); with the remainder account that effectively now has had Assets stripped out of it.

Both VF page and controller extension are api version 40.0

1 Answer 1

0

I'm pretty sure you can't use automatic serialization for this, but you could choose to do it yourself via JSON serialize/deserialize.

@RemoteAction public static String getAccount(Id recordId) {
    return JSON.serialize([SELECT Name, (SELECT Name FROM Assets)
            FROM Account WHERE Id = :recordId]);
}
@RemoteAction public static void doSomethingWithAccount(String jsonSource) {
    Account record = (Account)JSON.deserialize(jsonSource, Account.class);
    // ...
}
1
  • Thanks for the suggestion! I'm going to try it out in my app and I'll report back here on whether or not it behaved differently. Jul 11, 2017 at 18:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .