Неожиданный результат сохранен в атрибуте, заполненном сценарием DXL - PullRequest
0 голосов
/ 26 марта 2020

Теперь я сопровождаю несколько сценариев dxl и проверяю их все.

Сценарий, о котором идет речь, форматирует несколько строк в буфер, а затем преобразует их обратно в строку. , Эта строка затем объединяется с другой строкой, а затем сохраняется в атрибуте. Код ниже (имена переменных и количество параметров функции были санированы FYI):

string formatForField(string s1, string s2){
    Buffer buff = create();

    buff += s1 
    buff += "\n";
    buff += s2;

    string formattedString = tempStringOf(buff);
    delete(buff);
    return formattedString;
}

void alterField(string inputString1, string inputString2){
    string formattedChange = formatForField(inputString1, inputString2);
    string oldValue = currentObject."Attribute Name";

    if (oldValue != "") {
        oldValue = oldValue "\n---\n";
    }

    string newValue = oldValue formattedChange;
    currentObject."Attribute Name" = newValue;
}

Проблема заключается в том, что иногда вместо ожидаемого результата значение □ добавляется к значению «Имя атрибута» текущего объекта на предыдущее значение.

Если, например, значение (current object)."Attribute Name равно "Lorem Ipsum", а после запуска сценария ожидаемое значение (current object)."Attribute Name равно:

Lorem Ipsum
---
inputString1
inputString2

Тогда время от времени значение (current object)."Attribute Name будет на самом деле:

Lorem Ipsum
---
□

Мне не удалось обнаружить каких-либо подобных проблем в Интернете, поэтому я публикую здесь. Я не уверен, что здесь происходит, так как 99% времени сценарий дает ожидаемый результат. Интересно, что если атрибут содержит белый квадрат после запуска сценария, повторный запуск сценария с тем же вводом приведет к ожидаемому выводу ...

Редактировать: На этом изображении показан белый квадрат, которым я являюсь на примерно, как это, кажется, не отображается в режиме просмотра живого поста

Дополнительное редактирование: при дальнейшей проверке я обнаружил, что иногда включаются дополнительные случайные символы. Правый столбец должен содержать текст, а не случайные символы, которые он содержит.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

понял ошибку. Бафф был удален сразу после вызова tempStringOf, поэтому память, на которую ссылаются, была освобождена, что вызвало странность. Глупая ошибка с моей стороны.

0 голосов
/ 26 марта 2020

Простите, если я изложу здесь очевидное, но я не совсем уверен, в чем именно заключается проблема. Из того, что я прочитал, alterField имеет следующую характеристику:

Ожидаемый ввод - две строки. Условие: оба они должны иметь значение. Функция проверяет, имеет ли атрибут «Имя атрибута» уже значение. Если это так, старое значение должно быть сохранено, и две строки должны быть добавлены к старому значению, разделенных чертой. Две строки объединяются возвратом каретки.

Таким образом, после запуска следующего сценария

Object currentObject = first
currentObject."Attribute Name" = "good morning"
String partOne = "good"
String partTwo = "evening"
alterField (partOne, partTwo)
alterField (partOne, partTwo)
alterField (partOne, partTwo)

атрибут «Имя атрибута» первого объекта модуля будет иметь следующее содержимое :

good morning
---
good
evening
---
good
evening
---
good
evening

Если предварительное условие не выполнено и partOne пусто (""), partTwo равно "вечер", то после трех вызовов alterField атрибут будет выглядеть следующим образом:

good morning
---

evening
---

evening
---

evening

Вопрос в том, что вы ожидаете?

...