カスタム Bot コマンドの例外の作成

BotCommandException クラスを使用して、エラー レポート用のカスタム Bot コマンドの例外を作成することができます。メソッド内で例外をスローしたりキャッチしたりすることができます。カスタム例外を使用すると、詳細なエラー メッセージを指定して、catch ブロック内でより多くのカスタム エラーを処理できます。

例: カスタム BotCommandException の定義

この例では、DemoException というカスタム例外を定義しています。このクラスでは、BotCommandException を拡張し、スーパークラスの同等のコンストラクターを呼び出すことで、複数のコンストラクターを実装しています。使用するコンストラクターのみを実装すれば、スーパークラスの残りのコンストラクターは無視できます (Java クラスはコンストラクターを継承しないので、再実装する必要があります)。

package com.automationanywhere.botcommand.samples.exceptions;

import com.automationanywhere.botcommand.data.Value;
import com.automationanywhere.botcommand.exception.BotCommandException;

import java.util.Optional;

public class DemoException extends BotCommandException {
    public DemoException(String message, Throwable cause) {
        super(message, cause);
    }

    public DemoException(String message) {
        super(message);
    }

    public DemoException(Throwable cause) {
        super(cause);
    }

    public DemoException(String message, Throwable cause, Optional<Value> outputVariables) {
        super(message, cause, outputVariables);
    }
}

BotCommandException クラスの多くのコンストラクターは、引数として java.lang.Throwable オブジェクトを受け入れます。カスタム例外に原因となった例外を含ませる場合は、同様のコンストラクターを実装し、Throwable オブジェクト (通常は他の例外オブジェクト) をカスタム例外に渡すことができます。

次の例では、前述の例で定義した例外の使用方法を示しています。

    public static boolean checkRecordsExist(Connection con, String query)
    	    throws SQLException {
			
    	    Statement stmt = null;
    	    try {
    	        stmt = con.createStatement();
    	        ResultSet rs = stmt.executeQuery(query);
    	        rs.last();
    	        if(rs.getRow() > 0)
    	        	return true;
    	    } catch (SQLException e ) {
    	        throw new DemoException("Problem running statement", e);
    	    } finally {
    	        if (stmt != null) { stmt.close(); }
    	    }
    	    
    	    return false;
    	}

例外が見つかった場合は、例外をキャッチし、例で定義したようにエラー ステートメントを経由することになります。