
## 二开背景
移动销售5.0中涉及到价格、金额等字段显示会与PC端销售订单的价格、金额字段保持一致,一样的精度,该精度遵循基础资料币别列表中的单价精度、金额精度。但是由于在移动端展示的需要,客户希望不遵循PC端销售订单该精度的逻辑,而是单独设置一个精度进行展示,如何才能做到呢?
如图,可见当前人民币的单价精度为6,但是客户希望在移动销售的商品列表中展示两位小数即可,即精度为2。


## 二开分析
标准产品为确保一致性,商品列表中的价格遵循和销售订单的 单价/含税单价 一样的取数逻辑和数据格式化,因此无法进行配置。如需要单独显示精度,就需要进行二开,在列表初始化加载、下拉刷新、搜索或筛选后、子页面回退后等时机单独给价格进行重新赋值。
## 二开步骤
1. 编写插件,继承Kingdee.K3.SCM.Mobile.Business.PlugIn.SaleMobileV5.MobProduct
2. 重写FillData、GetEntryData、AfterMobileClientRequest等方法,在这些时机除了执行父类逻辑外执行FillOtherData方法
3. FillOtherData方法中获取价格后转换精度,重新对价格字段赋值
4. 扩展移动销售V5_商品(SAL_MobileProductV5),将该插件注册到表单中并启用,取消启用默认插件

代码参考如下
```
using Kingdee.BOS.Mobile.PlugIn;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS.Util;
namespace ClassLibrary1.Sal
{
public class ProductListPricePrecisionCustom : Kingdee.K3.SCM.Mobile.Business.PlugIn.SaleMobileV5.MobProduct
{
protected override void FillData()
{
base.FillData();
FillOtherData();
}
public override void GetEntryData(Kingdee.BOS.Mobile.PlugIn.Args.GetEntryDataEventArgs e)
{
base.GetEntryData(e);
FillOtherData();
}
string[] NavBarKeys = new string[] { "Home", "Always", "Collection" };
public override void AfterMobileClientRequest(MobileClientRequestEventArgs e)
{
base.AfterMobileClientRequest(e);
// 切换了底部导航到 全部、常用、收藏
if (e.Key.EqualsIgnoreCase("NavBarClickEventKey") && NavBarKeys.Contains(e.Value))
{
FillOtherData();
}
// 筛选标签点击关闭后
if (e.Key.EqualsIgnoreCase("FilterLabelClickEventKey"))
{
FillOtherData();
}
}
public override void OnMobilePageActive(Kingdee.BOS.Mobile.PlugIn.Args.MobilePageActiveEventArgs e)
{
base.OnMobilePageActive(e);
if (e.PageAct