Mchrobok
Occasional Observer

RequestOperation - Antwort im Script auswerten

Hallo zusammen,

Ich versuche die über eine RequestOperation getroffene Auswahl eines Benutzers in einem switch zu prüfen. Danach soll anhand der Antwort ein bestimmter Ordner gesetzt werden.

Leider schlägt die Überprüfung in manchen Fällen mit folgender Fehlermeldung fehl:


Es ist ein unerwarteter Fehler aufgetreten.

Switch value: result : : Undefined variable, class, or 'void' literal in binary operation : at Line: 105 : in file: inline evaluation of: ``__execute() { //!beanshell import de.espirit.firstspirit.agency.*; import de.esp . . . '' : switch ( result ) {

Warum könnte die Variable result von der RequestOperation leer sein? 
 
Anbei ein Auszug meines Codes:
.....

user=context.getProject().getUserService().getUser();
groups=context.getProject().getGroupsArray(user);
print(user);


opAgent = context.requireSpecialist(OperationAgent.TYPE); 
if (opAgent != null) { 
    RequestOperation requestOp = opAgent.getOperation(RequestOperation.TYPE); 
    requestOp.setKind(Kind.INFO); 
    requestOp.setTitle("Bereich wählen"); 
  
    for (i=0; i<groups.length; i++) {
        gruppenname=groups[i].getName();
        switch (gruppenname) {
                    case "Administrators":
                    root=requestOp.addAnswer("Root");
                    break;
                    case "MSG":
                    msg=requestOp.addAnswer("MSG");
                    break;
                    case "AG":
                    ag=requestOp.addAnswer("AG");
                    break;
                    case "BEIT":
                    beit=requestOp.addAnswer("BEIT");
                    break;
                    case "Everyone":
                    break;			  
        }
    }
  cancel=requestOp.addCancel();
  result = requestOp.perform("In welchem Bereich soll das Gerät angelegt werden?"); 
}
folder ="geraete";
sufix="_g";

if (result != null) {
	 switch (result) {
			case root:
			 folder="geraete";
			  break;
			case msg:
			  folder="msg";
			   break;
			case ag:
			  folder="ag";
			   break;
			case beit:
			  folder="beit";
			   break;
			}
	
	}
folder=folder+sufix;
....

 

1 Reply
mbergmann
Crownpeak employee

Hi,

rein „technisch“ (also vom Code her) könnte der Fall ggf. auftreten, wenn der opAgent null ist, kann das passieren? Denn dann wird das unten benutzte „result“ ja nicht definiert. Beanshell ist ja was Deklarationen angeht etwas „laxer“ als Java und scoping unterscheidet sich zwischen typisierten und untypisierten Variablen (was übrigens der Grund ist, dass der Code so im positiven Fall überhaupt funktioniert…).

Falls result also undefiniert bleibt, funktioniert noch das if-statement, weil result eben nicht null sondern void ist (noch so eine Beanshell-Spezialität), das switch kann dann aber nichts damit anfangen…

 

Viele Grüße 

Michael

0 Kudos