You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:22:32