Chia sẻ qua


With chức năng

Áp dụng cho: Ứng dụng Canvas Copilot Studio Desktop dòng ứng dụng dựa trên mô hình Power Platform CLI Chức năng đảo dữ liệu Power Pages

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 này đánh giá công thức cho một bản ghi duy nhất. With 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.

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

Dùng With để truy nhập các trường của bản ghi được các hàm trả về, chẳng hạn như Patch hoặc Match. With giữ giá trị từ các hàm này đủ dài để dùng trong các phép tính hoặc hành động tiếp theo.

Nếu đối số Record là With lỗi, hàm sẽ trả về lỗi đó và Công thức sẽ không được đánh giá.

Cú pháp

With( 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 đang được sử dụng để thu thập tất cả các giá trị đầu vào với nhau, giúp dễ dàng tách chúng khỏi chính phép tính.

Lồng nhau With

Máy tính lãi suất bằng cách sử With dụng hàm.

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 With hàm để tạo phép tính hai cấ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 giá trị có tên bên With ngoài đều sẵn dùng bên trong With.

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.

Thanh With toán tự động được tính toán lại khi thanh trượt di chuyển và thanh toán khoản vay mới được 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.