Optimiserung von Länge if..set..elseif..set..else..Endif

Community help and discussion for RapidRep Designer Application

Optimiserung von Länge if..set..elseif..set..else..Endif

Postby xuxin27 » 12 Jun 2017, 11:07

Hallo Werner,

gerne möchte ich dir fragen, und zwar nach der Optimierung von IfCondition zu Case When Situation:


#set( $rs = $RR.getResultSet( "SELECT * FROM $LP07DARK21_Count.TEST_BASIS()", $RR.getInternalConnectionName()))
##
#foreach($TestSet in $rs)
#set($REQ_ID = $TestSet.getString("REQ_ID"))
#set($SOURCE = $TestSet.getString("SRC_TABLE"))
#set($REJ = $TestSet.getString("REJ_TABLE"))
#set($TGT = $TestSet.getString("TGT_TABLE"))
#set($TGT_TYPE = $TestSet.getString("TGT_TYPE"))
#set($ENTITAET = $TestSet.getString("ENTITAET"))
##
#if(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='STA') and ($ENTITAET =='FG'))
#set($SQL= "($RD.Count_STA_FG('$REQ_ID', $SOURCE, $REJ, $TGT, $TU)) UNION ")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='FCT')and ($ENTITAET =='FG'))
#set($SQL= "($RD.Count_FCT_FG('$REQ_ID', $SOURCE, $REJ, $TGT, $TU, $Source_GID)) UNION")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='STA') and ($ENTITAET =='LI'))
#set($SQL= "($RD.Count_STA_LI('$REQ_ID', $SOURCE, $REJ, $TGT, $TU)) UNION ")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='STA') and ($ENTITAET =='KO'))
#set($SQL= "($RD.Count_STA_KO('$REQ_ID', $SOURCE, $REJ, $TGT, $TU)) UNION ")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='STA') and ($ENTITAET =='SV'))
#set($SQL= "($RD.Count_STA_SV('$REQ_ID', $SOURCE, $REJ, $TGT, $TU)) UNION ")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='STA'))
#set($SQL= "($RD.Count_STA('$REQ_ID', $SOURCE, $REJ, $TGT, $TU)) UNION ")
#elseif(($REQ_ID !='RATINGS_RG') and ($TGT_TYPE =='FCT'))
#set($SQL= "($RD.Count_FCT('$REQ_ID', $SOURCE, $REJ, $TGT, $TU, $Source_GID)) UNION")
#elseif(($REQ_ID =='RATINGS_RG') and ($TGT_TYPE =='STA'))
#set($SQL= "($RD.Count_STA('$REQ_ID', $SOURCE, $REJ, $TGT, $TU))")
#elseif(($REQ_ID =='RATINGS_RG') and ($TGT_TYPE =='FCT'))
#set($SQL= "($RD.Count_FCT('$REQ_ID', $SOURCE, $REJ, $TGT, $TU, $Source_GID))")
#endif

#evaluate($SQL)
#next

vielen Dank im voraus und vielen Grüße
Xin
xuxin27
 
Posts: 10
Joined: 12 Jun 2017, 09:46

Re: Optimiserung von Länge if..set..elseif..set..else..Endif

Postby maerklw » 12 Jun 2017, 15:38

Hi Xin,

In velocity / textersetzung gibt es kein switch bzw. case when.
Das ist schade aber nicht zu ändern.

Was Du aber machen könntest wäre:
1. die Logik in ein kleines Regelwerk auslagern ($RuleLib.buildTechnicalRulesCalc(...), das wäre das beste
2. eine JavaScript-Funktion zu schreiben, die einen Text zurückliefert.

Javascript hat ein case when Sprachkonstrukt (s.u.), aber in Deinem Fall nützt Dir das nichts, da der if then else Teil bei Dir von 4 Parametern abhängt.
Daher würde ich Dir in diesem Fall zu einem kleinen Regelwerk raten.
Betrachte das Beispiel unten daher nur als Anregung für andere Einsatzarten, bei denen sehr viele if else if .. endif durch ein switch(){...} lesbarer umgesetzt werden können.


for ( $x in $myResultSet){
switch($myResultSet.getString("myField")){
case "A": // do something
case "B": // do something

default: // do something

}
}
maerklw
 
Posts: 15
Joined: 20 Feb 2014, 22:51


Return to RapidRep Designer



Who is online

Users browsing this forum: No registered users and 2 guests

cron