Version: 3.8.2
报表扩展开发
EOC根据扩展包中的CustomReport.xml文件来决定报表所使用的前后台。报表扩展按是否使用EOC报表样式分为两种方法:EOC报表样式、自定义样式
特点:
EOC报表样式: 不用写前端代码,扩展的报表与EOC本身风格一致自定义样式: 可以根据需求自主决定报表样式
方法
新建项目
CustomReport(名称可修改),选择类库(.NET Framework),框架选择.NET Framework 4.6.1
右击项目,
添加引用
点击
浏览,添加C:\Program Files (x86)\FTIS\FTIS rockwelltpm企业移动现场作业管理软件\rockwelltpm\FTIS.rockwelltpm.ExtReport.dll

注意
注意,为了演示效果,此示例还引用了FTIS.rockwelltpm.Business.dll、FTIS.rockwelltpm.Entities.dll
编辑
Class1.cs(名称可修改),添加并编辑CustomReport.xml
* EOC报表样式 * 继承`ICustomReport`,实现`GetCustomReportData`接口,`Class1.cs`内容如下 ```c# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FTIS.rockwelltpm.ExtReport; using FTIS.rockwelltpm.Business; using FTIS.rockwelltpm.Entities;namespace CustomReport{public class Class1 : ICustomReport{public List<Dictionary<string, object>> GetCustomReportData(QueryCondition _queryCondition){List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();BUser bUser = new BUser(_queryCondition.UserSessionID);IList<BaseEntity> users = bUser.GetAll(_queryCondition.ProjectID);foreach (User user in users){Dictionary<string, object> item = new Dictionary<string, object>();item.Add("ID", user.ID);item.Add("LoginID", user.LoginID);item.Add("Name", user.Name);result.Add(item);}return result;}}}```* `CustomReport.xml`内容如下```xml<?xml version="1.0" encoding="utf-16"?><CustomReportConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><IsHistory>false</IsHistory><ColumnList><CustomReportColumn><Field>ID</Field><Title>用户ID</Title><Width>0</Width><Type>Unkown</Type><FormatType></FormatType><Visiable>false</Visiable></CustomReportColumn><CustomReportColumn><Field>LoginID</Field><Title>登录名</Title><Width>150</Width><Type>String</Type><FormatType></FormatType><Visiable>true</Visiable></CustomReportColumn><CustomReportColumn><Field>Name</Field><Title>姓名</Title><Width>150</Width><Type>String</Type><FormatType></FormatType><Visiable>true</Visiable></CustomReportColumn></ColumnList><FilterList></FilterList><Toolbar>["Save","SaveAs","CollapseExpandGroup","Query","Export","Refresh"]</Toolbar><OperPanel></OperPanel><DefaultFilterCondition></DefaultFilterCondition><DataAssemblyName>CustomReport.dll</DataAssemblyName><DataClassName>CustomReport.Class1</DataClassName><DataSQL></DataSQL></CustomReportConfig>```自定义样式
继承
ExternalCustomReport,覆写PostToServer方法,Class1.cs内容如下using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using FTIS.rockwelltpm.ExtReport;using FTIS.rockwelltpm.Business;using FTIS.rockwelltpm.Entities;namespace CustomReport{public class Class1 : ExternalCustomReport{public override object PostToServer(string _operateType, string _parameter){if (_operateType == "GetAll") {return GetAllUsers();}else if (_operateType == "Query") {return GetAllUsers();}else{throw new Exception("非预期查询");}}/// <summary>/// 获取所有用户/// </summary>/// <returns></returns>public object GetAllUsers() {BUser bUser = new BUser(this.UserSessionID);IList<BaseEntity> users = bUser.GetAll(this.ProjectID);return users;}}}CustomReport.xml内容如下<?xml version="1.0" encoding="utf-16"?><CustomReportConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><IsHistory>false</IsHistory><ColumnList></ColumnList><FilterList></FilterList><DefaultFilterCondition></DefaultFilterCondition><DataAssemblyName>CustomReport.dll</DataAssemblyName><DataClassName>CustomReport.Class1</DataClassName><DataSQL></DataSQL><HtmlFileName>index.html</HtmlFileName></CustomReportConfig>自定义样式还需要编写前台页面,如index.html<!DOCTYPE html><html><head><meta charset="utf-8" /><title>用户信息表</title><script src="jquery-1.11.1.min.js" type="text/javascript"></script></head><body><h2>用户信息表</h2><div id="form"></div><script>$(document).ready(function () {var report = new Report();// 固定如此window.customReportObj = report;report.PostToServer("GetAll", report.parentObj.GetQueryCondition(), function (_result) {if (_result.IsSuccess) {Draw(_result.Data);}else {console.error(_result.Msg);}});});// 绘制表格function Draw(_data) {var htmls = [];htmls.push("<table>");htmls.push(" <thead>");htmls.push(" <tr>");htmls.push(" <th>姓名</th>");htmls.push(" <th>登录名</th>");htmls.push(" <th>邮箱</th>");htmls.push(" </tr>");htmls.push(" </thead>");htmls.push("<tbody>");for (var i = 0; i < _data.length; i++) {var user = _data[i];htmls.push("<tr>");htmls.push(" <td>" + user.Name + "</td>");htmls.push(" <td>" + user.LoginID + "</td>");htmls.push(" <td>" + user.EMail + "</td>");htmls.push("</tr>");}htmls.push("</tbody>");htmls.push("</table>");$("#form").html("");$("#form").append(htmls.join(""));}// 构造函数function Report() {// 固定如此this.parentObj = window.parent.customReportIndex;}// 后台查询Report.prototype.PostToServer = function (_operateType, _parameter, _callback) {this.parentObj.PostToServer(_operateType, _parameter, _callback);}// 刷新时调用Report.prototype.Query = function () {this.PostToServer("Query", this.parentObj.GetQueryCondition(), function (_result) {if (_result.IsSuccess) {Draw(_result.Data);}else {console.error(_result.Msg);}});}</script></body></html>
生成解决方案

在输出目录把
CustomReport.dll和CustomReport.xml,打包成zip格式的压缩文件Debug.zip。
注意
如果是
自定义样式,还需要将index.html及其引用的js、css、img等资源文件打包进去使用系统管理员登录EOC,在系统扩展管理中,填写
系统扩展名,选择扩展类型为自定义报表,选择扩展包文件为刚刚打包完的Debug.zip,点击添加
效果图
EOC报表样式

自定义样式
