我有2个表都在Azure SQL数据库中,该数据库连接到我的Lightswitch Sharepoint应用程序。我正在对代码中的数据进行一些操作,它似乎正在工作,除了当我从一个表加载实体时,我无法在另一个表中看到相关实体。
基本上,我有一个产品表和一个发票行表。每个发票行记录包含产品代码,该代码与产品表PK相关。我在Lightswitch中定义了关系,但是当我加载发票行记录时,我看不到产品信息。
我的代码如下:
// Select invoice and get products
myapp.AddEditServiceRecord.InvoicesByCustomer_ItemTap_execute = function (screen) {
screen.ServiceRecord.InvoiceNumber = screen.InvoicesByCustomer.selectedItem.INVO_NO;
// Delete existing lines (if any)
screen.ServiceDetails.data.forEach(function (line) {
line.deleteEntity();
});
// Add products for selected invoice
screen.getInvoiceLinesByNumber().then(function (invLines) {
invLines.data.forEach(function (invLine) {
invLine.getProduct().then(function (invProduct) {
var newLine = new myapp.ServiceDetail();
newLine.ServiceRecord = screen.ServiceRecord;
newLine.ProductCode = invLine.ProductCode;
newLine.ProductDescription = invProduct.Description;
newLine.CasesOrdered = invLine.Cases;
});
});
});
};
我们的想法是,屏幕上显示发票清单'InvoicesByCustomer',用户点击一个发票,将该发票的详细信息添加到'ServiceRecord'表中。如果我注释掉newLine.ProductDescription = invProduct.Description
行,则可以完美地添加正确的产品代码和案例值。我还尝试了以下代码的一些其他组合,但在每种情况下,相关产品实体在Javascript调试器中显示为undefined
。
编辑:我还阅读了有关包含相关数据(http://blogs.msdn.com/b/bethmassi/archive/2012/05/29/lightswitch-tips-amp-tricks-on-query-performance.aspx)的文章,并注意到了“静态跨度”部分。我检查过,这被设置为'自动(排除)'所以我将其更改为'包含',但不幸的是,这没有任何区别。我仍然收到invProduct is undefined
消息。我也尝试了invLine.Product.Description
,但它也给出了同样的错误。
答案 0 :(得分:0)
这种情况下的解决方案很简单。我的数据错了,因此Lightswitch正确地完成了它的工作!
在我的Invoices
表格中,产品代码类似于'A123'
,而在我的Products
表格中,产品代码为'A123 '
(在右侧填充空格) 。在对数据进行SQL查询时,它能够匹配记录,但Lightswitch(正确地)将2个字段视为不同,因此无法将它们关联起来。
我可能已经浪费了几个小时了,但是当学到一些东西时它并没有浪费......或者我会告诉自己!