Axapta 如何在AX2009中找到最后一个labelId?

Axapta 如何在AX2009中找到最后一个labelId?,axapta,dynamics-ax-2009,x++,ax,Axapta,Dynamics Ax 2009,X++,Ax,我想在AX2009表中插入labelModuleId中的所有标签 我有这份工作,几乎可以做我需要的一切。但我必须输入最大Id(toLabel=1000): static void ocshowallabel(Args\u Args) { 信佛信佛; LanguageId当前LanguageId; LabelModuleId LabelModuleId='OCM';//他是一个非常聪明的人 标签; LabelIdNum toLabel=1000; 唇形唇形; OcShowAllLabels\u R

我想在AX2009表中插入labelModuleId中的所有标签

我有这份工作,几乎可以做我需要的一切。但我必须输入最大Id(toLabel=1000):

static void ocshowallabel(Args\u Args)
{
信佛信佛;
LanguageId当前LanguageId;
LabelModuleId LabelModuleId='OCM';//他是一个非常聪明的人
标签;
LabelIdNum toLabel=1000;
唇形唇形;
OcShowAllLabels\u RS选项卡;
标签blub=新标签();
str标签;
;
xInfo=新xInfo();
currentLanguageId=xInfo.language();
从选项卡中删除\u
其中tab.LanguageId==currentLanguageId
&&tab.LabelModuleId==LabelModuleId;

对于(frLabel=1;frLabel如果这是一次性作业,您可以停止AOS并在记事本中打开标签文件。它位于名为axXXXen-us.ald的应用程序文件夹中,其中XXX是您的标签文件名,en-us是您的语言

查看classes\Tutorial\u ThreadWork\doTheWork以了解它们在哪里使用while(sLabel)而不是像您这样的for循环

container doTheWork(Thread t,LabelType searchFor)
{
    container   retVal;
    SysLabel    sysLabel = new SysLabel(LanguageTable::defaultLanguage());
    str         slabel;
    ;

    slabel = sysLabel.searchFirst(searchFor);
    while (slabel)
    {
        retVal += sLabel;
        slabel = sysLabel.searchNext();
    }

   return retVal;
}
因为标签文件是一个文本文件,所以您不能只选择最后一个文件,而是必须遍历该文件。但是,AX缓存标签,但据我所知,我不相信您可以轻松访问标签缓存


最后,希望您不要尝试这样做,但不要尝试只读取标签文本文件,因为AX有时会有一些标签,它没有从缓存中刷新到该文件将刷新它们,但我不确定。

我想这是另一个选项。您可以插入标签以获取下一个标签号,然后立即删除它:

static void Job32(Args _args)
{
    SysLabel sysLabel = new SysLabel(LanguageTable::defaultLanguage());
    SysLabelEdit sysLabelEdit = new SysLabeLEdit();
    LabelId labelid;
    ;

    labelId = syslabel.insert('alextest', '', 'OCM');

    info(strfmt("%1", labelId));

    sysLabelEdit.labelDelete(labelId, false);
}

但它似乎使用了数字序列中的数字然后通过代码检查文本文件。查看Classes\SysLabel*以了解系统如何处理标签。这看起来并不简单。

这是另一个可能适用于您的选项。这也将识别缺少的标签。将“en us”更改为您的语言。这是一个“脏”选项我想是另一种选择。您可能需要添加一些内容,如“如果我们在一行中找到5个类似于“@OCM”的标签”


for(i=1;i1)。这不是一次性作业,我不喜欢直接使用labelfile。但你是对的,这是最简单的解决方案。2.sysLabel.searchFirst搜索标签,而不是labelId。因此在这里没有帮助。
static void Job32(Args _args)
{
    SysLabel sysLabel = new SysLabel(LanguageTable::defaultLanguage());
    SysLabelEdit sysLabelEdit = new SysLabeLEdit();
    LabelId labelid;
    ;

    labelId = syslabel.insert('alextest', '', 'OCM');

    info(strfmt("%1", labelId));

    sysLabelEdit.labelDelete(labelId, false);
}
for (i=1; i<999; i++)
{
    labelId = strfmt("@%1%2", 'OCM', i);
    s = SysLabel::labelId2String(labelId, 'en-us');

    if (s like '@OCM*')
    {
        info (strfmt("%1: Last is %2", i, s));
        break;
    }
    info(strfmt("%1: %2", i, s));
}