How can I resolve this error?⇒Table name cannot be null: java.lang.IllegalStateException: Table name cannot be null:

Risa4
Tera Contributor

Hi,all

When I run the following code, I get this error in the sys_log.
Why is this error output?
Also, what do I need to fix in the code?
I checked the community for a similar question in the past, but could not solve it. Similar questions that have been posted in the past can be found at the following URL.
Table name cannot be null: java.lang.IllegalStateException: Table name cannot be null: com.glide.db....


This error is one line of error text that is shown here, followed by some difficult lines, but it's very long, so I'm leaving it out for now. I will add more if necessary.

【Error MSG】
Table name cannot be null: java.lang.IllegalStateException: Table name cannot be null:


try { //システムエラーを検知する為のTryCatch
    var import_table ='u_import_seino_joho_meisai'; //インポートセットテーブル用の変数定義とテーブル名を代入。
    var seino_joho_table ='u_seino_joho_meisai'; //テーブル用の変数定義とテーブル名を代入。

    var grImp = new GlideRecord(import_table);
    grImp.query(); //全レコード取得する
    
    while (grImp.next()) { //1行ずつレコード確認する
        var flag_error = false;//エラーハンドリングの共通フラグ。エラー出力される場合はtrueを代入して処理停止し、添付ファイル削除をしない。
        var grAtt = new GlideRecord('sys_attachment');
        var flag_csv = false; //CSVファイル存在確認用フラグNo.8用
        var flag_data_empty = false;//CSVファイルのデータの有無確認用フラグ
        
        grAtt.query(); //「sys_attachment」テーブルのレコード全てを検索
        var flag_rec_count = 0; //レコードに添付されているファイル数確認用の変数。

        while (grAtt.next()) {
            var flag_not_csv = false; //CSV以外のファイル形式を判断するフラグ
            //「sys_attachment」テーブルの「table_sys_id」と「u_import_seino_joho_meisai」テーブルのsys_idが同じ場合に処理。
            if (grAtt.table_sys_id == grImp.getUniqueValue()) {
                //ここに1レコードに2ファイル以上添付ファイルがあればエラーを出力する処理追加
                if (grAtt.getValue('file_name').endsWith('.csv')) {
                    flag_rec_count = flag_rec_count + 1; //同じテーブルsys_idのレコードが存在する場合はカウントアップして重複をマーク。
                    flag_csv = true; //CSVファイルが存在する場合はフラグにtrueを代入してエラー出力させない。
                }
            }
        }
                //上記の「 while (grAtt.next())」でsys_attachmentテーブルのレコードを確認して、エラーに合致するものがあれば下記のエラー処理を実行しログ出力する。
                //エラーとなったレコードは、処理をしない。正常に処理できるレコードのみCSVの処理とレコード作成を実行。
                if (flag_csv == false) {//CSVファイルが無ければエラーを出力するNo.8用
                    gs.info('レコードに添付されているCSVファイルがありません。\n<対象レコード>\nSYS_ID=' +  grImp.getUniqueValue());
                    flag_error = true;//エラーフラグを立てる
                }else if(flag_rec_count>1){//添付ファイルが2つ以上存在すればエラー出力するNo.11用
                    gs.info('CSVファイルが1つのレコードに2つ以上添付されています。レコードを確認してください。\n<対象レコード>\nSYS_ID=' +  grImp.getUniqueValue());
                    flag_error = true;//エラーフラグを立てる。
                //エラー条件に合致しなければ、CSVファイルの内容を元にレコードを作成する。
                }else{getCsv(grImp);  
                    if (flag_error == false) {//flag_errorがfalseであればエラーが出力されてないと判断する。
                      //処理が正常終了したら
                    gs.info('CSVファイルのインポートが正常終了しました。\n<対象レコード>\nSYS_ID=' + grImp.getUniqueValue());
                }  
                }
            }
} catch (e) {
    gs.info("例外メッセージ" + e);

}
//CSVを読み取ってレコード作成
function getCsv(grImp) {
    var gsAttachment = new GlideSysAttachment();//GlideSysAttachmentクラスをgsAttachmentを宣言して利用できるようにする。

    var delimiter = ','; // csvファイルで使用する区切り文字はカンマとする。
    var quoteCharacter = '"'; //csvファイルのなかで利用する引用符(データをどこまで一区切りにするか)をここで定義する。

    //添付ファイルを取得する
    var agr = gsAttachment.getAttachments('u_import_seino_joho_meisai', grImp.getUniqueValue());
    if (agr.next()) { // CSVファイルが存在した場合に下記処理を実行する
        if (agr.getValue('file_name').endsWith('.csv')) { //ファイルの拡張子が「.csv」のみ対象とする
            var attachmentStream = gsAttachment.getContentStream(agr.sys_id); //添付ファイルの内容を含むストリームを返す。SNOWの関数機能を利用してストリーム形式にCSVを変換してる。
            var reader = new GlideTextReader(attachmentStream); //指定した入力ストリームの GlideTextReader オブジェクトを作成する。SNOWの関数機能を利用する宣言。
            var isHeader = true; //ヘッダー用フラグ。見出しがないファイルの場合はfalseにする。
            var csv_count_row = 0; //CSVファイルのデータ有無確認用変数No.9

            //CSVファイル1行目以降が空欄でなければレコード作成
            while ((csvLine = reader.readLine()) != null) { //CSVを1行ずつ読み、次の行が存在するかを確認する。nullじゃなければ後続の処理続行。
                if (isHeader == true) { //ヘッダーレコードは読み込み対象外とする。isHeaderがfalseならif内の処理を実行しない。
                    isHeader = false;
                    continue;
                }
           //CSVファイルの処理行をカウントする。
           //カラムのみのCSVファイルの場合カウントアップされずに0が代入されている。
           csv_count_row = csv_count_row + 1;//データが格納されている為、カウントアップする。


            // CSVファイルのA列から順に配列に格納する
            //CSVの1行ずつのデータをデリミタで区切って引用符で囲われた箇所は1つのデータとして見なすように設定
                var record = new sn_impex.CSVParser().parseLineToArray(csvLine, delimiter, quoteCharacter);

            //CSVファイルの各列の書式をチェックするNO.6
            //書式チェックのメイン処理は下部「function format_check~」で行う。
            var flag_format = format_check(record); //チェックが正常であれば「true」、書式の相違があれば「false」が返る。
            if (flag_format == false) { //書式が異なる場合の処理No.6
                //エラーハンドリングNo.6
                gs.info('データの書式が違います。レコードに添付されているCSVファイルを確認してください。\n<対象レコード>\nSYS_ID=' + grImp.getUniqueValue());
                flag_error = true; //ファイルの書式が違う為エラーフラグにtrueを代入する。後続のデータインポート処理、添付ファイル削除処理をしない。
                break;
            }
           //CSVファイルの各列の桁数をチェックするNO.7
           var field_max_len = [3, 6, 5, 19, 40]; //各フィールドの最大文字数を設定する。
           if (record[0].length <= field_max_len[0] && record[1].length <= field_max_len[1] &&
            record[2].length <= field_max_len[2] && record[3].length <= field_max_len[3] &&
            record[4].length <= field_max_len[4])  { 
            
            var rec = new GlideRecord(seino_joho_table); // レコード作成対象テーブル
            rec.intialize();
            rec.u_scheme_id = record[0]; //CSVファイルA列:「スキームID」
            rec.u_system_id = record[1]; //CSVファイルB列:「システムID」
            rec.u_seino_shubetsu_id = record[2]; //CSVファイルC列:「性能情報種別ID」
            rec.u_datetime = record[3]; //CSVファイルD列:「DATETIME」
            rec.u_value = record[4]; //CSVファイルE列:「VALUE」
            rec.insert(); //レコード作成
                } else {
            //最大文字数超過のエラーNo.7
                    gs.info('データの文字数が最大文字数を超えている為インポートできません。\n<対象レコード>\nSYS_ID=' + grImp.getUniqueValue());
                    flag_error = true;//エラー出力されている為、フラグをtrueにする。
                }

            //添付ファイル削除処理
                if (flag_error == false) {//エラー出力されていなければ添付ファイルの削除処理を実行する。

                    gsAttachment.deleteAttachment(agr.sys_id);
                }
            }
            
            if (csv_count_row == 0) {//CSVファイルのデータが0件でヘッダーレコードのみの場合の処理No.9
                gs.info('添付されているCSVファイルにデータが無い為処理を実行できませんでした。データの有無を確認してください。\n<対象レコード>\nSYS_ID=' + grImp.getUniqueValue());
                flag_error = true;//エラー出力されている為、フラグをtrueにする。
            }
        }
    }
}

//CSVファイルの書式をチェックする
function format_check(record){
    //CSVファイルの各書式を照合する為に正規表現を定義する。
    var rec_regex = [ //正規表現定義用の変数をここで宣言する。
        /\d{3}$/, //CSVファイル0番目のデータ
        /\d{6}$/, //CSVファイル1番目のデータ
        /\d{5}$/, //CSVファイル2番目のデータ
        /[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\s([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/, //CSVファイル3番目のデータ(yyyy-mm-dd HH:MM:SS形式としている)
        /\d*\.\d*/ //CSVファイル4番目のデータ
    ];
    //日時の表記が(yyyy / mm / dd形式)の場合
    var rec_3 = /[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\s([01]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/; // CSVファイルD列用(yyyy / mm / dd形式)
    var flag_match = true; //書式が正規表現と一致しているか確認するフラグ。合致していればtrue。
    for (var i = 0; i < rec_regex.length; i++) {

        flag_match = rec_regex[i].test(record[i]); //指定した正規表現と「record」配列の内容が一致しているか確認し、「true」or「false」を返す

        if (i == 3 && flag_match == false) { //yyyy/mm/dd形式の場合に再度確認
            flag_match = record_3.test(record[i]);
        }

        //gs.info("マッチングテスト" + i + "回目:" + rec_regex[i] + "/" + record[i] + "/ 結果:" + flag_match);


        if (flag_match == false) { //一致しない項目が1つでも存在した場合は「false」を返す
            return false;
        }
    }

    //全て一致していると「true」を返す
    return true;
}

BestRegard

8 REPLIES 8

Maik Skoddow
Tera Patron
Tera Patron

Hi

it would be really helpful to know which line exactly causes the exception.

Kind regards
Maik

Hi,Maik

Thanks for the reply.
I would like to tell you how many lines are exceptions, but I don't know how to find out which line raises the exception, can you tell me?

 

Thank you for your help.

 

Just copy the complete log output of one exception into a text file and attach it here. I will check then whether it can help me.

Kind regards
Maik

Hi,Maik

 

Thank you for your answer.
Here is the attachment with a copy of the error log.
Please check it.

Thank you for your help.