每次尝试从标准BO创建自定义BO实例时,都会出现Null异常。

2020-08-14 08:57发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨!

我创建了一个名为ProjectbaselineCostCenters的自定义BO,该BO具有一个名为Studiengange的[0,n]节点,该节点是德语成本中心的翻译。 我在BeforeSave事件中的ProjectBaseline BO扩展中编写了此逻辑。

导入ABSL;
 将AP.Common.GDT导入为apCommonGDT;
 进口AP.FO.MOM.Global;
 导入AP.ProjectManagement.Global;
 var ProjectbaselineCostCenter = ProjectbaselineCostCenters.Retrieve(this.UUID);
 如果(!ProjectbaselineCostCenter.IsSet())
 {
//基线

 var pbData:ProjectbaselineCostCenters的元素;
 var pbccData:ProjectbaselineCostCenters的元素。
 var pbccsData:ProjectbaselineCostCenters元素的集合。
//项目
 var query = Project.QueryByCreationIdentity;
 var para = query.CreateSelectionParams();
 para.Add(query.ProjectID.content," I"," EQ",this.BaseProjectID.content);
 var project = query.Execute(para);
 如果(project.Count()> 0)
 {
 var ProjectCostCentersInstance = ProjectCostCenters.Retrieve(project.GetFirst()。UUID);
 foreach(ProjectCostCentersInstance.Studiengange中的var cc)
 {
 pbccData.Studiengang = cc.Studiengang;
 pbccData.StudiengangsID = cc.StudiengangsID;
 pbccsData.Add(pbccData);
 }
 pbData.BaseProjectID = this.BaseProjectID;
 pbData.ProjectbaselineUUID = this.UUID;
 ProjectbaselineCostCenter = ProjectbaselineCostCenters.Create(pbData);
 如果(ProjectbaselineCostCenter.Studiengange.Count()<1)
 {

 ProjectbaselineCostCenter.Studiengange.CreateMass(pbccsData); //在这里转储!!!!!!

 }
 }
 } 

我想在每次创建项目基线时都创建一个ProjectbaselineCostCenters对象。 我写了上面的逻辑,但是我在第57行有空异常,例如57。 那里有什么问题?

谢谢

Mousa

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨!

我创建了一个名为ProjectbaselineCostCenters的自定义BO,该BO具有一个名为Studiengange的[0,n]节点,该节点是德语成本中心的翻译。 我在BeforeSave事件中的ProjectBaseline BO扩展中编写了此逻辑。

导入ABSL;
 将AP.Common.GDT导入为apCommonGDT;
 进口AP.FO.MOM.Global;
 导入AP.ProjectManagement.Global;
 var ProjectbaselineCostCenter = ProjectbaselineCostCenters.Retrieve(this.UUID);
 如果(!ProjectbaselineCostCenter.IsSet())
 {
//基线

 var pbData:ProjectbaselineCostCenters的元素;
 var pbccData:ProjectbaselineCostCenters的元素。
 var pbccsData:ProjectbaselineCostCenters元素的集合。
//项目
 var query = Project.QueryByCreationIdentity;
 var para = query.CreateSelectionParams();
 para.Add(query.ProjectID.content," I"," EQ",this.BaseProjectID.content);
 var project = query.Execute(para);
 如果(project.Count()> 0)
 {
 var ProjectCostCentersInstance = ProjectCostCenters.Retrieve(project.GetFirst()。UUID);
 foreach(ProjectCostCentersInstance.Studiengange中的var cc)
 {
 pbccData.Studiengang = cc.Studiengang;
 pbccData.StudiengangsID = cc.StudiengangsID;
 pbccsData.Add(pbccData);
 }
 pbData.BaseProjectID = this.BaseProjectID;
 pbData.ProjectbaselineUUID = this.UUID;
 ProjectbaselineCostCenter = ProjectbaselineCostCenters.Create(pbData);
 如果(ProjectbaselineCostCenter.Studiengange.Count()<1)
 {

 ProjectbaselineCostCenter.Studiengange.CreateMass(pbccsData); //在这里转储!!!!!!

 }
 }
 } 

我想在每次创建项目基线时都创建一个ProjectbaselineCostCenters对象。 我写了上面的逻辑,但是我在第57行有空异常,例如57。 那里有什么问题?

谢谢

Mousa

付费偷看设置
发送
2条回答
何必丶何苦呢
1楼 · 2020-08-14 09:21.采纳回答

Mousa,

您具有以下代码段。 在调用.Create()之后,您无需检查是否设置了ProjectbaselineCostCenter ---所以我的猜测是"如果(ProjectbaselineCostCenter.Studiengange.Count()<1)"是崩溃的行,因为它正在尝试访问 可能不存在的对象的Studiengange节点。

 var ProjectbaselineCostCenter = ProjectbaselineCostCenters.Retrieve(this.UUID);
 如果(!ProjectbaselineCostCenter.IsSet())
 {
 ...
 ProjectbaselineCostCenter = ProjectbaselineCostCenters.Create(pbData);
 如果(ProjectbaselineCostCenter.Studiengange.Count()<1)
 {
 ProjectbaselineCostCenter.Studiengange.CreateMass(pbccsData); //在这里转储!!!!!!
 }
 }
 
SAP德到
2楼-- · 2020-08-14 09:17

Mousa,

创建并不总是成功的---在创建几乎任何对象时都会发生很多事情,因此,真正值得检查任何关联或变量总是值得的。 很高兴我可以提供帮助。

刘易斯

一周热门 更多>