zoukankan      html  css  js  c++  java
  • 用代码创建扩展数据类型EDT

    在Axapta中有两个类UtilElements和UtilIdElements,从Inside Microsoft Axapta4.0中的示例代码中,可以看到两者的应用.帮助文档一点记载都没有......
    我们知道Axapta把AOT的信息以*.aod后缀文件方式存放在物理磁盘中.这两个类的功能就是可以让用户用SQL的方式查询AOT中的元素,UtilElementType这个枚举类型有很多AOT中结点的类型值,比如Form,Report等,下面的示例代码显示了查询Inventory相关的类.
    static void TableAPI_FindInventoryClasses(Args _args)
    {
        UtilElements utilElements;

        
    while select name from utilElements
            where utilElements.RecordType 
    == UtilElementType::Class
               
    && utilElements.Name like 'Invent*'
               
    && utilElements.ModifiedDate == today()-30
        
    {
            info(strfmt(
    "%1", utilElements.Name));
        }

    }
    按照我的理解,UtilElement只能操作大的方面,对具体元素的操作还是要靠TreeNode这个类.
    不过在Axapta3.0中,TreeNode这个对象并没有增加EDT的方法,用AOTAdd()这个方法加其他元素没啥问题,加EDT死活不玩,服了.后来在狂找一气,发现了下面的方法
    UtilIdElements uie; 

    select maxof(id) from uie where uie.recordType 
    == 
    UtilElementType::ExtendedType 
    && uie.utilLevel == XInfo.currentAOLayer(); 

    uie.id
    ++
    uie.utilLevel 
    = XInfo.currentAOLayer(); 
    uie.recordType 
    = UtilElementType::ExtendedType; 
    uie.name 
    = "FarseerTest"

    uie.insert(); 
    加倒是加上去了,可是一点击这个新建的EDT旁边的加号,或者点右键,用英文说就是Axapta Crash了,晕死......
    好在Axapta4.0的TreeNode增加了一个方法AOTaddExtendedDataType,估计是微软被吵得实在过意不去了,增加了这个方法来平息众怒,呵呵.
    static server void AddEDT()
    {
        TreeNode TNode;
        str strEDTName;
        str strProperty;
        ;
        
    //属性
        strProperty = @"Properties
                        Label #Farseer  Test
                        HelpText #Farseer Test
                        Extends #AccountName
                        EndProperties
                        
    ";
        strEDTName 
    = "FarseerTest";
        
    //找到EDT结点
        TNode = TreeNode::findNode(@"Data Dictionary\Extended Data Types");
        
    //不存在添加,存在报错.
        if(!TNode.AOTfindChild(strEDTName))
        
    {
            TNode 
    = TNode.AOTaddExtendedDataType(strEDTName,Types::String);
            TNode.AOTsetProperties(strProperty);
            Box::info(
    "Successful!");
        }

        
    else
            
    throw error(strFmt("The EDT %1 has been exist","Farseer"));
     }
  • 相关阅读:
    数据结构3——图
    数据结构2——树
    数据结构1——堆栈和队列
    最大流——Dinic算法
    最大流——EK算法
    网络流——poj1273(入门)
    网络流(进阶)
    网络流
    并查集——poj1182(带权并查集高阶)
    并查集——poj1308(并查集延伸)
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/518480.html
Copyright © 2011-2022 走看看