业务流程.常见问题.批号字段的携带和反写

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

业务流程.常见问题.批号字段的携带和反写

【场景】批号字段的携带和反写 【步骤0】界面录入的批号字段逻辑 [批号字段 同 基础资料文本](https://wenku.my7c.com/article/127734666328468480?productLineId=1&isKnowledge=2) | 录入模式 | 存储逻辑 | | -------- | -------- | | 仅主档 | 存储内码和编码
Field:基础资料内码
Field _Text:编码 | | 主档和文本 | 存储编码/文本值
Field:0(即使录入基础资料也不存储内码)
Field _Text:编码/文本值 | | 仅文本 | 存储文本值
Field:0
Field _Text:文本值 | ![image.webp](/download/0100491a0e5d7e804541b9295a2e639f10d7.webp) ![image.webp](/download/01008b422d5559094bfdbcbb6cc1ad1170b2.webp) 【步骤1】配置操作调用服务[保存并更新批号主档] [批号主档服务](https://wenku.my7c.com/article/444554826739954944?channel_level=%E9%87%91%E8%9D%B6%E4%BA%91%E7%A4%BE%E5%8C%BA%7C%E6%90%9C%E7%B4%A2%7C%E5%AE%98%E6%96%B9%E7%9F%A5%E8%AF%86&productLineId=1&isKnowledge=2) ![image.webp](/download/0100de591c4a9df44aa6b065881c62c2550f.webp) ![image.webp](/download/0100a50206f543d74cb19a0184383989621a.webp) 最终更新了 主档和文本型 的 内码值 【步骤2】批号字段的字段映射携带 ![image.webp](/download/0100992ac37401de4e49abb01f86eeb7da60.webp) | 上游字段类型 | 下游字段类型 | 映射逻辑 | | -------- | -------- | ----------| | 仅主档 | 仅主档 | 内码和文本| | | 主档和文本| 内码和文本| | | 仅文本| 内码和文本 | | 主档和文本(有内码) | 仅主档 | 内码和文本 | | | 主档和文本| 内码和文本| | | 仅文本| 内码和文本 | | 主档和文本(无内码) | 仅主档 | 空| | | 主档和文本|空 | | | 仅文本| 空| | 仅文本 | 仅主档 |空| | | 主档和文本|空 | | | 仅文本| 空| 字段映射逻辑:仅取决于上游是否有内码,有的话上游有什么携带什么(有文本就携带文本,有内码就携带内码);不关注字段类型 业务场景:如果启用了[保存并更新批号主档],那么就会携带到下游;如果是普通的主档和文本,就无法携带 【步骤3】批号字段的反写 ![image.webp](/download/0100f77a144b85b64de8a3d6b5eb61df7fc9.webp) | 下游字段类型 | 上游字段类型 | 映射逻辑 | | -------- | -------- | ----------| | 仅主档 | 仅主档 | 内码和文本| | | 主档和文本| 不支持| | | 仅文本| 不支持 | | 仅文本 | 仅主档 |不支持| | | 主档和文本| 文本| | | 仅文本| 文本| | 主档和文本(无内码) | 仅主档 | 不支持| | | 主档和文本| 文本 | | | 仅文本| 文本| | 主档和文本(有内码) | 仅主档 | 不支持 | | | 主档和文本| 文本| | | 仅文本| 文本 | 反写逻辑: (0)仅主档反写,必须上下游匹配才能反写,反写内码和文本;如果上下游其中一个为仅主档,另外一个不满足,则会反写报错 (1)主档与文本,反写时仅会反写文本; 反写实现的逻辑:根据表达式计算得到反写值,与表达式逻辑一致 | 表达式逻辑 | 批号字段类型 | 计算逻辑 | | -------- | -------- | ----------| | 取值 | 仅主档 | 基础资料数据包结构| | | 仅文本 | 文本| | | 主档与文本(无内码) | 文本| | | 主档与文本(有内码) | 文本| ![image.webp](/download/01004b424b29f3fa4b57a687fd4b4a127780.webp) ![image.webp](/download/010070e5dd7c8192461fb5344daa10166075.webp) 如果需要针对数据库进行批号字段反写(不关注批号字段的类型),则按照以下逻辑开发处理: ![image.webp](/download/010081bb5eac0b5c4a198dc19faba04ba3d1.webp) ![image.webp](/download/0100cd62e0c7492f49129fed10f876dd7021.webp) ![image.webp](/download/01003365dd4b5ac44120826e04197a275ad3.webp) ```csharp using Kingdee.BOS.BusinessEntity.BusinessFlow; using Kingdee.BOS.Core.BusinessFlow.PlugIn; using Kingdee.BOS.Core.BusinessFlow.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Orm.DataEntity; using System.Collections.Generic; namespace DynamicFormPlugIn.WriteBack { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("反写批号")] public class WriteBackPlugIn_LotField : AbstractBusinessFlowServicePlugIn { /// <summary> /// 是否干预反写 /// </summary> private bool needHandle = false; /// <summary> /// 需要干预的反写规则 /// </summary> private static List<string> HandleRuleIds = new List<string>() { "6fc87432-bef5-4744-bab2-b83ba93357f5" }; /// <summary> /// 下游单 批号字段 /// </summary> private LotField targetLotField; /// <summary> /// 上游单 批号字段 /// </summary> private LotField srcLotField; /// <summary> /// 反写前事件,判断当前反写规则是否需要干预 /// </summary> /// <param name="e"></param> public override void BeforeWriteBack(BeforeWriteBackEventArgs e) { needHandle = false; if (!HandleRuleIds.Contains(e.Rule.Id)) return; targetLotField = this.BusinessInfo.GetField(e.Rule.Formula) as LotField; srcLotField = e.SourceBusinessInfo.GetField(e.Rule.SourceCommitFieldKey) as LotField; if (targetLotField != null && srcLotField != null) { needHandle = true; } } public override void AfterCommitAmount(AfterCommitAmountEventArgs e) { if (!needHandle) return; if (string.Equals(this.OperationNumber, "Save")) { var wbRule = e.WriteBackRuleRow as WRule<Id>;//反写条目 var tEntityObj = wbRule.Row.DataEntity as DynamicObject;//当前单据数据包 if (tEntityObj == null) return; /* * 保存逻辑 * 批号字段完全反写,不关注类型逻辑,有什么值反写什么值 */ //反写内码 var idVal = targetLotField.RefIDDynamicProperty.GetValue(tEntityObj); srcLotField.RefIDDynamicProperty.SetValue(e.SourceActiveRow, idVal); //反写文本 var textVal = targetLotField.TextDynamicProperty.GetValue(tEntityObj); srcLotField.TextDynamicProperty.SetValue(e.SourceActiveRow, textVal); } } public override void BeforeSaveWriteBackData(BeforeSaveWriteBackDataEventArgs e) { if (!needHandle) return; if (string.Equals(this.OperationNumber, "Delete")) { var srcBillDatas = e.SourceDataEntitySet.FindByEntityKey("FBillHead"); var srcEntity = srcLotField.Entity; foreach (var srcBillData in srcBillDatas) { var srcBillObj = srcBillData.DataEntity; if (srcBillObj == null) continue; /* * 保存逻辑 * 批号字段完全回退,不关注类型逻辑,全部回退清空 */ if (srcEntity is HeadEntity) { //单据头的逻辑 srcLotField.RefIDDynamicProperty.SetValue(srcBillObj, 0); srcLotField.TextDynamicProperty.SetValue(srcBillObj, string.Empty); continue; } //子单据头、单据体的逻辑,子单据体自行实现 if (!srcBillObj.DynamicObjectType.Properties.Contains(srcEntity.DynamicProperty)) continue; var entityObjColl = srcBillObj[srcEntity.DynamicProperty] as DynamicObjectCollection; if (entityObjColl == null || entityObjColl.Count <= 0) continue; foreach (var entityObj in entityObjColl) { srcLotField.RefIDDynamicProperty.SetValue(entityObj, 0); srcLotField.TextDynamicProperty.SetValue(entityObj, string.Empty); } } } } } } ```

通过反写规则反写批号还要注意非库存批号主档和库存批号主档的区别,库存单据必须使用库存批号主档的内码,否则会造成库存数据错误。

业务流程.常见问题.批号字段的携带和反写

【场景】批号字段的携带和反写【步骤0】界面录入的批号字段逻辑[批号字段 同 基础资料文本](https://wenku.my7c.com/article/12773466632...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息