code: def do_action_for_many(self, context, request):
          
          savepoint = transaction.savepoint()
          workflow = getToolByName(context, 'portal_workflow')
          site_path = request['PATH_INFO'].replace("/@@API/doActionFor_many", "")
  
          obj_paths = json.loads(request.get('f', '[]'))
          action = request.get('action', '')
          if not action:
              raise BadRequest("No action specified in request")
  
          ret = {
              "url": router.url_for("doActionFor_many", force_external=True),
              "success": True,
              "error": False,
          }
  
          for obj_path in obj_paths:
              if not obj_path.startswith("/"):
                  obj_path = "/" + obj_path
              obj = context.restrictedTraverse(str(site_path + obj_path))
              if obj_path.startswith(site_path):
                  obj_path = obj_path[len(site_path):]
              try:
                  workflow.doActionFor(obj, action)
                  obj.reindexObject()
              except Exception as e:
                  savepoint.rollback()
                  msg = "Cannot execute '{0}' on {1} ({2})".format(
                      action, obj, e.message)
                  msg = msg.replace("${action_id}", action)
                  raise BadRequest(msg)
          return ret
docs: /@@API/doActionFor: Perform workflow transition on a list of objects.
  
          required parameters:
  
              - obj_paths: a json encoded list of objects to transition.
              - action: the id of the transition