2016-04-18 125 views
0

HTML客戶端的LightSwitch的ApplicationData記錄:更新從HTML客戶端

在ViewDetials屏幕,我有一個按鈕,在這裏我想更新我的ApplicationData。但是,屏幕Dataworkspace不包含我想要更新的表格。我現在的按鈕執行的代碼如下所示:

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(); 
});  

我想要做的就是更新NoSticker財產在我的詳細信息屏幕上的serialNumber匹配的掃描表中的記錄。如果我明白我一直在正確地閱讀,因爲記錄不在Dataworkspace的屏幕上,所以我必須在我的ApplicationData中查詢Scans表。我不記得曾經在JS中使用過濾器做查詢或查詢,所以我不知道如果我甚至正確地做到這一點。當我點擊按鈕時,沒有任何反應。任何指導將不勝感激。

回答

1

乍一看,假設你的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(); 
       } 
      } 
     }); 
    } 
}); 
+0

這樣做的竅門。我不知道你可以從客戶端做到這一點。我會在未來再次使用它。謝謝! – HiTech