{"ref":"artifact:sap-samples-digital-manufacturing-extension-samples","page":"/artifacts/sap-samples-digital-manufacturing-extension-samples","json":"/artifacts/sap-samples-digital-manufacturing-extension-samples.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"sap-samples-digital-manufacturing-extension-samples","name":"SAP-samples/digital-manufacturing-extension-samples","artifact_type":"sample","ecosystem":"digital-manufacturing","serves_ecosystems":["ui5","btp"],"domain":"learning-and-reference","secondary_domains":["ui-and-frontend-bridge","integration-and-messaging"],"origin_ring":"sap-official","use_as":"reference","description":{"one_line":"Worked samples for the six ways [SAP Digital Manufacturing](external:sap-digital-manufacturing) can be extended, from POD plugins to XSLT inside an integration flow.","short":"Samples for the six extension types of SAP Digital Manufacturing","what_it_solves":"SAP lists six extension types for the product: POD plugin, core plugin, side-by-side, integration, in-app service and ML extension, and this repository holds a worked sample for each, with two POD plugin templates meant to be built from scratch. The POD plugin folder carries both architectures: POD 1.0 as a full UI5 MVC component with Component.js, manifest, controller, view and PropertyEditor registered in designer/components.json, and POD 2.0 as a single JavaScript file extending sap/dm/dme/pod2/widget/Widget and registered in extension.json; the repository states POD 2.0 for new development and points existing POD 1.0 plugins at SAP's migration guide. Twenty-seven core plugin samples change standard plugins in place: an extra worklist column with calculated values, a confirmation before an equipment status change, custom work instructions in the viewer. The integration samples work outside the dashboard, as XSLT templates that strip leading zeros or replace special characters in a material number and a copy of SAP's BAPI Service Processor flow in [Cloud Integration](artifact:btp-cloud-integration) that routes a production order yield confirmation to a non-SAP ERP. Deploying a plugin here is a zip uploaded through the POD Designer or the Manage PODs 2.0 app, so what each sample assumes is a configured tenant rather than a build pipeline.","when_not_to_use":"Nothing here runs on its own: a plugin sample needs a Digital Manufacturing tenant to be uploaded into, and the integration samples need a Cloud Integration tenant plus an ERP system, or a mock server as the outbound example uses, before they do anything.","to_build_on_it":"Each folder is copied and changed rather than installed: the two POD plugin templates are filled in from scratch, and an integration sample is taken further by copying the SAP-delivered BAPI Service Processor artifact in [Cloud Integration](artifact:btp-cloud-integration) and pointing the Production Order Confirmation workflow at the copy. A POD 1.0 plugin carried forward follows the POD Plugin Migration Guide the repository links to."},"links":{"repo":"https://github.com/SAP-samples/digital-manufacturing-extension-samples","docs":"https://help.sap.com/docs/sap-digital-manufacturing/pod-plugin-developer-s-guide/introduction"},"type_properties":{"form":{"value":"snippets","sources":[{"url":"https://github.com/SAP-samples/digital-manufacturing-extension-samples","title":"SAP-samples/digital-manufacturing-extension-samples — README","checked":"2026-10-18","quote":"Some of the templates can be referred as following code snippets."}]}},"maintainers":["actor:sap-samples"],"requires":[{"ref":"external:sap-digital-manufacturing","requirement":"required","basis":"binding","role":"host-product","for":"The samples are uploaded into a Digital Manufacturing tenant and run there: a POD 1.0 plugin through the POD Designer, a POD 2.0 extension through the Manage PODs 2.0 app, and the bootcamp unit lists tenant access as a prerequisite.","sources":[{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/dm-podplugin-extensions/README.md","title":"SAP Digital Manufacturing POD Plugin Extensions — Deployment","checked":"2026-10-17","quote":"Upload to **POD Designer** in SAP DM"},{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/bootcampdocs/Field%26IntegrationExtensions.md","title":"Unit 2 - Field and Integration Extensions — Prerequisites","checked":"2026-10-17","quote":"You have access to the DMC tenant"}]},{"ref":"artifact:btp-cloud-integration","requirement":"conditional","basis":"binding","condition":"An integration extension sample is used.","for":"The integration samples are built in Cloud Integration itself: a copy of the SAP-delivered BAPI Service Processor artifact, edited to call a non-SAP receiver, with the XSLT customisation applied to the iFlow's mapping.","sources":[{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/dm-integration-extensions/OutboundFromSAPDMToNonSAPERPExample/README.MD","title":"Outbound request from SAP DM system to non-SAP ERP system — Steps to create","checked":"2026-10-17","quote":"Go to SAP Cloud Integration and click on \"Build and Develop Integration content\" icon."},{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/bootcampdocs/Field%26IntegrationExtensions.md","title":"Unit 2 - Field and Integration Extensions — Prerequisites","checked":"2026-10-17","quote":"You have access to the SAP CI tenant"}]},{"ref":"artifact:btp-destination","requirement":"conditional","basis":"binding","condition":"The dm-custom-api in-app service extension sample is deployed.","for":"The sample service reaches the product's APIs through a named destination, SAP_DMC_DEFAULT_SERVICE_KEY, rather than a URL of its own.","sources":[{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/dm-inapp-service-extensions/dm-custom-api/README.md","title":"Digital Manufacturing Extension: Custom protected BTP service calling DM APIs","checked":"2026-10-17","quote":"Below we are going to use destination SAP_DMC_DEFAULT_SERVICE_KEY to fetch the reason codes."}]},{"ref":"artifact:btp-authorization-and-trust-management","requirement":"conditional","basis":"binding","condition":"The dm-custom-api in-app service extension sample is deployed.","for":"The sample's endpoints are protected by an XSUAA instance, and the same client credentials configure the destination that Digital Manufacturing production processes call.","sources":[{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/dm-inapp-service-extensions/dm-custom-api/README.md","title":"Digital Manufacturing Extension: Custom protected BTP service calling DM APIs — Protecting endpoints","checked":"2026-10-17","quote":"The endpoints are protected XSUAA instance and using the client credentials the endpoints can be validated."}]}],"connects":[{"ref":"external:sap-digital-manufacturing","kind":"data","direction":"outbound","for":"The samples extend the product and call its APIs: the side-by-side Assembly POD example works against the DM public APIs, and the in-app service sample fetches reason codes from the DM APIs through a destination.","sources":[{"url":"https://github.com/sap-samples/digital-manufacturing-extension-samples","title":"SAP Digital Manufacturing Extension Samples — Sample Extensions","checked":"2026-10-17","quote":"This sample demonstrates how to build a side by side extension for Assembly using DM public APIs"},{"url":"https://raw.githubusercontent.com/SAP-samples/digital-manufacturing-extension-samples/main/dm-inapp-service-extensions/dm-custom-api/README.md","title":"Digital Manufacturing Extension: Custom protected BTP service calling DM APIs","checked":"2026-10-17","quote":"This is calling implicitly DM APIs via destination."}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"contributors":["actor:ajinkyapatil8190","actor:alisonji","actor:ankitshah25","actor:btbernard","actor:chrisdavisp","actor:eason-ling","actor:elenaylz","actor:huschlek","actor:i307698","actor:ilias-gmail","actor:levwz","actor:msaravanabhavan","actor:oksanazubchenko","actor:panigrahyvivek","actor:prayasdas03","actor:selvakumarshanmugam","actor:sidizhan","actor:taranggupta1987","actor:west-claire","actor:zhouwei0115"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"good","evidence":"22 contributors, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-09, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no DIGITAL-MANUFACTURING release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no DIGITAL-MANUFACTURING release lines in the atlas"},{"label":"Maintainer's CI","tier":"poor","evidence":"CodeQL Security Scan failure, 2026-08-26"}],"practice":[{"label":"Tests","tier":"good","evidence":"31 test files"},{"label":"Docs","tier":"good","evidence":"docs site, README 6 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":59,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":59,"forks":56,"open_issues":8,"archived":false,"pushed_at":"2026-09-01","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","created_at":"2020-03-18T16:54:53Z","open_prs":2,"tree_truncated":false,"test_files":31,"workflows":1,"other_ci":false,"readme_bytes":6511,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2020-03-18","last_commit":"2026-08-26","commits":222,"contributors":22,"ci_status":"failure","ci_run_at":"2026-08-26","ci_workflow":"CodeQL Security Scan","ci_event":"push","readme_path":"README.md","readme_sha":"8729da4860310b84772d2505e4e8399975e34bdc","repo_read":"2026-10-26"},"edges":{"maintainers":[{"ref":"actor:sap-samples","name":"SAP Samples","json":"/actors/sap-samples.json"}],"contributors":[{"ref":"actor:ajinkyapatil8190","name":"Ajinkya Patil","json":"/actors/ajinkyapatil8190.json"},{"ref":"actor:alisonji","name":"alisonji","json":"/actors/alisonji.json"},{"ref":"actor:ankitshah25","name":"ankitshah25","json":"/actors/ankitshah25.json"},{"ref":"actor:btbernard","name":"Brian Bernard","json":"/actors/btbernard.json"},{"ref":"actor:chrisdavisp","name":"Chris Perumal","json":"/actors/chrisdavisp.json"},{"ref":"actor:west-claire","name":"Claire West","json":"/actors/west-claire.json"},{"ref":"actor:eason-ling","name":"Eason-Ling","json":"/actors/eason-ling.json"},{"ref":"actor:elenaylz","name":"elenaylz","json":"/actors/elenaylz.json"},{"ref":"actor:huschlek","name":"huschlek","json":"/actors/huschlek.json"},{"ref":"actor:i307698","name":"i307698","json":"/actors/i307698.json"},{"ref":"actor:ilias-gmail","name":"ilias-gmail","json":"/actors/ilias-gmail.json"},{"ref":"actor:levwz","name":"levwz","json":"/actors/levwz.json"},{"ref":"actor:msaravanabhavan","name":"msaravanabhavan","json":"/actors/msaravanabhavan.json"},{"ref":"actor:oksanazubchenko","name":"oksanazubchenko","json":"/actors/oksanazubchenko.json"},{"ref":"actor:prayasdas03","name":"PrayasDas03","json":"/actors/prayasdas03.json"},{"ref":"actor:selvakumarshanmugam","name":"Selvakumar Shanmugam","json":"/actors/selvakumarshanmugam.json"},{"ref":"actor:taranggupta1987","name":"Tarang Gupta","json":"/actors/taranggupta1987.json"},{"ref":"actor:panigrahyvivek","name":"Vivek","json":"/actors/panigrahyvivek.json"},{"ref":"actor:zhouwei0115","name":"zhouwei0115","json":"/actors/zhouwei0115.json"},{"ref":"actor:sidizhan","name":"詹斯迪","json":"/actors/sidizhan.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}