Ошибка в поле списка диалога при использовании массива в цикле @For - PullRequest
0 голосов
/ 26 февраля 2020

Я нахожу интересную ошибку в поле Dialog List.

Я пытаюсь создать список лет, начиная с этого года минус 17, и получить список go в обратном направлении на 30 лет. (напр .: 2003, 2002, 2001, 2000, ... 1973). Я не хочу жестко задавать параметры, поскольку каждый год мне приходится go возвращать и изменять его.

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

startYear := @Year(@Now)-17; @For( x:=1; x<=30; x:=x+1; temp[x] := startYear-x); temp

Когда я пошел, чтобы сохранить его, он переписывается как

startYear := @Year(@Now)-17; @For( x:=1; x<=30; x:=x+1; temp[x := startYear-x ]); temp

Очевидно, temp[x := startYear-x ] не будет работать, но независимо от того, что я пытаюсь, редактор сохраняет сброс кода к этому.

Кто-нибудь знает, как написать этот тип формулы, чтобы он работал и делал то, что я хочу?

(Notes Designer 9.01 FP8)

1 Ответ

0 голосов
/ 26 февраля 2020

Прежде всего, чтобы ответить на ваш вопрос: Назначение индекса в массивах, как вы делаете в Формуле, невозможно, см. Этот отрывок из справки дизайнера (спасибо @Richard Schwartz):

Оператор индекса не может использоваться на левой стороне оператора присваивания. То есть вы не можете присвоить значение подписанному элементу. Вы должны создать полный список, а затем назначить его.

Второе: я проверил вашу формулу, и если вы поместите ее в «Значение» - Формула поля, то она не будет изменена с помощью F9, только при помещении ее в Формула списка диалогов I может воспроизвести то же поведение ... Но я бы не стал возражать: поскольку эта формула вообще не является действительной, это imho нельзя назвать "ошибкой".

Так вот как может выглядеть ваша исправленная формула как:

_startYear := @Year(@Now)-17; 
@For( _x:=1; _x<=30; _x:=_x+1; 
    _temp := @Text(_startYear-_x);
    _myArr := @Trim( _myArr : _temp )
);
_myArr

Не путайте из-за подчеркиваний: я использую их, чтобы отличать guish переменных от имен полей. Поскольку диалоговые списки хранят текст, вам необходимо преобразовать отдельные значения в текст. Если вы хотите, чтобы годы были в обратном порядке, просто измените одну строку:

 _myArr := @Trim( _temp : _myArr )

@ Язык формул - кстати, довольно круто в отношении списков, и можно было бы решить это по-разному. Например, используя daterange и explode:

_start := @Adjust(@Today;-17;0;0;0;0;0);
_end := @Adjust(@Today;13;0;0;0;0;0);
_daterange := @TextToTime( "[" + @Text(_start) + "-" + 
@Text(_end)+"]");
_allDates := @Explode( _dateRange );
@Text(@year(_allDates))

Но я признаю: как бы круто это ни было, оно не совсем интуитивно понятно, но это было бы решением в Notes 5, когда еще не было @For.

...