• Number Sequence


    1)Method 1

      useing X++ Code creating Number sequence module.

      wrote by Jimmy

      

    public static void Jimmy_NumberSequences()
    {
        NumberSequenceTable     numberSequenceTable;
        NumberSequenceReference numberSequenceReference;
        NumberSequenceCode      NumberSequence = "WHS_PDJ";
        Name                    Txt            = "PO Delivery Journal";
        ExtendedDataTypeName    QVS_POJournalId;
        ExtendedTypeId          extendedTypeId = typeId2ExtendedTypeId(typeid(QVS_POJournalId));//method 1
        //ExtendedTypeId          extendedTypeId = extendedTypeName2Id("QVS_POJournalId");//parameter must be string type //method 2
    ;
        ttsbegin;
    //Created number sequences parameter and reference
    
        //table 1 base setup
        delete_from numberSequenceTable
            where numberSequenceTable.NumberSequence == NumberSequence;
    
        numberSequenceTable.NumberSequence  = NumberSequence;
        numberSequenceTable.Txt             = Txt;
        numberSequenceTable.Lowest          = 1;
        numberSequenceTable.Highest         = 99999999;
        numberSequenceTable.NextRec         = 1;
        numberSequenceTable.Format          = 'PDJ########CN';
        numberSequenceTable.Continuous      = NoYes::Yes;
        numberSequenceTable.insert();
    
        //table 2 reference
        print extendedTypeId;
        print extendedTypeName2Id("QVS_POJournalId");//must be string type
        pause;
        delete_from numberSequenceReference
            where numberSequenceReference.DataTypeId == extendedTypeId;
    
        numberSequenceReference.DataTypeId      = extendedTypeId;
        numberSequenceReference.NumberSequence  = NumberSequence;
        numberSequenceReference.insert();
    
        ttscommit;
    
    //get number sequences value
    //   print numberSeq::newGetNumFromCode("WHS_PDJ",true,false).num();//这种方法不会容易报错。本人推荐这种方法
    //   print NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(QVS_POJournalId)))).num();
    
        //Test extend type id
        print global::extendedTypeName2Id("AmountCurDebCred");//parameter must be string type
        print global::typeId2ExtendedTypeId(typeid(AmountCurDebCred));//804
        pause;
    }
    
    

    2)method 2

    作者:廖源 Daniel.Intelzon
    我觉得Axapta中的number Sequence一直以来都是一个重点,现在就让我们尝试手工创建一个Number Sequence
    引用模块:
    实例中,我们假设要做一个SMS的短信管理系统的主数据表SMS_Content,这个表中的SMS_ContentId我们需要指定一个Number
    Sequence来生成。步骤如下:
    1.在名为NumberSeqModule的BaseEnum中增加一个值的名称为SMS,数值为当前最大值加一;
    2.创建一个用来装载SMS系统中使用Number
    Sequence的numberSeqReference子类,这里我命名为NumberSeqReference_SMS。在这个类中需要覆盖父类中的方法:LoadModule和增加
    一个用于返回在步骤一中定义好的枚举值的静态方法。
    代码如下:
    public class NumberSeqReference_SMS extends
    numberSeqReference
    {
    protected void loadModule()
    {
    NumberSequenceReference numRef;
    ;
    numRef.configurationKeyId =
    16001;//这里指定一个Configuration Key,可以在AOT的Data
    Dictionary下面的ConfigurationKeys定义一个,我在这里
    使用的是自己创建的SMS,它的值为16001
    /*
    Setup SMS Content number */
    numRef.dataTypeId =
    typeId2ExtendedTypeId(typeid(SMS_ContentId));//定义此number
    Sequence的数据类型是SMS_ContentId这个字段的数据
    类型
    numRef.referenceHelp =
    literalStr('@SMS151');//这里的Label定义了方便在引用的时候精确理解的帮助内容
    numRef.wizardContinuous
    = true;//定义在通过向导生成number sequence的连续性
    numRef.wizardManual =
    NoYes::No;//定义是否手动录入number sequence的值
    numRef.wizardAllowChangeDown =
    NoYes::No;//定义是否允许把自动获取的number sequence的值改成更小的值
    numRef.wizardAllowChangeUp =
    NoYes::No;//定义是否允许把自动获取的number sequence的值改成更大的值
    numRef.wizardLowest =
    1;//number Sequence的最小值
    numRef.wizardHighest = 9999999;//number
    Sequence的最大值
    numRef.sortField = 1;//在SMS模块中number
    Sequence中的排序值
    this.create(numRef);//创建此number Sequence引用
    }
    public
    static NumberSeqModule numberSeqModule()
    {
    return
    NumberSeqModule::SMS;
    }
    }
    3.到Class
    NumberSeqReference中的construct方法中增加以下内容:
    case
    (NumberSeqReference_SMS::numberSeqModule()) : return new
    NumberSeqReference_SMS(_module);
    位置是在系统已有的case语句块中,意思是让系统加载刚才我们自己的number
    sequence引用模块
    4.到Class NumberSeqReference中的moduleList方法中增加以下内容:
    moduleList
    += NumberSeqReference_SMS::numberSeqModule();
    位置是在return
    moduleList之前的地方,意思是将我们自己的number sequence引用模块加入到系统的moduleList当中去
    至此我们自己的number
    Sequence引用模块添加完毕。
    接下来我们来考虑如何使用自己新增加的number
    sequence引用。
    考虑到系统设计,SMS_ContentId的新增和删除的动作直接放在Table层:
    在表的initValue方法中加入以下代码新增序列值:
    NumberSeq
    numberSeq;//定义一个序列
    SMS_Content sms_Content;

    numberSeq =
    NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(SMS_ContentId))),
    true);//实例化这个序列
    sms_Content.SMS_ContentId
    =
    numberSeq.num();//获取当前的序列值
    在表的delete方法中加入以下代码删除序列值:
    NumberSeq::release(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(SMS_ContentId))).NumberSequence,
    sms_Content.SMS_ContentId);
    至此我们先去basic-Setup-Number Sequence-Number
    Sequence中定义一个被我们定义好的引用来使用的序列,然后在basic-Setup-Number
    Sequence-Reference中找到module名为
    SMS,reference为我们刚才定义的SMS_ContentId的Label值的引用,定义这个引用的序列。接下来我们就可以到AOT-Data
    Dictionary-Tables-SMS_Content的右键中找到Add-ins,
    然后选择Table
    Browser,点击新增和删除按钮就可以看到我们的SMS_ContentId值是由numberSequence自动生成的效果了。

  • 相关阅读:
    用java抓取网页信息!
    WPF之Binding对数据的转换(第五天)
    WPF读书笔记 x名称空间详解(第二天)
    WPF的UI布局(Layout)WPF读书笔记(第三天)
    WPF 数据绑定Bingding基础(第四天)
    WPF读书笔记(第一天)
    HelloWin程序(窗口与消息)
    django创建数据库表方法
    OpenSSH利用处理畸形长度密码造成的时间差,枚举系统用户(CVE20166210)
    ldap匿名访问测试脚本
  • 原文地址:https://www.cnblogs.com/Fandyx/p/1877358.html
Copyright © 2020-2023  润新知