{"ref":"artifact:marianfoo-cap-materialbom-graph","page":"/artifacts/marianfoo-cap-materialbom-graph","json":"/artifacts/marianfoo-cap-materialbom-graph.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"marianfoo-cap-materialbom-graph","name":"cap-materialbom-graph","artifact_type":"sample","ecosystem":"cap","serves_ecosystems":["ui5"],"domain":"ui-and-frontend-bridge","origin_ring":"independent","use_as":"starting-point","description":{"one_line":"A CAP sample that walks a material bill of materials on the server and draws it as a UI5 network graph in a custom section of a Fiori elements object page, on SQLite with no deployment.","short":"CAP sample drawing a material BOM as a UI5 network graph","what_it_solves":"The model holds materials and the parent-child rows between them, each row carrying a quantity, a unit and a relationship type, beside a pseudo-entity whose nodes, lines and groups are JSON strings filled at runtime rather than columns anything stores. Reading that entity is a handler of its own: it takes the material from the request path, walks the bill of materials from there, and keys every node by material and path, so a component reached along two branches is drawn twice and a repeat stops instead of looping. The app is a list report and object page generated from the SAP Fiori tools template, with the graph hung off the object page as a custom section whose fragment binds `sap.suite.ui.commons.networkgraph` to a layered layout, a colour per material type and a button back to the material's own page. It runs on [@sap/cds](artifact:sap-cds) 8 against SQLite and says nothing about deployment, so what it offers is the read handler and the fragment rather than an application to put in front of anyone."},"links":{"repo":"https://github.com/marianfoo/cap-materialbom-graph"},"compat":{"runtimes":["node"],"cds_range":"^8"},"type_properties":{"form":{"value":"tutorial","sources":[{"url":"https://github.com/marianfoo/cap-materialbom-graph","title":"cap-materialbom-graph — README","checked":"2026-10-18","quote":"This project is explained in the following blog post:"}]}},"demonstrates":["capability:fiori-annotations","capability:reference-apps"],"maintainers":["actor:marianfoo"],"source_available":true,"provenance":{"discovered_via":[{"source":"source:github-orgs","channel":"marianfoo"}],"first_seen":"2026-09-25"},"history":[{"date":"2026-09-25","field":"entry","from":null,"to":"created","reason":"Drafted from the repository's own files, because its README is the unedited `cds init` template and the only sentence the maintainer wrote about it is the repository description, \"This is a sample to show the Material as Network Graph in a Fiori elements app\": db/schema.cds for the model and the GraphNetwork pseudo-entity, srv/service.js for the READ handler that walks the bill of materials, app/material/webapp/manifest.json for the list report and object page generated from `@sap/generator-fiori:lrop` and the custom section, the graph fragment for `sap.suite.ui.commons.networkgraph`, and package.json for `@sap/cds` ^8 and `@cap-js/sqlite`. artifact_type sample and use_as starting-point are a placement: one commit, a local SQLite run and no deployment described. domain ui-and-frontend-bridge follows the half of it the sample is about, as on cap-sflight. No licence is recorded: the repository has no LICENSE file and package.json carries the `cds init` defaults \"license\": \"UNLICENSED\" and \"private\": true."}],"drafted_with_ai":true,"contributors":["actor:marianfoo"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"poor","evidence":"pushed 2025-02, not archived"}],"compatibility":[{"label":"Declared for","tier":"poor","evidence":"^8 — stops before cds 9"},{"label":"Survived majors","tier":"unknown","evidence":"no release dates"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"9 test files"},{"label":"Docs","tier":"poor","evidence":"README 1 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":5,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":5,"forks":2,"open_issues":0,"archived":false,"pushed_at":"2025-02-24","license_spdx":null,"org_owned":false,"default_branch":"main","created_at":"2025-02-24T12:08:31Z","open_prs":0,"tree_truncated":false,"test_files":9,"workflows":0,"other_ci":false,"readme_bytes":870,"docs_files":0,"changelog":false,"license_file":false,"dts_files":1,"first_commit":"2025-02-24","last_commit":"2025-02-24","commits":1,"contributors":1,"readme_path":"README.md","readme_sha":"a71347929ea5414947010c882c7cf98c7dbbceea","repo_read":"2026-10-26"},"edges":{"maintainers":[{"ref":"actor:marianfoo","name":"Marian Zeis","json":"/actors/marianfoo.json"}],"contributors":[{"ref":"actor:marianfoo","name":"Marian Zeis","json":"/actors/marianfoo.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}