0

AOT (アプリケーション オブジェクト ツリー) オブジェクトをエクスポートするメソッドを作成しました。動作しますが、Forms-Treenodes をエクスポートすると見つかりません。

メソッドはサーバー メソッドであり、BatchServer で実行されます。

私の考えは、オブジェクトを 2 時間ごとに xpo ファイルとしてエクスポートすることでした。バックアップにより、コードの変更を追跡できます。

void run(str Path)
{
    List                _ValueList = new List(Types::String);
    Counter             _ListCounter;
    ListIterator        _ListIterator;
    str                 _RootFolder;
    str                 _FileName;
    str                 _FolderName;
    TreeNode            _TreeNode;
    TreeNode            _InnerTreeNode;
    TreeNodeIterator    _TreeNodeIt;
    FileIoPermission    _Perm;
    #define.ExportMode("w")
    ;

    _RootFolder = Path;
    //Objektbaum definition
    _ValueList.addEnd("Forms");
    _ValueList.addEnd("Reports");
    _ValueList.addEnd("Queries");
    _ValueList.addEnd("Classes");
    _ValueList.addEnd("Macros");
    _ValueList.addEnd("Jobs");
    _ValueList.addEnd(@"Data Dictionary\Tables");
    _ValueList.addEnd(@"Data Dictionary\Maps");
    _ValueList.addEnd(@"Data Dictionary\Views");
    _ValueList.addEnd(@"Data Dictionary\Extended Data Types");
    _ValueList.addEnd(@"Data Dictionary\Base Enums");

    _ListIterator = new ListIterator(_ValueList);
    info(strfmt("RootExportPath: %1",_RootFolder));

    // durch die zuvor definierte Liste laufen
    while(_ListIterator.more())
    {
        try
        {
            info(strfmt(@"\%1",_ListIterator.value()));
            //Haupttreenode objekt laden
            _TreeNode = TreeNode::findNode(strfmt(@"\%1",_ListIterator.value()));

            if (_TreeNode != null)
            {
                //Splitten des HauptNodes
                _TreeNodeIt = _TreeNode.AOTiterator();
                _InnerTreeNode = _TreeNodeIt.next();
                //Durchlaufen der SubNodes
                info(strfmt("Object found in Node: %1 ",_TreeNode.AOTchildNodeCount()));
                while(_InnerTreeNode)
                {
                    //Pfad und Filename bereitstellen
                    _FolderName = strfmt(@"%1\%2",_RootFolder,strreplace(_ListIterator.value(),@" ","_"));
                    _FileName = strfmt(@"\%1.xpo",strreplace(_InnerTreeNode.AOTname(),@" ","_"));
                    //Fileperms setzen ("w") = Write (OverWrite)
                    _Perm = new FileIoPermission(_FolderName+_FileName , #ExportMode);
                    if (_Perm == null)
                    {
                        return;
                    }

                    _Perm.assert();

                    try
                    {
                        if(!WinApi::pathExists(_FolderName))
                        {
                            if(WinApi::createDirectory(_FolderName))
                            {
                                throw error(strfmt("Pfad konnte nicht erstellt werden %1\n",_FolderName));
                            }
                            if(!WinApi::pathExists(_FolderName))
                            {
                                throw error(strfmt("Fehler beim erstellen des Pfades %1\n",_FolderName));
                            }
                        }
                        //Export in definierten Filename
                        if(WinApi::fileLocked(_FolderName+_FileName))
                        {
                                throw error("File ist ReadOnly\n");
                        }
                        _InnerTreeNode.treeNodeExport(_Foldername+_FileName);
                     }
                     catch
                     {
                        error(strfmt(@"xpo File %1 konnte nicht geschrieben werden\n",_FolderName+_Filename));
                        throw error("Abbruch des Jobs\n");
                     }
                    CodeAccessPermission::revertAssert();

                   _InnerTreeNode = _TreeNodeIt.next();
                }
                // BP deviation documented.
                _TreeNode.treeNodeExport(_FileName);
            }
            else
            {
                error(strfmt("TreeNode empty %1",_ListIterator.value()));
            }
         }
         catch
         {
            throw error("Fehler in der Verarbeitungsroutine\n");
         }
        _ListIterator.next();
    }
}
4

2 に答える 2

0

フォームはロードされていないため、バッチ サーバーによってフォームをエクスポートすることはできません。これは少し奇妙ですが、バッチサーバーは AOT のクラスレイヤーのみを呼び出します... フォームはその上に階層的に配置され、エクスポートできません。

于 2014-01-20T13:29:26.120 に答える