#document { name = Name, sections = [
      #sec { name=[<<"Input the password "
                     "you have received by SMS"/utf8>>,
             nitro:to_list(Phone#phone.number)] } ],
    buttons  = [ #but { name='decline',
                        title=<<"Cancel"/utf8>>,
                        class=cancel,
                        postback={'CloseOpenedForm',Name} },
                 #but { name='proceed',
                        title = <<"Proceed"/utf8>>,
                        class = [button,sgreen],
                        sources = [otp],
                        postback = {'Spinner',{'OpenForm',Name}}}],
    fields = [ #field { name='otp',
                        type=otp,
                        title= <<"Password:"/utf8>>,
                        labelClass=label,
                        fieldClass=column3}]}.
Documents or Forms consist of set of fields grouped in sections and a row of control buttons. It mey also contain fields of customizable types.
  -record(document, { ?ITERATOR(feed),
                      name,
                      base,
                      sections,
                      fields,
                      buttons,
                      access }). -record(field,     { id, sec=1, name, pos, title,
                      layout, visible=true,
                      disabled=false, format="~w",
                      curr=[], postfun=[], desc,
                      wide=normal, type=binary,
                      etc, labelClass=label,
                      fieldClass=field,
                      boxClass=box,
                      access, tooltips=[],
                      options=[], min=0, max=1000000,
                      length=10, postback }). -record(sec,       { id,
                      name,
                      desc="" }). -record(but,       { id,
                      postback,
                      name,
                      title,
                      sources=[],
                      class }).  -record(sel,      { id,
                      postback,
                      name,
                      title }). -record(opt,       { id,
                      postback,
                      name,
                      title,
                      checked=false,
                      disabled=false,
                      noRadioButton=false }). -record(validation, { name, type, msg,
                       extract = fun(X) -> X end,
                       options=[], function,
                       field={record,pos} }).The Metainformation is used to generate KVS Data Model. The KVS layer provides persistence.
JavaScript Web Application is generated using Metainformation and Data Model. N2O is used as a domain specific language to generate forms. JavaScript/OTP is used to generate form. Average rendering speed is 25 forms per second. Erlang and JavaScript/OTP are used to define validation rules applied to documents during workflow.
Workflows are complimentary to business rules and could be specified separately. BPE defenitions provide front API to end-user applications.
- Maxim Sokhatsky
 
OM A HUM