执行计划调用下推报没有下游单据新增权限原创
金蝶云社区-eris
eris
11人赞赏了该文章 1117次浏览 未经作者许可,禁止转载编辑于2021年8月31日 19:38:08

一、说明

1)单据转换默认会验证下游单据的新增权限,当用户拥有权限的所有组织,跟下游单据的主业务组织值比较,如果没有任何包含,就会报没有下游单据的新增权限,存在一种特殊情况,当下游单据没有主业务组织,也会报没有新增权限。

2)下游单据的主业务组织的来源优先顺序为:参数传入-》字段映射携带-》上下文用户当前登录组织

3)执行计划上下文没有当前登录组织

4)执行计划上下文用户为管理员,管理员是没有上传登录组织的

5)管理员登录网站上下文中的当前登录组织内码为1的组织,是固定死的。

二、解决方案:

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

image.png

2. 参数控制,传入主业务组织:

image.png

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;
}


11