无法动态隐藏表格单元格中的子表单

2020-08-19 07:49发布

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

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


亲爱的朋友,

我有一个要求,我需要使表行(单元格)中的子窗体动态可见/不可见。

我的代码:

data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0]。#subform [1]。#subform [2] :: initialize-(JavaScript,客户端)
var length = xfa.resolveNodes(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA")。length;
//var字段= xfa.form .subform.table.row.all;
xfa.host.messageBox(" Hi");
用于(var i = 0; i <= length; i ++)
{
xfa.host .messageBox(" Hi");
if(xfa.resolveNode(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [" + i +"]。# subform [1]。#subform [2] .TextField1")。rawValue ==" X"){
this.presence =" hidden";
} else {
this.presence =" visible" ;
}
}

问题1.如果子窗体在第一行被隐藏,则它在表的所有行中都被隐藏,有条件的情况下它应该变为可见/不可见。

2. xfa.host.messageBox(" Hi"); 不能正常工作,我也尝试过这些,但以下均不能用于调试目的:

data。#pageSet [0] .Page1.CurrentPage :: initialize-(JavaScript,客户端)
xfa.host.messageBox(" welcome"," Error",3,0);
$ host .messageBox(" Welcome");
xfa.host.messageBox(" Test");

app.alert(" click");

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

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


亲爱的朋友,

我有一个要求,我需要使表行(单元格)中的子窗体动态可见/不可见。

我的代码:

data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0]。#subform [1]。#subform [2] :: initialize-(JavaScript,客户端)
var length = xfa.resolveNodes(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA")。length;
//var字段= xfa.form .subform.table.row.all;
xfa.host.messageBox(" Hi");
用于(var i = 0; i <= length; i ++)
{
xfa.host .messageBox(" Hi");
if(xfa.resolveNode(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [" + i +"]。# subform [1]。#subform [2] .TextField1")。rawValue ==" X"){
this.presence =" hidden";
} else {
this.presence =" visible" ;
}
}

问题1.如果子窗体在第一行被隐藏,则它在表的所有行中都被隐藏,有条件的情况下它应该变为可见/不可见。

2. xfa.host.messageBox(" Hi"); 不能正常工作,我也尝试过这些,但以下均不能用于调试目的:

data。#pageSet [0] .Page1.CurrentPage :: initialize-(JavaScript,客户端)
xfa.host.messageBox(" welcome"," Error",3,0);
$ host .messageBox(" Welcome");
xfa.host.messageBox(" Test");

app.alert(" click");

付费偷看设置
发送
4条回答
代楠1984
1楼 · 2020-08-19 08:15.采纳回答

Siva,您好,我想这肯定是一个逻辑错误。
脚本:data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0 ] .FamilySF.SpouseSF :: initialize

GT_TABLE中的每一行都会触发

,但这仅引用GT_TABLE中的当前行。

想象一下GT_TABLE有3行。 然后,上述编码被调用3次,并且引用为:
1。 这个=> GT_TABLE [0] .FamilySF.SpouseSF

2。 这个=> GT_TABLE [1] .FamilySF.SpouseSF

3。 这个=> GT_TABLE [2] .FamilySF.SpouseSF

由于循环,您将多次覆盖this.presence的值。

那么为什么不将此编码更改为:

 data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0] .FamilySF.SpouseSF :: initialize-(JavaScript,客户端)
 如果(this.TextField1.rawValue ==" X"){
   this.presence ="隐藏";
 }其他{
   this.presence ="可见";
 } 

因为每行都要进行编码,并且要探测的字段是相对于子表单(SpouseSF)的,所以可以通过相对绑定检查值。

最好的问候
Pascal

野沐沐
2楼-- · 2020-08-19 08:06

非常感谢它的工作...

DafaDDDa
3楼-- · 2020-08-19 08:12

嗨,Siva,
如果您打算遍历表以隐藏某些字段,请仅将脚本应用于表本身 。

代替:

data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0]。#subform [1]。#subform [2] :: initialize

您应该将编码放在这里:

data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0]

否则,整个表将针对每一行循环,这可能会导致 糟糕的性能和意外行为。

您的messageBox很有可能不会触发,因为Adobe对正确的参数非常挑剔。

adobe xfa docs

您是否尝试过以下示例:

 xfa.host.messageBox("这是一条消息","这是标题",3,1)

最诚挚的问候
帕斯卡

SAP德到
4楼-- · 2020-08-19 08:02

尊敬的帕斯卡,

1。 我附上了屏幕截图,以便更好地理解hirarachy和代码。

场景是这样的,表中的列具有多个子表单,因此对于每个记录,如果特定子表单有数据,则该子表单应该是可见的。

否则它应该是不可见的。

注意:我已经重命名了子表单的名称,并进行了必要的代码更改,以便更好地理解。

 data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [0] .FamilySF.SpouseSF :: initialize-(JavaScript,客户端)
 var len = xfa.resolveNodes(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA")。length;
//var字段= xfa.form.subform.table.row.all;
 xfa.host.messageBox(" Hi");
 对于(var i = 0; i <= len; i ++)
 {
 xfa.host.messageBox(" Hi");
 if(xfa.resolveNode(" data。#subform [0]。#subform [2]。#subform [3] .GT_TABLE.DATA [" + i +"]。FamilySF.SpouseSF.TextField1")。rawValue =="  X"){
 this.presence ="隐藏";
 }其他{
 this.presence ="可见";
 }
 }
 

注意:在我的情况下,一旦数据不存在,子窗体将被隐藏,但是当下一条记录中的数据存在时,子窗体将不可见。

2。 我已经在页面初始化时提供了代码,这里消息弹出也没有触发:

 data。#pageSet [0] .Page1.CurrentPage :: initialize-(JavaScript,客户端)
 xfa.host.messageBox("这是一条消息","这是标题",3,1); 

此致

Siva

一周热门 更多>