如何覆盖快递100电子面单参数

星空供应链领域下的销售模块集成的快递100和快递管家功能不是万能的,满足不了所有客户的需求。例如,现阶段就不满足根据登录用户配置设备码。目前最新的功能只支持按物流公司和组织机构来隔离设备码,如下图1-1配置所示:

图1-1
那如何根据登录用户配置设备码呢?这种情况可以通过反编译工具(比如dnSpy,.Net Reflector)反编译程序集'Kingdee.K3.SCM.Sal.Business.PlugIn.dll'并修改通版插件‘Kingdee.K3.SCM.Sal.Business.PlugIn.GetKuaidiBillEdit’中的方法‘CommonCheckParameter’,在方法中自行处理参数对象中的设备码赋值逻辑。但是这种处理方式比较复杂,容易出错且每次更新补丁时都会被通版覆盖。下面介绍另一种比较方便的方法:
在即将发布的版本中(注:2021.5.13号发布的版本中已经包含此功能),会修改通版中的‘获取电子面单’配置的动态表单插件‘Kingdee.K3.SCM.Sal.Business.PlugIn.GetKuaidiBillEdit’,在其中公开属性‘Kuaidi100Parameter’,此属性在通版中的逻辑是打开'获取电子面单'界面就会赋值(在AfterBindData中读取参数配置),客户可二开继承此插件,假设二开插件类名为GetKuaidiBillEditExtend,继承通版插件类后重写AfterBindData,在重写的方法中先调用通版的AfterBindData方法再自行定义逻辑,然后在BOSIDE中的‘获取电子面单’动态表单禁用通版的插件,启用二开的插件即可, 如下图1-2所示:

图1-2
上图右侧中的项目引用也需要注意下,图中的代码文本如下所示:
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e); //基类AfterBindData会根据快递100参数配置自动填充属性 Kuaidi100Parameter
//在基类填充数据之后重新设置码
if (this.Kuaidi100Parameter != null && this.Kuaidi100Parameter.KuaidiComSettings != null)
{
string deviceCode = "abcd"; //假设设备码为abcd,如果要根据当前登录用户获取设备码,可使用以下属性获取登录信息并自行获取设备码信息,
//this.Context.UserId; //当前登录用户
//this.Context.UserName
foreach (var item in this.Kuaidi100Parameter.KuaidiComSettings)
{
item.Devi如何覆盖快递100电子面单参数
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



