Sbo采用的是MDI窗体框架模式,SDK开发中对模态对话框支持的非常不好,所以在Sbo Addon中实现模态数据查询与选择,并将选择信息传递到调用窗体,不是一件容易的事情。
既然是程序开发框架,就需要对模态对话框提供支持。经过了两天的努力,完成了通用的模态选择对话框,并在程序开发框架中提供了一个通用的接口进行主数据的查询--事实上,并且也肯定要将这种功能扩展所有的数据选择需要中;同时还要对单据数据的查询提供支持。
使用富盛Sbo Add-on程序开发框架,只需要20行就可以完成查询主数据。这个功能、连同对系统级的事件的过滤、系统界面同自定制界面的事件消息处理,将在下一版本中提供支持,下一版本预计在2007年11月中旬提供下载。
在此演示怎样完成使用富盛Sbo Add-on程序开发框架进行模态数据选择与捕捉。
1、定义模态数据选择窗体的父窗体。这个窗体可以是通过菜单入口调用的非模态化的窗体,也可以是窗体按钮或者按钮事件中进入模态化窗体(当然模态窗体支持菜单调用、也支持事件调用),富盛Sbo Add-on程序开发框架支持多达16层的模态对话框。
        //构造函数中指定富盛Sbo-Addon程序开发框架的通用功能支持类变量
        public frmTestModalForm(fsSboCommon fs)
        {
            fsSbo = fs;
        }
        
        //界面创建
        public override int ShowForm(string strFormId, string strFormName)
        {
            if (ShowForm(strFormId, strFormName, 0, 300, 400, 320) == 1) return 1;
            try
            {
                stMsg = fsSbo.AddStaticText2Form(ref oForm, "stTitle", "等待选择...", 10, 10, 380, 20);
                fsSbo.AddButton2Form(ref oForm, "btnItem", "选择物料主数据", 50, 140, 120, 30);
                fsSbo.AddButton2Form(ref oForm, "btnCust", "选择客户主数据", 100, 140, 120, 30);
                fsSbo.AddButton2Form(ref oForm, "btnSupp", "选择供应商主数据", 150, 140, 120, 30);
                fsSbo.AddButton2Form(ref oForm, "btnWhs", "选择仓库主数据", 200, 140, 120, 30);
                fsSbo.AddButton2Form(ref oForm, "btnAcct", "选择财务主数据", 250, 140, 120, 30);
            }
            catch (Exception ex)
            {
                fsSbo.ShowMsg(ex.Message);
            }
            oForm.Visible = true;
            return base.ShowForm(strFormId, strFormName);
        }
以上代码实现了测试窗体的建立,形成如下窗体:
在Sbo Add-on插件中实现通用的模态数据选择_休闲
 2、有了界面,再就需要编写事件捕捉程序,通过ItemPressed事件分别对物料主数据、客户主数据、供应商主数据、仓库主数据和财务科目主数据的模态选择提供支持。
在富盛Sbo-Addon程序开发框架中查询主数据非常简单,一条语句就搞定了,如下:
fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterItems);
前者通知fsSboCommon当前界面要查询主数据,第二个参数用于指定选择物料主数据。如果需要捕捉选中的主数据,调用时两个参数都是必不可少的,前者通知数据选择模态对话框,将选取的数据返回给调用窗口,没有后者自然就不知道该选择什么数据。
支持对上述主数据的选择代码如下:
        protected override bool DoPostItemEventItemPressed(ref SAPbouiCOM.ItemEvent pVal)
        {
            switch (pVal.ItemUID)
            {
                case "btnItem":
                    nIndex = fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterItems;
                    fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterItems);
                    break;
                case "btnCust":
                    nIndex = fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterCustomers;
                    fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterCustomers);
                    break;
                case "btnSupp":
                    nIndex = fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterSuppliers;
                    fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterSuppliers);
                    break;
                case "btnWhs":
                    nIndex = fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterWarehouses;
                    fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterWarehouses);
                    break;
                case "btnAcct":
                    nIndex = fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterAccounts;
                    fsSbo.SelectSboMasterData(this, fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterAccounts, "Levels=1");
                    break;
            }
            return base.DoPostItemEventItemPressed(ref pVal);
        }
 3、点击选择按钮,进入到主数据选择窗体,比如主数据选择窗体。在调用的时候,您可以像调用查询物料主数据那样,只提供两个参数,也可以向调用财务科目主数据选择那样,传递一个限制条件“Levels=1”,查询以及财务科目,富盛Sbo-Addon程序开发框架都是支持的。
比如,点击“查询物料主语句”,进入如下界面,在界面中还可以输入进一步的交互式查询条件,这个交互式的查询条件可以对第一列、或者第一二列或者N列都支持的模糊查询,这个在调用中也是可以定义的。如下图:
在Sbo Add-on插件中实现通用的模态数据选择_Sbo2005B_02
4、选择数据,并将数据返回到调用窗口。
在Sbo Add-on插件中实现通用的模态数据选择_Add-on开发_03
选中信息回调主要通过以下代码来完成。
        public override void SetReturnValue4SelectForm(string strVal)
        {
            switch (nIndex)
            {
                case fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterAccounts:
                    stMsg.Caption = "您选择的财务科目是:" + strVal;
                    break;
                case fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterCustomers:
                    stMsg.Caption = "您选择的客户代码是:" + strVal;
                    break;
                case fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterSuppliers:
                    stMsg.Caption = "您选择的供应商代码是:" + strVal;
                    break;
                case fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterWarehouses:
                    stMsg.Caption = "您选择的仓库代码是:" + strVal;
                    break;
                case fsSboCommon.fsSboSelectMasterFormType.fsSelectFormMasterItems:
                    stMsg.Caption = "您选择的物料代码是:" + strVal;
                    break;
            }
            base.SetReturnValue4SelectForm(strVal);
        }
界面如下。
在Sbo Add-on插件中实现通用的模态数据选择_Sbo2005B_04