Mohammed 的个人资料Dynamics AX日志留言簿网络 工具 帮助

日志


    3月1日

    Dynamics AX: Counting Lines of Code – Mohammed Rasheed

     

    It recently downed upon me that I do not have an account of the number of lines of code I have written on my vpc (my Dynamics AX Playground!!).... Unfortunately I could not find an easy way to get an accurate count of the lines of code I wrote.. Hence i wrote some more code :)

    Its like writing code to count code!!

    Hope this is of help to others out there.. asking themselves the same question.

    class mrCountLinesOfCode

    {

    Map axTypeCount;

    Map mrTypeCount;

    MapEnumerator axEnumerator;

    MapEnumerator mrEnumerator;

    str fullPath;

    int pos;

    int total;

    int linesOfCode;

    }

    void run()

    {

    TreeNodeiterator tempNodeIterator;

    TreeNodeiterator treeNodeIterator;

    TreeNodeiterator rootNodeIterator;

    TreeNodeiterator childNodeiterator;

    str type;

    TreeNode treeNode;

    TreeNode rootNode;

    TreeNode childNode;

    TreeNode tempNode;

    ;

    #AOT

    rootNode = TreeNode::rootNode();

    rootNodeIterator = rootNode.AOTiterator();

    rootNode = rootNodeIterator.next();

    axTypeCount = new Map(types::String,types::Integer);

    mrTypeCount = new Map(types::String,types::Integer);

    while(rootNode)

    {

    type = rootNode.treeNodeName();

    rootNodeIterator = rootNode.AOTiterator();

    childNode = rootNodeIterator.next();

    childNodeIterator = childNode.AOTiterator();

    treeNode = childNodeIterator.next();

    while(childNode)

    {

    tempNode = treeNode;

    tempNodeiterator = tempNode.AOTiterator();

    while(treeNode)

    {

    // loop till you get to a leaf node - as methods are leafs

    while(treeNode.AOTchildNodeCount() > 0)

    {

    if(treeNode.AOTiterator().next().AOTchildNodeCount()> 0)

    treeNode = tempNodeiterator.next();

    if(!treeNode)

    treeNode = tempNode;

    tempNode = treeNode;

    treeNode = treeNode.AOTiterator().next();

    if(!treeNode)

    treeNode = tempNode;

    }

    // so we found a Lefe. check if its a method

    if(sysTreeNode::hasSource(treeNode))

    {

    tempNodeiterator = tempNode.AOTiterator();

    while(treeNode)

    {

    treeNode = tempNodeiterator.next(); // iterate first.

    this.setCount(treeNode,type);

    }

    treeNode = tempNodeiterator.next();

    if(!treeNode)

    {

    treeNode = childNodeIterator.next();

    if(!treeNode)

    {

    childNode = rootNodeIterator.next();

    childNodeIterator = childNode.AOTiterator();

    treeNode = childNodeIterator.next();

    }

    tempNode = treeNode;

    tempNodeiterator = tempNode.AOTiterator();

    }

    }// end if Has Source

    else

    treeNode = tempNodeiterator.next(); // leaf is not a method.. hence move to the next node

    }

    //childNode = rootNodeIterator.next();

    treeNode = childNodeIterator.next();

    if(!treeNode)

    {

    childNode = rootNodeIterator.next();

    while(childNode && !this.checkIfNodeMightHaveCode(childNode.sysNodeType()))

    {

    childNode = rootNodeIterator.next();

    }

    if(childNode)

    {

    childNodeIterator = childNode.AOTiterator();

    treeNode = childNodeIterator.next();

    }

    }

    }

    childNode = rootNodeIterator.next();

    rootNode = childNode;

    }// end root while

    this.printitOut();

    }

    void setCount(treeNode _treeNode,str _type)

    {

    int tempLines;

    ;

    fullPath = sysTreeNode::getPath(_treeNode);

    pos = 0;

    pos = strScan(fullPath,'\mr',1,strlen(fullPath)); //i always prefix any new elements i create with MR

    tempLines = this.getLinesOfCode(_treeNode.AOTgetSource());

    if(tempLines > 4)

    {

    if(pos)

    this.countMrLines(tempLines,_type);

    else

    this.countAXLines(tempLines,_type);

    }

    }

    int getLinesOfCode(Source _source)

    {

    Source tmpSource;

    Line line;

    int ptr;

    int numberOfLines;

    ;

    if (_source)

    {

    tmpSource = _source;

    while (tmpSource)

    {

    line++;

    ptr = strfind(tmpSource, '\n', 1, maxint());

    if (!ptr)

    {

    ptr = strlen(tmpSource);

    }

    numberOfLines++;

    tmpSource = strdel(tmpSource, 1, ptr);

    }

    }

    return numberOfLines;

    }

    int getLinesOfCode(Source _source)

    {

    Source tmpSource;

    Line line;

    int ptr;

    int numberOfLines;

    ;

    if (_source)

    {

    tmpSource = _source;

    while (tmpSource)

    {

    line++;

    ptr = strfind(tmpSource, '\n', 1, maxint());

    if (!ptr)

    {

    ptr = strlen(tmpSource);

    }

    numberOfLines++;

    tmpSource = strdel(tmpSource, 1, ptr);

    }

    }

    return numberOfLines;

    }

    void countMrLines(int _lines,str _type)

    {

    ;

    linesOfCode = 0;

    if(mrTypeCount.exists(_type))

    linesOfCode = mrTypeCount.lookup(_type);

    linesOfCode += _lines;

    mrTypeCount.insert(_type,linesOfCode);

    }

    boolean checkIfNodeMightHaveCode(int _sysNodeType)

    {

    ;

    #TreeNodeSysNodeType

    switch(_sysNodeType)

    {

    case #SysNodeTypeTableCollection :

    case #SysNodeTypeSystemEnum :

    case #NT_DBCOLLECTIONLIST :

    case #NT_DBFIELDGROUPLIST :

    case #NT_DBENUMLIST :

    case #NT_DBREFERENCELIST :

    case #NT_CONFIGURATIONKEYLIST :

    case #NT_SECURITYKEYLIST :

    case #NT_DBLICENSECODELIST :

    case #NT_MENU :

    case #NT_DBLICENSECODE :

    case #NT_CONFIGURATIONKEY :

    case #NT_SECURITYKEY :

    case #NT_TYPE :

    case #NT_REFERENCE :

    case #NT_PERSPECTIVE :

    case #NT_PERSPECTIVEFIELDLIST :

    return false;

    default:

    return true;

    }

    // just in case

    return true;

    }

     

    评论 (3)

    请稍候...
    很抱歉,您输入的评论太长。请缩短您的评论。
    您没有输入任何内容,请重试。
    很抱歉,我们当前无法添加您的评论。请稍后重试。
    若要添加评论,需要您的家长授予您相应权限。请求权限
    您的家长禁用了评论功能。
    很抱歉,我们当前无法删除您的评论。请稍后重试。
    您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
    因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
    完成下面的安全检查,您提供评论的过程才能完成。
    您在安全检查中键入的字符必须与图片或音频中的字符一致。

    若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


    还没有 Windows Live ID 吗?请注册

    storm发表:

    http://www.akkuliste.com/laptop akku
    http://www.akkuliste.com/laptop batteries
    http://www.akkuliste.com/dell laptop batteries/
    http://www.akkuliste.com/dell/wr050.htm dell wr050 akku
    http://www.akkuliste.com/hp laptop batteries/
    http://www.akkuliste.com/laptop ac adapter/
    http://www.akkuliste.com/dell/d5318.htm dell d5318 akku
    http://www.akkuliste.com/acer/as07b41.htm acer as07b41 akku
    http://www.akkuliste.com/acer/as07b42.htm acer as07b42 akku
    http://www.akkuliste.com/acer/as07b72.htm acer as07b72 akku
    http://www.akkuliste.com/acer/batbl50l6.htm acer batbl50l6 akku
    http://www.akkuliste.com/acer/travelmate-4200.htm acer travelmate 4200 akku
    http://www.akkuliste.com/acer/aspire-5100.htm acer aspire 5100 akku
    http://www.akkuliste.com/dell/original-inspiron-1525.htm dell original inspiron 1525 akku
    http://www.akkuliste.com/hp/dv6000.htm hp dv6000 akku
    http://www.akkuliste.com/dell/inspiron-6400.htm dell inspiron 6400 akku
    http://www.akkuliste.com/dell/1501.htm dell 1501 akku
    http://www.akkuliste.com/dell/e1505.htm dell e1505 akku
    http://www.akkuliste.com/dell/d620.htm dell d620 akku
    http://www.akkuliste.com/dell/d630.htm dell d630 akku
    http://www.akkuliste.com/dell/inspiron-1520.htm dell inspiron 1520 akku
    http://www.akkuliste.com/gateway/m680.htm gateway m680 akku
    http://www.akkuliste.com/gateway/m360.htm gateway m360 akku
    http://www.akkuliste.com/gateway/m460.htm gateway m460 akku
    http://www.akkuliste.com/hp/dv9000.htm hp dv9000 akku
    http://www.akkuliste.com/hp/dv9700.htm hp dv9700 akku
    http://www.akkuliste.com/hp/510.htm hp 510 akku
    http://www.akkuliste.com/dell/latitude-d620.htm dell latitude d620 akku
    http://www.akkuliste.com/hp/530.htm hp 530 akku
    http://www.akkuliste.com/sony/vgp-bps2a.htm sony vgp-bps2a akku
    http://www.akkuliste.com/sony/vgp-bps2b.htm sony vgp-bps2b akku
    http://www.akkuliste.com/sony/vgp-bps2.htm sony vgp-bps2 akku
    http://www.akkuliste.com/dell/latitude-d820.htm dell latitude d820 akku
    http://www.akkuliste.com/sony/vgp-bps2c.htm sony vgp-bps2c akku
    http://www.akkuliste.com/toshiba/pa3399u-1brs.htm toshiba pa3399u-1brs akku
    http://www.akkuliste.com/toshiba/pa3536u.htm toshiba pa3536u akku
    http://www.akkuliste.com/dell/xps-1330.htm dell xps 1330 akku
    http://www.akkuliste.com/dell/xps-m1330.htm dell xps m1330 akku
    http://www.akkuliste.com/dell/inspiron-1300.htm dell inspiron 1300 akku
    http://www.akkuliste.com/dell/inspiron-b130.htm dell inspiron b130 akku
    http://www.akkuliste.com/toshiba/PA3356U-3BAS.htm toshiba PA3356U-3BAS akku
    http://www.akkuliste.com/toshiba/PA3356U-3BRS.htm toshiba PA3356U-3BRS akku
    http://www.akkuliste.com/toshiba/PA3456U-1BRS.htm toshiba PA3456U-1BRS akku
    http://www.akkuliste.com/dell/inspiron-1100-series.htm dell inspiron 1100 series akku ,
    http://www.akkuliste.com/toshiba/pa3384u-1bas.htm toshiba pa3384u-1bas akku
    http://www.akkuliste.com/toshiba/satellite-a60.htm toshiba satellite a60 akku
    http://www.akkuliste.com/toshiba/satellite-a65.htm toshiba satellite a65 akku
    http://www.akkuliste.com/toshiba/satellite-pro-a60.htm toshiba satellite pro a60 akku
    http://www.akkuliste.com/acer/as07b51.htm acer as07b51 akku


    11 月 10 日
    storm发表:

    http://www.akkuliste.com/ibm/thinkpad-x60.htm ibm thinkpad x60 akku
    http://www.akkuliste.com/ibm/thinkpad-x60s.htm ibm thinkpad x60s akku
    http://www.akkuliste.com/hp/zt3000.htm hp zt3000 akku
    http://www.akkuliste.com/hp/pavilion-zv5000.htm hp pavilion zv5000 akku
    http://www.akkuliste.com/hp/pavilion-zv6000.htm hp pavilion zv6000 akku
    http://www.akkuliste.com/hp/pavilion-zd8000.htm hp pavilion zd8000 akku
    http://www.akkuliste.com/hp/pavilion-zx5000.htm hp pavilion zx5000 akku
    http://www.akkuliste.com/hp/presario-v4000.htm hp presario v4000 akku
    http://www.akkuliste.com/hp/presario-v2000.htm hp presario v2000 akku
    http://www.akkuliste.com/hp/presario-m2000.htm hp presario m2000 akku
    http://www.akkuliste.com/compaq/presario-v4000.htm compaq presario v4000 akku
    http://www.akkuliste.com/compaq/presario-v2000.htm compaq presario v2000 akku
    http://www.akkuliste.com/compaq/presario-v3000.htm compaq presario v3000 akku
    http://www.akkuliste.com/compaq/presario-v6000.htm compaq presario v6000 akku
    http://www.akkuliste.com/compaq/presario-c700.htm compaq presario c700 akku
    http://www.akkuliste.com/dell/fk890.htm dell fk890 akku
    http://www.akkuliste.com/toshiba/pa3593u-1bas.htm toshiba pa3593u-1bas akku
    http://www.akkuliste.com/hp/m2000.htm hp m2000 akku
    http://www.akkuliste.com/hp/338794-001.htm hp 338794-001 akku
    http://www.akkuliste.com/hp/395789-001.htm hp 395789-001 akku
    http://www.akkuliste.com/compaq/116314-001.htm compaq 116314-001 akku
    http://www.akkuliste.com/toshiba/satellite-a70.htm toshiba satellite a70 akku
    http://www.akkuliste.com/compaq/319411-001.htm compaq 319411-001 akku
    http://www.akkuliste.com/hp/346970-001.htm hp 346970-001 akku
    http://www.akkuliste.com/hp/367759-001.htm hp 367759-001 akku
    http://www.akkuliste.com/hp/411462-421.htm hp 411462-421 akku
    http://www.akkuliste.com/hp/ev088aa.htm hp ev088aa akku
    http://www.akkuliste.com/hp/ex941aa.htm hp ex941aa akku


    http://www.akkuliste.com/laptop akku
    11 月 10 日
    没有名字发表:
    I am looking for experienced AX functional consultants willing to be based in Malaysia, in finance, trade, logistics, and production will be a plus. Interested, please contact me at lkkhlp@hotmail.com.
    8 月 3 日

    引用通告

    此日志的引用通告 URL 是:
    http://dynamic-ax.spaces.live.com/blog/cns!13619E6948204DE3!426.trak
    引用此项的网络日志