def RenderAjax(self, request, response):
    self.flow_name = self._GetFlowName(request)
    self.client_id = request.REQ.get("client_id", None)
    self.dom_node = request.REQ.get("dom_node")

    flow_cls = flow.GRRFlow.classes.get(self.flow_name)
    if flow_cls is not None:

      self.args = forms.SemanticProtoFormRenderer(
          flow_cls.args_type(), prefix="args").ParseArgs(request)

      try:
        self.args.Validate()
      except ValueError as e:
        return self.CallJavascript(
            response, "SemanticProtoFlowForm.RenderAjaxError", error=str(e))

      self.runner_args = forms.SemanticProtoFormRenderer(
          flow_runner.FlowRunnerArgs(), prefix="runner_").ParseArgs(request)

      self.runner_args.Validate()

      self.flow_id = flow.GRRFlow.StartFlow(client_id=self.client_id,
                                            flow_name=self.flow_name,
                                            token=request.token,
                                            args=self.args,
                                            runner_args=self.runner_args)

    self.args_html = semantic.FindRendererForObject(self.args).RawHTML(request)
    self.runner_args_html = semantic.FindRendererForObject(
        self.runner_args).RawHTML(request)
    response = renderers.TemplateRenderer.Layout(
        self, request, response, apply_template=self.ajax_template)
    return self.CallJavascript(response, "SemanticProtoFlowForm.RenderAjax",
                               renderer=self.__class__.__name__,
                               dom_node=self.dom_node)
Parse the flow args from the form and launch the flow.
dataset/ETHPy150Open google/grr/grr/gui/plugins/flow_management.py/SemanticProtoFlowForm.RenderAjax