Kongsi melalui


Dengan fungsi

Digunakan untuk: Aplikasi kanvas Desktop mengalir aplikasi Power Platform berpandukan model CLI

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

Penerangan

Fungsi With menilai formula untuk rekod tunggal. 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 lebih kecil yang dinamakan sub-formula . Nilai yang dinamakan ini bertindak sebagai pemboleh ubah setempat yang mudah terhad kepada skop Dengan. Sintaks rekod sebaris yang sama yang digunakan dengan fungsi UpdateContext boleh digunakan dengan Dengan. Menggunakan Dengan lebih diutamakan berbanding pemboleh ubah konteks atau global kerana ia terkandung sendiri, mudah difahami, dan boleh digunakan dalam mana-mana pengisytiharan konteks formula.

Gunakan Dengan untuk mencapai medan rekod yang dikembalikan oleh fungsi seperti Tampalan atau Padanan. Dengan memegang nilai daripada fungsi ini cukup lama untuk digunakan dalam pengiraan atau tindakan selanjutnya.

Jika argumenRekod ke With adalah ralat, ralat itu akan dikembalikan oleh fungsi dan Formula tidak akan dinilai.…

Sintaks

Dengan( 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. Dengan digunakan untuk mengambil semua nilai input bersama, menjadikannya mudah untuk memisahkannya daripada pengiraan itu sendiri.

Dengan bersarang

Kalkulator faedah menggunakan fungsi Dengan.

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 fungsi With bersarang ini bagi mencipta pengiraan dua peringkat untuk pembayaran gadai janji bulanan. Selagi tiada konflik, semua nilai yang dinamakan Dengan luaran tersedia dalam dalaman Dengan.

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.

Dengan 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. Setkan 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.