Urlaub -> Scala (9)
Scala Lotus Notes
Aus meinem Beitrag von gestern Urlaub - S c a l a (8)
Habe mir was überlegt für Anregungen bin ich natürlich dankbar
Kategorie Aus meinem Beitrag von gestern Urlaub - S c a l a (8)
Für xd.getItemValue("userbooked").elementAt(0).toString() überlege ich mir noch was!
Habe mir was überlegt für Anregungen bin ich natürlich dankbar
Als erstes habe ich mir ein Klasse DocumentValueHelper definiert ->
class DocumentValueHelper( val document : Document ) {
import java.util.Vector
def apply( xfield : String ) = {
val v = document.getItemValue(xfield)
v.elementAt(0)
}
}
Diese Klasse bekommt in Construtor ein Notes-Document übergeben und definiert die Methode apply. Wenn in Scala eine Klasse die Methode apply definiert hat, dann kann diese als o.apply(x) oder als o(x) aufgerufen werden. Also so was ähnliches wie ein Indexer in C#. Hierdurch erreiche ich, dass ich die Feldwerte über o("Feldname") auslesen kann.
Damit ich am Code nicht zuviel ändern muß, definiere ich weiterhin ein object DocumentValueHelper ->
object DocumentValueHelper {
import java.util.Date
implicit def Document2DocumentValueHelper( document : Document ) : DocumentValueHelper = new DocumentValueHelper(document)
}
Hier definiere ich als erstes die implicit Methode Docuoment2DocumentValueHelper, durch die implicit Definition wird diese Methode überall dort aufgerufen, wo ein Document als Parameter übergeben wird und ein DocumentValueHelper erwartet wird.
Das object TimeTracking schreibe ich dann wie folgt um, das wars und es läuft ?
object TimeTracking {
import DocumentValueHelper._
def createTimeTracking( xd : DocumentValueHelper ) : TimeTracking = {
TimeTracking(xd("userbooked"),xd("trackingdate"),xd("hours"))
}
}
Keineswegs denn v.ElementAt(0) ist vom Typ Any und kann somit keinem String zugewiesen werden
Also in das object DocumentValueHelper noch ein paar implicit Definition für die Umwandlung rein und gut
implicit def Any2String( x : Any ) : String = x.toString()
implicit def Any2Double( x : Any ) : Double =
x match {
case d : Double => d
case s : String => java.lang.Double.parseDouble(s)
case _ => java.lang.Double.parseDouble(x.toString())
}
implicit def Any2Date( x : Any ) : Date =
x match {
case d : Date => d
case _ => java.text.DateFormat.getDateInstance.parse(x.toString())
}
Gruß JJR
P.S.: Nicht vergessen das ist nur experimenteller Code