乍一看,假設你的SerialNumber是字母數字,你的方法唯一的問題似乎是你的過濾器表達式的造型應該是如下:
var filter = "SerialNumber eq " + msls._toODataString(screen.Hardware.SerialNumber, ":String");
它使用標準的LightSwitch庫函數在過濾器表達式中正確標記您的序列號值。在這種情況下,它基本上包裝在單引號的值如下:
"SerialNumber eq 'ABC123'"
的_toODataString功能還支持以下用於第二的dataType參數附加選項(涵蓋各種LightSwitch的數據類型):
":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?"
上面的每個組使用相同的標記方法,例如「:小數」和「:小數?」都帶有M數據類型標識符後綴。這些標記選項是LightSwitch使用的oData v3 protocol's filter operation的一項功能。
作爲替代方案,你可以隨時添加針對您的掃描表的查詢它接受的serialNumber作爲參數,然後調用它,如下所示:
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();
}
}
});
如果您仍然遇到在嘗試上述問題後,方法,你可以檢查的另一方面是你的screen.Hardware.SerialNumber屬性在你執行搜索時可用。如果沒有,您可能需要執行以下操作:
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();
}
}
});
}
});
這樣做的竅門。我不知道你可以從客戶端做到這一點。我會在未來再次使用它。謝謝! – HiTech