sclass HCRUD_Concepts extends HCRUD_Data { Concepts cc = db_mainConcepts(); Class cClass; new L> onCreateOrUpdate; *(Class *cClass) {} S itemName() { ret shortName(cClass); } //LS fields() { ret conceptFields(cClass); } L> list() { ret lambdaMap itemToMap(main list(cc, cClass)); } Map emptyObject() { Concept c = unlisted(cClass); print("fieldOrder", getFieldOrder(c)); ret printStruct("emptyObject", itemToMap(c)); } Map itemToMap(Concept c) { ret c == null ? null : putKeysFirst(getFieldOrder(c), conceptToMap_gen_withNullValues(c)); } Map getObject(O id) { ret itemToMap(getConcept(cc, cClass, toLong(id))); } O createObject(SS map) { A c = cnew(cc, cClass); cSmartSet(c, mapToParams(map)); pcallFAll(onCreateOrUpdate, c); ret c.id; } S updateObject(O id, SS map) { A c = getConcept(cc, cClass, toLong(id)); if (c == null) ret "Object " + id + " not found"; cSmartSet(c, mapToParams(map)); pcallFAll(onCreateOrUpdate, c); ret "Object " + id + " updated"; } S deleteObject(O id) { A c = getConcept(cc, cClass, toLong(id)); if (c == null) ret "Object not found"; deleteConcept(c); ret "Object deleted"; } }