2

我目前正在开发一个系统,该系统会将我的 AX 2009 AOT 中的所有节点导出到单个 XPO 文件,以跟踪中央版本控制存储库中的更改。我运气不错,但由于某种原因,我根本无法导出表单或数据集节点。

这是我当前的代码集:

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()没有正确解析。在任何其他节点(例如类)上运行它都没有这个问题。这也只有在批处理运行时才会发生 - 使用客户端运行它(CodeAccessPermission删除部分)将按预期导出所有节点。

有什么东西会禁止从批处理中访问表单和数据集吗?如果是这样,我该怎么做才能访问这些节点?

4

1 回答 1

1

据我所知,这是一个服务器/客户端问题/错误。简单的解决方案是在您的类上创建此方法:

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

然后在您的代码中,在该parent = TreeNode::findNode(parentNode);行下方,输入:

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

那应该可以解决您的问题。如果您必须知道,您将需要进行一些挖掘工作以找出为什么它在服务器层上不起作用。

于 2013-11-01T22:47:00.990 回答