从LightSwitch HTML应用程序

时间:2016-01-08 16:15:50

标签: javascript c# sql-server stored-procedures visual-studio-lightswitch

我是LightSwitch的新手,因此我不熟悉entities and methods的工具集。

我有一个使用名为BrattlecubesData的dataSource的应用程序,它包含两个视图:TBG_V_TimeLog_DetailsTBG_V_TimeLog_Projects。这两个数据集由ProjectID连接,用于显示两个不同的浏览屏幕。

  

我的问题是,我想在ViewDetails屏幕上实现一个按钮,该按钮从维度表(我的应用程序中未包含的维度表)中删除当前选定的记录。我想通过StoredProcedure实现这一目标。

我发现an MSDN article详细说明了如何执行此操作,但他们专注于C#和VB,而不是我在HTML应用程序中使用的Javascript。

THIS LINK提供了MSDN C#代码到Javascript的翻译,但是我在我的数据集声明方面遇到了反复出现的错误(错误0x800a138f - JavaScript runtime error: Unable to get property 'ApplicationData' of undefined or null reference

然后,我决定尝试使用备用技术创建一个用于执行我的过程的表,如上面的MSDN文章和also here中所述。然而,这种技术最终还需要一个按钮,这使我进入Javascript,我试图使用翻译的代码导致相同的错误。

按照Eric Erhardt链接的MSDN博客的说明,我有无错误的C#代码来调用我的程序,但我再次卡在Button上,将LineItemID传递给我的表,然后删除程序。我的按钮的Edit Execute Code代码位于

之下
myapp.ViewRecordDetails.DeleteRecord_execute = function (screen) {

    var dws = screen.TBG_V_TimeLog_Detail.dataWorkspace;
    var comment = screen.TBG_V_TimeLog_Detail.selectedItem;

    var operation =
        dws.ApplicationData.DeleteProjectComment_Operations.addNew();
    operation.LineItemID = comment.LineItemID;

    dws.ApplicationData.saveChanges();
};
  

运行时,这给了我同样的0x800a138f错误,并且在“ApplicationData'”中徘徊。我的解决方案确实有一个名为ApplicationData的dataSource,它有一个名为DeleteProjectComment_Operations的手动创建的表。   同样,此按钮位于ViewDetails屏幕上。 ViewDetails有一个链接到EditDetails屏幕的按钮,编辑按我的意愿工作。

     

如果我最好将删除移动到我的EditDetails屏幕,我很乐意这样做。或者,如果解决方案是将维度表添加到我的解决方案中,请提供有关如何重构我的功能或屏幕的指导

我无法解决我需要访问哪个实体或如何编辑代码以便将LineItemID传递给我的程序。

我还建议我可以使用AJAX来实现我的目标,如果这是建议的路线,请向我提供一些关于如何做的澄清。

提前谢谢你,我希望我已经提供了足够的细节,但我很乐意提供更多。

1 个答案:

答案 0 :(得分:1)

应该可以使用以下执行代码成功实现Eric Erhardt approach

myapp.ViewRecordDetails.DeleteRecord_execute = function (screen) {

    var dws = myapp.activeDataWorkspace;
    var comment = screen.TBG_V_TimeLog_Detail;

    var operation = dws.ApplicationData.DeleteProjectComment_Operations.addNew();
    operation.LineItemID = comment.LineItemID;

    dws.ApplicationData.saveChanges();
};

与您的代码的唯一区别是对dws分配的更改:

var dws = screen.TBG_V_TimeLog_Detail.dataWorkspace;

到:

var dws = myapp.activeDataWorkspace;

如果您在修改后仍遇到问题,我会扩展saveChanges调用以报告任何错误,如下所示:

dws.ApplicationData.saveChanges().then(null, function (errors) {
    errors.forEach(function (error) { 
        alert(error.message); 
    });
});