富盛Sbo Add-on程序开发框架及开发实例
2007-10-29 17:25:07
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://foresun.blog.51cto.com/221037/48184 |
一、问题的提出
Sbo是一套具有非常不错业务架构、并且很好支持了二次开发的企业信息管理系统--对不起,我还不称之为Erp,因为如果不进行二次开发,Sbo可以支持的业务面还是太窄太小,业务之间约束关系也太简单。是的,我的观点是,如果没有很好的二次开发,Sbo是无法支撑不断发展变化的中国企业的业务需要的。 那么,进行Sbo二次开发是不是很简单? 应该说,不太复杂!不过,对于初学者或者刚涉足这一领域的程序开发人员来说,基于COM组建的Sbo SDK同现行的强大的程序开发集成环境相比,还是很不好用。 为了解决这一问题,我花了一些时间,结合自己对Sbo SDK二次开发和开发语言--C#的理解,编写了一套富盛Sbo Add-on程序开发框架。 二、富盛Sbo-Addon程序开发框架的构成 既然称之为程序开发框架,那么就应该能够:程序员在此基础上开发的程序,只需要关心业务实现流程和数据逻辑;对于应用程序如何实现Sbo同Add-on之间集成、以及Sbo同Add-on之间是如何实现消息传递的应该是框架自动管理的;业务界面的创建与事件侦听应该符合当前流行的程序开发概念。 应该说,富盛Sbo Add-on程序开发框架基本做到了这一点。 富盛Sbo-Addon程序开发框架包括三部分: 1、fsSboCommon,完成Sbo Add-on的通用数据和界面接口的开发封装,提供系统级别的功能支持。fsSboCommon被集成到程序开发框架中作为一个全局变量完成Add-on同Sbo之间的数据与消息传递与业务事务实现支撑; 2、fsSboAppBase,显而易见,这个类是一个用于支撑Sbo Add-on程序的基础类,这个类中集成了fsSboCommon全局实例,并且封装了Add-on框架相对于Sbo主程序的单点登录、事件侦听一体化功能,使二次开发人员只需要10几行的代码,就可以完成对整个程序框架的绘制。 3、fsSboFormBase,这是一个业务处理界面的实现基类,目前这个类同fsSboCommon一起可以非常简单的实现了界面绘制、控件添加、事件侦听等。这个类的更加广泛的功能还在扩展和优化中。 基于目前的富盛Sbo Add-on程序框架,已经可以非常简单的就可以完成一个Sbo Add-on程序的开发了,只需要半小时甚至10分钟就可以完成一个简单的2、3个业务界面的Add-on插件程序。 三、程序开发实例 现在我们使用富盛Sbo Add-on程序开发框架开发一个三个业务界面的Add-on插件,三个业务界面分别为:物料货品定义、特惠政策录入和二次重叠优惠定义。 1、首先我们使用富盛Sbo Add-on程序开发框架生成一个主程序,这很简单,直接继承fsSboAppBase类、之后为程序框架定义菜单项和业务功能项就可以了,代码如下: public class fsCBAMain:fsSboAppBase { frmGsTyEntry frmGoodsType = null; frmDiscPolicy frmDiscPolicy = null; frmDisc2Policy frmDisc2Policy = null; string[] strMenuIds = { "UM_FSCBA_GSTY", "UM_FSCBA_DISCPOLICY", "UM_FSCBA_DISC2POLICY" };
string[] strMenuNames = { "物料货品定义", "特惠政策维护", "二次优惠维护" }; string[] strFormIds = { "UF_FSCBA_GSTY", "UF_FSCBA_DISCPOLICY", "UF_FSCBA_DISC2POLICY" }; string[] strFormNames = { "物料货品定义", "特惠政策维护", "二次优惠维护" }; public fsCBAMain()
{ fsSbo.AddRootMenu("UM_FSCBA", "成本利润分析"); fsSbo.AddMenuItems("UM_FSCBA", SAPbouiCOM.BoMenuType.mt_STRING, strMenuIds, strMenuNames); fsAddForm(frmGoodsType = new frmGsTyEntry(fsSbo)); fsAddForm(frmDiscPolicy = new frmDiscPolicy(fsSbo)); fsAddForm(frmDisc2Policy = new frmDisc2Policy(fsSbo)); for (int i = 0; i < strMenuIds.Length; i++)
fsSbo.AddAppModule(strMenuIds[i], strMenuNames[i], strFormIds[i], strMenuNames[i], fsForms[i]); } } 2、分别从fsSboFormBase类中继承三个业务界面类,用以实现物料货品定义(frmGoodsType)、特惠政策定义(frmDiscPolicy)、二次优惠维护(frmDisc2Policy),三个业务界面类分别由以下代码实现: 2.1、物料货品定义(frmGoodsType),不过实现的界面内容好像同物料定义没有什么关系。的确如此,但是通过这个类可以看出,使用富盛Sbo Add-on程序开发框架来生成一个简单的查询业务是如何的简单。这个界面使用两种方式将需要的信息实现了在界面中显示在两个Grid上。 public class frmGsTyEntry : fsSboFormBase { public frmGsTyEntry(fsSboCommon fs) { fsSbo = fs; } public override int ShowForm(string strFormId, string strFormName)
{ if (ShowForm(strFormId, strFormName, 0, 300, 700, 570) == 1) return 1; SAPbouiCOM.Grid grd = fsSbo.AddGrid2Form(ref oForm, "grd0", 10, 10, 680, 240); string strSQL = "select CardCode as 客户代码, CardName as 客户名称, DocDate as 发票日期, DocNum as 发票号码, DocTotal as 发票金额, DocStatus as 状态 from OINV"; fsSbo.SetTable2Grid(ref oForm, ref grd, "myOINV", strSQL); grd = fsSbo.AddGrid2Form(ref oForm, "grd1", 250, 10, 680, 240);
fsSbo.SetTable2Grid(ref oForm, ref grd, "OINV"); fsSbo.AddButton2Form(ref oForm, "btnClose", "关闭", 530, 20, 60, 24); oForm.Visible = true;
return base.ShowForm(strFormId, strFormName);
} protected override bool DoBeforeItemEvent(ref SAPbouiCOM.ItemEvent pVal)
{ switch (pVal.ItemUID) { case "btnClose": if (pVal.EventType == SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED) oForm.Close(); break; } return base.DoBeforeItemEvent(ref pVal);
} } ![]() 2.2、特惠政策定义(frmDiscPolicy),同样的,这个界面同特惠政策没有任何业务关联。这个界面还是非常复杂的,但是使用富盛Sbo Add-on程序开发框架,只需要二十行代码就实现了三个Folder中的不同的控件绘制。 public class frmDiscPolicy : fsSboFormBase { public frmDiscPolicy(fsSboCommon fs) { fsSbo = fs; } public override int ShowForm(string strFormId, string strFormName )
{ string[] strFId = { "Folder0", "Folder1", "Folder2" }; if (ShowForm( strFormId, strFormName, 0, 300, 700, 570) == 1) return 1; fsSbo.AddFolders2Form(ref oForm, strFId, strFId, 10, 10, 680, 510); SAPbouiCOM.Matrix mtx = fsSbo.AddMatrix2Form(ref oForm, "mtx", 30, 20, 660, 470, 1, 1); fsMatrixColumn fsCol = new fsMatrixColumn(); fsSbo.AddColumn2Matrix(ref mtx, fsCol); for (int i = 0; i < 10; i++) { fsCol.SetColId("Col" + i.ToString(), "Column" + i.ToString(), 40 + 5 * i); if (i % 3 == 0) fsCol.SetRightJustified(true); fsSbo.AddColumn2Matrix(ref mtx, fsCol);
} SAPbouiCOM.Grid grd = fsSbo.AddGrid2Form(ref oForm, "grd", 30, 20, 660, 470, 2, 2);
fsSbo.SetTable2Grid(ref oForm, ref grd, "OITM"); oForm.DataSources.UserDataSources.Add("OpBtnDS", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1);
fsSbo.AddOptionButton2Form(ref oForm, "OptionBtn1", "单项选择一", 60, 40, 200, 24, 3, 3, null, "", "OpBtnDS"); fsSbo.AddOptionButton2Form(ref oForm, "OptionBtn2", "单项选择二", 90, 40, 200, 24, 3, 3, "OptionBtn1", "", "OpBtnDS"); fsSbo.AddOptionButton2Form(ref oForm, "OptionBtn3", "单项选择三", 120, 40, 200, 24, 3, 3, "OptionBtn1", "", "OpBtnDS"); oForm.DataSources.UserDataSources.Add("ChkBoxDS1", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1);
oForm.DataSources.UserDataSources.Add("ChkBoxDS2", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1); oForm.DataSources.UserDataSources.Add("ChkBoxDS3", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1); fsSbo.AddCheckBox2Form(ref oForm, "CheckBox1", "复项选择一", 60, 260, 200, 24, 3, 3, "", "ChkBoxDS1"); fsSbo.AddCheckBox2Form(ref oForm, "CheckBox2", "复项选择二", 90, 260, 200, 24, 3, 3, "", "ChkBoxDS2"); fsSbo.AddCheckBox2Form(ref oForm, "CheckBox3", "复项选择三", 120, 260, 200, 24, 3, 3, "", "ChkBoxDS3"); fsSbo.AddButton2Form(ref oForm, "btnClose", "关闭", 530, 20, 60, 24);
oForm.PaneLevel = 1;
oForm.Visible = true;
return base.ShowForm(strFormId, strFormName);
} protected override bool DoBeforeItemEvent(ref SAPbouiCOM.ItemEvent pVal)
{ switch (pVal.ItemUID) { case "btnClose": if (pVal.EventType == SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED) oForm.Close(); break; case "Folder0":
oForm.PaneLevel = 1; break; case "Folder1":
oForm.PaneLevel = 2; break; case "Folder2":
oForm.PaneLevel = 3; break; }
return base.DoBeforeItemEvent(ref pVal); } } ![]() 2.3、二次优惠维护(frmDisc2Policy),上面的两个业务界面实现了,这个界面就没有什么需要说明的了,采用了两种方式绘制Matrix控件。看代码: public class frmDisc2Policy : fsSboFormBase { public frmDisc2Policy(fsSboCommon fs) { fsSbo = fs; } public override int ShowForm(string strFormId, string strFormName)
{ if (ShowForm(strFormId, strFormName, 0, 300, 700, 570) == 1) return 1; //在Matrix中批量增加栏目,方案一
fsMatrixColumn[] fsColList = new fsMatrixColumn[11]; SAPbouiCOM.Matrix oMatrix = fsSbo.AddMatrix2Form(ref oForm, "mtx0", 10, 10, 680, 240); fsColList[0] = new fsMatrixColumn(); for (int i = 1; i < fsColList.Length; i++) { fsColList[i] = new fsMatrixColumn(); fsColList[i].SetColId("Col" + (i-1).ToString(), "Column" + (i-1).ToString(), 40 + 5 * (i - 1)); if (i % 3 == 0) fsColList[i].SetRightJustified(true); } fsSbo.AddColumns2Matrix(ref oMatrix, fsColList);
//在Matrix中批量增加栏目,方案二
fsMatrixColumn fsCol = new fsMatrixColumn(); oMatrix = fsSbo.AddMatrix2Form(ref oForm, "mtx1", 255, 10, 680, 250); fsSbo.AddColumn2Matrix(ref oMatrix, fsCol); for (int i = 0; i < 10; i++) { fsCol.SetColId("Col" + i.ToString(), "Column" + i.ToString(), 40 + 5 * i); if (i % 3 == 0) fsCol.SetRightJustified(true); fsSbo.AddColumn2Matrix(ref oMatrix, fsCol);
} fsSbo.AddButton2Form(ref oForm, "btnClose", "关闭", 530, 20, 60, 24); oForm.Visible = true;
return base.ShowForm(strFormId, strFormName);
} 本文出自 “富盛软件工作室” 博客,请务必保留此出处http://foresun.blog.51cto.com/221037/48184 本文出自 51CTO.COM技术博客 |
附件下载:
富盛Sbo-Addon程序开发框架下载
富盛Sbo-Addon程序开发框架下载




foresun
博客统计信息
热门文章
最新评论
友情链接