重新加注/抛出错误

时间:2017-03-27 10:47:24

标签: error-handling progress-4gl openedge

我想"重新加注"这样的NO-ERROR语句之后出错:

FIND FIRST table
    WHERE table.ID = myID
    EXCLUSIVE-LOCK NO-WAIT NO-ERROR.

IF (NOT AVAILABLE temp AND LOCKED temp) THEN
    /* Here I want to raise/throw the last error ("Raise ERROR:STATUS") */

IF (NOT AVAILABLE table) THEN
    CREATE table.

是否有正在进行的声明?

2 个答案:

答案 0 :(得分:3)

在OpenEdge 10.1C及更高版本中,您可以避免错误。要重新发生错误,您必须先将其捕获。

所以,

var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true";
var device_id = "####";
var device_token = "#####";

var isWebSocketReady = false;
var ws = null;
var serialport = require("serialport");


var portName = 'COM5';
var sp= new serialport.SerialPort(portName, {
    baudRate: 9600,
    parser: serialport.parsers.readline("\r\n")

});
var WebSocket = require('ws');

/**
 * Gets the current time in millis
 */
function getTimeMillis(){
    return parseInt(Date.now().toString());
}

/**
 * Create a /websocket bi-directional connection 
 */
function start() {
    //Create the websocket connection
        isWebSocketReady = false;
    ws = new WebSocket(webSocketUrl);
    ws.on('open', function() {
                console.log("Websocket connection is open ....");
        register();
    });
    ws.on('message', function(data, flags) {
                console.log("Received message: " + data + '\n');
    });
    ws.on('close', function() {
                console.log("Websocket connection is closed ....");
    });
}

/**
 * Sends a register message to the websocket and starts the message flooder
 */
function register(){
        console.log("Registering device on the websocket connection");
    try{
        var registerMessage = '{"type":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+'"}';
                console.log('Sending register message ' + registerMessage + '\n');
        ws.send(registerMessage, {mask: true});
                isWebSocketReady = true;
    }
    catch (e) {
        console.error('Failed to register messages. Error in registering message: ' + e.toString());
    }   
}

/**
 * Send one message to ARTIK Cloud
 */
function sendData(temperature){
    try{
     //   ts = ', "ts": '+getTimeMillis();
            var data = {
                "temp": temperature

               };
        var payload = '{"sdid":"'+device_id+'", "data": '+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}';
        console.log('Sending payload ' + payload);
        ws.send(payload, {mask: true});
    } catch (e) {
        console.error('Error in sending a message: ' + e.toString());
    }   
}

/**
 * All start here
 */


start(); // create websocket connection

sp.on("open", function () {
    sp.on('data', function(data) {
            if (!isWebSocketReady){
                console.log("WebSocket is not ready. Skip sending data to ARTIK Cloud (data:" + data +")");
                return;
            }
            console.log("Serial port received data:" + data);
            //var parsedStrs = data.split(",");
            var temperature = parseInt(data);




            sendData(temperature);
    });
});

或者您首先捕获错误:

IF (NOT AVAILABLE temp AND LOCKED temp) THEN
    UNDO, THROW NEW Progress.Lang.AppError 
         (ERROR-STATUS:GET-MESSAGE (1), 
          ERROR-STATUS:GET-MESSAGE-NUM (1)) .

答案 1 :(得分:3)

迈克的回答是正确的。但只是提供早期版本解决方案,因为这是永久性记录:以前要抓住可用,正确的是将RETURN ERROR返回到调用者程序。在再次使用NO-ERROR之前,ERROR-STATUS不会被清除,您仍然可以查询可用的错误消息。