メソッドを ax 2012 のコンポーネントに動的に追加したいのですが、コードを使用してこれを行うにはどうすればよいですか? 出来ますか?
2387 次
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 に答える