You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics NAV 2016 C/AL代码判断文本是否以'0000'结尾的方法

解决NAV 2016 C/AL中判断文本是否以指定后缀结尾的问题

你遇到的情况很正常——NAV 2016的C/AL标准库确实没有Text.ENDSWITH()函数,这个函数是在后续的Microsoft Business Central版本(比如BC14及以后)才被引入的,所以你找不到自动补全、编译报错都是意料之中的事。

下面给你两种可靠的替代实现方法,都是用NAV2016原生支持的函数来完成:

方法一:使用Text.RIGHT()函数

这个方法最直观,直接提取文本的最后N个字符(这里N是目标后缀的长度,也就是4),再和目标后缀对比。需要注意先判断输入文本的长度是否足够,避免运行时出错:

LOCAL FUNCTION IsEndingWith0000@1000000000(InputText@1000000001 : Text) : Boolean;
VAR
    TargetSuffix@1000000002 : Text[4];
BEGIN
    TargetSuffix := '0000';
    // 先检查输入文本长度,避免取子串时触发错误
    IF STRLEN(InputText) < STRLEN(TargetSuffix) THEN
        EXIT(FALSE);
    // 提取最后4个字符并对比
    EXIT(Text.RIGHT(InputText, STRLEN(TargetSuffix)) = TargetSuffix);
END;

方法二:使用Text.MID()函数

这种方法通过计算起始位置来提取后缀,逻辑和方法一类似,只是取子串的方式不同:

LOCAL FUNCTION IsEndingWith0000@1000000000(InputText@1000000001 : Text) : Boolean;
VAR
    TargetSuffix@1000000002 : Text[4];
    SuffixLength@1000000003 : Integer;
BEGIN
    TargetSuffix := '0000';
    SuffixLength := STRLEN(TargetSuffix);
    IF STRLEN(InputText) < SuffixLength THEN
        EXIT(FALSE);
    // 计算起始位置:总长度 - 后缀长度 + 1(因为C/AL的字符串索引从1开始)
    EXIT(Text.MID(InputText, STRLEN(InputText) - SuffixLength + 1, SuffixLength) = TargetSuffix);
END;

额外优化建议

如果以后需要判断其他后缀,可以把TargetSuffix改成函数参数,做成通用的后缀判断函数,比如:

LOCAL FUNCTION TextEndsWith@1000000000(InputText@1000000001 : Text; TargetSuffix@1000000002 : Text) : Boolean;
VAR
    SuffixLength@1000000003 : Integer;
BEGIN
    SuffixLength := STRLEN(TargetSuffix);
    IF (SuffixLength = 0) OR (STRLEN(InputText) < SuffixLength) THEN
        EXIT(FALSE);
    EXIT(Text.RIGHT(InputText, SuffixLength) = TargetSuffix);
END;

这样调用的时候直接写TextEndsWith(YourText, '0000')就可以了,复用性更强。

内容的提问来源于stack exchange,提问作者Immac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:28:31