0

我有 2 个表,它们都在连接到我的 Lightswitch Sharepoint 应用程序的 Azure SQL 数据库中。我正在对代码中的数据进行一些操作,它似乎正在工作,除了当我从一个表加载实体时,我无法在另一个表中看到相关实体。

基本上,我有一个产品表和一个发票行表。每个发票行记录都包含一个产品代码,该代码与产品表 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行,它可以完美地添加正确的产品代码和案例值。我还尝试了以下代码的其他一些组合,但在每种情况下,相关产品实体都显示为undefinedJavascript 调试器中。

编辑:我还阅读了这篇关于包含相关数据的文章(http://blogs.msdn.com/b/bethmassi/archive/2012/05/29/lightswitch-tips-amp-tricks-on-query-performance.aspx)并注意到“静态跨度”部分。我检查并设置为“自动(排除)”,所以我将其更改为“包含”,但不幸的是这没有任何区别。我仍然收到invProduct is undefined消息。我也简单地尝试过invLine.Product.Description,但它给出了同样的错误。

4

1 回答 1

0

在这种情况下,解决方案很简单。我的数据是错误的,因此 Lightswitch 正确地完成了它的工作!

在我的Invoices表格中,产品代码类似于'A123',而在我的Products表格中,产品代码是'A123 '(在右侧填充空格)。在对数据进行 SQL 查询时,它能够匹配记录,但 Lightswitch(正确地)认为这 2 个字段不同,因此无法关联它们。

我可能在这方面浪费了几个小时,但是当学到一些东西时它并没有浪费……或者我会告诉自己!

于 2014-01-26T19:39:45.223 回答