# File lib/ruote/svc/tracker.rb, line 192
    def trigger(m_wfid, m_error, m_action, msg, tracker)

      t_action = tracker['action']
      tracker_id = tracker['id']

      m = Ruote.fulldup(tracker['msg'])

      action = m.delete('action')

      m['wfid'] = m_wfid if m['wfid'] == 'replace'
      m['wfid'] ||= @context.wfidgen.generate

      m['workitem'] = msg['workitem'] if m['workitem'] == 'replace'

      if t_action == 'error_intercepted'
        m['workitem']['fields']['__error__'] = m_error
      elsif tracker_id == 'on_error' && m_action == 'error_intercepted'
        m['workitem']['fields']['__error__'] = m_error
      elsif tracker_id == 'on_terminate' && m_action == 'terminated'
        m['workitem']['fields']['__terminate__'] = { 'wfid' => m_wfid }
      end

      if m['variables'] == 'compile'
        fexp = Ruote::Exp::FlowExpression.fetch(@context, msg['fei'])
        m['variables'] = fexp ? fexp.compile_variables : {}
      end

      @context.storage.put_msg(action, m)
    end