在新建的FORM上使用系统的Dimension display功能

本文对应word文档地址http://download.csdn.net/source/645651 

 

系统的dimension display功能很强大,如果在做维度显示时直接使用系统的函数是最好不过了。本文只演示如何使用继承自系统函数的dimension控制函数来控制新建的FORMdimension显示,与维度想关的汇总属于更高级的内容了-_-!!!

新建FORM如图1-1,现在需要添加一个系统标准的dimension display按钮,效果如图1-2,点击按钮Dimensions display后弹出标准维度设定框如图1-3.

 

 

 

 

 

1)       首先需要继承系统类InventDimCtrl_Frm得到我们自己的控制函数,有关InventDimCtrl_Frm的细节请自行研究吧。

我们继承的来的类命名为InventDimCtrl_Frm_CancelLog,该函数需要被继承、修改的函数列表如图1-4.

 

方法classDeclaration:

class InventDimCtrl_Frm_CancelLog extends InventDimCtrl_Frm

{

    FormControl     ctrlGridItemId;

}

只需要声明一个FormControl. 由于ItemId是不属于InventDimension的,而在图1-3中我们可以看到是否显示ItemId也是可选的,所以就需要声明一个FormControl 的变量,后面会用它来操作显示或隐藏ItemId.

方法construct:

static InventDimCtrl_Frm_CancelLog construct()

{

    return new InventDimCtrl_Frm_CancelLog();

}

方法parmCtrlItemId

void parmCtrlItemId(FormControl _ctrlGridItemId)

{

    ctrlGridItemId = _ctrlGridItemId;

}

方法initFromCaller(该方法通过Caller来初始inventDimParm,并使用该inventDimparm来定制维度的显示,下边的代码中,Caller是一个含有SalesTable为数据源的FORM,表CancelLogSalesTable的关系为cancelLog.SalesId == salesTable.SalesId,也可以参考InventDimCtrl_Frm_OnHand类):

void initFromCaller()

{

    ItemId                  itemId = "";

    Common                  common;

    InventDimCombination    inventDimCombination;

    InventDimParm           _dimParmVisibleGrid_tmp;

    InventDimParm           _dimParmVisibleGrid;

    boolean                 overrideSetup = false;

    CancelLog                            _CancelLog;//表变量

    ;

    _dimParmVisibleGrid.ItemIdFlag    = true;

 

    if (this.mustInventDimParmVisibleBeInit())

    {

            //要想switch,必须将Dimensions Display按钮的DataSource进行设置

            //这里设为salesTable

        switch(callingElement.args().dataset())

        {

            case tablenum(SalesTable):

                while select _CancelLog

                                        orderby _CancelLog.salesId

                {

                    if(itemId != _CancelLog.ItemId)

                    {

                        itemId = _CancelLog.ItemId;

                        _dimParmVisibleGrid_tmp.initPrimaryDim(InventTable::find(ItemId).DimGroupId);

                                _dimParmVisibleGrid = InventDimParm::orParms(_dimParmVisibleGrid,_dimParmVisibleGrid_tmp);

                        _dimParmVisibleGrid.ItemIdFlag              = _dimParmVisibleGrid_tmp.ItemIdFlag            == NoYes::Yes ? NoYes::Yes : _dimParmVisibleGrid.ItemIdFlag;

                     }

                 }

                break;

            default:

                break;

        }

    }

    this.parmDimParmVisibleGrid(_dimParmVisibleGrid, overrideSetup);/*最重要的就是这句了,使用我们前边得到的inventDimParm来定制界面*/

}

这个方法主要是通过获取ITEMID从而的的INVENTDIM来设置INVENTDIMPARM,至于里边怎么实现那就看具体了

方法mustInventDimParmVisibleBeInitDetermines if the dimension visible grid should be controlled depend on the form caller.):

boolean mustInventDimParmVisibleBeInit()

{

    boolean ret;

    ;

    if (!callingElement)

    {

        throw Error::wrongUseOfFunction(funcname());

    }

 

    ret = !(callingElement.args().record() == null && callingElement.args().lookupRecord());

 

    return ret;

}

方法updateControls:

void updateControls()

{

 

    super();

    if (ctrlGridItemId)

        ctrlGridItemId.visible(dimParmVisibleGrid.ItemIdFlag);

}

Override该方法主要是为了控制itemId的显示,Super方法之后的代码就是修改是否显示ItemId.

方法newFromForm

public static InventDimCtrl_Frm_CancelLog newFromForm(FormRun _formRun)

{

    InventDimCtrl_Frm_CancelLog    inventDimCtrl = InventDimCtrl_Frm_CancelLog::construct();

    InventDimAxFormAdapter adapter = InventDimAxFormAdapter::newFromForm(_formRun);

    ;

    inventDimCtrl.parmCallingElement(adapter);

    inventDimCtrl.init();

    return inventDimCtrl;

}

(2) 我们的类到这里就OK了,接下来需要给form上增加几个方法,如图1-5,使我们的类能够用于控制form的显示。

FormclassDeclaration:

public class FormRun extends ObjectRun

{

    InventDimCtrl_Frm_CancelLog inventDimFormSetup;

}

声明一个类变量。

方法updateDesign

void updateDesign(InventDimFormDesignUpdate mode)

{

    switch (mode)

    {

        case InventDimFormDesignUpdate::Init          :

 

        case InventDimFormDesignUpdate::LinkActive    :

            element.inventDimSetupObject().initFromCaller();

         element.inventDimSetupObject().parmCtrlItemId(CancelLog_ItemId);/*CancelLog_ItemId是用于显示ItemId的控件的名称,该控件的自动声明属性需要设为YES*/

            if (mode == InventDimFormDesignUpdate::Init)

            {

                if (element.inventDimSetupObject().parmDimParmVisibleGrid().ItemIdFlag == NoYes::No)

                    CancelLog_ItemId.visible(false);

            }

 

        case InventDimFormDesignUpdate::Active        :

            element.inventDimSetupObject().formActiveSetup();

            element.inventDimSetupObject().formSetControls(true,true);

            break;

 

        default : throw error(strfmt("@SYS54195",funcname()));

    }

}

         方法init

         void  init()

{

             ;

             super();

             element.updateDesign(InventDimFormDesignUpdate::Init);

}

方法inventDimSetupObject

InventDimCtrl_Frm_CancelLog inventDimSetupObject()

{

    if (!inventDimFormSetup)

    {

        inventDimFormSetup  = InventDimCtrl_Frm_CancelLog::newFromForm(element);

        inventDimFormSetup.parmLargeRightClickForm(NoYes::Yes);

    }

    return inventDimFormSetup;

}

这个方法会被Form: InventDimParmFixed使用,用于获得控制form显示的类InventDimCtrl_Frm_CancelLog的变量

(3) 最后将MenuItem: InventDimParmFixed拖到FORM里作为按钮就可以实现功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值