{"ref":"artifact:marianfoo-fiori-table-maintenance","page":"/artifacts/marianfoo-fiori-table-maintenance","json":"/artifacts/marianfoo-fiori-table-maintenance.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"marianfoo-fiori-table-maintenance","name":"fiori-table-maintenance","artifact_type":"sample","ecosystem":"cap","serves_ecosystems":["ui5"],"flavors":[{"key":"freestyle","source":{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/simple-table-maintenance-in-sap-fiori-using-ui5-smart-controls/ba-p/14014547","title":"Simple Table Maintenance in SAP Fiori Using UI5 Smart Controls — SAP Community","checked":"2026-09-25","quote":"By using CAP/RAP Backend, a freestyle UI5 app, and OData V2 (plus UI annotations), you can quickly set up a user-friendly, fully responsive table maintenance application."}}],"domain":"ui-and-frontend-bridge","origin_ring":"independent","use_as":"starting-point","description":{"one_line":"The CAP service and freestyle UI5 app behind [Simple Table Maintenance in SAP Fiori Using UI5 Smart Controls](content:simple-table-maintenance-in-sap-fiori-using-ui5-smart-controls), where a SmartTable edits rows in place rather than through a draft.","short":"CAP and UI5 app for in-place table maintenance with SmartTable","what_it_solves":"SM30 generated a maintenance screen for a custom table with almost no code, and this works out what the same screen costs on Fiori, where nothing generates it. Two CDS entities, StarWarsFighter and FighterStatus, are served as OData V2 through [@cap-js-community/odata-v2-adapter](artifact:cap-js-community-odata-v2-adapter), and one XML view puts a SmartFilterBar and a SmartTable over them with `editable` and `editTogglable` set, variant management and export. The columns and the read-only fields are [Fiori annotations](capability:fiori-annotations) in `app/annotations.cds`, so the controller holds little more than `onFieldChange` calling `model.submitChanges()` as a field is left. It stops at one table and one app: the view names its entity set, the annotations name its fields, and a second table means writing both again."},"links":{"repo":"https://github.com/marianfoo/fiori-table-maintenance"},"type_properties":{"form":{"value":"tutorial","sources":[{"url":"https://github.com/marianfoo/fiori-table-maintenance","title":"fiori-table-maintenance — README","checked":"2026-10-18","quote":"This was documented in this blog post:"}]}},"requires":[{"ref":"artifact:cap-js-community-odata-v2-adapter","for":"Serving the CDS entities as OData V2, which is the protocol the SmartFilterBar and SmartTable in the app bind against.","sources":[{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/simple-table-maintenance-in-sap-fiori-using-ui5-smart-controls/ba-p/14014547","title":"Simple Table Maintenance in SAP Fiori Using UI5 Smart Controls — SAP Community","checked":"2026-09-25","quote":"With the CAP Plugin @cap-js-community/odata-v2-adapter i can automatically create the V2 Service i need in my app."}]}],"demonstrates":["capability:fiori-annotations","capability:odata","capability:ui5-data-binding"],"maintainers":["actor:marianfoo"],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:github-orgs","channel":"marianfoo"}],"first_seen":"2026-09-25"},"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":"fair","evidence":"nothing declared"},{"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":"12 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":7,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":7,"forks":1,"open_issues":0,"archived":false,"pushed_at":"2025-02-19","license_spdx":null,"org_owned":false,"default_branch":"main","created_at":"2025-02-11T21:53:37Z","open_prs":0,"tree_truncated":false,"test_files":12,"workflows":0,"other_ci":false,"readme_bytes":850,"docs_files":0,"changelog":false,"license_file":false,"dts_files":0,"first_commit":"2025-02-11","last_commit":"2025-02-19","commits":3,"contributors":1,"readme_path":"README.md","readme_sha":"bda58a66eb70b03f0bba1c45c20f85b86c5dbb81","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":[]}}