0
static void Job47(Args _args)
{
str                                  path,stx;
TreeNodeIterator                     iter;
TreeNode                             treeNode, treeNodeToRelease;
Map                                  dictMenuDisplay;
FormName                             formName;
MenuItemName                         menuItemName;
container                            conMenu;
int                                  i,n;
    ;

   for (n=1;n<=1;n++)
   {
    info::messageWinAddLine(strfmt("iter:%1",n));
    path            ="Menu Items\\Display";
    dictMenuDisplay = new Map(Types::String,Types::Container);
    treenode        = Treenode::findNode(path);
    iter            = treenode.AOTiterator();
    treenode        = iter.next();

    while (treenode)
      {
        formName     = treenode.AOTgetProperty("Object");
        menuItemName = treenode.AOTname();

       if (dictMenuDisplay.exists(formName))
        {
         conMenu = dictMenuDisplay.lookup(formName);
         conMenu = conIns(conMenu,conlen(conMenu)+1,menuItemName);
         dictMenuDisplay.insert(formName,conMenu);
         }

       else
         dictMenuDisplay.insert(formName,[menuItemName]);
         treenode = iter.next();
    }  
 }
}

上記のジョブをバッチで実行すると、次のエラーが表示されます。 %1",n)); クラス RunbaseBatch のメソッド runsImpersonated() に false を入れてみました。しかし、どちらもうまくいかないようです。

私はAX2009を初めて使用するので、クライアントまたはサーバーでジョブを実行することの意味を本当に理解していません。親切に正しい方向に導いてください。

4

1 に答える 1

1

最初に、RunBaseBatch クラスへの変更を削除します。そのメソッドは、そのクラスを拡張するクラス (継承) でオーバーライドされることを意味します。RunBaseBatch パターンを実現する方法については、「Tutorial_RunbaseBatch」クラスを参照してください。

ここで、x++ コードを実行するときに、クライアント側またはサーバー側のいずれかで実行できることも考慮してください。コードの実行を許可する側のメソッドをロックできます。GLobal::info-method は、クライアント側とサーバー側の両方で実行できます。RunBaseBatch を拡張するクラス (ジョブではなく) クラスを実行するバッチをアクティブ化すると、バッチ フレームワークは設定に従ってクラス サーバー側を実行します。コードはクライアント側から独立している必要があります。つまり、クライアント側へのアクセスを必要とするコード行が存在することはありません。WinAPI::moveFile は一例です。

これが少し役立つことを願っています。

于 2011-03-11T13:42:14.660 に答える