{"id":17932958,"url":"https://github.com/andreesteve/crthandyman","last_synced_at":"2026-01-31T12:02:23.987Z","repository":{"id":29517094,"uuid":"90822097","full_name":"andreesteve/crthandyman","owner":"andreesteve","description":"A Visual Studio extension to automate code authoring for the Microsoft Dynamics 365 Commerce","archived":false,"fork":false,"pushed_at":"2023-03-06T07:21:26.000Z","size":422,"stargazers_count":0,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-14T13:05:01.394Z","etag":null,"topics":["commerce-runtime-handyman","dynamics-365","dynamics-365-commerce","visual-studio"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreesteve.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-10T04:50:17.000Z","updated_at":"2021-08-01T22:57:41.000Z","dependencies_parsed_at":"2024-10-28T21:47:22.017Z","dependency_job_id":null,"html_url":"https://github.com/andreesteve/crthandyman","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/andreesteve/crthandyman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreesteve%2Fcrthandyman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreesteve%2Fcrthandyman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreesteve%2Fcrthandyman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreesteve%2Fcrthandyman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreesteve","download_url":"https://codeload.github.com/andreesteve/crthandyman/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreesteve%2Fcrthandyman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28941922,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T11:39:38.044Z","status":"ssl_error","status_checked_at":"2026-01-31T11:39:27.765Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commerce-runtime-handyman","dynamics-365","dynamics-365-commerce","visual-studio"],"created_at":"2024-10-28T21:34:32.089Z","updated_at":"2026-01-31T12:02:23.968Z","avatar_url":"https://github.com/andreesteve.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n    \u003ctitle\u003eCommerce Runtime Handyman\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\n    \u003ch1 id=\"commerce-runtime-handyman\"\u003eCommerce Runtime Handyman\u003c/h1\u003e\n\u003cp\u003eA Visual Studio extension to automate code authoring for the \u003ca href=\"https://ax.help.dynamics.com/en/wiki/commerce-runtime-overview/\"\u003eMicrosoft Dynamics AX Commerce Runtime\u003c/a\u003e framework.\u003c/p\u003e\n\u003cp\u003ePlease report any issues \u003ca href=\"https://github.com/andreesteve/crthandyman/issues\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"supported-versions\"\u003eSupported versions\u003c/h2\u003e\n\u003cp\u003eCurrently supporting:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVisual Studio 2017 15.1 (26403.7)\u003c/li\u003e\n\u003cli\u003eVisual Studio 2019 16.9 (693.2781)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"installation\"\u003eInstallation\u003c/h2\u003e\n\u003cp\u003eYou can install it:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003efrom the \u003ca href=\"https://marketplace.visualstudio.com/vsgallery/fa0e1a03-00a7-45db-a6ef-dab456be41fd\"\u003eVisual Studio Gallery page\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eor by searching by \u003cstrong\u003eCommerce Runtime Handyman\u003c/strong\u003e in \u003cem\u003eVisual Studio -\u0026gt; Tools -\u0026gt; Extensions and Updates\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"features\"\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSet default project for creation of \u003cem\u003erequest\u003c/em\u003e and \u003cem\u003eresponse\u003c/em\u003e classes\u003c/li\u003e\n\u003cli\u003eCreate \u003cem\u003erequest\u003c/em\u003e and \u003cem\u003eresponse\u003c/em\u003e classes out of method definition, including documentation\u003c/li\u003e\n\u003cli\u003eNavigate to the \u003cem\u003eRequestHandler\u003c/em\u003e that implements a \u003cem\u003erequest\u003c/em\u003e type\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"quick-start\"\u003eQuick start\u003c/h2\u003e\n\u003ch3 id=\"navigate-to-the-requesthandler-that-implements-a-request-type\"\u003eNavigate to the RequestHandler that implements a Request type\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eRight click on a variable or type for a \u003cem\u003eRequest\u003c/em\u003e and then select \u003cstrong\u003eNavigate to request handler's implementation\u003c/strong\u003e. Alternatively, you can use the shortcut \u003cstrong\u003eCtrl+F12\u003c/strong\u003e when the carret is over the variable or type.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg src=\"docs/imgs/gotoimplementation.png\" alt=\"Right click on the type and select Navigate to request handler's implementation\" /\u003e\u003c/p\u003e\n\u003ch3 id=\"generating-request-response-classes\"\u003eGenerating request-response classes\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eSet a default project in the solution where \u003cem\u003erequest and reponse\u003c/em\u003e classes are to be created in\nby right clicking on the project in the solution explorer and selecting \u003cstrong\u003eCommerce Runtime Handyman -\u0026gt; Set as default Request-Response project\u003c/strong\u003e*\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg src=\"docs/imgs/set_default_project.png\" alt=\"Set default project\" /\u003e\u003c/p\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003eUse the light bulb suggestion \u003cstrong\u003eCreate or update request/response\u003c/strong\u003e to generate request response classes out of a method definition\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg src=\"docs/imgs/create-request-response.png\" alt=\"Create request-response out off method\" /\u003e\u003c/p\u003e\n\u003cp\u003eFor this snippet:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e/// \u0026lt;summary\u0026gt;\n/// Gets a product.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;param name=\u0026quot;productId\u0026quot;\u0026gt;The product id.\u0026lt;/param\u0026gt;\n/// \u0026lt;param name=\u0026quot;someOtherResponseData\u0026quot;\u0026gt;The first result.\u0026lt;/param\u0026gt;\n/// \u0026lt;returns\u0026gt;The found product.\u0026lt;/returns\u0026gt;\npublic Product GetProducts(long productId, out string someOtherResponseData)\n{\n    someOtherResponseData = \u0026quot;I will be on the response definition as well\u0026quot;;\n    return new Product();\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe following request will be generated:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e/// \u0026lt;summary\u0026gt;\n/// Gets a product.\n/// \u0026lt;/summary\u0026gt;\npublic class GetProductsRequest : IRequest\n{\n    /// \u0026lt;summary\u0026gt;\n    /// Initializes a new instance of the \u0026lt;see cref=\u0026quot;GetProductsRequest\u0026quot;/\u0026gt; class.\n    /// \u0026lt;/summary\u0026gt;\n    /// \u0026lt;param name=\u0026quot;productId\u0026quot;\u0026gt;The product id.\u0026lt;/param\u0026gt;\n    public GetProductsRequest(long productId)\n    {\n        this.ProductId = productId;\n    }\n\n    /// \u0026lt;summary\u0026gt;\n    /// Gets the product id.\n    /// \u0026lt;/summary\u0026gt;\n    public long ProductId { get; private set; }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eAnd following response will be generated:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-csharp\"\u003e/// \u0026lt;summary\u0026gt;\n/// The response for \u0026lt;see cref=\u0026quot;{GetProductsRequest}\u0026quot; /\u0026gt;.\n/// \u0026lt;/summary\u0026gt;\npublic class GetProductsResponse : IResponse\n{\n    /// \u0026lt;summary\u0026gt;\n    /// Initializes a new instance of the \u0026lt;see cref=\u0026quot;GetProductsResponse\u0026quot;/\u0026gt; class.\n    /// \u0026lt;/summary\u0026gt;\n    /// \u0026lt;param name=\u0026quot;Product\u0026quot;\u0026gt;The found product.\u0026lt;/param\u0026gt;\n    /// \u0026lt;param name=\u0026quot;someOtherResponseData\u0026quot;\u0026gt;The first result.\u0026lt;/param\u0026gt;\n    public GetProductsResponse(Product product, string someOtherResponseData)\n    {\n        this.Product = product;\n        this.SomeOtherResponseData = someOtherResponseData;\n    }\n\n    /// \u0026lt;summary\u0026gt;\n    /// Gets the found product.\n    /// \u0026lt;/summary\u0026gt;\n    public Product Product { get; private set; }\n\n    /// \u0026lt;summary\u0026gt;\n    /// Gets the first result.\n    /// \u0026lt;/summary\u0026gt;\n    public string SomeOtherResponseData { get; private set; }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"settings\"\u003eSettings\u003c/h2\u003e\n\u003cp\u003eYou can configure the extension settings at \u003cstrong\u003eTools -\u0026gt; Options -\u0026gt; Commerce Runtime Handyman\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"docs/imgs/options_view.png\" alt=\"Handyman settings\" /\u003e\u003c/p\u003e\n\u003ch2 id=\"contributing\"\u003eContributing\u003c/h2\u003e\n\u003cp\u003eContributions are welcomed! Please report issues and submit pull requests \u003ca href=\"https://github.com/andreesteve/crthandyman\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTo build and run the extension, you will need to \u003ca href=\"https://msdn.microsoft.com/en-us/library/mt683786.aspx\"\u003einstall Visual Studio SDK\u003c/a\u003e.\u003c/p\u003e\n\n\n\u003c/body\u003e\n\u003c/html\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreesteve%2Fcrthandyman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreesteve%2Fcrthandyman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreesteve%2Fcrthandyman/lists"}