Farseer

导航

用代码修改类名

新创建一个类TestClass,用代码修改其类名为NewTestClass:

static void ChangeClassName(Args _args)
{
    #AOT
    TreeNode    treeNode 
= TreeNode::findNode(#ClassesPath+'\\TestClass');
    ;
    treeNode.AOTsetProperty(
"Name","NewTestClass");
    treeNode.AOTcompile(
1);
    treeNode.AOTsave();
}

在运行到treeNode.AOTcomplile(1)时就报错说,"无效名称,类TestClass已经存在".由于类xCompilerOutPut的方法的源代码没有公开,所以不晓得它是怎么玩的。
原因可能是由于AX的类有两个地方可以指定类名,Name属性,和类声明classDeclaration的类定义,AX4.0在修改Name属性的时候并没有修改类声明classDeclaration中的类定义,所以造成了错误。
变通的做法是修改classDeclaration:
static void ChangeClassName(Args _args)
{
    #AOT
    TreeNode    treeNode 
= TreeNode::findNode(#ClassesPath+'\\TestClass');
    ;
    treeNode 
= treeNode.AOTfindChild("classDeclaration");
    treeNode.AOTsetSource(strreplace(treeNode.AOTgetSource(),
"class TestClass","class NewTestClass"));
    treeNode.AOTcompile(
1);
    treeNode.AOTsave();
}

这样倒是可以修改好。不过由于是使用了字符串替代,所以局限性比较大。
在AX2009上试了下,已经把这个问题修复了,修改Name属性的同时会把类声明中的定义修改成新的类名。不知道它是怎么实现的。

posted on 2008-04-10 12:07  佛西亚  阅读(931)  评论(0编辑  收藏  举报