2

X++ で次の手順をプログラムで複製しようとしています。

  1. AOT ツリーでルート ノードを右クリックし、[エクスポート] をクリックします。
  2. ファイル名を指定してください
  3. 「アプリケーション オブジェクト レイヤー」チェックボックスをクリックします。
  4. Application object layer に「cus」を指定
  5. XPO をファイルにエクスポートする

AOTツリー全体をエクスポートできるようになりましたが、cusレイヤーだけに絞り込む方法がわかりません。これが私の現在のコードサンプルです...

TreeNode treeNode;
FileIoPermission perm;

#define.ExportFile(@"c:\XPO\AOTCusExport.xpo")
#define.ExportMode("w")
;

perm = new FileIoPermission(#ExportFile, #ExportMode);
if (perm == null)
{
return;
}

perm.assert();

treeNode = TreeNode::findNode(@"\");
if (treeNode != null)
{
    // BP deviation documented.
    treeNode.treeNodeExport(#ExportFile);
}

CodeAccessPermission::revertAssert();

解決策は「treeNodeExport」メソッド内にあると感じています。私が使用していない「int _flags」プロパティがあります。私は周りを見回しましたが、フラグにどの値を入力するかわかりませんか? この種のプロセスの複製を以前に試みた人はいますか? 私は正しい道を進んでいますか?

4

2 に答える 2

2

AOTExportマクロでご覧ください。

次に、これを読んでください

#AOT
#AOTExport
TreeNode rootNode = infolog.rootNode();
;
rootNode.treeNodeExport(@'c:\fullaot.xpo', #expKeepIds | #expLables | #expLayer);

レイヤーを指定する方法はわかりませんが、フラグ引数の論理 OR である可能性が最も高いです。

疑問がある場合は、SysElementExportフォームと関連するクラスを調べてください。

更新: 予想どおり、レイヤーはビットマスクで指定されます。

\Forms\SysExportDialog\Methods\getutilLayerマスクでは、次のように指定されます。

return 1 << layer.selection();

したがって、CUS レイヤーをエクスポートする場合は、次のようにします。

rootNode.treeNodeExport(@'c:\fullaot.xpo', #export | #expLayer | (1 << (UtilEntryLevel::cus+1)));

次のフラグが次のように、レイヤー用に 15 ビットの余地があります。

#define.expKeepIds(0x0100)
于 2013-03-01T21:42:21.637 に答える
1

SysTreeNode.toFile()クラスメソッドのメソッドにフラグを渡す方法の例があります

#AOTExport
...
int flags;
...
flags = #expProjectOnly;
...

// This code runs on the client side only
//BP deviation documented
treenodeToExport.treeNodeExport(_filename, #export | #expKeepIds | #expLayer | flags);

...

マクロのドキュメントによると:

// System export flags
#define.noExport(0)                 // Do not export
#define.export(1)                   // Export
#define.expKeepIds(0x0100)          // Export with ID's
#define.expLables(0x0400)           // Export labels
#define.expProjectOnly(0x800)       // Export project only
#define.expLockOnExport(0x1000)     // Lock exported elements
#define.expDefaultValues(0x2000)    // Export default properties values
#define.expLayer(0x4000)            // Export current layer only

アクティブなレイヤーのみをエクスポートできます...フォームでリストからレイヤーを選択できるため、非常に奇妙です。リストがあり、エクスポートクラスが呼び出されているフォームコード内に入ると、少し奇妙にSysExportDialogなりますが、レイヤーの使用法がどこにも見つかりません...そのため、マクロのドキュメントは結局のところ正しいのかもしれません.

于 2013-03-04T08:40:21.373 に答える