SAP PI UDF для имени файла на основе условия - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу передать имя файла динамически в зависимости от условия. Я написал код ниже, но имя файла не передается. Я думаю, что может быть некоторая проблема в условии if.

DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System","FileName");

//get current timestamp and reformat
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

//define filename
String filename = new String("");
if (orgid == "G"||"ZG"||"S")
{
filename = "N_" + df.format(date) + ".txt"  ;
}
if (orgid == "L")
{
filename = "D_" + df.format(date) + ".txt"  ;
}

if (orgid == "F"||"IV")
{
filename = "F_" + df.format(date) + ".txt"  ;
}


conf.put(key, filename);

return filename;

Пожалуйста, дайте мне знать, где я ошибаюсь.

1 Ответ

2 голосов
/ 17 февраля 2020

Несколько вещей:

Не используйте == для сравнения строк на равенство. Вместо этого используйте метод equals(). == проверяет, указывают ли оба объекта на одно и то же место в памяти, тогда как метод String # equals () оценивает сравнение значений в объектах.

Не инициализировать вашу строку переменные таким образом: String filename = new String("");. Это вызов String Constructor. Что вы должны сделать: String filename = "";.

Вы не можете проверить, содержит ли конкретная переменная одну из нескольких возможностей таким образом:

if (orgid == "G" || "ZG" || "S") {

Как упоминалось ранее, вы необходимо использовать метод String # equals () и для сравнения с другими возможностями необходимо сравнить каждую строку с переменной, например:

if (orgid.equals("G") || orgid.equals("ZG") || orgid.equals("S")) {

Вместо этого лучше использовать оператор switch для чего-то вроде этого, например:

/* Using the String#toUpperCase() method ensures that 
   we don't need to worry about what letter case happens
   to be in orgid.    */
switch (orgid.toUpperCase()) {
    case "G":
    case "ZG":
    case "S":
        filename = "N_" + df.format(date) + ".txt";
        break;
    case "L":
        filename = "D_" + df.format(date) + ".txt";
        break;
    case "F":
    case "IV":
        filename = "F_" + df.format(date) + ".txt";
        break;
    default:
        System.err.println("Can Not Establish A Proper File Name (missing prefix)!");
        return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...