[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A2NTVPAN1KA0F2TYBFD5M":3,"skill-same:01M69A2NTVPAN1KA0F2TYBFD5M":81},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M69A2NTVPAN1KA0F2TYBFD5M","al-test-generation",null,"Guide for creating AL tests for Microsoft Dynamics 365 Business Central. Use this when asked to write, create, or generate AL test codeunits, test procedures, or test automation for Business Central.","microsoft\u002FBC-Bench","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69A2DVX16MBYVPEN8MW9M7A",61,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002Fmicrosoft-BCApps\u002Fskills\u002Fal-test-generation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,9,41],"test","al test generation","test generation","generation","when","automation","for","dynamics","tests","use","guide","business","write","generate","create","dynamics 365 business central","dynamics 365","test automation","2026-11-10 10:12:30",false,"---\nname: al-test-generation\ndescription: Guide for creating AL tests for Microsoft Dynamics 365 Business Central. Use this when asked to write, create, or generate AL test codeunits, test procedures, or test automation for Business Central.\n---\n\nTo create AL tests for Microsoft Dynamics 365 Business Central, follow this process:\n\n## 1. Analyze the Code Under Test\n\nBefore writing any test code:\n1. Read and understand the procedure or functionality being tested\n2. Trace through all code paths to identify UI interactions\n3. Examine table definitions for TableRelation constraints\n\n## 2. Identify Required Handler Methods\n\n**CRITICAL: Tests fail with \"Unhandled UI\" errors when handlers are missing.**\n\nLook for these patterns in the code under test:\n\n| Code Pattern                          | Required Handler            |\n| ------------------------------------- | --------------------------- |\n| `Confirm()`                           | `[ConfirmHandler]`          |\n| `Message()`                           | `[MessageHandler]`          |\n| `StrMenu()`                           | `[StrMenuHandler]`          |\n| `Page.Run()`                          | `[PageHandler]`             |\n| `Page.RunModal()`                     | `[ModalPageHandler]`        |\n| `Report.Run()` or `Report.RunModal()` | `[ReportHandler]`           |\n| Report request page                   | `[RequestPageHandler]`      |\n| `Hyperlink()`                         | `[HyperlinkHandler]`        |\n| `Notification.Send()`                 | `[SendNotificationHandler]` |\n\n## 3. Analyze TableRelation Constraints\n\n**CRITICAL: Tests fail with validation errors when inserting data that violates TableRelation constraints.**\n\nBefore inserting test data:\n1. Read the table definition for all fields receiving values\n2. Identify fields with `TableRelation` properties\n3. Ensure related records exist before inserting test data\n4. Use Library functions (e.g., `LibrarySales`, `LibraryPurchase`) to create prerequisite data\n\n## 4. Write Test Structure\n\nFollow the AAA pattern (Arrange-Act-Assert):\n\n```AL\n[Test]\n[HandlerFunctions('RequiredHandlers')]\nprocedure TestProcedureName()\nbegin\n    \u002F\u002F [GIVEN] Setup test data and preconditions\n    Initialize();\n    CreateTestData();\n\n    \u002F\u002F [WHEN] Execute the action being tested\n    ExecuteAction();\n\n    \u002F\u002F [THEN] Verify the expected results\n    VerifyResults();\nend;\n```\n\n## 5. Handler Method Signatures\n\n```AL\n[ConfirmHandler]\nprocedure ConfirmHandlerYes(Question: Text[1024]; var Reply: Boolean)\nbegin\n    Reply := true;\nend;\n\n[MessageHandler]\nprocedure MessageHandler(Message: Text[1024])\nbegin\n    \u002F\u002F Empty - suppresses message display\nend;\n\n[ModalPageHandler]\nprocedure ModalPageHandler(var TestPage: TestPage \"Page Name\")\nbegin\n    TestPage.OK().Invoke();\nend;\n```\n\n## 6. Best Practices\n\n- Use descriptive test procedure names that explain what is being tested\n- One assertion concept per test\n- Use Library Variable Storage to pass data between handlers and tests\n- Do NOT verify values inside handler procedures\n- Clean up test data in teardown or use transaction rollback\n- Use `Initialize()` procedure to set up common test fixtures\n","To create AL tests for Microsoft Dynamics 365 Business Central, follow this process:\n\n## 1. Analyze the Code Under Test\n\nBefore writing any test code:\n1. Read and understand the procedure or functionality being tested\n2. Trace through all code paths to identify UI interactions\n3. Examine table definitions for TableRelation constraints\n\n## 2. Identify Required Handler Methods\n\n**CRITICAL: Tests fail with \"Unhandled UI\" errors when handlers are missing.**\n\nLook for these patterns in the code under test:\n\n| Code Pattern                          | Required Handler            |\n| ------------------------------------- | --------------------------- |\n| `Confirm()`                           | `[ConfirmHandler]`          |\n| `Message()`                           | `[MessageHandler]`          |\n| `StrMenu()`                           | `[StrMenuHandler]`          |\n| `Page.Run()`                          | `[PageHandler]`             |\n| `Page.RunModal()`                     | `[ModalPageHandler]`        |\n| `Report.Run()` or `Report.RunModal()` | `[ReportHandler]`           |\n| Report request page                   | `[RequestPageHandler]`      |\n| `Hyperlink()`                         | `[HyperlinkHandler]`        |\n| `Notification.Send()`                 | `[SendNotificationHandler]` |\n\n## 3. Analyze TableRelation Constraints\n\n**CRITICAL: Tests fail with validation errors when inserting data that violates TableRelation constraints.**\n\nBefore inserting test data:\n1. Read the table definition for all fields receiving values\n2. Identify fields with `TableRelation` properties\n3. Ensure related records exist before inserting test data\n4. Use Library functions (e.g., `LibrarySales`, `LibraryPurchase`) to create prerequisite data\n\n## 4. Write Test Structure\n\nFollow the AAA pattern (Arrange-Act-Assert):\n\n```AL\n[Test]\n[HandlerFunctions('RequiredHandlers')]\nprocedure TestProcedureName()\nbegin\n    \u002F\u002F [GIVEN] Setup test data and preconditions\n    Initialize();\n    CreateTestData();\n\n    \u002F\u002F [WHEN] Execute the action being tested\n    ExecuteAction();\n\n    \u002F\u002F [THEN] Verify the expected results\n    VerifyResults();\nend;\n```\n\n## 5. Handler Method Signatures\n\n```AL\n[ConfirmHandler]\nprocedure ConfirmHandlerYes(Question: Text[1024]; var Reply: Boolean)\nbegin\n    Reply := true;\nend;\n\n[MessageHandler]\nprocedure MessageHandler(Message: Text[1024])\nbegin\n    \u002F\u002F Empty - suppresses message display\nend;\n\n[ModalPageHandler]\nprocedure ModalPageHandler(var TestPage: TestPage \"Page Name\")\nbegin\n    TestPage.OK().Invoke();\nend;\n```\n\n## 6. Best Practices\n\n- Use descriptive test procedure names that explain what is being tested\n- One assertion concept per test\n- Use Library Variable Storage to pass data between handlers and tests\n- Do NOT verify values inside handler procedures\n- Clean up test data in teardown or use transaction rollback\n- Use `Initialize()` procedure to set up common test fixtures\n",{"name":5,"description":7},"main","518f0b3d4413015ca37761f09fd760cc25bd5309","src\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002Fmicrosoft-BCApps\u002Fskills\u002Fal-test-generation",33,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench","https:\u002F\u002Fmicrosoft.github.io\u002FBC-Bench\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-11 23:27:02",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add microsoft\u002FBC-Bench --skill al-test-generation",{"tool":63,"command":64},"bunx","bunx skills add microsoft\u002FBC-Bench --skill al-test-generation",{"tool":66,"command":67},"pnpm","pnpm dlx skills add microsoft\u002FBC-Bench --skill al-test-generation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002Fmicrosoft-BCApps\u002Fskills\u002Fal-test-generation\u002FSKILL.md",true,[71,77],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"assets\u002Fprices_pl.json","ASSET","资产文件",309,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-go\u002Fblob\u002Fmain\u002Fexamples\u002Fskills\u002Fskills\u002Fgrocery-prices\u002Fassets\u002Fprices_pl.json",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"assets\u002Fprices_us.json",308,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-go\u002Fblob\u002Fmain\u002Fexamples\u002Fskills\u002Fskills\u002Fgrocery-prices\u002Fassets\u002Fprices_us.json",[82,103,127,155,161,189],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":42},"01M69A2ZC0BM89ZTW81TP4M1J1","bcbench-example","BC-Bench example skill — a no-op skill that only exists to prove the BC-Bench `plugins` experiment toggle loaded a plugin and made its skill available. USE FOR nothing real; it is a smoke-test marker. DO NOT USE FOR actual Business Central \u002F AL work.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Fplugins\u002Fbcbench-example\u002Fskills\u002Fbcbench-example\u002FSKILL.md",[],[89,90,24,91,92,93,94,35,33,95,96,97,98,99,100,101,30,102],"bcbench example","example","example skill","plugin","plugins","work","experiment","only","smoke","do","it","marker","op","prove",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":42},"01M69A2X616HCSYF8QFTHKKF0K","extensibility-request-implement","Implement a single Business Central extensibility request as an AL code change. The request is provided as plain text (a natural-language description of the extension point that is needed, usually a new integration event \u002F event publisher). The skill locates the affected AL code in the current repository, adds the requested extension point following the repository extensibility guidelines, and propagates the change across the W1 base layer and any same-named country\u002Fregion layer files. It edits only `.al` source files and leaves the changes unstaged in the working tree. No build, no tests, no commit, and no pull request. TRIGGER when the user asks to implement or add an extensibility request \u002F extension point \u002F integration event described in the provided text. DO NOT TRIGGER for bug fixes, for building or testing, or for opening pull requests.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002FmicrosoftInternal-NAV\u002Fskills\u002Fextensibility-request-implement\u002FSKILL.md",[],[110,111,112,113,114,115,116,117,38,118,119,120,121,122,96,123,124,125,126,28],"implement","extensibility request implement","extensibility","request","testing","pull requests","change","commit","code","repository","powershell","text","ask","files","across","affected","natural-language",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":136,"publishedAt":42},"01M69A2SGD763ZP785AQC97MSE","bc-ext-advisor","Guide a Business Central user through preparing a high-quality extensibility request and filing it as a GitHub issue in microsoft\u002FALAppExtensions. The skill classifies the request (event, external access, enum, or general enhancement), gathers the mandatory information for that type, checks it against the extensibility rules and blockers, drafts the issue against the standard template, and — only after explicit approval — submits it with the `gh` CLI. It is advisory and read-only against workspace code: it never edits, builds, or runs AL source. It applies only to Microsoft base-application AL objects. Runs interactively in VS Code Copilot Chat (agent mode) and the Copilot CLI. TRIGGER when a user wants to request an event, make a member public\u002Fglobal, add or extend an enum, or otherwise ask Microsoft to make base Business Central code more extensible. DO NOT TRIGGER for pure bug reports, for changes to non-Microsoft (custom) objects, or to write or fix AL code.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002FmicrosoftInternal-NAV\u002Fskills\u002Fbc-ext-advisor\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[137,138,139,140,9,141,142,143,144,118,120,145,146,122,147,148,149,96,150,151,152,153,154,28],"bc ext advisor","advisor","cli","github","vscode","copilot","copilot chat","run","access","template","command","fix","never","reports","objects","filing","information","mode",{"skillNo":156,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":42},"01M69A2QREAZ4S60E04QHTWM8Z","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002FmicrosoftInternal-NAV\u002Fskills\u002Fal-test-generation\u002FSKILL.md",[159],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[24,25,26,27,29,41,9,40,39,38,37,36,35,34,33,32,31,30,28],{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":173,"publishedAt":42},"01M69A2KSVE5QH2RNPW3XC9HGB","bc-al-query-mcp","Use when: writing, fixing, validating, or running Business Central AL query objects with bc_data MCP tools (and, optionally, Microsoft Learn MCP docs). Covers AL query syntax, table discovery, schemas, relations, joins, filters, FlowFields, pagination, and read-only data retrieval.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002Fsrc\u002Fbcbench\u002Fagent\u002Fshared\u002Finstructions\u002Fdataquery\u002Fskills\u002Fbc-al-query-mcp\u002FSKILL.md",[167,168],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":169,"categoryName":170,"taxonomyType":171,"taxonomyTypeDesc":172},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[174,175,176,177,178,9,179,180,181,148,35,33,96,182,151,183,184,185,186,187,28,188],"MCP","bc al query mcp","query","writing","docs","learn","discovery","question","filters","false","with","learn mcp","read-only","true","running",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":196,"publishedAt":42},"01M69A2HHRV6WE52A3DVJ6WHNV","update-agent-harness","Update an agent harness used by BC-Bench. Use when bumping GitHub Copilot CLI or Claude Code, reviewing intervening release notes and breaking changes, curating benchmark-worthy model choices, updating the BC-Bench version, or preparing the release handoff.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FBC-Bench\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fupdate-agent-harness\u002FSKILL.md",[195],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[197,198,199,200,201,139,202,140,203,142,204,205,118,206,207,208,33,209,210,211,28],"update agent harness","update","harness","agent harness","update agent","handoff","github copilot","notes","release notes","benchmark","release","model","version","github copilot cli","changes"]