!7 concept Musing { S text; S verificationResult; sS _fieldOrder = "text verificationResult"; } cmodule AIMusingsCRUD > DynCRUD { // API void storeMusing(S text) { storeMusing(text, null); } void storeMusing(S text, S verificationResult) { Musing m = uniq Musing(+text); if (nempty(verificationResult)) cset(m, +verificationResult); else dm_q(r { testMusing(m) }); } void testMusing(Musing m) { if (m == null) ret; try { int n = ai_checkMusing(m.text); cset(m, verificationResult := "OK (" + n + ")"); } catch print e { cset(m, verificationResult := "ERROR: " + exceptionToStringShort(e)); } } start { crud.multiLineFields = litset("text"); } afterVisualize { addSelectionDependentButton("Test", r { testMusing(selected()) }); } }