{"id":28295210,"url":"https://github.com/yagasoft/dynamics-businessmachine","last_synced_at":"2026-05-02T03:06:33.529Z","repository":{"id":218619437,"uuid":"746921310","full_name":"yagasoft/Dynamics-BusinessMachine","owner":"yagasoft","description":"A framework for business automation. Transforms the Dynamics 365 experience by empowering developers with an intuitive UI for seamless full-stack Dynamics JavaScript coding. Say goodbye to complex workflows and C# plugins – welcome simplicity and power in one package.","archived":false,"fork":false,"pushed_at":"2026-04-28T03:32:38.000Z","size":3240,"stargazers_count":1,"open_issues_count":23,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-28T05:19:31.775Z","etag":null,"topics":["business-logic","c-sharp","c-sharp-library","dynamics","dynamics365","flow","javascript","javascript-library","plugin","workflow","workflow-engine"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yagasoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":"docs/roadmap/README.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"liberapay":"yagasoft","custom":"https://paypal.me/yagasoft"}},"created_at":"2024-01-22T23:08:58.000Z","updated_at":"2026-04-28T03:29:58.000Z","dependencies_parsed_at":"2024-01-23T02:10:35.047Z","dependency_job_id":"902cc8cf-9170-46e5-957a-2b86c53bd0c5","html_url":"https://github.com/yagasoft/Dynamics-BusinessMachine","commit_stats":null,"previous_names":["yagasoft/dynamics-businessmachine"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/yagasoft/Dynamics-BusinessMachine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagasoft%2FDynamics-BusinessMachine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagasoft%2FDynamics-BusinessMachine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagasoft%2FDynamics-BusinessMachine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagasoft%2FDynamics-BusinessMachine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yagasoft","download_url":"https://codeload.github.com/yagasoft/Dynamics-BusinessMachine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yagasoft%2FDynamics-BusinessMachine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32521113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["business-logic","c-sharp","c-sharp-library","dynamics","dynamics365","flow","javascript","javascript-library","plugin","workflow","workflow-engine"],"created_at":"2025-05-22T12:17:39.112Z","updated_at":"2026-05-02T03:06:33.475Z","avatar_url":"https://github.com/yagasoft.png","language":"TypeScript","funding_links":["https://liberapay.com/yagasoft","https://paypal.me/yagasoft"],"categories":[],"sub_categories":[],"readme":"\n# Dynamics-BusinessMachine\n[![Join the chat at https://app.gitter.im/#/room/#ys-dbm:gitter.im](https://badges.gitter.im/yagasoft/DynamicsCrm-TemplateBasedCodeGeneratorPlugin.svg)](https://app.gitter.im/#/room/#ys-dbm:gitter.im?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n---\n\nThe Dynamics Business Machine represents an innovative solution to modernise how business processes, logic, and flows are created and maintained in Microsoft Power Platform.\n\nDBM is being reset around its original product vision: a designer that lets users define complete business cycles from portal to back office and back to portal again, with processes, sub-processes, stages, rendered forms, and JavaScript-first action logic.\n\nStart your journey with DBM and make your business flows as agile and efficient as they should be.\n\nYou can read a quick overview of the solution and its functionality [here](https://blog.yagasoft.com/2024/11/dynamics-business-machine-business-automation-framework-mage-series).\n\n## Features\n\nDBM currently contains prototype/reference implementation assets. The active roadmap restarts product delivery at a new `R1` while preserving useful existing code paths as reference material.\n\nThe reset product direction includes:\n\n-   Process portfolio designer: Define a main process and any number of sub-processes.\n-   Stage spans: Align sub-process stages to full or fractional spans of the main-process timeline.\n-   Rendered form experience: Show the process to business users on actual model-driven forms.\n-   DBMScript actions: Define JavaScript-first actions for stage, form, field, backend, and button triggers.\n-   Back-office runtime: Execute stage transitions, statuses, form behaviour, actions, routing, tasks, SLA/KPI, and support operations.\n-   Portal continuity: Add actual portal rendering and return-path behaviour after the back-office runtime is stable.\n-   Platform tooling: Manage source sync, solution packaging, versioning, tree/schema tooling, jobs, and ALM.\n\nBelow is the active high-level roadmap planned for DBM.\n\n## Roadmap\n\n- `R0`: Engineering foundation and governance\n- `R1`: Process/stage designer and actual form render\n- `R2`: DBMScript and action foundation\n- `R3`: Back-office runtime\n- `R4`: Back-office operations\n- `R5`: Portal runtime and return path\n- `R6`: Reuse, templates, artefacts, and documents\n- `R7`: Platform tooling and ALM\n- `R8`: Enterprise maturity\n- `R9`: AI-assisted platform\n\nThe tracked release plan is the source of truth: [docs/roadmap/release-plan.md](docs/roadmap/release-plan.md).\n\n## Documentation\n\nOfficial tracked product documentation now lives under [docs/](docs/README.md).\n\nStart with:\n\n- [docs/architecture/product-principles.md](docs/architecture/product-principles.md)\n- [docs/architecture/current-state-baseline.md](docs/architecture/current-state-baseline.md)\n- [docs/roadmap/release-plan.md](docs/roadmap/release-plan.md)\n\nLocal planning drafts, execution notes, and working material remain outside Git in `_codex/`.\n\n## Usage\n\nFirst import the solution found at [Dynamics365-YsCommonSolution](https://github.com/yagasoft/Dynamics365-YsCommonSolution).\nNext, import the latest solution from the 'releases' page.\n\nOnce installed, open the Yagasoft app, navigate to the 'Dynamics Business Machine' page, and you will see the following screen:\n[\u003cimg src=\"https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-screen.png\" width=\"600\"\u003e](https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-screen.png)\n\n### JavaScript script\n[\u003cimg src=\"https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-resource.png\" width=\"700\"\u003e](https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-resource.png)\n\n1.  Start by clicking the \"Add New Resource\" button to create a new file within the editor.\n2.  Provide a unique file name that ends with `.js` .\n3.  Set a display name for easy reference.\n4.  Once the file is created, start writing your JavaScript code.\n5.  After writing the code, save it as a web resource. This ensures that the script is properly version-controlled and easily integrated into Dynamics environments for deployment.\n\n### JSON\n\nSame goes for JSON files. After adding the file, add a property, name it, and then write your code for the property.\n\n[\u003cimg src=\"https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-json.png\" width=\"900\"\u003e](https://blog.yagasoft.com/wp-content/uploads/dbm-overview-app-json.png)\n\n## SDK features\n\nDBM comes equipped with a range of functionalities that help create, update, delete, and retrieve data from Dataverse, all using a unified JavaScript-based approach.\n\n### Context object\n\nAn object that is passed to the engine by the calling context. It is usually the Target row (entity).\n\n`$this`\n\n### Service\n\nThe Dataverse service.\n\n`$service`\n\n#### Create\n\n`create(entity: Entity): Guid`\n\n```js\nconst id = $service.create(new Ys.Entity('contact'));\n```\n\n#### Update\n\n`update(entity: Entity): void`\n\n```js\nconst e = new Ys.Entity($this.logicalName, $this.id);\ne.attributes.lastname = 'Test!';\n$service.update(e);\n```\n\n#### Delete\n\n`delete(id: Guid): void`\n\n```js\n$service.delete(Guid.parse('3a47b1ba-9537-ef11-8409-000d3adabdf3'));\n```\n\n#### Retrieve\n\n`retrieve(logicalName: string, id: Guid, columns: string[] | string): Entity`\n\n```js\nconst r = $service.retrieve($this.logicalName, $this.id, 'firstname');\n$log.info(r.attributes.firstname + ' ' + r.attributes.lastname);\n```\n\n#### RetrieveMultiple\n\n`retrieveMultiple(fetchXml: string, count?: number, page?: number): Entity[]`\n\n```js\nconst rm =\n  $service.retrieveMultiple(`\n    \u003cfetch\u003e\n      \u003centity name='contact'\u003e\n        \u003cattribute name='createdon' /\u003e\n        \u003corder attribute='createdon' descending='true' /\u003e\n      \u003c/entity\u003e\n    \u003c/fetch\u003e`);\n$log.info(rm.length);\n$log.info(rm[0].attributes.createdon);\n$log.info(rm[0].attributes.parentcustomerid);\n```\n\n## Execute code\n\nFor this initial release, DBM has a custom step that takes the following parameters:\n\n1.  Script file: the web resource containing the script to run.\n2.  Script file ID: the unique path of the file.\n3.  Inline script: hard code a script to run.\n4.  Inline script type: what type of script is hard coded.\n5.  JSON script action: action to execute on a JSON script if given.\n\nYou must provide a value for parameters 1, 2, or 3. Param 4 is required if 3 is given. Param 5 specifies the action if a JSON script is given.\n\n## Changes\n\n+ Check Releases page for the later changes\n#### _v0.1.1.1 (2024-01-23)_\n+ Kick-started project\n\n---\n**Copyright \u0026copy; by Ahmed Elsawalhy ([Yagasoft](https://yagasoft.com))** -- _GPL v3 Licence_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyagasoft%2Fdynamics-businessmachine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyagasoft%2Fdynamics-businessmachine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyagasoft%2Fdynamics-businessmachine/lists"}