Home > OS >  Forge - The category 'rfaFile' in '$(rfaFile)' is unrecognized
Forge - The category 'rfaFile' in '$(rfaFile)' is unrecognized

Time:07-13

We are getting an error while executing a WorkItem in Forge's Design Automation API. The error is this:

Error: The category 'rfaFile' in '$(rfaFile)' is unrecognized. Valid values are args, settings, appbundles, engine, engines.

And it happens right after the 'Start preparing script and command line parameters.' in the report.txt. We are not really sure why's this happening. It looks like the error is thrown in the activity. The activity looks like this:

function publishActivity() {
        return $.ajax({
          url: "/api/forge/design_automation/activities",
          headers: {
            "X-CSRF-Token": csrfToken,
            "Forge-Token": forgeToken
          },
          method: "POST",
          contentType: "application/json",
          data: JSON.stringify({
            activity: {
              "id": "DeleteWallsActivity",
              "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i \"$(args[rfaFile].path)\" /al \"$(appbundles[TestAppId].path)\"" ],
              "parameters": {
                "rfaFile": {
                  "zip": false,
                  "ondemand": false,
                  "verb": "get",
                  "description": "Input Revit model",
                  "required": true,
                  "localName": "$(rfaFile)"
                },
                "result": {
                  "zip": false,
                  "ondemand": false,
                  "verb": "put",
                  "description": "Results",
                  "required": true,
                  "localName": "result.rfa"
                },
                "inputJson": {
                  "verb": "get",
                  "description": "input json",
                  "localName": "params.json",
                  "ondemand": false,
                  "required": false,
                  "zip": false
                }                
              },
              "engine": "Autodesk.Revit 2021",
              "appbundles": [ "petar3db.TestAppId test" ],
              "description": "Deletes walls from Revit file."              
            }
          })
        }).done(function(data) {
          console.log("Activity created");
          bundleUploadData = data["uploadParameters"];
        }).fail(function(jqXHR, textStatus) {
          console.log("Failed to create activity", jqXHR.responseJSON);
          console.log(jqXHR, textStatus);
        });
      }

and it looks like the "localName": "$(rfaFile)" is causing the trouble. Let's take a look at our WorkItem code which we execute via websockets:

{
 "headers": {
    "Authorization" : "Bearer <token here>"
 },
 "action": "post-workitem",
 "data": {
    "activityId": "petar3db.DeleteWallsActivity test",
    "arguments": {
        "rvtFile": {"url": "https://developer.api.autodesk.com/oss/v2/signedresources/da992c60-a3d7-469d-8c3e-d0f089e2e509?region=US", "pathInZip": "emptyfam.rfa"},
        "result": {"verb": "put", "url": "https://developer.api.autodesk.com/oss/v2/signedresources/b78151c1-93aa-495f-96c8-183bca26e071?region=US"},
        "inputJson": {"localName": "params.json", "url": "the url to the file"}
    }
 }
}

the really strange part is that this process worked just fine and started throwing this error when we added "inputJson" into the activity and workItem. (We want to send some JSON data to the AppBundle with the WorkItem) What can be the issue? Are missing something?

CodePudding user response:

There is a mismatch in parameter name in activity with the argument name in workitem. Correct way to post the workitem should be:

{
 "headers": {
    "Authorization" : "Bearer <token here>"
 },
 "action": "post-workitem",
 "data": {
    "activityId": "petar3db.DeleteWallsActivity test",
    "arguments": {
        "rfaFile": {"url": "https://developer.api.autodesk.com/oss/v2/signedresources/da992c60-a3d7-469d-8c3e-d0f089e2e509?region=US", "pathInZip": "emptyfam.rfa"},
        "result": {"verb": "put", "url": "https://developer.api.autodesk.com/oss/v2/signedresources/b78151c1-93aa-495f-96c8-183bca26e071?region=US"},
        "inputJson": {"localName": "params.json", "url": "the url to the file"}
    }
 }
}

Change the argument field rvtFile to rfaFile.

CodePudding user response:

As for "localName": "$(rfaFile)", to be noted that if the local name is defined like this, Design Automation will come up a valid name for this argument by its own logic. If you want to fully control the input file, such as accessing it in the adding(Appbundles)'s code, it is recommended to define a "real" localName instead, e.g. "localName": "input.rfa"

In your case above, the WorkItem will still fail since we don't support to open rfa file by default. You may need to:

  • Define "localName": "inputRFA", so the input will be downloaded, unzipped as a folder named as inputRFA. emptyfam.rfa should be under this folder.
  • Call document.LoadFamily(".\inputRFA\emptyfam.rfa", out family); in your adding(Appbundles)'s code to open/load rfa file. See this Revit API
  • Related