、そしてあなたのSerialNumberが英数字であると仮定すると、あなたのアプローチで唯一の問題は、次のようにする必要がありますあなたのフィルタ式のスタイリングのように見える:
var filter = "SerialNumber eq " + msls._toODataString(screen.Hardware.SerialNumber, ":String");
これは、標準LightSwitchのライブラリ関数を使用していますフィルター式でシリアル番号の値を正しくマークアップします。次のようにこの場合、基本的に一重引用符で値をラップ:
"SerialNumber eq 'ABC123'"
_toODataString関数は、第2のデータ型のパラメータについては、次の追加オプション(各種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?"
上記の各グループは、同じマークアップアプローチを使用します。 ":Decimal"と ":Decimal?" 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