以下内容是我自己整理的部分内容,你也可以查看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
的类了,二是去修改已经存在的系统所继承得来的子类,其余的部分都和以上操作是一样的。
至于其中的细节及诸多问题我也在学习中,希望大家共同探讨。