0

メソッドを ax 2012 のコンポーネントに動的に追加したいのですが、コードを使用してこれを行うにはどうすればよいですか? 出来ますか?

4

2 に答える 2

1
private void findOrCreateTimeStamp(
        SysVersionControlTmpItem                _item)
{
    str                             timeStamp;
    UtilElements                    utilElement;
    SysDictClass                    dictClass;
    ClassBuild                      classBuild;
    SysVersionControlTmpItem        item            = _item;
    str                             methodName      = "csGetVersion";
    int                             time            = timenow();
    TreeNode                        treeNode        = TreeNode::findNode(item.ItemPath);

    utilElement = treeNode.utilElement();            

    timeStamp   = date2Str(
                        today(),
                        321,
                        DateDay::Digits2,
                        DateSeparator::Slash, 
                        DateMonth::Digits2,
                        DateSeparator::Slash,
                        DateYear::Digits4,
                        DateFlags::None);

    timeStamp   = timeStamp + "_"                                           +
                        num2str0(time div 3600, 2, 0, 0, 0) + "_"           +
                        num2Str0(time mod 3600 div 60, 2, 0, 0, 0) + "_"    +
                        num2Str0(time mod 3600 mod 60, 2, 0, 0, 0);

    if (utilElement.recordType == UtilElementType::Class)
    {
        dictClass   = new SysDictClass(className2Id(utilElement.name));
        classBuild  = new ClassBuild(utilElement.name, true);

        if (dictClass.hasStaticMethod(methodName))
        {
            //Override method here, since the method already exists in the component.
            classBuild.overrideMethod(methodName,
                                        @"public static str csGetVersion()" +
                                        "{"                                 +
                                            "return '" + timeStamp + "';"   +
                                        "}"); 
        }
        else
        {
            //Make a new method here since it does'nt exist in the component.
            classBuild.addMethod(methodName,
                                        @"public static str csGetVersion()" +
                                        "{"                                 +
                                            "return '" + timeStamp + "';"   +
                                        "}"); 
        }

        classBuild.classNode().AOTcompile();    
    }
}

上記の方法は、以前の回答や他の専門家を参考にして作成されています。最初にメソッドがクラスに存在するかどうかを検証します。見つかった場合はオーバーライドし、そうでない場合は新しいメソッドを作成します。テーブル、フォーム、マップなどの他の要素についても、同様の方法で実装できます。

于 2015-04-28T10:10:43.163 に答える