4.1.2 序列号
6. 在窗体中使用序列号
要在AX中的窗体上,或者Enterprise Portal上使用序列号,你会典型地添加代码到窗体的数据源或数据集。你也可以直接在代买中获得一个序列号。
6.1 场景:在窗体中使用序列号
业务应用开发人员,正在AX中开发一个新模块——Fleet management。它已经创建了新的序列号,并且在参数窗体上设置了序列号。现在,他想让系统自动获得下一个序列号,在用户添加一个新记录到Vehicle窗体时。
6.1.1 步骤:实现序列号窗体处理程序
要设置一个窗体,对应的处理程序,在窗体中来创建和更新序列号,你必须在窗体关闭或记录删除时,插入或更新序列号。使用下面的样例代码,可以实现序列号窗体处理程序。在例子中,假设你已经有一个表和窗体数据源,叫做FMVEHICLE,它上面有一个字段叫做VehicleId。
从窗体的class delaration中定义NumberSeqFormHandler开始。
public class FormRun extends ObjectRun { NumberSeqFormHandler numberSeqFormHandler; }
接着,创建一个叫做numberSeqFormHandler的新方法。该方法必须在numberSeqFormHandler类上调用newForm()这个静态方法。确保你从你的参数表(这个表存储着序列号,表和字段持有生成的序列号)传递序列号引用。
NumberSeqFormHandler numberSeqFormHandler() { if (!numberSeqFormHandler) { numberSeqFormHandler = NumberSeqFormHandler::newForm(FleetManagementParameters::nu mRefVehicleNumber().NumberSequenceId, element, FMVehicle_DS, fieldNum(FMVehicle, VehicleID)); } return numberSeqFormHandler; }
接着,你必须在序列号落户的数据源上覆盖create()方法。
NumberSeqFormHandler numberSeqFormHandler() { if (!numberSeqFormHandler) { numberSeqFormHandler = NumberSeqFormHandler::newForm(FleetManagementParameters::nu mRefVehicleNumber().NumberSequenceId, element, FMVehicle_DS, fieldNum(FMVehicle, VehicleID)); } return numberSeqFormHandler; }
formMethodDataSourceCreatePre()方法用来验证这是序列号的最后一个号码。对这个方法的调用,必须在super()的调用之前。
formMethodDataSourceCareate()方法,使用一个序列号值,来创建记录。对该方法的调用,必须在super()的调用之后。
下一步是覆盖要插入序列号的那个数据源上的的validateWrite()和write()方法。
public boolean validateWrite() { boolean ret; ret = super(); ret = element.numberSeqFormHandler().formMethodDataSourceValidate Write(ret) && ret; return ret; } void write() { ttsbegin; super(); element.numberSeqFormHandler().formMethodDataSourceWrite(); ttscommit; }
接着,你必须覆盖要插入序列号的那个数据源的delete()方法。这是重要的一步,当你从表单中删除了一条含有序列号的记录时,来确保序列号能取消并删除。
void delete()
{
ttsbegin;
element.numberSeqFormHandler().formMethodDataSourceDelete()
;
super();
ttscommit;
}
最后一步,是在窗体上覆盖close()方法,来确保窗体关闭后,序列号会取消。
void close() { if (numberSeqFormHandler) { numberSeqFormHandler.formMethodClose(); } super(); }
7. 实验:实现一个新的序列号
实现一个新序列号的引用。
7.1 场景
业务应用开发人员,正在在应收帐狂模块开发一个新的特性,来跟踪客户合同。新客户合同特性会被用来跟踪客户账款上的多个合同的明细和期限。
7.2 挑战自己