Class ::xowf::WorkflowContainer

::xowf::WorkflowContainer[i] create ... \
           [ -auto_form_constraints (default "") ] \
           [ -auto_form_template (default "") ] \
           [ -autoname autoname ] \
           [ -debug (default "0") ] \
           [ -shared_definition (default "1") ]

Class Relations

  • class: ::xotcl::Class[i]
  • superclass: ::xowf::WorkflowObject[i]
::xotcl::Class create ::xowf::WorkflowContainer \
     -superclass ::xowf::WorkflowObject

Methods (to be applied on instances)

  • auto_form_constraints (setter)

  • auto_form_template (setter)

  • autoname (setter)

  • cleanup (scripted)

    #
    #  Keep workflow container 10 minutes in the per-thread cache.
    #
    if {[clock seconds] - ${:creation_time} > 600} {
      #ns_log notice "======================== WorkflowContainer [self] self destroys"
      ::xo::remove_cleanup [self]
      :destroy
    }
  • debug (setter)

  • init (scripted)

    set :creation_time [clock seconds]
    ::xo::add_cleanup [self] [list [self] cleanup]
    next
  • object (scripted)

    #
    # Method for emulating "object". Object specific code cannot
    # work in shared workflow definitions, since one workflow
    # definition is used in the shared case for many objects at the
    # same time. Object specific code should use the
    # "object-specific" method below.
    #
    # Here we fall back to the unshared case
    #
    set ctx [:wf_context]
    set object [$ctx object]
    set template [$object page_template]
    if {${:shared_definition}} {
      ns_log warning "Workflow $template [$template name] does not work with shared definitions since it refers to 'object'; fall back to unshared definition"
      set :shared_definition 0
    }
    return $object
  • object-specific (scripted)

    :specific object {*}$args
  • shared_definition (setter)

  • specific (scripted)

    #
    # Make sure, we have always a value.
    #
    if {![info exists :$type-specific]} {
      set :$type-specific ""
    }
    #
    # If called without args, return the current value, otherwise
    # aggregate the values.
    #
    set l [llength $args]
    switch $l {
      0 {
        #
        # Called without args, return the current value
        #
        return [set :$type-specific]
      }
      1 {
        #
        # Called with a single value, aggregate partial values (and
        # separate these by an empty line for safety)
        #
        append :$type-specific \n [lindex $args 0]
        #ns_log notice "=== $type-specific [self] [set :$type-specific]"
      }
      default {
        error "wrong number of arguments"
      }
    }
  • wf-specific (scripted)

    :specific wf {*}$args