Leider ist es nicht möglich mit einem Einzeiler die Werte eine DataLabels in SmartForms/Views per JScript eigene Daten zuzuweisen – zumindest nicht so, dass dieser dann auch innerhalb der View-Regeln verarbeitet werden kann.
Es ist ein kleiner Scriptblock notwendig um die Daten so in das DataLabel zu schreiben, dass diese auch in den Rules der SmartForms ausgelesen und weiterverarbeitet werden können.
Warum das Ganze?
Sobald man eigenen JavaScript-Code in SmartForms ausführen möchte (die Gründe hierzu können vielfältig sein – z.B. Verwendung von JS-Drittkomponenten, Anpassungen des Designs, Aufrufen eigener Funktionen etc.) kommt man schnell an den Punkt, bei dem man mit den K2-Funktionalitäten (Regelen, Controls …) interagieren möchte. Hierzu ist der Austausch der Controldaten ggf. notwendig.
Beispiel – dem DataLabel einen Wert zuweisen:
var SetData = "Controllers/Controller/Controls/Control[@Name='DeinDataLabelName']"; var SetDataController = window.$sn(window.viewControllerDefinition,SetData); var SetDataID = "#" + SetDataController.getAttribute("ID"); var SetDataController_ID = SetDataController.getAttribute("ID"); var newVal = id; $(SetDataID).text(newVal); var currentControl1 = window.$sn(window.viewControllerDefinition,"Controllers/Controller/Controls/Control[@ID='" + SetDataController_ID + "'][Properties/Property/Name/text()='GetValue']"); var controlInfoObj1 = new window.PopulateObject(null,newVal,SetDataController_ID); window.executeControlFunction(currentControl1,"SetValue",controlInfoObj1);
Auf diese Weise könnte die Logik von K2 mit den Regeln etc. recht einfach mit eigener Logik kombiniert werden.
Die Gestaltung individueller Listen wäre ein Beispiel. Im folgenden Beispiel wurde eine Liste mit Werten aus einem Smartobjekt erzeugt, die nicht auf die Listenfunktionen von K2 basiert. Sie wurde mit CustomCode erzeugt.
Bei einem Klick auf eine Zeile (1) wird der Wert des DataLabels (2) mit der ID des angeklickten Datensatzes (1) neu gesetzt
Der Wert des DataLabels (2) wird bei Klick auf den Datensatz (1) mit der ID (hier 40) neu gesetzt.
Bei dem Button (1) handelt es sich um das normale K2-Control „Button“. Dieser reagiert auf das Klick-Event und führt eine normale K2-Regel aus. Innerhalb dieser Regel wird in diesem Beispiel lediglich der Wert des DataLabels in einer Message-Box (2) ausgegeben.
Dieses Beispiel zeigt, wie die Werte eines K2-Controls mit eigenen J-Scripts manipuliert werden können. Es wäre nun auch denkbar z.B. eine Smartobjekt-Methode aufzurufen, die den Datensatz mit der gewählten ID löscht usw