2013-11-01 68 views
2

我目前正在开发一个系统,用于跟踪中央版本控制存储库中的更改,以便将所有节点从我的AX 2009 2009 AOT导出到各个XPO文件。我有相当多的运气,但出于某种原因,我无法获得窗体或数据集节点的导出。从AX 2009批量导出表格

这是我当前的代码集:

private void export(str parentNode) 
{ 
    TreeNode   node, parent; 
    str     folderName; 
    Set     permissions = new Set(Types::Class); 
    ; 

    folderName = exportBaseDir + parentNode; 

    permissions.add(new FileIoPermission(folderName, "r")); 
    permissions.add(new InteropPermission(InteropKind::ClrInterop)); 

    CodeAccessPermission::assertMultiple(permissions); 

    //Create Filesystem Folder if needed 
    if (!WinApiServer::pathExists(folderName)) 
     System.IO.Directory::CreateDirectory(folderName); 


    CodeAccessPermission::revertAssert(); 

    parent = TreeNode::findNode(parentNode); 

    if (parent) 
     node = parent.AOTfirstChild(); 
    else 
     warning(strfmt("Could not parse node: %1", parentNode)); 

    while (node) 
    { 
     this.exportNode(node); 
     node = node.AOTnextSibling(); 
    } 
} 

当我打电话export(@"\Forms");export(@"\Data Sets");我得到一个“无法解析节点”的消息,这意味着TreeNode::findNode()没有正确解决。在任何其他节点(如Classes)上运行它都没有这个问题。这也只发生在批处理中时运行 - 与客户端一起运行(删除CodeAccessPermission部件)将按预期方式导出所有节点。

是否有东西会禁止从批内访问表单和数据集?如果是这样,我能做些什么来访问这些节点?

+0

为什么你不使用vss或内置源代码控制的任何原因? – AnthonyBlake

+0

我们使用的是内置的MorphX VC,除了它之外,还有其他用途。他们的VC系统留下了很多不足之处(比如在任何一天查看或未更新的内容,代码的非现场备份等),我们认为这种解决方案有助于弥补这些差距。 – kingofzeal

+0

听起来不错 - 你没有使用vss的​​原因? – AnthonyBlake

回答

1

据我可以告诉它是一个服务器/客户端问题/错误。最简单的解决办法是在你的类中创建这种方法:

client static TreeNode clientTreeNode(str _path) 
{ 
    return TreeNode::findNode(_path); 
} 

然后在你的代码中,parent = TreeNode::findNode(parentNode);线之下,就把:

parent = parent ? parent : YourClassHere::clientTreeNode(parentNode);

,并应解决您的问题。如果你必须知道的话,你需要进行一些挖掘才能发现它为什么不能在服务器层上运行。

+0

这确实似乎解决了即时问题,但是当它被执行时,我仍然在所有Form和Data Set XPO上得到“文件被写保护或正在使用”。逐步完成,它发生在'[treenode] .treeNodeExport(fileName)'行。我确实有适当的FileIOPermissions设置,因为其他东西都可以正常导出。该文件根本不存在。思考? – kingofzeal

+0

我想我需要更多信息。这可能是服务器文件路径和客户端文件路径之间的差异,或者'treenode'没有正确重新初始化 –

+0

看来问题出在我们尝试使用的UNC路径 - 客户端似乎不喜欢根路径格式“\\ server.domain.com \ c $ \ src \ AXSource”。共享网络上的文件夹和更改根修补程序“\\ server.domain.com \ AXSource”似乎工作正常虽然。感谢您的帮助! – kingofzeal