Có chức năng

Áp dụng cho: Ứng dụng Canvas Luồng máy tính để bàn Ứng dụng dựa trên mô hình Power Pages Power Platform CLI

Tính toán giá trị và thực hiện thao tác với một bản ghi, bao gồm cả bản ghi nội tuyến của các giá trị được đặt tên.

Mô tả

Hàm With đánh giá công thức cho một bản ghi. Công thức có thể tính toán một giá trị và/hoặc thực hiện các hành động, chẳng hạn như sửa đổi dữ liệu hoặc xử lý kết nối. Sử dụng hàm ForAll để đánh giá một công thức cho tất cả các bản ghi trong bảng chứa các bản ghi.

Các trường bản ghi hiện đang được xử lý đều có sẵn trong công thức. Sử dụng toán tử ThisRecord hoặc chỉ đơn giản là tham chiếu các trường theo tên như khi làm với bất kỳ giá trị nào khác. Bạn cũng có thể dùng toán tử As để đặt tên cho bản ghi đang được xử lý, điều này có thể giúp cho công thức của bạn dễ hiểu hơn và làm cho các bản ghi lồng nhau có thể truy cập được. Để biết thêm thông tin, hãy xem ví dụ bên dưới và xử lý phạm vi bản ghi.

Sử dụng hàm With để cải thiện khả năng đọc các công thức phức tạp bằng cách chia công thức thành các công thức con có tên nhỏ hơn. Các giá trị có tên này hoạt động giống như các biến cục bộ đơn giản giới hạn trong phạm vi của hàm With. Có thể sử dụng chính cú pháp bản ghi nội tuyến dùng với hàm UpdateContext cho hàm With. Hàm With được dùng nhiều hơn so với các biến bối cảnh hoặc các biến chung vì nó độc lập, dễ hiểu và có thể được sử dụng trong bất kỳ bối cảnh công thức khai báo nào.

Sử dụng With để truy cập các trường của bản ghi được trả về bởi các hàm như Patch hoặc Match. With giữ giá trị từ các hàm này đủ lâu để sử dụng trong các phép tính hoặc hành động tiếp theo.

Nếu đối số Record (Bản ghi) của hàm With là một lỗi, thì hàm này sẽ trả về lỗi đó và Formula (Công thức) sẽ không được đánh giá.

Cú pháp

Với( Bản ghi, Công thức )

  • Bản ghi – Bắt buộc. Bản ghi mà bạn thao tác trên đó. Đối với các giá trị tên, hãy sử dụng cú pháp nội tuyến { name1: value1, name2: value2, ... }
  • Công thức – Bắt buộc. Công thức để đánh giá Record (Bản ghi). Công thức có thể tham chiếu trực tiếp đến bất kỳ trường nào của Record (Bản ghi) như một phạm vi bản ghi.

Ví dụ

Các giá trị được đặt tên đơn giản

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

Ví dụ này sử dụng một bản ghi các giá trị có tên để tính thể tích hình trụ. With được sử dụng để nắm bắt tất cả các giá trị đầu vào cùng nhau, giúp dễ dàng tách chúng ra khỏi phép tính.

Được lồng với

Bộ tính toán lãi suất sử dụng hàm With.

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

Ví dụ này lồng các hàm With để tạo phép tính 2 lớp cho các khoản thanh toán thế chấp hàng tháng. Miễn là không có xung đột, tất cả các các giá trị có tên trong hàm With bên ngoài có sẵn trong hàm With bên trong.

Vì các các công cụ điều khiển là thanh trượt chỉ có thể dịch chuyển theo bước tăng 1, nên các thanh trượt được chia hoặc nhân để tạo ra bước tăng tùy chỉnh một cách hiệu quả. Trong trường hợp lãi suất, RateSlider (Thanh trượt lãi suất) có thuộc tính Max (Tối đa) được đặt thành 48, chia cho 8 để có được bước tăng điểm theo phần trăm là 1/8 và chia cho 100 để chuyển đổi từ tỷ lệ phần trăm sang số thập phân, bao gồm phạm vi từ 0,125% đến 6%. Trong trường hợp số tiền cho vay, AmountSlider (Thanh trượt số tiền) có thuộc tính Max (Tối đa) được đặt thành 60 và nhân với 10.000, bao gồm phạm vi từ 10.000 đến 600.000.

Hàm With được tự động tính toán lại khi thanh trượt di chuyển và số tiền thanh toán khoản vay mới hiển thị. Không có biến nào được sử dụng và không cần sử dụng thuộc tính OnChange của các công cụ điều khiển là thanh trượt.

Dưới đây là hướng dẫn chi tiết để tạo ứng dụng này:

  1. Tạo ứng dụng mới.
  2. Thêm một công cụ điều khiển Slider (Thanh trượt) và đặt tên là RateSlider (Thanh trượt lãi suất). Đặt thuộc tính Max (Tối đa) thành 48.
  3. Thêm một công cụ điều khiển là Label (Nhãn) ở bên trái của công cụ điều khiển là thanh trượt. Đặt thuộc tính Văn bản thành "Interest Rate:"
  4. Thêm một công cụ điều khiển là Label (Nhãn) ở bên phải của công cụ điều khiển là thanh trượt. Đặt thuộc tính Text thành công thức RateSlider/8 & " %".
  5. Thêm một công cụ điều khiển là Slider (Thanh trượt) khác và đặt tên là AmountSlider (Thanh trượt số tiền). Đặt thuộc tính Max (Tối đa) thành 60.
  6. Thêm một công cụ điều khiển là Label (Nhãn) ở bên trái của công cụ điều khiển là thanh trượt này. Đặt thuộc tính Văn bản thành "Loan Amount:" (Số tiền vay).
  7. Thêm một công cụ điều khiển là Label (Nhãn) ở bên phải của công cụ điều khiển là thanh trượt này. Đặt thuộc tính Văn bản theo công thức AmountSlider/8 * 10000.
  8. Thêm một công cụ điều khiển là Slider (Thanh trượt) khác và đặt tên là YearsSlider (Thanh trượt năm). Đặt thuộc tính Max (Tối đa) thành 40.
  9. Thêm một công cụ điều khiển là Label (Nhãn) ở bên trái của công cụ điều khiển là thanh trượt này. Đặt thuộc tính Văn bản thành "Number of Years:" (Số năm:).
  10. Thêm một công cụ điều khiển là Label (Nhãn) ở bên phải của công cụ điều khiển là thanh trượt này. Đặt thuộc tính Văn bản theo công thức YearsSlider.
  11. Thêm một công cụ điều khiển là Label và đặt thuộc tính Văn bản theo công thức trên:
  12. Thêm một công cụ điều khiển là Label (Nhãn) ở bên trái của công cụ điều khiển là nhãn mới nhất. Đặt thuộc tính Văn bản thành "Recurring Monthly Payment:"

Khóa chính được hàm Patch trả về

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

Ví dụ này thêm một bản ghi vào bảng Order (Đơn hàng) trong SQL Server. Sau đó, bản ghi sử dụng khóa chính được hàm Patch trả về trong trường OrderID (ID đơn hàng) để tạo bản ghi liên quan trong bảng OrderDetails (Chi tiết đơn hàng).

Trích xuất các giá trị bằng biểu thức chính quy

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Ví dụ này trích xuất giờ, phút và giây từ giá trị khoảng thời gian theo tiêu chuẩn ISO 8601 và sau đó sử dụng các kết quả phụ phù hợp này để tạo giá trị Ngày/Giờ.

Lưu ý rằng mặc dù các kết quả phụ phù hợp có chứa số nhưng chúng vẫn nằm trong một chuỗi văn bản. Sử dụng hàm Value để chuyển đổi thành một số trước khi thực hiện các phép tính toán học.

Ánh xạ một bản ghi trong một thành phần

Xem Ánh xạ bản ghi.