Axapta 从AX 2009批量导出表单
我目前正在开发一个系统,该系统将把我的AX 2009 AOT中的所有节点导出到单个XPO文件中,以便跟踪中央版本控制存储库中的更改。我很幸运,但由于某些原因,我根本无法导出表单或数据集节点 这是我当前的代码集:Axapta 从AX 2009批量导出表单,axapta,x++,dynamics-ax-2009,aot,Axapta,X++,Dynamics Ax 2009,Aot,我目前正在开发一个系统,该系统将把我的AX 2009 AOT中的所有节点导出到单个XPO文件中,以便跟踪中央版本控制存储库中的更改。我很幸运,但由于某些原因,我根本无法导出表单或数据集节点 这是我当前的代码集: private void export(str parentNode) { TreeNode node, parent; str folderName; Set permissi
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”)代码>或导出(@“\Data set”)代码>我收到一条“无法解析节点”消息,这意味着TreeNode::findNode()
没有正确解析。在任何其他节点(如类)上运行它不会出现此问题。这也只有在批量运行时才会发生——使用客户端运行它(删除CodeAccessPermission
parts)将按预期导出所有节点
是否存在禁止从批处理中访问表单和数据集的内容?如果是这样,我可以做些什么来访问这些节点?据我所知,这是服务器/客户端问题/错误。简单的解决方案是在类上创建此方法:
client static TreeNode clientTreeNode(str _path)
{
return TreeNode::findNode(_path);
}
然后在代码中的parent=TreeNode::findNode(parentNode)下面代码>行,输入:
parent=parent?父节点:YourClassHere::clientTreeNode(父节点)代码>
这应该能解决你的问题。如果您必须知道的话,您将需要进行一些挖掘,以找出为什么它在服务器层不起作用。您不使用vss或内置源代码管理的任何原因?我们使用的是内置的MorpX VC,这是用来补充它的。他们的VC系统还有很多需要改进的地方(比如能够查看在任何一天更新或未更新的内容,代码的异地备份等),我们觉得这个解决方案有助于弥补这些差距。听起来不错-你为什么不使用vss?当时,MorpX是我们团队中最容易实现和采用的系统,当时我们认为这些好处是可以接受的。现在切换VC系统会引起很大的头痛,所以我们选择了扩充当前的解决方案,而不是重做所有事情。总有一天我们可能会实现一个不同的系统,但目前我们还没有准备好承担这一成本。这似乎解决了眼前的问题,但是当它被执行时,我仍然会在所有表单和数据集XPO上得到一个“文件被写保护或正在使用”。单步执行,它发生在[treenode].treeNodeExport(文件名)
行上。我确实设置了适当的FileIOPermissions,因为其他一切都可以正常导出。该文件根本不存在。想法?我想我需要更多的信息。这可能是服务器文件路径和客户端文件路径之间的差异,也可能是treenode
未正确重新初始化。问题似乎出在我们尝试使用的UNC路径上-客户端似乎不喜欢根路径格式“\\server.domain.com\c$\src\AXSource”。不过,在网络上共享文件夹并更改根修补程序“\\server.domain.com\AXSource”似乎可以正常工作。感谢您的帮助!