2016-04-18 3 views
0

HTMLクライアントLightSwitchのからapplicationDataにレコードを更新する:ViewDetialsでHTMLクライアント

は私が私の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(); 
});  

更新は私の詳細画面上のSerialNumberに一致するスキャンテーブルのレコードにNoStickerプロパティです。レコードが画面Dataworkspaceにないので、私が正しく読んできたことを理解していれば、私は自分のApplicationDataでスキャンテーブルをクエリする必要があります。私はこれまで、JSでフィルタを使用してクエリやクエリを実行する必要があったことを思い出すことができません。ボタンをクリックすると何も起こりません。どんな指針も大変ありがとうございます。一見

答えて

1

、そしてあなたの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(); 
       } 
      } 
     }); 
    } 
}); 
+0

これはトリックでした。私はあなたがクライアントからこれを行うことができるという手がかりを持っていませんでした。私はこれを将来も挑戦的に使うだろう。ありがとうございました! – HiTech

関連する問題