workspace-architect 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/.env.example +1 -0
  2. package/.gitattributes +1 -0
  3. package/.github/workflows/manual-publish.yml +36 -0
  4. package/.github/workflows/sync-and-publish.yml +58 -0
  5. package/.release-it.json +20 -0
  6. package/CHANGELOG.md +43 -0
  7. package/README.md +62 -0
  8. package/assets/chatmodes/4.1-Beast.chatmode.md +152 -0
  9. package/assets/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
  10. package/assets/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
  11. package/assets/chatmodes/accessibility.chatmode.md +298 -0
  12. package/assets/chatmodes/address-comments.chatmode.md +59 -0
  13. package/assets/chatmodes/aem-frontend-specialist.chatmode.md +385 -0
  14. package/assets/chatmodes/api-architect.chatmode.md +40 -0
  15. package/assets/chatmodes/atlassian-requirements-to-jira.chatmode.md +444 -0
  16. package/assets/chatmodes/azure-logic-apps-expert.chatmode.md +100 -0
  17. package/assets/chatmodes/azure-principal-architect.chatmode.md +58 -0
  18. package/assets/chatmodes/azure-saas-architect.chatmode.md +118 -0
  19. package/assets/chatmodes/azure-verified-modules-bicep.chatmode.md +44 -0
  20. package/assets/chatmodes/azure-verified-modules-terraform.chatmode.md +58 -0
  21. package/assets/chatmodes/bicep-implement.chatmode.md +40 -0
  22. package/assets/chatmodes/bicep-plan.chatmode.md +112 -0
  23. package/assets/chatmodes/blueprint-mode-codex.chatmode.md +110 -0
  24. package/assets/chatmodes/blueprint-mode.chatmode.md +171 -0
  25. package/assets/chatmodes/clojure-interactive-programming.chatmode.md +174 -0
  26. package/assets/chatmodes/code-tour.chatmode.md +205 -0
  27. package/assets/chatmodes/critical-thinking.chatmode.md +23 -0
  28. package/assets/chatmodes/csharp-dotnet-janitor.chatmode.md +83 -0
  29. package/assets/chatmodes/csharp-mcp-expert.chatmode.md +69 -0
  30. package/assets/chatmodes/debug.chatmode.md +79 -0
  31. package/assets/chatmodes/declarative-agents-architect.chatmode.md +76 -0
  32. package/assets/chatmodes/demonstrate-understanding.chatmode.md +60 -0
  33. package/assets/chatmodes/dotnet-upgrade.chatmode.md +222 -0
  34. package/assets/chatmodes/drupal-expert.chatmode.md +687 -0
  35. package/assets/chatmodes/electron-angular-native.chatmode.md +285 -0
  36. package/assets/chatmodes/expert-cpp-software-engineer.chatmode.md +27 -0
  37. package/assets/chatmodes/expert-dotnet-software-engineer.chatmode.md +22 -0
  38. package/assets/chatmodes/expert-nextjs-developer.chatmode.md +477 -0
  39. package/assets/chatmodes/expert-react-frontend-engineer.chatmode.md +738 -0
  40. package/assets/chatmodes/gilfoyle.chatmode.md +66 -0
  41. package/assets/chatmodes/go-mcp-expert.chatmode.md +122 -0
  42. package/assets/chatmodes/gpt-5-beast-mode.chatmode.md +109 -0
  43. package/assets/chatmodes/hlbpa.chatmode.md +232 -0
  44. package/assets/chatmodes/implementation-plan.chatmode.md +159 -0
  45. package/assets/chatmodes/janitor.chatmode.md +89 -0
  46. package/assets/chatmodes/java-mcp-expert.chatmode.md +325 -0
  47. package/assets/chatmodes/kotlin-mcp-expert.chatmode.md +181 -0
  48. package/assets/chatmodes/kusto-assistant.chatmode.md +143 -0
  49. package/assets/chatmodes/laravel-expert-agent.chatmode.md +628 -0
  50. package/assets/chatmodes/mentor.chatmode.md +32 -0
  51. package/assets/chatmodes/meta-agentic-project-scaffold.chatmode.md +15 -0
  52. package/assets/chatmodes/microsoft-agent-framework-dotnet.chatmode.md +62 -0
  53. package/assets/chatmodes/microsoft-agent-framework-python.chatmode.md +62 -0
  54. package/assets/chatmodes/microsoft-study-mode.chatmode.md +32 -0
  55. package/assets/chatmodes/microsoft_learn_contributor.chatmode.md +388 -0
  56. package/assets/chatmodes/ms-sql-dba.chatmode.md +25 -0
  57. package/assets/chatmodes/php-mcp-expert.chatmode.md +498 -0
  58. package/assets/chatmodes/pimcore-expert.chatmode.md +869 -0
  59. package/assets/chatmodes/plan.chatmode.md +114 -0
  60. package/assets/chatmodes/planner.chatmode.md +14 -0
  61. package/assets/chatmodes/playwright-tester.chatmode.md +13 -0
  62. package/assets/chatmodes/postgresql-dba.chatmode.md +17 -0
  63. package/assets/chatmodes/power-bi-data-modeling-expert.chatmode.md +319 -0
  64. package/assets/chatmodes/power-bi-dax-expert.chatmode.md +334 -0
  65. package/assets/chatmodes/power-bi-performance-expert.chatmode.md +533 -0
  66. package/assets/chatmodes/power-bi-visualization-expert.chatmode.md +549 -0
  67. package/assets/chatmodes/power-platform-expert.chatmode.md +116 -0
  68. package/assets/chatmodes/power-platform-mcp-integration-expert.chatmode.md +149 -0
  69. package/assets/chatmodes/prd.chatmode.md +201 -0
  70. package/assets/chatmodes/principal-software-engineer.chatmode.md +41 -0
  71. package/assets/chatmodes/prompt-builder.chatmode.md +352 -0
  72. package/assets/chatmodes/prompt-engineer.chatmode.md +72 -0
  73. package/assets/chatmodes/python-mcp-expert.chatmode.md +99 -0
  74. package/assets/chatmodes/refine-issue.chatmode.md +34 -0
  75. package/assets/chatmodes/research-technical-spike.chatmode.md +169 -0
  76. package/assets/chatmodes/ruby-mcp-expert.chatmode.md +346 -0
  77. package/assets/chatmodes/rust-gpt-4.1-beast-mode.chatmode.md +197 -0
  78. package/assets/chatmodes/rust-mcp-expert.chatmode.md +465 -0
  79. package/assets/chatmodes/search-ai-optimization-expert.chatmode.md +227 -0
  80. package/assets/chatmodes/semantic-kernel-dotnet.chatmode.md +31 -0
  81. package/assets/chatmodes/semantic-kernel-python.chatmode.md +28 -0
  82. package/assets/chatmodes/shopify-expert.chatmode.md +681 -0
  83. package/assets/chatmodes/simple-app-idea-generator.chatmode.md +134 -0
  84. package/assets/chatmodes/software-engineer-agent-v1.chatmode.md +164 -0
  85. package/assets/chatmodes/specification.chatmode.md +127 -0
  86. package/assets/chatmodes/swift-mcp-expert.chatmode.md +240 -0
  87. package/assets/chatmodes/task-planner.chatmode.md +374 -0
  88. package/assets/chatmodes/task-researcher.chatmode.md +254 -0
  89. package/assets/chatmodes/tdd-green.chatmode.md +59 -0
  90. package/assets/chatmodes/tdd-red.chatmode.md +59 -0
  91. package/assets/chatmodes/tdd-refactor.chatmode.md +84 -0
  92. package/assets/chatmodes/tech-debt-remediation-plan.chatmode.md +49 -0
  93. package/assets/chatmodes/terraform-azure-implement.chatmode.md +104 -0
  94. package/assets/chatmodes/terraform-azure-planning.chatmode.md +157 -0
  95. package/assets/chatmodes/typescript-mcp-expert.chatmode.md +91 -0
  96. package/assets/chatmodes/voidbeast-gpt41enhanced.chatmode.md +230 -0
  97. package/assets/chatmodes/wg-code-alchemist.chatmode.md +61 -0
  98. package/assets/chatmodes/wg-code-sentinel.chatmode.md +55 -0
  99. package/assets/collections/ai-prompt-engineering.json +18 -0
  100. package/assets/collections/angular-development.json +7 -0
  101. package/assets/collections/azure-cloud-architect.json +29 -0
  102. package/assets/collections/cpp-development.json +6 -0
  103. package/assets/collections/database-administration.json +8 -0
  104. package/assets/collections/devops-sre.json +11 -0
  105. package/assets/collections/dotnet-development.json +22 -0
  106. package/assets/collections/general-productivity.json +9 -0
  107. package/assets/collections/go-development.json +7 -0
  108. package/assets/collections/java-spring-developer.json +26 -0
  109. package/assets/collections/learning-mentoring.json +10 -0
  110. package/assets/collections/legacy-migration.json +4 -0
  111. package/assets/collections/mcp-specialist.json +41 -0
  112. package/assets/collections/mobile-development.json +4 -0
  113. package/assets/collections/php-cms-development.json +11 -0
  114. package/assets/collections/power-platform-specialist.json +31 -0
  115. package/assets/collections/project-management.json +12 -0
  116. package/assets/collections/python-development.json +13 -0
  117. package/assets/collections/quality-assurance.json +13 -0
  118. package/assets/collections/ruby-development.json +9 -0
  119. package/assets/collections/rust-development.json +10 -0
  120. package/assets/collections/security-specialist.json +8 -0
  121. package/assets/collections/software-architect.json +25 -0
  122. package/assets/collections/technical-writing.json +9 -0
  123. package/assets/collections/web-frontend-development.json +14 -0
  124. package/assets/instructions/a11y.instructions.md +369 -0
  125. package/assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md +867 -0
  126. package/assets/instructions/angular.instructions.md +104 -0
  127. package/assets/instructions/ansible.instructions.md +88 -0
  128. package/assets/instructions/aspnet-rest-apis.instructions.md +110 -0
  129. package/assets/instructions/astro.instructions.md +182 -0
  130. package/assets/instructions/azure-devops-pipelines.instructions.md +185 -0
  131. package/assets/instructions/azure-functions-typescript.instructions.md +14 -0
  132. package/assets/instructions/azure-logic-apps-power-automate.instructions.md +1943 -0
  133. package/assets/instructions/azure-verified-modules-terraform.instructions.md +229 -0
  134. package/assets/instructions/bicep-code-best-practices.instructions.md +54 -0
  135. package/assets/instructions/blazor.instructions.md +77 -0
  136. package/assets/instructions/clojure.instructions.md +349 -0
  137. package/assets/instructions/cmake-vcpkg.instructions.md +10 -0
  138. package/assets/instructions/codexer.instructions.md +428 -0
  139. package/assets/instructions/coldfusion-cfc.instructions.md +30 -0
  140. package/assets/instructions/coldfusion-cfm.instructions.md +28 -0
  141. package/assets/instructions/collections.instructions.md +54 -0
  142. package/assets/instructions/containerization-docker-best-practices.instructions.md +681 -0
  143. package/assets/instructions/convert-jpa-to-spring-data-cosmos.instructions.md +949 -0
  144. package/assets/instructions/copilot-thought-logging.instructions.md +62 -0
  145. package/assets/instructions/csharp-ja.instructions.md +114 -0
  146. package/assets/instructions/csharp-ko.instructions.md +77 -0
  147. package/assets/instructions/csharp-mcp-server.instructions.md +95 -0
  148. package/assets/instructions/csharp.instructions.md +114 -0
  149. package/assets/instructions/dart-n-flutter.instructions.md +447 -0
  150. package/assets/instructions/declarative-agents-microsoft365.instructions.md +316 -0
  151. package/assets/instructions/devbox-image-definition.instructions.md +302 -0
  152. package/assets/instructions/devops-core-principles.instructions.md +167 -0
  153. package/assets/instructions/dotnet-architecture-good-practices.instructions.md +279 -0
  154. package/assets/instructions/dotnet-framework.instructions.md +113 -0
  155. package/assets/instructions/dotnet-maui-9-to-dotnet-maui-10-upgrade.instructions.md +1922 -0
  156. package/assets/instructions/dotnet-maui.instructions.md +69 -0
  157. package/assets/instructions/dotnet-upgrade.instructions.md +287 -0
  158. package/assets/instructions/dotnet-wpf.instructions.md +79 -0
  159. package/assets/instructions/genaiscript.instructions.md +21 -0
  160. package/assets/instructions/generate-modern-terraform-code-for-azure.instructions.md +82 -0
  161. package/assets/instructions/gilfoyle-code-review.instructions.md +114 -0
  162. package/assets/instructions/github-actions-ci-cd-best-practices.instructions.md +607 -0
  163. package/assets/instructions/go-mcp-server.instructions.md +346 -0
  164. package/assets/instructions/go.instructions.md +373 -0
  165. package/assets/instructions/instructions.instructions.md +256 -0
  166. package/assets/instructions/java-11-to-java-17-upgrade.instructions.md +793 -0
  167. package/assets/instructions/java-17-to-java-21-upgrade.instructions.md +464 -0
  168. package/assets/instructions/java-21-to-java-25-upgrade.instructions.md +311 -0
  169. package/assets/instructions/java-mcp-server.instructions.md +553 -0
  170. package/assets/instructions/java.instructions.md +81 -0
  171. package/assets/instructions/joyride-user-project.instructions.md +206 -0
  172. package/assets/instructions/joyride-workspace-automation.instructions.md +46 -0
  173. package/assets/instructions/kotlin-mcp-server.instructions.md +481 -0
  174. package/assets/instructions/kubernetes-deployment-best-practices.instructions.md +307 -0
  175. package/assets/instructions/langchain-python.instructions.md +229 -0
  176. package/assets/instructions/localization.instructions.md +39 -0
  177. package/assets/instructions/makefile.instructions.md +410 -0
  178. package/assets/instructions/markdown.instructions.md +52 -0
  179. package/assets/instructions/memory-bank.instructions.md +299 -0
  180. package/assets/instructions/mongo-dba.instructions.md +25 -0
  181. package/assets/instructions/ms-sql-dba.instructions.md +25 -0
  182. package/assets/instructions/nestjs.instructions.md +406 -0
  183. package/assets/instructions/nextjs-tailwind.instructions.md +72 -0
  184. package/assets/instructions/nextjs.instructions.md +143 -0
  185. package/assets/instructions/nodejs-javascript-vitest.instructions.md +30 -0
  186. package/assets/instructions/object-calisthenics.instructions.md +302 -0
  187. package/assets/instructions/oqtane.instructions.md +86 -0
  188. package/assets/instructions/performance-optimization.instructions.md +420 -0
  189. package/assets/instructions/php-mcp-server.instructions.md +809 -0
  190. package/assets/instructions/playwright-dotnet.instructions.md +101 -0
  191. package/assets/instructions/playwright-python.instructions.md +62 -0
  192. package/assets/instructions/playwright-typescript.instructions.md +86 -0
  193. package/assets/instructions/power-apps-canvas-yaml.instructions.md +827 -0
  194. package/assets/instructions/power-apps-code-apps.instructions.md +601 -0
  195. package/assets/instructions/power-bi-custom-visuals-development.instructions.md +810 -0
  196. package/assets/instructions/power-bi-data-modeling-best-practices.instructions.md +639 -0
  197. package/assets/instructions/power-bi-dax-best-practices.instructions.md +795 -0
  198. package/assets/instructions/power-bi-devops-alm-best-practices.instructions.md +623 -0
  199. package/assets/instructions/power-bi-report-design-best-practices.instructions.md +752 -0
  200. package/assets/instructions/power-bi-security-rls-best-practices.instructions.md +504 -0
  201. package/assets/instructions/power-platform-connector.instructions.md +430 -0
  202. package/assets/instructions/power-platform-mcp-development.instructions.md +88 -0
  203. package/assets/instructions/powershell-pester-5.instructions.md +197 -0
  204. package/assets/instructions/powershell.instructions.md +356 -0
  205. package/assets/instructions/prompt.instructions.md +73 -0
  206. package/assets/instructions/python-mcp-server.instructions.md +204 -0
  207. package/assets/instructions/python.instructions.md +56 -0
  208. package/assets/instructions/quarkus-mcp-server-sse.instructions.md +49 -0
  209. package/assets/instructions/quarkus.instructions.md +98 -0
  210. package/assets/instructions/r.instructions.md +116 -0
  211. package/assets/instructions/reactjs.instructions.md +162 -0
  212. package/assets/instructions/ruby-mcp-server.instructions.md +629 -0
  213. package/assets/instructions/ruby-on-rails.instructions.md +124 -0
  214. package/assets/instructions/rust-mcp-server.instructions.md +715 -0
  215. package/assets/instructions/rust.instructions.md +135 -0
  216. package/assets/instructions/security-and-owasp.instructions.md +51 -0
  217. package/assets/instructions/self-explanatory-code-commenting.instructions.md +162 -0
  218. package/assets/instructions/shell.instructions.md +132 -0
  219. package/assets/instructions/spec-driven-workflow-v1.instructions.md +323 -0
  220. package/assets/instructions/springboot.instructions.md +68 -0
  221. package/assets/instructions/sql-sp-generation.instructions.md +74 -0
  222. package/assets/instructions/svelte.instructions.md +161 -0
  223. package/assets/instructions/swift-mcp-server.instructions.md +498 -0
  224. package/assets/instructions/taming-copilot.instructions.md +40 -0
  225. package/assets/instructions/tanstack-start-shadcn-tailwind.instructions.md +212 -0
  226. package/assets/instructions/task-implementation.instructions.md +190 -0
  227. package/assets/instructions/tasksync.instructions.md +352 -0
  228. package/assets/instructions/terraform-azure.instructions.md +254 -0
  229. package/assets/instructions/terraform-sap-btp.instructions.md +195 -0
  230. package/assets/instructions/terraform.instructions.md +113 -0
  231. package/assets/instructions/typescript-5-es2022.instructions.md +114 -0
  232. package/assets/instructions/typescript-mcp-server.instructions.md +228 -0
  233. package/assets/instructions/update-code-from-shorthand.instructions.md +130 -0
  234. package/assets/instructions/vuejs3.instructions.md +153 -0
  235. package/assets/instructions/wordpress.instructions.md +186 -0
  236. package/assets/prompts/add-educational-comments.prompt.md +129 -0
  237. package/assets/prompts/ai-prompt-engineering-safety-review.prompt.md +230 -0
  238. package/assets/prompts/architecture-blueprint-generator.prompt.md +322 -0
  239. package/assets/prompts/aspnet-minimal-api-openapi.prompt.md +42 -0
  240. package/assets/prompts/az-cost-optimize.prompt.md +305 -0
  241. package/assets/prompts/azure-resource-health-diagnose.prompt.md +290 -0
  242. package/assets/prompts/boost-prompt.prompt.md +25 -0
  243. package/assets/prompts/breakdown-epic-arch.prompt.md +66 -0
  244. package/assets/prompts/breakdown-epic-pm.prompt.md +58 -0
  245. package/assets/prompts/breakdown-feature-implementation.prompt.md +128 -0
  246. package/assets/prompts/breakdown-feature-prd.prompt.md +61 -0
  247. package/assets/prompts/breakdown-plan.prompt.md +509 -0
  248. package/assets/prompts/breakdown-test.prompt.md +365 -0
  249. package/assets/prompts/code-exemplars-blueprint-generator.prompt.md +126 -0
  250. package/assets/prompts/comment-code-generate-a-tutorial.prompt.md +26 -0
  251. package/assets/prompts/containerize-aspnet-framework.prompt.md +455 -0
  252. package/assets/prompts/containerize-aspnetcore.prompt.md +393 -0
  253. package/assets/prompts/conventional-commit.prompt.md +73 -0
  254. package/assets/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
  255. package/assets/prompts/cosmosdb-datamodeling.prompt.md +1045 -0
  256. package/assets/prompts/create-agentsmd.prompt.md +249 -0
  257. package/assets/prompts/create-architectural-decision-record.prompt.md +97 -0
  258. package/assets/prompts/create-github-action-workflow-specification.prompt.md +276 -0
  259. package/assets/prompts/create-github-issue-feature-from-specification.prompt.md +28 -0
  260. package/assets/prompts/create-github-issues-feature-from-implementation-plan.prompt.md +28 -0
  261. package/assets/prompts/create-github-issues-for-unmet-specification-requirements.prompt.md +35 -0
  262. package/assets/prompts/create-github-pull-request-from-specification.prompt.md +24 -0
  263. package/assets/prompts/create-implementation-plan.prompt.md +157 -0
  264. package/assets/prompts/create-llms.prompt.md +210 -0
  265. package/assets/prompts/create-oo-component-documentation.prompt.md +193 -0
  266. package/assets/prompts/create-readme.prompt.md +21 -0
  267. package/assets/prompts/create-specification.prompt.md +127 -0
  268. package/assets/prompts/create-spring-boot-java-project.prompt.md +163 -0
  269. package/assets/prompts/create-spring-boot-kotlin-project.prompt.md +147 -0
  270. package/assets/prompts/create-technical-spike.prompt.md +231 -0
  271. package/assets/prompts/csharp-async.prompt.md +50 -0
  272. package/assets/prompts/csharp-docs.prompt.md +63 -0
  273. package/assets/prompts/csharp-mcp-server-generator.prompt.md +59 -0
  274. package/assets/prompts/csharp-mstest.prompt.md +67 -0
  275. package/assets/prompts/csharp-nunit.prompt.md +72 -0
  276. package/assets/prompts/csharp-tunit.prompt.md +101 -0
  277. package/assets/prompts/csharp-xunit.prompt.md +69 -0
  278. package/assets/prompts/declarative-agents.prompt.md +93 -0
  279. package/assets/prompts/documentation-writer.prompt.md +46 -0
  280. package/assets/prompts/dotnet-best-practices.prompt.md +84 -0
  281. package/assets/prompts/dotnet-design-pattern-review.prompt.md +41 -0
  282. package/assets/prompts/dotnet-upgrade.prompt.md +116 -0
  283. package/assets/prompts/editorconfig.prompt.md +64 -0
  284. package/assets/prompts/ef-core.prompt.md +76 -0
  285. package/assets/prompts/finalize-agent-prompt.prompt.md +27 -0
  286. package/assets/prompts/first-ask.prompt.md +29 -0
  287. package/assets/prompts/folder-structure-blueprint-generator.prompt.md +405 -0
  288. package/assets/prompts/gen-specs-as-issues.prompt.md +165 -0
  289. package/assets/prompts/generate-custom-instructions-from-codebase.prompt.md +240 -0
  290. package/assets/prompts/git-flow-branch-creator.prompt.md +293 -0
  291. package/assets/prompts/github-copilot-starter.prompt.md +372 -0
  292. package/assets/prompts/go-mcp-server-generator.prompt.md +334 -0
  293. package/assets/prompts/java-docs.prompt.md +24 -0
  294. package/assets/prompts/java-junit.prompt.md +64 -0
  295. package/assets/prompts/java-mcp-server-generator.prompt.md +756 -0
  296. package/assets/prompts/java-refactoring-extract-method.prompt.md +105 -0
  297. package/assets/prompts/java-refactoring-remove-parameter.prompt.md +85 -0
  298. package/assets/prompts/java-springboot.prompt.md +66 -0
  299. package/assets/prompts/javascript-typescript-jest.prompt.md +44 -0
  300. package/assets/prompts/kotlin-mcp-server-generator.prompt.md +449 -0
  301. package/assets/prompts/kotlin-springboot.prompt.md +71 -0
  302. package/assets/prompts/mcp-copilot-studio-server-generator.prompt.md +118 -0
  303. package/assets/prompts/memory-merger.prompt.md +107 -0
  304. package/assets/prompts/mkdocs-translations.prompt.md +110 -0
  305. package/assets/prompts/model-recommendation.prompt.md +677 -0
  306. package/assets/prompts/multi-stage-dockerfile.prompt.md +47 -0
  307. package/assets/prompts/my-issues.prompt.md +9 -0
  308. package/assets/prompts/my-pull-requests.prompt.md +15 -0
  309. package/assets/prompts/next-intl-add-language.prompt.md +20 -0
  310. package/assets/prompts/php-mcp-server-generator.prompt.md +522 -0
  311. package/assets/prompts/playwright-automation-fill-in-form.prompt.md +30 -0
  312. package/assets/prompts/playwright-explore-website.prompt.md +19 -0
  313. package/assets/prompts/playwright-generate-test.prompt.md +19 -0
  314. package/assets/prompts/postgresql-code-review.prompt.md +214 -0
  315. package/assets/prompts/postgresql-optimization.prompt.md +406 -0
  316. package/assets/prompts/power-apps-code-app-scaffold.prompt.md +150 -0
  317. package/assets/prompts/power-bi-dax-optimization.prompt.md +175 -0
  318. package/assets/prompts/power-bi-model-design-review.prompt.md +405 -0
  319. package/assets/prompts/power-bi-performance-troubleshooting.prompt.md +384 -0
  320. package/assets/prompts/power-bi-report-design-consultation.prompt.md +353 -0
  321. package/assets/prompts/power-platform-mcp-connector-suite.prompt.md +156 -0
  322. package/assets/prompts/project-workflow-analysis-blueprint-generator.prompt.md +294 -0
  323. package/assets/prompts/prompt-builder.prompt.md +142 -0
  324. package/assets/prompts/pytest-coverage.prompt.md +28 -0
  325. package/assets/prompts/python-mcp-server-generator.prompt.md +105 -0
  326. package/assets/prompts/readme-blueprint-generator.prompt.md +79 -0
  327. package/assets/prompts/remember-interactive-programming.prompt.md +13 -0
  328. package/assets/prompts/remember.prompt.md +125 -0
  329. package/assets/prompts/repo-story-time.prompt.md +156 -0
  330. package/assets/prompts/review-and-refactor.prompt.md +15 -0
  331. package/assets/prompts/ruby-mcp-server-generator.prompt.md +660 -0
  332. package/assets/prompts/rust-mcp-server-generator.prompt.md +578 -0
  333. package/assets/prompts/shuffle-json-data.prompt.md +151 -0
  334. package/assets/prompts/sql-code-review.prompt.md +303 -0
  335. package/assets/prompts/sql-optimization.prompt.md +298 -0
  336. package/assets/prompts/suggest-awesome-github-copilot-agents.prompt.md +72 -0
  337. package/assets/prompts/suggest-awesome-github-copilot-chatmodes.prompt.md +71 -0
  338. package/assets/prompts/suggest-awesome-github-copilot-collections.prompt.md +149 -0
  339. package/assets/prompts/suggest-awesome-github-copilot-instructions.prompt.md +88 -0
  340. package/assets/prompts/suggest-awesome-github-copilot-prompts.prompt.md +71 -0
  341. package/assets/prompts/swift-mcp-server-generator.prompt.md +669 -0
  342. package/assets/prompts/technology-stack-blueprint-generator.prompt.md +242 -0
  343. package/assets/prompts/typescript-mcp-server-generator.prompt.md +90 -0
  344. package/assets/prompts/update-avm-modules-in-bicep.prompt.md +60 -0
  345. package/assets/prompts/update-implementation-plan.prompt.md +157 -0
  346. package/assets/prompts/update-llms.prompt.md +216 -0
  347. package/assets/prompts/update-markdown-file-index.prompt.md +76 -0
  348. package/assets/prompts/update-oo-component-documentation.prompt.md +162 -0
  349. package/assets/prompts/update-specification.prompt.md +127 -0
  350. package/assets/prompts/write-coding-standards-from-file.prompt.md +316 -0
  351. package/bin/cli.js +200 -0
  352. package/package.json +53 -0
  353. package/scripts/sync.js +99 -0
  354. package/verdaccio/config.yaml +202 -0
@@ -0,0 +1,1943 @@
1
+ ---
2
+ description: 'Guidelines for developing Azure Logic Apps and Power Automate workflows with best practices for Workflow Definition Language (WDL), integration patterns, and enterprise automation'
3
+ applyTo: "**/*.json,**/*.logicapp.json,**/workflow.json,**/*-definition.json,**/*.flow.json"
4
+ ---
5
+
6
+ # Azure Logic Apps and Power Automate Instructions
7
+
8
+ ## Overview
9
+
10
+ These instructions will guide you in writing high-quality Azure Logic Apps and Microsoft Power Automate workflow definitions using the JSON-based Workflow Definition Language (WDL). Azure Logic Apps is a cloud-based integration platform as a service (iPaaS) that provides 1,400+ connectors to simplify integration across services and protocols. Follow these guidelines to create robust, efficient, and maintainable cloud workflow automation solutions.
11
+
12
+ ## Workflow Definition Language Structure
13
+
14
+ When working with Logic Apps or Power Automate flow JSON files, ensure your workflow follows this standard structure:
15
+
16
+ ```json
17
+ {
18
+ "definition": {
19
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
20
+ "actions": { },
21
+ "contentVersion": "1.0.0.0",
22
+ "outputs": { },
23
+ "parameters": { },
24
+ "staticResults": { },
25
+ "triggers": { }
26
+ },
27
+ "parameters": { }
28
+ }
29
+ ```
30
+
31
+ ## Best Practices for Azure Logic Apps and Power Automate Development
32
+
33
+ ### 1. Triggers
34
+
35
+ - **Use appropriate trigger types** based on your scenario:
36
+ - **Request trigger**: For synchronous API-like workflows
37
+ - **Recurrence trigger**: For scheduled operations
38
+ - **Event-based triggers**: For reactive patterns (Service Bus, Event Grid, etc.)
39
+ - **Configure proper trigger settings**:
40
+ - Set reasonable timeout periods
41
+ - Use pagination settings for high-volume data sources
42
+ - Implement proper authentication
43
+
44
+ ```json
45
+ "triggers": {
46
+ "manual": {
47
+ "type": "Request",
48
+ "kind": "Http",
49
+ "inputs": {
50
+ "schema": {
51
+ "type": "object",
52
+ "properties": {
53
+ "requestParameter": {
54
+ "type": "string"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ ```
62
+
63
+ ### 2. Actions
64
+
65
+ - **Name actions descriptively** to indicate their purpose
66
+ - **Organize complex workflows** using scopes for logical grouping
67
+ - **Use proper action types** for different operations:
68
+ - HTTP actions for API calls
69
+ - Connector actions for built-in integrations
70
+ - Data operation actions for transformations
71
+
72
+ ```json
73
+ "actions": {
74
+ "Get_Customer_Data": {
75
+ "type": "Http",
76
+ "inputs": {
77
+ "method": "GET",
78
+ "uri": "https://api.example.com/customers/@{triggerBody()?['customerId']}",
79
+ "headers": {
80
+ "Content-Type": "application/json"
81
+ }
82
+ },
83
+ "runAfter": {}
84
+ }
85
+ }
86
+ ```
87
+
88
+ ### 3. Error Handling and Reliability
89
+
90
+ - **Implement robust error handling**:
91
+ - Use "runAfter" configurations to handle failures
92
+ - Configure retry policies for transient errors
93
+ - Use scopes with "runAfter" conditions for error branches
94
+ - **Implement fallback mechanisms** for critical operations
95
+ - **Add timeouts** for external service calls
96
+ - **Use runAfter conditions** for complex error handling scenarios
97
+
98
+ ```json
99
+ "actions": {
100
+ "HTTP_Action": {
101
+ "type": "Http",
102
+ "inputs": { },
103
+ "retryPolicy": {
104
+ "type": "fixed",
105
+ "count": 3,
106
+ "interval": "PT20S",
107
+ "minimumInterval": "PT5S",
108
+ "maximumInterval": "PT1H"
109
+ }
110
+ },
111
+ "Handle_Success": {
112
+ "type": "Scope",
113
+ "actions": { },
114
+ "runAfter": {
115
+ "HTTP_Action": ["Succeeded"]
116
+ }
117
+ },
118
+ "Handle_Failure": {
119
+ "type": "Scope",
120
+ "actions": {
121
+ "Log_Error": {
122
+ "type": "ApiConnection",
123
+ "inputs": {
124
+ "host": {
125
+ "connection": {
126
+ "name": "@parameters('$connections')['loganalytics']['connectionId']"
127
+ }
128
+ },
129
+ "method": "post",
130
+ "body": {
131
+ "LogType": "WorkflowError",
132
+ "ErrorDetails": "@{actions('HTTP_Action').outputs.body}",
133
+ "StatusCode": "@{actions('HTTP_Action').outputs.statusCode}"
134
+ }
135
+ }
136
+ },
137
+ "Send_Notification": {
138
+ "type": "ApiConnection",
139
+ "inputs": {
140
+ "host": {
141
+ "connection": {
142
+ "name": "@parameters('$connections')['office365']['connectionId']"
143
+ }
144
+ },
145
+ "method": "post",
146
+ "path": "/v2/Mail",
147
+ "body": {
148
+ "To": "support@contoso.com",
149
+ "Subject": "Workflow Error - HTTP Call Failed",
150
+ "Body": "<p>The HTTP call failed with status code: @{actions('HTTP_Action').outputs.statusCode}</p>"
151
+ }
152
+ },
153
+ "runAfter": {
154
+ "Log_Error": ["Succeeded"]
155
+ }
156
+ }
157
+ },
158
+ "runAfter": {
159
+ "HTTP_Action": ["Failed", "TimedOut"]
160
+ }
161
+ }
162
+ }
163
+ ```
164
+
165
+ ### 4. Expressions and Functions
166
+
167
+ - **Use built-in expression functions** to transform data
168
+ - **Keep expressions concise and readable**
169
+ - **Document complex expressions** with comments
170
+
171
+ Common expression patterns:
172
+ - String manipulation: `concat()`, `replace()`, `substring()`
173
+ - Collection operations: `filter()`, `map()`, `select()`
174
+ - Conditional logic: `if()`, `and()`, `or()`, `equals()`
175
+ - Date/time manipulation: `formatDateTime()`, `addDays()`
176
+ - JSON handling: `json()`, `array()`, `createArray()`
177
+
178
+ ```json
179
+ "Set_Variable": {
180
+ "type": "SetVariable",
181
+ "inputs": {
182
+ "name": "formattedData",
183
+ "value": "@{map(body('Parse_JSON'), item => {
184
+ return {
185
+ id: item.id,
186
+ name: toUpper(item.name),
187
+ date: formatDateTime(item.timestamp, 'yyyy-MM-dd')
188
+ }
189
+ })}"
190
+ }
191
+ }
192
+ ```
193
+
194
+ #### Using Expressions in Power Automate Conditions
195
+
196
+ Power Automate supports advanced expressions in conditions to check multiple values. When working with complex logical conditions, use the following pattern:
197
+
198
+ - For comparing a single value: Use the basic condition designer interface
199
+ - For multiple conditions: Use advanced expressions in advanced mode
200
+
201
+ Common logical expression functions for conditions in Power Automate:
202
+
203
+ | Expression | Description | Example |
204
+ |------------|-------------|---------|
205
+ | `and` | Returns true if both arguments are true | `@and(equals(item()?['Status'], 'completed'), equals(item()?['Assigned'], 'John'))` |
206
+ | `or` | Returns true if either argument is true | `@or(equals(item()?['Status'], 'completed'), equals(item()?['Status'], 'unnecessary'))` |
207
+ | `equals` | Checks if values are equal | `@equals(item()?['Status'], 'blocked')` |
208
+ | `greater` | Checks if first value is greater than second | `@greater(item()?['Due'], item()?['Paid'])` |
209
+ | `less` | Checks if first value is less than second | `@less(item()?['dueDate'], addDays(utcNow(),1))` |
210
+ | `empty` | Checks if object, array or string is empty | `@empty(item()?['Status'])` |
211
+ | `not` | Returns opposite of a boolean value | `@not(contains(item()?['Status'], 'Failed'))` |
212
+
213
+ Example: Check if a status is "completed" OR "unnecessary":
214
+ ```
215
+ @or(equals(item()?['Status'], 'completed'), equals(item()?['Status'], 'unnecessary'))
216
+ ```
217
+
218
+ Example: Check if status is "blocked" AND assigned to specific person:
219
+ ```
220
+ @and(equals(item()?['Status'], 'blocked'), equals(item()?['Assigned'], 'John Wonder'))
221
+ ```
222
+
223
+ Example: Check if a payment is overdue AND incomplete:
224
+ ```
225
+ @and(greater(item()?['Due'], item()?['Paid']), less(item()?['dueDate'], utcNow()))
226
+ ```
227
+
228
+ **Note:** In Power Automate, when accessing dynamic values from previous steps in expressions, use the syntax `item()?['PropertyName']` to safely access properties in a collection.
229
+
230
+ ### 5. Parameters and Variables
231
+
232
+ - **Parameterize your workflows** for reusability across environments
233
+ - **Use variables for temporary values** within a workflow
234
+ - **Define clear parameter schemas** with default values and descriptions
235
+
236
+ ```json
237
+ "parameters": {
238
+ "apiEndpoint": {
239
+ "type": "string",
240
+ "defaultValue": "https://api.dev.example.com",
241
+ "metadata": {
242
+ "description": "The base URL for the API endpoint"
243
+ }
244
+ }
245
+ },
246
+ "variables": {
247
+ "requestId": "@{guid()}",
248
+ "processedItems": []
249
+ }
250
+ ```
251
+
252
+ ### 6. Control Flow
253
+
254
+ - **Use conditions** for branching logic
255
+ - **Implement parallel branches** for independent operations
256
+ - **Use foreach loops** with reasonable batch sizes for collections
257
+ - **Apply until loops** with proper exit conditions
258
+
259
+ ```json
260
+ "Process_Items": {
261
+ "type": "Foreach",
262
+ "foreach": "@body('Get_Items')",
263
+ "actions": {
264
+ "Process_Single_Item": {
265
+ "type": "Scope",
266
+ "actions": { }
267
+ }
268
+ },
269
+ "runAfter": {
270
+ "Get_Items": ["Succeeded"]
271
+ },
272
+ "runtimeConfiguration": {
273
+ "concurrency": {
274
+ "repetitions": 10
275
+ }
276
+ }
277
+ }
278
+ ```
279
+
280
+ ### 7. Content and Message Handling
281
+
282
+ - **Validate message schemas** to ensure data integrity
283
+ - **Implement proper content type handling**
284
+ - **Use Parse JSON actions** to work with structured data
285
+
286
+ ```json
287
+ "Parse_Response": {
288
+ "type": "ParseJson",
289
+ "inputs": {
290
+ "content": "@body('HTTP_Request')",
291
+ "schema": {
292
+ "type": "object",
293
+ "properties": {
294
+ "id": {
295
+ "type": "string"
296
+ },
297
+ "data": {
298
+ "type": "array",
299
+ "items": {
300
+ "type": "object",
301
+ "properties": { }
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ }
308
+ ```
309
+
310
+ ### 8. Security Best Practices
311
+
312
+ - **Use managed identities** when possible
313
+ - **Store secrets in Key Vault**
314
+ - **Implement least privilege access** for connections
315
+ - **Secure API endpoints** with authentication
316
+ - **Implement IP restrictions** for HTTP triggers
317
+ - **Apply data encryption** for sensitive data in parameters and messages
318
+ - **Use Azure RBAC** to control access to Logic Apps resources
319
+ - **Conduct regular security reviews** of workflows and connections
320
+
321
+ ```json
322
+ "Get_Secret": {
323
+ "type": "ApiConnection",
324
+ "inputs": {
325
+ "host": {
326
+ "connection": {
327
+ "name": "@parameters('$connections')['keyvault']['connectionId']"
328
+ }
329
+ },
330
+ "method": "get",
331
+ "path": "/secrets/@{encodeURIComponent('apiKey')}/value"
332
+ }
333
+ },
334
+ "Call_Protected_API": {
335
+ "type": "Http",
336
+ "inputs": {
337
+ "method": "POST",
338
+ "uri": "https://api.example.com/protected",
339
+ "headers": {
340
+ "Content-Type": "application/json",
341
+ "Authorization": "Bearer @{body('Get_Secret')?['value']}"
342
+ },
343
+ "body": {
344
+ "data": "@variables('processedData')"
345
+ }
346
+ },
347
+ "authentication": {
348
+ "type": "ManagedServiceIdentity"
349
+ },
350
+ "runAfter": {
351
+ "Get_Secret": ["Succeeded"]
352
+ }
353
+ }
354
+ ```
355
+
356
+ ## Performance Optimization
357
+
358
+ - **Minimize unnecessary actions**
359
+ - **Use batch operations** when available
360
+ - **Optimize expressions** to reduce complexity
361
+ - **Configure appropriate timeout values**
362
+ - **Implement pagination** for large data sets
363
+ - **Implement concurrency control** for parallelizable operations
364
+
365
+ ```json
366
+ "Process_Items": {
367
+ "type": "Foreach",
368
+ "foreach": "@body('Get_Items')",
369
+ "actions": {
370
+ "Process_Single_Item": {
371
+ "type": "Scope",
372
+ "actions": { }
373
+ }
374
+ },
375
+ "runAfter": {
376
+ "Get_Items": ["Succeeded"]
377
+ },
378
+ "runtimeConfiguration": {
379
+ "concurrency": {
380
+ "repetitions": 10
381
+ }
382
+ }
383
+ }
384
+ ```
385
+
386
+ ### Workflow Design Best Practices
387
+
388
+ - **Limit workflows to 50 actions or less** for optimal designer performance
389
+ - **Split complex business logic** into multiple smaller workflows when necessary
390
+ - **Use deployment slots** for mission-critical logic apps that require zero downtime deployments
391
+ - **Avoid hardcoded properties** in trigger and action definitions
392
+ - **Add descriptive comments** to provide context about trigger and action definitions
393
+ - **Use built-in operations** when available instead of shared connectors for better performance
394
+ - **Use an Integration Account** for B2B scenarios and EDI message processing
395
+ - **Reuse workflow templates** for standard patterns across your organization
396
+ - **Avoid deep nesting** of scopes and actions to maintain readability
397
+
398
+ ### Monitoring and Observability
399
+
400
+ - **Configure diagnostic settings** to capture workflow runs and metrics
401
+ - **Add tracking IDs** to correlate related workflow runs
402
+ - **Implement comprehensive logging** with appropriate detail levels
403
+ - **Set up alerts** for workflow failures and performance degradation
404
+ - **Use Application Insights** for end-to-end tracing and monitoring
405
+
406
+ ## Platform Types and Considerations
407
+
408
+ ### Azure Logic Apps vs Power Automate
409
+
410
+ While Azure Logic Apps and Power Automate share the same underlying workflow engine and language, they have different target audiences and capabilities:
411
+
412
+ - **Power Automate**:
413
+ - User-friendly interface for business users
414
+ - Part of the Power Platform ecosystem
415
+ - Integration with Microsoft 365 and Dynamics 365
416
+ - Desktop flow capabilities for UI automation
417
+
418
+ - **Azure Logic Apps**:
419
+ - Enterprise-grade integration platform
420
+ - Developer-focused with advanced capabilities
421
+ - Deeper Azure service integration
422
+ - More extensive monitoring and operations capabilities
423
+
424
+ ### Logic App Types
425
+
426
+ #### Consumption Logic Apps
427
+ - Pay-per-execution pricing model
428
+ - Serverless architecture
429
+ - Suitable for variable or unpredictable workloads
430
+
431
+ #### Standard Logic Apps
432
+ - Fixed pricing based on App Service Plan
433
+ - Predictable performance
434
+ - Local development support
435
+ - Integration with VNets
436
+
437
+ #### Integration Service Environment (ISE)
438
+ - Dedicated deployment environment
439
+ - Higher throughput and longer execution durations
440
+ - Direct access to VNet resources
441
+ - Isolated runtime environment
442
+
443
+ ### Power Automate License Types
444
+ - **Power Automate per user plan**: For individual users
445
+ - **Power Automate per flow plan**: For specific workflows
446
+ - **Power Automate Process plan**: For RPA capabilities
447
+ - **Power Automate included with Office 365**: Limited capabilities for Office 365 users
448
+
449
+ ## Common Integration Patterns
450
+
451
+ ### Architectural Patterns
452
+ - **Mediator Pattern**: Use Logic Apps/Power Automate as an orchestration layer between systems
453
+ - **Content-Based Routing**: Route messages based on content to different destinations
454
+ - **Message Transformation**: Transform messages between formats (JSON, XML, EDI, etc.)
455
+ - **Scatter-Gather**: Distribute work in parallel and aggregate results
456
+ - **Protocol Bridging**: Connect systems with different protocols (REST, SOAP, FTP, etc.)
457
+ - **Claim Check**: Store large payloads externally in blob storage or databases
458
+ - **Saga Pattern**: Manage distributed transactions with compensating actions for failures
459
+ - **Choreography Pattern**: Coordinate multiple services without a central orchestrator
460
+
461
+ ### Action Patterns
462
+ - **Asynchronous Processing Pattern**: For long-running operations
463
+ ```json
464
+ "LongRunningAction": {
465
+ "type": "Http",
466
+ "inputs": {
467
+ "method": "POST",
468
+ "uri": "https://api.example.com/longrunning",
469
+ "body": { "data": "@triggerBody()" }
470
+ },
471
+ "retryPolicy": {
472
+ "type": "fixed",
473
+ "count": 3,
474
+ "interval": "PT30S"
475
+ }
476
+ }
477
+ ```
478
+
479
+ - **Webhook Pattern**: For callback-based processing
480
+ ```json
481
+ "WebhookAction": {
482
+ "type": "ApiConnectionWebhook",
483
+ "inputs": {
484
+ "host": {
485
+ "connection": {
486
+ "name": "@parameters('$connections')['servicebus']['connectionId']"
487
+ }
488
+ },
489
+ "body": {
490
+ "content": "@triggerBody()"
491
+ },
492
+ "path": "/subscribe/topics/@{encodeURIComponent('mytopic')}/subscriptions/@{encodeURIComponent('mysubscription')}"
493
+ }
494
+ }
495
+ ```
496
+
497
+ ### Enterprise Integration Patterns
498
+ - **B2B Message Exchange**: Exchange EDI documents between trading partners (AS2, X12, EDIFACT)
499
+ - **Integration Account**: Use for storing and managing B2B artifacts (agreements, schemas, maps)
500
+ - **Rules Engine**: Implement complex business rules using the Azure Logic Apps Rules Engine
501
+ - **Message Validation**: Validate messages against schemas for compliance and data integrity
502
+ - **Transaction Processing**: Process business transactions with compensating transactions for rollback
503
+
504
+ ## DevOps and CI/CD for Logic Apps
505
+
506
+ ### Source Control and Versioning
507
+
508
+ - **Store Logic App definitions in source control** (Git, Azure DevOps, GitHub)
509
+ - **Use ARM templates** for deployment to multiple environments
510
+ - **Implement branching strategies** appropriate for your release cadence
511
+ - **Version your Logic Apps** using tags or version properties
512
+
513
+ ### Automated Deployment
514
+
515
+ - **Use Azure DevOps pipelines** or GitHub Actions for automated deployments
516
+ - **Implement parameterization** for environment-specific values
517
+ - **Use deployment slots** for zero-downtime deployments
518
+ - **Include post-deployment validation** tests in your CI/CD pipeline
519
+
520
+ ```yaml
521
+ # Example Azure DevOps YAML pipeline for Logic App deployment
522
+ trigger:
523
+ branches:
524
+ include:
525
+ - main
526
+ - release/*
527
+
528
+ pool:
529
+ vmImage: 'ubuntu-latest'
530
+
531
+ steps:
532
+ - task: AzureResourceManagerTemplateDeployment@3
533
+ inputs:
534
+ deploymentScope: 'Resource Group'
535
+ azureResourceManagerConnection: 'Your-Azure-Connection'
536
+ subscriptionId: '$(subscriptionId)'
537
+ action: 'Create Or Update Resource Group'
538
+ resourceGroupName: '$(resourceGroupName)'
539
+ location: '$(location)'
540
+ templateLocation: 'Linked artifact'
541
+ csmFile: '$(System.DefaultWorkingDirectory)/arm-templates/logicapp-template.json'
542
+ csmParametersFile: '$(System.DefaultWorkingDirectory)/arm-templates/logicapp-parameters-$(Environment).json'
543
+ deploymentMode: 'Incremental'
544
+ ```
545
+
546
+ ## Cross-Platform Considerations
547
+
548
+ When working with both Azure Logic Apps and Power Automate:
549
+
550
+ - **Export/Import Compatibility**: Flows can be exported from Power Automate and imported into Logic Apps, but some modifications may be required
551
+ - **Connector Differences**: Some connectors are available in one platform but not the other
552
+ - **Environment Isolation**: Power Automate environments provide isolation and may have different policies
553
+ - **ALM Practices**: Consider using Azure DevOps for Logic Apps and Solutions for Power Automate
554
+
555
+ ### Migration Strategies
556
+
557
+ - **Assessment**: Evaluate complexity and suitability for migration
558
+ - **Connector Mapping**: Map connectors between platforms and identify gaps
559
+ - **Testing Strategy**: Implement parallel testing before cutover
560
+ - **Documentation**: Document all configuration changes for reference
561
+
562
+ ```json
563
+ // Example Power Platform solution structure for Power Automate flows
564
+ {
565
+ "SolutionName": "MyEnterpriseFlows",
566
+ "Version": "1.0.0",
567
+ "Flows": [
568
+ {
569
+ "Name": "OrderProcessingFlow",
570
+ "Type": "Microsoft.Flow/flows",
571
+ "Properties": {
572
+ "DisplayName": "Order Processing Flow",
573
+ "DefinitionData": {
574
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
575
+ "triggers": {
576
+ "When_a_new_order_is_created": {
577
+ "type": "ApiConnectionWebhook",
578
+ "inputs": {
579
+ "host": {
580
+ "connectionName": "shared_commondataserviceforapps",
581
+ "operationId": "SubscribeWebhookTrigger",
582
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
583
+ }
584
+ }
585
+ }
586
+ },
587
+ "actions": {
588
+ // Actions would be defined here
589
+ }
590
+ }
591
+ }
592
+ }
593
+ ]
594
+ }
595
+ ```
596
+
597
+ ## Practical Logic App Examples
598
+
599
+ ### HTTP Request Handler with API Integration
600
+
601
+ This example demonstrates a Logic App that accepts an HTTP request, validates the input data, calls an external API, transforms the response, and returns a formatted result.
602
+
603
+ ```json
604
+ {
605
+ "definition": {
606
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
607
+ "actions": {
608
+ "Validate_Input": {
609
+ "type": "If",
610
+ "expression": {
611
+ "and": [
612
+ {
613
+ "not": {
614
+ "equals": [
615
+ "@triggerBody()?['customerId']",
616
+ null
617
+ ]
618
+ }
619
+ },
620
+ {
621
+ "not": {
622
+ "equals": [
623
+ "@triggerBody()?['requestType']",
624
+ null
625
+ ]
626
+ }
627
+ }
628
+ ]
629
+ },
630
+ "actions": {
631
+ "Get_Customer_Data": {
632
+ "type": "Http",
633
+ "inputs": {
634
+ "method": "GET",
635
+ "uri": "https://api.example.com/customers/@{triggerBody()?['customerId']}",
636
+ "headers": {
637
+ "Content-Type": "application/json",
638
+ "Authorization": "Bearer @{body('Get_API_Key')?['value']}"
639
+ }
640
+ },
641
+ "runAfter": {
642
+ "Get_API_Key": [
643
+ "Succeeded"
644
+ ]
645
+ }
646
+ },
647
+ "Get_API_Key": {
648
+ "type": "ApiConnection",
649
+ "inputs": {
650
+ "host": {
651
+ "connection": {
652
+ "name": "@parameters('$connections')['keyvault']['connectionId']"
653
+ }
654
+ },
655
+ "method": "get",
656
+ "path": "/secrets/@{encodeURIComponent('apiKey')}/value"
657
+ }
658
+ },
659
+ "Parse_Customer_Response": {
660
+ "type": "ParseJson",
661
+ "inputs": {
662
+ "content": "@body('Get_Customer_Data')",
663
+ "schema": {
664
+ "type": "object",
665
+ "properties": {
666
+ "id": { "type": "string" },
667
+ "name": { "type": "string" },
668
+ "email": { "type": "string" },
669
+ "status": { "type": "string" },
670
+ "createdDate": { "type": "string" },
671
+ "orders": {
672
+ "type": "array",
673
+ "items": {
674
+ "type": "object",
675
+ "properties": {
676
+ "orderId": { "type": "string" },
677
+ "orderDate": { "type": "string" },
678
+ "amount": { "type": "number" }
679
+ }
680
+ }
681
+ }
682
+ }
683
+ }
684
+ },
685
+ "runAfter": {
686
+ "Get_Customer_Data": [
687
+ "Succeeded"
688
+ ]
689
+ }
690
+ },
691
+ "Switch_Request_Type": {
692
+ "type": "Switch",
693
+ "expression": "@triggerBody()?['requestType']",
694
+ "cases": {
695
+ "Profile": {
696
+ "actions": {
697
+ "Prepare_Profile_Response": {
698
+ "type": "SetVariable",
699
+ "inputs": {
700
+ "name": "responsePayload",
701
+ "value": {
702
+ "customerId": "@body('Parse_Customer_Response')?['id']",
703
+ "customerName": "@body('Parse_Customer_Response')?['name']",
704
+ "email": "@body('Parse_Customer_Response')?['email']",
705
+ "status": "@body('Parse_Customer_Response')?['status']",
706
+ "memberSince": "@formatDateTime(body('Parse_Customer_Response')?['createdDate'], 'yyyy-MM-dd')"
707
+ }
708
+ }
709
+ }
710
+ }
711
+ },
712
+ "OrderSummary": {
713
+ "actions": {
714
+ "Calculate_Order_Statistics": {
715
+ "type": "Compose",
716
+ "inputs": {
717
+ "totalOrders": "@length(body('Parse_Customer_Response')?['orders'])",
718
+ "totalSpent": "@sum(body('Parse_Customer_Response')?['orders'], item => item.amount)",
719
+ "averageOrderValue": "@if(greater(length(body('Parse_Customer_Response')?['orders']), 0), div(sum(body('Parse_Customer_Response')?['orders'], item => item.amount), length(body('Parse_Customer_Response')?['orders'])), 0)",
720
+ "lastOrderDate": "@if(greater(length(body('Parse_Customer_Response')?['orders']), 0), max(body('Parse_Customer_Response')?['orders'], item => item.orderDate), '')"
721
+ }
722
+ },
723
+ "Prepare_Order_Response": {
724
+ "type": "SetVariable",
725
+ "inputs": {
726
+ "name": "responsePayload",
727
+ "value": {
728
+ "customerId": "@body('Parse_Customer_Response')?['id']",
729
+ "customerName": "@body('Parse_Customer_Response')?['name']",
730
+ "orderStats": "@outputs('Calculate_Order_Statistics')"
731
+ }
732
+ },
733
+ "runAfter": {
734
+ "Calculate_Order_Statistics": [
735
+ "Succeeded"
736
+ ]
737
+ }
738
+ }
739
+ }
740
+ }
741
+ },
742
+ "default": {
743
+ "actions": {
744
+ "Set_Default_Response": {
745
+ "type": "SetVariable",
746
+ "inputs": {
747
+ "name": "responsePayload",
748
+ "value": {
749
+ "error": "Invalid request type specified",
750
+ "validTypes": [
751
+ "Profile",
752
+ "OrderSummary"
753
+ ]
754
+ }
755
+ }
756
+ }
757
+ }
758
+ },
759
+ "runAfter": {
760
+ "Parse_Customer_Response": [
761
+ "Succeeded"
762
+ ]
763
+ }
764
+ },
765
+ "Log_Successful_Request": {
766
+ "type": "ApiConnection",
767
+ "inputs": {
768
+ "host": {
769
+ "connection": {
770
+ "name": "@parameters('$connections')['applicationinsights']['connectionId']"
771
+ }
772
+ },
773
+ "method": "post",
774
+ "body": {
775
+ "LogType": "ApiRequestSuccess",
776
+ "CustomerId": "@triggerBody()?['customerId']",
777
+ "RequestType": "@triggerBody()?['requestType']",
778
+ "ProcessingTime": "@workflow()['run']['duration']"
779
+ }
780
+ },
781
+ "runAfter": {
782
+ "Switch_Request_Type": [
783
+ "Succeeded"
784
+ ]
785
+ }
786
+ },
787
+ "Return_Success_Response": {
788
+ "type": "Response",
789
+ "kind": "Http",
790
+ "inputs": {
791
+ "statusCode": 200,
792
+ "body": "@variables('responsePayload')",
793
+ "headers": {
794
+ "Content-Type": "application/json"
795
+ }
796
+ },
797
+ "runAfter": {
798
+ "Log_Successful_Request": [
799
+ "Succeeded"
800
+ ]
801
+ }
802
+ }
803
+ },
804
+ "else": {
805
+ "actions": {
806
+ "Return_Validation_Error": {
807
+ "type": "Response",
808
+ "kind": "Http",
809
+ "inputs": {
810
+ "statusCode": 400,
811
+ "body": {
812
+ "error": "Invalid request",
813
+ "message": "Request must include customerId and requestType",
814
+ "timestamp": "@utcNow()"
815
+ }
816
+ }
817
+ }
818
+ }
819
+ },
820
+ "runAfter": {
821
+ "Initialize_Response_Variable": [
822
+ "Succeeded"
823
+ ]
824
+ }
825
+ },
826
+ "Initialize_Response_Variable": {
827
+ "type": "InitializeVariable",
828
+ "inputs": {
829
+ "variables": [
830
+ {
831
+ "name": "responsePayload",
832
+ "type": "object",
833
+ "value": {}
834
+ }
835
+ ]
836
+ }
837
+ }
838
+ },
839
+ "contentVersion": "1.0.0.0",
840
+ "outputs": {},
841
+ "parameters": {
842
+ "$connections": {
843
+ "defaultValue": {},
844
+ "type": "Object"
845
+ }
846
+ },
847
+ "triggers": {
848
+ "manual": {
849
+ "type": "Request",
850
+ "kind": "Http",
851
+ "inputs": {
852
+ "schema": {
853
+ "type": "object",
854
+ "properties": {
855
+ "customerId": {
856
+ "type": "string"
857
+ },
858
+ "requestType": {
859
+ "type": "string",
860
+ "enum": [
861
+ "Profile",
862
+ "OrderSummary"
863
+ ]
864
+ }
865
+ }
866
+ }
867
+ }
868
+ }
869
+ }
870
+ },
871
+ "parameters": {
872
+ "$connections": {
873
+ "value": {
874
+ "keyvault": {
875
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/keyvault",
876
+ "connectionName": "keyvault",
877
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/keyvault"
878
+ },
879
+ "applicationinsights": {
880
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/applicationinsights",
881
+ "connectionName": "applicationinsights",
882
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/applicationinsights"
883
+ }
884
+ }
885
+ }
886
+ }
887
+ }
888
+ ```
889
+
890
+ ### Event-Driven Process with Error Handling
891
+
892
+ This example demonstrates a Logic App that processes events from Azure Service Bus, handles the message processing with robust error handling, and implements the retry pattern for resilience.
893
+
894
+ ```json
895
+ {
896
+ "definition": {
897
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
898
+ "actions": {
899
+ "Parse_Message": {
900
+ "type": "ParseJson",
901
+ "inputs": {
902
+ "content": "@triggerBody()?['ContentData']",
903
+ "schema": {
904
+ "type": "object",
905
+ "properties": {
906
+ "eventId": { "type": "string" },
907
+ "eventType": { "type": "string" },
908
+ "eventTime": { "type": "string" },
909
+ "dataVersion": { "type": "string" },
910
+ "data": {
911
+ "type": "object",
912
+ "properties": {
913
+ "orderId": { "type": "string" },
914
+ "customerId": { "type": "string" },
915
+ "items": {
916
+ "type": "array",
917
+ "items": {
918
+ "type": "object",
919
+ "properties": {
920
+ "productId": { "type": "string" },
921
+ "quantity": { "type": "integer" },
922
+ "unitPrice": { "type": "number" }
923
+ }
924
+ }
925
+ }
926
+ }
927
+ }
928
+ }
929
+ }
930
+ },
931
+ "runAfter": {}
932
+ },
933
+ "Try_Process_Order": {
934
+ "type": "Scope",
935
+ "actions": {
936
+ "Get_Customer_Details": {
937
+ "type": "Http",
938
+ "inputs": {
939
+ "method": "GET",
940
+ "uri": "https://api.example.com/customers/@{body('Parse_Message')?['data']?['customerId']}",
941
+ "headers": {
942
+ "Content-Type": "application/json",
943
+ "Authorization": "Bearer @{body('Get_API_Key')?['value']}"
944
+ }
945
+ },
946
+ "runAfter": {
947
+ "Get_API_Key": [
948
+ "Succeeded"
949
+ ]
950
+ },
951
+ "retryPolicy": {
952
+ "type": "exponential",
953
+ "count": 5,
954
+ "interval": "PT10S",
955
+ "minimumInterval": "PT5S",
956
+ "maximumInterval": "PT1H"
957
+ }
958
+ },
959
+ "Get_API_Key": {
960
+ "type": "ApiConnection",
961
+ "inputs": {
962
+ "host": {
963
+ "connection": {
964
+ "name": "@parameters('$connections')['keyvault']['connectionId']"
965
+ }
966
+ },
967
+ "method": "get",
968
+ "path": "/secrets/@{encodeURIComponent('apiKey')}/value"
969
+ }
970
+ },
971
+ "Validate_Stock": {
972
+ "type": "Foreach",
973
+ "foreach": "@body('Parse_Message')?['data']?['items']",
974
+ "actions": {
975
+ "Check_Product_Stock": {
976
+ "type": "Http",
977
+ "inputs": {
978
+ "method": "GET",
979
+ "uri": "https://api.example.com/inventory/@{items('Validate_Stock')?['productId']}",
980
+ "headers": {
981
+ "Content-Type": "application/json",
982
+ "Authorization": "Bearer @{body('Get_API_Key')?['value']}"
983
+ }
984
+ },
985
+ "retryPolicy": {
986
+ "type": "fixed",
987
+ "count": 3,
988
+ "interval": "PT15S"
989
+ }
990
+ },
991
+ "Verify_Availability": {
992
+ "type": "If",
993
+ "expression": {
994
+ "and": [
995
+ {
996
+ "greater": [
997
+ "@body('Check_Product_Stock')?['availableStock']",
998
+ "@items('Validate_Stock')?['quantity']"
999
+ ]
1000
+ }
1001
+ ]
1002
+ },
1003
+ "actions": {
1004
+ "Add_To_Valid_Items": {
1005
+ "type": "AppendToArrayVariable",
1006
+ "inputs": {
1007
+ "name": "validItems",
1008
+ "value": {
1009
+ "productId": "@items('Validate_Stock')?['productId']",
1010
+ "quantity": "@items('Validate_Stock')?['quantity']",
1011
+ "unitPrice": "@items('Validate_Stock')?['unitPrice']",
1012
+ "availableStock": "@body('Check_Product_Stock')?['availableStock']"
1013
+ }
1014
+ }
1015
+ }
1016
+ },
1017
+ "else": {
1018
+ "actions": {
1019
+ "Add_To_Invalid_Items": {
1020
+ "type": "AppendToArrayVariable",
1021
+ "inputs": {
1022
+ "name": "invalidItems",
1023
+ "value": {
1024
+ "productId": "@items('Validate_Stock')?['productId']",
1025
+ "requestedQuantity": "@items('Validate_Stock')?['quantity']",
1026
+ "availableStock": "@body('Check_Product_Stock')?['availableStock']",
1027
+ "reason": "Insufficient stock"
1028
+ }
1029
+ }
1030
+ }
1031
+ }
1032
+ },
1033
+ "runAfter": {
1034
+ "Check_Product_Stock": [
1035
+ "Succeeded"
1036
+ ]
1037
+ }
1038
+ }
1039
+ },
1040
+ "runAfter": {
1041
+ "Get_Customer_Details": [
1042
+ "Succeeded"
1043
+ ]
1044
+ }
1045
+ },
1046
+ "Check_Order_Validity": {
1047
+ "type": "If",
1048
+ "expression": {
1049
+ "and": [
1050
+ {
1051
+ "equals": [
1052
+ "@length(variables('invalidItems'))",
1053
+ 0
1054
+ ]
1055
+ },
1056
+ {
1057
+ "greater": [
1058
+ "@length(variables('validItems'))",
1059
+ 0
1060
+ ]
1061
+ }
1062
+ ]
1063
+ },
1064
+ "actions": {
1065
+ "Process_Valid_Order": {
1066
+ "type": "Http",
1067
+ "inputs": {
1068
+ "method": "POST",
1069
+ "uri": "https://api.example.com/orders",
1070
+ "headers": {
1071
+ "Content-Type": "application/json",
1072
+ "Authorization": "Bearer @{body('Get_API_Key')?['value']}"
1073
+ },
1074
+ "body": {
1075
+ "orderId": "@body('Parse_Message')?['data']?['orderId']",
1076
+ "customerId": "@body('Parse_Message')?['data']?['customerId']",
1077
+ "customerName": "@body('Get_Customer_Details')?['name']",
1078
+ "items": "@variables('validItems')",
1079
+ "processedTime": "@utcNow()",
1080
+ "eventId": "@body('Parse_Message')?['eventId']"
1081
+ }
1082
+ }
1083
+ },
1084
+ "Send_Order_Confirmation": {
1085
+ "type": "ApiConnection",
1086
+ "inputs": {
1087
+ "host": {
1088
+ "connection": {
1089
+ "name": "@parameters('$connections')['office365']['connectionId']"
1090
+ }
1091
+ },
1092
+ "method": "post",
1093
+ "path": "/v2/Mail",
1094
+ "body": {
1095
+ "To": "@body('Get_Customer_Details')?['email']",
1096
+ "Subject": "Order Confirmation: @{body('Parse_Message')?['data']?['orderId']}",
1097
+ "Body": "<p>Dear @{body('Get_Customer_Details')?['name']},</p><p>Your order has been successfully processed.</p><p>Order ID: @{body('Parse_Message')?['data']?['orderId']}</p><p>Thank you for your business!</p>",
1098
+ "Importance": "Normal",
1099
+ "IsHtml": true
1100
+ }
1101
+ },
1102
+ "runAfter": {
1103
+ "Process_Valid_Order": [
1104
+ "Succeeded"
1105
+ ]
1106
+ }
1107
+ },
1108
+ "Complete_Message": {
1109
+ "type": "ApiConnection",
1110
+ "inputs": {
1111
+ "host": {
1112
+ "connection": {
1113
+ "name": "@parameters('$connections')['servicebus']['connectionId']"
1114
+ }
1115
+ },
1116
+ "method": "post",
1117
+ "path": "/messages/complete",
1118
+ "body": {
1119
+ "lockToken": "@triggerBody()?['LockToken']",
1120
+ "sessionId": "@triggerBody()?['SessionId']",
1121
+ "queueName": "@parameters('serviceBusQueueName')"
1122
+ }
1123
+ },
1124
+ "runAfter": {
1125
+ "Send_Order_Confirmation": [
1126
+ "Succeeded"
1127
+ ]
1128
+ }
1129
+ }
1130
+ },
1131
+ "else": {
1132
+ "actions": {
1133
+ "Send_Invalid_Stock_Notification": {
1134
+ "type": "ApiConnection",
1135
+ "inputs": {
1136
+ "host": {
1137
+ "connection": {
1138
+ "name": "@parameters('$connections')['office365']['connectionId']"
1139
+ }
1140
+ },
1141
+ "method": "post",
1142
+ "path": "/v2/Mail",
1143
+ "body": {
1144
+ "To": "@body('Get_Customer_Details')?['email']",
1145
+ "Subject": "Order Cannot Be Processed: @{body('Parse_Message')?['data']?['orderId']}",
1146
+ "Body": "<p>Dear @{body('Get_Customer_Details')?['name']},</p><p>We regret to inform you that your order cannot be processed due to insufficient stock for the following items:</p><p>@{join(variables('invalidItems'), '</p><p>')}</p><p>Please adjust your order and try again.</p>",
1147
+ "Importance": "High",
1148
+ "IsHtml": true
1149
+ }
1150
+ }
1151
+ },
1152
+ "Dead_Letter_Message": {
1153
+ "type": "ApiConnection",
1154
+ "inputs": {
1155
+ "host": {
1156
+ "connection": {
1157
+ "name": "@parameters('$connections')['servicebus']['connectionId']"
1158
+ }
1159
+ },
1160
+ "method": "post",
1161
+ "path": "/messages/deadletter",
1162
+ "body": {
1163
+ "lockToken": "@triggerBody()?['LockToken']",
1164
+ "sessionId": "@triggerBody()?['SessionId']",
1165
+ "queueName": "@parameters('serviceBusQueueName')",
1166
+ "deadLetterReason": "InsufficientStock",
1167
+ "deadLetterDescription": "Order contained items with insufficient stock"
1168
+ }
1169
+ },
1170
+ "runAfter": {
1171
+ "Send_Invalid_Stock_Notification": [
1172
+ "Succeeded"
1173
+ ]
1174
+ }
1175
+ }
1176
+ }
1177
+ },
1178
+ "runAfter": {
1179
+ "Validate_Stock": [
1180
+ "Succeeded"
1181
+ ]
1182
+ }
1183
+ }
1184
+ },
1185
+ "runAfter": {
1186
+ "Initialize_Variables": [
1187
+ "Succeeded"
1188
+ ]
1189
+ }
1190
+ },
1191
+ "Initialize_Variables": {
1192
+ "type": "InitializeVariable",
1193
+ "inputs": {
1194
+ "variables": [
1195
+ {
1196
+ "name": "validItems",
1197
+ "type": "array",
1198
+ "value": []
1199
+ },
1200
+ {
1201
+ "name": "invalidItems",
1202
+ "type": "array",
1203
+ "value": []
1204
+ }
1205
+ ]
1206
+ },
1207
+ "runAfter": {
1208
+ "Parse_Message": [
1209
+ "Succeeded"
1210
+ ]
1211
+ }
1212
+ },
1213
+ "Handle_Process_Error": {
1214
+ "type": "Scope",
1215
+ "actions": {
1216
+ "Log_Error_Details": {
1217
+ "type": "ApiConnection",
1218
+ "inputs": {
1219
+ "host": {
1220
+ "connection": {
1221
+ "name": "@parameters('$connections')['applicationinsights']['connectionId']"
1222
+ }
1223
+ },
1224
+ "method": "post",
1225
+ "body": {
1226
+ "LogType": "OrderProcessingError",
1227
+ "EventId": "@body('Parse_Message')?['eventId']",
1228
+ "OrderId": "@body('Parse_Message')?['data']?['orderId']",
1229
+ "CustomerId": "@body('Parse_Message')?['data']?['customerId']",
1230
+ "ErrorDetails": "@result('Try_Process_Order')",
1231
+ "Timestamp": "@utcNow()"
1232
+ }
1233
+ }
1234
+ },
1235
+ "Abandon_Message": {
1236
+ "type": "ApiConnection",
1237
+ "inputs": {
1238
+ "host": {
1239
+ "connection": {
1240
+ "name": "@parameters('$connections')['servicebus']['connectionId']"
1241
+ }
1242
+ },
1243
+ "method": "post",
1244
+ "path": "/messages/abandon",
1245
+ "body": {
1246
+ "lockToken": "@triggerBody()?['LockToken']",
1247
+ "sessionId": "@triggerBody()?['SessionId']",
1248
+ "queueName": "@parameters('serviceBusQueueName')"
1249
+ }
1250
+ },
1251
+ "runAfter": {
1252
+ "Log_Error_Details": [
1253
+ "Succeeded"
1254
+ ]
1255
+ }
1256
+ },
1257
+ "Send_Alert_To_Operations": {
1258
+ "type": "ApiConnection",
1259
+ "inputs": {
1260
+ "host": {
1261
+ "connection": {
1262
+ "name": "@parameters('$connections')['office365']['connectionId']"
1263
+ }
1264
+ },
1265
+ "method": "post",
1266
+ "path": "/v2/Mail",
1267
+ "body": {
1268
+ "To": "operations@example.com",
1269
+ "Subject": "Order Processing Error: @{body('Parse_Message')?['data']?['orderId']}",
1270
+ "Body": "<p>An error occurred while processing an order:</p><p>Order ID: @{body('Parse_Message')?['data']?['orderId']}</p><p>Customer ID: @{body('Parse_Message')?['data']?['customerId']}</p><p>Error: @{result('Try_Process_Order')}</p>",
1271
+ "Importance": "High",
1272
+ "IsHtml": true
1273
+ }
1274
+ },
1275
+ "runAfter": {
1276
+ "Abandon_Message": [
1277
+ "Succeeded"
1278
+ ]
1279
+ }
1280
+ }
1281
+ },
1282
+ "runAfter": {
1283
+ "Try_Process_Order": [
1284
+ "Failed",
1285
+ "TimedOut"
1286
+ ]
1287
+ }
1288
+ }
1289
+ },
1290
+ "contentVersion": "1.0.0.0",
1291
+ "outputs": {},
1292
+ "parameters": {
1293
+ "$connections": {
1294
+ "defaultValue": {},
1295
+ "type": "Object"
1296
+ },
1297
+ "serviceBusQueueName": {
1298
+ "type": "string",
1299
+ "defaultValue": "orders"
1300
+ }
1301
+ },
1302
+ "triggers": {
1303
+ "When_a_message_is_received_in_a_queue": {
1304
+ "type": "ApiConnectionWebhook",
1305
+ "inputs": {
1306
+ "host": {
1307
+ "connection": {
1308
+ "name": "@parameters('$connections')['servicebus']['connectionId']"
1309
+ }
1310
+ },
1311
+ "body": {
1312
+ "isSessionsEnabled": true
1313
+ },
1314
+ "path": "/subscriptionListener",
1315
+ "queries": {
1316
+ "queueName": "@parameters('serviceBusQueueName')",
1317
+ "subscriptionType": "Main"
1318
+ }
1319
+ }
1320
+ }
1321
+ }
1322
+ },
1323
+ "parameters": {
1324
+ "$connections": {
1325
+ "value": {
1326
+ "keyvault": {
1327
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/keyvault",
1328
+ "connectionName": "keyvault",
1329
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/keyvault"
1330
+ },
1331
+ "servicebus": {
1332
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/servicebus",
1333
+ "connectionName": "servicebus",
1334
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/servicebus"
1335
+ },
1336
+ "office365": {
1337
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/office365",
1338
+ "connectionName": "office365",
1339
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/office365"
1340
+ },
1341
+ "applicationinsights": {
1342
+ "connectionId": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/connections/applicationinsights",
1343
+ "connectionName": "applicationinsights",
1344
+ "id": "/subscriptions/{subscription-id}/providers/Microsoft.Web/locations/{location}/managedApis/applicationinsights"
1345
+ }
1346
+ }
1347
+ }
1348
+ }
1349
+ }
1350
+ ```
1351
+
1352
+ ## Advanced Exception Handling and Monitoring
1353
+
1354
+ ### Comprehensive Exception Handling Strategy
1355
+
1356
+ Implement a multi-layered exception handling approach for robust workflows:
1357
+
1358
+ 1. **Preventative Measures**:
1359
+ - Use schema validation for all incoming messages
1360
+ - Implement defensive expression evaluations using `coalesce()` and `?` operators
1361
+ - Add pre-condition checks before critical operations
1362
+
1363
+ 2. **Runtime Error Handling**:
1364
+ - Use structured error handling scopes with nested try/catch patterns
1365
+ - Implement circuit breaker patterns for external dependencies
1366
+ - Capture and handle specific error types differently
1367
+
1368
+ ```json
1369
+ "Process_With_Comprehensive_Error_Handling": {
1370
+ "type": "Scope",
1371
+ "actions": {
1372
+ "Try_Primary_Action": {
1373
+ "type": "Scope",
1374
+ "actions": {
1375
+ "Main_Operation": {
1376
+ "type": "Http",
1377
+ "inputs": { "method": "GET", "uri": "https://api.example.com/resource" }
1378
+ }
1379
+ }
1380
+ },
1381
+ "Handle_Connection_Errors": {
1382
+ "type": "Scope",
1383
+ "actions": {
1384
+ "Log_Connection_Error": {
1385
+ "type": "ApiConnection",
1386
+ "inputs": {
1387
+ "host": {
1388
+ "connection": {
1389
+ "name": "@parameters('$connections')['loganalytics']['connectionId']"
1390
+ }
1391
+ },
1392
+ "method": "post",
1393
+ "body": {
1394
+ "LogType": "ConnectionError",
1395
+ "ErrorCategory": "Network",
1396
+ "StatusCode": "@{result('Try_Primary_Action')?['outputs']?['Main_Operation']?['statusCode']}",
1397
+ "ErrorMessage": "@{result('Try_Primary_Action')?['error']?['message']}"
1398
+ }
1399
+ }
1400
+ },
1401
+ "Invoke_Fallback_Endpoint": {
1402
+ "type": "Http",
1403
+ "inputs": { "method": "GET", "uri": "https://fallback-api.example.com/resource" }
1404
+ }
1405
+ },
1406
+ "runAfter": {
1407
+ "Try_Primary_Action": ["Failed"]
1408
+ }
1409
+ },
1410
+ "Handle_Business_Logic_Errors": {
1411
+ "type": "Scope",
1412
+ "actions": {
1413
+ "Parse_Error_Response": {
1414
+ "type": "ParseJson",
1415
+ "inputs": {
1416
+ "content": "@outputs('Try_Primary_Action')?['Main_Operation']?['body']",
1417
+ "schema": {
1418
+ "type": "object",
1419
+ "properties": {
1420
+ "errorCode": { "type": "string" },
1421
+ "errorMessage": { "type": "string" }
1422
+ }
1423
+ }
1424
+ }
1425
+ },
1426
+ "Switch_On_Error_Type": {
1427
+ "type": "Switch",
1428
+ "expression": "@body('Parse_Error_Response')?['errorCode']",
1429
+ "cases": {
1430
+ "ResourceNotFound": {
1431
+ "actions": { "Create_Resource": { "type": "Http", "inputs": {} } }
1432
+ },
1433
+ "ValidationError": {
1434
+ "actions": { "Resubmit_With_Defaults": { "type": "Http", "inputs": {} } }
1435
+ },
1436
+ "PermissionDenied": {
1437
+ "actions": { "Elevate_Permissions": { "type": "Http", "inputs": {} } }
1438
+ }
1439
+ },
1440
+ "default": {
1441
+ "actions": { "Send_To_Support_Queue": { "type": "ApiConnection", "inputs": {} } }
1442
+ }
1443
+ }
1444
+ },
1445
+ "runAfter": {
1446
+ "Try_Primary_Action": ["Succeeded"]
1447
+ }
1448
+ }
1449
+ }
1450
+ }
1451
+ ```
1452
+
1453
+ 3. **Centralized Error Logging**:
1454
+ - Create a dedicated Logic App for error handling that other workflows can call
1455
+ - Log errors with correlation IDs for traceability across systems
1456
+ - Categorize errors by type and severity for better analysis
1457
+
1458
+ ### Advanced Monitoring Architecture
1459
+
1460
+ Implement a comprehensive monitoring strategy that covers:
1461
+
1462
+ 1. **Operational Monitoring**:
1463
+ - **Health Probes**: Create dedicated health check workflows
1464
+ - **Heartbeat Patterns**: Implement periodic check-ins to verify system health
1465
+ - **Dead Letter Handling**: Process and analyze failed messages
1466
+
1467
+ 2. **Business Process Monitoring**:
1468
+ - **Business Metrics**: Track key business KPIs (order processing times, approval rates)
1469
+ - **SLA Monitoring**: Measure performance against service level agreements
1470
+ - **Correlated Tracing**: Implement end-to-end transaction tracking
1471
+
1472
+ 3. **Alerting Strategy**:
1473
+ - **Multi-channel Alerts**: Configure alerts to appropriate channels (email, SMS, Teams)
1474
+ - **Severity-based Routing**: Route alerts based on business impact
1475
+ - **Alert Correlation**: Group related alerts to prevent alert fatigue
1476
+
1477
+ ```json
1478
+ "Monitor_Transaction_SLA": {
1479
+ "type": "Scope",
1480
+ "actions": {
1481
+ "Calculate_Processing_Time": {
1482
+ "type": "Compose",
1483
+ "inputs": "@{div(sub(ticks(utcNow()), ticks(triggerBody()?['startTime'])), 10000000)}"
1484
+ },
1485
+ "Check_SLA_Breach": {
1486
+ "type": "If",
1487
+ "expression": "@greater(outputs('Calculate_Processing_Time'), parameters('slaThresholdSeconds'))",
1488
+ "actions": {
1489
+ "Log_SLA_Breach": {
1490
+ "type": "ApiConnection",
1491
+ "inputs": {
1492
+ "host": {
1493
+ "connection": {
1494
+ "name": "@parameters('$connections')['loganalytics']['connectionId']"
1495
+ }
1496
+ },
1497
+ "method": "post",
1498
+ "body": {
1499
+ "LogType": "SLABreach",
1500
+ "TransactionId": "@{triggerBody()?['transactionId']}",
1501
+ "ProcessingTimeSeconds": "@{outputs('Calculate_Processing_Time')}",
1502
+ "SLAThresholdSeconds": "@{parameters('slaThresholdSeconds')}",
1503
+ "BreachSeverity": "@if(greater(outputs('Calculate_Processing_Time'), mul(parameters('slaThresholdSeconds'), 2)), 'Critical', 'Warning')"
1504
+ }
1505
+ }
1506
+ },
1507
+ "Send_SLA_Alert": {
1508
+ "type": "ApiConnection",
1509
+ "inputs": {
1510
+ "host": {
1511
+ "connection": {
1512
+ "name": "@parameters('$connections')['teams']['connectionId']"
1513
+ }
1514
+ },
1515
+ "method": "post",
1516
+ "body": {
1517
+ "notificationTitle": "SLA Breach Alert",
1518
+ "message": "Transaction @{triggerBody()?['transactionId']} exceeded SLA by @{sub(outputs('Calculate_Processing_Time'), parameters('slaThresholdSeconds'))} seconds",
1519
+ "channelId": "@{if(greater(outputs('Calculate_Processing_Time'), mul(parameters('slaThresholdSeconds'), 2)), parameters('criticalAlertChannelId'), parameters('warningAlertChannelId'))}"
1520
+ }
1521
+ }
1522
+ }
1523
+ }
1524
+ }
1525
+ }
1526
+ }
1527
+ ```
1528
+
1529
+ ## API Management Integration
1530
+
1531
+ Integrate Logic Apps with Azure API Management for enhanced security, governance, and management:
1532
+
1533
+ ### API Management Frontend
1534
+
1535
+ - **Expose Logic Apps via API Management**:
1536
+ - Create API definitions for Logic App HTTP triggers
1537
+ - Apply consistent URL structures and versioning
1538
+ - Implement API policies for security and transformation
1539
+
1540
+ ### Policy Templates for Logic Apps
1541
+
1542
+ ```xml
1543
+ <!-- Logic App API Policy Example -->
1544
+ <policies>
1545
+ <inbound>
1546
+ <!-- Authentication -->
1547
+ <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized">
1548
+ <openid-config url="https://login.microsoftonline.com/{tenant-id}/.well-known/openid-configuration" />
1549
+ <required-claims>
1550
+ <claim name="aud" match="any">
1551
+ <value>api://mylogicapp</value>
1552
+ </claim>
1553
+ </required-claims>
1554
+ </validate-jwt>
1555
+
1556
+ <!-- Rate limiting -->
1557
+ <rate-limit calls="5" renewal-period="60" />
1558
+
1559
+ <!-- Request transformation -->
1560
+ <set-header name="Correlation-Id" exists-action="override">
1561
+ <value>@(context.RequestId)</value>
1562
+ </set-header>
1563
+
1564
+ <!-- Logging -->
1565
+ <log-to-eventhub logger-id="api-logger">
1566
+ @{
1567
+ return new JObject(
1568
+ new JProperty("correlationId", context.RequestId),
1569
+ new JProperty("api", context.Api.Name),
1570
+ new JProperty("operation", context.Operation.Name),
1571
+ new JProperty("user", context.User.Email),
1572
+ new JProperty("ip", context.Request.IpAddress)
1573
+ ).ToString();
1574
+ }
1575
+ </log-to-eventhub>
1576
+ </inbound>
1577
+ <backend>
1578
+ <forward-request />
1579
+ </backend>
1580
+ <outbound>
1581
+ <!-- Response transformation -->
1582
+ <set-header name="X-Powered-By" exists-action="delete" />
1583
+ </outbound>
1584
+ <on-error>
1585
+ <base />
1586
+ </on-error>
1587
+ </policies>
1588
+ ```
1589
+
1590
+ ### Workflow as API Pattern
1591
+
1592
+ - **Implement Workflow as API pattern**:
1593
+ - Design Logic Apps specifically as API backends
1594
+ - Use request triggers with OpenAPI schemas
1595
+ - Apply consistent response patterns
1596
+ - Implement proper status codes and error handling
1597
+
1598
+ ```json
1599
+ "triggers": {
1600
+ "manual": {
1601
+ "type": "Request",
1602
+ "kind": "Http",
1603
+ "inputs": {
1604
+ "schema": {
1605
+ "$schema": "http://json-schema.org/draft-04/schema#",
1606
+ "type": "object",
1607
+ "properties": {
1608
+ "customerId": {
1609
+ "type": "string",
1610
+ "description": "The unique identifier for the customer"
1611
+ },
1612
+ "requestType": {
1613
+ "type": "string",
1614
+ "enum": ["Profile", "OrderSummary"],
1615
+ "description": "The type of request to process"
1616
+ }
1617
+ },
1618
+ "required": ["customerId", "requestType"]
1619
+ },
1620
+ "method": "POST"
1621
+ }
1622
+ }
1623
+ }
1624
+ ```
1625
+
1626
+ ## Versioning Strategies
1627
+
1628
+ Implement robust versioning approaches for Logic Apps and Power Automate flows:
1629
+
1630
+ ### Versioning Patterns
1631
+
1632
+ 1. **URI Path Versioning**:
1633
+ - Include version in HTTP trigger path (/api/v1/resource)
1634
+ - Maintain separate Logic Apps for each major version
1635
+
1636
+ 2. **Parameter Versioning**:
1637
+ - Add version parameter to workflow definitions
1638
+ - Use conditional logic based on version parameter
1639
+
1640
+ 3. **Side-by-Side Versioning**:
1641
+ - Deploy new versions alongside existing ones
1642
+ - Implement traffic routing between versions
1643
+
1644
+ ### Version Migration Strategy
1645
+
1646
+ ```json
1647
+ "actions": {
1648
+ "Check_Request_Version": {
1649
+ "type": "Switch",
1650
+ "expression": "@triggerBody()?['apiVersion']",
1651
+ "cases": {
1652
+ "1.0": {
1653
+ "actions": {
1654
+ "Process_V1_Format": {
1655
+ "type": "Scope",
1656
+ "actions": { }
1657
+ }
1658
+ }
1659
+ },
1660
+ "2.0": {
1661
+ "actions": {
1662
+ "Process_V2_Format": {
1663
+ "type": "Scope",
1664
+ "actions": { }
1665
+ }
1666
+ }
1667
+ }
1668
+ },
1669
+ "default": {
1670
+ "actions": {
1671
+ "Return_Version_Error": {
1672
+ "type": "Response",
1673
+ "kind": "Http",
1674
+ "inputs": {
1675
+ "statusCode": 400,
1676
+ "body": {
1677
+ "error": "Unsupported API version",
1678
+ "supportedVersions": ["1.0", "2.0"]
1679
+ }
1680
+ }
1681
+ }
1682
+ }
1683
+ }
1684
+ }
1685
+ }
1686
+ ```
1687
+
1688
+ ### ARM Template Deployment for Different Versions
1689
+
1690
+ ```json
1691
+ {
1692
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
1693
+ "contentVersion": "1.0.0.0",
1694
+ "parameters": {
1695
+ "logicAppName": {
1696
+ "type": "string",
1697
+ "metadata": {
1698
+ "description": "Base name of the Logic App"
1699
+ }
1700
+ },
1701
+ "version": {
1702
+ "type": "string",
1703
+ "metadata": {
1704
+ "description": "Version of the Logic App to deploy"
1705
+ },
1706
+ "allowedValues": ["v1", "v2", "v3"]
1707
+ }
1708
+ },
1709
+ "variables": {
1710
+ "fullLogicAppName": "[concat(parameters('logicAppName'), '-', parameters('version'))]",
1711
+ "workflowDefinitionMap": {
1712
+ "v1": "[variables('v1Definition')]",
1713
+ "v2": "[variables('v2Definition')]",
1714
+ "v3": "[variables('v3Definition')]"
1715
+ },
1716
+ "v1Definition": {},
1717
+ "v2Definition": {},
1718
+ "v3Definition": {}
1719
+ },
1720
+ "resources": [
1721
+ {
1722
+ "type": "Microsoft.Logic/workflows",
1723
+ "apiVersion": "2019-05-01",
1724
+ "name": "[variables('fullLogicAppName')]",
1725
+ "location": "[resourceGroup().location]",
1726
+ "properties": {
1727
+ "definition": "[variables('workflowDefinitionMap')[parameters('version')]]"
1728
+ }
1729
+ }
1730
+ ]
1731
+ }
1732
+ ```
1733
+
1734
+ ## Cost Optimization Techniques
1735
+
1736
+ Implement strategies to optimize the cost of Logic Apps and Power Automate solutions:
1737
+
1738
+ ### Logic Apps Consumption Optimization
1739
+
1740
+ 1. **Trigger Optimization**:
1741
+ - Use batching in triggers to process multiple items in a single run
1742
+ - Implement proper recurrence intervals (avoid over-polling)
1743
+ - Use webhook-based triggers instead of polling triggers
1744
+
1745
+ 2. **Action Optimization**:
1746
+ - Reduce action count by combining related operations
1747
+ - Use built-in functions instead of custom actions
1748
+ - Implement proper concurrency settings for foreach loops
1749
+
1750
+ 3. **Data Transfer Optimization**:
1751
+ - Minimize payload sizes in HTTP requests/responses
1752
+ - Use local file operations instead of repeated API calls
1753
+ - Implement data compression for large payloads
1754
+
1755
+ ### Logic Apps Standard (Workflow) Cost Optimization
1756
+
1757
+ 1. **App Service Plan Selection**:
1758
+ - Right-size App Service Plans for workload requirements
1759
+ - Implement auto-scaling based on load patterns
1760
+ - Consider reserved instances for predictable workloads
1761
+
1762
+ 2. **Resource Sharing**:
1763
+ - Consolidate workflows in shared App Service Plans
1764
+ - Implement shared connections and integration resources
1765
+ - Use integration accounts efficiently
1766
+
1767
+ ### Power Automate Licensing Optimization
1768
+
1769
+ 1. **License Type Selection**:
1770
+ - Choose appropriate license types based on workflow complexity
1771
+ - Implement proper user assignment for per-user plans
1772
+ - Consider premium connectors usage requirements
1773
+
1774
+ 2. **API Call Reduction**:
1775
+ - Cache frequently accessed data
1776
+ - Implement batch processing for multiple records
1777
+ - Reduce trigger frequency for scheduled flows
1778
+
1779
+ ### Cost Monitoring and Governance
1780
+
1781
+ ```json
1782
+ "Monitor_Execution_Costs": {
1783
+ "type": "ApiConnection",
1784
+ "inputs": {
1785
+ "host": {
1786
+ "connection": {
1787
+ "name": "@parameters('$connections')['loganalytics']['connectionId']"
1788
+ }
1789
+ },
1790
+ "method": "post",
1791
+ "body": {
1792
+ "LogType": "WorkflowCostMetrics",
1793
+ "WorkflowName": "@{workflow().name}",
1794
+ "ExecutionId": "@{workflow().run.id}",
1795
+ "ActionCount": "@{length(workflow().run.actions)}",
1796
+ "TriggerType": "@{workflow().triggers[0].kind}",
1797
+ "DataProcessedBytes": "@{workflow().run.transferred}",
1798
+ "ExecutionDurationSeconds": "@{div(workflow().run.duration, 'PT1S')}",
1799
+ "Timestamp": "@{utcNow()}"
1800
+ }
1801
+ },
1802
+ "runAfter": {
1803
+ "Main_Workflow_Actions": ["Succeeded", "Failed", "TimedOut"]
1804
+ }
1805
+ }
1806
+ ```
1807
+
1808
+ ## Enhanced Security Practices
1809
+
1810
+ Implement comprehensive security measures for Logic Apps and Power Automate workflows:
1811
+
1812
+ ### Sensitive Data Handling
1813
+
1814
+ 1. **Data Classification and Protection**:
1815
+ - Identify and classify sensitive data in workflows
1816
+ - Implement masking for sensitive data in logs and monitoring
1817
+ - Apply encryption for data at rest and in transit
1818
+
1819
+ 2. **Secure Parameter Handling**:
1820
+ - Use Azure Key Vault for all secrets and credentials
1821
+ - Implement dynamic parameter resolution at runtime
1822
+ - Apply parameter encryption for sensitive values
1823
+
1824
+ ```json
1825
+ "actions": {
1826
+ "Get_Database_Credentials": {
1827
+ "type": "ApiConnection",
1828
+ "inputs": {
1829
+ "host": {
1830
+ "connection": {
1831
+ "name": "@parameters('$connections')['keyvault']['connectionId']"
1832
+ }
1833
+ },
1834
+ "method": "get",
1835
+ "path": "/secrets/@{encodeURIComponent('database-connection-string')}/value"
1836
+ }
1837
+ },
1838
+ "Execute_Database_Query": {
1839
+ "type": "ApiConnection",
1840
+ "inputs": {
1841
+ "host": {
1842
+ "connection": {
1843
+ "name": "@parameters('$connections')['sql']['connectionId']"
1844
+ }
1845
+ },
1846
+ "method": "post",
1847
+ "path": "/datasets/default/query",
1848
+ "body": {
1849
+ "query": "SELECT * FROM Customers WHERE CustomerId = @CustomerId",
1850
+ "parameters": {
1851
+ "CustomerId": "@triggerBody()?['customerId']"
1852
+ },
1853
+ "connectionString": "@body('Get_Database_Credentials')?['value']"
1854
+ }
1855
+ },
1856
+ "runAfter": {
1857
+ "Get_Database_Credentials": ["Succeeded"]
1858
+ }
1859
+ }
1860
+ }
1861
+ ```
1862
+
1863
+ ### Advanced Identity and Access Controls
1864
+
1865
+ 1. **Fine-grained Access Control**:
1866
+ - Implement custom roles for Logic Apps management
1867
+ - Apply principle of least privilege for connections
1868
+ - Use managed identities for all Azure service access
1869
+
1870
+ 2. **Access Reviews and Governance**:
1871
+ - Implement regular access reviews for Logic Apps resources
1872
+ - Apply Just-In-Time access for administrative operations
1873
+ - Audit all access and configuration changes
1874
+
1875
+ 3. **Network Security**:
1876
+ - Implement network isolation using private endpoints
1877
+ - Apply IP restrictions for trigger endpoints
1878
+ - Use Virtual Network integration for Logic Apps Standard
1879
+
1880
+ ```json
1881
+ {
1882
+ "resources": [
1883
+ {
1884
+ "type": "Microsoft.Logic/workflows",
1885
+ "apiVersion": "2019-05-01",
1886
+ "name": "[parameters('logicAppName')]",
1887
+ "location": "[parameters('location')]",
1888
+ "identity": {
1889
+ "type": "SystemAssigned"
1890
+ },
1891
+ "properties": {
1892
+ "accessControl": {
1893
+ "triggers": {
1894
+ "allowedCallerIpAddresses": [
1895
+ {
1896
+ "addressRange": "13.91.0.0/16"
1897
+ },
1898
+ {
1899
+ "addressRange": "40.112.0.0/13"
1900
+ }
1901
+ ]
1902
+ },
1903
+ "contents": {
1904
+ "allowedCallerIpAddresses": [
1905
+ {
1906
+ "addressRange": "13.91.0.0/16"
1907
+ },
1908
+ {
1909
+ "addressRange": "40.112.0.0/13"
1910
+ }
1911
+ ]
1912
+ },
1913
+ "actions": {
1914
+ "allowedCallerIpAddresses": [
1915
+ {
1916
+ "addressRange": "13.91.0.0/16"
1917
+ },
1918
+ {
1919
+ "addressRange": "40.112.0.0/13"
1920
+ }
1921
+ ]
1922
+ }
1923
+ },
1924
+ "definition": {}
1925
+ }
1926
+ }
1927
+ ]
1928
+ }
1929
+ ```
1930
+
1931
+ ## Additional Resources
1932
+
1933
+ - [Azure Logic Apps Documentation](https://docs.microsoft.com/en-us/azure/logic-apps/)
1934
+ - [Power Automate Documentation](https://docs.microsoft.com/en-us/power-automate/)
1935
+ - [Workflow Definition Language Schema](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language)
1936
+ - [Power Automate vs Logic Apps Comparison](https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs)
1937
+ - [Enterprise Integration Patterns](https://docs.microsoft.com/en-us/azure/logic-apps/enterprise-integration-overview)
1938
+ - [Logic Apps B2B Documentation](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-enterprise-integration-b2b)
1939
+ - [Azure Logic Apps Limits and Configuration](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-limits-and-config)
1940
+ - [Logic Apps Performance Optimization](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-performance-optimization)
1941
+ - [Logic Apps Security Overview](https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-securing-a-logic-app)
1942
+ - [API Management and Logic Apps Integration](https://docs.microsoft.com/en-us/azure/api-management/api-management-create-api-logic-app)
1943
+ - [Logic Apps Standard Networking](https://docs.microsoft.com/en-us/azure/logic-apps/connect-virtual-network-vnet-isolated-environment)