!7 sclass HCRUD_Data { //LS fields() { null; } L> list() { null; } S fieldNameToHTML(S name) { ret htmlencode(humanizeLabel(name)); } S idField() { ret "id"; } } sclass HCRUD { HCRUD_Data data; S renderTable() { L> l = data.list(); //LS fields = data.fields(); //if (fields == null) fields = allKeysFromList_inOrder(); l = map(l, map -> mapKeysAndValues( s -> or(data.fieldNameToHTML(s), s), value -> htmlEncode2(strOrEmpty(value)), map)); ret htmlTable2_noHtmlEncode(l); } } concept Car { S brand; } p { db(); } html { new HCRUD crud; crud.data = new HCRUD_Data { L> list() { ret conceptsToMaps_gen(main list(Car)); } }; ret h1("Cars") + crud.renderTable(); }