generators - phuocle/Dynamics-Crm-DevKit GitHub Wiki
URL: https://github.com/phuocle/Dynamics-Crm-DevKit/wiki/cli/generators
The generators task generates C# late-bound classes, TypeScript form declarations, or WebAPI client code from Dynamics 365 / Dataverse metadata.
DynamicsCrm.DevKit.Cli.exe /conn:"YourConnectionString" /json:"DynamicsCrm.DevKit.Cli.json" /type:generators /profile:"ProfileName"| Parameter | Description | Example |
|---|---|---|
/conn |
Dynamics 365 connection string | "/conn:AuthType=Office365;Url=https://yourorg.crm.dynamics.com;[email protected];Password=password" |
/json |
Path to DynamicsCrm.DevKit.Cli.json file | "/json:DynamicsCrm.DevKit.Cli.json" |
/type |
Task type (must be "generators") | "/type:generators" |
/profile |
Profile name from json file | "/profile:ACCOUNT" |
| Parameter | Description | Example |
|---|---|---|
/sdklogin |
Use SDK login dialog | "/sdklogin:yes" |
Add a generators section in your DynamicsCrm.DevKit.Cli.json:
{
"generators": [
{
"profile": "ACCOUNT",
"type": "CSharp",
"rootfolder": "Dev.DevKit.Shared\\Entities",
"rootnamespace": "Dev.DevKit.Shared.Entities",
"entities": "account,contact"
},
{
"profile": "JSFORM",
"type": "JsForm",
"rootfolder": "Dev.DevKit.WebResource\\entities",
"rootnamespace": "Dev.DevKit",
"entities": "*"
},
{
"profile": "JSWEBAPI",
"type": "JsWebApi",
"rootfolder": "Dev.DevKit.WebResource\\entities",
"rootnamespace": "Dev.DevKit",
"entities": "folder"
}
]
}| Property | Type | Required | Description |
|---|---|---|---|
profile |
string | Yes | Profile identifier |
type |
string | Yes | Generator type: "CSharp", "JsForm", or "JsWebApi"
|
rootfolder |
string | Yes | Output folder path (relative to json file) |
rootnamespace |
string | Yes | Root namespace for generated code |
entities |
string | Yes | Entity filter: "*" (all), "folder" (existing files), or comma-separated list |
Generates C# late-bound entity classes with:
- All entity attributes
- OptionSet enumerations
- Relationships
- FormattedValue properties
- Strong typing
Output: {EntityName}.generated.cs
Example:
namespace Dev.DevKit.Shared.Entities
{
public partial class Account : EntityBase
{
public string Name { get; set; }
public EntityReference PrimaryContactId { get; set; }
// ... more properties
}
}Generates TypeScript definitions for Dynamics 365 forms with:
- Form sections and tabs
- Field controls
- Navigation items
- Grid controls
- Complete IntelliSense support
Output: {EntityName}.form.js and {EntityName}.d.ts
Example:
declare namespace DevKit {
namespace FormAccount {
interface Body {
Name: DevKit.Controls.String;
PrimaryContactId: DevKit.Controls.Lookup;
}
}
}Generates TypeScript WebAPI client code with:
- CRUD operations
- Retrieve formatted values
- OData queries
- Strong typing
Output: {EntityName}.webapi.js and {EntityName}.d.ts
Example:
DevKit.AccountApi = function(e) {
// WebAPI implementation
};"entities": "*"Generates code for ALL entities in the system (may take time for large systems).
"entities": "folder"Only updates existing files in the rootfolder directory.
"entities": "account,contact,lead,opportunity"Generates code only for specified entities.
"entities": ""Same behavior as "folder" option.
DynamicsCrm.DevKit.Cli.exe ^
/conn:"AuthType=Office365;Url=https://contoso.crm.dynamics.com;[email protected];Password=pass" ^
/json:"DynamicsCrm.DevKit.Cli.json" ^
/type:generators ^
/profile:"CSHARP"JSON:
{
"generators": [
{
"profile": "CSHARP",
"type": "CSharp",
"rootfolder": "Entities",
"rootnamespace": "MyProject.Entities",
"entities": "account,contact,lead"
}
]
}DynamicsCrm.DevKit.Cli.exe ^
/conn:"AuthType=Office365;Url=https://contoso.crm.dynamics.com;[email protected];Password=pass" ^
/json:"DynamicsCrm.DevKit.Cli.json" ^
/type:generators ^
/profile:"FORMS"JSON:
{
"generators": [
{
"profile": "FORMS",
"type": "JsForm",
"rootfolder": "WebResources\\forms",
"rootnamespace": "MyProject",
"entities": "*"
}
]
}DynamicsCrm.DevKit.Cli.exe ^
/conn:"AuthType=Office365;Url=https://contoso.crm.dynamics.com;[email protected];Password=pass" ^
/json:"DynamicsCrm.DevKit.Cli.json" ^
/type:generators ^
/profile:"WEBAPI"JSON:
{
"generators": [
{
"profile": "WEBAPI",
"type": "JsWebApi",
"rootfolder": "WebResources\\webapi",
"rootnamespace": "MyProject",
"entities": "folder"
}
]
}{
"generators": [
{
"profile": "BACKEND",
"type": "CSharp",
"rootfolder": "Backend\\Entities",
"rootnamespace": "MyProject.Backend.Entities",
"entities": "account,contact"
},
{
"profile": "FRONTEND_FORMS",
"type": "JsForm",
"rootfolder": "Frontend\\forms",
"rootnamespace": "MyProject.Frontend",
"entities": "account,contact"
},
{
"profile": "FRONTEND_API",
"type": "JsWebApi",
"rootfolder": "Frontend\\webapi",
"rootnamespace": "MyProject.Frontend",
"entities": "account,contact"
}
]
}The task outputs:
- ? CREATED - New files created
- ? UPDATED - Existing files updated
- ?? DO_NOTHING - No changes needed
- ? ERROR - Entity not found
For TypeScript files, you can control generation with comments:
//{'UseForm':true,'UseWebApi':true,'Version':'3.44.44.44'}-
UseForm: Generate form definitions -
UseWebApi: Generate WebAPI client -
Version: Track generator version
Solution: Verify entity logical name is correct and exists in your environment
Solution: Check the entities filter and rootfolder path are correct
Solution: Ensure devkit.d.ts file exists in the same folder
-
Use specific entity lists instead of
"*"for faster generation -
Use
"folder"to only update existing files - Separate profiles for different entity groups
- proxytypes - Generate early-bound proxy types