如何查看年份EDT长度?

时间:2016-06-10 07:36:19

标签: variables types axapta dynamics-ax-2012 x++

我创建了一个表 Field ,除此之外,我创建了自定义EDT,名为: MyEDT (例如)。

MyEDT INTEGER 类型,我扩展了系统标准EDT YearBase 。 所以,如果我插入字母字符(看起来像" abecjskjfh")我会收到错误。

但是我需要有一个规则,我想只插入4号字符的值,我只想要值看起来像:2000,2006,1982等......

我可以通过代码检查/控制它,在方法 validateWrite validateField 中,我对此代码进行了编码:

switch (p1)
{
 case fieldNum(MyTable, MyField)  :   
           if (strLen( (strFmt("%1",this.MyField)) ) != 4)
           throw error ("Inser only value AAAA");
           break;
}

但是,只有4个字符长度可以创建或者使用YEAR EDT吗?或者,还有另一种方法可以检查字段值的长度吗?

全心全意,

享受!

2 个答案:

答案 0 :(得分:3)

如果你想使用整数EDT,我认为除了overflow-x:auto;属性之外,没有办法限制允许数字的范围。所以你必须像你的问题一样在代码中进行验证。但我建议更改验证逻辑以验证数字范围,而不是将数字转换为字符串,然后验证字符数。这样,您还可以确保用户无法输入像0000这样的年份。

AllowNegative

另一种可能是使用日期EDT设置if (this.MyField< 1900 || this.MyField > 9999) { throw error("Please enter a year between 1900 and 9999"); } DateYearDateMonth属性,以便只显示年份。这也有助于数据输入(例如2被2002替换)并且如果用户输入例如“abc”,则会给出一个很好的错误对话框。

Screenshot of example using date EDT that only shows the year

答案 1 :(得分:1)

您可以使用X ++ match函数。

match('<:d:d:d:d>','2004')将匹配所有4位数字符串(0000-9999)。

match('<[12]:d:d:d>','2004')将匹配字符串1000-2999。

替代方法是使用System.Text.RegularExpressions.Regex.IsMatch ('1234', '^\d{4}$')