查询基础资料取消组织隔离二开方案实现原创
金蝶云社区-邱育华
邱育华
9人赞赏了该文章 479次浏览 未经作者许可,禁止转载编辑于2022年05月18日 17:05:53

一、【需求问题】

二开单据,这个单据上仓库字段希望可以取到所有组织的仓库。


二、【功能分析】

当前标准产品仓库是私有,底层取数做了组织隔离,BOS中基础资料配置有两个选项

1、显示创建组织所在记录

2、使用组织


image.png


取消仅显示创建组织所在记录和清空库存组织,查询的数据依然有组织隔离的处理,分析是底层做了特殊处理。

参考社区的知识文章二开插件实现:【二开案例.表单插件.单据上查询基础资料时取消组织隔离


人为的强制取消基础资料数据的组织隔离,有可能造成单据和基础资料的组织不一致,可能会对和多组织特性相关的某些功能产生不可预知的风险,开发者应了解此风险,并评估需求的合理性。


经测试,在原有的代码基础上加上listShowParameter.IsIsolationOrg = false,才能够生效。

python脚本快速处理,参考:

#coding:utf-8
import clr 
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
from System import *
from System import StringComparison
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.List import *
from Kingdee.BOS.Util import *
def BeforeF7Select(e):
    if e.FieldKey.Equals("FSTOCKID", StringComparison.OrdinalIgnoreCase):
        listShowParameter = e.DynamicFormShowParameter
        if listShowParameter == None:
           return
        listShowParameter.UseOrgId = 0
        listShowParameter.MutilListUseOrgId = ""
        listShowParameter.IsIsolationOrg = False


取消组织隔离查询效果:

image.png


使用案例:

一、调拨申请单表体扩展仓管员字段,根据组织隔离,默认会将主业务组织(或当前使用组织)作为条件过滤,现需要通过调入组织过滤仓管员

import clr 
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")

from System import *
from System import StringComparison
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.List import *
from Kingdee.BOS.Util import *

def BeforeF7Select(e):
    if e.FieldKey.Equals("F_kd_Base2", StringComparison.OrdinalIgnoreCase):
        listShowParameter = e.DynamicFormShowParameter
        if listShowParameter == None:
           return
        listShowParameter.UseOrgId = 0
        listShowParameter.MutilListUseOrgId = ""
        listShowParameter.IsIsolationOrg = False # 取消组织隔离
        
        useOrg = this.View.Model.GetValue("F_kd_Base3", e.Row)
        filter = " FIsUse='1' ";
        if useOrg != None and Convert.ToInt64(useOrg["Id"]) > 0:
            filter += ''' And FBizOrgId={0} '''.format(str(useOrg["Id"]))  # 加入调入组织过滤条件
            
        if e.ListFilterParameter.Filter == "":
            e.ListFilterParameter.Filter = filter
        else:
            e.ListFilterParameter.Filter += " AND " + filter
赞 9