Search code examples
marklogic

Running a custom JavaScript task in the backend Marklogic server


I'm trying to get all the collection list in datahub-staging from the backend server by runnng a gradle task.

I tried writing a below task:

cat myCustomJs.task 
task myJavascriptTask(type: com.marklogic.gradle.task.ServerEvalTask) {
  javascript = "cts.collections()"
}

But, I'm not sure how to create or run the task so that I can get the result of cts.collections(). Any leads on this is much appreciated.


Solution

  • I have a several tasks like this set up in my build.gradle file. Here's the pattern you're looking for:

    task getCollections(type: com.marklogic.gradle.task.MarkLogicTask) {
      doLast {
        def client = getAppConfig().newDatabaseClient()
        String request = """
          cts.collections().toArray().join("; ")
        """;
    
        try {
          String result
          result = client.newServerEval().javascript(request).evalAs(String.class);
          if (result != null) {
            println result
          }
        } finally {
          client.release()
        }
      }
    }