代码之家  ›  专栏  ›  技术社区  ›  Charlie

如何引用ThisRecord。LookUp函数内部的值?

  •  1
  • Charlie  · 技术社区  · 1 年前

    我在OnScan事件中在BarcodeReader中创建了此代码。我试图首先检查扫描的条形码是否存在于名为barcode_inventory的Microsoft列表中,如果存在,它将被添加到名为signed_out的列表中。

    我的问题是ThisRecord。由于某种原因,值在LookUp函数中不起作用,有没有办法在LookUp功能中引用它?

    ForAll(
        Self.Barcodes,
        If(
            !IsBlank(
                LookUp(barcode_inventory,Barcode = Value(ThisRecord.Value), Barcode)
            ),
            Collect(
                signed_out,
                {
                    Barcode: Value(ThisRecord.Value),
                    Product: Text(LookUp(barcode_inventory,Barcode = Value(ThisRecord.Barcode)).ProductNameSize)
                }
            ),
            Notify("Could not find record.", NotificationType.Error)
        )
    )
    
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   carlosfigueira    1 年前

    ForAll函数创建 范围 它具有您试图引用的ThisRecord对象。但是LookUp函数也会创建自己的作用域,ThisRecord总是指最近的作用域。

    如果要引用在ForAll函数中创建的作用域,可以使用As关键字为其命名,并使用该名称进行引用:

    ForAll(
        Self.Barcodes As TheBarcode,
        If(
            !IsBlank(
                LookUp(barcode_inventory,Barcode = Value(TheBarcode.Value), Barcode)
            ),
            Collect(
                signed_out,
                {
                    Barcode: Value(TheBarcode.Value),
                    Product: Text(LookUp(barcode_inventory,Barcode = Value(TheBarcode.Barcode)).ProductNameSize)
                }
            ),
            Notify("Could not find record.", NotificationType.Error)
        )
    )
    

    顺便说一句,您可以通过使用with函数缓存LookUp值来提高效率,这样就不必执行两次:

    ForAll(
        Self.Barcodes As TheBarcode,
        With(
            { productFromInventory: LookUp(barcode_inventory,Barcode = Value(TheBarcode.Value) },
            If(
                !IsBlank(productFromInventory.Barcode),
                Collect(
                    signed_out,
                    {
                        Barcode: Value(TheBarcode.Value),
                        Product: Text(productFromInventory.ProductNameSize)
                    }
            ),
            Notify("Could not find record.", NotificationType.Error)
        )
    )