执行计划,插件,更新基础资料,报错,读取数据不存在原创
3人赞赏了该文章
697次浏览
编辑于2021年07月07日 16:31:48
问题场景:
1、插件通过建模createview、load、数据填充、调用保存操作的方式,在后台进行基础资料/单据的保存;
2、修改已存在的记录,参数会传入
openParam.PkValue = PkValue;
openParam.Status = OperationStatus.EDIT;
3、前台建立动态表单,添加菜单进行调用,可正常生成基础资料/单据;
4、在执行计划插件里,调用这个插件的代码,经常会出现失败提示:
您要读取的数据在系统中不存在,可能已经被删除![ID=-1,Type=Organization]
5、跟踪代码无法重现报错现象,点击执行计划里的“测试”按钮也不会重现。
问题原因:
手动执行的话,取的是当前登录用户的上下文的组织信息,自动执行的话取不到组织信息的,需要代码指定一下。
解决方法:
在执行计划插件里指定上下文的组织
参考代码:
public void Run(Context ctx, Schedule schedule) { //如果没有组织信息,就固定给一个100组织 ctx.CurrentOrganizationInfo = GetOrganizationInfo(ctx, "100"); Kingdee.BOS.KDThread.MainWorker.QuequeTask(ctx, () => { string Message = string.Empty; Aomi.K3.BD.ServicePlugIn.Common commoin = new Aomi.K3.BD.ServicePlugIn.Common(); commoin.AutoSynchroAomiData(ctx); }, null); }
//按编码取到组织
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; }
参考来源:
来源:金蝶云社区|星空
标题:执行计划调用下推报没有下游单据新增权限
网址:https://vip.kingdee.com/article/163011927923255040
推荐阅读