2012-01-25 7 views
4

AX2009テーブルのlabelModuleIdからすべてのラベルを挿入したいと思います。AX2009の最後のラベルIDはどのようにして見つけることができますか?

私はこの仕事をしています。それは私が必要とするすべてのことをしています。しかし、私は、最大ID(toLabel = 1000)を入力する必要があります。

static void OcShowAllLabel(Args _args) 
{ 
    xInfo    xinfo; 
    LanguageId   currentLanguageId; 
    LabelModuleId  labelModuleId = 'OCM'; // hier evt eine Eingabe durch Benutzer zur Auswahl 
    LabelIdNum   frLabel; 
    LabelIdNum   toLabel = 1000; 
    LabelId    labelId; 
    OcShowAllLabels_RS tab; 
    Label    blub = new Label(); 
    str     label; 
    ; 

    xInfo = new xInfo(); 
    currentLanguageId = xInfo.language(); 
    delete_from tab 
     where tab.LanguageId == currentLanguageId 
     && tab.LabelModuleId == labelModuleId; 

    for (frLabel = 1; frLabel <= toLabel; frLabel++) 
    { 
     labelId = strfmt('@%1%2', labelModuleId, frLabel); 
     label = SysLabel::labelId2String(labelId, currentLanguageId); 
     if (labelId != label) 
     { 
      tab.initValue(); 
      tab.LabelId = labelId; 
      tab.Label = label; 
      tab.LanguageId = currentLanguageId; 
      tab.LabelModuleId = labelModuleId; 
      tab.insert(); 
     } 
    } 

    Info('done'); 
} 

答えて

1

これは、ワンタイムの仕事である場合は、あなただけのAOSを停止し、メモ帳でラベルファイルを開くことができます。 axXXXen-us.aldという名前のアプリケーションフォルダにあります。XXXはラベルファイル名で、en-usはあなたの言語です。

クラス\ Tutorial_ThreadWork \ doあなたが持っているようなforループの代わりにどこで(sLabel)を使用するかを見てください。ラベルファイルはテキストファイルなので

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には、そのファイルにキャッシュからフラッシュされていないラベルが付いていることがあります。私はLabel :: Flush(...)がそれらをフラッシュすると思いますが、わかりません。

+0

1.これは一度限りの仕事ではなく、私はlabelfileを直接使用したくありません。しかし、あなたが正しいです、それは最も簡単な解決策です。 2. sysLabel.searchFirstはlabelIdではなく、ラベルを検索します。だからここでは助けにならない。 – supertobi

1

これは別のオプションです。ラベルを挿入して次のラベル番号を取得してただちに削除することができます。

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); 
} 

番号シーケンスから数字を消費するようですが、 Label :: Flush(...)を実行し、コードを介してテキストファイルをチェックするだけです。 Classes \ SysLabel *を見て、システムがどのようにラベルを取り扱うかを見てください。それはどのような手段でも非常に単純には見えません。

1

あなたのために役立つ別のオプションがあります。これにより、不足しているラベルも識別されます。 'en-us'をあなたの言語に変更してください。これは私が推測する "汚い"代替品です。 「5つのラベルが「@ OCM」のような行にある場合は、何かを追加する必要があります。

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)); 
} 
関連する問題