表单插件.二开案例.关联复制行
【场景】关联复制行使用及注意事项
【说明】
0)关联复制行:复制单据的数据的同时,复制单据的关联信息
1)源单编号、源单类型字段:当且仅当勾选了允许控制且是关联复制行才会复制
![image.webp](/download/010098c7efae26924d7791e1e06c5e715005.webp)
![image.webp](/download/01003f4c9053e5be418fa07fa81473152d6d.webp)
2)历史版本比对
| 版本 | 配置逻辑(允许复制) | 功能效果 |
| ------ | ----------- |----|
| 20230112 前 | 是 | 不论是否关联复制行,都会复制源单编号;导致即使上下查没有关联,也有源单编号字段|
| | 否 | 不论怎么样都不会复制 |
| 20230112 及之后| 是| 当关联复制行时,才会复制源单编号,否则不复制 |
| | 否| 不论怎么样都不会复制 |
【二开逻辑】
当在历史版本需要复制源单编号字段时,建议按照以下调整二开代码,手工复制
(不建议直接开启允许复制,否则会导致普通复制行也会有源单编号字段)
```csharp
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using System.Collections.Generic;
using System.Linq;
namespace DynamicFormPlugIn.Demo
{
[Kingdee.BOS.Util.HotUpdate]
public class SamplePlugIn_CopyEntryRow : AbstractDynamicFormPlugIn
{
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
if (string.Equals(e.BarItemKey, "tb_Sample_CopyEntryRow"))
{
EntryEntity entity = this.View.BillBusinessInfo.GetEntryEntity("FPOOrderEntry");
int focusRowIdx = this.View.Model.GetEntryCurrentRowIndex(entity.Key);
int totalRowCnt = this.View.Model.GetEntryRowCount(entity.Key);
CopyRowWithLink(entity, focusRowIdx, totalRowCnt);
}
}
/// <summary>
/// 关联复制行功能,支持赋值源单编号和源单类型
/// </summary>
/// <param name="entity"></param>
/// <param name="cpyIdx"></param>
/// <param name="insertIdx"></param>
private void CopyRowWithLink(EntryEntity entity, int cpyIdx, int insertIdx)
{
/*
发放补丁:K3Cloud V8.1(1号补丁)(PT-146932)
发布时间:2022年12月22日
名称:功能改进:23.1:优化源单类型、源单编号的复制处理逻辑,当复制行操作勾选关联复制时,源单类型、源单编号应按关联关系写入来源。
修改内容:源单类型、源单编号勾选了允许控制并且是关联复制才允许复制
*/
var srcRowObj = this.View.Model.GetEntityDataObject(entity, cpyIdx);
this.View.Model.CopyEntryRow(entity.Key, cpyIdx, insertIdx, true);
List<Field> specFields = entity.Fields.
Where(x => (x is SourceBillNoField || x is SourceBillTypeField )).ToList();
/*
* 如果需要业务流程字段,则使用下面这个代码
List<Field> specFields = entity.Fields.
Where(x => (x is SourceBillNoField || x is SourceBillTypeField || x is BusinessFlowField) &&
x.IsCopyControl()).ToList();
*/
if (specFields.Count >0)
{
var tgtRowObj = this.View.Model.GetEntityDataObject(entity, insertIdx);
foreach(var field in specFields)
{
var copyValue = field.DynamicProperty.GetValue(srcRowObj);
Model.SetValue(field, tgtRowObj, copyValue);
}
}
}
}
}
```
您好!我写的this.View.BillBusinessInfo.GetEntryEntity("FEntity")返回的是null,单据是销售订单,这个是什么问题啊
采购入库单的物料勾选了来料检验时,使用二开代码关联复制行会被清除物料
表单插件.二开案例.关联复制行
【场景】关联复制行使用及注意事项【说明】0)关联复制行:复制单据的数据的同时,复制单据的关联信息1)源单编号、源单类型字段:当且仅当勾...
点击下载文档
上一篇:收料通知单按照供应商设置免检下一篇:合并报表V1.1
本文2024-09-16 18:18:26发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21292.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章