如何将LineDetails表单Areas标签页的Read Areas按钮功能迁移至标签页打开事件
实现标签页打开时自动执行原按钮逻辑的步骤(Dynamics 365 F&O)
没问题,咱们把按钮的逻辑移到标签页的激活事件里就行了,这样用户切换到Areas标签页时自动加载数据,完全替代原按钮的作用。具体步骤如下:
1. 先把按钮的核心逻辑抽成独立方法(代码复用+易维护)
首先在LineDetails表单的主类里新增一个公共方法,把原按钮clicked里的核心逻辑(除了super())移进去,这样不管是按钮还是标签页都能调用,也方便后续维护:
public void loadAreaDetails() { ContractArea contractArea; AmountMST sumContractArea; // 调用数据源的方法加载基础区域数据 ContractLine_ds.readCommonAreas(ContractLine); // 更新表单上的各个区域值控件 h1_h2.realValue(ContractLine_ds.h1_h2(ContractLine)); efa.realValue(ContractLine_ds.efa(ContractLine)); bfa.realValue(ContractLine_ds.bfa(ContractLine)); mfa.realValue(ContractLine_ds.mfa(ContractLine)); sumArea.realValue(h1_h2.realValue() + efa.realValue() + bfa.realValue() + mfa.realValue()); // 重置合计和各公共区域值,避免多次切换标签页时重复累加 sumContractArea = 0; contractAreaBFA.realValue(0); contractAreaEFA.realValue(0); contractAreaH1_H2.realValue(0); contractAreaMFA.realValue(0); // 读取并汇总公共区域的租金值 while select AreaSelector, sum(RentalValue) from contractArea group by AreaSelector where contractArea.ContractId == Contract.ContractId && contractArea.RentalObjectId == ContractLine.RentalObjectId { sumContractArea += contractArea.RentalValue; switch (contractArea.AreaSelector) { case AreaSelector::CommonAreaBuilding : contractAreaBFA.realValue(contractArea.RentalValue); break; case AreaSelector::CommonAreaSection : contractAreaEFA.realValue(contractArea.RentalValue); break; case AreaSelector::PrimaryArea, AreaSelector::SecondaryArea : contractAreaH1_H2.realValue(contractArea.RentalValue); break; case AreaSelector::CommonAreaFixed : contractAreaMFA.realValue(contractArea.RentalValue); break; } } contractAreaSum.realValue(sumContractArea); }
2. 改造原按钮,验证新方法逻辑一致
先修改原按钮的clicked方法,调用刚才的新方法,这样你可以先测试逻辑是否和原来完全一样,确保没有问题:
[Control("Button")] class ReadCommonAreas { void clicked() { super(); element.loadAreaDetails(); // 调用新的公共方法 } }
测试一下点击按钮,数据加载是否正常,和之前的表现一致就可以继续下一步。
3. 给Areas标签页添加激活事件
在表单设计器里找到Areas标签页控件,右键查看代码,重写它的pageActivated方法——这个方法会在标签页被激活(用户切换到该标签页)时自动触发:
[Control("TabPage")] class AreasTabPage { void pageActivated() { super(); element.loadAreaDetails(); // 调用加载区域数据的方法 } }
现在切换到Areas标签页,你会看到数据自动加载了,效果和点击原按钮完全一样。
4. 收尾:删除冗余按钮
确认功能正常后,直接在表单设计器里删除Read Areas按钮,同时删掉对应的按钮类代码就大功告成了。
小提示
- 注意如果
Areas标签页是表单默认打开的标签页,pageActivated也会在表单初始化时触发,正好符合需求。 - 确保表单里的控件和数据源在主类中是可访问的,如果遇到访问权限问题,调整控件的
AllowEdit或者方法的访问级别即可。
内容的提问来源于stack exchange,提问作者DarthCSharper
相关产品推荐
相关产品推荐

