Number Sequence

以下内容是我自己整理的部分内容,你也可以查看MSDN关于Number sequence的框架,地址为: http://msdn.microsoft.com/en-us/library/aa608474.aspx
自建编号规则
方法一:
1.       在Base Enum的NumberSeqModule下新建一个Element,这里命名为davNumSeq
2.       在EDT中新建String类的数据类型,命名为field1
3.       新建Table:davTable,将EDT:field1拖入davTable的fields下
4.       新建Form:davForm,将Table:davTable拖入davForm的Data Source下,将Data Source下的davTable的field1字段拖入davForm下的Design下新建的Grid中。
5.       新建类davClass,修改声明为:
class davClass extends NumberSeqReference { }
,然后override方法lodaModule,新建方法NumberSeqModule,如下:
protected void loadModule()
{
    NumberSequenceReference NumberSequenceReference;
    ;
NumberSequenceReference.DataTypeId               = typeid2extendedtypeid(typeid(field1));
    NumberSequenceReference.ReferenceHelp           = literalStr("@SYS?????");
    NumberSequenceReference.DataTypeSameAsId        = typeid2extendedtypeid(typeid(field1));
    NumberSequenceReference.WizardContinuous        = true;
    NumberSequenceReference.SortField               = 1;
    NumberSequenceReference.GroupEnabled            = false;
 
    this.Create(NumberSequenceReference);
}
该方法具体如何写可以参考NumberSeqReference下的loadModule中的注解,非常清楚明了的。
 
public static NumberSeqModule    NumberSeqModule()
{
    return NumberSeqModule::davNumSeq;
}
6.       修改NumberSeqReference类下的两个方法:
public static NumberSeqReference construct(NumberSeqModule _module)
{
    switch (_module)
    {
              //在这里加入我们自己的东西,格式参照系统写
              case (davClass::NumberSeqModule())   : return new davClass(_module);
// 这里只需要加这些了
              }
throw error(strfmt("@SYS53742"));
}
 
static public container moduleList()
{
    container moduleList;
    ;
              // 参考系统写入我们自己的东西
              moduleList += davClass::NumberSeqModule();
              //OK
return moduleList;
}
7.       Basic->Set up->Number Sequences->Number Sequences 下新建 Number Sequence Code:
8.       Basic->Set up->Number Sequences->References 下为我们建立的 reference:davNumSeq 选择 Number Sequence Code
 
9.       table:davTable methods override 方法:
public void initValue()
{
    NumberSeq   numberSeq;
    ;
    super();
    numberSeq = NumberSeq::newGetNum(NumberSeqReference::findReference(typeid2extendedTypeId(typeId(field1))));
    this.field1 = numberSeq.num();
}
10.   大功告成了,现在打开 form:davform 就可以了。
方法二:
11.   在Base Enum的NumberSeqModule下新建一个Element,这里命名为davNumSeq2
12.   在EDT中新建String类的数据类型,命名为davNumSeq2
13.   新建Table: davNumSeqTable2,将EDT:davNumSeq2拖入davNumSeqTable2的fields下;
14.   新建Table: davNumSeqForm2Parameters,将EDT:davNumSeq2拖入davNumSeqForm2Parameters的fields下;
15.   新建Form: davNumSeqForm2,将Table: davNumSeqTable2拖入davNumSeqForm2的Data Source下,将Data Source下的davNumSeqTable2的davNumSeq2字段拖入davNumSeqForm2下的Design下新建的Grid中。
16.   新建类NumberSeqReference_dav2,修改声明为:
class NumberSeqReference_dav2extends NumberSeqReference { }
,然后override方法lodaModule,新建方法NumberSeqModule,如下:
protected void loadModule()
{
    NumberSequenceReference NumberSequenceReference;
    ;
    NumberSequenceReference.DataTypeId              = typeid2extendedtypeid(typeid(davNumSeq2));
    NumberSequenceReference.ReferenceHelp           = literalStr("@SYS?????");
    NumberSequenceReference.DataTypeSameAsId        = typeid2extendedtypeid(typeid(davNumSeq2));
    NumberSequenceReference.WizardContinuous        = true;
    NumberSequenceReference.SortField               = 1;
    NumberSequenceReference.GroupEnabled            = false;
 
    this.Create(NumberSequenceReference);
}该方法具体如何写可以参考NumberSeqReference下的loadModule中的注解,非常清楚明了的。
public static NumberSeqModule    NumberSeqModule()
{
return NumberSeqModule::davNumSeq2;
}
17.   }修改NumberSeqReference类下的两个方法:
public static NumberSeqReference construct(NumberSeqModule _module)
{
    switch (_module)
    {
              //在这里加入我们自己的东西,格式参照系统写
     case (NumberSeqReference_Dav2::NumberSeqModule()) : return new NumberSeqReference_Dav2(_module);
// 这里只需要加这些了      
              }
throw error(strfmt("@SYS53742"));
}
 
static public container moduleList()
{
    container moduleList;
    ;
              // 参考系统写入我们自己的东西
              moduleList += NumberSeqReference_dav2 ::NumberSeqModule();
              //OK
return moduleList;
}
18.   Basic->Set up->Number Sequences->Number Sequences 下新建 Number Sequence Code:
19.   Basic->Set up->Number Sequences->References 下为我们建立的 reference:davNumSeq 选择 Number Sequence Code
 
20.   Table: davNumSeqForm2Parameters下添加方法:
server static NumberSequenceReference numRefDavNumSeq2()
{
    return NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(DavNumSeq2)));
}
21.   Form: davNumSeqForm2的Data Source下的davNumSeqTable2的create方法override:
public void create(boolean _append = false)
{
    ;
    super(_append);
    numberSeqFormHandler = NumberSeqFormHandler::newForm(
    davNumSeqForm2Parameters::numRefDavNumSeq2().NumberSequence,
    element,
    davNumSeqTable2_ds,
    fieldnum(davNumSeqTable2, davNumSeq2) );
    numberSeqFormHandler.formMethodDataSourceCreate();
}
22.   大功告成了,现在打开Form: davNumSeqForm2 就可以了。
 
如果是在系统原有的模块上想创建实用新的 number sequence 就比较容易了,如果你掌握了上边的步骤,则同样可以采取两种方式来创建你的 number sequence, 不同的是:你不需要创建继承自 NumberSeqReferences 的类了,二是去修改已经存在的系统所继承得来的子类,其余的部分都和以上操作是一样的。
至于其中的细节及诸多问题我也在学习中,希望大家共同探讨。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值