执行计划,单据转换,下推,报没有下游单据新增权限
金蝶云社区-田野迷鸟
田野迷鸟
1人赞赏了该文章 938次浏览 未经作者许可,禁止转载编辑于2021年07月07日 14:38:08

        单据转换过程中默认会验证下游单据的新增权限,这里的验证是使用用户拥有权限的所有组织,跟下游单据的主业务组织值比较,如果没有任何包含,就会报没有下游单据的新增权限。

        执行计划是通过管理员来调用的,所以不存在没有组织权限,那么唯一的可能就是下游单据主业务组织没有值。那为什么手工执行没有问题? 这是因为下游单据主业务组织主要来源为参数传入,字段映射携带,当前登录的组织,而调用的时候往往不会传入值,单据转换往往也不会配置主组织携带,所以最关键的决定因素就是是否有当前登录组织,而执行计划自动是没有当前登录组织的,故自动运行验证不通过。


        解决此问题一般有三种方案:

  1. 通过参数控制,不验证下游单据新增权限:option.SetVariableValue("ValidatePermission", true);

    image.png

  2. 传入主业务组织:

    image.png

  3. 单据转换,字段映射携带主业务组织到下游单据

  4. 给当前上下文增加用户当前登录组织

    需要引用:

    1. 需要引用:using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.BusinessEntity.Organizations;

       

    //这里也可以写死,直接赋一个固定的组织
        long orgId = 1;
        //也可以通过代码得到当前登录组织内码
         // string OrgParamValue = UserParamterServiceHelper.Load(this.Context, "LoginOrgValue", this.Context.UserId);
          //  if (Kingdee.BOS.Util.StringUtils.IsInt(OrgParamValue) == false)//当前登陆用户的有管理员角色的第一个组织Id
          //  {
          //      orgId = PermissionServiceHelper.GetUserAdminOrg(this.Context).First().Id;
          //  }
           // else{
           //    orgId = Convert.ToInt64(OrgParamValue);
           // }
        //得到组织并给执行计划上下文赋值
        Organization curOrg = OrganizationServiceHelper.ReadOrgInfoByOrgId(this.Context, orgId);
            List<long> functions = Array.ConvertAll(curOrg.OrgFunctions.Split(','), (a) => { return Convert.ToInt64(a); }).ToList();
            this.Context.CurrentOrganizationInfo = new OrganizationInfo() //给当前上下文增加组织
            {
                ID = curOrg.Id,
                Name = curOrg.Name,
                FunctionIds = functions,
                AcctOrgType = curOrg.AcctOrgType
            };

//按编码取到组织

OrganizationInfo GetOrganizationInfo(Context ctx, string mainNumber)
        {
            FormMetadata orgMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "ORG_Organizations");
            DynamicObject orgDataEntity = BusinessDataServiceHelper.LoadFromCache(ctx, orgMetadata.BusinessInfo.GetDynamicObjectType(), new QueryBuilderParemeter()
            {
                FormId = "ORG_Organizations",
                FilterClauseWihtKey = string.Format("FNumber = '{0}' ", mainNumber),
            }).FirstOrDefault();
            var organizationInfo = new OrganizationInfo()
            {
                FunctionIds = Convert.ToString(orgDataEntity["OrgFunctions"]).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Where(p => !string.IsNullOrWhiteSpace(p)).Select(o => Convert.ToInt64(o)).ToList(),
                ID = Convert.ToInt64(orgDataEntity["Id"]),
                Name = Convert.ToString(orgDataEntity["Name"]),
            };
            return organizationInfo;
        }


本文转载自:金蝶云社区|星空

作者:eris

原文链接:https://vip.kingdee.com/article/163011927923255040

赞 1