Bagikan melalui


Dengan fungsi

Berlaku untuk: Aplikasi kanvas Alur desktop Aplikasi berdasarkan Power Pages Power Platform model CLI

Menghitung nilai dan melakukan tindakan untuk satu rekaman, termasuk rekaman sebaris dari nilai bernama.

KETERANGAN

fungsi With mengevaluasi rumus untuk rekaman tunggal. Rumus dapat menghitung nilai dan/atau melakukan tindakan, seperti memodifikasi data atau bekerja dengan sambungan. Gunakan fungsi ForAll untuk mengevaluasi rumus untuk semua rekaman dalam tabel rekaman.

Bidang rekaman yang sedang diproses tersedia dalam formula. Menggunakan operator ThisRecord atau hanya bidang referensi berdasarkan nama seperti nilai lainnya. Operator As juga dapat digunakan untuk menamai rekaman yang sedang diproses yang dapat membantu membuat formula lebih mudah dipahami dan membuat rekaman bersarang dapat diakses. Untuk informasi selengkapnya, lihat contoh di bawah ini dan menggunakan cakupan rekaman.

Gunakan With untuk meningkatkan kemudahan membaca dari rumus kompleks dengan membaginya menjadi sub-rumus bernama yang lebih kecil. Nilai bernama ini bertindak seperti variabel lokal sederhana terbatas pada cakupan With. Sintaksis rekaman sebaris yang digunakan dengan fungsi UpdateContext dapat digunakan dengan With. Menggunakan With lebih diutamakan daripada konteks atau variabel global karena isinya sendiri, mudah dimengerti, dan dapat digunakan dalam konteks rumus deklaratif apa pun.

Gunakan Dengan untuk mengakses bidang rekaman yang dikembalikan oleh fungsi seperti Patch atau Match. Dengan menyimpan nilai dari fungsi-fungsi ini cukup lama untuk digunakan dalam perhitungan atau tindakan lebih lanjut.

Jika argumen Rekaman ke With adalah kesalahan, kesalahan tersebut akan dihasilkan oleh fungsi dan Rumus tidak akan dievaluasi.

Sintaks

Dengan (Rekam, Rumus )

  • Catatan – Wajib. Rekaman harus ditindaklanjuti. Untuk nilai nama, gunakan sintaks sebaris { name1: value1, name2: value2, ... }
  • Rumus – Wajib. Rumus akan dievaluasi untuk Record. Rumus dapat merujuk salah satu bidang Rekaman secara langsung sebagai cakupan rekaman.

Contoh

Nilai bernama sederhana

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

Contoh ini menggunakan rekaman nilai bernama untuk menghitung volume silinder. Dengan digunakan untuk menangkap semua nilai input bersama-sama, sehingga mudah untuk memisahkannya dari perhitungan itu sendiri.

With yang Disarangkan

Kalkulator bunga menggunakan fungsi 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
      )
)

Contoh ini menyarangkan With untuk membuat penghitungan dua tingkat untuk pembayaran hipotek bulanan. Selama tidak ada konflik, semua dari nilai bernama With luar tersedia dalam With dalam.

Karena kontrol panel geser hanya dapat berpindah dalam kenaikan 1, panel geser dibagi atau dikali untuk membuat peningkatan kustom secara efektif. Dalam kasus tingkat bunga, RateSlider memiliki properti Maksimum diatur ke 48, dibagi 8 untuk kenaikan poin persentase 1/8 dan dibagi dengan 100 untuk mengonversi dari persentase ke desimal, mencakup kisaran 0,125% sampai 6%. Dalam kasus dari jumlah pinjaman, AmountSlider memiliki properti Maksimum diatur ke 60 dan dikalikan dengan 10.000, mencakup kisaran 10.000 hingga 600.000.

With secara otomatis dihitung ulang seiring panel geser berpindah dan pembayaran pinjaman baru ditampilkan. Tidak ada variabel yang digunakan dan tidak perlu menggunakan properti OnChange kontrol panel geser.

Berikut adalah petunjuk mendetail untuk membuat aplikasi ini:

  1. Buat aplikasi baru.
  2. Tambahkan kontrol Slider dan beri nama RateSlider. Atur properti Maksimum ke 48.
  3. Tambahkan kontrol Label di sebelah kiri kontrol panel geser. Atur properti Teks ke "Suku bunga:".
  4. Tambahkan kontrol Label di sebelah kanan kontrol panel geser. Atur properti Text ke rumus RateSlider/8 & " %".
  5. Tambahkan kontrol Slider lainnya dan beri nama AmountSlider. Atur properti Maksimum ke 60.
  6. Tambahkan kontrol Label di sebelah kiri kontrol panel geser ini. Atur properti Teks ke "Jumlah Pinjaman:".
  7. Tambahkan kontrol Label di sebelah kanan kontrol panel geser ini. Atur properti Teks ke rumus AmountSlider/8 * 10000.
  8. Tambahkan kontrol Slider lainnya dan beri nama YearsSlider. Atur properti Maksimum ke 40.
  9. Tambahkan kontrol Label di sebelah kiri kontrol panel geser ini. Atur properti Teks ke "Jumlah Tahun:".
  10. Tambahkan kontrol Label di sebelah kanan kontrol panel geser ini. Atur properti Teks ke rumus YearsSlider.
  11. Tambahkan kontrol Label dan atur properti Teks ke rumus yang ditampilkan di atas:
  12. Tambahkan kontrol Label di sebelah kiri kontrol label terakhir. Atur properti Teks ke "Pembayaran Bulanan Rutin:".

Kunci primer dihasilkan dari patch

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 menambahkan rekaman ke tabel Urutan di SQL Server. Kemudian menggunakan kunci primer yang dihasilkan untuk urutan, yang dihasilkan oleh fungsi Patch dalam bidang OrderID, untuk membuat rekaman terkait dalam tabel OrderDetails.

Nilai yang diekstrak dengan ekspresi reguler

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, menit, dan detik dari nilai durasi ISO 8601, lalu menggunakan sub-kecocokan ini untuk membuat nilai Tanggal/Waktu.

Perhatikan bahwa meskipun sub-kecocokan berisi angka, tetapi sub-kecocokan masih dalam string teks. Gunakan fungsi Value untuk mengonversi ke angka sebelum melakukan operasi matematika.

Memetakan rekaman dalam komponen

Lihat Memetakan rekaman.