执行计划调用下推报没有下游单据新增权限原创
16人赞赏了该文章
3,028次浏览
编辑于2022年11月17日 15:11:13
一、说明
1)单据转换默认会验证下游单据的新增权限,使用用户拥有权限的所有组织,跟下游单据的主业务组织值比较,如果没有包含,就会报没有下游单据的新增权限,存在一种特殊情况,当下游单据没有主业务组织,也会报没有新增权限。
2)下游单据的主业务组织的来源优先顺序为:参数传入-》字段映射携带-》上下文用户当前登录组织
3)执行计划上下文没有当前登录组织
4)执行计划上下文用户为管理员,管理员登录网站上下文中的当前登录组织内码为1的组织,是固定死的。
二、解决方案:
1. 参数控制,不验证下游单据新增权限:option.SetVariableValue("ValidatePermission", true);
2. 参数控制,传入主业务组织:
3.单据转换,字段映射携带主业务组织到下游单据
4. 给当前上下文增加用户当前登录组织(比较新的版本已经自动加了)
1)需要引用:using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.BusinessEntity.Organizations;
//系统管理员的当前登录组织是固定的,内码为1. long orgId = 1; //得到组织并给执行计划上下文赋值 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 };
2)或者按编码取到任何组织当着当前组织
OrganizationInfo GetOrganizationInfo(Context ctx, string mainNumber) { FormMetadata orgMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "ORG_Organizations"); var queryParam = new QueryBuilderParemeter() { FormId = "ORG_Organizations", FilterClauseWihtKey = string.Format("FNumber = '{0}' ", mainNumber), } var orgObj= BusinessDataServiceHelper.LoadFromCache(ctx, orgMetadata.BusinessInfo.GetDynamicObjectType(),queryParam).FirstOrDefault(); //创建组织 var organizationInfo = new OrganizationInfo() { FunctionIds = Convert.ToString(orgObj["OrgFunctions"]).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Where(p => !string.IsNullOrWhiteSpace(p)).Select(o => Convert.ToInt64(o)).ToList(), ID = Convert.ToInt64(orgObj["Id"]), Name = Convert.ToString(orgObj["Name"]), }; return organizationInfo; }
推荐阅读