执行计划,单据转换,下推,报没有下游单据新增权限
1人赞赏了该文章
1,309次浏览
编辑于2021年07月07日 14:38:08
单据转换过程中默认会验证下游单据的新增权限,这里的验证是使用用户拥有权限的所有组织,跟下游单据的主业务组织值比较,如果没有任何包含,就会报没有下游单据的新增权限。
执行计划是通过管理员来调用的,所以不存在没有组织权限,那么唯一的可能就是下游单据主业务组织没有值。那为什么手工执行没有问题? 这是因为下游单据主业务组织主要来源为参数传入,字段映射携带,当前登录的组织,而调用的时候往往不会传入值,单据转换往往也不会配置主组织携带,所以最关键的决定因素就是是否有当前登录组织,而执行计划自动是没有当前登录组织的,故自动运行验证不通过。
解决此问题一般有三种方案:
通过参数控制,不验证下游单据新增权限:option.SetVariableValue("ValidatePermission", true);
传入主业务组织:
单据转换,字段映射携带主业务组织到下游单据
给当前上下文增加用户当前登录组织
需要引用:
需要引用: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
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读