I finally managed to do it, without messing too much the application.
I was wrong about one of my assuptions: you can retrieve the name of the active applet in scripting... it just can't be done with server scripts, but it's possible with browser scripts.
This is the piece of code that I put on my buscomp browser script:
function BusComp_PreSetFieldValue (fieldName, value)
{
// ...
var currentApplet = TheApplication().ActiveApplet().Name();
if ((fieldName == "MyField") && (currentApplet == "MyApplet1") && otherConditions) {
alert("You can't do that!");
return "CancelOperation";
}
return "ContinueOperation";
}
It works perfectly. I would prefer an applet-based solution instead of placing my code in the BC, but at least it doesn't depend on the view.