Class: UU::OS::VUC::VisualUseCaseController

Inherits:
Application::AbstractController show all
Defined in:
uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb

Overview

Ancestor for development of custom Visual Use Case controllers v3

Instance Method Summary (collapse)

Methods included from Util::ResponseBuilder

#handle_response, #response, #streamed_response

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(method, *args, &block)

Controller need not to implement all possible event methods. This method provides default behavior of all unimplemented events.



201
202
203
204
205
206
207
208
209
210
211
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 201

def method_missing(method, *args, &block) # :nodoc:
  # Do not touch view in case of unimplemented event with exception
  # of submit event which must be always implemented.
  if (method == :on_submit)
    raise "Controller #{self.class} does not define on_submit method."
  elsif (method.to_s[/^on_/] == nil) || (args.size != 1)
    # Invoked method was not "event" method with view parameter - throw regular method missing exception.
    raise NameError.new("undefined local variable or method '#{method.to_s}' for #{self.class}")
  end
  return nil
end

Instance Method Details

- (Object?) on_before_init(ctx)

Note:

No components are available here. Components are available from #on_init method on.

Method used for business rule check and changing view template. E.g. artifact exists, user is casted to role etc.

Examples:

# uri of default VUC
UCR_URI = "ues:UNI:CDS.GUESTBOOK/COMMENT/CREATE"

# code of sheet with extended form
EXTENDED_FORM_CODE = "EXTENDED_FORM"

def on_before_init(ctx)
  # get ViewModel instance from context
  view = ctx.view

  # get access role
  session = UU::OS::Security::Session.current_session
  acr = session.get_access_role(ctx.uu_uri)

  # check some business rules with access role
  if !acr
    # in case business rules are not fit, navigate back and show error message to user.
    error_msg = UU::OS::GVC::Message.new({
            code: "CODE",
            severity: UU::OS::GVC::Message::MessageSeverity::ERROR,
            text: "You shall not pass!"
            })
    return ctx.action.back(:uuMessages => [error_msg])
  end

  # some logic to find out if user can see extended form
  use_extended_form = true

  if use_extended_form
    # set new sheet with extended form
    new_template = UU::OS::UESURIBuilder.parse_uesuri(UCR_URI).set_object_code(EXTENDED_FORM_CODE).to_uesuri
    view.template_uri(new_template)
    return view
  end

  # if you do not set template_uri on view or returns nil so default is used
end

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



61
62
63
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 61

def on_before_init(ctx)
  return ctx.view;
end

- (Object?) on_cancel(ctx)

Method used for handling cancel actions.

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



167
168
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 167

def on_cancel(ctx)
end

- (Object?) on_dialog_closed(ctx)

Callback method for processing dialog result. If dialog set result, it is available in reserved parameter 'uuResult'

Examples:


def on_dialog_closed(ctx)
  # get dialog result from reserved parameter :uuResult
  result = ctx.parameters[:uuResult]

  if !result.nil?
    view = ctx.view
    # if dialog result is available set it as value of component
    format = view.component(:FORMAT_TEXT)
    format.value = result
    return view
  end

end

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



194
195
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 194

def on_dialog_closed(ctx)
end

- (Object?) on_init(ctx)

Method used for filling initial values to components. E.g. acquired from Object Store. All components are available here now.

Examples:

def on_init(ctx)
  view = ctx.view

  # set inital value to component with code 'TEXT_AREA'
  view.component(:TEXT_AREA)
  view.value = "Some init value"

  # get all components whose code ends with 'BUTTON', e.g. 'CANCEL_BUTTON', 'ADD_BUTTON' and disable them
  buttons = view.find_components("BUTTON$")
  buttons.each do |button|
    button.disabled = true
  end

  # you must return view, otherwise changes will not take effect
  return view
end

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



91
92
93
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 91

def on_init(ctx)
  return ctx.view;
end

- (Object?) on_submit(ctx)

Method used for process result of this use case, usually ands up with navigation.

Examples:

def on_submit(ctx)
  view = ctx.view

  # get components value
  name = view.component(:NAME_INPUT)
  age = view.component(:AGE_INPUT)

  # check if name is not empty
  if (name.nil?) || (name.empty?)
    error_msg = UU::OS::GVC::Message.new(
        {
            code: "CODE",
            severity: UU::OS::GVC::Message::MessageSeverity::ERROR,
            text: "Name can not be empty!"
        })

    view.add_message(error_msg)
    return view
  end

  # call some business logic
  UU::OS::Model.create(name, age)

  # navigate user to main object
  return ctx.action.forward(ctx.uu_uri)
end

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



157
158
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 157

def on_submit(ctx)
end

- (Object?) on_value_change(ctx)

Method used for handling component changes.

Examples:

def on_value_change(ctx)
  view = ctx.view

  # get component which trigger event
  input = view.event_source_component # UU::OS::Form::Input

  # if input size is greater than 5 enable submit button
  submit = view.component(:SUBMIT_BUTTON)
  if input.value.size > 5
    submit.disabled = false
  else
    submit.disabled = true
  end
  return view
end

Parameters:

Returns:

  • (Object, nil)

    Any object that is serializable to View or Action response message, it is typically one from:



119
120
# File 'uu_os_vuc-server-3.6.2/lib/uu/os/vuc/visual_use_case_controller.rb', line 119

def on_value_change(ctx)
end