Class dbml.DictToDBML
{

ClassMethod WriteDBML(schema As %String = "") As %Status
{
    Set stmt = ##class(%SQL.Statement).%New()
    Set status = stmt.%PrepareClassQuery("%Dictionary.CompiledClass","Summary")
    If $$$ISERR(status) {
        Do $System.Status.DisplayError(status)
        Quit
    }

    Set rset = stmt.%Execute()
    While (rset.%Next()) {
        If rset.%Get("Persistent") = 1 {
            Set table = rset.%Get("Name")
            Set tableSchema = $Piece(table, ".", 1)
            Set tableName = $Piece(table, ".", 2)

            If tableSchema = schema {

                Set cdef = ##class(%Dictionary.CompiledClass).%OpenId(table)
                Write "Table ", tableName, " {",!
                    Write " ID integer [primary key] ",!
                    // get list of properties
                    Set count = cdef.Properties.Count()

                    For i = 1:1:count {
                        Set paramCount = cdef.Properties.GetAt(i).Parameters.Count()

                        //I checked Name property and it has MAXLEN
                        If (cdef.Properties.GetAt(i).Name = "Name") {

                            Write "MaxLen: ",cdef.Properties.GetAt(i).Parameters.GetAt("%MAXLEN"),!

                        }

                        Write cdef.Properties.GetAt(i).Name, " ", cdef.Properties.GetAt(i).Type, "", cdef.Properties.GetAt(i).Parameters.Count(),!
                    }
                    Write "}",!
                }

            }
        }

        Return $$$OK
}

}

I'm using the bpmn notation only to represent IRIS options to the development.

Ensemble not supports bpmn, only bpel, but it is possible use a java bpmn engine to run bpmn process from iris, or the api services from this bpmn engine. There are many options to open source engines like activiti, camunda, flowable. Would be a good option to a new open exchange app!