如何在Lightswitch中加载外部数据源的相关实体(Visual Studio 2013)

时间:2014-01-20 09:31:02

标签: javascript visual-studio-2013 azure-sql-database visual-studio-lightswitch lightswitch-2013

我有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,但它也给出了同样的错误。

1 个答案:

答案 0 :(得分:0)

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

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

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