今天,继续在为富盛Sbo Add-on程序开发框架添加业务功能,丰富这个开发框架的内涵。主要实现了在原来的模态选择对话框的基础上加入了主数据和主业务明细界面的关联功能,同时实现了对16个单据对象的模态选择与主业务维护界面的关联。
在Sbo-Addon开发中,使用模态对话框进行数据选择,真的很不容易,在程序开发框架中终于成功添加主数据和系统业务的关键值选择,接下来将加入对任意业务对象--包括自定义数据表和自定义业务对象的模态数据选择功能。
尽管在Sbo Add-on中实现模态选择很复杂,在富盛Sbo-Addon程序开发框架中却只需要非常简单的几个语句,就可以完全搞定。在此通过一个实例进行说明:
1、建立一个父窗口,用来测试单据对象的模态选择功能。这个窗口可以使系统窗口、自定义窗口甚至是通过富盛Sbo Add-on程序开发框架的模态窗口派生的窗体。我在这里就直接生成了一个新的窗体来进行测试,这个窗体的界面如下:
%E5%8D%95%E6%8D%AE%E5%AF%B9%E8%B1%A1%E9%80%89%E6%8B%A9%E4%B8%BB%E7%AA%97%E4%BD%93.jpg
使用富盛Sbo Add-on程序开发框架实现这个见面,非常Easy,代码如下:
    //任何一个自定义窗体,都必须派生自富盛窗体基础类,并且必须有如下的这个构造函数,或者在主程序中对此进行赋值
     public frmTestDocmentSelectForm(fsSboCommon fs)
        {
            fsSbo = fs;
        }
        //这是一个Add-on界面绘制的函数,窗体控件就是在此进行定义并添加到窗体之上的
        public override int ShowForm(string strFormId, string strFormName)
        {
            string[] strName4DocmentModalForms =
            {
                "×××", "销售贷项凭证", "销售发货", "销售退货", "销售订单",
                "采购发票", "采购贷项凭证", "采购交货", "采购退货", "采购订单",
                "销售报价单", "其它入库", "其它出库", "仓库转储", "生产订单", "业务草稿"
            };
            if (ShowForm(strFormId, strFormName, 0, 300, 400, 200) == 1) return 1;
            try
            {
                oForm.DataSources.UserDataSources.Add("docDs", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 10);
                stMsg = fsSbo.AddStaticText2Form(ref oForm, "stMsg", "等待选择...", 170, 10, 380, 20);
                fsSbo.AddStaticText2Form(ref oForm, "stTitle", "请选择", 30, 10, 60, 20);
                oCombox = fsSbo.AddCombox2Form(ref oForm, "cbxDocSel", "", "docDs", 30, 80, 100, 20);
                for (int i = 0; i < strName4DocmentModalForms.Length; i++)
                    oCombox.ValidValues.Add(strName4DocmentModalFormsIdea, i.ToString());
                fsSbo.AddButton2Form(ref oForm, "btnQuery", "查询", 70, 90, 120, 30);
            }
            catch (Exception ex)
            {
                fsSbo.ShowMsg(ex.Message);
            }
            oForm.Visible = true;
            return base.ShowForm(strFormId, strFormName);
        }
2、这个界面其实也很简单,一个ComboBox组件用以提供单据对象选择,选择之后通过点击“查询”按钮,进入到单据对象选择界面。实现这个功能只需要几句话--其实如果自己不进行新的界面绘制,要完成单据对象的查询选择,就这个简单的几个语句就OK了。
        protected override bool DoPostItemEventItemPressed(ref SAPbouiCOM.ItemEvent pVal)
        {
            switch (pVal.ItemUID)
            {
                case "btnQuery":        //查询按钮
                    nIndex = Convert.ToInt32(oCombox.Selected.Description);        //获得单据对象类型
                    fsSbo.SelectSboDocmentData(this, (fsSboCommon.fsSboSelectDocmentFormType)nIndex);  //其实就这么一句话就搞定了选择窗口的建立
                    break;
            }
            return base.DoPostItemEventItemPressed(ref pVal);
        }
比如,我选择了“×××”单据对象,点击“查询”按钮之后,就自动进入×××单据对象选择界面,如下图:
%E5%8D%95%E6%8D%AE%E5%AF%B9%E8%B1%A1%E9%80%89%E6%8B%A9%E7%95%8C%E9%9D%A2.JPG
 3、单据对象查询选择界面还是应该花费一点笔墨来介绍一下的。这个界面由四部分组成,顶部是查询条件录入,中间两部分分别是单据对象列表和指定单据的明细列表,单据列表和单据明细列表之间是关联的,就是说选择了单据列表中的某一行,其明细信息就会显示在下面的单据明细列表中。这的确很符合中国人的习惯。
事实上,顶端的查询条件可以对期望的单据内容进行过滤,以便于查找。而很多时候,我们需要权限管理,并不是所有的单据内容都可以被操作人员所浏览,这时候在打开界面的时候,可以通过传递参数进行控制。
在单据列表中,有Sbo中常见的×××按钮--业务关联按钮,尽管我们使用的是模态对话框,我们仍然支持这种深入查询,点击关联按钮,就会到达业务关联窗口,从而可以浏览更加详细的单据明细。并且,我们屏蔽了导航条功能,从而为权限控制提供了保障。
4、点击选取按钮,获得选中的单据编号(docEntry),并且传递到指定的调用窗口。
5、如果调用窗体不是由富盛Sbo-Addon程序开发框架派生的,或者没有指定调用父窗体,选取按钮将自动失效,这个时候完成的不过是一个检索窗体的功能。