二开案例:弹窗式核算维度快速录入

维度关联字段的部分开发逻辑这里不再说明了,看这个帖子: 维度关联字段(开发向)
2021/01/27:增加py 代码附件
<0>问题:凭证核算维度录入编码后,需要两次回车才能跳转到下一控件问题。
原因:这个问题是系统针对F8类型录入的所有方式的实现,第一次回车是前后端的数据交互,包括把编码告诉服务端,服务端根据编码找对应的资料,然后触发关联的值更新、实体服务规则逻辑,然后返回部分其他更新指令给前端。第二次回车时当前控件的处理以及完成,才会跳转到下一控件。
<1>方案:二开插件实现值更新后的快速跳转
(调整了老论坛示例部分代码【分享】弹窗式辅助属性模糊查询回车定位到下个控件问题)
在值更新事件触发时,当且仅当值有效时跳转到下一个维度。
插件挂设的表单标识:BD_ACCTITEMEDITMETA


C#示例代码:
[Kingdee.BOS.Util.HotUpdate]
[Description("核算维度自动跳转")]
public class KsmDynamicFormPlugIn : AbstractDynamicFormPlugIn
{
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
RelatedFlexGroupField flexGroupField = e.Field as RelatedFlexGroupField;
if (flexGroupField == null || e.FlexField == null || e.NewValue == null)//空值不跳转
return;
//控制仅核算维度录入界面启用快速录入
if (flexGroupField.RelatedBDFlexItemLinkField != FormIdConst.BD_FLEXITEMDETAILV)
return;
var baseDataObj = this.Model.GetValue(flexGroupField.RelatedBaseDataFlexGroupField, e.Row) as DynamicObject;
var baseDataField =
this.View.BillBusinessInfo.GetField(flexGroupField.RelatedBaseDataFlexGroupField) as BaseDataField;
if (baseDataObj == null || baseDataField == null)
return;
int flexItemId, flexItemMasterId;
//获取当前基础资料下的可用维度关联字段(如核算维度关联科目、辅助属性关联物料)
var enableList = baseDataField.Controller.GetInUseFlexItemInfo(this.Context, this.View.BillBusinessInfo,
flexGroupField,
baseDataObj, "", out flexItemId, out flexItemMasterId);
enableList = enableList.OrderBy(x => x["FSEQ"]).ToList();
//找到当前修改的维度
int index = enableList.FindIndex(
x => x["FDataFieldName"].ToString().Equals(e.FlexField.Key, StringComparison.OrdinalIgnoreCase));
if (index == -1)
return;
//跳转到下一个维度,当为最后一个维度时,跳转到确认按钮
if (index + 1 < enableList.Count && enableList[index + 1]["FDataFieldName"] != null)
{
string nextFocusControlKey = "$$" + flexGroupField.Key + "__" + enableList[index + 1]["FDataFieldName"].ToString();
this.View.GetControl(nextFocusControlKey).SetFocus();
}
else
{
string nextFocusControlKey = "$$" + flexGroupField.Key + "__" + FormIdConst.BOS_FlexItemFormMeta + "__" + "__btnOK";
this.View.GetControl(nextFocusControlKey).SetFocus();
}
}
}

python插件代码:
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.A
二开案例:弹窗式核算维度快速录入
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



