ฟังก์ชัน With
ใช้กับ: แอป Canvas โฟลว์เดสก์ท็อป แอปที่ขับเคลื่อนด้วยโมเดล Power Pages Power Platform CLI
คำนวณค่าและดำเนินการสำหรับ เรกคอร์ด เดียว รวมถึงเรกคอร์ดแบบอินไลน์ของค่าที่มีชื่อ
คำอธิบาย
ฟังก์ชัน With ประเมินสูตรสำหรับเรกคอร์ดเดียว สูตรสามารถคำนวณค่าและ/หรือทำการดำเนินการ เช่น การปรับเปลี่ยนข้อมูล หรือการทำงานกับการเชื่อมต่อ ใช้ ฟังก์ชัน ForAll เพื่อประเมินสูตรสำหรับเรกคอร์ดทั้งหมดในตารางของเรกคอร์ด
ฟิลด์ของเรกคอร์ดที่กำลังประมวลผลอยู่สามารถใช้งานได้ภายในสูตร ใช้ ตัวดำเนินการ ThisRecord หรือเพียงแค่อ้างอิงชื่อของฟิลด์เหมือนที่คุณทำกับค่าอื่น ตัวดำเนินการ Asยังสามารถใช้เพื่อตั้งชื่อเรกคอร์ดที่กำลังประมวลผล ซึ่งสามารถช่วยให้สูตรของคุณง่ายต่อการเข้าใจมากขึ้น และทำให้สามารถเข้าถึงเรกคอร์ดที่ซ้อนกันได้ สำหรับข้อมูลเพิ่มเติม ดูตัวอย่างด้านล่างและ การทำงานกับขอบเขตเรกคอร์ด
ใช้ With เพื่อปรับปรุงความสามารถในการอ่านของสูตรที่ซับซ้อน โดยการแบ่งให้เล็กลงชื่อว่าสูตรย่อย ค่าที่ตั้งชื่อเหล่านี้ทำหน้าที่เหมือนกับตัวแปรท้องถิ่นอย่างง่ายซึ่งจำกัดอยู่ที่ขอบเขตของ With ไวยากรณ์ของเรกคอร์ดแบบอินไลน์เดียวกันที่ใช้กับ ฟังก์ชัน UpdateContext สามารถใช้กับ With ได้ การใช้ With เป็นที่ต้องการมากกว่าตัวแปรบริบทหรือตัวแปรส่วนกลาง เพราะมีอยู่ในตัวเอง ง่ายต่อการทำความเข้าใจ และสามารถนำมาใช้ในบริบทสูตรใดๆ ที่เปิดเผย
ใช้ With เพื่อเข้าถึงฟิลด์ของเรกคอร์ดที่ส่งกลับโดยฟังก์ชันต่างๆ เช่น Patch หรือ Match With เก็บค่าจากฟังก์ชันเหล่านี้นานเพียงพอที่จะใช้ในการคำนวณหรือการดำเนินการต่อไป
หากอาร์กิวเมนต์ เรกคอร์ด กับ With เป็นข้อผิดพลาด ข้อผิดพลาดนั้นจะถูกส่งกลับโดยฟังก์ชัน และ สูตร จะไม่ได้รับการประเมิน
ไวยากรณ์
ด้วย( บันทึก, สูตร )
- บันทึก – จำเป็น เรกคอร์ดที่จะดำเนินการ สำหรับค่าของชื่อ ให้ใช้ไวยากรณ์อินไลน์
{ name1: value1, name2: value2, ... }
- สูตร – จำเป็น สูตรในการประเมินสำหรับ เรกคอร์ด สูตรสามารถอ้างอิงฟิลด์ใดก็ได้ของ เรกคอร์ด โดยตรงเป็นขอบเขตของเรกคอร์ด
ตัวอย่าง
ค่าที่กำหนดชื่อง่ายๆ
With( { radius: 10,
height: 15 },
Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)
ตัวอย่างนี้ใช้เรกคอร์ดของค่าที่กำหนดชื่อ เพื่อคำนวณปริมาตรของทรงกระบอก มีการใช้ เพื่อจับค่าอินพุตทั้งหมดเข้าด้วยกัน ทำให้แยกค่าเหล่านี้ออกจากการคำนวณได้ง่าย
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
)
)
ตัวอย่างนี้ซ้อนฟังก์ชัน With เพื่อสร้างการคำนวณสองชั้นสำหรับ การชำระเงินจำนองรายเดือน ตราบใดที่ไม่มีความขัดแย้ง ค่าที่กำหนดชื่อ With ภายนอกทั้งหมดมีอยู่ภายใน With ด้านใน
เนื่องจากตัวควบคุมแถบเลื่อนสามารถเลื่อนได้ทีละหนึ่งเท่านั้น ตัวเลื่อนจะถูกแบ่งหรือคูณเพื่อสร้างส่วนเพิ่มที่กำหนดเองอย่างมีประสิทธิภาพ ในกรณีของอัตราดอกเบี้ย RateSlider มีคุณสมบัติ Max ตั้งค่าเป็น 48 หารด้วย 8 สำหรับการเพิ่มจุดร้อยละ 1/8 และหารด้วย 100 เพื่อแปลงจากเปอร์เซ็นต์เป็นทศนิยม ครอบคลุมช่วง 0.125% ถึง 6% ในกรณีของจำนวนเงินกู้ AmountSlider มีคุณสมบัติ Max ตั้งค่าเป็น 60 และคูณด้วย 10,000 ครอบคลุมช่วง 10,000 ถึง 600,000
With จะถูกคำนวณใหม่โดยอัตโนมัติ เมื่อตัวเลื่อนเลื่อน และแสดงการชำระคืนเงินกู้ใหม่ ไม่มีการใช้ตัวแปร และไม่จำเป็นต้องใช้คุณสมบัติ OnChange ของตัวควบคุมแถบเลื่อน
นี่คือคำแนะนำโดยละเอียดสำหรับการสร้างแอปนี้:
- สร้างแอปใหม่
- เพิ่ม ตัวควบคุม แถบเลื่อน และตั้งชื่อว่า RateSlider ตั้งค่าคุณสมบัติ Max เป็น 48
- เพิ่ม ตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อน ตั้งค่าคุณสมบัติ Text ไปยัง "อัตราดอกเบี้ย:"
- เพิ่มตัวควบคุม Label ไปทางด้านขวาของตัวควบคุมแถบเลื่อน ตั้งค่าคุณสมบัติ Text ในสูตร RateSlider/8 & " %"
- เพิ่มตัวควบคุม Slider อื่น และตั้งชื่อว่า AmountSlider ตั้งค่าคุณสมบัติ Max เป็น 60
- เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ไปยัง "จำนวนเงินกู้:"
- เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านขวาของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ในสูตร AmountSlider/8 * 10000
- เพิ่มตัวควบคุม แถบเลื่อน อื่น และตั้งชื่อว่า YearsSlider ตั้งค่าคุณสมบัติ Max เป็น 40
- เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ไปยัง "จำนวนปี:"
- เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านขวาของตัวควบคุมแถบเลื่อนนี้ ตั้งค่าคุณสมบัติ Text ในสูตร YearsSlider
- เพิ่มตัวควบคุม ป้ายชื่อ แล้วตั้งค่าคุณสมับติ Text เป็นสูตรที่แสดงข้างต้น:
- เพิ่มตัวควบคุม ป้ายชื่อ ไปทางด้านซ้ายของตัวควบคุมป้ายชื่อสุดท้าย ตั้งค่าคุณสมบัติ Text ไปยัง "การชำระเงินรายเดือนที่เกิดขึ้น:"
คีย์หลักส่งกลับจาก 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
)
)
)
ตัวอย่างนี้เพิ่มเรกคอร์ดไปที่ตาราง ใบสั่ง ใน SQL Server จากนั้นใช้คีย์หลักที่ส่งกลับสำหรับใบสั่ง ส่งกลับโดยฟังก์ชัน Patch ในฟิลด์ OrderID เพื่อสร้างเรกคอร์ดที่เกี่ยวข้องในตาราง OrderDetails
ค่าที่แยกด้วยนิพจน์ทั่วไป
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)
ตัวอย่างนี้แยกชั่วโมง นาที และวินาทีจากค่าระยะเวลา ISO 8601 แล้วใช้การจับคู่ย่อยเหล่านี้เพื่อสร้างค่า วันที่/เวลา
โปรดทราบว่าแม้ว่าการจับคู่ย่อยจะมีตัวเลข แต่ยังคงอยู่ในสตริงของข้อความ ใช้ฟังก์ชัน Value แปลงเป็นตัวเลขก่อนดำเนินการทางคณิตศาสตร์
แมปเรกคอร์ดในส่วนประกอบ
ดูที่ แมปเรกคอร์ด