4.1.2 序列号

时间:2014-04-28 02:56:22   收藏:0   阅读:449

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()这个静态方法。确保你从你的参数表(这个表存储着序列号,表和字段持有生成的序列号)传递序列号引用。

mamicode.com,码迷
NumberSeqFormHandler numberSeqFormHandler() 
{ 
    if (!numberSeqFormHandler) 
    { 
        numberSeqFormHandler = 
        NumberSeqFormHandler::newForm(FleetManagementParameters::nu
        mRefVehicleNumber().NumberSequenceId, 
        element, 
        FMVehicle_DS, 
        fieldNum(FMVehicle, VehicleID)); 
    } 
    return numberSeqFormHandler; 
}
mamicode.com,码迷

接着,你必须在序列号落户的数据源上覆盖create()方法。

mamicode.com,码迷
NumberSeqFormHandler numberSeqFormHandler() 
{ 
    if (!numberSeqFormHandler) 
    { 
        numberSeqFormHandler = 
        NumberSeqFormHandler::newForm(FleetManagementParameters::nu
        mRefVehicleNumber().NumberSequenceId, 
        element, 
        FMVehicle_DS, 
        fieldNum(FMVehicle, VehicleID)); 
    } 
    return numberSeqFormHandler; 
}
mamicode.com,码迷

formMethodDataSourceCreatePre()方法用来验证这是序列号的最后一个号码。对这个方法的调用,必须在super()的调用之前。

formMethodDataSourceCareate()方法,使用一个序列号值,来创建记录。对该方法的调用,必须在super()的调用之后。

下一步是覆盖要插入序列号的那个数据源上的的validateWrite()和write()方法。

mamicode.com,码迷
public boolean validateWrite() 
{ 
    boolean ret; 
    ret = super(); 
    ret = 
    element.numberSeqFormHandler().formMethodDataSourceValidate
    Write(ret) && ret; 
    return ret; 
} 
void write() 
{ 
    ttsbegin; 
    super(); 
    element.numberSeqFormHandler().formMethodDataSourceWrite(); 
    ttscommit; 
}
mamicode.com,码迷

接着,你必须覆盖要插入序列号的那个数据源的delete()方法。这是重要的一步,当你从表单中删除了一条含有序列号的记录时,来确保序列号能取消并删除。

mamicode.com,码迷

void delete()
{
ttsbegin;
element.numberSeqFormHandler().formMethodDataSourceDelete()
;
super();
ttscommit;
}

mamicode.com,码迷

最后一步,是在窗体上覆盖close()方法,来确保窗体关闭后,序列号会取消。

mamicode.com,码迷
void close() 
{ 
if (numberSeqFormHandler) 
{ 
numberSeqFormHandler.formMethodClose(); 
} 
super(); 
}
mamicode.com,码迷

7. 实验:实现一个新的序列号

实现一个新序列号的引用。

7.1 场景

业务应用开发人员,正在在应收帐狂模块开发一个新的特性,来跟踪客户合同。新客户合同特性会被用来跟踪客户账款上的多个合同的明细和期限。

7.2 挑战自己

4.1.2 序列号,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!