企业数据集成与导出解决方案

在当今的商业环境中,企业需要将来自不同后端服务器应用程序(如SAP或Siebel)的业务数据集成到企业门户中,以提供丰富的解决方案给最终用户,而无需编写任何代码。这种集成解决方案允许将任何其他数据源集成到MOSS 2007环境中。通过在业务数据目录中注册业务数据,创建描述数据库或Web服务的元数据,业务数据目录使用这些元数据来调用正确的数据源以检索相关数据。

客户最迫切的需求之一是能够将业务数据目录中的搜索结果导出。业务数据实体可用于以下业务数据功能:业务数据Web部件、业务数据列表、业务数据搜索和用户配置文件中的业务数据。因此,客户希望将这些业务数据实体导出到ExcelPDF。遗憾的是,Microsoft没有提供任何导出到任何格式的设施。因此,本文提出了一种将业务数据实体导出到Excel/PDF的方法。

使用代码

有两种方法可以将业务实体导出到Excel:

  • 使用HTTPHandler
  • 使用通用调用器(通常在自定义Web部件开发时有帮助)

第一种选项在希望导出使用业务数据开发的企业搜索结果(例如,SAP R/3、PeopleSoft等其他系统的用户配置文件信息)时非常有用。

public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/vnd.ms-excel"; NamedLobSystemInstanceDictionary ObjInstances = ApplicationRegistry.GetLobSystemInstances(); LobSystemInstance ObjInstance = ObjInstances["实例名称"]; Entity ObjEntity = ObjInstance.GetEntities()["实体名称"]; MethodInstance ObjMethodInst = ObjEntity.GetFinderMethodInstance(); IEntityInstanceEnumerator ObjEntityInstanceEnumerator = (IEntityInstanceEnumerator)prodEntity.Execute(ObjMethodInst, ObjInstance); while (ObjEntityInstanceEnumerator.MoveNext()) { IEntityInstance IE = prodEntityInstanceEnumerator.Current; foreach (Field f in prodEntity.GetFinderView().Fields) { context.Response.Write(IE[f]); context.Response.Write('\t'); } context.Response.Write('\n'); } }

第二种选项是调用通用调用器来执行MethodInstance,然后将返回结果导出到Excel

// 应用程序定义 <Method Name="ExportExcel"> <Properties> </Parameter> </Parameters> <MethodInstances> <MethodInstance Name="ExportToExcel" Type="GenericInvoker" ReturnParameterName="ExportPlantsExcel" /> </MethodInstances> </Method>

WebPart示例:

protected override void CreateChildControls() { lbExcel = new HyperLink(); lbExcel.Text = "导出到Excel"; lbExcel.NavigateUrl = SPContext.Current.Web.Url + "/Export.ashx?format=excel&instance=ExcelInstance"; lbExcel.Load += new EventHandler(lbExcel_Load); lbExcel.ImageUrl = "/_layouts/images/ICXLS.GIF"; lbPdf = new HyperLink(); lbPdf.Text = "导出到PDF"; lbPdf.Load += new EventHandler(lbPdf_Load); lbPdf.NavigateUrl = SPContext.Current.Web.Url + "/Export.ashx?format=pdf&instance=PDFInstance"; lbPdf.ImageUrl = "/_layouts/images/pdf.gif"; // ... }

会话对象必须持有GenericInvoker MethodInstance的结果:

void lbPdf_Load(object sender, EventArgs e) { System.Web.HttpContext.Current.Session["PDFInstance"] = BdcHelpers.ExecuteGenericInvoker(lobSystemInstance, entityName, "ExportToExcel"); } void lbExcel_Load(object sender, EventArgs e) { System.Web.HttpContext.Current.Session["ExcelInstance"] = Helpers.ExecuteGenericInvoker(lobSystemInstance, entityName, "ExportToExcel"); } public static Object ExecuteGenericInvoker(string lobSystemInstance, string entityName, string methodInstance) { NamedLobSystemInstanceDictionary instances = ApplicationRegistry.GetLobSystemInstances(); LobSystemInstance instance = instances[lobSystemInstance]; Entity entity = instance.GetEntities()[entityName]; MethodInstance methInst = entity.GetMethodInstances()[methodInstance]; return entity.Execute(methInst, instance); }

最后,需要注册处理程序:

<httpHandlers> <remove verb="GET,HEAD,POST" path="*" /> <add verb="*" path="Export.ashx" type="BDCWebParts.ExportHandler, BDCWebParts" /> </httpHandlers>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485