[{"data":1,"prerenderedAt":14725},["ShallowReactive",2],{"blog-all":3},[4,124,187,250,314,378,442,505,568,631,694,757,820,883,946,1009,1072,1135,1199,1262,1325,1388,1451,1514,1577,1640,1703,1766,1829,1892,1955,2018,2081,2144,2207,2270,2333,2396,2459,2522,2585,2648,2711,2774,2837,2900,2963,3026,3089,3152,3215,3278,3341,3404,3467,3531,3594,3657,3720,3783,3846,3909,3972,4035,4098,4161,4224,4287,4350,4413,4476,4539,4602,4665,4728,4791,5035,5435,5735,6109,6796,7573,8540,10457,11790,12609,13270,14225,14678,14705],{"id":5,"title":6,"author":7,"body":8,"canonical":102,"category":103,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":113,"navigation":108,"order":114,"path":115,"seo":116,"stem":117,"summary":118,"tags":119,"updated":106,"__hash__":123},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fcommon-mistakes.md","\u003CMAIN TITLE>","\u003CAuthor Name>",{"type":9,"value":10,"toc":92},"minimark",[11,16,20,24,28,31,35,38,42,44,48,51,55,58,62,88],[12,13,15],"h2",{"id":14},"introduction","Introduction",[17,18,19],"p",{},"What it is, why it matters, who it’s for.",[12,21,23],{"id":22},"when-to-use-this","When to Use This",[12,25,27],{"id":26},"prerequisites","Prerequisites",[17,29,30],{},"What the reader should already know.",[12,32,34],{"id":33},"core-concepts","Core Concepts",[17,36,37],{},"Key ideas and architecture.",[12,39,41],{"id":40},"step-by-step-guide","Step-by-Step Guide",[17,43,37],{},[12,45,47],{"id":46},"best-practices","Best Practices",[17,49,50],{},"Experience-based guidance.",[12,52,54],{"id":53},"common-mistakes","Common Mistakes",[17,56,57],{},"Real pitfalls.",[12,59,61],{"id":60},"real-world-examples","Real-World Examples",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-js shiki shiki-themes github-light github-dark","\u002F\u002F realistic code\n## Summary\n","js","",[70,71,72,81],"code",{"__ignoreMap":68},[73,74,77],"span",{"class":75,"line":76},"line",1,[73,78,80],{"class":79},"sJ8bj","\u002F\u002F realistic code\n",[73,82,84],{"class":75,"line":83},2,[73,85,87],{"class":86},"sVt8B","## Summary\n",[89,90,91],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":68,"searchDepth":83,"depth":83,"links":93},[94,95,96,97,98,99,100,101],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},null,{"label":104,"key":105},"Custom API","custom-api","YYYY-MM-DD","\u003C1–2 sentence SEO description>",true,"md",false,"\u002Fimages\u002F\u003Chero-image>.jpg","\u003CAccessible alt text>",{},6,"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins\u002Fcommon-mistakes",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fcommon-mistakes","\u003C1-line card summary>",[120,121,122],"dataverse","api","power-platform","F5PN75kqyOP3g01DdQ1L_AURNqwsf5eiMaXrVZqI-IY",{"id":125,"title":6,"author":7,"body":126,"canonical":102,"category":180,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":181,"navigation":108,"order":83,"path":182,"seo":183,"stem":184,"summary":118,"tags":185,"updated":106,"__hash__":186},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fexecution-pipeline.md",{"type":9,"value":127,"toc":170},[128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,168],[12,129,15],{"id":14},[17,131,19],{},[12,133,23],{"id":22},[12,135,27],{"id":26},[17,137,30],{},[12,139,34],{"id":33},[17,141,37],{},[12,143,41],{"id":40},[17,145,37],{},[12,147,47],{"id":46},[17,149,50],{},[12,151,54],{"id":53},[17,153,57],{},[12,155,61],{"id":60},[63,157,158],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,159,160,164],{"__ignoreMap":68},[73,161,162],{"class":75,"line":76},[73,163,80],{"class":79},[73,165,166],{"class":75,"line":83},[73,167,87],{"class":86},[89,169,91],{},{"title":68,"searchDepth":83,"depth":83,"links":171},[172,173,174,175,176,177,178,179],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins\u002Fexecution-pipeline",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fexecution-pipeline",[120,121,122],"kkW9-drUSYVN7TSicNwmmCyIVbRWALVsNDQJavdWSIc",{"id":188,"title":6,"author":7,"body":189,"canonical":102,"category":243,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":244,"navigation":108,"order":76,"path":245,"seo":246,"stem":247,"summary":118,"tags":248,"updated":106,"__hash__":249},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Findex.md",{"type":9,"value":190,"toc":233},[191,193,195,197,199,201,203,205,207,209,211,213,215,217,219,231],[12,192,15],{"id":14},[17,194,19],{},[12,196,23],{"id":22},[12,198,27],{"id":26},[17,200,30],{},[12,202,34],{"id":33},[17,204,37],{},[12,206,41],{"id":40},[17,208,37],{},[12,210,47],{"id":46},[17,212,50],{},[12,214,54],{"id":53},[17,216,57],{},[12,218,61],{"id":60},[63,220,221],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,222,223,227],{"__ignoreMap":68},[73,224,225],{"class":75,"line":76},[73,226,80],{"class":79},[73,228,229],{"class":75,"line":83},[73,230,87],{"class":86},[89,232,91],{},{"title":68,"searchDepth":83,"depth":83,"links":234},[235,236,237,238,239,240,241,242],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Findex",[120,121,122],"SrAS7PGjGcSVdBi-A6Li4jtKCn42qkmwFCN7uf3sE54",{"id":251,"title":6,"author":7,"body":252,"canonical":102,"category":306,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":307,"navigation":108,"order":308,"path":309,"seo":310,"stem":311,"summary":118,"tags":312,"updated":106,"__hash__":313},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fplugin-images.md",{"type":9,"value":253,"toc":296},[254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,294],[12,255,15],{"id":14},[17,257,19],{},[12,259,23],{"id":22},[12,261,27],{"id":26},[17,263,30],{},[12,265,34],{"id":33},[17,267,37],{},[12,269,41],{"id":40},[17,271,37],{},[12,273,47],{"id":46},[17,275,50],{},[12,277,54],{"id":53},[17,279,57],{},[12,281,61],{"id":60},[63,283,284],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,285,286,290],{"__ignoreMap":68},[73,287,288],{"class":75,"line":76},[73,289,80],{"class":79},[73,291,292],{"class":75,"line":83},[73,293,87],{"class":86},[89,295,91],{},{"title":68,"searchDepth":83,"depth":83,"links":297},[298,299,300,301,302,303,304,305],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},5,"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins\u002Fplugin-images",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fplugin-images",[120,121,122],"2PjjLmLGuS2ilcs5bDipDIySx3BqsgzT9tp7M1Kfi9Y",{"id":315,"title":6,"author":7,"body":316,"canonical":102,"category":370,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":371,"navigation":108,"order":372,"path":373,"seo":374,"stem":375,"summary":118,"tags":376,"updated":106,"__hash__":377},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fpre-vs-post-operation.md",{"type":9,"value":317,"toc":360},[318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,358],[12,319,15],{"id":14},[17,321,19],{},[12,323,23],{"id":22},[12,325,27],{"id":26},[17,327,30],{},[12,329,34],{"id":33},[17,331,37],{},[12,333,41],{"id":40},[17,335,37],{},[12,337,47],{"id":46},[17,339,50],{},[12,341,54],{"id":53},[17,343,57],{},[12,345,61],{"id":60},[63,347,348],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,349,350,354],{"__ignoreMap":68},[73,351,352],{"class":75,"line":76},[73,353,80],{"class":79},[73,355,356],{"class":75,"line":83},[73,357,87],{"class":86},[89,359,91],{},{"title":68,"searchDepth":83,"depth":83,"links":361},[362,363,364,365,366,367,368,369],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},3,"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins\u002Fpre-vs-post-operation",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fpre-vs-post-operation",[120,121,122],"Sa0UacciRGigmiI_kylRF_LQUmPwMeK5uN2W75PhgmM",{"id":379,"title":6,"author":7,"body":380,"canonical":102,"category":434,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":435,"navigation":108,"order":436,"path":437,"seo":438,"stem":439,"summary":118,"tags":440,"updated":106,"__hash__":441},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fregister-plugin-step.md",{"type":9,"value":381,"toc":424},[382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,422],[12,383,15],{"id":14},[17,385,19],{},[12,387,23],{"id":22},[12,389,27],{"id":26},[17,391,30],{},[12,393,34],{"id":33},[17,395,37],{},[12,397,41],{"id":40},[17,399,37],{},[12,401,47],{"id":46},[17,403,50],{},[12,405,54],{"id":53},[17,407,57],{},[12,409,61],{"id":60},[63,411,412],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,413,414,418],{"__ignoreMap":68},[73,415,416],{"class":75,"line":76},[73,417,80],{"class":79},[73,419,420],{"class":75,"line":83},[73,421,87],{"class":86},[89,423,91],{},{"title":68,"searchDepth":83,"depth":83,"links":425},[426,427,428,429,430,431,432,433],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},4,"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fplugins\u002Fregister-plugin-step",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002F01.plugins\u002Fregister-plugin-step",[120,121,122],"3pphMIxZtWa3dS_BOgSp7qbcG6Q8OM0xwnoZa7KQ-ek",{"id":443,"title":6,"author":7,"body":444,"canonical":102,"category":498,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":499,"navigation":108,"order":436,"path":500,"seo":501,"stem":502,"summary":118,"tags":503,"updated":106,"__hash__":504},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcall-from-javascript.md",{"type":9,"value":445,"toc":488},[446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,486],[12,447,15],{"id":14},[17,449,19],{},[12,451,23],{"id":22},[12,453,27],{"id":26},[17,455,30],{},[12,457,34],{"id":33},[17,459,37],{},[12,461,41],{"id":40},[17,463,37],{},[12,465,47],{"id":46},[17,467,50],{},[12,469,54],{"id":53},[17,471,57],{},[12,473,61],{"id":60},[63,475,476],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,477,478,482],{"__ignoreMap":68},[73,479,480],{"class":75,"line":76},[73,481,80],{"class":79},[73,483,484],{"class":75,"line":83},[73,485,87],{"class":86},[89,487,91],{},{"title":68,"searchDepth":83,"depth":83,"links":489},[490,491,492,493,494,495,496,497],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api\u002Fcall-from-javascript",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcall-from-javascript",[120,121,122],"cHdW6VAMWOLKOC0smcgLer5C8nIUm-ADsD5VWblHNCs",{"id":506,"title":6,"author":7,"body":507,"canonical":102,"category":561,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":562,"navigation":108,"order":308,"path":563,"seo":564,"stem":565,"summary":118,"tags":566,"updated":106,"__hash__":567},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcall-from-power-automate.md",{"type":9,"value":508,"toc":551},[509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,549],[12,510,15],{"id":14},[17,512,19],{},[12,514,23],{"id":22},[12,516,27],{"id":26},[17,518,30],{},[12,520,34],{"id":33},[17,522,37],{},[12,524,41],{"id":40},[17,526,37],{},[12,528,47],{"id":46},[17,530,50],{},[12,532,54],{"id":53},[17,534,57],{},[12,536,61],{"id":60},[63,538,539],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,540,541,545],{"__ignoreMap":68},[73,542,543],{"class":75,"line":76},[73,544,80],{"class":79},[73,546,547],{"class":75,"line":83},[73,548,87],{"class":86},[89,550,91],{},{"title":68,"searchDepth":83,"depth":83,"links":552},[553,554,555,556,557,558,559,560],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api\u002Fcall-from-power-automate",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcall-from-power-automate",[120,121,122],"Qj7kN8N0iuxAI1LfCaHXJz7yEd8_l3VlSfZjf1K5tvc",{"id":569,"title":6,"author":7,"body":570,"canonical":102,"category":624,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":625,"navigation":108,"order":83,"path":626,"seo":627,"stem":628,"summary":118,"tags":629,"updated":106,"__hash__":630},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcreate.md",{"type":9,"value":571,"toc":614},[572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,612],[12,573,15],{"id":14},[17,575,19],{},[12,577,23],{"id":22},[12,579,27],{"id":26},[17,581,30],{},[12,583,34],{"id":33},[17,585,37],{},[12,587,41],{"id":40},[17,589,37],{},[12,591,47],{"id":46},[17,593,50],{},[12,595,54],{"id":53},[17,597,57],{},[12,599,61],{"id":60},[63,601,602],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,603,604,608],{"__ignoreMap":68},[73,605,606],{"class":75,"line":76},[73,607,80],{"class":79},[73,609,610],{"class":75,"line":83},[73,611,87],{"class":86},[89,613,91],{},{"title":68,"searchDepth":83,"depth":83,"links":615},[616,617,618,619,620,621,622,623],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api\u002Fcreate",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fcreate",[120,121,122],"HBHKbKNORKPLQBvaaimUS8fIOdPVlj9EOkw5u0ZsFNY",{"id":632,"title":6,"author":7,"body":633,"canonical":102,"category":687,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":688,"navigation":108,"order":114,"path":689,"seo":690,"stem":691,"summary":118,"tags":692,"updated":106,"__hash__":693},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Ferror-handling.md",{"type":9,"value":634,"toc":677},[635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,675],[12,636,15],{"id":14},[17,638,19],{},[12,640,23],{"id":22},[12,642,27],{"id":26},[17,644,30],{},[12,646,34],{"id":33},[17,648,37],{},[12,650,41],{"id":40},[17,652,37],{},[12,654,47],{"id":46},[17,656,50],{},[12,658,54],{"id":53},[17,660,57],{},[12,662,61],{"id":60},[63,664,665],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,666,667,671],{"__ignoreMap":68},[73,668,669],{"class":75,"line":76},[73,670,80],{"class":79},[73,672,673],{"class":75,"line":83},[73,674,87],{"class":86},[89,676,91],{},{"title":68,"searchDepth":83,"depth":83,"links":678},[679,680,681,682,683,684,685,686],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api\u002Ferror-handling",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Ferror-handling",[120,121,122],"Y2zGmOsarQSd11nmDc8Z6KB6jqfzt2K2yJWc1pHNew4",{"id":695,"title":6,"author":7,"body":696,"canonical":102,"category":750,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":751,"navigation":108,"order":76,"path":752,"seo":753,"stem":754,"summary":118,"tags":755,"updated":106,"__hash__":756},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Findex.md",{"type":9,"value":697,"toc":740},[698,700,702,704,706,708,710,712,714,716,718,720,722,724,726,738],[12,699,15],{"id":14},[17,701,19],{},[12,703,23],{"id":22},[12,705,27],{"id":26},[17,707,30],{},[12,709,34],{"id":33},[17,711,37],{},[12,713,41],{"id":40},[17,715,37],{},[12,717,47],{"id":46},[17,719,50],{},[12,721,54],{"id":53},[17,723,57],{},[12,725,61],{"id":60},[63,727,728],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,729,730,734],{"__ignoreMap":68},[73,731,732],{"class":75,"line":76},[73,733,80],{"class":79},[73,735,736],{"class":75,"line":83},[73,737,87],{"class":86},[89,739,91],{},{"title":68,"searchDepth":83,"depth":83,"links":741},[742,743,744,745,746,747,748,749],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Findex",[120,121,122],"slQJ22Z3LjUuPYEk74Hzedu3uaT6efRkwhjA4lLNvcQ",{"id":758,"title":6,"author":7,"body":759,"canonical":102,"category":813,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":814,"navigation":108,"order":372,"path":815,"seo":816,"stem":817,"summary":118,"tags":818,"updated":106,"__hash__":819},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fsecure.md",{"type":9,"value":760,"toc":803},[761,763,765,767,769,771,773,775,777,779,781,783,785,787,789,801],[12,762,15],{"id":14},[17,764,19],{},[12,766,23],{"id":22},[12,768,27],{"id":26},[17,770,30],{},[12,772,34],{"id":33},[17,774,37],{},[12,776,41],{"id":40},[17,778,37],{},[12,780,47],{"id":46},[17,782,50],{},[12,784,54],{"id":53},[17,786,57],{},[12,788,61],{"id":60},[63,790,791],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,792,793,797],{"__ignoreMap":68},[73,794,795],{"class":75,"line":76},[73,796,80],{"class":79},[73,798,799],{"class":75,"line":83},[73,800,87],{"class":86},[89,802,91],{},{"title":68,"searchDepth":83,"depth":83,"links":804},[805,806,807,808,809,810,811,812],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fbusiness-logic\u002Fcustom-api\u002Fsecure",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F04.business-logic\u002Fcustom-api\u002Fsecure",[120,121,122],"hONDOpfGi_8K2PHKBHkK1tYacbJWLBiN8N3pT7x2yOY",{"id":821,"title":6,"author":7,"body":822,"canonical":102,"category":876,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":877,"navigation":108,"order":436,"path":878,"seo":879,"stem":880,"summary":118,"tags":881,"updated":106,"__hash__":882},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fauthentication.md",{"type":9,"value":823,"toc":866},[824,826,828,830,832,834,836,838,840,842,844,846,848,850,852,864],[12,825,15],{"id":14},[17,827,19],{},[12,829,23],{"id":22},[12,831,27],{"id":26},[17,833,30],{},[12,835,34],{"id":33},[17,837,37],{},[12,839,41],{"id":40},[17,841,37],{},[12,843,47],{"id":46},[17,845,50],{},[12,847,54],{"id":53},[17,849,57],{},[12,851,61],{"id":60},[63,853,854],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,855,856,860],{"__ignoreMap":68},[73,857,858],{"class":75,"line":76},[73,859,80],{"class":79},[73,861,862],{"class":75,"line":83},[73,863,87],{"class":86},[89,865,91],{},{"title":68,"searchDepth":83,"depth":83,"links":867},[868,869,870,871,872,873,874,875],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fapi\u002Fwebapi\u002Fauthentication",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fauthentication",[120,121,122],"5JEQT2pQZixovINkRGpBJ2az5nboyRArXwAGETbFnmc",{"id":884,"title":6,"author":7,"body":885,"canonical":102,"category":939,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":940,"navigation":108,"order":308,"path":941,"seo":942,"stem":943,"summary":118,"tags":944,"updated":106,"__hash__":945},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fbatch-requests.md",{"type":9,"value":886,"toc":929},[887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,927],[12,888,15],{"id":14},[17,890,19],{},[12,892,23],{"id":22},[12,894,27],{"id":26},[17,896,30],{},[12,898,34],{"id":33},[17,900,37],{},[12,902,41],{"id":40},[17,904,37],{},[12,906,47],{"id":46},[17,908,50],{},[12,910,54],{"id":53},[17,912,57],{},[12,914,61],{"id":60},[63,916,917],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,918,919,923],{"__ignoreMap":68},[73,920,921],{"class":75,"line":76},[73,922,80],{"class":79},[73,924,925],{"class":75,"line":83},[73,926,87],{"class":86},[89,928,91],{},{"title":68,"searchDepth":83,"depth":83,"links":930},[931,932,933,934,935,936,937,938],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fapi\u002Fwebapi\u002Fbatch-requests",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fbatch-requests",[120,121,122],"GZy_Sv3fbjdpyicQT-TDHwBbCkRkFNmrhuCgOKvI4gI",{"id":947,"title":6,"author":7,"body":948,"canonical":102,"category":1002,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1003,"navigation":108,"order":372,"path":1004,"seo":1005,"stem":1006,"summary":118,"tags":1007,"updated":106,"__hash__":1008},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fcrud-operations.md",{"type":9,"value":949,"toc":992},[950,952,954,956,958,960,962,964,966,968,970,972,974,976,978,990],[12,951,15],{"id":14},[17,953,19],{},[12,955,23],{"id":22},[12,957,27],{"id":26},[17,959,30],{},[12,961,34],{"id":33},[17,963,37],{},[12,965,41],{"id":40},[17,967,37],{},[12,969,47],{"id":46},[17,971,50],{},[12,973,54],{"id":53},[17,975,57],{},[12,977,61],{"id":60},[63,979,980],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,981,982,986],{"__ignoreMap":68},[73,983,984],{"class":75,"line":76},[73,985,80],{"class":79},[73,987,988],{"class":75,"line":83},[73,989,87],{"class":86},[89,991,91],{},{"title":68,"searchDepth":83,"depth":83,"links":993},[994,995,996,997,998,999,1000,1001],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fapi\u002Fwebapi\u002Fcrud-operations",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fcrud-operations",[120,121,122],"VE2YdqjO6BEFx9VEzpeRaJxb9xgncCONUwicnPyY-cM",{"id":1010,"title":6,"author":7,"body":1011,"canonical":102,"category":1065,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1066,"navigation":108,"order":83,"path":1067,"seo":1068,"stem":1069,"summary":118,"tags":1070,"updated":106,"__hash__":1071},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fexecute-actions.md",{"type":9,"value":1012,"toc":1055},[1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1053],[12,1014,15],{"id":14},[17,1016,19],{},[12,1018,23],{"id":22},[12,1020,27],{"id":26},[17,1022,30],{},[12,1024,34],{"id":33},[17,1026,37],{},[12,1028,41],{"id":40},[17,1030,37],{},[12,1032,47],{"id":46},[17,1034,50],{},[12,1036,54],{"id":53},[17,1038,57],{},[12,1040,61],{"id":60},[63,1042,1043],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1044,1045,1049],{"__ignoreMap":68},[73,1046,1047],{"class":75,"line":76},[73,1048,80],{"class":79},[73,1050,1051],{"class":75,"line":83},[73,1052,87],{"class":86},[89,1054,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1056},[1057,1058,1059,1060,1061,1062,1063,1064],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fapi\u002Fwebapi\u002Fexecute-actions",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Fexecute-actions",[120,121,122],"456tYKfgXOxNKPzwCtCD8b6zF3BW1x3H-l936gVLZqg",{"id":1073,"title":6,"author":7,"body":1074,"canonical":102,"category":1128,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1129,"navigation":108,"order":76,"path":1130,"seo":1131,"stem":1132,"summary":118,"tags":1133,"updated":106,"__hash__":1134},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Findex.md",{"type":9,"value":1075,"toc":1118},[1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1116],[12,1077,15],{"id":14},[17,1079,19],{},[12,1081,23],{"id":22},[12,1083,27],{"id":26},[17,1085,30],{},[12,1087,34],{"id":33},[17,1089,37],{},[12,1091,41],{"id":40},[17,1093,37],{},[12,1095,47],{"id":46},[17,1097,50],{},[12,1099,54],{"id":53},[17,1101,57],{},[12,1103,61],{"id":60},[63,1105,1106],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1107,1108,1112],{"__ignoreMap":68},[73,1109,1110],{"class":75,"line":76},[73,1111,80],{"class":79},[73,1113,1114],{"class":75,"line":83},[73,1115,87],{"class":86},[89,1117,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1119},[1120,1121,1122,1123,1124,1125,1126,1127],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse\u002Fapi\u002Fwebapi",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002F05.api\u002Fwebapi\u002Findex",[120,121,122],"crU9hTGTUQLzXBrtGq06FvruIlCKJB5ffY8DDUK2pro",{"id":1136,"title":6,"author":7,"body":1137,"canonical":102,"category":1191,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":1192,"imageAlt":112,"meta":1193,"navigation":108,"order":76,"path":1194,"seo":1195,"stem":1196,"summary":118,"tags":1197,"updated":106,"__hash__":1198},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002Findex.md",{"type":9,"value":1138,"toc":1181},[1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1179],[12,1140,15],{"id":14},[17,1142,19],{},[12,1144,23],{"id":22},[12,1146,27],{"id":26},[17,1148,30],{},[12,1150,34],{"id":33},[17,1152,37],{},[12,1154,41],{"id":40},[17,1156,37],{},[12,1158,47],{"id":46},[17,1160,50],{},[12,1162,54],{"id":53},[17,1164,57],{},[12,1166,61],{"id":60},[63,1168,1169],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1170,1171,1175],{"__ignoreMap":68},[73,1172,1173],{"class":75,"line":76},[73,1174,80],{"class":79},[73,1176,1177],{"class":75,"line":83},[73,1178,87],{"class":86},[89,1180,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1182},[1183,1184,1185,1186,1187,1188,1189,1190],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},"\u002Fimages\u002Fplaceholder.jpg",{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fdataverse",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F01.dataverse\u002Findex",[120,121,122],"UIBWxXlQ3zHJwikQjHg9m-Sngtw4xs7zOBMhNdDMosU",{"id":1200,"title":6,"author":7,"body":1201,"canonical":102,"category":1255,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1256,"navigation":108,"order":372,"path":1257,"seo":1258,"stem":1259,"summary":118,"tags":1260,"updated":106,"__hash__":1261},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fconnect-to-dataverse.md",{"type":9,"value":1202,"toc":1245},[1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1243],[12,1204,15],{"id":14},[17,1206,19],{},[12,1208,23],{"id":22},[12,1210,27],{"id":26},[17,1212,30],{},[12,1214,34],{"id":33},[17,1216,37],{},[12,1218,41],{"id":40},[17,1220,37],{},[12,1222,47],{"id":46},[17,1224,50],{},[12,1226,54],{"id":53},[17,1228,57],{},[12,1230,61],{"id":60},[63,1232,1233],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1234,1235,1239],{"__ignoreMap":68},[73,1236,1237],{"class":75,"line":76},[73,1238,80],{"class":79},[73,1240,1241],{"class":75,"line":83},[73,1242,87],{"class":86},[89,1244,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1246},[1247,1248,1249,1250,1251,1252,1253,1254],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fcanvas-apps\u002Fconnect-to-dataverse",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fconnect-to-dataverse",[120,121,122],"iOMVTRs84tJyqXz5SJXTcNefa5igohiEGajcPM1HfFM",{"id":1263,"title":6,"author":7,"body":1264,"canonical":102,"category":1318,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1319,"navigation":108,"order":308,"path":1320,"seo":1321,"stem":1322,"summary":118,"tags":1323,"updated":106,"__hash__":1324},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fperformance-best-practices.md",{"type":9,"value":1265,"toc":1308},[1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1306],[12,1267,15],{"id":14},[17,1269,19],{},[12,1271,23],{"id":22},[12,1273,27],{"id":26},[17,1275,30],{},[12,1277,34],{"id":33},[17,1279,37],{},[12,1281,41],{"id":40},[17,1283,37],{},[12,1285,47],{"id":46},[17,1287,50],{},[12,1289,54],{"id":53},[17,1291,57],{},[12,1293,61],{"id":60},[63,1295,1296],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1297,1298,1302],{"__ignoreMap":68},[73,1299,1300],{"class":75,"line":76},[73,1301,80],{"class":79},[73,1303,1304],{"class":75,"line":83},[73,1305,87],{"class":86},[89,1307,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1309},[1310,1311,1312,1313,1314,1315,1316,1317],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fcanvas-apps\u002Fperformance-best-practices",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fperformance-best-practices",[120,121,122],"LMoQmEEEjSX_xPNzW23v_WucJqbo7IOB-PsO9lM22W0",{"id":1326,"title":6,"author":7,"body":1327,"canonical":102,"category":1381,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1382,"navigation":108,"order":436,"path":1383,"seo":1384,"stem":1385,"summary":118,"tags":1386,"updated":106,"__hash__":1387},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fpower-fx-basics.md",{"type":9,"value":1328,"toc":1371},[1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1369],[12,1330,15],{"id":14},[17,1332,19],{},[12,1334,23],{"id":22},[12,1336,27],{"id":26},[17,1338,30],{},[12,1340,34],{"id":33},[17,1342,37],{},[12,1344,41],{"id":40},[17,1346,37],{},[12,1348,47],{"id":46},[17,1350,50],{},[12,1352,54],{"id":53},[17,1354,57],{},[12,1356,61],{"id":60},[63,1358,1359],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1360,1361,1365],{"__ignoreMap":68},[73,1362,1363],{"class":75,"line":76},[73,1364,80],{"class":79},[73,1366,1367],{"class":75,"line":83},[73,1368,87],{"class":86},[89,1370,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1372},[1373,1374,1375,1376,1377,1378,1379,1380],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fcanvas-apps\u002Fpower-fx-basics",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fpower-fx-basics",[120,121,122],"RlTnsz36uceJk71bR7u83l0rEaNC63TQB9dIjDQ1TxY",{"id":1389,"title":6,"author":7,"body":1390,"canonical":102,"category":1444,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1445,"navigation":108,"order":83,"path":1446,"seo":1447,"stem":1448,"summary":118,"tags":1449,"updated":106,"__hash__":1450},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fwhen-to-use.md",{"type":9,"value":1391,"toc":1434},[1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1432],[12,1393,15],{"id":14},[17,1395,19],{},[12,1397,23],{"id":22},[12,1399,27],{"id":26},[17,1401,30],{},[12,1403,34],{"id":33},[17,1405,37],{},[12,1407,41],{"id":40},[17,1409,37],{},[12,1411,47],{"id":46},[17,1413,50],{},[12,1415,54],{"id":53},[17,1417,57],{},[12,1419,61],{"id":60},[63,1421,1422],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1423,1424,1428],{"__ignoreMap":68},[73,1425,1426],{"class":75,"line":76},[73,1427,80],{"class":79},[73,1429,1430],{"class":75,"line":83},[73,1431,87],{"class":86},[89,1433,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1435},[1436,1437,1438,1439,1440,1441,1442,1443],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fcanvas-apps\u002Fwhen-to-use",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F01.canvas-apps\u002Fwhen-to-use",[120,121,122],"LLlDBQPlCt0XuKBBFDrQUJGyA2d_nl4PIPhiOYlPy3g",{"id":1452,"title":6,"author":7,"body":1453,"canonical":102,"category":1507,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1508,"navigation":108,"order":436,"path":1509,"seo":1510,"stem":1511,"summary":118,"tags":1512,"updated":106,"__hash__":1513},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fbusiness-process-flows.md",{"type":9,"value":1454,"toc":1497},[1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1495],[12,1456,15],{"id":14},[17,1458,19],{},[12,1460,23],{"id":22},[12,1462,27],{"id":26},[17,1464,30],{},[12,1466,34],{"id":33},[17,1468,37],{},[12,1470,41],{"id":40},[17,1472,37],{},[12,1474,47],{"id":46},[17,1476,50],{},[12,1478,54],{"id":53},[17,1480,57],{},[12,1482,61],{"id":60},[63,1484,1485],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1486,1487,1491],{"__ignoreMap":68},[73,1488,1489],{"class":75,"line":76},[73,1490,80],{"class":79},[73,1492,1493],{"class":75,"line":83},[73,1494,87],{"class":86},[89,1496,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1498},[1499,1500,1501,1502,1503,1504,1505,1506],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fmodel-driven-apps\u002Fbusiness-process-flows",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fbusiness-process-flows",[120,121,122],"ZaQf1SyX5nufo8hU9HhyQffGzOoas0K5vghuI_t6qGo",{"id":1515,"title":6,"author":7,"body":1516,"canonical":102,"category":1570,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1571,"navigation":108,"order":308,"path":1572,"seo":1573,"stem":1574,"summary":118,"tags":1575,"updated":106,"__hash__":1576},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fcommand-bar-customization.md",{"type":9,"value":1517,"toc":1560},[1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1558],[12,1519,15],{"id":14},[17,1521,19],{},[12,1523,23],{"id":22},[12,1525,27],{"id":26},[17,1527,30],{},[12,1529,34],{"id":33},[17,1531,37],{},[12,1533,41],{"id":40},[17,1535,37],{},[12,1537,47],{"id":46},[17,1539,50],{},[12,1541,54],{"id":53},[17,1543,57],{},[12,1545,61],{"id":60},[63,1547,1548],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1549,1550,1554],{"__ignoreMap":68},[73,1551,1552],{"class":75,"line":76},[73,1553,80],{"class":79},[73,1555,1556],{"class":75,"line":83},[73,1557,87],{"class":86},[89,1559,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1561},[1562,1563,1564,1565,1566,1567,1568,1569],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fmodel-driven-apps\u002Fcommand-bar-customization",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fcommand-bar-customization",[120,121,122],"z-u016jXhb6Ju75nI-Wb9AXpTkQUCEcQGP9KJWuFy-k",{"id":1578,"title":6,"author":7,"body":1579,"canonical":102,"category":1633,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1634,"navigation":108,"order":83,"path":1635,"seo":1636,"stem":1637,"summary":118,"tags":1638,"updated":106,"__hash__":1639},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fconcepts.md",{"type":9,"value":1580,"toc":1623},[1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1621],[12,1582,15],{"id":14},[17,1584,19],{},[12,1586,23],{"id":22},[12,1588,27],{"id":26},[17,1590,30],{},[12,1592,34],{"id":33},[17,1594,37],{},[12,1596,41],{"id":40},[17,1598,37],{},[12,1600,47],{"id":46},[17,1602,50],{},[12,1604,54],{"id":53},[17,1606,57],{},[12,1608,61],{"id":60},[63,1610,1611],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1612,1613,1617],{"__ignoreMap":68},[73,1614,1615],{"class":75,"line":76},[73,1616,80],{"class":79},[73,1618,1619],{"class":75,"line":83},[73,1620,87],{"class":86},[89,1622,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1624},[1625,1626,1627,1628,1629,1630,1631,1632],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fmodel-driven-apps\u002Fconcepts",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fconcepts",[120,121,122],"SO2XvLWf-ki_GtZ__0b44Il7gp8kRfMns7uNecQkRYM",{"id":1641,"title":6,"author":7,"body":1642,"canonical":102,"category":1696,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1697,"navigation":108,"order":372,"path":1698,"seo":1699,"stem":1700,"summary":118,"tags":1701,"updated":106,"__hash__":1702},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fforms-vs-views-vs-dashboards.md",{"type":9,"value":1643,"toc":1686},[1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1684],[12,1645,15],{"id":14},[17,1647,19],{},[12,1649,23],{"id":22},[12,1651,27],{"id":26},[17,1653,30],{},[12,1655,34],{"id":33},[17,1657,37],{},[12,1659,41],{"id":40},[17,1661,37],{},[12,1663,47],{"id":46},[17,1665,50],{},[12,1667,54],{"id":53},[17,1669,57],{},[12,1671,61],{"id":60},[63,1673,1674],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1675,1676,1680],{"__ignoreMap":68},[73,1677,1678],{"class":75,"line":76},[73,1679,80],{"class":79},[73,1681,1682],{"class":75,"line":83},[73,1683,87],{"class":86},[89,1685,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1687},[1688,1689,1690,1691,1692,1693,1694,1695],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps\u002Fmodel-driven-apps\u002Fforms-vs-views-vs-dashboards",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002F02.model-driven-apps\u002Fforms-vs-views-vs-dashboards",[120,121,122],"ykN6WAELovd-5qWtQuX-8Ay4QbI9Upa4n3CoU5ksymo",{"id":1704,"title":6,"author":7,"body":1705,"canonical":102,"category":1759,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":1192,"imageAlt":112,"meta":1760,"navigation":108,"order":372,"path":1761,"seo":1762,"stem":1763,"summary":118,"tags":1764,"updated":106,"__hash__":1765},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002Findex.md",{"type":9,"value":1706,"toc":1749},[1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1747],[12,1708,15],{"id":14},[17,1710,19],{},[12,1712,23],{"id":22},[12,1714,27],{"id":26},[17,1716,30],{},[12,1718,34],{"id":33},[17,1720,37],{},[12,1722,41],{"id":40},[17,1724,37],{},[12,1726,47],{"id":46},[17,1728,50],{},[12,1730,54],{"id":53},[17,1732,57],{},[12,1734,61],{"id":60},[63,1736,1737],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1738,1739,1743],{"__ignoreMap":68},[73,1740,1741],{"class":75,"line":76},[73,1742,80],{"class":79},[73,1744,1745],{"class":75,"line":83},[73,1746,87],{"class":86},[89,1748,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1750},[1751,1752,1753,1754,1755,1756,1757,1758],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpowerapps",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F02.powerapps\u002Findex",[120,121,122],"06ZFjJU2NfZEiD_K_-usNPaVj01VdJoJDry1t0Ymem0",{"id":1767,"title":6,"author":7,"body":1768,"canonical":102,"category":1822,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1823,"navigation":108,"order":308,"path":1824,"seo":1825,"stem":1826,"summary":118,"tags":1827,"updated":106,"__hash__":1828},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fcommon-mistakes.md",{"type":9,"value":1769,"toc":1812},[1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1810],[12,1771,15],{"id":14},[17,1773,19],{},[12,1775,23],{"id":22},[12,1777,27],{"id":26},[17,1779,30],{},[12,1781,34],{"id":33},[17,1783,37],{},[12,1785,41],{"id":40},[17,1787,37],{},[12,1789,47],{"id":46},[17,1791,50],{},[12,1793,54],{"id":53},[17,1795,57],{},[12,1797,61],{"id":60},[63,1799,1800],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1801,1802,1806],{"__ignoreMap":68},[73,1803,1804],{"class":75,"line":76},[73,1805,80],{"class":79},[73,1807,1808],{"class":75,"line":83},[73,1809,87],{"class":86},[89,1811,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1813},[1814,1815,1816,1817,1818,1819,1820,1821],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpcf\u002Fcommon-mistakes",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fcommon-mistakes",[120,121,122],"ou2sdOJ4HbCLrNVEKNzPxMAQFGq223TISknx7Ht09K8",{"id":1830,"title":6,"author":7,"body":1831,"canonical":102,"category":1885,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1886,"navigation":108,"order":436,"path":1887,"seo":1888,"stem":1889,"summary":118,"tags":1890,"updated":106,"__hash__":1891},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Flifecycle.md",{"type":9,"value":1832,"toc":1875},[1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1873],[12,1834,15],{"id":14},[17,1836,19],{},[12,1838,23],{"id":22},[12,1840,27],{"id":26},[17,1842,30],{},[12,1844,34],{"id":33},[17,1846,37],{},[12,1848,41],{"id":40},[17,1850,37],{},[12,1852,47],{"id":46},[17,1854,50],{},[12,1856,54],{"id":53},[17,1858,57],{},[12,1860,61],{"id":60},[63,1862,1863],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1864,1865,1869],{"__ignoreMap":68},[73,1866,1867],{"class":75,"line":76},[73,1868,80],{"class":79},[73,1870,1871],{"class":75,"line":83},[73,1872,87],{"class":86},[89,1874,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1876},[1877,1878,1879,1880,1881,1882,1883,1884],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpcf\u002Flifecycle",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Flifecycle",[120,121,122],"mqE7wIyKqcqxqDzk0qnK63UVeEAe5Fsl3tBkejJIDeE",{"id":1893,"title":6,"author":7,"body":1894,"canonical":102,"category":1948,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":1949,"navigation":108,"order":83,"path":1950,"seo":1951,"stem":1952,"summary":118,"tags":1953,"updated":106,"__hash__":1954},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fwhat-is-pcf.md",{"type":9,"value":1895,"toc":1938},[1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1936],[12,1897,15],{"id":14},[17,1899,19],{},[12,1901,23],{"id":22},[12,1903,27],{"id":26},[17,1905,30],{},[12,1907,34],{"id":33},[17,1909,37],{},[12,1911,41],{"id":40},[17,1913,37],{},[12,1915,47],{"id":46},[17,1917,50],{},[12,1919,54],{"id":53},[17,1921,57],{},[12,1923,61],{"id":60},[63,1925,1926],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1927,1928,1932],{"__ignoreMap":68},[73,1929,1930],{"class":75,"line":76},[73,1931,80],{"class":79},[73,1933,1934],{"class":75,"line":83},[73,1935,87],{"class":86},[89,1937,91],{},{"title":68,"searchDepth":83,"depth":83,"links":1939},[1940,1941,1942,1943,1944,1945,1946,1947],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpcf\u002Fwhat-is-pcf",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fwhat-is-pcf",[120,121,122],"uocWDzCDa3y6hEmr5xr_EzGF07Mcv3tHwDivluvCIDM",{"id":1956,"title":6,"author":7,"body":1957,"canonical":102,"category":2011,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2012,"navigation":108,"order":372,"path":2013,"seo":2014,"stem":2015,"summary":118,"tags":2016,"updated":106,"__hash__":2017},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fwhen-to-use-pcf.md",{"type":9,"value":1958,"toc":2001},[1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1999],[12,1960,15],{"id":14},[17,1962,19],{},[12,1964,23],{"id":22},[12,1966,27],{"id":26},[17,1968,30],{},[12,1970,34],{"id":33},[17,1972,37],{},[12,1974,41],{"id":40},[17,1976,37],{},[12,1978,47],{"id":46},[17,1980,50],{},[12,1982,54],{"id":53},[17,1984,57],{},[12,1986,61],{"id":60},[63,1988,1989],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,1990,1991,1995],{"__ignoreMap":68},[73,1992,1993],{"class":75,"line":76},[73,1994,80],{"class":79},[73,1996,1997],{"class":75,"line":83},[73,1998,87],{"class":86},[89,2000,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2002},[2003,2004,2005,2006,2007,2008,2009,2010],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpcf\u002Fwhen-to-use-pcf",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F03.pcf\u002Fwhen-to-use-pcf",[120,121,122],"RPVXeLzZZSYpLFP8qDv_wA6T0rnSKMusC2O0n3UBmDg",{"id":2019,"title":6,"author":7,"body":2020,"canonical":102,"category":2074,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2075,"navigation":108,"order":83,"path":2076,"seo":2077,"stem":2078,"summary":118,"tags":2079,"updated":106,"__hash__":2080},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Fcloud-vs-desktop-flows.md",{"type":9,"value":2021,"toc":2064},[2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2062],[12,2023,15],{"id":14},[17,2025,19],{},[12,2027,23],{"id":22},[12,2029,27],{"id":26},[17,2031,30],{},[12,2033,34],{"id":33},[17,2035,37],{},[12,2037,41],{"id":40},[17,2039,37],{},[12,2041,47],{"id":46},[17,2043,50],{},[12,2045,54],{"id":53},[17,2047,57],{},[12,2049,61],{"id":60},[63,2051,2052],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2053,2054,2058],{"__ignoreMap":68},[73,2055,2056],{"class":75,"line":76},[73,2057,80],{"class":79},[73,2059,2060],{"class":75,"line":83},[73,2061,87],{"class":86},[89,2063,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2065},[2066,2067,2068,2069,2070,2071,2072,2073],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fconcepts\u002Fcloud-vs-desktop-flows",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Fcloud-vs-desktop-flows",[120,121,122],"3S07-qHWhTZ8JKzvn7ymI4HVlsI7uf5vLs54W4i6fKg",{"id":2082,"title":6,"author":7,"body":2083,"canonical":102,"category":2137,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2138,"navigation":108,"order":436,"path":2139,"seo":2140,"stem":2141,"summary":118,"tags":2142,"updated":106,"__hash__":2143},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Fexpressions-vs-power-fx.md",{"type":9,"value":2084,"toc":2127},[2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2125],[12,2086,15],{"id":14},[17,2088,19],{},[12,2090,23],{"id":22},[12,2092,27],{"id":26},[17,2094,30],{},[12,2096,34],{"id":33},[17,2098,37],{},[12,2100,41],{"id":40},[17,2102,37],{},[12,2104,47],{"id":46},[17,2106,50],{},[12,2108,54],{"id":53},[17,2110,57],{},[12,2112,61],{"id":60},[63,2114,2115],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2116,2117,2121],{"__ignoreMap":68},[73,2118,2119],{"class":75,"line":76},[73,2120,80],{"class":79},[73,2122,2123],{"class":75,"line":83},[73,2124,87],{"class":86},[89,2126,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2128},[2129,2130,2131,2132,2133,2134,2135,2136],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fconcepts\u002Fexpressions-vs-power-fx",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Fexpressions-vs-power-fx",[120,121,122],"EThD8ie-K_LByLAzInROWiMBpJsNHdphIdmqahJjBJo",{"id":2145,"title":6,"author":7,"body":2146,"canonical":102,"category":2200,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2201,"navigation":108,"order":76,"path":2202,"seo":2203,"stem":2204,"summary":118,"tags":2205,"updated":106,"__hash__":2206},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Findex.md",{"type":9,"value":2147,"toc":2190},[2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2188],[12,2149,15],{"id":14},[17,2151,19],{},[12,2153,23],{"id":22},[12,2155,27],{"id":26},[17,2157,30],{},[12,2159,34],{"id":33},[17,2161,37],{},[12,2163,41],{"id":40},[17,2165,37],{},[12,2167,47],{"id":46},[17,2169,50],{},[12,2171,54],{"id":53},[17,2173,57],{},[12,2175,61],{"id":60},[63,2177,2178],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2179,2180,2184],{"__ignoreMap":68},[73,2181,2182],{"class":75,"line":76},[73,2183,80],{"class":79},[73,2185,2186],{"class":75,"line":83},[73,2187,87],{"class":86},[89,2189,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2191},[2192,2193,2194,2195,2196,2197,2198,2199],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fconcepts",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Findex",[120,121,122],"PquKYh6ydtdrz82hAO2PzQE0VTs53JGBMFp4_tD--xg",{"id":2208,"title":6,"author":7,"body":2209,"canonical":102,"category":2263,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2264,"navigation":108,"order":372,"path":2265,"seo":2266,"stem":2267,"summary":118,"tags":2268,"updated":106,"__hash__":2269},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Ftriggers-vs-actions.md",{"type":9,"value":2210,"toc":2253},[2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2251],[12,2212,15],{"id":14},[17,2214,19],{},[12,2216,23],{"id":22},[12,2218,27],{"id":26},[17,2220,30],{},[12,2222,34],{"id":33},[17,2224,37],{},[12,2226,41],{"id":40},[17,2228,37],{},[12,2230,47],{"id":46},[17,2232,50],{},[12,2234,54],{"id":53},[17,2236,57],{},[12,2238,61],{"id":60},[63,2240,2241],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2242,2243,2247],{"__ignoreMap":68},[73,2244,2245],{"class":75,"line":76},[73,2246,80],{"class":79},[73,2248,2249],{"class":75,"line":83},[73,2250,87],{"class":86},[89,2252,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2254},[2255,2256,2257,2258,2259,2260,2261,2262],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fconcepts\u002Ftriggers-vs-actions",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F01.concepts\u002Ftriggers-vs-actions",[120,121,122],"kjgP0GnHehkO0FCy7F0-iWmZrnAG_p6Lqf_RmE3o92E",{"id":2271,"title":6,"author":7,"body":2272,"canonical":102,"category":2326,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2327,"navigation":108,"order":372,"path":2328,"seo":2329,"stem":2330,"summary":118,"tags":2331,"updated":106,"__hash__":2332},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Fcall-custom-api.md",{"type":9,"value":2273,"toc":2316},[2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2314],[12,2275,15],{"id":14},[17,2277,19],{},[12,2279,23],{"id":22},[12,2281,27],{"id":26},[17,2283,30],{},[12,2285,34],{"id":33},[17,2287,37],{},[12,2289,41],{"id":40},[17,2291,37],{},[12,2293,47],{"id":46},[17,2295,50],{},[12,2297,54],{"id":53},[17,2299,57],{},[12,2301,61],{"id":60},[63,2303,2304],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2305,2306,2310],{"__ignoreMap":68},[73,2307,2308],{"class":75,"line":76},[73,2309,80],{"class":79},[73,2311,2312],{"class":75,"line":83},[73,2313,87],{"class":86},[89,2315,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2317},[2318,2319,2320,2321,2322,2323,2324,2325],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fcloud-flows\u002Fdataverse\u002Fcall-custom-api",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Fcall-custom-api",[120,121,122],"0RlouGH4T7POPOU48WM4twHyt8BWH9ky3dHVaqKLOeY",{"id":2334,"title":6,"author":7,"body":2335,"canonical":102,"category":2389,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2390,"navigation":108,"order":436,"path":2391,"seo":2392,"stem":2393,"summary":118,"tags":2394,"updated":106,"__hash__":2395},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Ferror-handling.md",{"type":9,"value":2336,"toc":2379},[2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2377],[12,2338,15],{"id":14},[17,2340,19],{},[12,2342,23],{"id":22},[12,2344,27],{"id":26},[17,2346,30],{},[12,2348,34],{"id":33},[17,2350,37],{},[12,2352,41],{"id":40},[17,2354,37],{},[12,2356,47],{"id":46},[17,2358,50],{},[12,2360,54],{"id":53},[17,2362,57],{},[12,2364,61],{"id":60},[63,2366,2367],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2368,2369,2373],{"__ignoreMap":68},[73,2370,2371],{"class":75,"line":76},[73,2372,80],{"class":79},[73,2374,2375],{"class":75,"line":83},[73,2376,87],{"class":86},[89,2378,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2380},[2381,2382,2383,2384,2385,2386,2387,2388],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fcloud-flows\u002Fdataverse\u002Ferror-handling",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Ferror-handling",[120,121,122],"o5uk5cAl5TW2qmlSVwAYMhtGo4XOGnwZagTNjESR7YE",{"id":2397,"title":6,"author":7,"body":2398,"canonical":102,"category":2452,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2453,"navigation":108,"order":76,"path":2454,"seo":2455,"stem":2456,"summary":118,"tags":2457,"updated":106,"__hash__":2458},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Findex.md",{"type":9,"value":2399,"toc":2442},[2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2440],[12,2401,15],{"id":14},[17,2403,19],{},[12,2405,23],{"id":22},[12,2407,27],{"id":26},[17,2409,30],{},[12,2411,34],{"id":33},[17,2413,37],{},[12,2415,41],{"id":40},[17,2417,37],{},[12,2419,47],{"id":46},[17,2421,50],{},[12,2423,54],{"id":53},[17,2425,57],{},[12,2427,61],{"id":60},[63,2429,2430],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2431,2432,2436],{"__ignoreMap":68},[73,2433,2434],{"class":75,"line":76},[73,2435,80],{"class":79},[73,2437,2438],{"class":75,"line":83},[73,2439,87],{"class":86},[89,2441,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2443},[2444,2445,2446,2447,2448,2449,2450,2451],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fcloud-flows\u002Fdataverse",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Findex",[120,121,122],"mNbCHWSS0tzMM_hdw2zfyDvHbV5uE3pqheStJL8Cuug",{"id":2460,"title":6,"author":7,"body":2461,"canonical":102,"category":2515,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2516,"navigation":108,"order":308,"path":2517,"seo":2518,"stem":2519,"summary":118,"tags":2520,"updated":106,"__hash__":2521},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Fperformance-considerations.md",{"type":9,"value":2462,"toc":2505},[2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2503],[12,2464,15],{"id":14},[17,2466,19],{},[12,2468,23],{"id":22},[12,2470,27],{"id":26},[17,2472,30],{},[12,2474,34],{"id":33},[17,2476,37],{},[12,2478,41],{"id":40},[17,2480,37],{},[12,2482,47],{"id":46},[17,2484,50],{},[12,2486,54],{"id":53},[17,2488,57],{},[12,2490,61],{"id":60},[63,2492,2493],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2494,2495,2499],{"__ignoreMap":68},[73,2496,2497],{"class":75,"line":76},[73,2498,80],{"class":79},[73,2500,2501],{"class":75,"line":83},[73,2502,87],{"class":86},[89,2504,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2506},[2507,2508,2509,2510,2511,2512,2513,2514],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fcloud-flows\u002Fdataverse\u002Fperformance-considerations",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Fperformance-considerations",[120,121,122],"lC4fX6FjcwKjU3FO2ZvBXZ6cVg32uyCPs2G_j_5aunI",{"id":2523,"title":6,"author":7,"body":2524,"canonical":102,"category":2578,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2579,"navigation":108,"order":83,"path":2580,"seo":2581,"stem":2582,"summary":118,"tags":2583,"updated":106,"__hash__":2584},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Ftrigger-from-dataverse.md",{"type":9,"value":2525,"toc":2568},[2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2566],[12,2527,15],{"id":14},[17,2529,19],{},[12,2531,23],{"id":22},[12,2533,27],{"id":26},[17,2535,30],{},[12,2537,34],{"id":33},[17,2539,37],{},[12,2541,41],{"id":40},[17,2543,37],{},[12,2545,47],{"id":46},[17,2547,50],{},[12,2549,54],{"id":53},[17,2551,57],{},[12,2553,61],{"id":60},[63,2555,2556],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2557,2558,2562],{"__ignoreMap":68},[73,2559,2560],{"class":75,"line":76},[73,2561,80],{"class":79},[73,2563,2564],{"class":75,"line":83},[73,2565,87],{"class":86},[89,2567,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2569},[2570,2571,2572,2573,2574,2575,2576,2577],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate\u002Fcloud-flows\u002Fdataverse\u002Ftrigger-from-dataverse",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002F02.cloud-flows\u002Fdataverse\u002Ftrigger-from-dataverse",[120,121,122],"_pTly2QnskXsdMTDQ5K5xdMsoR0m6gR8j0CW1oUYJVc",{"id":2586,"title":6,"author":7,"body":2587,"canonical":102,"category":2641,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2642,"navigation":108,"order":372,"path":2643,"seo":2644,"stem":2645,"summary":118,"tags":2646,"updated":106,"__hash__":2647},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002Findex.md",{"type":9,"value":2588,"toc":2631},[2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2629],[12,2590,15],{"id":14},[17,2592,19],{},[12,2594,23],{"id":22},[12,2596,27],{"id":26},[17,2598,30],{},[12,2600,34],{"id":33},[17,2602,37],{},[12,2604,41],{"id":40},[17,2606,37],{},[12,2608,47],{"id":46},[17,2610,50],{},[12,2612,54],{"id":53},[17,2614,57],{},[12,2616,61],{"id":60},[63,2618,2619],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2620,2621,2625],{"__ignoreMap":68},[73,2622,2623],{"class":75,"line":76},[73,2624,80],{"class":79},[73,2626,2627],{"class":75,"line":83},[73,2628,87],{"class":86},[89,2630,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2632},[2633,2634,2635,2636,2637,2638,2639,2640],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-automate",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F04.power-automate\u002Findex",[120,121,122],"HuUF3MXtqKvWVyqi3iDO2opCvBYevO7-QkornKitvbc",{"id":2649,"title":6,"author":7,"body":2650,"canonical":102,"category":2704,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2705,"navigation":108,"order":83,"path":2706,"seo":2707,"stem":2708,"summary":118,"tags":2709,"updated":106,"__hash__":2710},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fauthentication.md",{"type":9,"value":2651,"toc":2694},[2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2692],[12,2653,15],{"id":14},[17,2655,19],{},[12,2657,23],{"id":22},[12,2659,27],{"id":26},[17,2661,30],{},[12,2663,34],{"id":33},[17,2665,37],{},[12,2667,41],{"id":40},[17,2669,37],{},[12,2671,47],{"id":46},[17,2673,50],{},[12,2675,54],{"id":53},[17,2677,57],{},[12,2679,61],{"id":60},[63,2681,2682],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2683,2684,2688],{"__ignoreMap":68},[73,2685,2686],{"class":75,"line":76},[73,2687,80],{"class":79},[73,2689,2690],{"class":75,"line":83},[73,2691,87],{"class":86},[89,2693,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2695},[2696,2697,2698,2699,2700,2701,2702,2703],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fadvanced\u002Fauthentication",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fauthentication",[120,121,122],"n8PuqxFeonu2-Aq8vJw_wDw6kwhPOvCF_SIx2yh7NDk",{"id":2712,"title":6,"author":7,"body":2713,"canonical":102,"category":2767,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2768,"navigation":108,"order":372,"path":2769,"seo":2770,"stem":2771,"summary":118,"tags":2772,"updated":106,"__hash__":2773},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fcustom-js-and-css.md",{"type":9,"value":2714,"toc":2757},[2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2755],[12,2716,15],{"id":14},[17,2718,19],{},[12,2720,23],{"id":22},[12,2722,27],{"id":26},[17,2724,30],{},[12,2726,34],{"id":33},[17,2728,37],{},[12,2730,41],{"id":40},[17,2732,37],{},[12,2734,47],{"id":46},[17,2736,50],{},[12,2738,54],{"id":53},[17,2740,57],{},[12,2742,61],{"id":60},[63,2744,2745],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2746,2747,2751],{"__ignoreMap":68},[73,2748,2749],{"class":75,"line":76},[73,2750,80],{"class":79},[73,2752,2753],{"class":75,"line":83},[73,2754,87],{"class":86},[89,2756,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2758},[2759,2760,2761,2762,2763,2764,2765,2766],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fadvanced\u002Fcustom-js-and-css",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fcustom-js-and-css",[120,121,122],"qXJdw2luT1K1eNUz3C4m06cDN48MCQFbxJaCW3k0gPM",{"id":2775,"title":6,"author":7,"body":2776,"canonical":102,"category":2830,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2831,"navigation":108,"order":76,"path":2832,"seo":2833,"stem":2834,"summary":118,"tags":2835,"updated":106,"__hash__":2836},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Findex.md",{"type":9,"value":2777,"toc":2820},[2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2818],[12,2779,15],{"id":14},[17,2781,19],{},[12,2783,23],{"id":22},[12,2785,27],{"id":26},[17,2787,30],{},[12,2789,34],{"id":33},[17,2791,37],{},[12,2793,41],{"id":40},[17,2795,37],{},[12,2797,47],{"id":46},[17,2799,50],{},[12,2801,54],{"id":53},[17,2803,57],{},[12,2805,61],{"id":60},[63,2807,2808],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2809,2810,2814],{"__ignoreMap":68},[73,2811,2812],{"class":75,"line":76},[73,2813,80],{"class":79},[73,2815,2816],{"class":75,"line":83},[73,2817,87],{"class":86},[89,2819,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2821},[2822,2823,2824,2825,2826,2827,2828,2829],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fadvanced",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Findex",[120,121,122],"HWrXtZ2RiSa1E2nGNP2QigxQ2WQVHq6wjmF81LHPE38",{"id":2838,"title":6,"author":7,"body":2839,"canonical":102,"category":2893,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2894,"navigation":108,"order":436,"path":2895,"seo":2896,"stem":2897,"summary":118,"tags":2898,"updated":106,"__hash__":2899},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fperformance-best-practices.md",{"type":9,"value":2840,"toc":2883},[2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2881],[12,2842,15],{"id":14},[17,2844,19],{},[12,2846,23],{"id":22},[12,2848,27],{"id":26},[17,2850,30],{},[12,2852,34],{"id":33},[17,2854,37],{},[12,2856,41],{"id":40},[17,2858,37],{},[12,2860,47],{"id":46},[17,2862,50],{},[12,2864,54],{"id":53},[17,2866,57],{},[12,2868,61],{"id":60},[63,2870,2871],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2872,2873,2877],{"__ignoreMap":68},[73,2874,2875],{"class":75,"line":76},[73,2876,80],{"class":79},[73,2878,2879],{"class":75,"line":83},[73,2880,87],{"class":86},[89,2882,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2884},[2885,2886,2887,2888,2889,2890,2891,2892],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fadvanced\u002Fperformance-best-practices",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fadvanced\u002Fperformance-best-practices",[120,121,122],"ywBc7eWhIa2PSJncxqNKazzdF09yzWCEDg5Ou8vI7E4",{"id":2901,"title":6,"author":7,"body":2902,"canonical":102,"category":2956,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":2957,"navigation":108,"order":83,"path":2958,"seo":2959,"stem":2960,"summary":118,"tags":2961,"updated":106,"__hash__":2962},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Farchitecture.md",{"type":9,"value":2903,"toc":2946},[2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2944],[12,2905,15],{"id":14},[17,2907,19],{},[12,2909,23],{"id":22},[12,2911,27],{"id":26},[17,2913,30],{},[12,2915,34],{"id":33},[17,2917,37],{},[12,2919,41],{"id":40},[17,2921,37],{},[12,2923,47],{"id":46},[17,2925,50],{},[12,2927,54],{"id":53},[17,2929,57],{},[12,2931,61],{"id":60},[63,2933,2934],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2935,2936,2940],{"__ignoreMap":68},[73,2937,2938],{"class":75,"line":76},[73,2939,80],{"class":79},[73,2941,2942],{"class":75,"line":83},[73,2943,87],{"class":86},[89,2945,91],{},{"title":68,"searchDepth":83,"depth":83,"links":2947},[2948,2949,2950,2951,2952,2953,2954,2955],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fconcepts\u002Farchitecture",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Farchitecture",[120,121,122],"EAyVkZqCzZx6bw8MEV5WpBSR8yBpKsIROBoFbETec_Q",{"id":2964,"title":6,"author":7,"body":2965,"canonical":102,"category":3019,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3020,"navigation":108,"order":76,"path":3021,"seo":3022,"stem":3023,"summary":118,"tags":3024,"updated":106,"__hash__":3025},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Findex.md",{"type":9,"value":2966,"toc":3009},[2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,3007],[12,2968,15],{"id":14},[17,2970,19],{},[12,2972,23],{"id":22},[12,2974,27],{"id":26},[17,2976,30],{},[12,2978,34],{"id":33},[17,2980,37],{},[12,2982,41],{"id":40},[17,2984,37],{},[12,2986,47],{"id":46},[17,2988,50],{},[12,2990,54],{"id":53},[17,2992,57],{},[12,2994,61],{"id":60},[63,2996,2997],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,2998,2999,3003],{"__ignoreMap":68},[73,3000,3001],{"class":75,"line":76},[73,3002,80],{"class":79},[73,3004,3005],{"class":75,"line":83},[73,3006,87],{"class":86},[89,3008,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3010},[3011,3012,3013,3014,3015,3016,3017,3018],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fconcepts",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Findex",[120,121,122],"ZdpFDHDLvUpMAc2IG8RUYWk4-mCbD_Qs9Z9qn_dokkk",{"id":3027,"title":6,"author":7,"body":3028,"canonical":102,"category":3082,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3083,"navigation":108,"order":372,"path":3084,"seo":3085,"stem":3086,"summary":118,"tags":3087,"updated":106,"__hash__":3088},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Fsecurity-model.md",{"type":9,"value":3029,"toc":3072},[3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3070],[12,3031,15],{"id":14},[17,3033,19],{},[12,3035,23],{"id":22},[12,3037,27],{"id":26},[17,3039,30],{},[12,3041,34],{"id":33},[17,3043,37],{},[12,3045,41],{"id":40},[17,3047,37],{},[12,3049,47],{"id":46},[17,3051,50],{},[12,3053,54],{"id":53},[17,3055,57],{},[12,3057,61],{"id":60},[63,3059,3060],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3061,3062,3066],{"__ignoreMap":68},[73,3063,3064],{"class":75,"line":76},[73,3065,80],{"class":79},[73,3067,3068],{"class":75,"line":83},[73,3069,87],{"class":86},[89,3071,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3073},[3074,3075,3076,3077,3078,3079,3080,3081],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fconcepts\u002Fsecurity-model",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fconcepts\u002Fsecurity-model",[120,121,122],"rDVSnhZ0LZkx5_9FpD_GEUqCzSFr4IGDOoX_Nd8y0AM",{"id":3090,"title":6,"author":7,"body":3091,"canonical":102,"category":3145,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3146,"navigation":108,"order":83,"path":3147,"seo":3148,"stem":3149,"summary":118,"tags":3150,"updated":106,"__hash__":3151},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fcreate-site.md",{"type":9,"value":3092,"toc":3135},[3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3133],[12,3094,15],{"id":14},[17,3096,19],{},[12,3098,23],{"id":22},[12,3100,27],{"id":26},[17,3102,30],{},[12,3104,34],{"id":33},[17,3106,37],{},[12,3108,41],{"id":40},[17,3110,37],{},[12,3112,47],{"id":46},[17,3114,50],{},[12,3116,54],{"id":53},[17,3118,57],{},[12,3120,61],{"id":60},[63,3122,3123],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3124,3125,3129],{"__ignoreMap":68},[73,3126,3127],{"class":75,"line":76},[73,3128,80],{"class":79},[73,3130,3131],{"class":75,"line":83},[73,3132,87],{"class":86},[89,3134,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3136},[3137,3138,3139,3140,3141,3142,3143,3144],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fdevelopment\u002Fcreate-site",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fcreate-site",[120,121,122],"Elm_SW2bpflBlBLEnhsnIto0PnAYH1SPjyaE8H4HhS8",{"id":3153,"title":6,"author":7,"body":3154,"canonical":102,"category":3208,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3209,"navigation":108,"order":308,"path":3210,"seo":3211,"stem":3212,"summary":118,"tags":3213,"updated":106,"__hash__":3214},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fforms-and-lists.md",{"type":9,"value":3155,"toc":3198},[3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3196],[12,3157,15],{"id":14},[17,3159,19],{},[12,3161,23],{"id":22},[12,3163,27],{"id":26},[17,3165,30],{},[12,3167,34],{"id":33},[17,3169,37],{},[12,3171,41],{"id":40},[17,3173,37],{},[12,3175,47],{"id":46},[17,3177,50],{},[12,3179,54],{"id":53},[17,3181,57],{},[12,3183,61],{"id":60},[63,3185,3186],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3187,3188,3192],{"__ignoreMap":68},[73,3189,3190],{"class":75,"line":76},[73,3191,80],{"class":79},[73,3193,3194],{"class":75,"line":83},[73,3195,87],{"class":86},[89,3197,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3199},[3200,3201,3202,3203,3204,3205,3206,3207],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fdevelopment\u002Fforms-and-lists",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fforms-and-lists",[120,121,122],"9sUpwffpH1czugxYrCNXL_i2scowpP1dco5IYiwZN1c",{"id":3216,"title":6,"author":7,"body":3217,"canonical":102,"category":3271,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3272,"navigation":108,"order":76,"path":3273,"seo":3274,"stem":3275,"summary":118,"tags":3276,"updated":106,"__hash__":3277},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Findex.md",{"type":9,"value":3218,"toc":3261},[3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3259],[12,3220,15],{"id":14},[17,3222,19],{},[12,3224,23],{"id":22},[12,3226,27],{"id":26},[17,3228,30],{},[12,3230,34],{"id":33},[17,3232,37],{},[12,3234,41],{"id":40},[17,3236,37],{},[12,3238,47],{"id":46},[17,3240,50],{},[12,3242,54],{"id":53},[17,3244,57],{},[12,3246,61],{"id":60},[63,3248,3249],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3250,3251,3255],{"__ignoreMap":68},[73,3252,3253],{"class":75,"line":76},[73,3254,80],{"class":79},[73,3256,3257],{"class":75,"line":83},[73,3258,87],{"class":86},[89,3260,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3262},[3263,3264,3265,3266,3267,3268,3269,3270],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fdevelopment",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Findex",[120,121,122],"WTzlk6BUsrATrf5H7FgrZr9rLAvW7a8V6N_G4TCumm4",{"id":3279,"title":6,"author":7,"body":3280,"canonical":102,"category":3334,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3335,"navigation":108,"order":436,"path":3336,"seo":3337,"stem":3338,"summary":118,"tags":3339,"updated":106,"__hash__":3340},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fusing-liquid.md",{"type":9,"value":3281,"toc":3324},[3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3322],[12,3283,15],{"id":14},[17,3285,19],{},[12,3287,23],{"id":22},[12,3289,27],{"id":26},[17,3291,30],{},[12,3293,34],{"id":33},[17,3295,37],{},[12,3297,41],{"id":40},[17,3299,37],{},[12,3301,47],{"id":46},[17,3303,50],{},[12,3305,54],{"id":53},[17,3307,57],{},[12,3309,61],{"id":60},[63,3311,3312],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3313,3314,3318],{"__ignoreMap":68},[73,3315,3316],{"class":75,"line":76},[73,3317,80],{"class":79},[73,3319,3320],{"class":75,"line":83},[73,3321,87],{"class":86},[89,3323,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3325},[3326,3327,3328,3329,3330,3331,3332,3333],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fdevelopment\u002Fusing-liquid",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fusing-liquid",[120,121,122],"_jqRGVTxJ14IHKvLfoV6ZiDrjqYl-wEEmygZDZrOX80",{"id":3342,"title":6,"author":7,"body":3343,"canonical":102,"category":3397,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3398,"navigation":108,"order":372,"path":3399,"seo":3400,"stem":3401,"summary":118,"tags":3402,"updated":106,"__hash__":3403},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fweb-pages-vs-web-templates.md",{"type":9,"value":3344,"toc":3387},[3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3385],[12,3346,15],{"id":14},[17,3348,19],{},[12,3350,23],{"id":22},[12,3352,27],{"id":26},[17,3354,30],{},[12,3356,34],{"id":33},[17,3358,37],{},[12,3360,41],{"id":40},[17,3362,37],{},[12,3364,47],{"id":46},[17,3366,50],{},[12,3368,54],{"id":53},[17,3370,57],{},[12,3372,61],{"id":60},[63,3374,3375],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3376,3377,3381],{"__ignoreMap":68},[73,3378,3379],{"class":75,"line":76},[73,3380,80],{"class":79},[73,3382,3383],{"class":75,"line":83},[73,3384,87],{"class":86},[89,3386,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3388},[3389,3390,3391,3392,3393,3394,3395,3396],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages\u002Fdevelopment\u002Fweb-pages-vs-web-templates",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Fdevelopment\u002Fweb-pages-vs-web-templates",[120,121,122],"YQV9xAFqsALiDRYorjTz7F6P0olBXBmrs8BTx2juMWE",{"id":3405,"title":6,"author":7,"body":3406,"canonical":102,"category":3460,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3461,"navigation":108,"order":83,"path":3462,"seo":3463,"stem":3464,"summary":118,"tags":3465,"updated":106,"__hash__":3466},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Findex.md",{"type":9,"value":3407,"toc":3450},[3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436,3448],[12,3409,15],{"id":14},[17,3411,19],{},[12,3413,23],{"id":22},[12,3415,27],{"id":26},[17,3417,30],{},[12,3419,34],{"id":33},[17,3421,37],{},[12,3423,41],{"id":40},[17,3425,37],{},[12,3427,47],{"id":46},[17,3429,50],{},[12,3431,54],{"id":53},[17,3433,57],{},[12,3435,61],{"id":60},[63,3437,3438],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3439,3440,3444],{"__ignoreMap":68},[73,3441,3442],{"class":75,"line":76},[73,3443,80],{"class":79},[73,3445,3446],{"class":75,"line":83},[73,3447,87],{"class":86},[89,3449,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3451},[3452,3453,3454,3455,3456,3457,3458,3459],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fpower-pages",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F05.power-pages\u002Findex",[120,121,122],"Er_h8nyAl_ryIpLRIcKfVQOqytBMWPJtOruTk5V58hc",{"id":3468,"title":3469,"author":7,"body":3470,"canonical":102,"category":3524,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3525,"navigation":108,"order":308,"path":3526,"seo":3527,"stem":3528,"summary":118,"tags":3529,"updated":106,"__hash__":3530},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Findex.md","AI Hub",{"type":9,"value":3471,"toc":3514},[3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3512],[12,3473,15],{"id":14},[17,3475,19],{},[12,3477,23],{"id":22},[12,3479,27],{"id":26},[17,3481,30],{},[12,3483,34],{"id":33},[17,3485,37],{},[12,3487,41],{"id":40},[17,3489,37],{},[12,3491,47],{"id":46},[17,3493,50],{},[12,3495,54],{"id":53},[17,3497,57],{},[12,3499,61],{"id":60},[63,3501,3502],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3503,3504,3508],{"__ignoreMap":68},[73,3505,3506],{"class":75,"line":76},[73,3507,80],{"class":79},[73,3509,3510],{"class":75,"line":83},[73,3511,87],{"class":86},[89,3513,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3515},[3516,3517,3518,3519,3520,3521,3522,3523],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fai-hub",{"title":3469,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Findex",[120,121,122],"Le13RN3fy1YSKcYdPjZAZVOHWxnklID4C8Kdu1WDaVw",{"id":3532,"title":6,"author":7,"body":3533,"canonical":102,"category":3587,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3588,"navigation":108,"order":436,"path":3589,"seo":3590,"stem":3591,"summary":118,"tags":3592,"updated":106,"__hash__":3593},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Flimitation.md",{"type":9,"value":3534,"toc":3577},[3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3575],[12,3536,15],{"id":14},[17,3538,19],{},[12,3540,23],{"id":22},[12,3542,27],{"id":26},[17,3544,30],{},[12,3546,34],{"id":33},[17,3548,37],{},[12,3550,41],{"id":40},[17,3552,37],{},[12,3554,47],{"id":46},[17,3556,50],{},[12,3558,54],{"id":53},[17,3560,57],{},[12,3562,61],{"id":60},[63,3564,3565],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3566,3567,3571],{"__ignoreMap":68},[73,3568,3569],{"class":75,"line":76},[73,3570,80],{"class":79},[73,3572,3573],{"class":75,"line":83},[73,3574,87],{"class":86},[89,3576,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3578},[3579,3580,3581,3582,3583,3584,3585,3586],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fai-hub\u002Flimitation",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Flimitation",[120,121,122],"FHUu0fKr-NR0hsCegOW_KbZwIaJClZSehjTW9efQpPo",{"id":3595,"title":6,"author":7,"body":3596,"canonical":102,"category":3650,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3651,"navigation":108,"order":83,"path":3652,"seo":3653,"stem":3654,"summary":118,"tags":3655,"updated":106,"__hash__":3656},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Foverview.md",{"type":9,"value":3597,"toc":3640},[3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3638],[12,3599,15],{"id":14},[17,3601,19],{},[12,3603,23],{"id":22},[12,3605,27],{"id":26},[17,3607,30],{},[12,3609,34],{"id":33},[17,3611,37],{},[12,3613,41],{"id":40},[17,3615,37],{},[12,3617,47],{"id":46},[17,3619,50],{},[12,3621,54],{"id":53},[17,3623,57],{},[12,3625,61],{"id":60},[63,3627,3628],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3629,3630,3634],{"__ignoreMap":68},[73,3631,3632],{"class":75,"line":76},[73,3633,80],{"class":79},[73,3635,3636],{"class":75,"line":83},[73,3637,87],{"class":86},[89,3639,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3641},[3642,3643,3644,3645,3646,3647,3648,3649],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fai-hub\u002Foverview",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Foverview",[120,121,122],"kNhwvc4j8pvb9DvGwiRaXTBf4hI_6lyII9m6WXvH_gg",{"id":3658,"title":6,"author":7,"body":3659,"canonical":102,"category":3713,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3714,"navigation":108,"order":372,"path":3715,"seo":3716,"stem":3717,"summary":118,"tags":3718,"updated":106,"__hash__":3719},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Fuse-cases.md",{"type":9,"value":3660,"toc":3703},[3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3701],[12,3662,15],{"id":14},[17,3664,19],{},[12,3666,23],{"id":22},[12,3668,27],{"id":26},[17,3670,30],{},[12,3672,34],{"id":33},[17,3674,37],{},[12,3676,41],{"id":40},[17,3678,37],{},[12,3680,47],{"id":46},[17,3682,50],{},[12,3684,54],{"id":53},[17,3686,57],{},[12,3688,61],{"id":60},[63,3690,3691],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3692,3693,3697],{"__ignoreMap":68},[73,3694,3695],{"class":75,"line":76},[73,3696,80],{"class":79},[73,3698,3699],{"class":75,"line":83},[73,3700,87],{"class":86},[89,3702,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3704},[3705,3706,3707,3708,3709,3710,3711,3712],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fai-hub\u002Fuse-cases",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fai-hub\u002Fuse-cases",[120,121,122],"Qhm4nizTIcbVgp2Nq1i7CILvaEjWHubgG-QCdiLjg18",{"id":3721,"title":6,"author":7,"body":3722,"canonical":102,"category":3776,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3777,"navigation":108,"order":83,"path":3778,"seo":3779,"stem":3780,"summary":118,"tags":3781,"updated":106,"__hash__":3782},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fcreate-first-copilot.md",{"type":9,"value":3723,"toc":3766},[3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752,3764],[12,3725,15],{"id":14},[17,3727,19],{},[12,3729,23],{"id":22},[12,3731,27],{"id":26},[17,3733,30],{},[12,3735,34],{"id":33},[17,3737,37],{},[12,3739,41],{"id":40},[17,3741,37],{},[12,3743,47],{"id":46},[17,3745,50],{},[12,3747,54],{"id":53},[17,3749,57],{},[12,3751,61],{"id":60},[63,3753,3754],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3755,3756,3760],{"__ignoreMap":68},[73,3757,3758],{"class":75,"line":76},[73,3759,80],{"class":79},[73,3761,3762],{"class":75,"line":83},[73,3763,87],{"class":86},[89,3765,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3767},[3768,3769,3770,3771,3772,3773,3774,3775],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fcreate-first-copilot",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fcreate-first-copilot",[120,121,122],"LNDfQMikvnCbhDbJsdUkXqsbCW-uByQkILBsukIozOA",{"id":3784,"title":6,"author":7,"body":3785,"canonical":102,"category":3839,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3840,"navigation":108,"order":436,"path":3841,"seo":3842,"stem":3843,"summary":118,"tags":3844,"updated":106,"__hash__":3845},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fentities-and-variables.md",{"type":9,"value":3786,"toc":3829},[3787,3789,3791,3793,3795,3797,3799,3801,3803,3805,3807,3809,3811,3813,3815,3827],[12,3788,15],{"id":14},[17,3790,19],{},[12,3792,23],{"id":22},[12,3794,27],{"id":26},[17,3796,30],{},[12,3798,34],{"id":33},[17,3800,37],{},[12,3802,41],{"id":40},[17,3804,37],{},[12,3806,47],{"id":46},[17,3808,50],{},[12,3810,54],{"id":53},[17,3812,57],{},[12,3814,61],{"id":60},[63,3816,3817],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3818,3819,3823],{"__ignoreMap":68},[73,3820,3821],{"class":75,"line":76},[73,3822,80],{"class":79},[73,3824,3825],{"class":75,"line":83},[73,3826,87],{"class":86},[89,3828,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3830},[3831,3832,3833,3834,3835,3836,3837,3838],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fentities-and-variables",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Fentities-and-variables",[120,121,122],"Xhl3azKHYcpajQmOxp4Gp2x-xGfhw9fsQu04RXi7hmA",{"id":3847,"title":6,"author":7,"body":3848,"canonical":102,"category":3902,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3903,"navigation":108,"order":76,"path":3904,"seo":3905,"stem":3906,"summary":118,"tags":3907,"updated":106,"__hash__":3908},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Findex.md",{"type":9,"value":3849,"toc":3892},[3850,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3890],[12,3851,15],{"id":14},[17,3853,19],{},[12,3855,23],{"id":22},[12,3857,27],{"id":26},[17,3859,30],{},[12,3861,34],{"id":33},[17,3863,37],{},[12,3865,41],{"id":40},[17,3867,37],{},[12,3869,47],{"id":46},[17,3871,50],{},[12,3873,54],{"id":53},[17,3875,57],{},[12,3877,61],{"id":60},[63,3879,3880],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3881,3882,3886],{"__ignoreMap":68},[73,3883,3884],{"class":75,"line":76},[73,3885,80],{"class":79},[73,3887,3888],{"class":75,"line":83},[73,3889,87],{"class":86},[89,3891,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3893},[3894,3895,3896,3897,3898,3899,3900,3901],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fbuilding-copilots",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Findex",[120,121,122],"iw9ae6Mc3BqrOnyt4A8pj_PDEFk6roZicikmR1dbG6w",{"id":3910,"title":6,"author":7,"body":3911,"canonical":102,"category":3965,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":3966,"navigation":108,"order":308,"path":3967,"seo":3968,"stem":3969,"summary":118,"tags":3970,"updated":106,"__hash__":3971},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftesting-and-publishing.md",{"type":9,"value":3912,"toc":3955},[3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937,3939,3941,3953],[12,3914,15],{"id":14},[17,3916,19],{},[12,3918,23],{"id":22},[12,3920,27],{"id":26},[17,3922,30],{},[12,3924,34],{"id":33},[17,3926,37],{},[12,3928,41],{"id":40},[17,3930,37],{},[12,3932,47],{"id":46},[17,3934,50],{},[12,3936,54],{"id":53},[17,3938,57],{},[12,3940,61],{"id":60},[63,3942,3943],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,3944,3945,3949],{"__ignoreMap":68},[73,3946,3947],{"class":75,"line":76},[73,3948,80],{"class":79},[73,3950,3951],{"class":75,"line":83},[73,3952,87],{"class":86},[89,3954,91],{},{"title":68,"searchDepth":83,"depth":83,"links":3956},[3957,3958,3959,3960,3961,3962,3963,3964],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftesting-and-publishing",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftesting-and-publishing",[120,121,122],"6VSgh-Bggc_MhWnWtV142jneJH4iFjmv1qHFa6scnQ4",{"id":3973,"title":6,"author":7,"body":3974,"canonical":102,"category":4028,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4029,"navigation":108,"order":372,"path":4030,"seo":4031,"stem":4032,"summary":118,"tags":4033,"updated":106,"__hash__":4034},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftopics-and-triggers.md",{"type":9,"value":3975,"toc":4018},[3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4016],[12,3977,15],{"id":14},[17,3979,19],{},[12,3981,23],{"id":22},[12,3983,27],{"id":26},[17,3985,30],{},[12,3987,34],{"id":33},[17,3989,37],{},[12,3991,41],{"id":40},[17,3993,37],{},[12,3995,47],{"id":46},[17,3997,50],{},[12,3999,54],{"id":53},[17,4001,57],{},[12,4003,61],{"id":60},[63,4005,4006],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4007,4008,4012],{"__ignoreMap":68},[73,4009,4010],{"class":75,"line":76},[73,4011,80],{"class":79},[73,4013,4014],{"class":75,"line":83},[73,4015,87],{"class":86},[89,4017,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4019},[4020,4021,4022,4023,4024,4025,4026,4027],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftopics-and-triggers",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fbuilding-copilots\u002Ftopics-and-triggers",[120,121,122],"x1nZQzr_CUFpufRGJfVwt_b8r4qYgM8eJi2v4UOwdGs",{"id":4036,"title":6,"author":7,"body":4037,"canonical":102,"category":4091,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4092,"navigation":108,"order":83,"path":4093,"seo":4094,"stem":4095,"summary":118,"tags":4096,"updated":106,"__hash__":4097},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Farchitecture.md",{"type":9,"value":4038,"toc":4081},[4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065,4067,4079],[12,4040,15],{"id":14},[17,4042,19],{},[12,4044,23],{"id":22},[12,4046,27],{"id":26},[17,4048,30],{},[12,4050,34],{"id":33},[17,4052,37],{},[12,4054,41],{"id":40},[17,4056,37],{},[12,4058,47],{"id":46},[17,4060,50],{},[12,4062,54],{"id":53},[17,4064,57],{},[12,4066,61],{"id":60},[63,4068,4069],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4070,4071,4075],{"__ignoreMap":68},[73,4072,4073],{"class":75,"line":76},[73,4074,80],{"class":79},[73,4076,4077],{"class":75,"line":83},[73,4078,87],{"class":86},[89,4080,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4082},[4083,4084,4085,4086,4087,4088,4089,4090],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fconcepts\u002Farchitecture",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Farchitecture",[120,121,122],"nycCn9a8g2YoFQxasZtctCLg4rqcrJuq3NOtF3uz2vg",{"id":4099,"title":6,"author":7,"body":4100,"canonical":102,"category":4154,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4155,"navigation":108,"order":76,"path":4156,"seo":4157,"stem":4158,"summary":118,"tags":4159,"updated":106,"__hash__":4160},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Findex.md",{"type":9,"value":4101,"toc":4144},[4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4130,4142],[12,4103,15],{"id":14},[17,4105,19],{},[12,4107,23],{"id":22},[12,4109,27],{"id":26},[17,4111,30],{},[12,4113,34],{"id":33},[17,4115,37],{},[12,4117,41],{"id":40},[17,4119,37],{},[12,4121,47],{"id":46},[17,4123,50],{},[12,4125,54],{"id":53},[17,4127,57],{},[12,4129,61],{"id":60},[63,4131,4132],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4133,4134,4138],{"__ignoreMap":68},[73,4135,4136],{"class":75,"line":76},[73,4137,80],{"class":79},[73,4139,4140],{"class":75,"line":83},[73,4141,87],{"class":86},[89,4143,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4145},[4146,4147,4148,4149,4150,4151,4152,4153],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fconcepts",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Findex",[120,121,122],"tzeoiXYf7S41HpbSwQzrtjcf75bxIv2D9N2IlElpb64",{"id":4162,"title":6,"author":7,"body":4163,"canonical":102,"category":4217,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4218,"navigation":108,"order":372,"path":4219,"seo":4220,"stem":4221,"summary":118,"tags":4222,"updated":106,"__hash__":4223},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Fwhen-to-use.md",{"type":9,"value":4164,"toc":4207},[4165,4167,4169,4171,4173,4175,4177,4179,4181,4183,4185,4187,4189,4191,4193,4205],[12,4166,15],{"id":14},[17,4168,19],{},[12,4170,23],{"id":22},[12,4172,27],{"id":26},[17,4174,30],{},[12,4176,34],{"id":33},[17,4178,37],{},[12,4180,41],{"id":40},[17,4182,37],{},[12,4184,47],{"id":46},[17,4186,50],{},[12,4188,54],{"id":53},[17,4190,57],{},[12,4192,61],{"id":60},[63,4194,4195],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4196,4197,4201],{"__ignoreMap":68},[73,4198,4199],{"class":75,"line":76},[73,4200,80],{"class":79},[73,4202,4203],{"class":75,"line":83},[73,4204,87],{"class":86},[89,4206,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4208},[4209,4210,4211,4212,4213,4214,4215,4216],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fconcepts\u002Fwhen-to-use",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fconcepts\u002Fwhen-to-use",[120,121,122],"0oTetFDgF_WjlIA9prSQti65-In3z40EeX-_V6iW4zU",{"id":4225,"title":6,"author":7,"body":4226,"canonical":102,"category":4280,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4281,"navigation":108,"order":372,"path":4282,"seo":4283,"stem":4284,"summary":118,"tags":4285,"updated":106,"__hash__":4286},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Fenvironment-strategy.md",{"type":9,"value":4227,"toc":4270},[4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4268],[12,4229,15],{"id":14},[17,4231,19],{},[12,4233,23],{"id":22},[12,4235,27],{"id":26},[17,4237,30],{},[12,4239,34],{"id":33},[17,4241,37],{},[12,4243,41],{"id":40},[17,4245,37],{},[12,4247,47],{"id":46},[17,4249,50],{},[12,4251,54],{"id":53},[17,4253,57],{},[12,4255,61],{"id":60},[63,4257,4258],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4259,4260,4264],{"__ignoreMap":68},[73,4261,4262],{"class":75,"line":76},[73,4263,80],{"class":79},[73,4265,4266],{"class":75,"line":83},[73,4267,87],{"class":86},[89,4269,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4271},[4272,4273,4274,4275,4276,4277,4278,4279],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fgovernance\u002Fenvironment-strategy",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Fenvironment-strategy",[120,121,122],"-DQ3fhNlVOi9m7BUfkHTqgCvnYiGF56yr1ITh9Q0T04",{"id":4288,"title":6,"author":7,"body":4289,"canonical":102,"category":4343,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4344,"navigation":108,"order":76,"path":4345,"seo":4346,"stem":4347,"summary":118,"tags":4348,"updated":106,"__hash__":4349},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Findex.md",{"type":9,"value":4290,"toc":4333},[4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4331],[12,4292,15],{"id":14},[17,4294,19],{},[12,4296,23],{"id":22},[12,4298,27],{"id":26},[17,4300,30],{},[12,4302,34],{"id":33},[17,4304,37],{},[12,4306,41],{"id":40},[17,4308,37],{},[12,4310,47],{"id":46},[17,4312,50],{},[12,4314,54],{"id":53},[17,4316,57],{},[12,4318,61],{"id":60},[63,4320,4321],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4322,4323,4327],{"__ignoreMap":68},[73,4324,4325],{"class":75,"line":76},[73,4326,80],{"class":79},[73,4328,4329],{"class":75,"line":83},[73,4330,87],{"class":86},[89,4332,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4334},[4335,4336,4337,4338,4339,4340,4341,4342],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fgovernance",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Findex",[120,121,122],"Y8vJNNuSWUAJ2RoV3mXptu5xZ6WJu8Go7-Uid0B4Qqc",{"id":4351,"title":6,"author":7,"body":4352,"canonical":102,"category":4406,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4407,"navigation":108,"order":83,"path":4408,"seo":4409,"stem":4410,"summary":118,"tags":4411,"updated":106,"__hash__":4412},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Fsecurity-and-access-control.md",{"type":9,"value":4353,"toc":4396},[4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380,4382,4394],[12,4355,15],{"id":14},[17,4357,19],{},[12,4359,23],{"id":22},[12,4361,27],{"id":26},[17,4363,30],{},[12,4365,34],{"id":33},[17,4367,37],{},[12,4369,41],{"id":40},[17,4371,37],{},[12,4373,47],{"id":46},[17,4375,50],{},[12,4377,54],{"id":53},[17,4379,57],{},[12,4381,61],{"id":60},[63,4383,4384],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4385,4386,4390],{"__ignoreMap":68},[73,4387,4388],{"class":75,"line":76},[73,4389,80],{"class":79},[73,4391,4392],{"class":75,"line":83},[73,4393,87],{"class":86},[89,4395,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4397},[4398,4399,4400,4401,4402,4403,4404,4405],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fgovernance\u002Fsecurity-and-access-control",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fgovernance\u002Fsecurity-and-access-control",[120,121,122],"SSfeRpHSLq2TlkNbi_Q3I5catXEGy-6b7L7EXLiv2YI",{"id":4414,"title":6,"author":7,"body":4415,"canonical":102,"category":4469,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4470,"navigation":108,"order":436,"path":4471,"seo":4472,"stem":4473,"summary":118,"tags":4474,"updated":106,"__hash__":4475},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Findex.md",{"type":9,"value":4416,"toc":4459},[4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4457],[12,4418,15],{"id":14},[17,4420,19],{},[12,4422,23],{"id":22},[12,4424,27],{"id":26},[17,4426,30],{},[12,4428,34],{"id":33},[17,4430,37],{},[12,4432,41],{"id":40},[17,4434,37],{},[12,4436,47],{"id":46},[17,4438,50],{},[12,4440,54],{"id":53},[17,4442,57],{},[12,4444,61],{"id":60},[63,4446,4447],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4448,4449,4453],{"__ignoreMap":68},[73,4450,4451],{"class":75,"line":76},[73,4452,80],{"class":79},[73,4454,4455],{"class":75,"line":83},[73,4456,87],{"class":86},[89,4458,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4460},[4461,4462,4463,4464,4465,4466,4467,4468],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Findex",[120,121,122],"b0C1JQ8bYSM5qWxKDmXirkzru2Gi36P_eF87OXClJBk",{"id":4477,"title":6,"author":7,"body":4478,"canonical":102,"category":4532,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4533,"navigation":108,"order":83,"path":4534,"seo":4535,"stem":4536,"summary":118,"tags":4537,"updated":106,"__hash__":4538},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fcall-power-automate.md",{"type":9,"value":4479,"toc":4522},[4480,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4520],[12,4481,15],{"id":14},[17,4483,19],{},[12,4485,23],{"id":22},[12,4487,27],{"id":26},[17,4489,30],{},[12,4491,34],{"id":33},[17,4493,37],{},[12,4495,41],{"id":40},[17,4497,37],{},[12,4499,47],{"id":46},[17,4501,50],{},[12,4503,54],{"id":53},[17,4505,57],{},[12,4507,61],{"id":60},[63,4509,4510],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4511,4512,4516],{"__ignoreMap":68},[73,4513,4514],{"class":75,"line":76},[73,4515,80],{"class":79},[73,4517,4518],{"class":75,"line":83},[73,4519,87],{"class":86},[89,4521,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4523},[4524,4525,4526,4527,4528,4529,4530,4531],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fintegrations\u002Fcall-power-automate",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fcall-power-automate",[120,121,122],"9EZZQjQUOn3gVB0b-Hy_mjGhyd8qZn55I_vCV0Pc7MM",{"id":4540,"title":6,"author":7,"body":4541,"canonical":102,"category":4595,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4596,"navigation":108,"order":436,"path":4597,"seo":4598,"stem":4599,"summary":118,"tags":4600,"updated":106,"__hash__":4601},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fconnect-external-apis.md",{"type":9,"value":4542,"toc":4585},[4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4583],[12,4544,15],{"id":14},[17,4546,19],{},[12,4548,23],{"id":22},[12,4550,27],{"id":26},[17,4552,30],{},[12,4554,34],{"id":33},[17,4556,37],{},[12,4558,41],{"id":40},[17,4560,37],{},[12,4562,47],{"id":46},[17,4564,50],{},[12,4566,54],{"id":53},[17,4568,57],{},[12,4570,61],{"id":60},[63,4572,4573],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4574,4575,4579],{"__ignoreMap":68},[73,4576,4577],{"class":75,"line":76},[73,4578,80],{"class":79},[73,4580,4581],{"class":75,"line":83},[73,4582,87],{"class":86},[89,4584,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4586},[4587,4588,4589,4590,4591,4592,4593,4594],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fintegrations\u002Fconnect-external-apis",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fconnect-external-apis",[120,121,122],"rIhyMcNj3kw7BMgcSI4gp9sS0zUH83xIbn61MqJLXx8",{"id":4603,"title":6,"author":7,"body":4604,"canonical":102,"category":4658,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4659,"navigation":108,"order":76,"path":4660,"seo":4661,"stem":4662,"summary":118,"tags":4663,"updated":106,"__hash__":4664},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Findex.md",{"type":9,"value":4605,"toc":4648},[4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634,4646],[12,4607,15],{"id":14},[17,4609,19],{},[12,4611,23],{"id":22},[12,4613,27],{"id":26},[17,4615,30],{},[12,4617,34],{"id":33},[17,4619,37],{},[12,4621,41],{"id":40},[17,4623,37],{},[12,4625,47],{"id":46},[17,4627,50],{},[12,4629,54],{"id":53},[17,4631,57],{},[12,4633,61],{"id":60},[63,4635,4636],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4637,4638,4642],{"__ignoreMap":68},[73,4639,4640],{"class":75,"line":76},[73,4641,80],{"class":79},[73,4643,4644],{"class":75,"line":83},[73,4645,87],{"class":86},[89,4647,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4649},[4650,4651,4652,4653,4654,4655,4656,4657],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fintegrations",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Findex",[120,121,122],"nTOhHkMEPzcygo-ler4e7UtAlZKIb66jMOEJVv86UkA",{"id":4666,"title":6,"author":7,"body":4667,"canonical":102,"category":4721,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4722,"navigation":108,"order":372,"path":4723,"seo":4724,"stem":4725,"summary":118,"tags":4726,"updated":106,"__hash__":4727},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fuse-dataverse.md",{"type":9,"value":4668,"toc":4711},[4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697,4709],[12,4670,15],{"id":14},[17,4672,19],{},[12,4674,23],{"id":22},[12,4676,27],{"id":26},[17,4678,30],{},[12,4680,34],{"id":33},[17,4682,37],{},[12,4684,41],{"id":40},[17,4686,37],{},[12,4688,47],{"id":46},[17,4690,50],{},[12,4692,54],{"id":53},[17,4694,57],{},[12,4696,61],{"id":60},[63,4698,4699],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4700,4701,4705],{"__ignoreMap":68},[73,4702,4703],{"class":75,"line":76},[73,4704,80],{"class":79},[73,4706,4707],{"class":75,"line":83},[73,4708,87],{"class":86},[89,4710,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4712},[4713,4714,4715,4716,4717,4718,4719,4720],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform\u002Fcomponents\u002Fai\u002Fcopilot-studio\u002Fintegrations\u002Fuse-dataverse",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002F02.components\u002F07.ai\u002Fcopilot-studio\u002Fintegrations\u002Fuse-dataverse",[120,121,122],"oVMJDFk39kw_9T-wExQfiQ-DdY0j9tn79dH2qm-wbh4",{"id":4729,"title":6,"author":7,"body":4730,"canonical":102,"category":4784,"date":106,"description":107,"draft":108,"extension":109,"featured":110,"image":111,"imageAlt":112,"meta":4785,"navigation":108,"order":76,"path":4786,"seo":4787,"stem":4788,"summary":118,"tags":4789,"updated":106,"__hash__":4790},"blog\u002Fblog\u002F01.business-apps\u002F01.power-platform\u002Findex.md",{"type":9,"value":4731,"toc":4774},[4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4772],[12,4733,15],{"id":14},[17,4735,19],{},[12,4737,23],{"id":22},[12,4739,27],{"id":26},[17,4741,30],{},[12,4743,34],{"id":33},[17,4745,37],{},[12,4747,41],{"id":40},[17,4749,37],{},[12,4751,47],{"id":46},[17,4753,50],{},[12,4755,54],{"id":53},[17,4757,57],{},[12,4759,61],{"id":60},[63,4761,4762],{"className":65,"code":66,"language":67,"meta":68,"style":68},[70,4763,4764,4768],{"__ignoreMap":68},[73,4765,4766],{"class":75,"line":76},[73,4767,80],{"class":79},[73,4769,4770],{"class":75,"line":83},[73,4771,87],{"class":86},[89,4773,91],{},{"title":68,"searchDepth":83,"depth":83,"links":4775},[4776,4777,4778,4779,4780,4781,4782,4783],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":33,"depth":83,"text":34},{"id":40,"depth":83,"text":41},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":60,"depth":83,"text":61},{"label":104,"key":105},{},"\u002Fblog\u002Fbusiness-apps\u002Fpower-platform",{"title":6,"description":107},"blog\u002F01.business-apps\u002F01.power-platform\u002Findex",[120,121,122],"w39dlJQkYypJBTA71uaq-P0YPf3ilQ58QMpWYqlHZRk",{"id":4792,"title":15,"author":4793,"body":4794,"canonical":102,"category":5018,"date":5021,"description":5022,"draft":110,"extension":109,"featured":108,"image":5023,"imageAlt":5024,"meta":5025,"navigation":108,"order":76,"path":5026,"seo":5027,"stem":5029,"summary":5030,"tags":5031,"updated":5021,"__hash__":5034},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F02.power-platform-introduction.md","Kundan Sah",{"type":9,"value":4795,"toc":5007},[4796,4798,4806,4809,4811,4814,4817,4819,4822,4838,4842,4845,4868,4871,4875,4881,4885,4892,4895,4968,4970,4987,4989,5000,5004],[12,4797,15],{"id":14},[17,4799,4800,4801,4805],{},"Microsoft Power platform is multi-tenant SaaS application platform ",[4802,4803,4804],"strong",{},"built on Azure"," that enables organization to build business applications,\nautomate processes,analyze data and expose services with a mix of low code and pro code capabilities.",[17,4807,4808],{},"It is security first, governed business platform designed for enterprise grade applications.",[12,4810,23],{"id":22},[17,4812,4813],{},"Power Platform is used to solve business problems by enabling rapid delivery with flexibility to\nscale when needed.",[17,4815,4816],{},"It achieves this by abstracting the infrastructure concerns and enforcing security.",[12,4818,27],{"id":26},[17,4820,4821],{},"Before working with Power Platform, you should have:",[4823,4824,4825,4829,4832,4835],"ol",{},[4826,4827,4828],"li",{},"Basic understanding of business processes",[4826,4830,4831],{},"Familiar with data fundamentals",[4826,4833,4834],{},"Logical thinking",[4826,4836,4837],{},"License and environment awareness",[12,4839,4841],{"id":4840},"key-components","Key components",[17,4843,4844],{},"Power platform consists of below components:",[4823,4846,4847,4850,4853,4856,4859,4862,4865],{},[4826,4848,4849],{},"Dataverse - A data platform designed with security first approach",[4826,4851,4852],{},"Powerapps - The UI and application layer",[4826,4854,4855],{},"Power Automate - Workflow and process automation",[4826,4857,4858],{},"Power BI - Data visualization and analytics",[4826,4860,4861],{},"Power pages -  External facing website for customers and partners",[4826,4863,4864],{},"Copilot Studio - Tools for building AI-powered agents",[4826,4866,4867],{},"AI Hub - AI capabilities such as Document Intelligence",[17,4869,4870],{},"All of the above runs on Azure and are authenticated by Entra ID.",[12,4872,4874],{"id":4873},"architecture","Architecture",[17,4876,4877],{},[4878,4879],"img",{"alt":4874,"src":4880},"\u002Fimages\u002Fpowerplatform_arch.png",[12,4882,4884],{"id":4883},"role-based-perspective","Role based perspective",[4823,4886,4887],{},[4826,4888,4889],{},[4802,4890,4891],{},"Admin",[17,4893,4894],{},"Administrator are primarily responsible for below tasks:\n- Maintaining platform health\n- Defining Environment Strategy\n- Capacity manangement\n- Governance & DLP\n- Access manangement",[4823,4896,4897,4921,4943],{"start":83},[4826,4898,4899,4902,4905,4906],{},[4802,4900,4901],{},"Developer",[4903,4904],"br",{},"Developer must realise the environment constraints and develop the application with below considerations",[4907,4908,4909,4912,4915,4918],"ul",{},[4826,4910,4911],{},"Throtling scenarios and retry logic",[4826,4913,4914],{},"Transaction boundries",[4826,4916,4917],{},"Saas exceution limits",[4826,4919,4920],{},"Appropriate use of power automate and plugins for optimal performance",[4826,4922,4923,4926,4928,4929],{},[4802,4924,4925],{},"Architect",[4903,4927],{},"Architecht must decide application boundries to ensure it remains scalable with growing data and users.\nBelow are examples of such decisions:",[4907,4930,4931,4934,4937,4940],{},[4826,4932,4933],{},"Azure Integrations",[4826,4935,4936],{},"Plugin vs Custom Workflow vs Power Automate",[4826,4938,4939],{},"Synchronous vs asynchronous plugins",[4826,4941,4942],{},"Canvas App vs Model Driven application",[4826,4944,4945,4948,4950,4951],{},[4802,4946,4947],{},"User",[4903,4949],{},"User does not design the application but has below expectations from the application",[4907,4952,4953,4956,4959,4962,4965],{},[4826,4954,4955],{},"Predictable behaviour",[4826,4957,4958],{},"Fast UI",[4826,4960,4961],{},"Reliable automation",[4826,4963,4964],{},"Minimum downtime",[4826,4966,4967],{},"Accurate and complete data",[12,4969,47],{"id":46},[4823,4971,4972,4975,4978,4981,4984],{},[4826,4973,4974],{},"Best for business process applications",[4826,4976,4977],{},"Design asynchronous exceution where possible",[4826,4979,4980],{},"Centralize governance using DLP(Data Loss Prevention) policy",[4826,4982,4983],{},"Avoid heavy business logic in the UI layer",[4826,4985,4986],{},"Do not ignore ALM (Application Lifecycle Management) practices",[12,4988,54],{"id":53},[4823,4990,4991,4994,4997],{},[4826,4992,4993],{},"Considering dataverse as SQL database",[4826,4995,4996],{},"Overloading dataverse with synchronous plugins\u002Freal-time logics",[4826,4998,4999],{},"Assuming low code means low governance",[12,5001,5003],{"id":5002},"summary","Summary",[17,5005,5006],{},"Microsoft Power Platform is a powerful low-code SaaS platform for building secure, scalable, and business-centric applications. When designed correctly, it enables organizations to optimize processes while maintaining governance, performance, and enterprise-grade security.",{"title":68,"searchDepth":83,"depth":83,"links":5008},[5009,5010,5011,5012,5013,5014,5015,5016,5017],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":26,"depth":83,"text":27},{"id":4840,"depth":83,"text":4841},{"id":4873,"depth":83,"text":4874},{"id":4883,"depth":83,"text":4884},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":5019,"key":5020},"Power Platform Concepts","power-platform-concepts","2026-01-21","Learn the core concepts of Microsoft Power Platform, including Power Apps, Power Automate, Power BI, and Dataverse, and how they work together to build business solutions.","\u002Fimages\u002Fpower-platform-introduction.jpg","Diagram showing Power Apps, Power Automate, Power BI, and Dataverse connected within Microsoft Power Platform",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpower-platform-introduction",{"title":5028,"description":5022},"Power Platform Introduction: Core Concepts & Architecture","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F02.power-platform-introduction","A foundational overview of Microsoft Power Platform and its core building blocks.",[122,120,5032,5033],"power-apps","power-automate","MoD9ETTYF4CULhWx9CODw_sUj29_m5euZXo63n1FN1Q",{"id":5036,"title":5037,"author":4793,"body":5038,"canonical":102,"category":5421,"date":5021,"description":5422,"draft":110,"extension":109,"featured":108,"image":5423,"imageAlt":5424,"meta":5425,"navigation":108,"order":83,"path":5426,"seo":5427,"stem":5429,"summary":5430,"tags":5431,"updated":5021,"__hash__":5434},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F03.power-platform-security.md","Identity and Security",{"type":9,"value":5039,"toc":5411},[5040,5042,5045,5059,5062,5065,5079,5082,5085,5093,5095,5098,5115,5117,5120,5140,5143,5146,5152,5156,5181,5184,5242,5245,5262,5265,5282,5288,5291,5305,5308,5316,5319,5330,5337,5345,5348,5350,5379,5381,5392,5394,5397],[12,5041,15],{"id":14},[17,5043,5044],{},"Power platform is built on identity centric design and hence follows below four non-negotiable principles",[4907,5046,5047,5050,5053,5056],{},[4826,5048,5049],{},"Identity first",[4826,5051,5052],{},"Security by default",[4826,5054,5055],{},"Metadata driven",[4826,5057,5058],{},"Governed extensibly",[17,5060,5061],{},"So, what does it mean by identity in Power Platform?",[17,5063,5064],{},"Identity answers below four questions at runtime",[4907,5066,5067,5070,5073,5076],{},[4826,5068,5069],{},"Who is calling?",[4826,5071,5072],{},"Are they authenticated?",[4826,5074,5075],{},"What are they allowed to do?",[4826,5077,5078],{},"In which environment and context?",[17,5080,5081],{},"These questions needs to be answered every time for each interaction and just at login.",[17,5083,5084],{},"So we can safely say identity in Power platform is not just another Azure Entra ID setup instead it is",[63,5086,5091],{"className":5087,"code":5089,"language":5090},[5088],"language-text","Authentication + Authorization + Context + Governance\n","text",[70,5092,5089],{"__ignoreMap":68},[12,5094,23],{"id":22},[17,5096,5097],{},"Every below interaction is authenticated via Microsoft Entra ID and executes under context of user or application identity.",[4907,5099,5100,5103,5106,5109,5112],{},[4826,5101,5102],{},"User action",[4826,5104,5105],{},"Power automate runs",[4826,5107,5108],{},"API calls",[4826,5110,5111],{},"Integration",[4826,5113,5114],{},"Copilot interaction",[12,5116,34],{"id":33},[17,5118,5119],{},"Identity in power platform consists of below core components",[4907,5121,5122,5125,5128,5131,5134,5137],{},[4826,5123,5124],{},"Microsoft Entra ID",[4826,5126,5127],{},"Users",[4826,5129,5130],{},"Security Groups",[4826,5132,5133],{},"Service Principals",[4826,5135,5136],{},"Managed Identity",[4826,5138,5139],{},"Conditional Access policies",[17,5141,5142],{},"All these services are consumed by power platform in addition to its role based access to determine if the\nuser is authorized to perform an action.",[17,5144,5145],{},"Detailed Technical security overview",[63,5147,5150],{"className":5148,"code":5149,"language":5090},[5088],"User\u002FApp\u002FFlow\u002FAPI\n        |\n        |-Requests Token\n        |\nMicrosoft Entra ID(Authentication and Token)\n        |\n        |- Issues Token(Scopes)\n        |\nPower Platform Service layer\n        |\n        |- Validates Token\n        |- License Validation\n        |- Environment access check\n        |- DLP\u002FGovernance\n        |\nDataverse Security exceution\n        |\n        |- Evaluates Business Unit\n        |- Evaluates Security roles\n        |- Evaluates Team Membership\n        |- Evaluates Record Sharing\n        |- Applies Record-Level Security\n        |\nExecution Allowed or Denied\n",[70,5151,5149],{"__ignoreMap":68},[12,5153,5155],{"id":5154},"identity-types-in-power-platform","Identity Types in Power Platform",[4823,5157,5158,5166,5174],{},[4826,5159,5160,5163,5165],{},[4802,5161,5162],{},"Human Users",[4903,5164],{},"They are real users of our application and used for interactive access from UI, manual approval and delegated automations.\nThey require license and are subject to conditional access and permission can change dynamically\nbased on security role and teams assigned.",[4826,5167,5168,5171,5173],{},[4802,5169,5170],{},"Service Principals(App Registration)",[4903,5172],{},"It is non interactive user with no UI access mostly used for system to system integration, running background process.\nAlthough no license is required for such user, explicit dataverse security roles need to be assigned.\nThey authenticate via client id and client secret or certificate to make api calls.\nIf proper role is not assigned, it will result in failure.",[4826,5175,5176,5178,5180],{},[4802,5177,5136],{},[4903,5179],{},"It is another type of non interactive user that is tied to Azure and mostly used in Azure related services like\nAzure Function, Logic Apps etc. Unlike Service Principals they are not tied to secret but bound by Azure resources.\nThey also needs to be assigned proper security role in dataverse for it to access dataverse via api.\nMost failure happens because of incorrect role assignment of such users.",[12,5182,5183],{"id":4883},"Role-Based Perspective",[4823,5185,5186,5238],{},[4826,5187,5188,5190,5192,5193,5210,5212,5213,5224,5226,5227],{},[4802,5189,4891],{},[4903,5191],{},"Power platform administrator plays a vital role in enforcing security and governance. They have below responsibilities\nwhich makes the environment secure:",[4907,5194,5195,5198,5201,5204,5207],{},[4826,5196,5197],{},"Tenant identity configuration via Security Groups",[4826,5199,5200],{},"License assignment to users",[4826,5202,5203],{},"Enforce governance via DLP policies",[4826,5205,5206],{},"Govern the roles assigned to user and Service principal",[4826,5208,5209],{},"Enforcing Conditional access",[4903,5211],{},"If these are not properly enforced, this may cause issues like",[4907,5214,5215,5218,5221],{},[4826,5216,5217],{},"Licensed user unable to access environment",[4826,5219,5220],{},"Integration authentication succeds but fails",[4826,5222,5223],{},"Conditional access blocks background process",[4903,5225],{},"To prevent from any unwanted failure, administrator must follow some guardrails as mentioned below:",[4907,5228,5229,5232,5235],{},[4826,5230,5231],{},"Never use personal account for integration",[4826,5233,5234],{},"Keep track of Service Principal centrally",[4826,5236,5237],{},"Align Conditional Access with automation needs",[4826,5239,5240],{},[4802,5241,4925],{},[17,5243,5244],{},"Architect plays a important role to design a system that is secured and accessible by both human and\nintegration users. Below are some of the key architectural decision that architect needs to make:",[4907,5246,5247,5250,5253,5256,5259],{},[4826,5248,5249],{},"Human vs System identity",[4826,5251,5252],{},"Delegated vs application access",[4826,5254,5255],{},"Managed Identity vs Service Principal",[4826,5257,5258],{},"Shared Identity vs Identity per environment",[4826,5260,5261],{},"Multi Tenant access strategy",[17,5263,5264],{},"This decision when taken correctly ensures below parameters are achieved:",[4907,5266,5267,5270,5273,5276,5279],{},[4826,5268,5269],{},"Predictable integration",[4826,5271,5272],{},"Secure automation",[4826,5274,5275],{},"Reduced access incidents",[4826,5277,5278],{},"Strong audit posture",[4826,5280,5281],{},"Easier debugging",[4823,5283,5284],{"start":372},[4826,5285,5286],{},[4802,5287,4901],{},[17,5289,5290],{},"After an architect makes decision around security it is responsibility of a developer to implement it\nsuccessfully. A developer must have below understanding clear so that this can be achieved:",[4907,5292,5293,5296,5299,5302],{},[4826,5294,5295],{},"Delegated vs Application permission matters",[4826,5297,5298],{},"Identity context changes exceution behaviour",[4826,5300,5301],{},"Plugins and flows may run under different identity",[4826,5303,5304],{},"In a flow, trigger always executes under owner context but action runs under user context unless specified.",[17,5306,5307],{},"Without clear understanding, developer may face issues like:",[4907,5309,5310,5313],{},[4826,5311,5312],{},"API works in postman but fails in app",[4826,5314,5315],{},"Flow works when triggered manually but automation fails.",[17,5317,5318],{},"These issues may be due to different identity context, where user has missing privilege to execute certain action.\nTo prevent these issues, developer must take care of below things:",[4907,5320,5321,5324,5327],{},[4826,5322,5323],{},"Always document exceution identity",[4826,5325,5326],{},"Design for least privilege",[4826,5328,5329],{},"Test with non admin identity",[4823,5331,5332],{"start":436},[4826,5333,5334,5336],{},[4802,5335,4947],{},"\nWhen security is not implemented properly user may face below issues:",[4907,5338,5339,5342],{},[4826,5340,5341],{},"Insufficient privilege error",[4826,5343,5344],{},"App becomes unusable due to data missing for user",[17,5346,5347],{},"These causes trust issues in user, loss of productivity and slow downs\nthe adoption of application.",[12,5349,47],{"id":46},[4907,5351,5352,5355,5358,5361,5364,5367,5370,5373,5376],{},[4826,5353,5354],{},"Seperate human and system identities",[4826,5356,5357],{},"Use managed identities where possible",[4826,5359,5360],{},"Assign least privilege dataverse roles",[4826,5362,5363],{},"Align Conditional Access policy with automation",[4826,5365,5366],{},"Verify identity flows per environment",[4826,5368,5369],{},"Never hardcode credentials",[4826,5371,5372],{},"Do not use shared account for automation",[4826,5374,5375],{},"Do not grant System Administrator role to integration identity",[4826,5377,5378],{},"Never ignore identity lifecycle",[12,5380,54],{"id":53},[4907,5382,5383,5386,5389],{},[4826,5384,5385],{},"Confusing API permission with Dataverse securit role",[4826,5387,5388],{},"Admin access for integration account",[4826,5390,5391],{},"Not configuring environment access for Managed Identity",[12,5393,5003],{"id":5002},[17,5395,5396],{},"Identity is the exceution gatekeeper and root cause of most failures.\nThis should be taken care at design time itself, instead of post development to\navoid below issues:",[4907,5398,5399,5402,5405,5408],{},[4826,5400,5401],{},"Broken integration",[4826,5403,5404],{},"Security incidents",[4826,5406,5407],{},"Automation failure",[4826,5409,5410],{},"Compliance risk",{"title":68,"searchDepth":83,"depth":83,"links":5412},[5413,5414,5415,5416,5417,5418,5419,5420],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":33,"depth":83,"text":34},{"id":5154,"depth":83,"text":5155},{"id":4883,"depth":83,"text":5183},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":5019,"key":5020},"Understand the security model of Microsoft Power Platform, including authentication, authorization, data protection, and governance across environments.","\u002Fimages\u002Fpower-platform-security.jpg","High-level diagram showing Power Platform security layers including Entra ID, Dataverse security roles, and governance policies",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpower-platform-security",{"title":5428,"description":5422},"Power Platform Security Architecture: Identity, Access & Governance","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F03.power-platform-security","An overview of security, access control, and governance in Microsoft Power Platform.",[122,5432,120,5433],"security","entra-id","B9gnokafIfpvWmiNKZQJcsxEYD5ul6seKgoP75v1rMU",{"id":5436,"title":5437,"author":4793,"body":5438,"canonical":102,"category":5721,"date":5021,"description":5722,"draft":110,"extension":109,"featured":110,"image":5723,"imageAlt":5724,"meta":5725,"navigation":108,"order":372,"path":5726,"seo":5727,"stem":5729,"summary":5730,"tags":5731,"updated":5021,"__hash__":5734},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F04.power-platform-environments.md","Environments Overview",{"type":9,"value":5439,"toc":5710},[5440,5442,5445,5465,5467,5470,5474,5477,5493,5496,5510,5515,5521,5525,5533,5537,5543,5547,5550,5561,5564,5568,5571,5588,5591,5595,5606,5610,5613,5630,5634,5637,5657,5662,5673,5675,5695,5697,5705,5707],[12,5441,15],{"id":14},[17,5443,5444],{},"A power Platform environment is a security,data and governance boundary - not a folder or workspace.\nAn environment contains:",[4907,5446,5447,5450,5453,5456,5459,5462],{},[4826,5448,5449],{},"Apps",[4826,5451,5452],{},"Flows",[4826,5454,5455],{},"Dataverse",[4826,5457,5458],{},"Security configuration",[4826,5460,5461],{},"Capacity configuration",[4826,5463,5464],{},"ALM state",[12,5466,23],{"id":22},[17,5468,5469],{},"Environment prevents the risk of unauthorized change to application or data. They support Software development lifecycle\nthus preventing test user accessing or modifying the live data. It also prevent the risk of development changes being visible\nto production users. It enforces governance and security by design to meet compliance and regulatory requirements.",[12,5471,5473],{"id":5472},"types-of-environment","Types of Environment",[17,5475,5476],{},"The different types of environment are listed below:",[4907,5478,5479,5482,5485,5488,5490],{},[4826,5480,5481],{},"Default",[4826,5483,5484],{},"Sandbox",[4826,5486,5487],{},"Production",[4826,5489,4901],{},[4826,5491,5492],{},"Trial",[17,5494,5495],{},"Each type behaves differently in below areas:",[4907,5497,5498,5501,5504,5507],{},[4826,5499,5500],{},"Data retention",[4826,5502,5503],{},"Reset capability",[4826,5505,5506],{},"ALM expectations",[4826,5508,5509],{},"Governance risk",[5511,5512,5514],"h4",{"id":5513},"high-level-environment-overview","High-Level Environment Overview",[63,5516,5519],{"className":5517,"code":5518,"language":5090},[5088],"Power Platform Tenant\n|\n|- Default Environment\n|- Dev Environment\n|- Test\u002FUAT Environment\n|- Production Environment\n|- Specialized Environmen\n\n\n",[70,5520,5518],{"__ignoreMap":68},[5511,5522,5524],{"id":5523},"why-default-environment-is-dangerous","Why Default Environment is dangerous?",[17,5526,5527,5528,5532],{},"The Default Environment is auto created for each tenant and allows access to\nall the users tenant wide. This environment cannot be deleted and should be locked down\nand monitored. It should ",[5529,5530,5531],"em",{},"not be used as production environment",".",[5511,5534,5536],{"id":5535},"failure-pattern","Failure Pattern",[63,5538,5541],{"className":5539,"code":5540,"language":5090},[5088],"Citizen builds app in Default\n      |\nApp gains adoption\n      |\nData grows\n      |\nNo ALM, no isolation\n      |\nCompliance & support crisis\n",[70,5542,5540],{"__ignoreMap":68},[12,5544,5546],{"id":5545},"dataverse-capacity-overview","Dataverse Capacity Overview",[17,5548,5549],{},"Power platform capacity is allocated and enforced at tenant level and consumed at environment level.\nThere are three types of capacity as listed below:",[4907,5551,5552,5555,5558],{},[4826,5553,5554],{},"Database Capacity",[4826,5556,5557],{},"File Capacity",[4826,5559,5560],{},"Log Capacity",[17,5562,5563],{},"While developer and architect generally design and optimize around Database and File Capacity, Log Capacity\nthat includes Audit logs, Plugin traces, Flow run history are often overlooked causing it grow overtime\nand hit the Capacity threshold limit. Once the limit is hit, the write access is blocked causing production outage.",[12,5565,5567],{"id":5566},"platform-limits","Platform Limits",[17,5569,5570],{},"There are certain limitation that are enforced by platform and not configurable or cannot be by passed.\nThese limitation are inplace to keep Power Platform health green, and to prevent platform being abused.",[4907,5572,5573,5576,5579,5582,5585],{},[4826,5574,5575],{},"API request limits",[4826,5577,5578],{},"Concurrent flow runs",[4826,5580,5581],{},"Plugin execution timeouts",[4826,5583,5584],{},"Bulk operation limits",[4826,5586,5587],{},"Search index delays",[12,5589,5590],{"id":4883},"Role Based Perspective",[4823,5592,5593],{},[4826,5594,4891],{},[4907,5596,5597,5600,5603],{},[4826,5598,5599],{},"Responsible for environment strategy and Capacity Monitoring",[4826,5601,5602],{},"Governs the Default environment",[4826,5604,5605],{},"Manages the environment lifecycle and environment access",[4823,5607,5608],{"start":83},[4826,5609,4925],{},[17,5611,5612],{},"Responsible for below key decisions regarding environment, which should be thought\nduring design times",[4907,5614,5615,5618,5621,5624,5627],{},[4826,5616,5617],{},"Number of environment",[4826,5619,5620],{},"Isolation model(per app, per BU or per region)",[4826,5622,5623],{},"Regulated vs Non Regulated workloads",[4826,5625,5626],{},"Capacity forecasting",[4826,5628,5629],{},"Promotion Path",[4823,5631,5632],{"start":372},[4826,5633,4901],{},[17,5635,5636],{},"Developer should consider below items while working in Power Platform:",[4907,5638,5639,5642,5645,5648,5651,5654],{},[4826,5640,5641],{},"Environment-specific behavior exists",[4826,5643,5644],{},"APIs behave differently under load.",[4826,5646,5647],{},"Capacity limits affect design.",[4826,5649,5650],{},"Should not hardcode environment values.",[4826,5652,5653],{},"Testing should be done in test environment with minimum required privilege.",[4826,5655,5656],{},"Avoid bulk operation in power automate.",[4823,5658,5659],{"start":436},[4826,5660,5661],{},"User\nIf above things are not done correctly, user will face below issue:",[4907,5663,5664,5667,5670],{},[4826,5665,5666],{},"App stops working",[4826,5668,5669],{},"Uploads no longer work",[4826,5671,5672],{},"System is slow today",[12,5674,47],{"id":46},[4907,5676,5677,5680,5683,5686,5689,5692],{},[4826,5678,5679],{},"Design environment strategy first",[4826,5681,5682],{},"Seperate Dev,Test,Prod environment",[4826,5684,5685],{},"Lock down Default environment",[4826,5687,5688],{},"Monitor capacity continously",[4826,5690,5691],{},"Assign clear ownership per environment",[4826,5693,5694],{},"Avoid treating Sandbox environment as production",[12,5696,54],{"id":53},[4907,5698,5699,5702],{},[4826,5700,5701],{},"One environment is enough",[4826,5703,5704],{},"Capacity is a licensing issue",[12,5706,5003],{"id":5002},[17,5708,5709],{},"Environment and Capacity are foundational architecture decisions and not operational details. If done\ncorrectly helps organization to scale and govern effectively.",{"title":68,"searchDepth":83,"depth":83,"links":5711},[5712,5713,5714,5715,5716,5717,5718,5719,5720],{"id":14,"depth":83,"text":15},{"id":22,"depth":83,"text":23},{"id":5472,"depth":83,"text":5473},{"id":5545,"depth":83,"text":5546},{"id":5566,"depth":83,"text":5567},{"id":4883,"depth":83,"text":5590},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":5019,"key":5020},"Learn what Power Platform environments are, why they matter, and how they are used to isolate apps, data, security, and governance across development and production.","\u002Fimages\u002Fpower-platform-environments.jpg","Diagram illustrating multiple Power Platform environments such as development, test, and production with isolated resources",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpower-platform-environments",{"title":5728,"description":5722},"Power Platform Environments: Strategy, Isolation & Governance","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F04.power-platform-environments","An overview of Power Platform environments and their role in governance and ALM.",[122,5732,5733,120],"environments","governance","AfZna5EAz2L1qoSy9CX60NXURYrPaksCRJS5pEsfVmg",{"id":5736,"title":5737,"author":4793,"body":5738,"canonical":102,"category":6097,"date":6098,"description":6099,"draft":108,"extension":109,"featured":110,"image":6100,"imageAlt":6101,"meta":6102,"navigation":108,"order":436,"path":6103,"seo":6104,"stem":6105,"summary":6106,"tags":6107,"updated":6098,"__hash__":6108},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F05.dataverse-overview.md","Introduction to Dataverse",{"type":9,"value":5739,"toc":6086},[5740,5742,5745,5748,5762,5765,5779,5782,5796,5798,5802,5808,5812,5815,5841,5844,5861,5864,5869,5874,5942,5946,5949,5960,5966,5968,5972,5995,5999,6013,6017,6028,6032,6040,6042,6068,6070,6081,6083],[12,5741,15],{"id":14},[17,5743,5744],{},"Dataverse is metadata driven business data platform that is security aware at runtime. It exists to ensure data,\nlogic,security, and governance are enforced consistently, regardless of how data is accessed (UI,API,flow,plugin,integrations).",[17,5746,5747],{},"Traditional enterprise system suffer from issues like:",[4907,5749,5750,5753,5756,5759],{},[4826,5751,5752],{},"Security logic duplicated across layer",[4826,5754,5755],{},"Business rules enforced only in UI",[4826,5757,5758],{},"Inconsistent data access via APIs",[4826,5760,5761],{},"Fragile integrations",[17,5763,5764],{},"Dataverse solves this by:",[4907,5766,5767,5770,5773,5776],{},[4826,5768,5769],{},"Centralizing security enforcement",[4826,5771,5772],{},"Centralizing business logic execution",[4826,5774,5775],{},"Centralizing metadata definition",[4826,5777,5778],{},"Providing multiple access paths with the same rules.",[17,5780,5781],{},"Dataverse is not:",[4907,5783,5784,5787,5790,5793],{},[4826,5785,5786],{},"A general purpose SQL database",[4826,5788,5789],{},"Optimized for heavy analytical workloads",[4826,5791,5792],{},"Schema flexible like NOSQL",[4826,5794,5795],{},"Infrastructure that can be tuned manually.",[12,5797,4874],{"id":4873},[5511,5799,5801],{"id":5800},"high-level-dataverse-stack","High Level Dataverse Stack",[63,5803,5806],{"className":5804,"code":5805,"language":5090},[5088],"\nClient\u002FAPI\u002FFlow\u002FPlugin\n        |\nDataverse Service logic\n        |\n        |- Metadata engine\n        |- Security engine\n        |- Business Logic Pipeline\n        |- Transaction Manager\n        |\nDataverse Storage layer\n        |\n        |- Relational Data Store\n        |- File\u002FImage Store\n        |- Log & Audit Data Store\n        |- Search Index\n        |\nAnalytics & Integration Surface\n\n",[70,5807,5805],{"__ignoreMap":68},[5511,5809,5811],{"id":5810},"metadata-driven-design","Metadata Driven Design",[17,5813,5814],{},"Metadata is data about data. Everything in Dataverse is defined by metadata:",[4907,5816,5817,5820,5823,5826,5829,5832,5835,5838],{},[4826,5818,5819],{},"Tables",[4826,5821,5822],{},"Columns",[4826,5824,5825],{},"Relationships",[4826,5827,5828],{},"Security",[4826,5830,5831],{},"Forms",[4826,5833,5834],{},"Views",[4826,5836,5837],{},"Business Rules",[4826,5839,5840],{},"APIs",[17,5842,5843],{},"Metadata enables:",[4907,5845,5846,5849,5852,5855,5858],{},[4826,5847,5848],{},"UI generation",[4826,5850,5851],{},"Security evaluation",[4826,5853,5854],{},"API behavior",[4826,5856,5857],{},"ALM packaging",[4826,5859,5860],{},"Upgrade compatibility",[17,5862,5863],{},"If we try to bypass metadata or do over customization it will result in broken upgrade and\nfragile solutions resulting in high maintenance cost.",[5865,5866,5868],"h3",{"id":5867},"storage-architecture","Storage Architecture",[17,5870,5871],{},[4802,5872,5873],{},"Dataverse Storage Type",[5875,5876,5877,5890],"table",{},[5878,5879,5880],"thead",{},[5881,5882,5883,5887],"tr",{},[5884,5885,5886],"th",{},"Store",[5884,5888,5889],{},"Purpose",[5891,5892,5893,5902,5910,5918,5926,5934],"tbody",{},[5881,5894,5895,5899],{},[5896,5897,5898],"td",{},"Relational Store",[5896,5900,5901],{},"Core Transactional data",[5881,5903,5904,5907],{},[5896,5905,5906],{},"File Store",[5896,5908,5909],{},"Attachment,documents",[5881,5911,5912,5915],{},[5896,5913,5914],{},"Image Store",[5896,5916,5917],{},"images,photos",[5881,5919,5920,5923],{},[5896,5921,5922],{},"Log Store",[5896,5924,5925],{},"Audits,Plugin Traces",[5881,5927,5928,5931],{},[5896,5929,5930],{},"Search Index",[5896,5932,5933],{},"Relevance Search",[5881,5935,5936,5939],{},[5896,5937,5938],{},"Analytics Store",[5896,5940,5941],{},"Read-optimized replica",[5865,5943,5945],{"id":5944},"execution-model","Execution Model",[17,5947,5948],{},"Every operation goes through the same pipeline, regardless of entry point.\nThis ensures:",[4907,5950,5951,5954,5957],{},[4826,5952,5953],{},"Consistent validations (Business rule apply everywhere)",[4826,5955,5956],{},"Consistent Logic (Plugins Stay same everywhere)",[4826,5958,5959],{},"Consistent Security (security cannot be bypassed using api)",[63,5961,5964],{"className":5962,"code":5963,"language":5090},[5088],"Request(UI\u002FApp\u002FFlow)\n    |\nSecurity Evaluation\n    |\nPre Validation\n    |\nPre Operation\n    |\nDatabase Transaction\n    |\nPost Operation\n    |\nAsync Processing\n\n",[70,5965,5963],{"__ignoreMap":68},[12,5967,5590],{"id":4883},[4823,5969,5970],{},[4826,5971,4891],{},[4907,5973,5974,5977,5980,5983,5986,5989,5992],{},[4826,5975,5976],{},"Responsible for managing tables and schema",[4826,5978,5979],{},"Controls auditing and logging",[4826,5981,5982],{},"Supports data import and clean up",[4826,5984,5985],{},"Monitors performance and failures",[4826,5987,5988],{},"Must ensure audit is enabled where required with proper planning.",[4826,5990,5991],{},"Plugin Tracelog  should not show up in production",[4826,5993,5994],{},"Must ensure Table Ownership should be choosen correctly.",[4823,5996,5997],{"start":83},[4826,5998,4925],{},[4907,6000,6001,6004,6007,6010],{},[4826,6002,6003],{},"Responsible for deciding dataverse vs external data store",[4826,6005,6006],{},"Decides which logic stays in dataverse vs what stays outside",[4826,6008,6009],{},"Designs security first data Model",[4826,6011,6012],{},"Ensures long term schema stability",[4823,6014,6015],{"start":372},[4826,6016,4901],{},[4907,6018,6019,6022,6025],{},[4826,6020,6021],{},"Must realise dataverse enforces execution order",[4826,6023,6024],{},"Ensures all logic are not synchronous as transaction are short lived",[4826,6026,6027],{},"Should be aware of query limits",[4823,6029,6030],{"start":436},[4826,6031,4947],{},[4907,6033,6034,6037],{},[4826,6035,6036],{},"Gets data based on their access",[4826,6038,6039],{},"Forms render based on security role",[12,6041,47],{"id":46},[4907,6043,6044,6047,6050,6053,6056,6059,6062,6065],{},[4826,6045,6046],{},"Model data for security first",[4826,6048,6049],{},"Keep schema simple",[4826,6051,6052],{},"Use async logic where possible",[4826,6054,6055],{},"Monitor audit logs",[4826,6057,6058],{},"Design for metadata evolution",[4826,6060,6061],{},"Do not over customize core tables",[4826,6063,6064],{},"Do not build deep relationship graphs",[4826,6066,6067],{},"Should respect execution pipeline",[12,6069,54],{"id":53},[4823,6071,6072,6075,6078],{},[4826,6073,6074],{},"Bad schema and logic decisions",[4826,6076,6077],{},"Making all logic synchronous",[4826,6079,6080],{},"Placing logic in form",[12,6082,5003],{"id":5002},[17,6084,6085],{},"Dataverse is business execution platform, with security and metadata first approach.\nIf designed properly it can scale safely and avoid performance bottlenecks",{"title":68,"searchDepth":83,"depth":83,"links":6087},[6088,6089,6093,6094,6095,6096],{"id":14,"depth":83,"text":15},{"id":4873,"depth":83,"text":4874,"children":6090},[6091,6092],{"id":5867,"depth":372,"text":5868},{"id":5944,"depth":372,"text":5945},{"id":4883,"depth":83,"text":5590},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":5455,"key":120},"2026-01-25","Microsoft Dataverse is the secure, scalable data platform that stores and manages data used by Power Platform apps, automations, and integrations.","\u002Fimages\u002Fdataverse-overview.jpg","Diagram showing Microsoft Dataverse as the central data layer for Power Apps, Power Automate, and Power BI",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-overview",{"title":5737,"description":6099},"blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F05.dataverse-overview","Understand what Dataverse is, how it works, and why it is the foundation of the Power Platform.",[120,121,122],"yWuNcMdOMTi2jY9pdvMyoMd4zzLNxTMvk7HiipazcmY",{"id":6110,"title":6111,"author":4793,"body":6112,"canonical":102,"category":6784,"date":6098,"description":6785,"draft":108,"extension":109,"featured":110,"image":6786,"imageAlt":6787,"meta":6788,"navigation":108,"order":308,"path":6789,"seo":6790,"stem":6791,"summary":6792,"tags":6793,"updated":6098,"__hash__":6795},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F06.dataverse-data-modeling.md","Data Modeling",{"type":9,"value":6113,"toc":6765},[6114,6116,6119,6130,6133,6138,6146,6184,6188,6191,6211,6215,6220,6223,6237,6241,6247,6251,6257,6262,6265,6279,6282,6288,6291,6297,6302,6305,6316,6319,6325,6328,6334,6338,6343,6354,6359,6370,6375,6386,6390,6393,6404,6407,6418,6420,6431,6433,6566,6570,6616,6622,6627,6638,6643,6656,6661,6675,6677,6719,6721,6732,6734,6737,6748,6751],[12,6115,15],{"id":14},[17,6117,6118],{},"In dataverse, data modeling decisions needs to be made at design phase as these are structural, affects security and expensive to reverse.\nOnce solution is in production:",[4907,6120,6121,6124,6127],{},[4826,6122,6123],{},"Data exists",[4826,6125,6126],{},"Security depends on ownership",[4826,6128,6129],{},"Reports depend on schema",[17,6131,6132],{},"The key designs we need to consider for modeling, that has consequence on security,performance and ALM are:",[4823,6134,6135],{},[4826,6136,6137],{},"Table Ownership",[4907,6139,6140,6143],{},[4826,6141,6142],{},"User\u002FTeam owned",[4826,6144,6145],{},"Organization owned",[4823,6147,6148,6162,6176],{"start":83},[4826,6149,6150,6151],{},"Relationship type",[4907,6152,6153,6156,6159],{},[4826,6154,6155],{},"1:N",[4826,6157,6158],{},"N:N",[4826,6160,6161],{},"Polymorphic lookup",[4826,6163,6164,6165],{},"Data behavior",[4907,6166,6167,6170,6173],{},[4826,6168,6169],{},"Calculated",[4826,6171,6172],{},"Rollup",[4826,6174,6175],{},"Stored",[4826,6177,6178,6179],{},"Uniqueness",[4907,6180,6181],{},[4826,6182,6183],{},"Alternate keys",[12,6185,6187],{"id":6186},"why-modeling-is-required-in-dataverse","Why Modeling is required in Dataverse",[17,6189,6190],{},"Unlike traditional database, Dataverse data modeling is not about normalizing the data for storage or SQL optimization or pure ER modelling\nInstead we model data for",[4907,6192,6193,6196,6199,6202,6205,6208],{},[4826,6194,6195],{},"Security behavior",[4826,6197,6198],{},"User experience",[4826,6200,6201],{},"Automation exceution",[4826,6203,6204],{},"Reporting",[4826,6206,6207],{},"Integration boundaries",[4826,6209,6210],{},"Upgrade safety",[12,6212,6214],{"id":6213},"visual-comparison-of-good-vs-bad-schema","Visual Comparison of Good vs Bad Schema",[4823,6216,6217],{},[4826,6218,6219],{},"User-owned Reference Data",[17,6221,6222],{},"Reference data should always be organization owned else it will have below problems:",[4907,6224,6225,6228,6231,6234],{},[4826,6226,6227],{},"Requires sharing",[4826,6229,6230],{},"Security becomes unpredictable",[4826,6232,6233],{},"Reporting is inconsistent",[4826,6235,6236],{},"Performance degrades",[5865,6238,6240],{"id":6239},"bad-schema","Bad Schema",[63,6242,6245],{"className":6243,"code":6244,"language":5090},[5088],"  Product\n    |- Owned by User A\n    |- Owned by User B\n    |- Owned by User C\n\n",[70,6246,6244],{"__ignoreMap":68},[5865,6248,6250],{"id":6249},"good-schema","Good Schema",[63,6252,6255],{"className":6253,"code":6254,"language":5090},[5088],"  Product (Organization -Owned)\n    |- Global visibility\n    |- No ownership sharing\n    |- Stable security behaviour\n\n",[70,6256,6254],{"__ignoreMap":68},[4823,6258,6259],{"start":83},[4826,6260,6261],{},"Relationship Depth",[17,6263,6264],{},"We should prefer breadth over depth in Dataverse i.e. relationship should be purposeful and flattened else we will have below problems:",[4907,6266,6267,6270,6273,6276],{},[4826,6268,6269],{},"Query depth limit hits",[4826,6271,6272],{},"Forms load slowly",[4826,6274,6275],{},"Reporting becomes fragile",[4826,6277,6278],{},"Security evaluation expensive",[5865,6280,6240],{"id":6281},"bad-schema-1",[63,6283,6286],{"className":6284,"code":6285,"language":5090},[5088],"  Account\n    |- Project\n        |- Phase\n            |- Task\n                |- Task Updates\n                    |- Task Comment\n\n",[70,6287,6285],{"__ignoreMap":68},[5865,6289,6250],{"id":6290},"good-schema-1",[63,6292,6295],{"className":6293,"code":6294,"language":5090},[5088],"  Account\n    |- Project\n    |- Task\n    |- Task Activity\n\n",[70,6296,6294],{"__ignoreMap":68},[4823,6298,6299],{"start":372},[4826,6300,6301],{},"Calculated vs Stored Data",[17,6303,6304],{},"We should use calculated fields for simple logic only to avoid following problems:",[4907,6306,6307,6310,6313],{},[4826,6308,6309],{},"Recalculated frequently",[4826,6311,6312],{},"Performance unpredictable",[4826,6314,6315],{},"Reporting inconsistent",[5865,6317,6240],{"id":6318},"bad-schema-2",[63,6320,6323],{"className":6321,"code":6322,"language":5090},[5088],"  Invoice Total (Calculated)\n    = SUM(Line Items)\n    + Tax\n    - Discount\n\n",[70,6324,6322],{"__ignoreMap":68},[5865,6326,6250],{"id":6327},"good-schema-2",[63,6329,6332],{"className":6330,"code":6331,"language":5090},[5088],"  Invoice Total (Stored)\n    |- Updated via plugin\u002Fasync flow\n    |- Cached for reporting\n\n",[70,6333,6331],{"__ignoreMap":68},[12,6335,6337],{"id":6336},"relationship-their-hidden-costs","Relationship & their Hidden Costs",[4823,6339,6340],{},[4826,6341,6342],{},"1:N Relationship",[4907,6344,6345,6348,6351],{},[4826,6346,6347],{},"Cheapest",[4826,6349,6350],{},"Predictable",[4826,6352,6353],{},"Prefrred",[4823,6355,6356],{"start":83},[4826,6357,6358],{},"N:N Relationship",[4907,6360,6361,6364,6367],{},[4826,6362,6363],{},"Hidden intersect table",[4826,6365,6366],{},"Harder to secure",[4826,6368,6369],{},"Limit reporting and querying",[4823,6371,6372],{"start":372},[4826,6373,6374],{},"Polymorphic Lookups",[4907,6376,6377,6380,6383],{},[4826,6378,6379],{},"Powerful",[4826,6381,6382],{},"Harder to reason about",[4826,6384,6385],{},"Limit reporting and querying\n** Use polymorphic lookup only when business meaning is truly polymorphic **",[12,6387,6389],{"id":6388},"alternate-keys","Alternate Keys",[17,6391,6392],{},"Alternate keys are used for:",[4907,6394,6395,6398,6401],{},[4826,6396,6397],{},"Idempotent integrations",[4826,6399,6400],{},"Upsert operations",[4826,6402,6403],{},"External system alignment",[17,6405,6406],{},"They are not for:",[4907,6408,6409,6412,6415],{},[4826,6410,6411],{},"Business uniqueness enforcement alone",[4826,6413,6414],{},"Performance tuning",[4826,6416,6417],{},"Replacement for validation logic",[17,6419,5536],{},[4907,6421,6422,6425,6428],{},[4826,6423,6424],{},"Too many alternate keys",[4826,6426,6427],{},"Keys on multiple fields",[4826,6429,6430],{},"Keys added late in lifecycle",[12,6432,5590],{"id":4883},[4823,6434,6435,6476,6508,6545],{},[4826,6436,6437,6438,6443,6457,6462],{},"Admin\n",[4823,6439,6440],{},[4826,6441,6442],{},"Responsibilities:",[4907,6444,6445,6448,6451,6454],{},[4826,6446,6447],{},"Table creation and ownership decisions",[4826,6449,6450],{},"Relationship governance",[4826,6452,6453],{},"Auditing configuration",[4826,6455,6456],{},"Supporting data cleanup",[4823,6458,6459],{"start":83},[4826,6460,6461],{},"Common Failures:",[4907,6463,6464,6467,6470,6473],{},[4826,6465,6466],{},"Allowing developers to create table freely",[4826,6468,6469],{},"No schema review process",[4826,6471,6472],{},"Auditing enabled globally",[4826,6474,6475],{},"No data lifecycle policy",[4826,6477,6478,6479,6484,6498,6503],{},"Architecht\n",[4823,6480,6481],{},[4826,6482,6483],{},"Decisions:",[4907,6485,6486,6489,6492,6495],{},[4826,6487,6488],{},"Core vs extension tables",[4826,6490,6491],{},"Security-first modelling",[4826,6493,6494],{},"Long-term reporting needs",[4826,6496,6497],{},"Integration alignment",[4823,6499,6500],{"start":83},[4826,6501,6502],{},"Failures:",[4907,6504,6505],{},[4826,6506,6507],{},"Optimizing schema for today's feature instead of tomorrow's platform",[4826,6509,6510,6511,6516,6527,6531],{},"Developer\n",[4823,6512,6513],{},[4826,6514,6515],{},"Reality:",[4907,6517,6518,6521,6524],{},[4826,6519,6520],{},"Schema changes affects everything",[4826,6522,6523],{},"Relationship choices affect performance",[4826,6525,6526],{},"Poor modelling forces complex code",[4823,6528,6529],{"start":83},[4826,6530,6502],{},[4907,6532,6533,6536,6539,6542],{},[4826,6534,6535],{},"Over-normalization",[4826,6537,6538],{},"Modeling of UI only",[4826,6540,6541],{},"Deep relationship graphs",[4826,6543,6544],{},"Inconsistent totals",[4826,6546,6547,6548,6553],{},"User\n",[4823,6549,6550],{},[4826,6551,6552],{},"Experiences:",[4907,6554,6555,6558,6561,6564],{},[4826,6556,6557],{},"Slow forms",[4826,6559,6560],{},"Missing data",[4826,6562,6563],{},"Confusing relationships",[4826,6565,6544],{},[12,6567,6569],{"id":6568},"migration-and-refactoring-strategies","Migration and Refactoring Strategies",[4823,6571,6572,6591],{},[4826,6573,6574,6575],{},"When you must refactor:",[4907,6576,6577,6579,6582,6585,6588],{},[4826,6578,6236],{},[4826,6580,6581],{},"Security rules explodes",[4826,6583,6584],{},"Reporting is unreliable",[4826,6586,6587],{},"Integration becomes fragile",[4826,6589,6590],{},"New features are blocked by schema",[4826,6592,6593,6594,6599],{},"Safe Refactoring Patterns:",[4823,6595,6596],{},[4826,6597,6598],{},"Parallel Table Migtaion:\nSteps:",[4907,6600,6601,6604,6607,6610,6613],{},[4826,6602,6603],{},"Create new table",[4826,6605,6606],{},"Sync data",[4826,6608,6609],{},"Redirect logic",[4826,6611,6612],{},"Freeze old table",[4826,6614,6615],{},"Retire safely",[63,6617,6620],{"className":6618,"code":6619,"language":5090},[5088],"  Old Table --->  New table\n  |- Sync             |- New logic  \n  |- Gradual cutover\n\n",[70,6621,6619],{"__ignoreMap":68},[4823,6623,6624],{"start":83},[4826,6625,6626],{},"Ownership Conversion:",[4907,6628,6629,6632,6635],{},[4826,6630,6631],{},"User-owned -> Organization owned",[4826,6633,6634],{},"Only viable early",[4826,6636,6637],{},"Requires downtime and testing",[4823,6639,6640],{"start":372},[4826,6641,6642],{},"Relationship Flattening",[4907,6644,6645],{},[4826,6646,6647,6648],{},"Replace deep chains with:\n",[4907,6649,6650,6653],{},[4826,6651,6652],{},"Lookup shortcuts",[4826,6654,6655],{},"Denormalized summary tables",[4823,6657,6658],{"start":372},[4826,6659,6660],{},"What not to do:",[4907,6662,6663,6666,6669,6672],{},[4826,6664,6665],{},"Directly change ownership on live tables",[4826,6667,6668],{},"Delete columns with data",[4826,6670,6671],{},"Break alternative keys in place",[4826,6673,6674],{},"Rename tables used in integrations",[12,6676,47],{"id":46},[4823,6678,6679,6699],{},[4826,6680,6681,6682],{},"Do:",[4907,6683,6684,6687,6690,6693,6696],{},[4826,6685,6686],{},"Model for security first",[4826,6688,6689],{},"Keep relationship shallow",[4826,6691,6692],{},"Use organization-owned tables for reference data",[4826,6694,6695],{},"Plan reporting early",[4826,6697,6698],{},"Review schema like code",[4826,6700,6701,6702],{},"Don't:",[4907,6703,6704,6707,6710,6713,6716],{},[4826,6705,6706],{},"Over-normalize",[4826,6708,6709],{},"Build deep hierarchies",[4826,6711,6712],{},"Use calculated fields for core logic",[4826,6714,6715],{},"Add alternate keys casually",[4826,6717,6718],{},"Ignore long-term maintenance",[12,6720,54],{"id":53},[4823,6722,6723,6726,6729],{},[4826,6724,6725],{},"Calculated fields cost runtime performance, not storage",[4826,6727,6728],{},"More realtionship is not equal to better model",[4826,6730,6731],{},"Schema fixing requires data migration and downtime",[12,6733,5003],{"id":5002},[17,6735,6736],{},"Dataverse data modelling:",[4907,6738,6739,6742,6745],{},[4826,6740,6741],{},"Is an architectural decision",[4826,6743,6744],{},"Drives security, performance and cost",[4826,6746,6747],{},"Is hardest to change after adoption",[17,6749,6750],{},"If done correctly:",[4907,6752,6753,6756,6759,6762],{},[4826,6754,6755],{},"Scale safely",[4826,6757,6758],{},"Report reliably",[4826,6760,6761],{},"Integrate cleanly",[4826,6763,6764],{},"Avoid expensive rewrites",{"title":68,"searchDepth":83,"depth":83,"links":6766},[6767,6768,6769,6777,6778,6779,6780,6781,6782,6783],{"id":14,"depth":83,"text":15},{"id":6186,"depth":83,"text":6187},{"id":6213,"depth":83,"text":6214,"children":6770},[6771,6772,6773,6774,6775,6776],{"id":6239,"depth":372,"text":6240},{"id":6249,"depth":372,"text":6250},{"id":6281,"depth":372,"text":6240},{"id":6290,"depth":372,"text":6250},{"id":6318,"depth":372,"text":6240},{"id":6327,"depth":372,"text":6250},{"id":6336,"depth":83,"text":6337},{"id":6388,"depth":83,"text":6389},{"id":4883,"depth":83,"text":5590},{"id":6568,"depth":83,"text":6569},{"id":46,"depth":83,"text":47},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":5455,"key":120},"Learn how to design efficient and scalable data models in Microsoft Dataverse using tables, relationships, columns, and business rules.","\u002Fimages\u002Fdataverse-data-modeling.jpg","Diagram showing Dataverse tables with relationships, columns, and business rules connected to Power Platform apps",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-data-modeling",{"title":6111,"description":6785},"blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F06.dataverse-data-modeling","Best practices for designing tables and relationships in Dataverse.",[120,6794,122],"data-modeling","0zltyh9_I1BHYhhOgxvIVPiNJo8tm6Zfxci99SyW0ns",{"id":6797,"title":5828,"author":4793,"body":6798,"canonical":102,"category":7560,"date":7561,"description":7562,"draft":110,"extension":109,"featured":110,"image":7563,"imageAlt":7564,"meta":7565,"navigation":108,"order":114,"path":7566,"seo":7567,"stem":7569,"summary":7570,"tags":7571,"updated":7561,"__hash__":7572},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F07.dataverse-security.md",{"type":9,"value":6799,"toc":7527},[6800,6802,6805,6837,6840,6854,6858,6861,6875,6877,6882,6888,6892,6895,6899,6910,6914,6922,6926,6932,6954,6958,6966,6970,6981,6985,6990,7031,7035,7046,7050,7058,7062,7067,7071,7074,7079,7083,7097,7102,7108,7119,7123,7181,7185,7207,7221,7227,7230,7236,7240,7251,7255,7266,7269,7275,7278,7286,7289,7291,7294,7299,7316,7321,7335,7338,7343,7360,7365,7370,7373,7378,7389,7393,7407,7411,7419,7421,7425,7442,7446,7463,7465,7491,7493,7496,7510,7513],[12,6801,15],{"id":14},[17,6803,6804],{},"Dataverse security is additive, layered runtime evaluation model. The layer constitutes of:",[4823,6806,6807,6810,6813,6816,6819,6822,6825,6828,6831,6834],{},[4826,6808,6809],{},"Identity",[4826,6811,6812],{},"Environment Access",[4826,6814,6815],{},"Business Units",[4826,6817,6818],{},"Security Roles",[4826,6820,6821],{},"Team Membership",[4826,6823,6824],{},"Record Ownership",[4826,6826,6827],{},"Record Sharing",[4826,6829,6830],{},"Access Teams",[4826,6832,6833],{},"Field-level sharing",[4826,6835,6836],{},"Hierarchy Security",[17,6838,6839],{},"It is not:",[4907,6841,6842,6845,6848,6851],{},[4826,6843,6844],{},"A simple RBAC system",[4826,6846,6847],{},"Instantly predictable without modelling",[4826,6849,6850],{},"UI-only",[4826,6852,6853],{},"enforced at single layer",[12,6855,6857],{"id":6856},"why-dataverse-security-exists","Why Dataverse Security Exists",[17,6859,6860],{},"Dataverse security is designed for enterprise CRM scenarios and exists to:",[4907,6862,6863,6866,6869,6872],{},[4826,6864,6865],{},"Enforce least privilege",[4826,6867,6868],{},"Support complex organization models",[4826,6870,6871],{},"Enable record level collabrations",[4826,6873,6874],{},"Scale across department and geographies",[12,6876,34],{"id":33},[4823,6878,6879],{},[4826,6880,6881],{},"High-Level Security Evaluation Flow",[63,6883,6886],{"className":6884,"code":6885,"language":5090},[5088],"Request(UI\u002FAPI\u002FFlow\u002FPlugin)\n        |\nIdentity Authenticated (Entra ID)\n        |\nEnvironment Access Check\n        |\nSecurity Role Privileges\n        |\nBusiness Unit Scope\n        |\nOwnership\u002FTeam Ownership\n        |\nAccess Team Membership\n        |\nField Level Security\n        |\nAllow or Deny\n\n",[70,6887,6885],{"__ignoreMap":68},[4823,6889,6890],{"start":83},[4826,6891,6815],{},[17,6893,6894],{},"Business unit should be used for structural seperation not collabration.",[5865,6896,6898],{"id":6897},"what-business-units-do","What Business Units Do",[4907,6900,6901,6904,6907],{},[4826,6902,6903],{},"Define data visibility boundaries",[4826,6905,6906],{},"Scope security role privileges",[4826,6908,6909],{},"Influence reporting and ownership",[5865,6911,6913],{"id":6912},"they-do-not","They do not:",[4907,6915,6916,6919],{},[4826,6917,6918],{},"Grant permission by themselves",[4826,6920,6921],{},"Replace teams",[5865,6923,6925],{"id":6924},"common-bu-failure-pattern","Common BU Failure pattern",[63,6927,6930],{"className":6928,"code":6929,"language":5090},[5088],"Single BU\n  |- Hundreds of roles\n      |- Excessive sharing\n          |- Performance degradation\n\n",[70,6931,6929],{"__ignoreMap":68},[4823,6933,6934],{"start":372},[4826,6935,6818,6936,6940,6942,6943],{},[5865,6937,6939],{"id":6938},"what-roles-define","What Roles Define",[4903,6941],{},"Security roles define:",[4907,6944,6945,6948,6951],{},[4826,6946,6947],{},"CRUD privileges",[4826,6949,6950],{},"Privilege depth (User\u002FBU\u002FParent-Child\u002FOrg)",[4826,6952,6953],{},"Entry-level access",[5865,6955,6957],{"id":6956},"roles-do-not","Roles do not:",[4907,6959,6960,6963],{},[4826,6961,6962],{},"Grant access without records",[4826,6964,6965],{},"Override BU boundaries",[5865,6967,6969],{"id":6968},"role-explosion-anti-pattern","Role Explosion Anti-Pattern",[4907,6971,6972,6975,6978],{},[4826,6973,6974],{},"One role per scenario",[4826,6976,6977],{},"Minor variations duplicated",[4826,6979,6980],{},"Hard to maintain",[5865,6982,6984],{"id":6983},"better-pattern","Better Pattern",[4907,6986,6987],{},[4826,6988,6989],{},"Base roles + additive roles",[4823,6991,6992,7025,7028],{"start":436},[4826,6993,6994,6995,6999,7010,7014],{},"Ownership Model",[5865,6996,6998],{"id":6997},"user-owned-records","User-Owned Records",[4907,7000,7001,7004,7007],{},[4826,7002,7003],{},"Default for transactional data",[4826,7005,7006],{},"Subject to BU and role scope",[4826,7008,7009],{},"Requires sharing for collabrations",[5865,7011,7013],{"id":7012},"team-owned-records","Team-Owned Records",[4907,7015,7016,7019,7022],{},[4826,7017,7018],{},"Owned by Owner Teams",[4826,7020,7021],{},"Access governed by team roles",[4826,7023,7024],{},"Useful for queues, shared workload",[4826,7026,7027],{},"Teams in Dataverse\nDataverse supports two fundamentally different team types",[4826,7029,7030],{},"Owner Teams",[5865,7032,7034],{"id":7033},"what-they-are","What they are",[4907,7036,7037,7040,7043],{},[4826,7038,7039],{},"Can own records",[4826,7041,7042],{},"Can have security roles",[4826,7044,7045],{},"Behave like users for ownership",[5865,7047,7049],{"id":7048},"use-when","Use When",[4907,7051,7052,7055],{},[4826,7053,7054],{},"Shared ownership is required",[4826,7056,7057],{},"Records belong to a group, not a person",[5865,7059,7061],{"id":7060},"risks","Risks",[4907,7063,7064],{},[4826,7065,7066],{},"Overuse leads to ownership ambiguity",[4823,7068,7069],{"start":83},[4826,7070,6830],{},[17,7072,7073],{},"They exists to solve one problem:",[4907,7075,7076],{},[4826,7077,7078],{},"Temporary, record-level collabration without sharing explosion",[5865,7080,7082],{"id":7081},"what-they-are-1","What they are:",[4907,7084,7085,7088,7091,7094],{},[4826,7086,7087],{},"Record-specific access control",[4826,7089,7090],{},"No ownership",[4826,7092,7093],{},"No security roles",[4826,7095,7096],{},"Access granted via team templates",[4823,7098,7099],{"start":114},[4826,7100,7101],{},"How Access Team Works?",[63,7103,7106],{"className":7104,"code":7105,"language":5090},[5088],"Record\n  |- Access Team Template\n      |- User A (Read\u002FWrite)\n      |- User B (Read)\n      |- User C (Append)\n\n",[70,7107,7105],{"__ignoreMap":68},[4907,7109,7110,7113,7116],{},[4826,7111,7112],{},"Teams are created dynamically per record.",[4826,7114,7115],{},"Membership controls access",[4826,7117,7118],{},"Security role still required at base level",[5865,7120,7122],{"id":7121},"what-access-teams-can-and-cannot-do","What Access Teams Can and Cannot Do",[5875,7124,7125,7135],{},[5878,7126,7127],{},[5881,7128,7129,7132],{},[5884,7130,7131],{},"Capability",[5884,7133,7134],{},"Access Team",[5891,7136,7137,7145,7152,7160,7167,7174],{},[5881,7138,7139,7142],{},[5896,7140,7141],{},"Own records",[5896,7143,7144],{},"No",[5881,7146,7147,7150],{},[5896,7148,7149],{},"Have security roles",[5896,7151,7144],{},[5881,7153,7154,7157],{},[5896,7155,7156],{},"Grant record access",[5896,7158,7159],{},"Yes",[5881,7161,7162,7165],{},[5896,7163,7164],{},"Replace sharing",[5896,7166,7159],{},[5881,7168,7169,7172],{},[5896,7170,7171],{},"Replace BU",[5896,7173,7144],{},[5881,7175,7176,7179],{},[5896,7177,7178],{},"Replace roles",[5896,7180,7144],{},[5865,7182,7184],{"id":7183},"good-vs-bad-use-of-access-teams","Good vs Bad Use of Access Teams",[4823,7186,7187,7204],{},[4826,7188,7189,7190],{},"Good Use",[4907,7191,7192,7195,7198,7201],{},[4826,7193,7194],{},"Case collabration",[4826,7196,7197],{},"Opportunity deal teams",[4826,7199,7200],{},"Temporary reviewers",[4826,7202,7203],{},"Approval participants",[4826,7205,7206],{},"Bad Use",[4907,7208,7209,7212,7215,7218],{},[4826,7210,7211],{},"Permanent access control",[4826,7213,7214],{},"Replacing security roles",[4826,7216,7217],{},"Organization-wide visibility",[4826,7219,7220],{},"High volume batch updates",[63,7222,7225],{"className":7223,"code":7224,"language":5090},[5088],"Access Team created\n        |\nUsers lack base table privilege\n        |\nAccess appears broken\n\n",[70,7226,7224],{"__ignoreMap":68},[17,7228,7229],{},"Access team augements access- they never replace base privilige.",[4823,7231,7233],{"start":7232},7,[4826,7234,7235],{},"Sharing",[5865,7237,7239],{"id":7238},"what-sharing-does","What sharing does",[4907,7241,7242,7245,7248],{},[4826,7243,7244],{},"Creates explicit access entries",[4826,7246,7247],{},"Overrides ownership boundaries",[4826,7249,7250],{},"Adds runtime evaluation cost",[5865,7252,7254],{"id":7253},"when-sharing-becomes-a-problem","When Sharing Becomes a Problem",[4907,7256,7257,7260,7263],{},[4826,7258,7259],{},"Thousands of shared records",[4826,7261,7262],{},"Frequent share\u002Funshare operations",[4826,7264,7265],{},"Cross-BU collabration without design",[17,7267,7268],{},"If share is required often, redesign security",[4823,7270,7272],{"start":7271},8,[4826,7273,7274],{},"Field Level Security",[5865,7276,5889],{"id":7277},"purpose",[4907,7279,7280,7283],{},[4826,7281,7282],{},"Protect. sensitive columns",[4826,7284,7285],{},"Override, table-level access",[17,7287,7288],{},"Field level security doesnot secure records, it only secure columns.",[12,7290,5183],{"id":4883},[5865,7292,4891],{"id":7293},"admin",[4823,7295,7296],{},[4826,7297,7298],{},"Responsibilities",[4907,7300,7301,7304,7307,7310,7313],{},[4826,7302,7303],{},"BU design",[4826,7305,7306],{},"Role governance",[4826,7308,7309],{},"Team strategy",[4826,7311,7312],{},"Sharing Limits",[4826,7314,7315],{},"Performance monitoring",[4823,7317,7318],{"start":83},[4826,7319,7320],{},"Common Failure",[4907,7322,7323,7326,7329,7332],{},[4826,7324,7325],{},"Overusing sharing",[4826,7327,7328],{},"Ignoring Access teams",[4826,7330,7331],{},"Creating too many roles",[4826,7333,7334],{},"No security design documentation",[5865,7336,4925],{"id":7337},"architect",[4823,7339,7340],{},[4826,7341,7342],{},"Key Decision",[4907,7344,7345,7348,7351,7354,7357],{},[4826,7346,7347],{},"BU strategy",[4826,7349,7350],{},"Role composition",[4826,7352,7353],{},"Owner vs Access Teams",[4826,7355,7356],{},"Sharing vs Access Teams",[4826,7358,7359],{},"Performance vs flexibility trade offs",[4823,7361,7362],{"start":83},[4826,7363,7364],{},"Failures",[4907,7366,7367],{},[4826,7368,7369],{},"Designing security bottom-up instead of top-down",[5865,7371,4901],{"id":7372},"developer",[4823,7374,7375],{},[4826,7376,7377],{},"Reality",[4907,7379,7380,7383,7386],{},[4826,7381,7382],{},"Security failures appear as \"no data\"",[4826,7384,7385],{},"API calls silently trimmed",[4826,7387,7388],{},"Plugins run under specific identity",[4823,7390,7391],{"start":83},[4826,7392,7364],{},[4907,7394,7395,7398,7401,7404],{},[4826,7396,7397],{},"Testing as System Admin",[4826,7399,7400],{},"Ignoring Access Teams",[4826,7402,7403],{},"Assuming read=write",[4826,7405,7406],{},"Hardcoding ownership assumptions",[5865,7408,7410],{"id":7409},"user-experience","User Experience",[4907,7412,7413,7416],{},[4826,7414,7415],{},"Record visible but not editable",[4826,7417,7418],{},"Record disappeared but visbile for other user",[12,7420,47],{"id":46},[5865,7422,7424],{"id":7423},"do","Do",[4907,7426,7427,7430,7433,7436,7439],{},[4826,7428,7429],{},"Design security before schema",[4826,7431,7432],{},"Use Access Teams for collabration",[4826,7434,7435],{},"Limit explicit sharing",[4826,7437,7438],{},"Keep roles minimal and composable",[4826,7440,7441],{},"Document security design",[5865,7443,7445],{"id":7444},"dont","Don't",[4907,7447,7448,7451,7454,7457,7460],{},[4826,7449,7450],{},"Test only as admin",[4826,7452,7453],{},"Overuse owner teams",[4826,7455,7456],{},"Ignore BU boundaries",[4826,7458,7459],{},"Grant System Administrator casually",[4826,7461,7462],{},"Treat Access Team as magic",[12,7464,54],{"id":53},[4823,7466,7467,7475,7483],{},[4826,7468,7469,7470],{},"Roles Control Everything\n",[4907,7471,7472],{},[4826,7473,7474],{},"Role define potential access, not actual access",[4826,7476,7477,7478],{},"Access Teams Grant Permissions\n",[4907,7479,7480],{},[4826,7481,7482],{},"They grant access only if base privilege exists",[4826,7484,7485,7486],{},"Sharing is fine at scale\n",[4907,7487,7488],{},[4826,7489,7490],{},"Sharing is hidden performance tax",[12,7492,5003],{"id":5002},[17,7494,7495],{},"Dataverse security:",[4907,7497,7498,7501,7504,7507],{},[4826,7499,7500],{},"is layered and cumulative",[4826,7502,7503],{},"Requires design, not trial-and-error",[4826,7505,7506],{},"Trades flexibility for complexity",[4826,7508,7509],{},"Scales only when patterns are intentional",[17,7511,7512],{},"Access Teams:",[4907,7514,7515,7518,7521,7524],{},[4826,7516,7517],{},"Are essential for collabration",[4826,7519,7520],{},"Prevent sharing explosions",[4826,7522,7523],{},"Are often underused",[4826,7525,7526],{},"Require correct base privilege",{"title":68,"searchDepth":83,"depth":83,"links":7528},[7529,7530,7531,7548,7554,7558,7559],{"id":14,"depth":83,"text":15},{"id":6856,"depth":83,"text":6857},{"id":33,"depth":83,"text":34,"children":7532},[7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547],{"id":6897,"depth":372,"text":6898},{"id":6912,"depth":372,"text":6913},{"id":6924,"depth":372,"text":6925},{"id":6956,"depth":372,"text":6957},{"id":6968,"depth":372,"text":6969},{"id":6983,"depth":372,"text":6984},{"id":7033,"depth":372,"text":7034},{"id":7048,"depth":372,"text":7049},{"id":7060,"depth":372,"text":7061},{"id":7081,"depth":372,"text":7082},{"id":7121,"depth":372,"text":7122},{"id":7183,"depth":372,"text":7184},{"id":7238,"depth":372,"text":7239},{"id":7253,"depth":372,"text":7254},{"id":7277,"depth":372,"text":5889},{"id":4883,"depth":83,"text":5183,"children":7549},[7550,7551,7552,7553],{"id":7293,"depth":372,"text":4891},{"id":7337,"depth":372,"text":4925},{"id":7372,"depth":372,"text":4901},{"id":7409,"depth":372,"text":7410},{"id":46,"depth":83,"text":47,"children":7555},[7556,7557],{"id":7423,"depth":372,"text":7424},{"id":7444,"depth":372,"text":7445},{"id":53,"depth":83,"text":54},{"id":5002,"depth":83,"text":5003},{"label":104,"key":105},"2026-02-18","Learn how Microsoft Dataverse security works, including security roles, business units, field-level security, and record-level access. A practical guide to securing data in Power Platform environments.","\u002Fimages\u002Fdataverse-security.jpg","Diagram illustrating Microsoft Dataverse security roles and access control model",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-security",{"title":7568,"description":7562},"Dataverse Security Model: Roles, Business Units & Record Access","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F07.dataverse-security","A practical guide to securing Microsoft Dataverse with roles, privileges, and access control.",[120,121,122],"Iexo1ody7n6eKh3xNkjRwT3KTrEVcgvKL1RvVaT57oA",{"id":7574,"title":7575,"author":4793,"body":7576,"canonical":102,"category":8524,"date":8527,"description":8528,"draft":110,"extension":109,"featured":108,"image":8529,"imageAlt":8530,"meta":8531,"navigation":108,"order":7232,"path":8532,"seo":8533,"stem":8536,"summary":8537,"tags":8538,"updated":8527,"__hash__":8539},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F08.dataverse-business-logic.md","Business Logic Placement",{"type":9,"value":7577,"toc":8511},[7578,7580,7583,7587,7593,7596,7600,7606,7609,7613,7617,7827,7831,7842,7846,7949,7953,7967,7971,7975,7980,7988,7993,8001,8006,8020,8025,8039,8043,8047,8058,8062,8070,8074,8088,8092,8106,8110,8114,8122,8126,8134,8138,8149,8153,8157,8168,8172,8183,8187,8201,8205,8209,8226,8229,8234,8248,8251,8259,8264,8281,8284,8290,8293,8298,8318,8326,8330,8334,8354,8358,8378,8381,8385,8402,8405,8417,8420,8424,8444,8451,8455,8460,8465,8470,8475,8480,8485,8490,8495,8497],[12,7579,15],{"id":14},[17,7581,7582],{},"Power Platform enables logic in multiple layers. That flexibility creates a common failure pattern.\nLogic gets implemented in the wrong layer, leading to data integrity issues, performance problems, unreliable automation and unmaintainable solutions.\nThis article defines where each kind of logic belongs, what executes when and how to recover when it breaks.",[12,7584,7586],{"id":7585},"dataverse-execution-pipeline","Dataverse Execution Pipeline",[63,7588,7591],{"className":7589,"code":7590,"language":5090},[5088],"Client\u002FUI\u002FAPI\n  |\nSecurity check\n  |\nPreValidation (Plugins)\n  |\nPreOperation (Plugins) - within transaction\n  |\nCore Operation (Create\u002FUpdate\u002FDelete)\n  |\nPostOperation (Plugins) - within transaction\n  |\nCommit\n  |\nAsync Post-Commit:\n  - Async Plugins\n  - Async Workflows (legacy)\n  - Power Automate triggers (eventual)\n  - Azure integrations (pattern-dependent)\n\n",[70,7592,7590],{"__ignoreMap":68},[17,7594,7595],{},"Pre\u002FPost Operation (sync) are the only places we can reliably enforce transactional integrity.\nAnything post-commit is eventually consistent by nature.",[5511,7597,7599],{"id":7598},"detailed-pipeline-view","Detailed Pipeline View",[63,7601,7604],{"className":7602,"code":7603,"language":5090},[5088],"Stage 10: PreValidation\n  - Validate inputs\n  - Block early with clear error\n  - No DB transaction\n\nStage 20: PreOperation (Transactional)\n  - Modify target before save\n  - Enforce business rules\n  - Set default values safely\n\nStage 30: PostOperation (Transactional)\n  - React to saved record\n  - Create\u002Fupdate related records\n  - Still in transaction\n\nStage 40: Async PostOperation (Non-transactional)\n  - Long-running work\n  - Integrations\n  - Notifications\n  - Retry-friendly operations\n\n",[70,7605,7603],{"__ignoreMap":68},[17,7607,7608],{},"If the business rule must be true at the moment data is saved, it belongs in Preoperation sync plug-in (or Custom API if invoked explicitly)",[12,7610,7612],{"id":7611},"comparison-table-execution-order-and-proscons","Comparison Table (Execution Order and Pros\u002FCons)",[5511,7614,7616],{"id":7615},"business-logic-options","Business Logic Options",[5875,7618,7619,7644],{},[5878,7620,7621],{},[5881,7622,7623,7626,7629,7632,7635,7638,7641],{},[5884,7624,7625],{},"Mechanism",[5884,7627,7628],{},"Executes Where",[5884,7630,7631],{},"Typical Trigger",[5884,7633,7634],{},"Execution Order",[5884,7636,7637],{},"Pros",[5884,7639,7640],{},"Cons",[5884,7642,7643],{},"Best For",[5891,7645,7646,7669,7692,7715,7737,7758,7781,7804],{},[5881,7647,7648,7651,7654,7657,7660,7663,7666],{},[5896,7649,7650],{},"Business Rule",[5896,7652,7653],{},"Client + Server(limited)",[5896,7655,7656],{},"Form events + limited server evaluation",[5896,7658,7659],{},"Usually before save UI,server eval varies by scenario",[5896,7661,7662],{},"Fast, no-code, easy",[5896,7664,7665],{},"Not reliable for complex server enforcement; limited capabilities",[5896,7667,7668],{},"Simple field validation\u002Fdefaults",[5881,7670,7671,7674,7677,7680,7683,7686,7689],{},[5896,7672,7673],{},"Javascript (Form)",[5896,7675,7676],{},"Client",[5896,7678,7679],{},"Form load\u002Fchange\u002Fsave",[5896,7681,7682],{},"Before save(client), can block save",[5896,7684,7685],{},"Great UX control, immediate ffedback",[5896,7687,7688],{},"Not server-enforced; bypassable via API\u002Fintegration",[5896,7690,7691],{},"UI behavior, form logic",[5881,7693,7694,7697,7700,7703,7706,7709,7712],{},[5896,7695,7696],{},"Plugin (Sync)",[5896,7698,7699],{},"Server",[5896,7701,7702],{},"Dataverse message pipeline",[5896,7704,7705],{},"In-transaction(Pre\u002Fpost Operation)",[5896,7707,7708],{},"Strong integrity, consiostent across UI\u002FAPI",[5896,7710,7711],{},"Performance risk if heavy, needs ALM discipline",[5896,7713,7714],{},"Validation, invariants, transactional updates",[5881,7716,7717,7720,7722,7725,7728,7731,7734],{},[5896,7718,7719],{},"Plugin (Async)",[5896,7721,7699],{},[5896,7723,7724],{},"Post-commit",[5896,7726,7727],{},"After commit",[5896,7729,7730],{},"Safer for long work; retryable patterns",[5896,7732,7733],{},"Eventual consistency; delayed user-visible effects",[5896,7735,7736],{},"Notifications, integrations, enrichments",[5881,7738,7739,7741,7743,7746,7749,7752,7755],{},[5896,7740,104],{},[5896,7742,7699],{},[5896,7744,7745],{},"Explicit invocation",[5896,7747,7748],{},"Executes when called; can be transactional",[5896,7750,7751],{},"Strong contract, reusable, explicit entrypoint",[5896,7753,7754],{},"Requires dev discipline; still must manage performance",[5896,7756,7757],{},"Complex business operations, \"commands\"",[5881,7759,7760,7763,7766,7769,7772,7775,7778],{},[5896,7761,7762],{},"Legacy Background Workflow (Dataverse Process)",[5896,7764,7765],{},"Dataverse Async Service",[5896,7767,7768],{},"Record Create \u002F Update \u002F Status Change \u002F On-demand",[5896,7770,7771],{},"Can be sync or async",[5896,7773,7774],{},"No 2-min sync limitLow-codeTransaction safe (runs post-commit)Retries via system job",[5896,7776,7777],{},"Slower executionLimited debuggingNot future-facing (Power Automate preferred)Performance impact at scale",[5896,7779,7780],{},"Simple background automationBusiness logic without codeLow-medium volume processing",[5881,7782,7783,7786,7789,7792,7795,7798,7801],{},[5896,7784,7785],{},"Custom Workflow Activity (.NET extension of workflow)",[5896,7787,7788],{},"Dataverse Sandbox (Async Service)",[5896,7790,7791],{},"Invoked inside workflow step",[5896,7793,7794],{},"Runs inside workflow execution (async)",[5896,7796,7797],{},"Extend workflow with custom logicReusable activityStructured inputs\u002Foutputs",[5896,7799,7800],{},"Sandbox limits applyNo fine-grained pipeline controlHarder to maintainLegacy architectureNot ideal for heavy compute",[5896,7802,7803],{},"Small custom business rules inside legacy workflow",[5881,7805,7806,7809,7812,7815,7818,7821,7824],{},[5896,7807,7808],{},"Power Automate",[5896,7810,7811],{},"Cloud",[5896,7813,7814],{},"Event triggers or manual",[5896,7816,7817],{},"Async, post commit",[5896,7819,7820],{},"Great for orchestration and connectors. ALM friendly and cofig seperation if made solution aware",[5896,7822,7823],{},"Throttling, retries cuase duplication risk, not transactional",[5896,7825,7826],{},"Orchestration, approvals, notifications, integrations",[5511,7828,7830],{"id":7829},"exceution-order-reality","Exceution order reality",[4907,7832,7833,7836,7839],{},[4826,7834,7835],{},"Client(Business Rule\u002FJS): before save but bypassable",[4826,7837,7838],{},"Server transactional(Sync plugin\u002FCustom API\u002FAzure Webhook\u002FWorkflow): authoritative enforcement",[4826,7840,7841],{},"Post commit(Flows\u002FAsync plugins): orchestration & side effects",[12,7843,7845],{"id":7844},"decision-matrix","Decision Matrix",[5875,7847,7848,7861],{},[5878,7849,7850],{},[5881,7851,7852,7855,7858],{},[5884,7853,7854],{},"Requirement",[5884,7856,7857],{},"Choose",[5884,7859,7860],{},"Why",[5891,7862,7863,7874,7885,7895,7906,7917,7927,7938],{},[5881,7864,7865,7868,7871],{},[5896,7866,7867],{},"Must enforce data integrity at save time",[5896,7869,7870],{},"Sync plugin (Preoperation)",[5896,7872,7873],{},"Transactional,consistent across UI\u002FAPI",[5881,7875,7876,7879,7882],{},[5896,7877,7878],{},"Must run long-running work(seconds\u002Fminutes)",[5896,7880,7881],{},"Async plug-in or Power Automate",[5896,7883,7884],{},"Avoid blocking transaction\u002FUI",[5881,7886,7887,7890,7892],{},[5896,7888,7889],{},"Needs lots of SaaS connectors\u002Fapprovals",[5896,7891,7808],{},[5896,7893,7894],{},"Best integration\u002Forchestration surface",[5881,7896,7897,7900,7903],{},[5896,7898,7899],{},"Needs explicit business operation",[5896,7901,7902],{},"Custom API(+ optional plugins behind it)",[5896,7904,7905],{},"Clear contract, reusable command model",[5881,7907,7908,7911,7914],{},[5896,7909,7910],{},"Needs immediate UI feedback(hide\u002Fshow\u002Fvalidate)",[5896,7912,7913],{},"Javascript+Business Rule",[5896,7915,7916],{},"Best user experience",[5881,7918,7919,7922,7924],{},[5896,7920,7921],{},"Must be callable from multiple clients consistently",[5896,7923,104],{},[5896,7925,7926],{},"Standard interface for apps\u002Fintegrations",[5881,7928,7929,7932,7935],{},[5896,7930,7931],{},"Needs retries and resilience across systems",[5896,7933,7934],{},"Power Automate(or Azure integration)",[5896,7936,7937],{},"Built in retry semantics(but design for idempotency)",[5881,7939,7940,7943,7946],{},[5896,7941,7942],{},"Must guarantee exactly-once updates",[5896,7944,7945],{},"Sync plugin + idempotency",[5896,7947,7948],{},"Flows may re-run;async can duplicate",[5511,7950,7952],{"id":7951},"architect-guidance","Architect Guidance",[4823,7954,7955,7958,7961,7964],{},[4826,7956,7957],{},"Use Custom API for \"business commands\"",[4826,7959,7960],{},"Use Sync Plug-in for \"invariants\"",[4826,7962,7963],{},"Use Power Automate for \"orchestration\"",[4826,7965,7966],{},"Use JS\u002FBusiness Rule for \"UX\"",[12,7968,7970],{"id":7969},"failure-recovery-playbooks","Failure Recovery Playbooks",[5511,7972,7974],{"id":7973},"sync-plugin-causing-save-failures","Sync Plugin Causing Save Failures",[17,7976,7977],{},[4802,7978,7979],{},"Symptoms",[4907,7981,7982,7985],{},[4826,7983,7984],{},"Users cannot create\u002Fupdate records",[4826,7986,7987],{},"Errors on save, often widespread",[17,7989,7990],{},[4802,7991,7992],{},"Immediate containment",[4907,7994,7995,7998],{},[4826,7996,7997],{},"Disable the plugin step(or reduce scope via filetring attributes)",[4826,7999,8000],{},"If managed solution:deploy emergency patch\u002Fhotfix",[17,8002,8003],{},[4802,8004,8005],{},"Root cause checks",[4907,8007,8008,8011,8014,8017],{},[4826,8009,8010],{},"Recent deployment\u002Fversion mismatch",[4826,8012,8013],{},"Null reference\u002Fassumption on missing tables",[4826,8015,8016],{},"Infinite loop due to update inside same message",[4826,8018,8019],{},"Unexpected excution context(different entity\u002Fmessage)",[17,8021,8022],{},[4802,8023,8024],{},"Hardening actions",[4907,8026,8027,8030,8033,8036],{},[4826,8028,8029],{},"Add strict input validation in PreValidation",[4826,8031,8032],{},"Guard with execution depth checks",[4826,8034,8035],{},"Use filtering attributes and early exit logic",[4826,8037,8038],{},"Add robust tracing(but don't leave verbose tracing on indefinitely)",[5865,8040,8042],{"id":8041},"async-pluginflow-duplication","Async Plugin\u002FFlow Duplication",[17,8044,8045],{},[4802,8046,7979],{},[4907,8048,8049,8052,8055],{},[4826,8050,8051],{},"Duplicate records",[4826,8053,8054],{},"Duplicate notification",[4826,8056,8057],{},"Double updates in downstream systems",[17,8059,8060],{},[4802,8061,7992],{},[4907,8063,8064,8067],{},[4826,8065,8066],{},"Pause\u002Fdisable flow or async step",[4826,8068,8069],{},"Stop external side effects(connectors\u002Fwebhooks) if possible",[17,8071,8072],{},[4802,8073,8005],{},[4907,8075,8076,8079,8082,8085],{},[4826,8077,8078],{},"Retries and non-idempotent design",[4826,8080,8081],{},"Trigger configured on both create and update",[4826,8083,8084],{},"Concurrency settings causing race conditions",[4826,8086,8087],{},"Multiple automations doing the same job",[17,8089,8090],{},[4802,8091,8024],{},[4907,8093,8094,8097,8100,8103],{},[4826,8095,8096],{},"Implement idempotency keys(alternate keys\u002F processed flags)",[4826,8098,8099],{},"Add \"already processed?\" checks",[4826,8101,8102],{},"Reduce trigger conditions",[4826,8104,8105],{},"Use controlled concurrency and retry policies",[5865,8107,8109],{"id":8108},"post-commit-orchestration-delay-causes-business-break","Post-commit Orchestration Delay Causes Business Break",[17,8111,8112],{},[4802,8113,7979],{},[4907,8115,8116,8119],{},[4826,8117,8118],{},"It eventually updates, but business process expects immediate results",[4826,8120,8121],{},"Users see incomplete data after save",[17,8123,8124],{},[4802,8125,7992],{},[4907,8127,8128,8131],{},[4826,8129,8130],{},"Communicate expected delay and provide UI indicator if possible",[4826,8132,8133],{},"If truly blocking, move critical logic into sync plugin or Custom API",[17,8135,8136],{},[4802,8137,8024],{},[4907,8139,8140,8143,8146],{},[4826,8141,8142],{},"Split logic: invariants sync, side effects async",[4826,8144,8145],{},"Add status fields (Pending\u002FCompleted) and user messaging",[4826,8147,8148],{},"Use asynchronous patterns intentionally, not accidently",[5865,8150,8152],{"id":8151},"deployment-layering-breaks-logic","Deployment Layering Breaks Logic",[17,8154,8155],{},[4802,8156,7979],{},[4907,8158,8159,8162,8165],{},[4826,8160,8161],{},"Works in Dev, failed in Prod",[4826,8163,8164],{},"Old behavior persists after removal",[4826,8166,8167],{},"Conflicting steps\u002Frules",[17,8169,8170],{},[4802,8171,7992],{},[4907,8173,8174,8177,8180],{},[4826,8175,8176],{},"Identify which solution layer is active",[4826,8178,8179],{},"Roll back to last known good managed solution",[4826,8181,8182],{},"Remove unmanaged customizations in Prod(policy enforcement)",[17,8184,8185],{},[4802,8186,8024],{},[4907,8188,8189,8192,8195,8198],{},[4826,8190,8191],{},"Strict no unmanaged in Prod",[4826,8193,8194],{},"Versioning discipline",[4826,8196,8197],{},"Component ownership and dependency mapping",[4826,8199,8200],{},"Use solution aware flows and environment variables",[5511,8202,8204],{"id":8203},"when-integration-causes-deadlock","When Integration Causes Deadlock",[17,8206,8207],{},[4802,8208,7979],{},[4907,8210,8211,8214,8217,8220,8223],{},[4826,8212,8213],{},"Save operation hangs or times out",[4826,8215,8216],{},"SQL timeout or deadlock exception surfaces in logs",[4826,8218,8219],{},"Intermittent failures under load",[4826,8221,8222],{},"Multiple related records locked during transaction",[4826,8224,8225],{},"Users report inconsistent or “random” save failures",[17,8227,8228],{},"Often appears only in higher-volume production environments.",[17,8230,8231],{},[4802,8232,8233],{},"Immediate Containment",[4907,8235,8236,8239,8242,8245],{},[4826,8237,8238],{},"Disable heavy synchronous plugins calling external systems",[4826,8240,8241],{},"Move external HTTP calls to Async plugin or Power Automate",[4826,8243,8244],{},"Reduce transactional scope (avoid cross-entity writes in same transaction)",[4826,8246,8247],{},"Review long-running logic inside PreOperation\u002FPostOperation",[17,8249,8250],{},"If deadlocks are frequent:",[4907,8252,8253,8256],{},[4826,8254,8255],{},"Temporarily isolate high-traffic updates",[4826,8257,8258],{},"Reduce concurrency as a short-term mitigation",[17,8260,8261],{},[4802,8262,8263],{},"Root Cause Checks",[4907,8265,8266,8269,8272,8275,8278],{},[4826,8267,8268],{},"Is a synchronous plugin making an HTTP call?",[4826,8270,8271],{},"Is the plugin updating multiple related records in one transaction?",[4826,8273,8274],{},"Are two plugins updating records in opposite order (lock inversion)?",[4826,8276,8277],{},"Are bulk operations triggering complex synchronous logic?",[4826,8279,8280],{},"Is Power Automate updating records also modified by sync plugins?",[17,8282,8283],{},"Classic deadlock pattern:",[63,8285,8288],{"className":8286,"code":8287,"language":5090},[5088],"Transaction A:\n- Locks Record 1  \n- Attempts to lock Record 2  \n\nTransaction B:\n- Locks Record 2  \n- Attempts to lock Record 1  \n\nResult → deadlock.\n",[70,8289,8287],{"__ignoreMap":68},[17,8291,8292],{},"In Dataverse, SQL is abstracted — but transactional locking behavior still applies.",[17,8294,8295],{},[4802,8296,8297],{},"Hardening Actions",[4907,8299,8300,8303,8306,8309,8312,8315],{},[4826,8301,8302],{},"Keep synchronous plugins minimal and deterministic",[4826,8304,8305],{},"Avoid cross-table updates in PreOperation unless absolutely required",[4826,8307,8308],{},"Move integration logic to Async stage",[4826,8310,8311],{},"Implement idempotency for external calls",[4826,8313,8314],{},"Reduce transaction size and write scope",[4826,8316,8317],{},"Avoid external API calls from sync plugins",[17,8319,8320,8323,8325],{},[4802,8321,8322],{},"Architectural rule:",[4903,8324],{},"\nThe longer a transaction runs, the higher the probability of deadlock.",[5511,8327,8329],{"id":8328},"when-plugin-depth-recursion-happens","When Plugin Depth Recursion Happens",[17,8331,8332],{},[4802,8333,7979],{},[4907,8335,8336,8339,8342,8345,8348,8351],{},[4826,8337,8338],{},"Save fails with an infinite loop or depth-related exception",[4826,8340,8341],{},"Plugin executes multiple times unexpectedly",[4826,8343,8344],{},"Record updates repeatedly without user action",[4826,8346,8347],{},"Performance degradation during create\u002Fupdate",[4826,8349,8350],{},"Execution context Depth value increases beyond 1",[4826,8352,8353],{},"Entire transaction rolls back",[17,8355,8356],{},[4802,8357,8233],{},[4907,8359,8360,8363,8369,8372,8375],{},[4826,8361,8362],{},"Temporarily disable the specific plugin step (not the full solution)",[4826,8364,8365,8366,8368],{},"Add a depth guard in code:",[4903,8367],{},"if (context.Depth > 1) return;",[4826,8370,8371],{},"Restrict Update steps to specific filtering attributes",[4826,8373,8374],{},"Remove \"All Attributes\" registrations where unnecessary",[4826,8376,8377],{},"Review PostOperation steps that update the same entity",[17,8379,8380],{},"If production impact is high, unregister only the problematic step while investigating.",[17,8382,8383],{},[4802,8384,8263],{},[4907,8386,8387,8390,8393,8396,8399],{},[4826,8388,8389],{},"Is the plugin updating the same entity that triggered it?",[4826,8391,8392],{},"Is it registered on Update without filtering attributes?",[4826,8394,8395],{},"Is a PostOperation plugin modifying fields that retrigger Update?",[4826,8397,8398],{},"Are multiple plugins updating each other across entities?",[4826,8400,8401],{},"Is Power Automate updating the same record and causing ping-pong execution?",[17,8403,8404],{},"Common failure pattern:",[17,8406,8407,8408,8410,8411,8413,8414,8416],{},"PostOperation plugin updates the same record",[4903,8409],{},"\n→ Update message fires again",[4903,8412],{},"\n→ Plugin runs again",[4903,8415],{},"\n→ Recursion escalates until depth limit is hit",[17,8418,8419],{},"Depth guards prevent explosion but do not fix flawed design.",[17,8421,8422],{},[4802,8423,8297],{},[4907,8425,8426,8429,8432,8435,8438,8441],{},[4826,8427,8428],{},"Always use filtering attributes on Update steps",[4826,8430,8431],{},"Prefer PreOperation when modifying the target entity",[4826,8433,8434],{},"Add idempotency checks (only update if value actually changes)",[4826,8436,8437],{},"Introduce a processing flag field if necessary",[4826,8439,8440],{},"Avoid cross-layer recursion (Plugin ↔ Flow loop)",[4826,8442,8443],{},"Log Depth and CorrelationId during debugging",[17,8445,8446,8448,8450],{},[4802,8447,8322],{},[4903,8449],{},"\nIf your logic modifies the triggering entity, design it to execute exactly once.",[12,8452,8454],{"id":8453},"common-confusion-and-technical-challenge","Common Confusion and Technical Challenge",[4823,8456,8457],{},[4826,8458,8459],{},"Business Rules enforce server logic",[4907,8461,8462],{},[4826,8463,8464],{},"They are not substitue of server side invariants",[4823,8466,8467],{"start":83},[4826,8468,8469],{},"Power Automate is a rules engine",[4907,8471,8472],{},[4826,8473,8474],{},"It is an orchestration engine, not transactional",[4823,8476,8477],{"start":372},[4826,8478,8479],{},"Async= Safe",[4907,8481,8482],{},[4826,8483,8484],{},"Async is safer for UX, but introduces timing and duplication risks",[4823,8486,8487],{"start":436},[4826,8488,8489],{},"Custom API replaces Plugin",[4907,8491,8492],{},[4826,8493,8494],{},"Custom API is an entrypoint; enforcement still needs pipeline logic behind it",[12,8496,5003],{"id":5002},[4823,8498,8499,8502,8505,8508],{},[4826,8500,8501],{},"Client logic improves UX but is bypassable",[4826,8503,8504],{},"Server transactional logic is authoritive",[4826,8506,8507],{},"Async orchestration is powerful but needs idempotency and exception management",[4826,8509,8510],{},"Custom APIs are the right tool for explicit business operation",{"title":68,"searchDepth":83,"depth":83,"links":8512},[8513,8514,8515,8516,8517,8522,8523],{"id":14,"depth":83,"text":15},{"id":7585,"depth":83,"text":7586},{"id":7611,"depth":83,"text":7612},{"id":7844,"depth":83,"text":7845},{"id":7969,"depth":83,"text":7970,"children":8518},[8519,8520,8521],{"id":8041,"depth":372,"text":8042},{"id":8108,"depth":372,"text":8109},{"id":8151,"depth":372,"text":8152},{"id":8453,"depth":83,"text":8454},{"id":5002,"depth":83,"text":5003},{"label":8525,"key":8526},"Business Logic","business-logic","2025-12-28","A practical architecture guide to placing business logic correctly in Microsoft Dataverse and Power Platform solutions.","\u002Fimages\u002Fdataverse-business-logic.jpg","Dataverse business logic architecture layers",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-business-logic",{"title":8534,"description":8535},"Dataverse Business Logic Placement Guide","Learn where to implement business logic in Dataverse using plugins, Power Automate, Power Fx, workflows, and client scripts with real architectural guidance.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F08.dataverse-business-logic","Architecture patterns and decision framework for placing business logic in Dataverse.",[122,120,4873],"P_Eo64orDORCcqARTHt_MDorv-0ZPHrnzAW6xYXQHMM",{"id":8541,"title":8542,"author":4793,"body":8543,"canonical":102,"category":10440,"date":8527,"description":10443,"draft":110,"extension":109,"featured":110,"image":10444,"imageAlt":10445,"meta":10446,"navigation":108,"order":7271,"path":10447,"seo":10448,"stem":10451,"summary":10452,"tags":10453,"updated":8527,"__hash__":10456},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F09.dataverse-api-integration-pattern.md","Integration Patterns",{"type":9,"value":8544,"toc":10431},[8545,8547,8553,8576,8579,8583,8587,8592,8603,8608,8619,8624,8632,8636,8640,8651,8655,8663,8667,8675,8679,8683,8691,8695,8700,8705,8713,8717,8721,8726,8730,8738,8742,8753,8757,8761,8767,8771,8782,8787,8798,8803,8814,8818,8824,8828,8842,8847,8852,8856,8862,8867,8878,8883,8891,8895,8899,9244,9249,9260,9264,9857,9861,9872,9876,9881,9914,9919,9938,9942,9946,9949,9957,9961,9966,9977,9982,9993,9997,10169,10175,10179,10182,10190,10195,10206,10210,10214,10222,10225,10236,10240,10246,10249,10259,10263,10268,10279,10282,10287,10301,10305,10310,10321,10326,10337,10343,10357,10361,10365,10382,10386,10403,10405,10408,10428],[12,8546,15],{"id":14},[17,8548,8549,8552],{},[4802,8550,8551],{},"Why Integrations Fail in Power Platform","\nMost Dataverse Integration failures are not bugs. They are architecture mismatches:",[4907,8554,8555,8558,8561,8564,8567,8570,8573],{},[4826,8556,8557],{},"Wrong API surface chosen",[4826,8559,8560],{},"Wrong identity model",[4826,8562,8563],{},"Chatty integrations",[4826,8565,8566],{},"Missing idempotency",[4826,8568,8569],{},"No throttling strategy",[4826,8571,8572],{},"Power Automate used for bulk sync",[4826,8574,8575],{},"Sync coupling between systems",[17,8577,8578],{},"Dataverse is a secure SaaS runtime, integration must behave as good citizen.",[12,8580,8582],{"id":8581},"dataverse-integration-options","Dataverse Integration Options",[5511,8584,8586],{"id":8585},"dataverse-web-apiodata","Dataverse Web API(OData)",[17,8588,8589],{},[4802,8590,8591],{},"Best for",[4907,8593,8594,8597,8600],{},[4826,8595,8596],{},"REST-based integration",[4826,8598,8599],{},"Cloud-native services",[4826,8601,8602],{},"Cross-platform clients",[17,8604,8605],{},[4802,8606,8607],{},"Strengths",[4907,8609,8610,8613,8616],{},[4826,8611,8612],{},"Universal",[4826,8614,8615],{},"Works with any language",[4826,8617,8618],{},"Supports batching",[17,8620,8621],{},[4802,8622,8623],{},"Trade-offs",[4907,8625,8626,8629],{},[4826,8627,8628],{},"OData query and payload constraints",[4826,8630,8631],{},"Require strong retry pattern",[5511,8633,8635],{"id":8634},"dataverse-sdknetserviceclient","Dataverse SDK(.NET\u002FServiceClient)",[17,8637,8638],{},[4802,8639,8591],{},[4907,8641,8642,8645,8648],{},[4826,8643,8644],{},"Enterprise .NET services",[4826,8646,8647],{},"More convenient abstarctions",[4826,8649,8650],{},"Batch operations via ExecuteMultiple",[17,8652,8653],{},[4802,8654,8607],{},[4907,8656,8657,8660],{},[4826,8658,8659],{},"Higher-level constructs",[4826,8661,8662],{},"Mature patterns for CRUD and metadata",[17,8664,8665],{},[4802,8666,8623],{},[4907,8668,8669,8672],{},[4826,8670,8671],{},"Runtime dependency on SDK libraries",[4826,8673,8674],{},"Still subject to service protection limits",[5511,8676,8678],{"id":8677},"tds-endpoint","TDS Endpoint",[17,8680,8681],{},[4802,8682,8591],{},[4907,8684,8685,8688],{},[4826,8686,8687],{},"Read heavy scenarios where supported",[4826,8689,8690],{},"Some BI\u002Fanalytics access patterns",[17,8692,8693],{},[4802,8694,8607],{},[4907,8696,8697],{},[4826,8698,8699],{},"Familiar SQL tooling",[17,8701,8702],{},[4802,8703,8704],{},"Trade-Offs",[4907,8706,8707,8710],{},[4826,8708,8709],{},"Not full SQL Server",[4826,8711,8712],{},"Read only database",[5511,8714,8716],{"id":8715},"power-automate-connectors","Power Automate Connectors",[17,8718,8719],{},[4802,8720,8591],{},[4907,8722,8723],{},[4826,8724,8725],{},"Orchestration, approvals, notification, connector-rich integrations",[17,8727,8728],{},[4802,8729,8607],{},[4907,8731,8732,8735],{},[4826,8733,8734],{},"Fast to build",[4826,8736,8737],{},"Business-friendly",[17,8739,8740],{},[4802,8741,8623],{},[4907,8743,8744,8747,8750],{},[4826,8745,8746],{},"Not transactional",[4826,8748,8749],{},"Throttling and retries can duplicate work",[4826,8751,8752],{},"Hard for bulk\u002Fhigh volume",[12,8754,8756],{"id":8755},"integration-architecture-diagramssync-vs-async-vs-event-driven","Integration Architecture Diagrams(Sync vs Async vs Event Driven)",[5511,8758,8760],{"id":8759},"synchronous-integration-tight-coupling-high-risk","Synchronous Integration (Tight Coupling -> High Risk)",[63,8762,8765],{"className":8763,"code":8764,"language":5090},[5088],"System A -(request)->Dataverse->(response)->System A\n    |\n    |- Blocks business flow if dataverse is slow or throttled\n\n",[70,8766,8764],{"__ignoreMap":68},[17,8768,8769],{},[4802,8770,7049],{},[4907,8772,8773,8776,8779],{},[4826,8774,8775],{},"The user truly must wait for a response",[4826,8777,8778],{},"Operation volume is low and predictable",[4826,8780,8781],{},"Failure",[17,8783,8784],{},[4802,8785,8786],{},"Avoid when",[4907,8788,8789,8792,8795],{},[4826,8790,8791],{},"High volume",[4826,8793,8794],{},"Cross-system dependency chains",[4826,8796,8797],{},"Retries are expected",[17,8799,8800],{},[4802,8801,8802],{},"High-risk failure models",[4907,8804,8805,8808,8811],{},[4826,8806,8807],{},"Latency spikes",[4826,8809,8810],{},"429 throttling breaks user transaction",[4826,8812,8813],{},"Timeouts cascade upstream",[5511,8815,8817],{"id":8816},"asynchronous-integration-decoupled-recommended","Asynchronous Integration (Decoupled - Recommended)",[63,8819,8822],{"className":8820,"code":8821,"language":5090},[5088],"System A -(enqueue)->Queue\u002FTopic->Worker->Dataverse\n    |                       |\n    |- User continous       |- Retries + Backoff + Idempotency\n\n",[70,8823,8821],{"__ignoreMap":68},[17,8825,8826],{},[4802,8827,7049],{},[4907,8829,8830,8833,8836,8839],{},[4826,8831,8832],{},"High Volume",[4826,8834,8835],{},"Cross-system sync",[4826,8837,8838],{},"External dependencies",[4826,8840,8841],{},"Retries required",[17,8843,8844],{},[4802,8845,8846],{},"Key requirement",[4907,8848,8849],{},[4826,8850,8851],{},"Idempotency (exactly-once business effect)",[5511,8853,8855],{"id":8854},"event-driven-integrationmodern-enterprise-pattern","Event-Driven Integration(Modern Enterprise Pattern)",[63,8857,8860],{"className":8858,"code":8859,"language":5090},[5088],"Dataverse Event(Create\u002FUpdate)\n    |\nEvent Handler\u002FIntegration Layer\n    |\n    |- Enrich\u002FValidate\n    |- Publish downstream events\n    |- Update external systems\n\n",[70,8861,8859],{"__ignoreMap":68},[17,8863,8864],{},[4802,8865,8866],{},"Use when:",[4907,8868,8869,8872,8875],{},[4826,8870,8871],{},"Multiple downstream consumers",[4826,8873,8874],{},"You need repayability and auditing",[4826,8876,8877],{},"You want loose coupling",[17,8879,8880],{},[4802,8881,8882],{},"Common trap",[4907,8884,8885,8888],{},[4826,8886,8887],{},"Treating events as \"guranteed exactly-once\"",[4826,8889,8890],{},"Not having deduplication logic",[12,8892,8894],{"id":8893},"api-call-code-samples","API Call Code Samples",[5511,8896,8898],{"id":8897},"c-web-api-via-httpclient-and-client-credentials","C# (Web API via HTTPClient and Client Credentials)",[63,8900,8904],{"className":8901,"code":8902,"language":8903,"meta":68,"style":68},"language-C# shiki shiki-themes github-light github-dark","\nusing Microsoft.Identity.Client;\nusing System;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace ConnectDataverseApi\n{\n    static async Task Main()\n    {\n        string resourceUrl = \"https:\u002F\u002Fyourorg.api.crm.dynamics.com\";\n        var clientId = \"51f81489-12ee-4a9e-aaae-a2591f45987d\";\n        var redirectUri = \"http:\u002F\u002Flocalhost\";\n\n        var authBuilder = PublicClientApplicationBuilder.Create(clientId)\n            .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)\n            .WithRedirectUri(redirectUri).Build();\n\n        var scope = resourceUrl + \"\u002Fuser_impersonation\";\n        string[] scopes = {scope};\n\n        AuthenticationResult token = await authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync();\n\n        var client = new HttpClient()\n        {\n            BaseAddress = new Uri(resourceUrl+\"\u002Fapi\u002Fdata\u002Fv9.2\u002F\"),\n            Timeout = TimeSpan(0,2,0)\n        };\n\n        HttpRequestHeaders headers = client.DefaultRequestHeaders;\n        headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", token.AccessToken);\n        headers.Add(\"OData-MaxVersion\", \"4.0\");\n        headers.Add(\"OData-Version\", \"4.0\");\n        headers.Accept.Add(new MediaTypeWithQualityHeaderValue(\"application\u002Fjson\"));\n\n        var response = await client.GetAsync(\"WhoAmI()\");\n        if (response.IsSuccessStatusCode)\n        {\n            Guid userId = new Guid();\n            string jsonContent = await response.Content.ReadAsStringAsync();\n            WhoAmIResponse whoAmIResponse = JsonSerializer.Deserialize\u003CWhoAmIResponse>(jsonContent);\n            userId = whoAmIResponse.UserId;\n            System.Console.WriteLine( $\"UserId: {userId}\") ;\n\n        }\n        else\n        {\n            System.Console.WriteLine($\"Error: {response.StatusCode} - {response.ReasonPhrase}\");\n        }\n    }\n\n    public class WhoAmIResponse\n    {\n        public Guid UserId { get; set; }\n        public Guid BusinessUnitId { get; set; }\n        public Guid OrganizationId { get; set; }\n    }\n}\n\n","C#",[70,8905,8906,8911,8916,8921,8926,8931,8936,8941,8945,8951,8957,8963,8969,8975,8981,8987,8992,8998,9004,9010,9015,9021,9027,9032,9038,9043,9049,9055,9061,9067,9073,9078,9084,9090,9096,9102,9108,9113,9119,9125,9130,9136,9142,9148,9154,9160,9165,9171,9177,9182,9188,9193,9199,9204,9210,9215,9221,9227,9233,9238],{"__ignoreMap":68},[73,8907,8908],{"class":75,"line":76},[73,8909,8910],{"emptyLinePlaceholder":108},"\n",[73,8912,8913],{"class":75,"line":83},[73,8914,8915],{},"using Microsoft.Identity.Client;\n",[73,8917,8918],{"class":75,"line":372},[73,8919,8920],{},"using System;\n",[73,8922,8923],{"class":75,"line":436},[73,8924,8925],{},"using System.Net.Http;\n",[73,8927,8928],{"class":75,"line":308},[73,8929,8930],{},"using System.Net.Http.Headers;\n",[73,8932,8933],{"class":75,"line":114},[73,8934,8935],{},"using System.Text.Json;\n",[73,8937,8938],{"class":75,"line":7232},[73,8939,8940],{},"using System.Threading.Tasks;\n",[73,8942,8943],{"class":75,"line":7271},[73,8944,8910],{"emptyLinePlaceholder":108},[73,8946,8948],{"class":75,"line":8947},9,[73,8949,8950],{},"namespace ConnectDataverseApi\n",[73,8952,8954],{"class":75,"line":8953},10,[73,8955,8956],{},"{\n",[73,8958,8960],{"class":75,"line":8959},11,[73,8961,8962],{},"    static async Task Main()\n",[73,8964,8966],{"class":75,"line":8965},12,[73,8967,8968],{},"    {\n",[73,8970,8972],{"class":75,"line":8971},13,[73,8973,8974],{},"        string resourceUrl = \"https:\u002F\u002Fyourorg.api.crm.dynamics.com\";\n",[73,8976,8978],{"class":75,"line":8977},14,[73,8979,8980],{},"        var clientId = \"51f81489-12ee-4a9e-aaae-a2591f45987d\";\n",[73,8982,8984],{"class":75,"line":8983},15,[73,8985,8986],{},"        var redirectUri = \"http:\u002F\u002Flocalhost\";\n",[73,8988,8990],{"class":75,"line":8989},16,[73,8991,8910],{"emptyLinePlaceholder":108},[73,8993,8995],{"class":75,"line":8994},17,[73,8996,8997],{},"        var authBuilder = PublicClientApplicationBuilder.Create(clientId)\n",[73,8999,9001],{"class":75,"line":9000},18,[73,9002,9003],{},"            .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)\n",[73,9005,9007],{"class":75,"line":9006},19,[73,9008,9009],{},"            .WithRedirectUri(redirectUri).Build();\n",[73,9011,9013],{"class":75,"line":9012},20,[73,9014,8910],{"emptyLinePlaceholder":108},[73,9016,9018],{"class":75,"line":9017},21,[73,9019,9020],{},"        var scope = resourceUrl + \"\u002Fuser_impersonation\";\n",[73,9022,9024],{"class":75,"line":9023},22,[73,9025,9026],{},"        string[] scopes = {scope};\n",[73,9028,9030],{"class":75,"line":9029},23,[73,9031,8910],{"emptyLinePlaceholder":108},[73,9033,9035],{"class":75,"line":9034},24,[73,9036,9037],{},"        AuthenticationResult token = await authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync();\n",[73,9039,9041],{"class":75,"line":9040},25,[73,9042,8910],{"emptyLinePlaceholder":108},[73,9044,9046],{"class":75,"line":9045},26,[73,9047,9048],{},"        var client = new HttpClient()\n",[73,9050,9052],{"class":75,"line":9051},27,[73,9053,9054],{},"        {\n",[73,9056,9058],{"class":75,"line":9057},28,[73,9059,9060],{},"            BaseAddress = new Uri(resourceUrl+\"\u002Fapi\u002Fdata\u002Fv9.2\u002F\"),\n",[73,9062,9064],{"class":75,"line":9063},29,[73,9065,9066],{},"            Timeout = TimeSpan(0,2,0)\n",[73,9068,9070],{"class":75,"line":9069},30,[73,9071,9072],{},"        };\n",[73,9074,9076],{"class":75,"line":9075},31,[73,9077,8910],{"emptyLinePlaceholder":108},[73,9079,9081],{"class":75,"line":9080},32,[73,9082,9083],{},"        HttpRequestHeaders headers = client.DefaultRequestHeaders;\n",[73,9085,9087],{"class":75,"line":9086},33,[73,9088,9089],{},"        headers.Authorization = new AuthenticationHeaderValue(\"Bearer\", token.AccessToken);\n",[73,9091,9093],{"class":75,"line":9092},34,[73,9094,9095],{},"        headers.Add(\"OData-MaxVersion\", \"4.0\");\n",[73,9097,9099],{"class":75,"line":9098},35,[73,9100,9101],{},"        headers.Add(\"OData-Version\", \"4.0\");\n",[73,9103,9105],{"class":75,"line":9104},36,[73,9106,9107],{},"        headers.Accept.Add(new MediaTypeWithQualityHeaderValue(\"application\u002Fjson\"));\n",[73,9109,9111],{"class":75,"line":9110},37,[73,9112,8910],{"emptyLinePlaceholder":108},[73,9114,9116],{"class":75,"line":9115},38,[73,9117,9118],{},"        var response = await client.GetAsync(\"WhoAmI()\");\n",[73,9120,9122],{"class":75,"line":9121},39,[73,9123,9124],{},"        if (response.IsSuccessStatusCode)\n",[73,9126,9128],{"class":75,"line":9127},40,[73,9129,9054],{},[73,9131,9133],{"class":75,"line":9132},41,[73,9134,9135],{},"            Guid userId = new Guid();\n",[73,9137,9139],{"class":75,"line":9138},42,[73,9140,9141],{},"            string jsonContent = await response.Content.ReadAsStringAsync();\n",[73,9143,9145],{"class":75,"line":9144},43,[73,9146,9147],{},"            WhoAmIResponse whoAmIResponse = JsonSerializer.Deserialize\u003CWhoAmIResponse>(jsonContent);\n",[73,9149,9151],{"class":75,"line":9150},44,[73,9152,9153],{},"            userId = whoAmIResponse.UserId;\n",[73,9155,9157],{"class":75,"line":9156},45,[73,9158,9159],{},"            System.Console.WriteLine( $\"UserId: {userId}\") ;\n",[73,9161,9163],{"class":75,"line":9162},46,[73,9164,8910],{"emptyLinePlaceholder":108},[73,9166,9168],{"class":75,"line":9167},47,[73,9169,9170],{},"        }\n",[73,9172,9174],{"class":75,"line":9173},48,[73,9175,9176],{},"        else\n",[73,9178,9180],{"class":75,"line":9179},49,[73,9181,9054],{},[73,9183,9185],{"class":75,"line":9184},50,[73,9186,9187],{},"            System.Console.WriteLine($\"Error: {response.StatusCode} - {response.ReasonPhrase}\");\n",[73,9189,9191],{"class":75,"line":9190},51,[73,9192,9170],{},[73,9194,9196],{"class":75,"line":9195},52,[73,9197,9198],{},"    }\n",[73,9200,9202],{"class":75,"line":9201},53,[73,9203,8910],{"emptyLinePlaceholder":108},[73,9205,9207],{"class":75,"line":9206},54,[73,9208,9209],{},"    public class WhoAmIResponse\n",[73,9211,9213],{"class":75,"line":9212},55,[73,9214,8968],{},[73,9216,9218],{"class":75,"line":9217},56,[73,9219,9220],{},"        public Guid UserId { get; set; }\n",[73,9222,9224],{"class":75,"line":9223},57,[73,9225,9226],{},"        public Guid BusinessUnitId { get; set; }\n",[73,9228,9230],{"class":75,"line":9229},58,[73,9231,9232],{},"        public Guid OrganizationId { get; set; }\n",[73,9234,9236],{"class":75,"line":9235},59,[73,9237,9198],{},[73,9239,9241],{"class":75,"line":9240},60,[73,9242,9243],{},"}\n",[17,9245,9246],{},[4802,9247,9248],{},"Key notes",[4907,9250,9251,9254,9257],{},[4826,9252,9253],{},"Use MSAL for token acquisition",[4826,9255,9256],{},"Prefer certificate over client secret",[4826,9258,9259],{},"Always implement 429\u002F5xx with backoff",[5511,9261,9263],{"id":9262},"javascript-browserspa-using-fetch","JavaScript (Browser\u002FSPA using fetch)",[63,9265,9267],{"className":65,"code":9266,"language":67,"meta":68,"style":68},"\nconst config = {\n   baseUrl: process.env.BASE_URL,\n   clientId: process.env.CLIENT_ID,\n   tenantId: process.env.TENANT_ID,\n   redirectUri: process.env.REDIRECT_URI,\n};\n\nconst msalConfig = {\n    auth: {\n        clientId: config.clientId,\n        authority: `https:\u002F\u002Flogin.microsoftonline.com\u002F${config.tenantId}`,\n        redirectUri: config.redirectUri,\n    },\n    cache:{\n        cacheLocation: \"sessionStorage\",\n        storeAuthStateInCookie: false,\n    }\n}\n\nconst msalInstance = new msal.PublicClientApplication(msalConfig);\n\nasync function getToken() {\n    const request = {\n        scopes: [config.baseUrl+\"\u002F.default\"],\n    };\n    try{\n        const response = await msalInstance.acquireTokenSilent(request);\n        return response.accessToken;\n    }\n    catch(error){\n        if(error instanceof msal.InteractionRequiredAuthError){\n            const response = await msalInstance.acquireTokenPopup(request);\n            return response.accessToken;\n        }\n        else{\n            console.error(\"Token acquisition failed:\", error);\n            throw error;\n        }\n    }\n}\n\nasync function whoAmI() {\n    const token = await getToken();\n    const request = new Request(`${config.baseUrl}\u002Fapi\u002Fdata\u002Fv9.2\u002FWhoAmI`, {\n        headers: {\n            Authorization: `Bearer ${token}`,\n            \"Content-Type\": \"application\u002Fjson\",\n            Accept: \"application\u002Fjson\",\n            \"OData-MaxVersion\": \"4.0\",\n            \"OData-Version\": \"4.0\",\n        }\n    });\n    const response = await fetch(request);\n    if(!response.ok){\n        throw new Error(`API call failed with status ${response.status}`);\n    }\n    return response.json();\n}\n\n",[70,9268,9269,9273,9289,9300,9310,9320,9330,9335,9339,9350,9355,9360,9382,9387,9392,9397,9407,9417,9421,9425,9429,9451,9455,9469,9481,9495,9500,9507,9529,9537,9541,9549,9571,9589,9596,9600,9607,9624,9632,9636,9640,9644,9648,9659,9675,9706,9711,9726,9739,9748,9760,9771,9775,9780,9795,9808,9836,9840,9853],{"__ignoreMap":68},[73,9270,9271],{"class":75,"line":76},[73,9272,8910],{"emptyLinePlaceholder":108},[73,9274,9275,9279,9283,9286],{"class":75,"line":83},[73,9276,9278],{"class":9277},"szBVR","const",[73,9280,9282],{"class":9281},"sj4cs"," config",[73,9284,9285],{"class":9277}," =",[73,9287,9288],{"class":86}," {\n",[73,9290,9291,9294,9297],{"class":75,"line":372},[73,9292,9293],{"class":86},"   baseUrl: process.env.",[73,9295,9296],{"class":9281},"BASE_URL",[73,9298,9299],{"class":86},",\n",[73,9301,9302,9305,9308],{"class":75,"line":436},[73,9303,9304],{"class":86},"   clientId: process.env.",[73,9306,9307],{"class":9281},"CLIENT_ID",[73,9309,9299],{"class":86},[73,9311,9312,9315,9318],{"class":75,"line":308},[73,9313,9314],{"class":86},"   tenantId: process.env.",[73,9316,9317],{"class":9281},"TENANT_ID",[73,9319,9299],{"class":86},[73,9321,9322,9325,9328],{"class":75,"line":114},[73,9323,9324],{"class":86},"   redirectUri: process.env.",[73,9326,9327],{"class":9281},"REDIRECT_URI",[73,9329,9299],{"class":86},[73,9331,9332],{"class":75,"line":7232},[73,9333,9334],{"class":86},"};\n",[73,9336,9337],{"class":75,"line":7271},[73,9338,8910],{"emptyLinePlaceholder":108},[73,9340,9341,9343,9346,9348],{"class":75,"line":8947},[73,9342,9278],{"class":9277},[73,9344,9345],{"class":9281}," msalConfig",[73,9347,9285],{"class":9277},[73,9349,9288],{"class":86},[73,9351,9352],{"class":75,"line":8953},[73,9353,9354],{"class":86},"    auth: {\n",[73,9356,9357],{"class":75,"line":8959},[73,9358,9359],{"class":86},"        clientId: config.clientId,\n",[73,9361,9362,9365,9369,9372,9374,9377,9380],{"class":75,"line":8965},[73,9363,9364],{"class":86},"        authority: ",[73,9366,9368],{"class":9367},"sZZnC","`https:\u002F\u002Flogin.microsoftonline.com\u002F${",[73,9370,9371],{"class":86},"config",[73,9373,5532],{"class":9367},[73,9375,9376],{"class":86},"tenantId",[73,9378,9379],{"class":9367},"}`",[73,9381,9299],{"class":86},[73,9383,9384],{"class":75,"line":8971},[73,9385,9386],{"class":86},"        redirectUri: config.redirectUri,\n",[73,9388,9389],{"class":75,"line":8977},[73,9390,9391],{"class":86},"    },\n",[73,9393,9394],{"class":75,"line":8983},[73,9395,9396],{"class":86},"    cache:{\n",[73,9398,9399,9402,9405],{"class":75,"line":8989},[73,9400,9401],{"class":86},"        cacheLocation: ",[73,9403,9404],{"class":9367},"\"sessionStorage\"",[73,9406,9299],{"class":86},[73,9408,9409,9412,9415],{"class":75,"line":8994},[73,9410,9411],{"class":86},"        storeAuthStateInCookie: ",[73,9413,9414],{"class":9281},"false",[73,9416,9299],{"class":86},[73,9418,9419],{"class":75,"line":9000},[73,9420,9198],{"class":86},[73,9422,9423],{"class":75,"line":9006},[73,9424,9243],{"class":86},[73,9426,9427],{"class":75,"line":9012},[73,9428,8910],{"emptyLinePlaceholder":108},[73,9430,9431,9433,9436,9438,9441,9444,9448],{"class":75,"line":9017},[73,9432,9278],{"class":9277},[73,9434,9435],{"class":9281}," msalInstance",[73,9437,9285],{"class":9277},[73,9439,9440],{"class":9277}," new",[73,9442,9443],{"class":86}," msal.",[73,9445,9447],{"class":9446},"sScJk","PublicClientApplication",[73,9449,9450],{"class":86},"(msalConfig);\n",[73,9452,9453],{"class":75,"line":9023},[73,9454,8910],{"emptyLinePlaceholder":108},[73,9456,9457,9460,9463,9466],{"class":75,"line":9029},[73,9458,9459],{"class":9277},"async",[73,9461,9462],{"class":9277}," function",[73,9464,9465],{"class":9446}," getToken",[73,9467,9468],{"class":86},"() {\n",[73,9470,9471,9474,9477,9479],{"class":75,"line":9034},[73,9472,9473],{"class":9277},"    const",[73,9475,9476],{"class":9281}," request",[73,9478,9285],{"class":9277},[73,9480,9288],{"class":86},[73,9482,9483,9486,9489,9492],{"class":75,"line":9040},[73,9484,9485],{"class":86},"        scopes: [config.baseUrl",[73,9487,9488],{"class":9277},"+",[73,9490,9491],{"class":9367},"\"\u002F.default\"",[73,9493,9494],{"class":86},"],\n",[73,9496,9497],{"class":75,"line":9045},[73,9498,9499],{"class":86},"    };\n",[73,9501,9502,9505],{"class":75,"line":9051},[73,9503,9504],{"class":9277},"    try",[73,9506,8956],{"class":86},[73,9508,9509,9512,9515,9517,9520,9523,9526],{"class":75,"line":9057},[73,9510,9511],{"class":9277},"        const",[73,9513,9514],{"class":9281}," response",[73,9516,9285],{"class":9277},[73,9518,9519],{"class":9277}," await",[73,9521,9522],{"class":86}," msalInstance.",[73,9524,9525],{"class":9446},"acquireTokenSilent",[73,9527,9528],{"class":86},"(request);\n",[73,9530,9531,9534],{"class":75,"line":9063},[73,9532,9533],{"class":9277},"        return",[73,9535,9536],{"class":86}," response.accessToken;\n",[73,9538,9539],{"class":75,"line":9069},[73,9540,9198],{"class":86},[73,9542,9543,9546],{"class":75,"line":9075},[73,9544,9545],{"class":9277},"    catch",[73,9547,9548],{"class":86},"(error){\n",[73,9550,9551,9554,9557,9560,9563,9565,9568],{"class":75,"line":9080},[73,9552,9553],{"class":9277},"        if",[73,9555,9556],{"class":86},"(error ",[73,9558,9559],{"class":9277},"instanceof",[73,9561,9562],{"class":9446}," msal",[73,9564,5532],{"class":86},[73,9566,9567],{"class":9446},"InteractionRequiredAuthError",[73,9569,9570],{"class":86},"){\n",[73,9572,9573,9576,9578,9580,9582,9584,9587],{"class":75,"line":9086},[73,9574,9575],{"class":9277},"            const",[73,9577,9514],{"class":9281},[73,9579,9285],{"class":9277},[73,9581,9519],{"class":9277},[73,9583,9522],{"class":86},[73,9585,9586],{"class":9446},"acquireTokenPopup",[73,9588,9528],{"class":86},[73,9590,9591,9594],{"class":75,"line":9092},[73,9592,9593],{"class":9277},"            return",[73,9595,9536],{"class":86},[73,9597,9598],{"class":75,"line":9098},[73,9599,9170],{"class":86},[73,9601,9602,9605],{"class":75,"line":9104},[73,9603,9604],{"class":9277},"        else",[73,9606,8956],{"class":86},[73,9608,9609,9612,9615,9618,9621],{"class":75,"line":9110},[73,9610,9611],{"class":86},"            console.",[73,9613,9614],{"class":9446},"error",[73,9616,9617],{"class":86},"(",[73,9619,9620],{"class":9367},"\"Token acquisition failed:\"",[73,9622,9623],{"class":86},", error);\n",[73,9625,9626,9629],{"class":75,"line":9115},[73,9627,9628],{"class":9277},"            throw",[73,9630,9631],{"class":86}," error;\n",[73,9633,9634],{"class":75,"line":9121},[73,9635,9170],{"class":86},[73,9637,9638],{"class":75,"line":9127},[73,9639,9198],{"class":86},[73,9641,9642],{"class":75,"line":9132},[73,9643,9243],{"class":86},[73,9645,9646],{"class":75,"line":9138},[73,9647,8910],{"emptyLinePlaceholder":108},[73,9649,9650,9652,9654,9657],{"class":75,"line":9144},[73,9651,9459],{"class":9277},[73,9653,9462],{"class":9277},[73,9655,9656],{"class":9446}," whoAmI",[73,9658,9468],{"class":86},[73,9660,9661,9663,9666,9668,9670,9672],{"class":75,"line":9150},[73,9662,9473],{"class":9277},[73,9664,9665],{"class":9281}," token",[73,9667,9285],{"class":9277},[73,9669,9519],{"class":9277},[73,9671,9465],{"class":9446},[73,9673,9674],{"class":86},"();\n",[73,9676,9677,9679,9681,9683,9685,9688,9690,9693,9695,9697,9700,9703],{"class":75,"line":9156},[73,9678,9473],{"class":9277},[73,9680,9476],{"class":9281},[73,9682,9285],{"class":9277},[73,9684,9440],{"class":9277},[73,9686,9687],{"class":9446}," Request",[73,9689,9617],{"class":86},[73,9691,9692],{"class":9367},"`${",[73,9694,9371],{"class":86},[73,9696,5532],{"class":9367},[73,9698,9699],{"class":86},"baseUrl",[73,9701,9702],{"class":9367},"}\u002Fapi\u002Fdata\u002Fv9.2\u002FWhoAmI`",[73,9704,9705],{"class":86},", {\n",[73,9707,9708],{"class":75,"line":9162},[73,9709,9710],{"class":86},"        headers: {\n",[73,9712,9713,9716,9719,9722,9724],{"class":75,"line":9167},[73,9714,9715],{"class":86},"            Authorization: ",[73,9717,9718],{"class":9367},"`Bearer ${",[73,9720,9721],{"class":86},"token",[73,9723,9379],{"class":9367},[73,9725,9299],{"class":86},[73,9727,9728,9731,9734,9737],{"class":75,"line":9173},[73,9729,9730],{"class":9367},"            \"Content-Type\"",[73,9732,9733],{"class":86},": ",[73,9735,9736],{"class":9367},"\"application\u002Fjson\"",[73,9738,9299],{"class":86},[73,9740,9741,9744,9746],{"class":75,"line":9179},[73,9742,9743],{"class":86},"            Accept: ",[73,9745,9736],{"class":9367},[73,9747,9299],{"class":86},[73,9749,9750,9753,9755,9758],{"class":75,"line":9184},[73,9751,9752],{"class":9367},"            \"OData-MaxVersion\"",[73,9754,9733],{"class":86},[73,9756,9757],{"class":9367},"\"4.0\"",[73,9759,9299],{"class":86},[73,9761,9762,9765,9767,9769],{"class":75,"line":9190},[73,9763,9764],{"class":9367},"            \"OData-Version\"",[73,9766,9733],{"class":86},[73,9768,9757],{"class":9367},[73,9770,9299],{"class":86},[73,9772,9773],{"class":75,"line":9195},[73,9774,9170],{"class":86},[73,9776,9777],{"class":75,"line":9201},[73,9778,9779],{"class":86},"    });\n",[73,9781,9782,9784,9786,9788,9790,9793],{"class":75,"line":9206},[73,9783,9473],{"class":9277},[73,9785,9514],{"class":9281},[73,9787,9285],{"class":9277},[73,9789,9519],{"class":9277},[73,9791,9792],{"class":9446}," fetch",[73,9794,9528],{"class":86},[73,9796,9797,9800,9802,9805],{"class":75,"line":9212},[73,9798,9799],{"class":9277},"    if",[73,9801,9617],{"class":86},[73,9803,9804],{"class":9277},"!",[73,9806,9807],{"class":86},"response.ok){\n",[73,9809,9810,9813,9815,9818,9820,9823,9826,9828,9831,9833],{"class":75,"line":9217},[73,9811,9812],{"class":9277},"        throw",[73,9814,9440],{"class":9277},[73,9816,9817],{"class":9446}," Error",[73,9819,9617],{"class":86},[73,9821,9822],{"class":9367},"`API call failed with status ${",[73,9824,9825],{"class":86},"response",[73,9827,5532],{"class":9367},[73,9829,9830],{"class":86},"status",[73,9832,9379],{"class":9367},[73,9834,9835],{"class":86},");\n",[73,9837,9838],{"class":75,"line":9223},[73,9839,9198],{"class":86},[73,9841,9842,9845,9848,9851],{"class":75,"line":9229},[73,9843,9844],{"class":9277},"    return",[73,9846,9847],{"class":86}," response.",[73,9849,9850],{"class":9446},"json",[73,9852,9674],{"class":86},[73,9854,9855],{"class":75,"line":9235},[73,9856,9243],{"class":86},[17,9858,9859],{},[4802,9860,9248],{},[4907,9862,9863,9866,9869],{},[4826,9864,9865],{},"MSAL.js is used with node.js",[4826,9867,9868],{},"Client side call inherit user context",[4826,9870,9871],{},"Avoid large queries from browser",[5511,9873,9875],{"id":9874},"postman-pattern","Postman Pattern",[17,9877,9878],{},[4802,9879,9880],{},"Request",[4823,9882,9883,9886,9894],{},[4826,9884,9885],{},"Method: GET",[4826,9887,9888,9889,9893],{},"URL: ",[9890,9891],"binding",{"value":9892},"orgUrl","\u002Fapi\u002Fdata\u002Fv9.2\u002F$metadata#accounts(name,revenue,address1_city)",[4826,9895,9896,9897],{},"Headers:\n",[4823,9898,9899,9905,9908,9911],{},[4826,9900,9901,9902],{},"Authorization: Bearer ",[9890,9903],{"value":9904},"access_token",[4826,9906,9907],{},"Accept: application\u002Fjson",[4826,9909,9910],{},"OData-MaxVersion: 4.0",[4826,9912,9913],{},"Odata-Version: 4.0",[17,9915,9916],{},[4802,9917,9918],{},"Best practice",[4907,9920,9921],{},[4826,9922,9923,9924],{},"Use postman to validate\n",[4907,9925,9926,9929,9932,9935],{},[4826,9927,9928],{},"identity context",[4826,9930,9931],{},"security trimming",[4826,9933,9934],{},"response payload",[4826,9936,9937],{},"throttling behavior",[12,9939,9941],{"id":9940},"throttling-backoff-template","Throttling & Backoff Template",[5511,9943,9945],{"id":9944},"what-throttling-means","What Throttling Means",[17,9947,9948],{},"Throttling is not an error, it's a platform protection.\nCommon throttling responses:",[4907,9950,9951,9954],{},[4826,9952,9953],{},"429 Too Many Requests",[4826,9955,9956],{},"Sometimes 503 Service Unavailable during load",[5511,9958,9960],{"id":9959},"retry-strategy","Retry Strategy",[17,9962,9963],{},[4802,9964,9965],{},"Retry",[4907,9967,9968,9971,9974],{},[4826,9969,9970],{},"429",[4826,9972,9973],{},"502\u002F503\u002F504 (transient)",[4826,9975,9976],{},"network timeouts",[17,9978,9979],{},[4802,9980,9981],{},"Do not retry blindly",[4907,9983,9984,9987,9990],{},[4826,9985,9986],{},"400 (bad request)",[4826,9988,9989],{},"401\u002F403 (auth\u002Fpermission)",[4826,9991,9992],{},"409\u002F412 (conflict) unless you know what is being done",[5511,9994,9996],{"id":9995},"backoff-templatepseudo-logic","Backoff Template(Pseudo Logic)",[63,9998,10000],{"className":65,"code":9999,"language":67,"meta":68,"style":68},"attempt = 0\ndelay = baseDelayMs\n\nwhile attempt \u003C maxAttempts:\n    response = callDataverse()\n\nif success:\n    return\n\nif response is 429 or transient 5xx:\n    wait(delay + jitter)\n    delay = min(delay*2, maxDelay)\n    attempt++\n    continue\nelse:\n    fail fast(non-retryable)\n\n",[70,10001,10002,10013,10023,10027,10044,10057,10061,10071,10076,10080,10097,10110,10132,10140,10145,10152],{"__ignoreMap":68},[73,10003,10004,10007,10010],{"class":75,"line":76},[73,10005,10006],{"class":86},"attempt ",[73,10008,10009],{"class":9277},"=",[73,10011,10012],{"class":9281}," 0\n",[73,10014,10015,10018,10020],{"class":75,"line":83},[73,10016,10017],{"class":86},"delay ",[73,10019,10009],{"class":9277},[73,10021,10022],{"class":86}," baseDelayMs\n",[73,10024,10025],{"class":75,"line":372},[73,10026,8910],{"emptyLinePlaceholder":108},[73,10028,10029,10032,10035,10038,10041],{"class":75,"line":436},[73,10030,10031],{"class":9277},"while",[73,10033,10034],{"class":86}," attempt ",[73,10036,10037],{"class":9277},"\u003C",[73,10039,10040],{"class":9446}," maxAttempts",[73,10042,10043],{"class":86},":\n",[73,10045,10046,10049,10051,10054],{"class":75,"line":308},[73,10047,10048],{"class":86},"    response ",[73,10050,10009],{"class":9277},[73,10052,10053],{"class":9446}," callDataverse",[73,10055,10056],{"class":86},"()\n",[73,10058,10059],{"class":75,"line":114},[73,10060,8910],{"emptyLinePlaceholder":108},[73,10062,10063,10066,10069],{"class":75,"line":7232},[73,10064,10065],{"class":9277},"if",[73,10067,10068],{"class":9446}," success",[73,10070,10043],{"class":86},[73,10072,10073],{"class":75,"line":7271},[73,10074,10075],{"class":9277},"    return\n",[73,10077,10078],{"class":75,"line":8947},[73,10079,8910],{"emptyLinePlaceholder":108},[73,10081,10082,10084,10087,10089,10092,10095],{"class":75,"line":8953},[73,10083,10065],{"class":9277},[73,10085,10086],{"class":86}," response is ",[73,10088,9970],{"class":9281},[73,10090,10091],{"class":86}," or transient 5",[73,10093,10094],{"class":9446},"xx",[73,10096,10043],{"class":86},[73,10098,10099,10102,10105,10107],{"class":75,"line":8959},[73,10100,10101],{"class":9446},"    wait",[73,10103,10104],{"class":86},"(delay ",[73,10106,9488],{"class":9277},[73,10108,10109],{"class":86}," jitter)\n",[73,10111,10112,10115,10117,10120,10123,10126,10129],{"class":75,"line":8965},[73,10113,10114],{"class":86},"    delay ",[73,10116,10009],{"class":9277},[73,10118,10119],{"class":9446}," min",[73,10121,10122],{"class":86},"(delay",[73,10124,10125],{"class":9277},"*",[73,10127,10128],{"class":9281},"2",[73,10130,10131],{"class":86},", maxDelay)\n",[73,10133,10134,10137],{"class":75,"line":8971},[73,10135,10136],{"class":86},"    attempt",[73,10138,10139],{"class":9277},"++\n",[73,10141,10142],{"class":75,"line":8977},[73,10143,10144],{"class":9277},"    continue\n",[73,10146,10147,10150],{"class":75,"line":8983},[73,10148,10149],{"class":9277},"else",[73,10151,10043],{"class":86},[73,10153,10154,10157,10160,10163,10166],{"class":75,"line":8989},[73,10155,10156],{"class":86},"    fail ",[73,10158,10159],{"class":9446},"fast",[73,10161,10162],{"class":86},"(non",[73,10164,10165],{"class":9277},"-",[73,10167,10168],{"class":86},"retryable)\n",[17,10170,10171,10174],{},[4802,10172,10173],{},"Architect Rule","\nBackoff must include jitter to avoid synchronized retries causing a thundering herd.",[5511,10176,10178],{"id":10177},"idempotency-template","Idempotency Template",[17,10180,10181],{},"To avoid duplicates when retries happen:",[4907,10183,10184,10187],{},[4826,10185,10186],{},"Use alternate keys for upserts, or",[4826,10188,10189],{},"Use a request-id stored on target record",[17,10191,10192],{},[4802,10193,10194],{},"Pattern",[4907,10196,10197,10200,10203],{},[4826,10198,10199],{},"Integration sends ExternalRequestId",[4826,10201,10202],{},"Dataverse stores it",[4826,10204,10205],{},"Next retry checks if already processed",[12,10207,10209],{"id":10208},"batching-high-volume-scenarios","Batching & High Volume Scenarios",[5511,10211,10213],{"id":10212},"batching-concepts","Batching Concepts",[4907,10215,10216,10219],{},[4826,10217,10218],{},"Web API: $batch",[4826,10220,10221],{},"SDK: ExecuteMultiple",[17,10223,10224],{},"Why batching matters:",[4907,10226,10227,10230,10233],{},[4826,10228,10229],{},"Reduces network overhead",[4826,10231,10232],{},"Reduces round trips",[4826,10234,10235],{},"Makes throttling less likely",[5511,10237,10239],{"id":10238},"web-api-batch","Web API $batch",[63,10241,10244],{"className":10242,"code":10243,"language":5090},[5088],"Batch Request\n    |- Create Account\n    |- Create Contact\n    |- Update Opportunity\n    |- Upsert Custom Table\n\n",[70,10245,10243],{"__ignoreMap":68},[17,10247,10248],{},"Important:",[4907,10250,10251,10254,10257],{},[4826,10252,10253],{},"Batches can partially succeed",[4826,10255,10256],{},"You must handle per-operation response",[4826,10258,8674],{},[5511,10260,10262],{"id":10261},"multitaskingparallelism","Multitasking\u002FParallelism",[17,10264,10265],{},[4802,10266,10267],{},"Bad Pattern - Unbounded Parallel Calls",[4907,10269,10270,10273,10276],{},[4826,10271,10272],{},"1000 parallel requests from a worker",[4826,10274,10275],{},"no concurrency limit",[4826,10277,10278],{},"immediate retries",[17,10280,10281],{},"Result : throttling spiral and outages",[17,10283,10284],{},[4802,10285,10286],{},"Good Pattern - Controlled Concurrency",[4907,10288,10289,10292,10295,10298],{},[4826,10290,10291],{},"Limit Parallelism",[4826,10293,10294],{},"Use queues",[4826,10296,10297],{},"Use backoff and jitter",[4826,10299,10300],{},"Use idempotency",[5511,10302,10304],{"id":10303},"bulk-data-sync-patterns","Bulk Data Sync Patterns",[17,10306,10307],{},[4802,10308,10309],{},"Pattern A- Nightly Batch (Safe)",[4907,10311,10312,10315,10318],{},[4826,10313,10314],{},"Export incremental changes",[4826,10316,10317],{},"Process in batches",[4826,10319,10320],{},"Upsert using alternate keys",[17,10322,10323],{},[4802,10324,10325],{},"Pattern B- Never Real Time (Safe if Designed)",[4907,10327,10328,10331,10334],{},[4826,10329,10330],{},"Capture events(create\u002Fupdate)",[4826,10332,10333],{},"Publish to queue",[4826,10335,10336],{},"Worker processes with retries and idempotency",[17,10338,10339,10342],{},[4802,10340,10341],{},"Pattern C -  \"Flows looping through 100k records\" (Avoid)","\nPower Automate loops at scale often cause:",[4907,10344,10345,10348,10351,10354],{},[4826,10346,10347],{},"API throttling",[4826,10349,10350],{},"run timeouts",[4826,10352,10353],{},"duplicate processing",[4826,10355,10356],{},"hard-to-debug failures",[5511,10358,10360],{"id":10359},"integration-design-guardrails","Integration Design Guardrails",[17,10362,10363],{},[4802,10364,7424],{},[4907,10366,10367,10370,10373,10376,10379],{},[4826,10368,10369],{},"Use service principals\u002Fmanaged identities for system integrations",[4826,10371,10372],{},"Use idempotency keys for all async work",[4826,10374,10375],{},"Use batching for volume",[4826,10377,10378],{},"Use controlled concurrency",[4826,10380,10381],{},"Seperate authoritative writes from notification",[17,10383,10384],{},[4802,10385,7445],{},[4907,10387,10388,10391,10394,10397,10400],{},[4826,10389,10390],{},"Build chatty integrations",[4826,10392,10393],{},"Use synchronous calls for high volume workloads",[4826,10395,10396],{},"Rely on Power Automate for bulk ETL",[4826,10398,10399],{},"Treat retries as safe without deduplication",[4826,10401,10402],{},"Assume Dev load behavior matches Prod",[12,10404,5003],{"id":5002},[17,10406,10407],{},"Dataverse integration success require:",[4907,10409,10410,10413,10416,10419,10422,10425],{},[4826,10411,10412],{},"Correct API surface selection",[4826,10414,10415],{},"Correct identity model",[4826,10417,10418],{},"Retry and backoff with jitter",[4826,10420,10421],{},"Idempotency (always)",[4826,10423,10424],{},"Controlled concurrency and batching",[4826,10426,10427],{},"Avoiding tight synchronous coupling for enterprise workloads",[89,10429,10430],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":68,"searchDepth":83,"depth":83,"links":10432},[10433,10434,10435,10436,10437,10438,10439],{"id":14,"depth":83,"text":15},{"id":8581,"depth":83,"text":8582},{"id":8755,"depth":83,"text":8756},{"id":8893,"depth":83,"text":8894},{"id":9940,"depth":83,"text":9941},{"id":10208,"depth":83,"text":10209},{"id":5002,"depth":83,"text":5003},{"label":10441,"key":10442},"Integration Architecture","integration-architecture","A practical enterprise architecture guide for designing secure, scalable, and resilient API integrations with Microsoft Dataverse.","\u002Fimages\u002Fdataverse-api-integration-pattern.jpg","Dataverse API integration architecture ",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-api-integration-pattern",{"title":10449,"description":10450},"Dataverse API Integration Patterns","Learn how to design synchronous and asynchronous API integrations with Dataverse and scalable architectural patterns.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F09.dataverse-api-integration-pattern","Decision frameworks and architecture patterns for integrating external systems with Dataverse at enterprise scale.",[122,120,10454,10455],"integration","enterprise-architecture","USqk7voUqYxGFGq0ARv-YANFLEQUWx365DDSsXDl9qI",{"id":10458,"title":10459,"author":4793,"body":10460,"canonical":102,"category":11772,"date":8527,"description":11775,"draft":110,"extension":109,"featured":110,"image":11776,"imageAlt":11777,"meta":11778,"navigation":108,"order":8947,"path":11779,"seo":11780,"stem":11783,"summary":11784,"tags":11785,"updated":8527,"__hash__":11789},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F10.dataverse-search-query-reporting.md","Search, Query & Reporting",{"type":9,"value":10461,"toc":11758},[10462,10464,10468,10471,10485,10488,10499,10502,10506,10510,10524,10528,10542,10546,10560,10564,10575,10579,10587,10591,10597,10601,10605,10610,10621,10625,10833,10838,10843,10851,10855,10866,10870,10874,10883,10888,11129,11134,11142,11146,11149,11153,11293,11298,11313,11319,11323,11328,11345,11351,11355,11359,11373,11377,11391,11395,11412,11416,11430,11434,11438,11443,11457,11462,11473,11477,11485,11489,11493,11507,11512,11523,11527,11535,11539,11543,11557,11561,11572,11576,11584,11588,11605,11609,11615,11620,11622,11699,11702,11706,11717,11722,11736,11738,11755],[12,10463,15],{"id":14},[5511,10465,10467],{"id":10466},"why-reporting-and-querying-confuse-teams","Why Reporting and Querying Confuse Teams",[17,10469,10470],{},"Dataverse supports multiple ways to retrieve and present data, each with different:",[4907,10472,10473,10476,10479,10482],{},[4826,10474,10475],{},"Capabilities",[4826,10477,10478],{},"Limits",[4826,10480,10481],{},"Performance behaviors",[4826,10483,10484],{},"Security trimming outcomes",[17,10486,10487],{},"Most confusing comes from assuming:",[4907,10489,10490,10493,10496],{},[4826,10491,10492],{},"Search is reporting",[4826,10494,10495],{},"A view equals an API query",[4826,10497,10498],{},"Power BI numbers should match the UI instantly",[17,10500,10501],{},"In Dataverse, operational querying and enterprise analytics are related- but not the same problem.",[12,10503,10505],{"id":10504},"query-search-options","Query & Search Options",[5511,10507,10509],{"id":10508},"viewssystempersonal-views","Views(System\u002FPersonal Views)",[4907,10511,10512,10515,10518,10521],{},[4826,10513,10514],{},"Used by model-driven apps",[4826,10516,10517],{},"Metadata-defined filters and columns",[4826,10519,10520],{},"Security trimmed",[4826,10522,10523],{},"Optimized for operational use",[5511,10525,10527],{"id":10526},"fetchxml","FetchXML",[4907,10529,10530,10533,10536,10539],{},[4826,10531,10532],{},"Query language used heavily in Dynamics features",[4826,10534,10535],{},"Supports aggregate and link-entities",[4826,10537,10538],{},"Works well for model driven needs",[4826,10540,10541],{},"Has constraints but very practical",[5511,10543,10545],{"id":10544},"odata-dataverse-web-api","OData (Dataverse Web API)",[4907,10547,10548,10551,10554,10557],{},[4826,10549,10550],{},"REST standard query interface",[4826,10552,10553],{},"Best for external integrations and apps",[4826,10555,10556],{},"Supports $select, $filter, $expand, $sortby",[4826,10558,10559],{},"Performance depends heavily on query shape",[5511,10561,10563],{"id":10562},"dataverse-searchrelevance-search","Dataverse Search\u002FRelevance Search",[4907,10565,10566,10569,10572],{},[4826,10567,10568],{},"Index backed",[4826,10570,10571],{},"Optimized for search experience",[4826,10573,10574],{},"Not guaranteed to behave like view or report.",[5511,10576,10578],{"id":10577},"power-bifabric-analytics","Power BI\u002FFabric Analytics",[4907,10580,10581,10584],{},[4826,10582,10583],{},"Seperate layer with refresh, latency, and semantic models",[4826,10585,10586],{},"Not designed to be \"screen equals report\" by default",[12,10588,10590],{"id":10589},"high-level-querying-architecture-diagram","High Level Querying Architecture Diagram",[63,10592,10595],{"className":10593,"code":10594,"language":5090},[5088],"User\u002FApp\u002FReport\n    |\n    |- Operational UI\n    |       |- Views\n    |       |- Quick find\u002FSearch\n    |       |- FetchXml(behind the scenes)\n    |\n    |- Programmatic Access\n    |       |- OData Web API\n    |       |- SDK\n    |\n    |- Analytics Layer\n            |- Power BI Semantic Model\n            |- Fabric\u002FLakehouse\n            |- Enetrprise Data Warehouse\n\n",[70,10596,10594],{"__ignoreMap":68},[12,10598,10600],{"id":10599},"fetchxml-vs-odata","FetchXML vs OData",[5511,10602,10604],{"id":10603},"scenario-a-retrieve-accounts-filtered-by-name-and-selected-columns","Scenario A: Retrieve Accounts filtered by name and selected columns",[17,10606,10607],{},[4802,10608,10609],{},"OData Web API",[63,10611,10615],{"className":10612,"code":10613,"language":10614,"meta":68,"style":68},"language-http shiki shiki-themes github-light github-dark","GET \u002Fapi\u002Fdata\u002Fv9.2\u002Faccounts?$select=accountid,name&$filter=contains(name,'Contoso')&$top=10\n","http",[70,10616,10617],{"__ignoreMap":68},[73,10618,10619],{"class":75,"line":76},[73,10620,10613],{},[17,10622,10623],{},[4802,10624,10527],{},[63,10626,10630],{"className":10627,"code":10628,"language":10629,"meta":68,"style":68},"language-xml shiki shiki-themes github-light github-dark","\u003Cfetch top=\"1\" >\n  \u003Centity name=\"account\" >\n    \u003Cattribute name=\"name\" \u002F>\n    \u003Cattribute name=\"accountnumber\" \u002F>\n    \u003Cattribute name=\"telephone1\" \u002F>\n    \u003Cattribute name=\"accountid\" \u002F>\n    \u003Corder attribute=\"name\" descending=\"false\" \u002F>\n    \u003Cfilter type=\"and\" >\n      \u003Ccondition attribute=\"name\" operator=\"like\" value=\"%Contoso%\" \u002F>\n    \u003C\u002Ffilter>\n  \u003C\u002Fentity>\n\u003C\u002Ffetch>\n","xml",[70,10631,10632,10651,10669,10687,10702,10717,10732,10756,10773,10805,10815,10824],{"__ignoreMap":68},[73,10633,10634,10636,10640,10643,10645,10648],{"class":75,"line":76},[73,10635,10037],{"class":86},[73,10637,10639],{"class":10638},"s9eBZ","fetch",[73,10641,10642],{"class":9446}," top",[73,10644,10009],{"class":86},[73,10646,10647],{"class":9367},"\"1\"",[73,10649,10650],{"class":86}," >\n",[73,10652,10653,10656,10659,10662,10664,10667],{"class":75,"line":83},[73,10654,10655],{"class":86},"  \u003C",[73,10657,10658],{"class":10638},"entity",[73,10660,10661],{"class":9446}," name",[73,10663,10009],{"class":86},[73,10665,10666],{"class":9367},"\"account\"",[73,10668,10650],{"class":86},[73,10670,10671,10674,10677,10679,10681,10684],{"class":75,"line":372},[73,10672,10673],{"class":86},"    \u003C",[73,10675,10676],{"class":10638},"attribute",[73,10678,10661],{"class":9446},[73,10680,10009],{"class":86},[73,10682,10683],{"class":9367},"\"name\"",[73,10685,10686],{"class":86}," \u002F>\n",[73,10688,10689,10691,10693,10695,10697,10700],{"class":75,"line":436},[73,10690,10673],{"class":86},[73,10692,10676],{"class":10638},[73,10694,10661],{"class":9446},[73,10696,10009],{"class":86},[73,10698,10699],{"class":9367},"\"accountnumber\"",[73,10701,10686],{"class":86},[73,10703,10704,10706,10708,10710,10712,10715],{"class":75,"line":308},[73,10705,10673],{"class":86},[73,10707,10676],{"class":10638},[73,10709,10661],{"class":9446},[73,10711,10009],{"class":86},[73,10713,10714],{"class":9367},"\"telephone1\"",[73,10716,10686],{"class":86},[73,10718,10719,10721,10723,10725,10727,10730],{"class":75,"line":114},[73,10720,10673],{"class":86},[73,10722,10676],{"class":10638},[73,10724,10661],{"class":9446},[73,10726,10009],{"class":86},[73,10728,10729],{"class":9367},"\"accountid\"",[73,10731,10686],{"class":86},[73,10733,10734,10736,10739,10742,10744,10746,10749,10751,10754],{"class":75,"line":7232},[73,10735,10673],{"class":86},[73,10737,10738],{"class":10638},"order",[73,10740,10741],{"class":9446}," attribute",[73,10743,10009],{"class":86},[73,10745,10683],{"class":9367},[73,10747,10748],{"class":9446}," descending",[73,10750,10009],{"class":86},[73,10752,10753],{"class":9367},"\"false\"",[73,10755,10686],{"class":86},[73,10757,10758,10760,10763,10766,10768,10771],{"class":75,"line":7271},[73,10759,10673],{"class":86},[73,10761,10762],{"class":10638},"filter",[73,10764,10765],{"class":9446}," type",[73,10767,10009],{"class":86},[73,10769,10770],{"class":9367},"\"and\"",[73,10772,10650],{"class":86},[73,10774,10775,10778,10781,10783,10785,10787,10790,10792,10795,10798,10800,10803],{"class":75,"line":8947},[73,10776,10777],{"class":86},"      \u003C",[73,10779,10780],{"class":10638},"condition",[73,10782,10741],{"class":9446},[73,10784,10009],{"class":86},[73,10786,10683],{"class":9367},[73,10788,10789],{"class":9446}," operator",[73,10791,10009],{"class":86},[73,10793,10794],{"class":9367},"\"like\"",[73,10796,10797],{"class":9446}," value",[73,10799,10009],{"class":86},[73,10801,10802],{"class":9367},"\"%Contoso%\"",[73,10804,10686],{"class":86},[73,10806,10807,10810,10812],{"class":75,"line":8953},[73,10808,10809],{"class":86},"    \u003C\u002F",[73,10811,10762],{"class":10638},[73,10813,10814],{"class":86},">\n",[73,10816,10817,10820,10822],{"class":75,"line":8959},[73,10818,10819],{"class":86},"  \u003C\u002F",[73,10821,10658],{"class":10638},[73,10823,10814],{"class":86},[73,10825,10826,10829,10831],{"class":75,"line":8965},[73,10827,10828],{"class":86},"\u003C\u002F",[73,10830,10639],{"class":10638},[73,10832,10814],{"class":86},[17,10834,10835],{},[4802,10836,10837],{},"When to use",[4823,10839,10840],{},[4826,10841,10842],{},"OData",[4907,10844,10845,10848],{},[4826,10846,10847],{},"Integrations",[4826,10849,10850],{},"REST clients",[4823,10852,10853],{"start":83},[4826,10854,10527],{},[4907,10856,10857,10860,10863],{},[4826,10858,10859],{},"Model-driven features",[4826,10861,10862],{},"Complex joins\u002Faggregations",[4826,10864,10865],{},"Platform-native querying",[5511,10867,10869],{"id":10868},"scenario-b-join-account-contact-and-filter-contacts","Scenario B: Join Account -> Contact and filter contacts",[17,10871,10872],{},[4802,10873,10842],{},[63,10875,10877],{"className":10612,"code":10876,"language":10614,"meta":68,"style":68},"GET GET \u002Fapi\u002Fdata\u002Fv9.2\u002Faccounts?$select=accountid,name&$expand=contact_customer_accounts($select=contactid,fullname)&$filter=contains(name,'Contoso')&$top=10\n",[70,10878,10879],{"__ignoreMap":68},[73,10880,10881],{"class":75,"line":76},[73,10882,10876],{},[17,10884,10885],{},[4802,10886,10887],{},"FetchXML (link-entity)",[63,10889,10891],{"className":10627,"code":10890,"language":10629,"meta":68,"style":68},"\u003Cfetch>\n  \u003Centity name=\"account\" >\n    \u003Cattribute name=\"name\" \u002F>\n    \u003Cattribute name=\"accountnumber\" \u002F>\n    \u003Cattribute name=\"telephone1\" \u002F>\n    \u003Cattribute name=\"accountid\" \u002F>\n    \u003Corder attribute=\"name\" descending=\"false\" \u002F>\n    \u003Clink-entity name=\"contact\" from=\"parentcustomerid\" to=\"accountid\" alias=\"ac\">\n      \u003Cattribute name=\"fullname\" \u002F>\n      \u003Cattribute name=\"emailaddress1\" \u002F>\n      \u003Cfilter>\n        \u003Ccondition attribute=\"fullname\" operator=\"like\" value=\"%Annie%\" \u002F>\n      \u003C\u002Ffilter>\n    \u003C\u002Flink-entity>\n  \u003C\u002Fentity>\n\u003C\u002Ffetch>\n\n",[70,10892,10893,10901,10915,10929,10943,10957,10971,10991,11030,11045,11060,11068,11096,11105,11113,11121],{"__ignoreMap":68},[73,10894,10895,10897,10899],{"class":75,"line":76},[73,10896,10037],{"class":86},[73,10898,10639],{"class":10638},[73,10900,10814],{"class":86},[73,10902,10903,10905,10907,10909,10911,10913],{"class":75,"line":83},[73,10904,10655],{"class":86},[73,10906,10658],{"class":10638},[73,10908,10661],{"class":9446},[73,10910,10009],{"class":86},[73,10912,10666],{"class":9367},[73,10914,10650],{"class":86},[73,10916,10917,10919,10921,10923,10925,10927],{"class":75,"line":372},[73,10918,10673],{"class":86},[73,10920,10676],{"class":10638},[73,10922,10661],{"class":9446},[73,10924,10009],{"class":86},[73,10926,10683],{"class":9367},[73,10928,10686],{"class":86},[73,10930,10931,10933,10935,10937,10939,10941],{"class":75,"line":436},[73,10932,10673],{"class":86},[73,10934,10676],{"class":10638},[73,10936,10661],{"class":9446},[73,10938,10009],{"class":86},[73,10940,10699],{"class":9367},[73,10942,10686],{"class":86},[73,10944,10945,10947,10949,10951,10953,10955],{"class":75,"line":308},[73,10946,10673],{"class":86},[73,10948,10676],{"class":10638},[73,10950,10661],{"class":9446},[73,10952,10009],{"class":86},[73,10954,10714],{"class":9367},[73,10956,10686],{"class":86},[73,10958,10959,10961,10963,10965,10967,10969],{"class":75,"line":114},[73,10960,10673],{"class":86},[73,10962,10676],{"class":10638},[73,10964,10661],{"class":9446},[73,10966,10009],{"class":86},[73,10968,10729],{"class":9367},[73,10970,10686],{"class":86},[73,10972,10973,10975,10977,10979,10981,10983,10985,10987,10989],{"class":75,"line":7232},[73,10974,10673],{"class":86},[73,10976,10738],{"class":10638},[73,10978,10741],{"class":9446},[73,10980,10009],{"class":86},[73,10982,10683],{"class":9367},[73,10984,10748],{"class":9446},[73,10986,10009],{"class":86},[73,10988,10753],{"class":9367},[73,10990,10686],{"class":86},[73,10992,10993,10995,10998,11000,11002,11005,11008,11010,11013,11016,11018,11020,11023,11025,11028],{"class":75,"line":7271},[73,10994,10673],{"class":86},[73,10996,10997],{"class":10638},"link-entity",[73,10999,10661],{"class":9446},[73,11001,10009],{"class":86},[73,11003,11004],{"class":9367},"\"contact\"",[73,11006,11007],{"class":9446}," from",[73,11009,10009],{"class":86},[73,11011,11012],{"class":9367},"\"parentcustomerid\"",[73,11014,11015],{"class":9446}," to",[73,11017,10009],{"class":86},[73,11019,10729],{"class":9367},[73,11021,11022],{"class":9446}," alias",[73,11024,10009],{"class":86},[73,11026,11027],{"class":9367},"\"ac\"",[73,11029,10814],{"class":86},[73,11031,11032,11034,11036,11038,11040,11043],{"class":75,"line":8947},[73,11033,10777],{"class":86},[73,11035,10676],{"class":10638},[73,11037,10661],{"class":9446},[73,11039,10009],{"class":86},[73,11041,11042],{"class":9367},"\"fullname\"",[73,11044,10686],{"class":86},[73,11046,11047,11049,11051,11053,11055,11058],{"class":75,"line":8953},[73,11048,10777],{"class":86},[73,11050,10676],{"class":10638},[73,11052,10661],{"class":9446},[73,11054,10009],{"class":86},[73,11056,11057],{"class":9367},"\"emailaddress1\"",[73,11059,10686],{"class":86},[73,11061,11062,11064,11066],{"class":75,"line":8959},[73,11063,10777],{"class":86},[73,11065,10762],{"class":10638},[73,11067,10814],{"class":86},[73,11069,11070,11073,11075,11077,11079,11081,11083,11085,11087,11089,11091,11094],{"class":75,"line":8965},[73,11071,11072],{"class":86},"        \u003C",[73,11074,10780],{"class":10638},[73,11076,10741],{"class":9446},[73,11078,10009],{"class":86},[73,11080,11042],{"class":9367},[73,11082,10789],{"class":9446},[73,11084,10009],{"class":86},[73,11086,10794],{"class":9367},[73,11088,10797],{"class":9446},[73,11090,10009],{"class":86},[73,11092,11093],{"class":9367},"\"%Annie%\"",[73,11095,10686],{"class":86},[73,11097,11098,11101,11103],{"class":75,"line":8971},[73,11099,11100],{"class":86},"      \u003C\u002F",[73,11102,10762],{"class":10638},[73,11104,10814],{"class":86},[73,11106,11107,11109,11111],{"class":75,"line":8977},[73,11108,10809],{"class":86},[73,11110,10997],{"class":10638},[73,11112,10814],{"class":86},[73,11114,11115,11117,11119],{"class":75,"line":8983},[73,11116,10819],{"class":86},[73,11118,10658],{"class":10638},[73,11120,10814],{"class":86},[73,11122,11123,11125,11127],{"class":75,"line":8989},[73,11124,10828],{"class":86},[73,11126,10639],{"class":10638},[73,11128,10814],{"class":86},[17,11130,11131],{},[4802,11132,11133],{},"Common confusion",[4907,11135,11136,11139],{},[4826,11137,11138],{},"OData expands can become heavy and slow if overused",[4826,11140,11141],{},"FetchXML joins can be more predictable in Dynamics scenarios",[5511,11143,11145],{"id":11144},"scenario-c-aggregate-count-contacts-per-account","Scenario C: Aggregate (Count contacts per Account)",[17,11147,11148],{},"Aggregation is limited to 50000 records",[17,11150,11151],{},[4802,11152,10527],{},[63,11154,11156],{"className":10627,"code":11155,"language":10629,"meta":68,"style":68},"\u003Cfetch aggregate=\"true\">\n  \u003Centity name=\"account\">\n    \u003Cattribute name=\"name\" groupby=\"true\" \u002F>\n    \u003Cattribute name=\"accountnumber\" groupby=\"true\" \u002F>\n    \u003Cattribute name=\"telephone1\" groupby=\"true\" \u002F>\n    \u003Cattribute name=\"accountid\" alias=\"accountidmax\" aggregate=\"max\" \u002F>\n  \u003C\u002Fentity>\n\u003C\u002Ffetch>\n",[70,11157,11158,11174,11188,11209,11229,11249,11277,11285],{"__ignoreMap":68},[73,11159,11160,11162,11164,11167,11169,11172],{"class":75,"line":76},[73,11161,10037],{"class":86},[73,11163,10639],{"class":10638},[73,11165,11166],{"class":9446}," aggregate",[73,11168,10009],{"class":86},[73,11170,11171],{"class":9367},"\"true\"",[73,11173,10814],{"class":86},[73,11175,11176,11178,11180,11182,11184,11186],{"class":75,"line":83},[73,11177,10655],{"class":86},[73,11179,10658],{"class":10638},[73,11181,10661],{"class":9446},[73,11183,10009],{"class":86},[73,11185,10666],{"class":9367},[73,11187,10814],{"class":86},[73,11189,11190,11192,11194,11196,11198,11200,11203,11205,11207],{"class":75,"line":372},[73,11191,10673],{"class":86},[73,11193,10676],{"class":10638},[73,11195,10661],{"class":9446},[73,11197,10009],{"class":86},[73,11199,10683],{"class":9367},[73,11201,11202],{"class":9446}," groupby",[73,11204,10009],{"class":86},[73,11206,11171],{"class":9367},[73,11208,10686],{"class":86},[73,11210,11211,11213,11215,11217,11219,11221,11223,11225,11227],{"class":75,"line":436},[73,11212,10673],{"class":86},[73,11214,10676],{"class":10638},[73,11216,10661],{"class":9446},[73,11218,10009],{"class":86},[73,11220,10699],{"class":9367},[73,11222,11202],{"class":9446},[73,11224,10009],{"class":86},[73,11226,11171],{"class":9367},[73,11228,10686],{"class":86},[73,11230,11231,11233,11235,11237,11239,11241,11243,11245,11247],{"class":75,"line":308},[73,11232,10673],{"class":86},[73,11234,10676],{"class":10638},[73,11236,10661],{"class":9446},[73,11238,10009],{"class":86},[73,11240,10714],{"class":9367},[73,11242,11202],{"class":9446},[73,11244,10009],{"class":86},[73,11246,11171],{"class":9367},[73,11248,10686],{"class":86},[73,11250,11251,11253,11255,11257,11259,11261,11263,11265,11268,11270,11272,11275],{"class":75,"line":114},[73,11252,10673],{"class":86},[73,11254,10676],{"class":10638},[73,11256,10661],{"class":9446},[73,11258,10009],{"class":86},[73,11260,10729],{"class":9367},[73,11262,11022],{"class":9446},[73,11264,10009],{"class":86},[73,11266,11267],{"class":9367},"\"accountidmax\"",[73,11269,11166],{"class":9446},[73,11271,10009],{"class":86},[73,11273,11274],{"class":9367},"\"max\"",[73,11276,10686],{"class":86},[73,11278,11279,11281,11283],{"class":75,"line":7232},[73,11280,10819],{"class":86},[73,11282,10658],{"class":10638},[73,11284,10814],{"class":86},[73,11286,11287,11289,11291],{"class":75,"line":7271},[73,11288,10828],{"class":86},[73,11290,10639],{"class":10638},[73,11292,10814],{"class":86},[17,11294,11295,11297],{},[4802,11296,10842],{},"\nAggregation done via $apply keyword",[63,11299,11301],{"className":10612,"code":11300,"language":10614,"meta":68,"style":68},"GET accounts?$apply=groupby((statuscode),aggregate($count as count))\nPrefer: odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"\n",[70,11302,11303,11308],{"__ignoreMap":68},[73,11304,11305],{"class":75,"line":76},[73,11306,11307],{},"GET accounts?$apply=groupby((statuscode),aggregate($count as count))\n",[73,11309,11310],{"class":75,"line":83},[73,11311,11312],{},"Prefer: odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"\n",[17,11314,11315,11318],{},[4802,11316,11317],{},"Enterprise guidance","\nFor aggregates and grouping FetchXML is often the most stable option inside the platform. For external analytics, we should use Power BI\u002Ffabric and not force dataverse to be data warehouse.",[12,11320,11322],{"id":11321},"why-numbers-dont-match-operational-vs-analytical-reality","Why \"Numbers Don't Match\" (Operational vs Analytical Reality)",[17,11324,11325],{},[4802,11326,11327],{},"Common mismatch drivers",[4907,11329,11330,11333,11336,11339,11342],{},[4826,11331,11332],{},"Security trimming: different identities see different slices",[4826,11334,11335],{},"Latency: search indexing and rollups are asynchronous",[4826,11337,11338],{},"Aggregation differences: UI views vs BI semantic models",[4826,11340,11341],{},"Data model differences: operational schema vs star schema",[4826,11343,11344],{},"Caching: both UI and BI layers cache differently",[17,11346,11347,11350],{},[4802,11348,11349],{},"Architect rule","\nUI is not analytics source of truth, BI models are not transactional source of truth.",[12,11352,11354],{"id":11353},"performance-tuning-checklist-opertaional-queries","Performance Tuning Checklist (Opertaional Queries)",[5511,11356,11358],{"id":11357},"model-driven-appview-performance","Model-Driven App\u002FView Performance",[4907,11360,11361,11364,11367,11370],{},[4826,11362,11363],{},"Keep views narrow(avoid too many columns)",[4826,11365,11366],{},"Avoid expensive filters (complex OR chains)",[4826,11368,11369],{},"Limit realted entity columns",[4826,11371,11372],{},"Use appropriate quick find columns",[5511,11374,11376],{"id":11375},"fetchxml-performance","FetchXML Performance",[4907,11378,11379,11382,11385,11388],{},[4826,11380,11381],{},"Keep joins minimal",[4826,11383,11384],{},"Filter early (apply filters at the most selective level)",[4826,11386,11387],{},"Avoid deep link entity chains",[4826,11389,11390],{},"Prefer server-side filtering over client filtering",[5511,11392,11394],{"id":11393},"odata-performance","OData Performance",[4907,11396,11397,11400,11403,11406,11409],{},[4826,11398,11399],{},"Always use $select (never pull full entity)",[4826,11401,11402],{},"Avoid wide $expand for large related sets",[4826,11404,11405],{},"Use $top and paging properly",[4826,11407,11408],{},"Avoid \"contains\" on large datasets unless necessary",[4826,11410,11411],{},"Be careful with $orderby on non-index-friendly fields",[5511,11413,11415],{"id":11414},"cross-cutting-performance","Cross-Cutting performance",[4907,11417,11418,11421,11424,11427],{},[4826,11419,11420],{},"Excessive record level sharing(security evaluation cost)",[4826,11422,11423],{},"Large numbers of calculated fields",[4826,11425,11426],{},"Heavy synchronous plugins affecting read\u002Fwrite operations",[4826,11428,11429],{},"Overuse of client-side data shaping",[12,11431,11433],{"id":11432},"reporting-architecture-patterns-dataverse-vs-power-bi-vs-fabric","Reporting Architecture Patterns (Dataverse vs Power BI vs Fabric)",[5511,11435,11437],{"id":11436},"pattern-1-operational-reporting-inside-dataverse","Pattern 1: Operational Reporting (Inside Dataverse)",[17,11439,11440],{},[4802,11441,11442],{},"Use for",[4907,11444,11445,11448,11451,11454],{},[4826,11446,11447],{},"Agent dashboards",[4826,11449,11450],{},"Daily operatinal views",[4826,11452,11453],{},"Small-to-medium datasets",[4826,11455,11456],{},"Real-time reports",[17,11458,11459],{},[4802,11460,11461],{},"Tools",[4907,11463,11464,11467,11470],{},[4826,11465,11466],{},"Model-driven dashboards",[4826,11468,11469],{},"Views and charts",[4826,11471,11472],{},"Embedded lightweight reports",[17,11474,11475],{},[4802,11476,8623],{},[4907,11478,11479,11482],{},[4826,11480,11481],{},"Limited analytics depth",[4826,11483,11484],{},"Not designed for complex historical trends at scale",[5511,11486,11488],{"id":11487},"pattern-2-power-bi-semantic-model-most-common-enterprise-pattern","Pattern 2: Power BI Semantic Model (Most Common Enterprise Pattern)",[17,11490,11491],{},[4802,11492,11442],{},[4907,11494,11495,11498,11501,11504],{},[4826,11496,11497],{},"Department reporting",[4826,11499,11500],{},"KPI dashboards",[4826,11502,11503],{},"Trend analysis",[4826,11505,11506],{},"Self-service analytics with guardrails",[17,11508,11509],{},[4802,11510,11511],{},"Approach",[4907,11513,11514,11517,11520],{},[4826,11515,11516],{},"Extract from Dataverse and model in Power BI",[4826,11518,11519],{},"Star schema and DAX measures",[4826,11521,11522],{},"RLS aligned to business needs, not always identical to Datverse security",[17,11524,11525],{},[4802,11526,8623],{},[4907,11528,11529,11532],{},[4826,11530,11531],{},"Refresh latency exists",[4826,11533,11534],{},"Requires modeling discipline",[5511,11536,11538],{"id":11537},"pattern-3-fabriclakehousewarehouse-enterprise-scale-pattern","Pattern 3: Fabric\u002FLakehouse\u002FWarehouse (Enterprise Scale Pattern)",[17,11540,11541],{},[4802,11542,11442],{},[4907,11544,11545,11548,11551,11554],{},[4826,11546,11547],{},"Multi system analytics",[4826,11549,11550],{},"Large volumes",[4826,11552,11553],{},"Long term retention",[4826,11555,11556],{},"Advanced AI\u002FML and big data use cases",[17,11558,11559],{},[4802,11560,11511],{},[4907,11562,11563,11566,11569],{},[4826,11564,11565],{},"Land Dataverse data in lake",[4826,11567,11568],{},"Combine with ERP,web,IOT,etc",[4826,11570,11571],{},"Create curated layers and semantic models",[17,11573,11574],{},[4802,11575,8623],{},[4907,11577,11578,11581],{},[4826,11579,11580],{},"Require data engineering",[4826,11582,11583],{},"More governance needed",[12,11585,11587],{"id":11586},"anti-patterns-to-avoid","Anti-Patterns to Avoid",[4907,11589,11590,11593,11596,11599,11602],{},[4826,11591,11592],{},"Treating Dataverse as a data warehouse",[4826,11594,11595],{},"Building dashboards directly on transactional tables at scale",[4826,11597,11598],{},"Matching BI RLS 1:1 with Dataverse security without design",[4826,11600,11601],{},"Expecting search results to match aggregate reports exactly",[4826,11603,11604],{},"Running large analytical queries during business hours",[12,11606,11608],{"id":11607},"deep-diagram-recommended-reporting-split","Deep Diagram - Recommended Reporting Split",[63,11610,11613],{"className":11611,"code":11612,"language":5090},[5088],"Dataverse( Operational Truth)\n  |\n  |- Views\u002FCharts (Operational)\n  |\n  |- APIs (Transactional and Integration)\n  |\n  |- Export\u002FReplication (Analytics Feed)\n        |\n     Power BI semantic Model (Department BI)\n        |\n     Fabric\u002FLakehouse (Enterprise Analytics and Multi source)\n",[70,11614,11612],{"__ignoreMap":68},[17,11616,11617],{},[5529,11618,11619],{},"Don't let analytics workloads compete with opertational workloads",[12,11621,7845],{"id":7844},[5875,11623,11624,11636],{},[5878,11625,11626],{},[5881,11627,11628,11630,11633],{},[5884,11629,7854],{},[5884,11631,11632],{},"Recommended Surface",[5884,11634,11635],{},"Avoid",[5891,11637,11638,11649,11658,11668,11679,11688],{},[5881,11639,11640,11643,11646],{},[5896,11641,11642],{},"UI list filtering",[5896,11644,11645],{},"Views \u002F FetchXML",[5896,11647,11648],{},"Power BI",[5881,11650,11651,11654,11656],{},[5896,11652,11653],{},"External app integration",[5896,11655,10842],{},[5896,11657,5834],{},[5881,11659,11660,11663,11665],{},[5896,11661,11662],{},"Complex platform joins",[5896,11664,10527],{},[5896,11666,11667],{},"Wide OData expands",[5881,11669,11670,11673,11676],{},[5896,11671,11672],{},"Full-text user search",[5896,11674,11675],{},"Dataverse Search",[5896,11677,11678],{},"Reporting queries",[5881,11680,11681,11684,11686],{},[5896,11682,11683],{},"Department analytics",[5896,11685,11648],{},[5896,11687,5834],{},[5881,11689,11690,11693,11696],{},[5896,11691,11692],{},"Multi-system analytics",[5896,11694,11695],{},"Fabric \u002F Lakehouse",[5896,11697,11698],{},"Dataverse direct queries",[12,11700,11701],{"id":4883},"Role- Based Perspective",[17,11703,11704],{},[4802,11705,4891],{},[4907,11707,11708,11711,11714],{},[4826,11709,11710],{},"Enable\u002Fmonitor search features",[4826,11712,11713],{},"Support view performance issues",[4826,11715,11716],{},"Manage BI workspace access and refresh governance",[17,11718,11719],{},[4802,11720,11721],{},"Architecht",[4907,11723,11724,11727,11730,11733],{},[4826,11725,11726],{},"Define reporting tier strategy (operational vs department vs enterprise)",[4826,11728,11729],{},"Decide data movement approach",[4826,11731,11732],{},"Standardize KPIs and metric definitions",[4826,11734,11735],{},"Govern self-service BI without blocking it",[12,11737,5003],{"id":5002},[4907,11739,11740,11743,11746,11749,11752],{},[4826,11741,11742],{},"Use views\u002Fsearch for operational UI",[4826,11744,11745],{},"Use FetchXML for platform native complex quiries\u002Faggregates",[4826,11747,11748],{},"Use OData for integration and REST access",[4826,11750,11751],{},"Use Power BI for departmental analytics",[4826,11753,11754],{},"Use Fabric for enetrprise-scale multi source analytics",[89,11756,11757],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":68,"searchDepth":83,"depth":83,"links":11759},[11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771],{"id":14,"depth":83,"text":15},{"id":10504,"depth":83,"text":10505},{"id":10589,"depth":83,"text":10590},{"id":10599,"depth":83,"text":10600},{"id":11321,"depth":83,"text":11322},{"id":11353,"depth":83,"text":11354},{"id":11432,"depth":83,"text":11433},{"id":11586,"depth":83,"text":11587},{"id":11607,"depth":83,"text":11608},{"id":7844,"depth":83,"text":7845},{"id":4883,"depth":83,"text":11701},{"id":5002,"depth":83,"text":5003},{"label":11773,"key":11774},"Data Architecture","data-architecture","A practical enterprise architecture guide for designing efficient search, optimized querying, and scalable reporting strategies in Microsoft Dataverse.","\u002Fimages\u002Fdataverse-search-query-reporting.jpg","Dataverse search, query and reporting architecture layers",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fdataverse-search-query-reporting",{"title":11781,"description":11782},"Dataverse Search, Query and Reporting Architecture Guide","Learn how to design performant search, advanced queries, and enterprise reporting patterns in Dataverse using views, FetchXML, OData, TDS endpoint, and analytics integrations.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F10.dataverse-search-query-reporting","Architecture patterns and performance strategies for search, querying, and reporting in Dataverse at enterprise scale.",[122,120,11786,11787,11788,10455],"search","reporting","performance","aNHukMhoBxpRv6Q0QD3fCN4PJ82qcPgPkmD-RwNOTm0",{"id":11791,"title":11792,"author":4793,"body":11793,"canonical":102,"category":12593,"date":8527,"description":12596,"draft":110,"extension":109,"featured":110,"image":12597,"imageAlt":12598,"meta":12599,"navigation":108,"order":8953,"path":12600,"seo":12601,"stem":12604,"summary":12605,"tags":12606,"updated":8527,"__hash__":12608},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F11.powerapps-canvas-app.md","Canvas Apps Architecture",{"type":9,"value":11794,"toc":12580},[11795,11797,11800,11811,11814,11828,11831,11842,11847,11851,11857,11860,11871,11874,11885,11889,11895,11903,11906,11917,11921,11925,11930,11942,11945,11953,11957,11966,11969,11980,11984,11988,12018,12021,12032,12036,12047,12051,12055,12064,12067,12075,12079,12090,12094,12098,12115,12119,12136,12140,12154,12158,12172,12176,12179,12193,12198,12202,12208,12212,12215,12226,12229,12237,12241,12244,12252,12255,12266,12270,12275,12292,12297,12302,12313,12317,12335,12339,12347,12351,12368,12372,12376,12382,12386,12400,12404,12456,12458,12462,12473,12477,12491,12495,12506,12510,12521,12525,12530,12535,12540,12545,12550,12555,12557,12560,12577],[12,11796,15],{"id":14},[17,11798,11799],{},"Canvas apps are client-driven, formula-based applications where:",[4907,11801,11802,11805,11808],{},[4826,11803,11804],{},"UI logic executes primarily on the client",[4826,11806,11807],{},"Data operations are delegated to the server only when possible",[4826,11809,11810],{},"The app's performance is often dictated by query shape, not infrastructure",[17,11812,11813],{},"Canvas apps are excellent for:",[4907,11815,11816,11819,11822,11825],{},[4826,11817,11818],{},"Task centric apps",[4826,11820,11821],{},"Mobile scenarios",[4826,11823,11824],{},"Custom UX",[4826,11826,11827],{},"Rapid delivery",[17,11829,11830],{},"They are not:",[4907,11832,11833,11836,11839],{},[4826,11834,11835],{},"Server side applications",[4826,11837,11838],{},"Designed to pull large datsets into memory",[4826,11840,11841],{},"Automatically scalable just because Dataverse is scalable",[17,11843,11844],{},[5529,11845,11846],{},"With 1 million records, design discipline matters more than hardware",[12,11848,11850],{"id":11849},"canvas-execution-model-architectural-reality","Canvas Execution Model (Architectural Reality)",[17,11852,11853,11854,11856],{},"Canvas apps execute primarily on the client.",[4903,11855],{},"\nDataverse executes on the server.",[17,11858,11859],{},"Every formula decision determines:",[4907,11861,11862,11865,11868],{},[4826,11863,11864],{},"Where logic runs",[4826,11866,11867],{},"How much data travels over the network",[4826,11869,11870],{},"Whether results are complete or partial",[17,11872,11873],{},"Canvas scalability is therefore:",[4907,11875,11876,11879,11882],{},[4826,11877,11878],{},"A query design problem",[4826,11880,11881],{},"A delegation discipline problem",[4826,11883,11884],{},"A UX constraint problem",[12,11886,11888],{"id":11887},"delegation-most-common-failure-mode","Delegation - Most common Failure Mode",[17,11890,11891,11894],{},[4802,11892,11893],{},"What Delegation Really Means","\nDelegation is the ability for Power Apps to push data operations to Dataverse instead of executing them locally on the client.\nIf a function is delegable:",[4907,11896,11897,11900],{},[4826,11898,11899],{},"Dataverse filters\u002Fsorts the data",[4826,11901,11902],{},"Only matching records are returned",[17,11904,11905],{},"If it is not delegable:",[4907,11907,11908,11911,11914],{},[4826,11909,11910],{},"Powerapps pulls a limited subsey (500-2000 records)",[4826,11912,11913],{},"Logic runs locally",[4826,11915,11916],{},"Results are incomplete and misleading",[12,11918,11920],{"id":11919},"delegation-patterns","Delegation Patterns",[5511,11922,11924],{"id":11923},"pattern-1-non-delegable-filter-on-large-table","Pattern 1 -  Non Delegable Filter on Large table",[17,11926,11927],{},[4802,11928,11929],{},"Bad Pattern",[63,11931,11935],{"className":11932,"code":11933,"language":11934,"meta":68,"style":68},"language-powerfx shiki shiki-themes github-light github-dark","Filter(Accounts, StartsWith(Name, \"Contoso\"))\n\n","powerfx",[70,11936,11937],{"__ignoreMap":68},[73,11938,11939],{"class":75,"line":76},[73,11940,11941],{},"Filter(Accounts, StartsWith(Name, \"Contoso\"))\n",[17,11943,11944],{},"If StartsWith is not delegable for the connector and column:",[4907,11946,11947,11950],{},[4826,11948,11949],{},"Only first N records are evaluated",[4826,11951,11952],{},"App silently returns wrong results",[17,11954,11955],{},[4802,11956,6984],{},[63,11958,11960],{"className":11932,"code":11959,"language":11934,"meta":68,"style":68},"Filter(Accounts,Name >= \"Contoso\" && Name \u003C \"Contosp\")\n",[70,11961,11962],{"__ignoreMap":68},[73,11963,11964],{"class":75,"line":76},[73,11965,11959],{},[17,11967,11968],{},"Or:",[4907,11970,11971,11974,11977],{},[4826,11972,11973],{},"Use indexed columns",[4826,11975,11976],{},"Use search-friendly patterns",[4826,11978,11979],{},"Redesign UX(search box and server filtering)",[5511,11981,11983],{"id":11982},"pattern-2-using-lookup-inside-galleries","Pattern 2- Using LookUp Inside Galleries",[17,11985,11986],{},[4802,11987,11929],{},[63,11989,11991],{"className":11932,"code":11990,"language":11934,"meta":68,"style":68},"AddColumns(\n  Accounts,\n  \"PrimaryContact\",\n  LookUp(Contacts,ContactId=Accounts[@PrimaryContactId],FullName)\n)\n",[70,11992,11993,11998,12003,12008,12013],{"__ignoreMap":68},[73,11994,11995],{"class":75,"line":76},[73,11996,11997],{},"AddColumns(\n",[73,11999,12000],{"class":75,"line":83},[73,12001,12002],{},"  Accounts,\n",[73,12004,12005],{"class":75,"line":372},[73,12006,12007],{},"  \"PrimaryContact\",\n",[73,12009,12010],{"class":75,"line":436},[73,12011,12012],{},"  LookUp(Contacts,ContactId=Accounts[@PrimaryContactId],FullName)\n",[73,12014,12015],{"class":75,"line":308},[73,12016,12017],{},")\n",[17,12019,12020],{},"At scale:",[4907,12022,12023,12026,12029],{},[4826,12024,12025],{},"Triggers per-row lookups",[4826,12027,12028],{},"Causes N+1 query behavior",[4826,12030,12031],{},"App becomes unusable",[17,12033,12034],{},[4802,12035,6984],{},[4907,12037,12038,12041,12044],{},[4826,12039,12040],{},"Pre join data server-side (Dataverse view\u002FFetchXML)",[4826,12042,12043],{},"use flattened or denormalized data",[4826,12045,12046],{},"Load related data only when navigating to detail screens",[5511,12048,12050],{"id":12049},"pattern-3-sorting-large-datasets-client-side","Pattern 3 - Sorting Large Datasets Client-Side",[17,12052,12053],{},[4802,12054,11929],{},[63,12056,12058],{"className":11932,"code":12057,"language":11934,"meta":68,"style":68},"Sort(Accounts, CreatedOn, Descending)\n",[70,12059,12060],{"__ignoreMap":68},[73,12061,12062],{"class":75,"line":76},[73,12063,12057],{},[17,12065,12066],{},"If Sort is not delegable:",[4907,12068,12069,12072],{},[4826,12070,12071],{},"Only partial data sorted",[4826,12073,12074],{},"Incorrect \"latest\" results",[17,12076,12077],{},[4802,12078,6984],{},[4907,12080,12081,12084,12087],{},[4826,12082,12083],{},"Use server side views",[4826,12085,12086],{},"Predefine sorting in Dataverse",[4826,12088,12089],{},"Or restrict dataset via delegable filters first",[12,12091,12093],{"id":12092},"canvas-app-performance-checklistenterprise-grade","Canvas App Performance Checklist(Enterprise-Grade)",[5511,12095,12097],{"id":12096},"data-access-and-querying","Data Access and Querying",[4907,12099,12100,12103,12106,12109,12112],{},[4826,12101,12102],{},"Always filter before loading into galleries",[4826,12104,12105],{},"Always use delegable functions for large tables",[4826,12107,12108],{},"Always select minimal columns",[4826,12110,12111],{},"Never load entire tables",[4826,12113,12114],{},"Never rely on delegation warnings being harmless",[5511,12116,12118],{"id":12117},"ui-and-formula-performance","UI and Formula Performance",[4907,12120,12121,12124,12127,12130,12133],{},[4826,12122,12123],{},"Minimize OnVisible heavy logic",[4826,12125,12126],{},"Avoid nested ForAll loops on large collections",[4826,12128,12129],{},"Cache lookup\u002Freference data in collections only if small",[4826,12131,12132],{},"Use With() to avoid repeated calculations",[4826,12134,12135],{},"Prefer simple formulas over clever ones",[5511,12137,12139],{"id":12138},"app-startup-optimization","App StartUp Optimization",[4907,12141,12142,12145,12148,12151],{},[4826,12143,12144],{},"Do not preload data unless required",[4826,12146,12147],{},"Load data on demand(screen navigation)",[4826,12149,12150],{},"Defer expensive logic until user action",[4826,12152,12153],{},"Avoid initializing many global variables at startup",[5511,12155,12157],{"id":12156},"security-and-scale","Security and Scale",[4907,12159,12160,12163,12166,12169],{},[4826,12161,12162],{},"Let Dataverse security trim data",[4826,12164,12165],{},"Do not simulate security in formulas",[4826,12167,12168],{},"Avoid role-based branching logic that affects data quries",[4826,12170,12171],{},"Test performance with non-admin users",[12,12173,12175],{"id":12174},"offline-first-architecture-patterns","Offline-First Architecture Patterns",[17,12177,12178],{},"Offline support becomes mandatory in:",[4907,12180,12181,12184,12187,12190],{},[4826,12182,12183],{},"Field operations",[4826,12185,12186],{},"Warehouse",[4826,12188,12189],{},"Retail",[4826,12191,12192],{},"Remote areas",[17,12194,12195],{},[5529,12196,12197],{},"Offline apps must assume eventual consistency, not immediate truth",[5511,12199,12201],{"id":12200},"offline-first-pattern","Offline- First Pattern",[63,12203,12206],{"className":12204,"code":12205,"language":5090},[5088],"Canvas App\n  |\n  |- Local Collections (Offline cache)\n  |\n  |- Change Queue (Create\u002FUpdate\u002FDelete)\n  |\n  |- Sync Engine\n        |\n      Dataverse\n\n",[70,12207,12205],{"__ignoreMap":68},[5511,12209,12211],{"id":12210},"offline-data-strategy","Offline Data Strategy",[17,12213,12214],{},"Cache only what's needed",[4907,12216,12217,12220,12223],{},[4826,12218,12219],{},"User-specific data",[4826,12221,12222],{},"Recent records",[4826,12224,12225],{},"Reference tables (small)",[17,12227,12228],{},"Never cache",[4907,12230,12231,12234],{},[4826,12232,12233],{},"Entire large tables",[4826,12235,12236],{},"Rapidly changing global datasets",[5511,12238,12240],{"id":12239},"conflict-handling-strategy","Conflict Handling Strategy",[17,12242,12243],{},"Common conflicts:",[4907,12245,12246,12249],{},[4826,12247,12248],{},"Record updated by another user",[4826,12250,12251],{},"Record deletd while offline",[17,12253,12254],{},"Enetrprise pattern:",[4907,12256,12257,12260,12263],{},[4826,12258,12259],{},"use status fields (Pending\u002FSynced\u002FConflicts)",[4826,12261,12262],{},"Surface conflicts to user",[4826,12264,12265],{},"Do not auto-overwrite silently",[5511,12267,12269],{"id":12268},"_1-million-records","1 Million Records",[17,12271,12272],{},[4802,12273,12274],{},"What Does NOT works",[4907,12276,12277,12280,12283,12286,12289],{},[4826,12278,12279],{},"Loading large collections",[4826,12281,12282],{},"Client side filtering",[4826,12284,12285],{},"Infinite scrolling without server paging",[4826,12287,12288],{},"Power Automate as a data access layer",[4826,12290,12291],{},"Treating Canvas apps like server apps",[17,12293,12294],{},[4802,12295,12296],{},"What Does Works",[12298,12299,12301],"h5",{"id":12300},"pattern-a-search-driven-ui","Pattern A - Search-Driven UI",[4907,12303,12304,12307,12310],{},[4826,12305,12306],{},"No default data load",[4826,12308,12309],{},"User enters search criteria",[4826,12311,12312],{},"Delegable filter returns small subset",[12298,12314,12316],{"id":12315},"pattern-b-partitioned-data-access","Pattern B - Partitioned Data Access",[4907,12318,12319,12332],{},[4826,12320,12321,12322],{},"Data partitioned by:\n",[4907,12323,12324,12326,12329],{},[4826,12325,4947],{},[4826,12327,12328],{},"Territory",[4826,12330,12331],{},"Date",[4826,12333,12334],{},"Queries always scoped",[12298,12336,12338],{"id":12337},"pattern-c-summary-detail","Pattern C- Summary -> Detail",[4907,12340,12341,12344],{},[4826,12342,12343],{},"Summary list uses pre-aggregated data",[4826,12345,12346],{},"Detail screen loads full record on demand",[12,12348,12350],{"id":12349},"anti-patterns","Anti-Patterns",[4907,12352,12353,12356,12359,12362,12365],{},[4826,12354,12355],{},"Canvas app as full ERP front-end replacement",[4826,12357,12358],{},"Loading entire tables into collections",[4826,12360,12361],{},"Using Power Automate as a data access layer",[4826,12363,12364],{},"Simulating security logic in formulas",[4826,12366,12367],{},"Ignoring delegation warnings",[12,12369,12371],{"id":12370},"recommended-canvas-app-architecture-template","Recommended Canvas App Architecture Template",[5511,12373,12375],{"id":12374},"screen-architecture","Screen Architecture",[63,12377,12380],{"className":12378,"code":12379,"language":5090},[5088],"App Start\n  |\n  |- Home\u002FDashboard (No large data)\n  |\n  |- Search\u002F Filter Screen\n  |        |- Delegable query\n  |\n  |- List screen (Paged\u002FScoped)\n  |\n  |- Detail Screen\n        |- Load record on navigation\n        |- Load related data on demand\n\n",[70,12381,12379],{"__ignoreMap":68},[5511,12383,12385],{"id":12384},"data-access-pattern","Data Access Pattern",[4907,12387,12388,12391,12394,12397],{},[4826,12389,12390],{},"Use Dataverse views as API contracts",[4826,12392,12393],{},"Treat Power Apps as a thin client",[4826,12395,12396],{},"Centralize query logic",[4826,12398,12399],{},"Avoid duplicated formuals acrossw screens",[5511,12401,12403],{"id":12402},"logic-placement-rules-in-canvas-app","Logic Placement Rules in Canvas App",[5875,12405,12406,12416],{},[5878,12407,12408],{},[5881,12409,12410,12413],{},[5884,12411,12412],{},"Logic Type",[5884,12414,12415],{},"Place It",[5891,12417,12418,12426,12434,12442,12449],{},[5881,12419,12420,12423],{},[5896,12421,12422],{},"Validation",[5896,12424,12425],{},"Dataverse(Plugin\u002FAPI)",[5881,12427,12428,12431],{},[5896,12429,12430],{},"UI Behavior",[5896,12432,12433],{},"Canvas Formulas",[5881,12435,12436,12439],{},[5896,12437,12438],{},"Heavy computation",[5896,12440,12441],{},"Dataverse\u002FAzure",[5881,12443,12444,12447],{},[5896,12445,12446],{},"Orchestration",[5896,12448,7808],{},[5881,12450,12451,12453],{},[5896,12452,5828],{},[5896,12454,12455],{},"Dataverse only",[12,12457,5183],{"id":4883},[17,12459,12460],{},[4802,12461,4891],{},[4907,12463,12464,12467,12470],{},[4826,12465,12466],{},"Enforce DLP",[4826,12468,12469],{},"Monitor app usage",[4826,12471,12472],{},"Prevent uncontrolled app sprawl",[17,12474,12475],{},[4802,12476,4925],{},[4907,12478,12479,12482,12485,12488],{},[4826,12480,12481],{},"Decide Canvas vs Model Driven intentionally",[4826,12483,12484],{},"Define scale limits per app",[4826,12486,12487],{},"Enforce architecture templates",[4826,12489,12490],{},"Avoid Canvas everywhere strategy",[17,12492,12493],{},[4802,12494,4901],{},[4907,12496,12497,12500,12503],{},[4826,12498,12499],{},"Design for delegation first",[4826,12501,12502],{},"Measure performance early",[4826,12504,12505],{},"Test with realistic data volumes",[17,12507,12508],{},[4802,12509,4947],{},[4907,12511,12512,12515,12518],{},[4826,12513,12514],{},"Expect search-driven UX",[4826,12516,12517],{},"Expect slight sync delays (offline)",[4826,12519,12520],{},"Expect scoped views, not global list",[12,12522,12524],{"id":12523},"common-confusion-and-failure-scenarios","Common Confusion and Failure Scenarios",[4823,12526,12527],{},[4826,12528,12529],{},"Dataverse can handle 1M records, so my app can",[4907,12531,12532],{},[4826,12533,12534],{},"Dataverse can; client-side formulas cannot",[4823,12536,12537],{"start":83},[4826,12538,12539],{},"Delegation warnings are optional",[4907,12541,12542],{},[4826,12543,12544],{},"They are warnings that app is wrong at scale",[4823,12546,12547],{"start":372},[4826,12548,12549],{},"Offline sync should just work",[4907,12551,12552],{},[4826,12553,12554],{},"Offline is a distributed system problem",[12,12556,5003],{"id":5002},[17,12558,12559],{},"Canvas apps:",[4907,12561,12562,12565,12568,12571,12574],{},[4826,12563,12564],{},"SCale by design, not by accident",[4826,12566,12567],{},"Require strict delegation discipline",[4826,12569,12570],{},"Must treat Dataverse as the server",[4826,12572,12573],{},"Should load data on demand",[4826,12575,12576],{},"Can support very large datasets when architected correctly",[89,12578,12579],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":68,"searchDepth":83,"depth":83,"links":12581},[12582,12583,12584,12585,12586,12587,12588,12589,12590,12591,12592],{"id":14,"depth":83,"text":15},{"id":11849,"depth":83,"text":11850},{"id":11887,"depth":83,"text":11888},{"id":11919,"depth":83,"text":11920},{"id":12092,"depth":83,"text":12093},{"id":12174,"depth":83,"text":12175},{"id":12349,"depth":83,"text":12350},{"id":12370,"depth":83,"text":12371},{"id":4883,"depth":83,"text":5183},{"id":12523,"depth":83,"text":12524},{"id":5002,"depth":83,"text":5003},{"label":12594,"key":12595},"Application Architecture","application-architecture","A practical enterprise architecture guide for designing scalable, maintainable, and performant Canvas Apps in Microsoft Power Platform.","\u002Fimages\u002Fcanvas-app-architecture.jpg","Enterprise Canvas App architecture with Power Fx and Dataverse",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpowerapps-canvas-app",{"title":12602,"description":12603},"Canvas Apps Architecture Guide for Enterprise Solutions","Learn how to design enterprise-grade Canvas Apps using Power Fx, delegation strategies, performance optimization, security controls, and integration patterns.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F11.powerapps-canvas-app","Architecture principles, performance strategies, and governance patterns for building scalable Canvas Apps at enterprise scale.",[122,12607,4873,11788,5733],"canvas-apps","YU5ylEp-YSQMqby019CXHbPierhC22ZU_ladsvEO7XY",{"id":12610,"title":12611,"author":4793,"body":12612,"canonical":102,"category":13256,"date":8527,"description":13257,"draft":110,"extension":109,"featured":110,"image":13258,"imageAlt":13259,"meta":13260,"navigation":108,"order":8959,"path":13261,"seo":13262,"stem":13265,"summary":13266,"tags":13267,"updated":8527,"__hash__":13269},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F12.powerapps-model-driven.md","Model-Driven Apps Architecture",{"type":9,"value":12613,"toc":13244},[12614,12616,12619,12633,12636,12647,12650,12654,12658,12664,12669,12680,12684,12688,12693,12710,12718,12722,12725,12730,12750,12754,12758,12764,12768,12779,12783,12789,12793,12810,12814,12819,12830,12834,12839,12847,12850,12855,12860,12868,12872,12880,12885,12895,12899,12905,12910,12921,12925,12929,12932,12946,12949,12960,12964,12978,12982,12986,13000,13005,13011,13015,13018,13029,13032,13043,13047,13051,13062,13066,13080,13085,13089,13093,13107,13111,13128,13130,13134,13145,13149,13160,13164,13175,13179,13190,13192,13197,13202,13207,13212,13217,13222,13224,13227],[12,12615,15],{"id":14},[17,12617,12618],{},"Model-driven apps are designed for data-centric, process-heavy enterprise systems where:",[4907,12620,12621,12624,12627,12630],{},[4826,12622,12623],{},"Data volume is large",[4826,12625,12626],{},"Security and business logic are complex",[4826,12628,12629],{},"UI consistency matters more than pixel-perfect design",[4826,12631,12632],{},"Processes span multiple roles and stages",[17,12634,12635],{},"Unlike Canvas apps, model driven apps:",[4907,12637,12638,12641,12644],{},[4826,12639,12640],{},"Execute most logic server-side",[4826,12642,12643],{},"Are metadata driven",[4826,12645,12646],{},"Scale better for large dataset by default",[17,12648,12649],{},"When teams use Canvas apps to solve model-driven problems, performance and governance usually collapse",[12,12651,12653],{"id":12652},"model-driven-runtime-architecture","Model-Driven Runtime Architecture",[5511,12655,12657],{"id":12656},"high-level-runtime-flow","High Level Runtime Flow",[63,12659,12662],{"className":12660,"code":12661,"language":5090},[5088],"User\n  |\nModel-Driven App Shell\n  |\n  |- Metadata (Forms,Views,Commands)\n  |- Security Evaluation\n  |- Business Process Flow\nDataverse\n  |\n  |- Query Execution\n  |- Plugin pipeline\n  |- Security trimming\n  |\nRendered UI\n\n",[70,12663,12661],{"__ignoreMap":68},[17,12665,12666],{},[4802,12667,12668],{},"Key difference from Canvas",[4907,12670,12671,12674,12677],{},[4826,12672,12673],{},"Queries and filtering are server-driven",[4826,12675,12676],{},"Pagination is automatic",[4826,12678,12679],{},"Delegation is not exposed to the user",[12,12681,12683],{"id":12682},"model-driven-performance-tuning","Model-Driven Performance Tuning",[5511,12685,12687],{"id":12686},"view-performance","View Performance",[17,12689,12690],{},[4802,12691,12692],{},"Best practices",[4907,12694,12695,12698,12701,12704,12707],{},[4826,12696,12697],{},"Limit columns shown in views",[4826,12699,12700],{},"Avoid calculated fields in views",[4826,12702,12703],{},"Avoid complex OR conditions",[4826,12705,12706],{},"Use indexed columns where possible",[4826,12708,12709],{},"Avoid unnecessary related entity columns",[17,12711,12712,12715],{},[4802,12713,12714],{},"Anti-pattern",[5529,12716,12717],{},"Show everything in the default view",[5511,12719,12721],{"id":12720},"form-load-optimization","Form Load Optimization",[17,12723,12724],{},"Form load time is affected by everything configured on the form, not just data.",[17,12726,12727],{},[4802,12728,12729],{},"What Slows Forms Down",[4907,12731,12732,12735,12738,12741,12744,12747],{},[4826,12733,12734],{},"Too many fields",[4826,12736,12737],{},"Multiple subgrids loading immediately",[4826,12739,12740],{},"Embedded Canvas Apps",[4826,12742,12743],{},"Heavy Javascript on load",[4826,12745,12746],{},"Business rules evaluated on load",[4826,12748,12749],{},"BPF initialization",[5511,12751,12753],{"id":12752},"good-vs-bad-form-design","Good vs Bad Form Design",[12298,12755,12757],{"id":12756},"bad-form","Bad Form",[63,12759,12762],{"className":12760,"code":12761,"language":5090},[5088],"Main Form\n  |- 80+ fields\n  |- 6 subgrids\n  |- 3 business rules\n  |- 2 canvas apps\n  |- Javascript onLoad\n  |- BPF auto-initialized\n\n",[70,12763,12761],{"__ignoreMap":68},[17,12765,12766],{},[4802,12767,7979],{},[4907,12769,12770,12773,12776],{},[4826,12771,12772],{},"Slow initial load",[4826,12774,12775],{},"Sluggish navigation",[4826,12777,12778],{},"Poor mobile experience",[5511,12780,12782],{"id":12781},"optimized-form","Optimized Form",[63,12784,12787],{"className":12785,"code":12786,"language":5090},[5088],"Main Form\n  |- Core fields only\n  |- Tabs with lazy loading\n  |- Subgrids load on demand\n  |- Minimal javascript\n  |- BPF enabled only if needed\n\n",[70,12788,12786],{"__ignoreMap":68},[5511,12790,12792],{"id":12791},"form-optimization-techniques","Form Optimization Techniques",[4907,12794,12795,12798,12801,12804,12807],{},[4826,12796,12797],{},"Use tabs with deferred loading",[4826,12799,12800],{},"Split forms by role (Don't overload one form)",[4826,12802,12803],{},"Remove unused fields from the form entirely",[4826,12805,12806],{},"Avoid logic in onLoad unless critical",[4826,12808,12809],{},"Prefer server side validation over form scripts",[12,12811,12813],{"id":12812},"business-process-flows-bpfs-power-and-pitfalls","Business Process Flows (BPFs) - Power and Pitfalls",[17,12815,12816],{},[4802,12817,12818],{},"What BPFs are Good for",[4907,12820,12821,12824,12827],{},[4826,12822,12823],{},"Guiding users through stages",[4826,12825,12826],{},"Visualizing process progression",[4826,12828,12829],{},"Enforcing lightweight process structure",[5511,12831,12833],{"id":12832},"bpf-anti-patterns","BPF Anti-Patterns",[17,12835,12836],{},[4802,12837,12838],{},"Anti-Pattern 1 - Using BPF as Validation Engine",[4907,12840,12841,12844],{},[4826,12842,12843],{},"Expecting BPF stage gating to enforce rules",[4826,12845,12846],{},"Assuming API calls respect BPF logic",[12298,12848,6515],{"id":12849},"reality",[4907,12851,12852],{},[4826,12853,12854],{},"BPFs are UI guidance, not enforcement*",[17,12856,12857],{},[4802,12858,12859],{},"Anti Pattern 2 - Pne BPF for All Roles",[4907,12861,12862,12865],{},[4826,12863,12864],{},"Sales, service, finance all forced into one flow",[4826,12866,12867],{},"Irrelevant stages for many users",[12298,12869,12871],{"id":12870},"result","Result",[4907,12873,12874,12877],{},[4826,12875,12876],{},"User frustation",[4826,12878,12879],{},"Process abandonment",[17,12881,12882],{},[4802,12883,12884],{},"Anti Pattern 3 -  Too many Stages and Steps",[4907,12886,12887,12890,12893],{},[4826,12888,12889],{},"Long, complex flows",[4826,12891,12892],{},"Slow UI",[4826,12894,6980],{},[5511,12896,12898],{"id":12897},"good-bpf-design-pattern","Good BPF Design Pattern",[63,12900,12903],{"className":12901,"code":12902,"language":5090},[5088],"Entity\n  |- BPF for Role A (Sales)\n  |- BPF for Role B (Service)\n  |- Optional BPF for Exceptions\n\n",[70,12904,12902],{"__ignoreMap":68},[17,12906,12907],{},[4802,12908,12909],{},"Rules",[4907,12911,12912,12915,12918],{},[4826,12913,12914],{},"Keep stages minimal",[4826,12916,12917],{},"Align with real business milestones",[4826,12919,12920],{},"Enforce critical rules in Dataverse logic, not BPFs",[12,12922,12924],{"id":12923},"command-bar-customization-guidance","Command Bar Customization Guidance",[5511,12926,12928],{"id":12927},"why-command-bars-matter","Why Command Bars Matter",[17,12930,12931],{},"Command bars control:",[4907,12933,12934,12937,12940,12943],{},[4826,12935,12936],{},"User actions",[4826,12938,12939],{},"Discoverability",[4826,12941,12942],{},"Process flow",[4826,12944,12945],{},"UX consistency",[17,12947,12948],{},"Poor command bar design leads to:",[4907,12950,12951,12954,12957],{},[4826,12952,12953],{},"Confusion",[4826,12955,12956],{},"Accidental actions",[4826,12958,12959],{},"Over-customization",[5511,12961,12963],{"id":12962},"command-bar-customization-options","Command Bar Customization Options:",[4907,12965,12966,12969,12972,12975],{},[4826,12967,12968],{},"Out of box commands",[4826,12970,12971],{},"Command rules(enable\u002Fdisable\u002Fvisibility)",[4826,12973,12974],{},"Javascript-backed commands",[4826,12976,12977],{},"Custom actions\u002F Custom APIs",[5511,12979,12981],{"id":12980},"good-vs-bad-command-bar-design","Good vs Bad Command Bar Design",[17,12983,12984],{},[4802,12985,11929],{},[4907,12987,12988,12991,12994,12997],{},[4826,12989,12990],{},"Many custom buttons",[4826,12992,12993],{},"Logic in Javascript only",[4826,12995,12996],{},"No security alignment",[4826,12998,12999],{},"Commands always visible",[17,13001,13002],{},[4802,13003,13004],{},"Enetrprise Pattern",[63,13006,13009],{"className":13007,"code":13008,"language":5090},[5088],"Command Bar\n  |- Few, high-value actions\n  |- Visibility tied to security roles\n  |- Server-side validation (plugin\u002FAPI)\n  |- Client logic only for UX\n\n",[70,13010,13008],{"__ignoreMap":68},[5511,13012,13014],{"id":13013},"when-to-use-custom-api-with-command-bar","When to use Custom API with Command Bar",[17,13016,13017],{},"Use Custom API when:",[4907,13019,13020,13023,13026],{},[4826,13021,13022],{},"Action represents a business operation",[4826,13024,13025],{},"Must be callable from multiple clients",[4826,13027,13028],{},"Needs server-side enforcement",[17,13030,13031],{},"Example:",[4907,13033,13034,13037,13040],{},[4826,13035,13036],{},"Approve invoice",[4826,13038,13039],{},"Generate Work order",[4826,13041,13042],{},"Close Project with Validation",[12,13044,13046],{"id":13045},"javascript-in-model-driven-apps","Javascript in Model Driven Apps",[5511,13048,13050],{"id":13049},"when-javascript-is-appropriate","When Javascript is Appropriate",[4907,13052,13053,13056,13059],{},[4826,13054,13055],{},"UI behvior (show\u002Fhide)",[4826,13057,13058],{},"Client Validation",[4826,13060,13061],{},"Navigation assistance",[5511,13063,13065],{"id":13064},"when-javascript-is-dangerous","When Javascript is Dangerous",[4907,13067,13068,13071,13074,13077],{},[4826,13069,13070],{},"Business rules",[4826,13072,13073],{},"Data integrity",[4826,13075,13076],{},"Security enforcement",[4826,13078,13079],{},"Cross-record updates",[17,13081,13082],{},[5529,13083,13084],{},"Javascript should never be the only place a rule exists",[12,13086,13088],{"id":13087},"scaling-model-driven-apps-to-1m-records","Scaling Model-Driven Apps to 1M+ records",[5511,13090,13092],{"id":13091},"why-model-driven-scales-better-than-canvas","Why Model-Driven Scales Better than Canvas",[4907,13094,13095,13098,13101,13104],{},[4826,13096,13097],{},"Server side paging",[4826,13099,13100],{},"Optimized views",[4826,13102,13103],{},"Built-in query shaping",[4826,13105,13106],{},"Metadata-driven UI",[5511,13108,13110],{"id":13109},"enetrprise-pattern-for-large-datasets","Enetrprise Pattern for Large Datasets",[4907,13112,13113,13116,13119,13122,13125],{},[4826,13114,13115],{},"Use search-first UX",[4826,13117,13118],{},"Use views scoped by role\u002Fterritory\u002Fdate",[4826,13120,13121],{},"Avoid \"All Records\" view",[4826,13123,13124],{},"Partition data logically",[4826,13126,13127],{},"Use Power BI for analytics, not views",[12,13129,5183],{"id":4883},[17,13131,13132],{},[4802,13133,4891],{},[4907,13135,13136,13139,13142],{},[4826,13137,13138],{},"Manage forms\u002Fviews cleanly",[4826,13140,13141],{},"Monitor performance complaints",[4826,13143,13144],{},"Enforce ALM discipline",[17,13146,13147],{},[4802,13148,4925],{},[4907,13150,13151,13154,13157],{},[4826,13152,13153],{},"Choose model-driven for complex data\u002Fprocess apps",[4826,13155,13156],{},"Enforce UX standards",[4826,13158,13159],{},"Balance configurability with maintainablility",[17,13161,13162],{},[4802,13163,4901],{},[4907,13165,13166,13169,13172],{},[4826,13167,13168],{},"Minimize client scripts",[4826,13170,13171],{},"Use Custom APIs for actions",[4826,13173,13174],{},"Optimize forms and views early",[17,13176,13177],{},[4802,13178,4947],{},[4907,13180,13181,13184,13187],{},[4826,13182,13183],{},"Expect consistency",[4826,13185,13186],{},"Expect role-specific experiences",[4826,13188,13189],{},"Excpect guided processes",[12,13191,12524],{"id":12523},[4823,13193,13194],{},[4826,13195,13196],{},"Model-Driven is Old UI",[4907,13198,13199],{},[4826,13200,13201],{},"It is the most scalable UI for Dataverse centric system",[4823,13203,13204],{"start":83},[4826,13205,13206],{},"BPF Enforce Business Rules",[4907,13208,13209],{},[4826,13210,13211],{},"Only server logic enforces truth",[4823,13213,13214],{"start":372},[4826,13215,13216],{},"We Need Javascript Everywhere",[4907,13218,13219],{},[4826,13220,13221],{},"Most JS exists due to poor data\u002Flogic placement",[12,13223,5003],{"id":5002},[17,13225,13226],{},"Model Driven apps:",[4907,13228,13229,13232,13235,13238,13241],{},[4826,13230,13231],{},"Are enterprise grade by default",[4826,13233,13234],{},"Scale better for large datasets",[4826,13236,13237],{},"Require discipline in customization",[4826,13239,13240],{},"Benefit from server-side logic",[4826,13242,13243],{},"Provide consistent, secure UX when designed intenionally",{"title":68,"searchDepth":83,"depth":83,"links":13245},[13246,13247,13248,13249,13250,13251,13252,13253,13254,13255],{"id":14,"depth":83,"text":15},{"id":12652,"depth":83,"text":12653},{"id":12682,"depth":83,"text":12683},{"id":12812,"depth":83,"text":12813},{"id":12923,"depth":83,"text":12924},{"id":13045,"depth":83,"text":13046},{"id":13087,"depth":83,"text":13088},{"id":4883,"depth":83,"text":5183},{"id":12523,"depth":83,"text":12524},{"id":5002,"depth":83,"text":5003},{"label":12594,"key":12595},"A practical enterprise architecture guide for designing scalable, secure, and process-centric Model-Driven Apps in Microsoft Power Platform.","\u002Fimages\u002Fmodel-driven-app-architecture.jpg","Enterprise Model-Driven App architecture with Dataverse and business process flows",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpowerapps-model-driven",{"title":13263,"description":13264},"Model-Driven Apps Architecture Guide for Enterprise Solutions","Learn how to design enterprise-grade Model-Driven Apps using Dataverse data modeling, security roles, business process flows, automation, and governance patterns.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F12.powerapps-model-driven","Architecture principles, data modeling strategies, and governance frameworks for building process-driven enterprise applications with Model-Driven Apps.",[122,13268,120,4873,5733],"model-driven-apps","9-37QeigWFYS8FJ9XsXFXjnaDHdY5CcrcU1i1BsHfk8",{"id":13271,"title":13272,"author":4793,"body":13273,"canonical":102,"category":14207,"date":8527,"description":14210,"draft":110,"extension":109,"featured":110,"image":14211,"imageAlt":14212,"meta":14213,"navigation":108,"order":8965,"path":14214,"seo":14215,"stem":14218,"summary":14219,"tags":14220,"updated":8527,"__hash__":14224},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F13.pcf-architechture.md","Power Apps Component Framework (PCF) Architecture",{"type":9,"value":13274,"toc":14193},[13275,13277,13280,13294,13297,13308,13312,13316,13322,13327,13338,13342,13348,13352,13355,13369,13372,13383,13386,13390,13394,13399,13407,13412,13420,13424,13428,13436,13439,13447,13452,13456,13459,13463,13480,13485,13491,13495,13506,13511,13519,13523,13528,13536,13541,13549,13554,13559,13564,13569,13574,13579,13584,13588,13592,13595,13611,13615,13626,13630,13636,13639,13644,13649,13653,13664,13668,13672,13675,13689,13693,13704,13708,13719,13723,13726,13737,13741,13752,13756,13764,13768,13787,13791,13808,13812,13815,13829,13837,13841,13845,13850,13858,13863,13874,13878,13882,13889,13893,13904,13908,13912,13920,13924,13935,13939,13943,13950,13954,13965,13969,13973,13978,13982,13987,13991,13994,14008,14012,14031,14035,14059,14063,14077,14081,14084,14101,14103,14107,14118,14122,14144,14148,14159,14163,14171,14173,14176],[12,13276,15],{"id":14},[17,13278,13279],{},"PCF is best understood as a client side component runtime hosted by Power Apps, executing under the platform's security and data constraints.\nPCF allows us to build custom UI components that run inside:",[4907,13281,13282,13285,13288,13291],{},[4826,13283,13284],{},"Model driven forms",[4826,13286,13287],{},"Model-driven views (dataset controls)",[4826,13289,13290],{},"Canvas apps",[4826,13292,13293],{},"Power pages",[17,13295,13296],{},"PCF is not:",[4907,13298,13299,13302,13305],{},[4826,13300,13301],{},"A replacement for server-side logic",[4826,13303,13304],{},"A good place for \"business rule\"",[4826,13306,13307],{},"A free pass around Dataverse performance limits",[12,13309,13311],{"id":13310},"pcf-lifecycle","PCF lifecycle",[5511,13313,13315],{"id":13314},"high-level-lifecycle","High-Level Lifecycle",[63,13317,13320],{"className":13318,"code":13319,"language":5090},[5088],"    init() - setup, read context, create DOM\n      |\n    updateView() - render\u002Fupdate UI when data\u002Fcontext changes\n      |\n    getOutputs() - return values to platform when user changes\n      |\n    destroy() - cleanup listeners, timers, resources\n\n",[70,13321,13319],{"__ignoreMap":68},[17,13323,13324],{},[4802,13325,13326],{},"Core reality",[4907,13328,13329,13332,13335],{},[4826,13330,13331],{},"updateView() can fire many times",[4826,13333,13334],{},"Poorly designed rendering causes slowness and memory leaks",[4826,13336,13337],{},"getOutputs() must be minimal and deterministic",[5511,13339,13341],{"id":13340},"lifecycle-with-event-triggers","Lifecycle with Event Triggers",[63,13343,13346],{"className":13344,"code":13345,"language":5090},[5088],"Platform loads form\u002Fview\n    |\ninit()\n    |\n    |- user types\u002F field changes\n    |- form refresh\u002F navigation\n    |- dataset paging \u002Fsorting\n    |- resize \u002F visibility changes\nupdateView()\n    |\n    |- user edits value\n    |\nnotifyOutputChanges()\n    |\ngetOutputs()\n    |\nPlatform writes value\u002Fsaves record (depending on control and context)\n    |\ndestroy()\n\n",[70,13347,13345],{"__ignoreMap":68},[12,13349,13351],{"id":13350},"pcf-execution-boundary-architectural-position","PCF Execution Boundary (Architectural Position)",[17,13353,13354],{},"PCF runs:",[4907,13356,13357,13360,13363,13366],{},[4826,13358,13359],{},"On the client",[4826,13361,13362],{},"Inside the host application runtime",[4826,13364,13365],{},"Under Dataverse security",[4826,13367,13368],{},"Without direct database access",[17,13370,13371],{},"PCF cannot:",[4907,13373,13374,13377,13380],{},[4826,13375,13376],{},"Bypass Dataverse security",[4826,13378,13379],{},"Execute server-side transactions",[4826,13381,13382],{},"Guarantee atomic operations",[17,13384,13385],{},"Architecturally:\nPCF is a UI extension layer, not a business logic layer.",[12,13387,13389],{"id":13388},"field-vs-view-controls","Field vs View Controls",[5511,13391,13393],{"id":13392},"field-control","Field Control",[17,13395,13396],{},[4802,13397,13398],{},"Use when",[4907,13400,13401,13404],{},[4826,13402,13403],{},"You are enhancing the UX of one field",[4826,13405,13406],{},"Example: masked input, advanced lookup, custom picker, rich formatting",[17,13408,13409],{},[4802,13410,13411],{},"Runtime behavior",[4907,13413,13414,13417],{},[4826,13415,13416],{},"Simple data binding",[4826,13418,13419],{},"Often interacts with context.parameters.fieldName",[5511,13421,13423],{"id":13422},"viewdataset-contro","View\u002FDataset Contro;",[17,13425,13426],{},[4802,13427,13398],{},[4907,13429,13430,13433],{},[4826,13431,13432],{},"You need a custom experience for lists",[4826,13434,13435],{},"Example: Kanban board, calendar, custom grid, inline actions",[5511,13437,13411],{"id":13438},"runtime-behavior",[4907,13440,13441,13444],{},[4826,13442,13443],{},"Works with context.parameters.datasetName and record sets",[4826,13445,13446],{},"Must handle paging, sorting, selection and performance carefully",[17,13448,13449],{},[5529,13450,13451],{},"Dataset controls are where performance problems multiply fastest",[12,13453,13455],{"id":13454},"step-by-step-create-a-pcf-control","Step-by-Step: Create a PCF Control",[17,13457,13458],{},"Below is the golden path that teams use successfully in enterprise ALM.",[5511,13460,13462],{"id":13461},"create-the-control-project","Create the Control Project",[4823,13464,13465,13468,13471,13474,13477],{},[4826,13466,13467],{},"Install prerequisites (Node, Power Platform CLI)",[4826,13469,13470],{},"Initialize the control",[4826,13472,13473],{},"Implement the logic",[4826,13475,13476],{},"Build & test",[4826,13478,13479],{},"Package in a solution",[17,13481,13482],{},[4802,13483,13484],{},"Recommended repo structure",[63,13486,13489],{"className":13487,"code":13488,"language":5090},[5088],"\u002Fpcf-controls\n  \u002Fsrc\n    \u002FMyFieldControl\n    \u002FMyDatasetControl\n  \u002Fsolutions\n    \u002FYourSolution\n",[70,13490,13488],{"__ignoreMap":68},[5511,13492,13494],{"id":13493},"define-a-field-control","Define a Field Control",[4907,13496,13497,13500,13503],{},[4826,13498,13499],{},"Control type: Field",[4826,13501,13502],{},"One bound input property (e.g value)",[4826,13504,13505],{},"Optional config properties (e.g format, maxLength)",[17,13507,13508],{},[4802,13509,13510],{},"Best Practice",[4907,13512,13513,13516],{},[4826,13514,13515],{},"Keep input properties minimal",[4826,13517,13518],{},"Avoid \"do everything\" controls",[5511,13520,13522],{"id":13521},"implementation-guidance","Implementation Guidance",[4823,13524,13525],{},[4826,13526,13527],{},"init()",[4907,13529,13530,13533],{},[4826,13531,13532],{},"Create DOM container",[4826,13534,13535],{},"Register event handlers",[4823,13537,13538],{"start":83},[4826,13539,13540],{},"updateView()",[4907,13542,13543,13546],{},[4826,13544,13545],{},"Read the current bound value",[4826,13547,13548],{},"Render UI",[4823,13550,13551],{"start":372},[4826,13552,13553],{},"notifyOutputChanges()",[4907,13555,13556],{},[4826,13557,13558],{},"Call only when user changes value",[4823,13560,13561],{"start":436},[4826,13562,13563],{},"getOutputs()",[4907,13565,13566],{},[4826,13567,13568],{},"Return new value for bound field",[4823,13570,13571],{"start":308},[4826,13572,13573],{},"destroy()",[4907,13575,13576],{},[4826,13577,13578],{},"Remove event handlers, timers",[17,13580,13581],{},[5529,13582,13583],{},"Never call APIs in updateView() unless throttled\u002Fdebounced",[12,13585,13587],{"id":13586},"step-by-step-create-a-pcf-control-viewdataser-template","Step-by-Step: Create a PCF Control (View\u002FDataser Template)",[5511,13589,13591],{"id":13590},"dataset-control-basics","Dataset Control basics",[17,13593,13594],{},"A dataset control is designed around:",[4907,13596,13597,13600,13602,13605,13608],{},[4826,13598,13599],{},"Records",[4826,13601,5822],{},[4826,13603,13604],{},"Paging",[4826,13606,13607],{},"Sorting",[4826,13609,13610],{},"Selection",[5511,13612,13614],{"id":13613},"what-you-configure","What you configure",[4907,13616,13617,13620,13623],{},[4826,13618,13619],{},"Control type: Dataset",[4826,13621,13622],{},"Dataset input property (e.g. MyDataset)",[4826,13624,13625],{},"Optional action parameters (e.g enable inline actions)",[5511,13627,13629],{"id":13628},"rendering-loop","Rendering Loop",[63,13631,13634],{"className":13632,"code":13633,"language":5090},[5088],"updateView()\n  |- read dataset paging info\n  |- read visible records (current page)\n  |- render only visible rows\u002Fcards\n  |- wire up selection and actions\n\n",[70,13635,13633],{"__ignoreMap":68},[5511,13637,13629],{"id":13638},"rendering-loop-1",[63,13640,13642],{"className":13641,"code":13633,"language":5090},[5088],[70,13643,13633],{"__ignoreMap":68},[17,13645,13646],{},[5529,13647,13648],{},"Render only what the user can see. Don't render 5000 DOM nodes",[5511,13650,13652],{"id":13651},"dataset-gotchas","Dataset \"Gotchas\"",[4907,13654,13655,13658,13661],{},[4826,13656,13657],{},"Paging is not optional",[4826,13659,13660],{},"Sorting must be delegated to platform",[4826,13662,13663],{},"Record count can be large, but UI must remain constant-time per page",[12,13665,13667],{"id":13666},"react-vs-non-react-guidance","React vs Non-React Guidance",[5511,13669,13671],{"id":13670},"when-react-is-a-good-choice","When React is a Good choice",[17,13673,13674],{},"Use React when:",[4907,13676,13677,13680,13683,13686],{},[4826,13678,13679],{},"UI has complex state",[4826,13681,13682],{},"You need component reuse",[4826,13684,13685],{},"You need predictable rendering and state management",[4826,13687,13688],{},"You have an enterprise front-end practice",[17,13690,13691],{},[4802,13692,7637],{},[4907,13694,13695,13698,13701],{},[4826,13696,13697],{},"Mature ecosystem",[4826,13699,13700],{},"Testable patterns",[4826,13702,13703],{},"Better maintainability for Complex UI",[17,13705,13706],{},[4802,13707,7640],{},[4907,13709,13710,13713,13716],{},[4826,13711,13712],{},"Risk of excessive re-renders if poorly designed",[4826,13714,13715],{},"Bundle size concerns",[4826,13717,13718],{},"Needs disciplined performance patterns",[5511,13720,13722],{"id":13721},"when-non-react-is-better","When Non-React is Better",[17,13724,13725],{},"Use non-React (vanilla TS\u002FDOM) when:",[4907,13727,13728,13731,13734],{},[4826,13729,13730],{},"Control is small and simple (formatting, lightweight input)",[4826,13732,13733],{},"Performance must be extremely tight",[4826,13735,13736],{},"You want minimal dependencies",[17,13738,13739],{},[4802,13740,7637],{},[4907,13742,13743,13746,13749],{},[4826,13744,13745],{},"Small bundle",[4826,13747,13748],{},"Lower runtime overhead",[4826,13750,13751],{},"Fewer dependency upgrade risks",[17,13753,13754],{},[4802,13755,7640],{},[4907,13757,13758,13761],{},[4826,13759,13760],{},"Harder to scale to complex UI",[4826,13762,13763],{},"More manual state management",[5511,13765,13767],{"id":13766},"enetrprise-recommendation","Enetrprise Recommendation",[4907,13769,13770,13773],{},[4826,13771,13772],{},"Field Controls: React optional, often non-React is fine",[4826,13774,13775,13776],{},"Dataset controls: React often helps, but only if you implement:\n",[4907,13777,13778,13781,13784],{},[4826,13779,13780],{},"memoization",[4826,13782,13783],{},"virtualization patterns",[4826,13785,13786],{},"controlled re-render strategy",[12,13788,13790],{"id":13789},"when-pcf-is-the-wrong-choice","When PCF Is the Wrong Choice",[4907,13792,13793,13796,13799,13802,13805],{},[4826,13794,13795],{},"When requirement is business validation (use plugin)",[4826,13797,13798],{},"When requirement is data transformation (use server)",[4826,13800,13801],{},"When requirement is integration logic (use API\u002Fflow)",[4826,13803,13804],{},"When requirement can be solved with configuration",[4826,13806,13807],{},"When UX complexity outweighs maintainability",[12,13809,13811],{"id":13810},"pcf-as-a-technical-debt-multiplier","PCF as a Technical Debt Multiplier",[17,13813,13814],{},"Each PCF control:",[4907,13816,13817,13820,13823,13826],{},[4826,13818,13819],{},"Increases bundle size",[4826,13821,13822],{},"Increases upgrade surface area",[4826,13824,13825],{},"Adds dependency lifecycle",[4826,13827,13828],{},"Requires regression testing",[17,13830,13831,13834],{},[5529,13832,13833],{},"A platform with 2 PCF controls behaves differently from one with 25.",[5529,13835,13836],{},"Architectural discipline determines whether PCF remains a precision tool or becomes UI fragmentation.",[12,13838,13840],{"id":13839},"most-common-pcf-failures","Most Common PCF Failures",[5511,13842,13844],{"id":13843},"anti-pattern-1-heavy-work-in-updateview","Anti-Pattern 1 - Heavy work in updateView()",[17,13846,13847],{},[4802,13848,13849],{},"Symptom",[4907,13851,13852,13855],{},[4826,13853,13854],{},"UI freezes",[4826,13856,13857],{},"typing lags",[17,13859,13860],{},[4802,13861,13862],{},"Fix",[4907,13864,13865,13868,13871],{},[4826,13866,13867],{},"Debounce expensive operation",[4826,13869,13870],{},"Cache",[4826,13872,13873],{},"render minimal diffs",[5511,13875,13877],{"id":13876},"anti-pattern-2-re-rendering-everything-on-every-update","Anti-Pattern 2 - Re-rendering everything on every update",[17,13879,13880],{},[4802,13881,13849],{},[4907,13883,13884,13886],{},[4826,13885,6557],{},[4826,13887,13888],{},"Slow grids",[17,13890,13891],{},[4802,13892,13862],{},[4907,13894,13895,13898,13901],{},[4826,13896,13897],{},"Prefetch via server-side query\u002Fviews",[4826,13899,13900],{},"fetxh once per page",[4826,13902,13903],{},"memoize in React",[5511,13905,13907],{"id":13906},"anti-pattern-3-calling-web-api-per-row-n1","Anti-Pattern 3 - Calling Web API per row (N+1)",[17,13909,13910],{},[4802,13911,13849],{},[4907,13913,13914,13917],{},[4826,13915,13916],{},"Works in dev",[4826,13918,13919],{},"dies in prod",[17,13921,13922],{},[4802,13923,13862],{},[4907,13925,13926,13929,13932],{},[4826,13927,13928],{},"Prefetch via server-side-query\u002Fviews",[4826,13930,13931],{},"fetch once per page",[4826,13933,13934],{},"use batching",[5511,13936,13938],{"id":13937},"anti-pattern-4-large-bundle-size-and-dependency-sprawl","Anti-Pattern 4 - Large bundle size and dependency sprawl",[17,13940,13941],{},[4802,13942,13849],{},[4907,13944,13945,13947],{},[4826,13946,12772],{},[4826,13948,13949],{},"worse on mobile",[17,13951,13952],{},[4802,13953,13862],{},[4907,13955,13956,13959,13962],{},[4826,13957,13958],{},"Minimize libraries",[4826,13960,13961],{},"tree-shaking",[4826,13963,13964],{},"Avoid huge UI frameworks unless required",[5511,13966,13968],{"id":13967},"anti-pattern-5-memory-leaks","Anti-Pattern 5 - Memory leaks",[17,13970,13971],{},[4802,13972,13849],{},[4907,13974,13975],{},[4826,13976,13977],{},"App slows after navigation",[17,13979,13980],{},[4802,13981,13862],{},[4907,13983,13984],{},[4826,13985,13986],{},"Always remove listeners\u002Ftimers in destroy",[12,13988,13990],{"id":13989},"upgrade-compatibility-strategy","Upgrade Compatibility Strategy",[17,13992,13993],{},"PCF breaks most often due to:",[4907,13995,13996,13999,14002,14005],{},[4826,13997,13998],{},"Platform runtime updates",[4826,14000,14001],{},"Dependency updates (React libraries)",[4826,14003,14004],{},"Changes in metadata\u002Ffields\u002Fviews",[4826,14006,14007],{},"Browser changes",[5511,14009,14011],{"id":14010},"compatibility-rules","Compatibility Rules",[4907,14013,14014,14017],{},[4826,14015,14016],{},"Version controls strictly",[4826,14018,14019,14020],{},"Maintain a compatibility matrix\n",[4907,14021,14022,14025,14028],{},[4826,14023,14024],{},"Platform version vs control version",[4826,14026,14027],{},"Browser version",[4826,14029,14030],{},"App type (model-driven\u002Fcanvas)",[5511,14032,14034],{"id":14033},"release-strategy","Release strategy",[4907,14036,14037,14040,14043,14051],{},[4826,14038,14039],{},"Keep PCF in its own solution",[4826,14041,14042],{},"Promote via ALM pipeline like code",[4826,14044,14045,14046],{},"Use staged rollout\n",[4907,14047,14048],{},[4826,14049,14050],{},"Dev -> Test -> UAT -> Prod",[4826,14052,14053,14054],{},"Maintain rollback\n",[4907,14055,14056],{},[4826,14057,14058],{},"Re-import previous managed version",[5511,14060,14062],{"id":14061},"dependency-governance","Dependency Governance",[4907,14064,14065,14068,14071,14074],{},[4826,14066,14067],{},"Pin dependency versions",[4826,14069,14070],{},"Avoid frequent dependency churn",[4826,14072,14073],{},"Prefer stable, well supported libs",[4826,14075,14076],{},"Test in UAT with realistic data and devices",[5511,14078,14080],{"id":14079},"regression-testing-pattern","Regression Testing Pattern",[17,14082,14083],{},"Test each PCF release for:",[4907,14085,14086,14089,14092,14095,14098],{},[4826,14087,14088],{},"Form load time impact",[4826,14090,14091],{},"Keyboard accessibility",[4826,14093,14094],{},"Mobile behavior",[4826,14096,14097],{},"Dataset paging and sorting",[4826,14099,14100],{},"Error handling (offline\u002Fnetwork slow)",[5511,14102,5183],{"id":4883},[17,14104,14105],{},[4802,14106,4891],{},[4907,14108,14109,14112,14115],{},[4826,14110,14111],{},"Govern which controls can be deployed",[4826,14113,14114],{},"Ensure rollback readiness (for managed solution)",[4826,14116,14117],{},"Monitor performance regressions after release",[17,14119,14120],{},[4802,14121,4925],{},[4907,14123,14124,14127,14141],{},[4826,14125,14126],{},"Decide which PCF is justified",[4826,14128,14129,14130],{},"Enforce standards:\n",[4907,14131,14132,14135,14138],{},[4826,14133,14134],{},"versioning",[4826,14136,14137],{},"testing",[4826,14139,14140],{},"rollouts",[4826,14142,14143],{},"Prevent PCF everywhere UI fragmentation",[17,14145,14146],{},[4802,14147,4901],{},[4907,14149,14150,14153,14156],{},[4826,14151,14152],{},"Keep controls small and composable",[4826,14154,14155],{},"Optimize rendering and avoid N+1 calls",[4826,14157,14158],{},"Design for maintainability and backward compatibility",[17,14160,14161],{},[4802,14162,4947],{},[4907,14164,14165,14168],{},[4826,14166,14167],{},"Needs consistency  and speed",[4826,14169,14170],{},"Any lag or instability drives adoption failure quickly",[12,14172,5003],{"id":5002},[17,14174,14175],{},"PCF is powerful when used intentionally",[4907,14177,14178,14181,14184,14187,14190],{},[4826,14179,14180],{},"Use it for UI extension, not business logic",[4826,14182,14183],{},"Treat updateView() as a high-frequency function",[4826,14185,14186],{},"Prefer server side logic of truth",[4826,14188,14189],{},"Control dependencies and versioning like any enterprise front-end",[4826,14191,14192],{},"Use staged rollouts with rollback plans",{"title":68,"searchDepth":83,"depth":83,"links":14194},[14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206],{"id":14,"depth":83,"text":15},{"id":13310,"depth":83,"text":13311},{"id":13350,"depth":83,"text":13351},{"id":13388,"depth":83,"text":13389},{"id":13454,"depth":83,"text":13455},{"id":13586,"depth":83,"text":13587},{"id":13666,"depth":83,"text":13667},{"id":13789,"depth":83,"text":13790},{"id":13810,"depth":83,"text":13811},{"id":13839,"depth":83,"text":13840},{"id":13989,"depth":83,"text":13990},{"id":5002,"depth":83,"text":5003},{"label":14208,"key":14209},"Extensibility Architecture","extensibility-architecture","A practical enterprise architecture guide for designing, governing, and maintaining Pro-code extensions using Power Apps Component Framework (PCF).","\u002Fimages\u002Fpcf-architecture.jpg","PCF architecture showing lifecycle, field and dataset controls, and enterprise governance",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpcf-architechture",{"title":14216,"description":14217},"PCF Architecture Guide – Pro Code Extensions in Power Platform","Learn how to design and manage Power Apps Component Framework (PCF) controls including lifecycle management, field vs dataset controls, performance considerations, and enterprise maintainability strategies.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F13.pcf-architechture","Architecture patterns and governance principles for building scalable, maintainable, and enterprise-ready PCF controls in Power Platform solutions.",[122,14221,14222,4873,14223,10455],"pcf","pro-code","maintainability","-QLgzKcu1EFFiTjH5NVPUjYnidYd7ew7iderdFnUxbA",{"id":14226,"title":14227,"author":4793,"body":14228,"canonical":102,"category":14662,"date":8527,"description":14665,"draft":108,"extension":109,"featured":110,"image":14666,"imageAlt":14667,"meta":14668,"navigation":108,"order":8971,"path":14669,"seo":14670,"stem":14673,"summary":14674,"tags":14675,"updated":8527,"__hash__":14677},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F14.power-automate-cloud-flow-architecture.md","Power Automate Cloud Flow Architecture",{"type":9,"value":14229,"toc":14653},[14230,14232,14235,14252,14255,14269,14274,14278,14282,14288,14293,14304,14308,14312,14315,14323,14327,14330,14341,14345,14348,14356,14362,14367,14375,14380,14384,14390,14394,14398,14409,14413,14418,14426,14432,14437,14441,14445,14453,14457,14462,14470,14476,14481,14492,14497,14508,14512,14518,14523,14534,14538,14541,14549,14554,14558,14562,14580,14584,14590,14595,14606,14610,14616,14620,14628,14632,14651],[12,14231,15],{"id":14},[17,14233,14234],{},"Power automate is a workflow orchestration platform, not a transactional engine.\nIt excels at:",[4907,14236,14237,14240,14243,14246,14249],{},[4826,14238,14239],{},"Event-driven orchestration",[4826,14241,14242],{},"Cross-system integration",[4826,14244,14245],{},"Human-workflows (approvals)",[4826,14247,14248],{},"Notifications",[4826,14250,14251],{},"Conditional routing",[17,14253,14254],{},"It struggles when used for:",[4907,14256,14257,14260,14263,14266],{},[4826,14258,14259],{},"High volume transactional integrity",[4826,14261,14262],{},"Exactly-once enforcement without design",[4826,14264,14265],{},"Bulk ETL",[4826,14267,14268],{},"Tight synchronous coupling",[17,14270,14271],{},[5529,14272,14273],{},"Most Power Automate failures are caused by using it as a rule engine instead of an orchestrator.",[12,14275,14277],{"id":14276},"flow-execution-model","Flow Execution Model",[5511,14279,14281],{"id":14280},"high-level-execution-flow","High Level Execution Flow",[63,14283,14286],{"className":14284,"code":14285,"language":5090},[5088],"Trigger Fires\n  |\n  |- Instance created\n  |- Inputs captured (immutable)\n  |\nActions\n  |\n  |- Retries (per action)\n  |- Concurrency (per trigger)\n  |\nFlow completes (success\u002Ffailure\u002Fcancelled)\n",[70,14287,14285],{"__ignoreMap":68},[17,14289,14290],{},[4802,14291,14292],{},"Key reality",[4907,14294,14295,14298,14301],{},[4826,14296,14297],{},"Each trigger = independent execution",[4826,14299,14300],{},"Retries can cause duplicate side effects",[4826,14302,14303],{},"Concurrency multiplies risk without idempotency",[12,14305,14307],{"id":14306},"concurrency-control","Concurrency Control",[5511,14309,14311],{"id":14310},"trigger-concurrency-settings","Trigger Concurrency Settings",[17,14313,14314],{},"By default:",[4907,14316,14317,14320],{},[4826,14318,14319],{},"Multiple flow instance can run in parallel",[4826,14321,14322],{},"Order is not guranteed",[5511,14324,14326],{"id":14325},"when-to-enable-concurrency-control","When to Enable Concurrency Control",[17,14328,14329],{},"Enable concurrency control when:",[4907,14331,14332,14335,14338],{},[4826,14333,14334],{},"Order matters",[4826,14336,14337],{},"Records share a business key",[4826,14339,14340],{},"Downstream system cannot handle parallel updates",[5511,14342,14344],{"id":14343},"concurrency-template-safe-pattern","Concurrency template (Safe Pattern)",[17,14346,14347],{},"Trigger settings:",[4907,14349,14350,14353],{},[4826,14351,14352],{},"Enable concurrency control",[4826,14354,14355],{},"Degree of parallelism: 1",[63,14357,14360],{"className":14358,"code":14359,"language":5090},[5088],"Trigger\n  |- Concurrency\n        |- Degree: 1\n\n",[70,14361,14359],{"__ignoreMap":68},[17,14363,14364],{},[4802,14365,14366],{},"Trade-off",[4907,14368,14369,14372],{},[4826,14370,14371],{},"Lower throughput",[4826,14373,14374],{},"Higher correctness",[17,14376,14377],{},[5529,14378,14379],{},"Correctness beats speed for business-critical workflows",[5511,14381,14383],{"id":14382},"common-concurrency-failure-pattern","Common Concurrency Failure Pattern",[63,14385,14388],{"className":14386,"code":14387,"language":5090},[5088],"Trigger fires 10 times\n    |\n    |- 10 Parallel flows\n    |\n    |- All update same record\n              |\n        Race conditions\u002Foverwrite\n",[70,14389,14387],{"__ignoreMap":68},[12,14391,14393],{"id":14392},"retry-behavior","Retry Behavior",[5511,14395,14397],{"id":14396},"default-retry-reality","Default Retry Reality",[4907,14399,14400,14403,14406],{},[4826,14401,14402],{},"Retries per action",[4826,14404,14405],{},"Retry can re-execute side effects",[4826,14407,14408],{},"Retry + concurrency = duplication risk",[5511,14410,14412],{"id":14411},"retry-template-controlled-explicit","Retry Template (Controlled & Explicit)",[17,14414,14415],{},[4802,14416,14417],{},"Recomended",[4907,14419,14420,14423],{},[4826,14421,14422],{},"Reduce retries on non-idempotent actions",[4826,14424,14425],{},"Handle retries centrally",[63,14427,14430],{"className":14428,"code":14429,"language":5090},[5088],"Action (HTTP\u002FDataverse)\n |- Retry policy: Fixed\u002FExponential\n |- Count: small\n |- Interval: increasing\n\n",[70,14431,14429],{"__ignoreMap":68},[17,14433,14434],{},[5529,14435,14436],{},"Retries are safe only if action is idempotent",[12,14438,14440],{"id":14439},"exactly-once-processing-patterns","Exactly-Once Processing Patterns",[5511,14442,14444],{"id":14443},"why-exactly-once-is-hard","Why \"Exactly-Once\" Is Hard",[4907,14446,14447,14450],{},[4826,14448,14449],{},"Power Automate gurantees at least once execution",[4826,14451,14452],{},"Network failures and retries break native designs",[5511,14454,14456],{"id":14455},"pattern-1-idempotency-key","Pattern 1 - Idempotency Key",[17,14458,14459],{},[4802,14460,14461],{},"Concept",[4907,14463,14464,14467],{},[4826,14465,14466],{},"Every event carries a unique business ID",[4826,14468,14469],{},"Flow checks if it was already processed",[63,14471,14474],{"className":14472,"code":14473,"language":5090},[5088],"Event\n  |- ExternalRequestId\n\n",[70,14475,14473],{"__ignoreMap":68},[17,14477,14478],{},[4802,14479,14480],{},"Flow Logic",[4823,14482,14483,14486,14489],{},[4826,14484,14485],{},"Look Up record by ExternalRequestId",[4826,14487,14488],{},"If exists -> exit",[4826,14490,14491],{},"If not -> process and store ID",[17,14493,14494],{},[4802,14495,14496],{},"Where to store",[4907,14498,14499,14502,14505],{},[4826,14500,14501],{},"Dataverse table",[4826,14503,14504],{},"Alternate key",[4826,14506,14507],{},"Dedicated \"ProcessedEvents\" table",[5511,14509,14511],{"id":14510},"pattern-2-state-machine-durable-pattern","Pattern 2- State Machine (Durable Pattern)",[63,14513,14516],{"className":14514,"code":14515,"language":5090},[5088],"Status = New\n  |\nStatus = Processing\n  |\nStatus = Completed\u002FFailed\n\n",[70,14517,14515],{"__ignoreMap":68},[17,14519,14520],{},[4802,14521,14522],{},"Benifits",[4907,14524,14525,14528,14531],{},[4826,14526,14527],{},"Detect stuck executions",[4826,14529,14530],{},"Enable retries safely",[4826,14532,14533],{},"Provide audit trail",[5511,14535,14537],{"id":14536},"pattern-3-server-side-enforcement","Pattern 3 - Server side Enforcement",[17,14539,14540],{},"For crictical invariants:",[4907,14542,14543,14546],{},[4826,14544,14545],{},"Use Dataverse plugins or Custom APIs",[4826,14547,14548],{},"Let Power Automate orchestrate, not enforce",[17,14550,14551],{},[5529,14552,14553],{},"Exactly-once business truth belongs on the server, not in flows",[12,14555,14557],{"id":14556},"high-volumen-event-processing-designs","High-Volumen Event Processing Designs",[5511,14559,14561],{"id":14560},"what-breaks-at-scale","What Breaks at Scale",[4907,14563,14564,14567,14574,14577],{},[4826,14565,14566],{},"One flow per record, onbounded",[4826,14568,14569,14570,14573],{},"Nested ",[4802,14571,14572],{},"Apply to each"," over large sets",[4826,14575,14576],{},"Power Automate as bulk processor",[4826,14578,14579],{},"Synchronous Dataverse updates under load",[5511,14581,14583],{"id":14582},"scalable-pattern-a-event-queue-and-worker","Scalable Pattern A - Event Queue and Worker",[63,14585,14588],{"className":14586,"code":14587,"language":5090},[5088],"Dataverse Event\n  |\nQueue\u002F Topic\n  |\nWorker (Flow\u002FAzure Function)\n  |\n  |- Batch processing\n  |- Idempotency\n  |- Controlled concurrency\n",[70,14589,14587],{"__ignoreMap":68},[17,14591,14592],{},[4802,14593,14594],{},"Why this works",[4907,14596,14597,14600,14603],{},[4826,14598,14599],{},"Backpressure handling",[4826,14601,14602],{},"Retry isolation",[4826,14604,14605],{},"Scale without chaos",[5511,14607,14609],{"id":14608},"scalable-pattern-b-micro-batching","Scalable Pattern B - Micro-Batching",[63,14611,14614],{"className":14612,"code":14613,"language":5090},[5088],"Events\n  |- Collected for N seconds\n      |- Process batch (10-100)\n\n",[70,14615,14613],{"__ignoreMap":68},[17,14617,14618],{},[4802,14619,13398],{},[4907,14621,14622,14625],{},[4826,14623,14624],{},"Throughput matters",[4826,14626,14627],{},"Latency can be seconds, not milliseconds",[5511,14629,14631],{"id":14630},"scalable-pattern-c-hybrid-flow-azure","Scalable Pattern C- Hybrid (Flow + Azure)",[4907,14633,14634,14637],{},[4826,14635,14636],{},"Power Automate handles triggers, approvals, notifications",[4826,14638,14639,14640],{},"Azure Functions\u002FLogic Apps handle:\n",[4907,14641,14642,14645,14648],{},[4826,14643,14644],{},"Heavy compute",[4826,14646,14647],{},"Bulk writes",[4826,14649,14650],{},"Complex retries",[12,14652],{"id":68},{"title":68,"searchDepth":83,"depth":83,"links":14654},[14655,14656,14657,14658,14659,14660,14661],{"id":14,"depth":83,"text":15},{"id":14276,"depth":83,"text":14277},{"id":14306,"depth":83,"text":14307},{"id":14392,"depth":83,"text":14393},{"id":14439,"depth":83,"text":14440},{"id":14556,"depth":83,"text":14557},{"id":68,"depth":83,"text":68},{"label":14663,"key":14664},"Automation Architecture","automation-architecture","A practical enterprise architecture guide to designing resilient, scalable, and governable Power Automate cloud flows in Microsoft Power Platform.","\u002Fimages\u002Fpower-automate-cloud-flow-architecture.jpg","Power Automate cloud flow enterprise architecture diagram",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook\u002Fpower-automate-cloud-flow-architecture",{"title":14671,"description":14672},"Power Automate Cloud Flow Architecture Guide","Learn enterprise-grade design patterns for Power Automate cloud flows including error handling, performance optimization, ALM, governance, and integration strategies.","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002F14.power-automate-cloud-flow-architecture","Architecture patterns and decision framework for designing scalable and maintainable Power Automate cloud flows.",[122,5033,14676,4873,10454],"cloud-flow","AYytPpTyrzfQxHKH85sFHIQOkoQKyRxMyvLwR35FDjo",{"id":14679,"title":14680,"author":4793,"body":14681,"canonical":102,"category":14691,"date":5021,"description":14694,"draft":110,"extension":109,"featured":110,"image":4880,"imageAlt":14695,"meta":14696,"navigation":108,"order":76,"path":14697,"seo":14698,"stem":14700,"summary":14701,"tags":14702,"updated":14703,"__hash__":14704},"blog\u002Fblog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002Findex.md","Power Platform Architecture Handbook",{"type":9,"value":14682,"toc":14689},[14683,14686],[17,14684,14685],{},"This handbook is a structured, sequential guide to architecting solutions on Microsoft Power Platform.\nIt is written from a solution-architect perspective: every chapter focuses on the decisions that matter\nin production — not just what the features are, but when to use them, how they fail, and what to do about it.",[17,14687,14688],{},"Work through the parts in order, or jump straight to the topic you need.",{"title":68,"searchDepth":83,"depth":83,"links":14690},[],{"label":14692,"key":14693},"Architecture Handbook","architecture-handbook","A free, structured handbook covering Power Platform and Dataverse architecture end to end — security, environments, data modeling, business logic, integration patterns, and app architecture.","Overview diagram of Power Platform architecture layers",{},"\u002Fblog\u002Fbusiness-apps\u002Farchitecture\u002Fhandbook",{"title":14699,"description":14694},"Power Platform Architecture Handbook — Free Structured Guide","blog\u002F01.business-apps\u002F03.architecture\u002F01.handbook\u002Findex","A structured, end-to-end handbook on Power Platform and Dataverse architecture.",[122,120,4873],"2026-07-08","dxwIJcahf_eHLPlpl_ZQpneLOmmku9PVanXlaVtTOwo",{"id":14706,"title":14707,"author":4793,"body":14708,"canonical":102,"category":14712,"date":8527,"description":14715,"draft":110,"extension":109,"featured":110,"image":1192,"imageAlt":14707,"meta":14716,"navigation":108,"order":102,"path":14717,"seo":14718,"stem":14721,"summary":14722,"tags":14723,"updated":8527,"__hash__":14724},"blog\u002Fblog\u002Findex.md","Platform Decoded",{"type":9,"value":14709,"toc":14710},[],{"title":68,"searchDepth":83,"depth":83,"links":14711},[],{"label":14713,"key":14714},"Platform Decoded Blogs","platform-decoded-blogs","Practical engineering notes on web development, APIs, and system design.",{},"\u002Fblog",{"title":14719,"description":14720},"Platform Decoded Blog","Practical guides and architectural breakdowns on modern web development and system design.","blog\u002Findex","Engineering notes on web development & system design.",[122],"16RtVdZt1FrwA9yc6Hn92v089-lJKPjzrHLpPCp7sww",1783496971494]