首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camunda外部任务nodejs保存到变量的链接

Camunda外部任务nodejs保存到变量的链接
EN

Stack Overflow用户
提问于 2022-06-23 19:39:58
回答 1查看 63关注 0票数 0

我将一个文件上传到OpenKM中,并将URI作为响应获取到文件。我想将链接保存为processVariable。

代码语言:javascript
复制
const { Client, logger } = require("camunda-external-task-client-js");
const { Variables } = require("camunda-external-task-client-js");
const { exec } = require('child_process');

const http = require('http');
const fs = require('fs');
  
const config = { baseUrl: "http://localhost:8080/engine-rest" };
const client = new Client(config);

var moment = require("moment");

client.subscribe("Rechnung", async function({ task, taskService }) {

  console.log("*** Processing task " + task.id);
  var uploadedFile = task.variables.get("rechnung");

  const file = fs.createWriteStream(uploadedFile.filename);
  const request = http.get("http://localhost:8080/engine-rest" + uploadedFile.remotePath, function(response) {

        response.pipe(file);
        file.on("finish", () => {
                file.close();
        });
  });


  var cmd = "curl -u okmAdmin:admin -H \"Accept: application/json\" -X POST -F docPath=\"/okm:root/manuel/" + task.id + "_" + uploadedFile.filename + "\" -F content=\"@" + uploadedFile.filename + "\" http://172.20.16.90:8080/OpenKM/services/rest/document/createSimple";

  var newlink = "";
  
  exec(cmd, (err, stdout, stderr) => {

        newlink = "http://172.20.16.90:8080/OpenKM/frontend/index.jsp?uuid=" + JSON.parse(stdout).uuid;

        if(err)
            console.log("error " + JSON.stringify(stderr));

  });

  var processVariables = new Variables();

  processVariables.set("link", newlink );

  await taskService.complete(task, processVariables);

});

变量被创建,但是链接是空的。我试过encodeURIComponent,但没有成功。你能告诉我该怎么做吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-06-24 20:03:04

问题是异步函数不等待exec完成。我就这样解决了

代码语言:javascript
复制
const { Client, logger } = require("camunda-external-task-client-js");
const { Variables } = require("camunda-external-task-client-js");
const { exec } = require('child_process');

const http = require('http');
const fs = require('fs');
  
const config = { baseUrl: "http://localhost:8080/engine-rest" };
const client = new Client(config);

// rechnungseingang
client.subscribe("Rechnung", async function({ task, taskService }) {

  console.log("*** Processing task " + task.id + " - " + task.processInstanceId);

  console.log(JSON.stringify(task));

  // get the uploaded file
  var uploadedFile = task.variables.get("rechnung");

  // save it to disk
  const file = fs.createWriteStream(uploadedFile.filename);
  const request = http.get("http://localhost:8080/engine-rest" + uploadedFile.remotePath, function(response) { response.pipe(file); file.on("finish", () => { file.close(); }); });

  var createFolder = "curl -u okmAdmin:admin -H \"Accept: application/json\" -H \"Content-Type: application/json\" -X POST -d \"/okm:root/ibass/" + task.processInstanceId + "\" http://192.168.0.31:8080/OpenKM/services/rest/folder/createSimple";
  await sh(createFolder);

  // upload to openkm
  var cmd = "curl -u okmAdmin:admin -H \"Accept: application/json\" -X POST -F docPath=\"/okm:root/ibass/" + task.processInstanceId + "/" + uploadedFile.filename + "\" -F content=\"@" + uploadedFile.filename + "\" http://192.168.0.31:8080/OpenKM/services/rest/document/createSimple";

  let newlink = await sh(cmd);

  var processVariables = new Variables();

  processVariables.set("link", "http://192.168.0.31:8080/OpenKM/frontend/Download?uuid=" + newlink);

  await taskService.complete(task, processVariables);

});

function sh(cmd) {
    return new Promise(resolve => {

        exec(cmd, (err, stdout, stderr) => {

            let link;
            link = JSON.parse(stdout).uuid;
            if(err)
                console.log("error " + JSON.stringify(stderr));
            resolve(link);

        });
    })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72735758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档