日々精進

新しく学んだことを書き留めていきます

シェルスクリプトをどこからでも実行出来るようにする

shell.shというファイルに ant -lib libs/ とか書いてると、./libsフォルダが存在するところからしか実行出来なくなってしまう。 ./project/shell.sh のようにシェルがあるところ以外からもシェルスクリプトを実行出来るようにするためには、 以下のようにシェルスクリプトのパスを取得して使う。

script_dir_path=$(cd "$(dirname "$0")"; pwd)
ant -lib ${script_dir_path}/libs/

参考:

stackoverflow.com

qiita.com

ResultSetに特定のカラムが含まれているか、やカラムのメタデータを取得する

以下のようにすると特定の名前のカラムがあるかどうかを判定出来る。

ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();

// get the column names; column indexes start from 1
for (int i = 1; i < numberOfColumns + 1; i++) {
    String columnName = rsMetaData.getColumnName(i);
    // Get the name of the column's table name
    if ("theColumn".equals(columnName)) {
        System.out.println("Bingo!");
    }
}

こういう感じでカラムの型もわかる。

    private static Integer getColumnType(ResultSet rs, String columnName) throws SQLException {
        ResultSetMetaData rsMetaData = rs.getMetaData();
        int numberOfColumns = rsMetaData.getColumnCount();

        for (int i = 1; i < numberOfColumns + 1; i++) {
            String name = rsMetaData.getColumnName(i);
            rsMetaData.getColumnType(i);
            // Get the name of the column's table name
            if (columnName.equals(name)) {
                return rsMetaData.getColumnType(i);
            }
        }
        return null;
    }

参考:

stackoverflow.com

HttpServletRequestから完全なURLを取り出す

HttpServletRequestのgetRequestURLにはQueryStringが含まれていないので、以下のようにする必要がある。

public static String getFullURL(HttpServletRequest request) {
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();

    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}

一発で取れるメソッドを用意してくれても良かったんじゃ無いかなぁ。。

参考:

stackoverflow.com

Salesforceで外部オブジェクトをApexからinsertする

Salesforceの外部オブジェクトをApexからinsertする場合、普通のオブジェクトと同じようにinsertコマンドではできなかった。 Database.insertImmediateまたはDatabase.insertAsyncを使うとinsertできた。 Database.insertImmediate(sObject) Database.は省略不可で、insertImmediate(sObject)のみではエラーになった。

参考:

リリースノート