tkela二次开发之lay文件解析

 在tekla的一些配置文件中绝大都是本文格式存储的,如.dim;.ad;.vi;.tpl等文件;但是其中.lay文件却是一个例外;这个文件用txt开打时里面是会有乱码的。

  我们知道这个文件是在软件的界面中配置的,其中版面布置中的每一个行数据对应一份lay文件。

 

  接下来我们就对这个文件中的内容进行解析:下图是用程序读取文件的二进制数据,截取了其中一部分;其中每一个格子表示一个Byte位,从0到255;

  这个文件中的数据分为三部分:

一、第一部分是数据头;长度不一定;因这一部分数据对二开没什么作用就不做解析了。

二、第二部分数据是表格布置列表(图一中间)其中一组数据为177位;数据位置含义如下图所示:

  1、前5位46100表示一组数据的起始位;

  2、5-8这4位表示此表格布置的Id;数据为INT32类型;

  3、13-75这63位表示表格布置的名称;编码格式位ANSI;

  4、77-88这个12位表示 e3_sheet_tab 这个固定的这12个单词;

  5、145-152这8位表示边缘宽度这个属性;数据为double格式;

  6、153-160这8位表示边缘高度这个属性;数据为double格式;

  7、161-168这8位表示间隔水平的这个属性;数据为double格式;

  8、169-176这8位表示间隔垂直的这个属性;数据为double格式;

三、第三部分数据表格是已选择的表格列表(图一右图)其中一组数据为573位;数据位置含义如下图所示:

  1、前5位47100表示一组数据的起始位;

  2、5-8这4位表示此已选表格的Id;数据为INT32类型;

  3、13-267这255位表示已选择的表格的名称;编码格式位ANSI;

  4、269-272这4位表示父表格id(数据二中的5-8位);数据为INT32类型;

  5、273-276这4位表示常考表格的id;数据为INT32类型;

  6、281-288这8位表示比例这个属性;数据为double格式;

  7、289-296这8位表示角部间的矢量x这个属性;数据为double格式;

  8、297-304这8位表示角部间的矢量y这个属性;数据为double格式;

  9、305-308这4位表示参考的排布这个属性;数据为INT32类型;其中1234分表示右上、右下、左上、坐下;

  10、309-312这4位表示参考的排布这个属性;数据为INT32类型;其中1234分表示右上、右下、左上、坐下;

  11、569这1位表示透明的这个属性; 1为透明 0为不透明;

原创作者: ourhouzi 转载于: https://www.cnblogs.com/ourhouzi/p/18906626
<think>我们正在讨论U9系统的二次开发,特别是后端开发和UI页面交互实现。根据用户的问题,我们需要结合引用内容中提到的技术点(如layUI、QT界面设计、Vue.js等)来构建一个可行的方案。 首先,U9系统是用友公司推出的一款企业管理软件,其二次开发通常需要在其提供的开发框架下进行。虽然引用中没有直接提到U9,但我们可以借鉴其中提到的前端技术(如layUI、Vue.js)和后端开发思路。 根据引用[1]中提到的layUI,这是一个经典模块化前端框架,我们可以使用它来构建U9二次开发的UI界面。引用[3]中提到了Vue.js,这是一个现代前端框架,也可以用于构建交互式UI。同时,引用[2]中提到的QT界面设计思路(尽管是桌面应用)也可以给我们一些启示,特别是在数据绑定和界面布局方面。 对于后端开发,U9系统通常使用.NET平台(C#)作为后端语言,二次开发需要在其提供的API和业务对象模型基础上进行。 因此,我们可以将二次开发分为两个部分:后端开发和前端UI交互。 1. 后端开发:通常需要创建新的业务单据、流程或者扩展已有的业务逻辑。U9提供了自己的业务对象模型和持久化框架,我们可以通过继承或组合的方式来扩展。 2. UI页面交互:U9的前端界面可以使用其自带的UI框架(可能是基于ASP.NET Web Forms或MVC),但二次开发中也可以引入现代前端框架(如Vue.js)来构建更丰富的交互体验。同时,引用[1]中提到的layUI也是一个简洁易用的选择。 下面我们分别详细说明: ### 后端开发实现步骤 1. **了解U9的业务对象模型**:U9系统是基于SOA架构的,其业务逻辑封装在业务对象(Business Object, BO)中。二次开发需要创建新的BO或扩展现有BO。 2. **创建新的业务对象**:如果需要新增功能,比如一个新的单据,那么需要创建一个新的BO,并定义其字段、方法和校验规则。 3. **注册服务**:将新的BO注册到U9的服务容器中,以便前端调用。 4. **实现业务逻辑**:在BO中实现具体的业务逻辑,如数据校验、计算、保存等。 5. **数据库扩展**:如果需要新增表或字段,需要在数据库层面进行扩展,并在BO中映射。 示例代码(C#): ```csharp // 示例:创建一个新的业务对象 [Serializable] public class MyCustomBO : BaseBO { [FieldDef("自定义字段1", FieldType.String, Length = 50)] public string CustomField1 { get; set; } [FieldDef("自定义字段2", FieldType.Decimal)] public decimal CustomField2 { get; set; } // 重写保存方法 public override void Save() { // 自定义保存逻辑 base.Save(); } } ``` ### UI页面交互实现 U9的前端页面可以使用ASP.NET Web Forms或MVC,但也可以使用其他前端框架。这里我们可以参考引用[1]中的layUI和引用[3]中的Vue.js。 1. **使用layUI构建传统页面**:layUI是一个模块化的前端框架,使用简单,适合快速开发。我们可以按照引用[1]中的示例引入layUI,并构建表单和表格。 示例(HTML): ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>U9二次开发页面</title> <link rel="stylesheet" href="layui.css"> </head> <body> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">自定义字段1</label> <div class="layui-input-block"> <input type="text" name="customField1" required lay-verify="required" placeholder="请输入" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">提交</button> </div> </div> </form> <script src="layui.js"></script> <script> layui.use('form', function(){ var form = layui.form; // 监听提交 form.on('submit(formDemo)', function(data){ // 这里可以通过Ajax将数据提交到U9后端 // 假设我们有一个处理这个表单的后端服务地址 $.ajax({ url: '/MyCustomBO/Save', type: 'POST', data: data.field, success: function(res) { layer.msg('保存成功'); } }); return false; // 阻止表单跳转 }); }); </script> </body> </html> ``` 2. **使用Vue.js构建更现代化的交互**:Vue.js提供了数据绑定和组件化,可以构建更复杂的单页面应用(SPA)。我们可以将Vue.js集成到U9的页面中。 示例(Vue.js): ```html <div id="app"> <form @submit.prevent="submitForm"> <label>自定义字段1</label> <input type="text" v-model="formData.customField1" required> <button type="submit">提交</button> </form> </div> <script src="vue.js"></script> <script> new Vue({ el: '#app', data: { formData: { customField1: '' } }, methods: { submitForm() { // 使用axios或其他Ajax库提交数据 axios.post('/MyCustomBO/Save', this.formData) .then(response => { alert('保存成功'); }) .catch(error => { console.error('保存失败', error); }); } } }); </script> ``` 3. **与U9后端交互**:无论使用layUI还是Vue.js,前端都需要通过Ajax调用U9后端提供的服务。U9的服务通常以Web Service(ASMX)或WCF服务的形式提供,也可以使用ASP.NET Web API。 注意:在U9环境中,通常需要处理U9的认证和授权,因此Ajax请求中可能需要携带U9的上下文信息(如Token)。 ### 总结 U9二次开发的后端开发主要是在其业务对象模型基础上进行扩展,而前端可以使用layUI或Vue.js等框架构建交互式页面,通过Ajax与后端交互。在实际开发中,需要遵循U9的开发规范,并利用U9提供的API。 §§相关问题§§ 1. U9二次开发中如何扩展现有的业务对象? 2. 在U9二次开发中,前端如何集成Vue.js并调用U9后端服务? 3. U9二次开发中,如何处理用户认证和权限控制?</think>### U9系统二次开发:后端开发与UI页面交互实现 U9系统是用友推出的企业级ERP平台,其二次开发主要涉及后端业务逻辑扩展和前端UI交互优化。以下是具体实现方案: #### 一、后端开发实现 1. **业务对象扩展** 通过继承或组合方式扩展标准业务对象: ```csharp // 示例:扩展销售订单对象 public class CustomSaleOrder : SaleOrder { [U9Field("CustomField", "自定义字段")] public string CustomField { get; set; } public override void BeforeSave() { base.BeforeSave(); // 自定义校验逻辑 if (this.CustomField == null) throw new Exception("自定义字段必填"); } } ``` 2. **服务端逻辑扩展** 使用拦截器模式增强标准业务逻辑: ```csharp // 订单保存拦截器 public class OrderSaveInterceptor : IInterceptor { public void Execute(InterceptorContext context) { var order = context.BusinessObject as SaleOrder; // 添加自定义业务逻辑 if (order.TotalAmount > 100000) order.NeedApprove = true; } } ``` 3. **API接口开发** 创建RESTful API供前端调用: ```csharp [U9ApiController] public class CustomAPIController { [HttpPost("/api/custom/approve")] public ActionResult ApproveOrder([FromBody] ApproveRequest request) { // 审批逻辑实现 var result = OrderService.Approve(request.OrderID); return new JsonResult(result); } } ``` #### 二、UI页面交互实现 1. **前端框架集成** 参考引用[1]的layUI集成方案: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>U9扩展页面</title> <link rel="stylesheet" href="/u9/layui/css/layui.css"> </head> <body> <div id="customPanel"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">审批意见</label> <div class="layui-input-block"> <textarea id="approveRemark"></textarea> </div> </div> <button class="layui-btn" @click="submitApprove">提交</button> </form> </div> <script src="/u9/layui/layui.js"></script> <script> layui.use(['layer', 'form'], function(){ var layer = layui.layer; var form = layui.form; // 提交审批 window.submitApprove = function() { const remark = document.getElementById('approveRemark').value; // 调用后端API fetch('/api/custom/approve', { method: 'POST', body: JSON.stringify({ remark }) }).then(res => { layer.msg('审批提交成功'); }); }; }); </script> </body> </html> ``` 2. **数据绑定与交互** 参考引用[3]的Vue.js实现模式: ```html <div id="app"> <table class="layui-table"> <tr v-for="item in orderList"> <td>{{ item.orderNo }}</td> <td>{{ formatCurrency(item.amount) }}</td> <td> <button @click="approve(item)" :class="['layui-btn', item.status?'layui-btn-disabled':'']"> {{ item.status ? '已审批' : '审批' }} </button> </td> </tr> </table> </div> <script> new Vue({ el: '#app', data: { orderList: [] // 从后端API加载 }, mounted() { this.loadOrders(); }, methods: { async loadOrders() { const res = await fetch('/api/orders/pending'); this.orderList = await res.json(); }, approve(order) { // 调用审批API } } }); </script> ``` 3. **界面扩展机制** - 使用U9的**表单扩展点**注入自定义UI组件 - 通过**元数据覆盖**修改标准页面布局 - 利用**客户端脚本引擎**添加交互逻辑 #### 三、开发注意事项 1. **版本兼容性** 需严格匹配U9系统版本,不同版本的SDK和API存在差异 2. **权限控制** 新增功能需配置U9RBAC权限模型: ```sql INSERT INTO U9_RBAC (FuncCode, RoleID, PermType) VALUES ('CUSTOM_APPROVE', 'ROLE_ADMIN', 'RW'); ``` 3. **部署方式** - 后端:编译为DLL放入`/U9/Bin/Custom`目录 - 前端:静态资源放入`/U9/Portal/custom`目录 - 配置注册:在`u9config.xml`中添加扩展模块声明 4. **调试方案** - 使用U9提供的**Remote Debugger**工具 - 前端调试启用Chrome开发者工具 - 日志记录使用`U9Log.Write("模块名", "日志内容")` > 最佳实践:参考引用[4]的表单设计工具,复杂界面建议使用U9提供的**可视化设计器**进行布局,可降低兼容性问题风险[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值