• 批量更新字段信息


    在窗体记录信息窗体上有个重命名的功能,可以把用到某个表主键的从表信息统一进行更新,常用的可能是更新物料编码,会计科目代码等。

    有时候需要统一按照某个规则批量更新物料编码和会计科目代码等,一个个通过窗体的重命名操作会有些麻烦,可以使用主表的renamePrimaryKey写一段代码来批量更新,不过如果遇到数据量很大,并且这个字段没建索引的话,就有的等了,可能N个小时都没反映。

    renamePrimaryKey这个方法是内置的,并没有公开它的代码,不过推测的话,它应该是通过反射数据字典找到哪些表用到了表的主键,比如哪些表用到了LedgerAccount,哪些表用到了ItemId之类,通过AX提供的反射类可以很容易地找到这个关系,通过代码可以生成需要的update方法,生成代码之后执行一下,看哪个表更新的慢,创建索引再更新就可以了。

    static void generateUpdateMethod(Args _args)
    {
        #AOT
        #define.FileName(@"c:DataDictionary.txt")
        TextBuffer  tb = new TextBuffer();
        Dictionary  dictionary = new Dictionary();
    
        DictTable   dictTable;
        DictField   dictField;
        SysDictType type;
        int         i;
        int         j;
        boolean     exist;
        str         statement;
        int         k;
        ;
    
        for( i=1;i<= dictionary.tableCnt();i++)
        {
            //print i;
            dictTable = new DictTable(dictionary.tableCnt2Id(i));
    
            if(dictTable.isView() || dictTable.isMap() || dictTable.isTmp())
                continue;
    
            //Define tables
            for(j=1;j<=dictTable.fieldCnt();j++)
            {
                exist = false;
                dictField = new DictField(dictTable.id(),dictTable.fieldCnt2Id(j));
                type = new SysDictType(dictField.typeId());
    
    
                while(type)
                {
                    if(Global::extendedTypeId2name(type.id()) == "LedgerAccount" &&
                        (Global::isConfigurationkeyEnabled(dictField.configurationKeyId()) || dictField.configurationKeyId() == 0 ))
                    {
                        print type.name();
                        tb.appendText(" "+dictTable.name()+"    "+dictTable.name()+@";
                        ");
                        exist = true;
                        break;
                    }
                    type = new SysDictType(type.extend());
                }
                if(exist)
                    break;
            }
        }
        tb.appendText (@"
    
                        ");
    
        dictionary = new Dictionary();
        tb.appendText(@"    while select ChartAccountMapping
        {");
        for( i=1;i<= dictionary.tableCnt();i++)
        {
            print i;
            dictTable = new DictTable(dictionary.tableCnt2Id(i));
    
            if(dictTable.isView() || dictTable.isMap() || dictTable.isTmp() || dictTable.name()== "ChartAccountMapping")
                continue;
    
            for(j=1;j<=dictTable.fieldCnt();j++)
            {
                dictField = new DictField(dictTable.id(),dictTable.fieldCnt2Id(j));
                type = new SysDictType(dictField.typeId());
    
                while(type)
                {
                    if(Global::extendedTypeId2name(type.id()) == "LedgerAccount"&&
                        (Global::isConfigurationkeyEnabled(dictField.configurationKeyId()) || dictField.configurationKeyId() == 0 ))
                    {
                                            tb.appendText( strfmt(@"
            update_recordset %1
            setting %2= %3
            where %1.%2 == %4
            ",dictTable.name(),dictField.name(),"ChartAccountMapping.newAccount",
            "ChartAccountMapping.oldAccount;"));
    
                    }
                    type = new SysDictType(type.extend());
                }
            }
        }
        tb.appendText( "}" );
        tb.toFile(#FileName);
    
    }
    
  • 相关阅读:
    css 之优先策略
    SpringCloud WebUploader 分块上传
    SpringBoot WebUploader 分块上传
    java WebUploader 分块上传
    php WebUploader 分块上传
    jsp WebUploader 分块上传
    csharp WebUploader 分块上传
    c# WebUploader 分块上传
    .net WebUploader 分块上传
    c#.net WebUploader 分块上传
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/3324091.html
Copyright © 2020-2023  润新知