如何与BO物料关联以获得说明。

2020-08-30 04:29发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我创建了与BO 材料相关...

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

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


嗨,

我创建了与BO 材料相关联的自定义BO。

我还为字段 Material ID (有效)和另一个字段 Material Description (无效,其值未显示)制作了OVS。/p>

我试图通过停车场示例中的Employee协会来做所有事情。

 节点MaterialCosts [0,n] {
 元素项目:LANGUAGEINDEPENDENT_MEDIUM_Name;
 元素MaterialID:ID;
 元素MaterialDescription:LANGUAGEINDEPENDENT_MEDIUM_Name;
 元素BaseQuantity:数量;
 元素NoOfPiecePerPack:数量;
 元素ScrapRate:百分比;
 元素开销:百分比;
 元素TotalQuantity:数量;
 元素UnitCost:金额;
 元素UoM:MeasureUnitCode;
 元素成本:金额;
 将ToMaterial [0,1]与材料关联;
 }
 

可能是什么原因?

我在节点Description中看到基数[0,n],这种绑定主要可能吗?

或者可能有一些解决方法。

谢谢。

000074.jpg (92.8 kB)
8条回答
spaceman01
2020-08-30 04:50

但是我发现了为什么在我的示例中与Employee的关联不起作用。

似乎需要在 Event-AfterModify 中添加一些支持的ABSL代码。

这就是分配元素 ToEmployee 的地方。

最终,经过简化后的最终示例看起来如此

BO:

将AP.Common.GDT导入为apCommonGDT;
 导入AP.FO.BusinessPartner.Global;
 导入AP.FO.ProductDataMaintenance.Global;

 businessobject OVS {
 元素EmployeeID:EmployeeID;
 元素GivenName2:LANGUAGEINDEPENDENT_MEDIUM_Name;
 关联Employee [0,1]与Employee;

 元素MaterialID:ProductInternalID;
 元素Description2:LANGUAGEINDEPENDENT_MEDIUM_Name;
 将ToMaterial [0,1]关联到Material;
 }
 

Event-AfterModify:

//事件:AfterModify
 进口ABSL;
 导入AP.FO.BusinessPartner.Global;
 导入AP.FO.ProductDataMaintenance.Global;

//给定的名称
//-从CarPark示例中剪下-
//辅助标志,它将帮助我们确定是否必须更新ToEmployee关联。
 var bUpdateEmployee = false;
//我们指向员工查询的指针。
 var qryEmployees;
//将保存员工查询调用参数的对象。
 var paramEmployee;
//收集员工查询调用的结果值。
 var resultEmployees;
//检查我们的ToEmployee关联是否仍是最新的。 如果没有,我们将不得不对其进行更新。
 如果(this.EmployeeID.IsInitial()){
//=>没有为停车位指定员工。
 如果(this.ToEmployee.IsSet()){
//=>我们的ToEmployee协会仍然保留以前的员工
//之前关联-现在我们必须重置关联。
 this.ToEmployee.Reset();
 }
 }
 否则((this.ToEmployee.IsSet()){
//=>我们确实有一个指定停车位的员工,但是,
//关联ToEmployee尚未初始化。
//=>将我们的标志设置为true。
 bUpdateEmployee = true;
 }
 否则if(this.ToEmployee.IdentificationEmployeeID.EmployeeID.content!= this.EmployeeID.content){
//=>我们确实有一个指定停车位的员工,但是,
//关联ToEmployee仍然保留之前与该空间关联的员工。
//=>将我们的标志设置为true。
 bUpdateEmployee = true;
 }
 如果(bUpdateEmployee){
//=>需要刷新与员工的关系。
//首先将其重置,因为新的员工ID可能无效。
 this.ToEmployee.Reset();
//现在查找给定员工的详细信息:
//...连接到BO员工的查询...
 qryEmployees = Employee.Identification.QueryByEmployeeAttributes;
//...填充查询调用的参数集合...
 paramEmployee = qryEmployees.CreateSelectionParams();
//...假设我们要寻找的员工的ID必须是我们用户指示的ID ...
 paramEmployee.Add(qryEmployees.EmployeeID.content," I"," EQ",this.EmployeeID.content);
//...然后执行查询!
 resultEmployees = qryEmployees.Execute(paramEmployee);
//希望我们找到了给定ID的员工!
 foreach(resultEmployees中的oneEmployee){
//由于我们知道ID只能有一名员工,因此我们
//获取第一个结果并退出循环。
 this.ToEmployee = oneEmployee.ToRoot;
 打破;
 }
 }
//-从CarPark示例中剪下-


//名字2
 var employeeidentification = Employee.Identification.Retrieve(this.EmployeeID);
 如果(employeeidentification.IsSet()){
 this.GivenName2 = employeeidentification.ToParent.CurrentCommon.Person.Name.GivenName;
 }其他{
 this.GivenName2.Clear();
 }

//说明(未实现)


//说明2
 var material = Material.Retrieve(this.MaterialID);
 如果(material.IsSet()){
 this.Description2 = material.Description.GetFirst()。Description.content;
 }其他{
 this.Description2.Clear();
 }

 返回;
 

结果:

现在看来一切正常。

最诚挚的问候,

Aleksei

一周热门 更多>