I think the awareness that screaming and making a scene in public are embarrassing sets in as they get older, usually without it needing to be directly taught. They start to pick up on the looks from the people around them and especially if they play with other children a lot. DD will be 8 next month and she's starting to realize the idea that there is an audience when she's out in public, and pays more attention to whether or not she is acting appropriately.
When the children start publicly arguing or fighting, is it possible to have one come sit beside you to talk about it? Not necessarily as a negative consequence, but in order to get a breather from the other child, be heard, and maybe just getting some empathy can be enough for the child to let it go. And maybe get some space alone with you to work out a better way to deal with whatever the issue is.
I think that outings should be cancelled suddenly only sparingly, when one child is hurt or sick. In that case, the message is, "we need to take care of X - he needs to get home right away because he is not feeling well." In the case of children not getting along, I think if you can get one of them to sit beside you for a while until they are ready to re-join the play its better, then there is less likely to be resentment among the other children for one child ruining their playtime. When I take DD and her friends to the park, there is one child in particular who gets bored easily and would deliberately provoke the other children because he wanted me to take him home. Now instead of letting him determine when we leave I tell him he needs to sit beside me if he doesn't feel like playing, and we can chat if he likes, but we're leaving when its time, not before. I also go over the rules with him before we leave, reminding him that he has gotten bored in the past but we want everyone to have as much time as possible, so if he thinks he's going to want to leave early, he could make some other plans and not come.
Follow Mothering