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

2020-08-30 04:29发布

         点击此处--->   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)

         点击此处--->   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条回答
lukcy2020
1楼 · 2020-08-30 05:00.采纳回答

嗨Aleksi,

您必须通过ABSL代码进行关联。

类似的东西

 if(!this.ToMaterial.IsSet()){
 var materialIns = Material.Retrive(this.MaterialID);//您也可以使用查询。
 如果(materialIns.IsSet())
 {
 this.ToMaterial = materialIns;
 }
 } 

致谢

Senthil

昵称总是被占用
2楼-- · 2020-08-30 04:56

Senthil Murugan,

说明字段如何降低性能成本,据我介绍,这会在BO中产生更多数据。请您解释一下。

此致

Tushar Goel。

spaceman01
3楼-- · 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

南山jay
4楼-- · 2020-08-30 04:37

Hello Horst,

谢谢。 是的,这只是我的示例不起作用的原因。

我忘记为该关联创建ABSL脚本。

现在一切正常。 我已经弄清楚关联是如何工作的。

最诚挚的问候,

Aleksei

浮生未央
5楼-- · 2020-08-30 04:53

谢谢你,Senthil,

据我了解,此代码应放在After-Modify事件中?

我考虑过一种删除关联的方法(在这种情况下将不需要关联),而只是通过查询检索Description(这是ABAP的一种常见做法)。 只有我不确定ByD作为Web应用程序的性能。 但是我还是会尝试的。

谢谢。

Aleksei

Bunny_CDM
6楼-- · 2020-08-30 04:39

你好Aleksi

从您的声明

"字段材料ID (有效)和另一个字段材料描述(无效)的OVS"

我假设它的OVS返回ID的值,但不返回描述的值。

这是因为-正如您已经建议的-与Description节点的关联是一对多的。 这意味着它将返回描述列表(使用不同的语言)。

看看此博客

此关联有一个过滤器,您可以在其中提供语言。 然后,仅返回一个值,OVS应该起作用。

HTH,
。 Horst

灬番茄
7楼-- · 2020-08-30 04:54

谢谢你,Senthil,

我尝试使用ABSL来获取数据,并且运行速度非常快。

有一个可行的示例,我为雇员获得了GivenName,为物料获得了描述

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;


 节点Employees [0,n] {
 元素Workplace:ID;
 元素EmployeeID:ID;
 关联Employee [0,1]与Employee;
 }
 }
 

Event-AfterModify.absl:

 *
 添加您的SAP Business ByDesign脚本语言实现以:
 业务对象:OVS
 节点:根
 事件:AfterModify

 注意:
 -要访问业务对象节点的元素,
 使用路径表达式,例如this。<元素名称>。
 -要使用代码完成功能,请按CTRL + J。
 -在以下情况下,解决方案使用此脚本:
 -修改包含此脚本的节点中任何字段的值。
 -节点本身被同一解决方案中的另一个业务对象修改。
 */


 进口ABSL;
 导入AP.FO.BusinessPartner.Global;
 导入AP.FO.ProductDataMaintenance.Global;

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


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


 返回;

 

质量检查屏幕:

据我们所见,使用该关联实现的给定名称和说明既不在"根"节点中也不在"雇员"节点中。 我不知道为什么员工协会停止了工作。 我已经完全按照停车场示例进行了示例。 ABSL实现的给定名称2 和描述2 正常工作,完全不需要关联。

谢谢。

Aleksei

一周热门 更多>