Kongsi melalui


With Fungsi

Terpakai kepada: Apl kanvas Aliran Desktop Copilot Studio Apl dipacu model Power Platform CLI Fungsi Dataverse Halaman Kuasa

Mengira nilai dan melakukan tindakan untuk rekod lajur, termasuk rekod sebaris untuk nilai yang dinamakan.

Penerangan

Fungsi ini With menilai formula untuk satu rekod. Formula boleh mengira nilai dan/atau melaksanakan tindakan seperti mengubah suai data atau bekerja dengan sambungan. Gunakan Fungsi ForAll untuk menilai formula bagi semua rekod dalam jadual rekod.

Medan rekod yang sedang diproses tersedia dalam formula. Gunakan operator ThisRecord atau rujuk sahaja medan mengikut nama seperti yang akan anda lakukan bagi mana-mana nilai yang lain. Operator As juga boleh digunakan untuk menamakan rekod yang diproses, yang dapat membantu menjadikan formula anda lebih mudah untuk difahami dan supaya rekod bersarang dapat diakses. Untuk mendapatkan maklumat lanjut, lihat contoh di bawah dan menggunakan skop rekod.

Gunakan With untuk meningkatkan kebolehbacaan formula kompleks dengan membahagikannya kepada sub-formula bernama yang lebih kecil. Nilai yang dinamakan ini bertindak seperti pembolehubah tempatan mudah yang terhad kepada skop .With Sintaks rekod sebaris yang sama yang digunakan dengan fungsi UpdateContext boleh digunakan dengan With. Penggunaan With lebih disukai berbanding konteks atau pembolehubah global kerana ia serba lengkap, mudah difahami dan boleh digunakan dalam mana-mana konteks formula deklaratif.

Gunakan With untuk mengakses medan rekod yang dikembalikan oleh fungsi seperti Patch atau Match. With memegang nilai daripada fungsi ini cukup lama untuk digunakan dalam pengiraan atau tindakan selanjutnya.

Jika hujah Rekod kepada With ialah ralat, ralat itu akan dikembalikan oleh fungsi dan Formula tidak akan dinilai.

Sintaks

With( Rekod, Formula )

  • Rekod - Diperlukan. Rekod untuk diambil tindakan. Untuk nilai nama, gunakan sintaks sebaris { name1: value1, name2: value2, ... }
  • Formula - Diperlukan. Formula untuk dinilai bagi Rekod. Formula boleh merujuk sebarang medan Rekod secara terus sebagai skop rekod.

Contoh

Nilai yang dinamakan dengan mudah

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

Contoh ini menggunakan rekod nilai yang dinamakan untuk mengira volum silinder. With sedang digunakan untuk menangkap semua nilai input bersama-sama, menjadikannya mudah untuk memisahkannya daripada pengiraan itu sendiri.

Bersarang With

Kalkulator faedah menggunakan With fungsi.

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
      )
)

Contoh ini berfungsi With untuk membuat pengiraan dua peringkat untuk pembayaran gadai janji bulanan. Selagi tiada konflik, semua nilai dinamakan luar With tersedia dalam dalaman With.

Oleh kerana kawalan gelangsar hanya boleh dialihkan dalam tambahan 1, gelangsar dibahagi atau didarab untuk mencipta tambahan tersuai yang berkesan. Dalam kes kadar faedah, RateSlider mempunyai sifat Maks ditetapkan ke 48, dibahagi dengan 8 untuk 1/8 tambahan titik peratusan dan dibahagikan dengan 100 untuk menukar daripada peratusan ke perpuluhan, merangkumi julat 0.125% ke 6%. Dalam kes amaun pinjaman, AmountSlider mempunyai sifat Maks ditetapkan ke 60 dan didarabkan dengan 10,000, merangkumi julat 10,000 ke 600,000.

Ini With dikira semula secara automatik apabila gelangsar bergerak dan pembayaran pinjaman baharu dipaparkan. Tiada pemboleh ubah digunakan dan tiada keperluan untuk menggunakan sifat OnChange bagi kawalan gelangsar.

Berikut adalah arahan terperinci untuk mencipta aplikasi ini:

  1. Cipta aplikasi baharu
  2. Tambah Kawalan Gelangsar dan namakannya RateSlider. Tetapkan sifat Maks ke 48.
  3. Tambah Kawalan Label ke bahagian kiri kawalan gelangsar. Tetapkan sifat Teks ke "Kadar Faedah:".
  4. Tambah kawalan Label ke bahagian kanan kawalan gelangsar. Tetapkan sifat Teksnya kepada formula RateSlider/8 & " %".
  5. Tambah kawalan Gelangsar yang lain dan namakannya AmountSlider. Tetapkan sifat Maks ke 60.
  6. Tambah kawalan Label ke bahagian kiri kawalan gelangsar. Tetapkan sifat Teks ke "Amaun Pinjaman:".
  7. Tambah kawalan Label ke bahagian kanan kawalan gelangsar. Tetapkan sifat Teks ke formula AmountSlider/8 * 10000.
  8. Tambah kawalan Gelangsar yang lain dan namakannya YearsSlider. Tetapkan sifat Maks ke 40.
  9. Tambah kawalan Label ke bahagian kiri kawalan gelangsar. Tetapkan sifat Teks ke "Bilangan Tahun:".
  10. Tambah kawalan Label ke bahagian kanan kawalan gelangsar. Tetapkan sifat Teks ke formula YearsSlider.
  11. Tambah kawalan Label dan tetapkan sifat Teks ke formula yang ditunjukkan di atas.
  12. Tambah kawalan Label ke bahagian kiri kawalan label terakhir. Tetapkan sifat Teks ke "Recurring Monthly Payment:".

Kunci utama dikembalikan daripada Tampalan

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
              )
      )
)

Contoh ini menambah rekod kepada jadual Pesanan dalam SQL Server. Ianya kemudian menggunakan kunci utama yang dikembalikan untuk pesanan, dikembalikan oleh fungsi Patch dalam medan OrderID, untuk mencipta rekod berkaitan dalam jadual OrderDetails.

Nilai yang diekstrak dengan ungkapan biasa

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)

Contoh ini mengekstrak jam, minit, dan saat daripada nilai tempoh ISO 8601 dan kemudian menggunakan sub sepadan untuk mencipta nilai Tarikh/Masa.

Perlu diingatkan bahawa walaupun sub sepadan mengandungi nombor ianya masih dalam rentetan teks. Gunakan fungsi Value untuk menukarkan nombor sebelum melakukan operasi matematik.

Petakan rekod dalam komponen

Lihat Rekod peta.