2016-04-18 17 views
0

HTML-Client Lightswitch:Aktualisieren Anwendungsdaten Datensatz aus dem HTML-Client

In einem ViewDetials Bildschirm ich habe eine Schaltfläche, wo Ich mag würde meine Anwendungsdaten aktualisieren. Die Bildschirme Dataworkspace enthält jedoch nicht die Tabelle, die ich aktualisieren möchte. Meine aktuelle Schaltfläche Ausführen von Code wie folgt aussieht:

var filter = "SerialNumber eq " + screen.Hardware.SerialNumber; // Filter to find the Hardware Serial number in the active details window. 
myapp.activeDataWorkspace.ApplicationData.Scans.filter(filter).execute().then(function (result) { 
    var scan = result.results[0]; 
    scan.NoSticker = false; // Set the property to false 
    myapp.activeDataWorkspace.ApplicationData.saveChanges(); 
});  

Was ich versuche Update die NoSticker Eigenschaft auf einen Datensatz in der Tabelle Scans zu tun, ist, dass die Seriennummer auf meine Daten Bildschirm passt. Wenn ich verstehe, was ich richtig gelesen habe, weil der Datensatz nicht in den Bildschirmen Dataworkspace ist, muss ich die Scans-Tabelle in meinem ApplicationData abfragen. Ich kann mich nicht erinnern, jemals eine Abfrage oder eine Abfrage mit einem Filter in JS gemacht zu haben, also bin ich mir nicht sicher, ob ich das überhaupt richtig mache. Wenn ich auf die Schaltfläche klicke, passiert nichts. Jede Anleitung würde sehr geschätzt werden.

Antwort

1

Auf den ersten Blick und unter der Annahme Ihrer Serialalphanumerische ist, das einzige Problem mit Ihrem Ansatz erscheint das Styling Ihrer Filterausdruck zu sein, die wie folgt sein sollte:

var filter = "SerialNumber eq " + msls._toODataString(screen.Hardware.SerialNumber, ":String"); 

Dies nutzt die Standard-Lightbibliotheksfunktion um den Wert der Seriennummer im Filterausdruck korrekt zu markieren. In diesem Fall wickelt es grundsätzlich den Wert in Hochkommata wie folgt:

"SerialNumber eq 'ABC123'" 

Die _toODataString Funktion unterstützt auch die folgenden zusätzliche Optionen für die zweiten datatype Parameter (für die verschiedenen Lightdatentypen):

":Binary", ":Binary?" 
":Date", ":DateTime", ":Date?", ":DateTime?" 
":DateTimeOffset", ":DateTimeOffset?" 
":Decimal", ":Decimal?" 
":Guid", ":Guid?" 
":Int64", ":Int64?" 
":Single", ":Single?" 
":String", ":String?" 
":TimeSpan", ":TimeSpan?" 
":Byte", ":Byte?", ":Boolean", ":Boolean?", ":Double", ":Double?", ":Int16", ":Int16?", ":Int32", ":Int32?", ":SByte", ":SByte?" 

Jede der oben genannten Gruppen verwendet den gleichen Markup-Ansatz, z ": Dezimal" und ": Dezimal?" Beide sind mit einem M-Datentypbezeichner versehen. Diese Markup-Optionen sind eine Funktion von LightSwitch oData v3 protocol's filter operation.

Als Alternative konnte man immer eine Abfrage für Ihre Scans Tabelle hinzufügen, die die Seriennummer als Parameter akzeptiert und dann rufen Sie wie folgt vor:

myapp.activeDataWorkspace.ApplicationData.ScanBySerialNumberQuery(screen.Hardware.SerialNumber).execute().then(function onComplete(result) { 
    if (result && result.results && result.results.length !== 0) { 
     var scan = result.results[0]; 
     if (scan) { 
      scan.NoSticker = false; // Set the property to false 
      myapp.activeDataWorkspace.ApplicationData.saveChanges(); 
     } 
    } 
}); 

Wenn Sie immer noch Probleme auftreten, nachdem die oben versuchen, Der andere Aspekt, den Sie überprüfen können, ist, dass Ihre Eigenschaft screen.Hardware.SerialNumber an dem Punkt verfügbar ist, an dem Sie die Suche ausführen. Wenn nicht, müssen Sie möglicherweise Folgendes tun:

screen.getHardware().then(function onComplete(hw) { 
    if (hw) { 
     myapp.activeDataWorkspace.ApplicationData.ScanBySerialNumber(hw.SerialNumber).execute().then(function onComplete(result) { 
      if (result && result.results && result.results.length !== 0) { 
       var scan = result.results[0]; 
       if (scan) { 
        scan.NoSticker = false; // Set the property to false 
        myapp.activeDataWorkspace.ApplicationData.saveChanges(); 
       } 
      } 
     }); 
    } 
}); 
+0

Dies hat den Trick. Ich hatte keine Ahnung, dass du das vom Klienten machen könntest. Ich werde es trotzig in Zukunft wieder verwenden. Danke! – HiTech

Verwandte Themen