在@For循环中使用数组时,对话框列表字段中的错误

问题描述 投票:0回答:1

我在对话框列表字段中发现了一个有趣的错误。

我正在尝试创建从今年开始减去17的年份列表,并使该列表倒退30年。 (例如:2003、2002、2001、2000,... 1973)。我显然不想对选项进行硬编码,因为每年我都必须重新输入并进行更改。

我创建了一个简单的对话框列表字段,并选择了“使用公式进行选择”并输入以下公式:

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)

lotus-notes lotus lotus-formula
1个回答
0
投票

首先回答您的问题:我从未像在公式中那样分配数组的子集...不知道这是否应该工作。因此,这是您更正后的公式的样子:

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

不要因为下划线而感到困惑:我用它们来区分变量和字段名。当对话框存储文本时,您需要将单个值转换为文本。如果您想按相反的顺序排列年份,则只需更改一行:

 _myArr := @Trim( _temp : _myArr )

@@ Formula语言-顺便说一下-对于列表来说很酷,并且可以用不同的方式解决此问题。例如。通过使用daterange并爆炸:

_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))

但是我承认:它虽然很酷,但并不是很直观,但是当没有@For时,这将是Notes 5中的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.