我是LightSwitch的新手,因此我不熟悉entities and methods的工具集。
我有一个使用名为BrattlecubesData
的dataSource的应用程序,它包含两个视图:TBG_V_TimeLog_Details
和TBG_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来实现我的目标,如果这是建议的路线,请向我提供一些关于如何做的澄清。
提前谢谢你,我希望我已经提供了足够的细节,但我很乐意提供更多。
答案 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);
});
});