需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”我需要帮助理解如何在图形脚本中引用框架框的轴。
我现在有以下信息:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
ob_group = Outline Box( "Testing Handles: " || (dt << Get Name) );
nw = New Window( (dt << get name), ob_group );
GB_wHandle = Function( {dt, X_parameter, Y_Parameter, groupByColumnString},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
box:exx = 60;
box:exy = 60;
box:gb = Graph Builder(
Size( 450, 350 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
box:rgb = box:gb << Report;
box:framebox = box:rgb << XPATH( "//FrameBox" );
box:axis = box:rgb << XPATH( "//AxisBox" );
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
{box:exx, box:exy} = box:axisMin + 10;
box:framebox << Add Graphics Script(
"Front",
Description( "Handle" ),
//Script start
{Handle(
box:exx,
box:exy,
box:exx = x;
box:exy = y;
) ;
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Pen Color( "Red" ) ; Line( box:axisMin, {box:exx, box:exy} ) ; }
);
);
Return( cb );
);
ob_group << Append( GB_wHandle( dt, "height", "weight", "sex" ) );
我需要上下文框,因为同一个窗口中有多个 GB,每个 GB 都有独立的句柄。
一切正常,直到我选择图表上的一个点或表格中的一行并将其排除。
然后我的图形消失了,日志中出现了“图形脚本报告错误”和“在访问或评估‘列表’时发送需要可脚本化对象,{/*###*/DisplayBox[], DisplayBox[]}”。
错误是由以下几行代码引起的:
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
如果我把它们注释掉,就不会报错了——但是这样一来,如果用户更改坐标轴刻度,我就无法获得更新后的坐标轴最小值/最大值。
我该如何解决这个问题?
自动化和脚本编写回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”这以一种更简单的方式展示了这个问题。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ob_group = Outline Box("Testing Handles: " || (dt << Get Name));
gb = dt << Graph Builder(
Size(450, 350),
Ignore Platform Preferences(1),
Show Control Panel(0),
Variables(X(Column("height")), Y(Column("weight")), Overlay("sex")),
Elements(Points(X, Y), Smoother(X, Y))
);
fbs = Report(gb) << XPATH("//FrameBox");
abs = Report(gb) << XPATH("//AxisBox");
show(fbs, abs);
dt << Select Rows(1) << Hide and Exclude(1) << Clear Select;
wait(1);
show(fbs, abs);
当您排除行时,图表构建器将重新计算,并且您的引用将被删除。
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”解决这个问题的一个方法是添加
box:axis = box:rgb << XPATH("//AxisBox");
到你的图形脚本
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”是的,我猜想它是重绘的,但无法确定如何找到参考资料。
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”是的,成功了。不知为何,我之前以为无法在脚本中引用报告。
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”@jthi ,还有一个问题。
假设我想把添加图形的脚本封装到一个函数中,该函数会将该脚本添加到图形构建器中。
该函数只需要接收一个 Display Box 的引用,然后找到对应的 Framebox 并添加脚本。
目前,在我的函数中,我必须将 Graph Builder 包装在 Context Box 中,以便我使用此脚本创建的(具体处理的)元素与同一窗口中其他 Graph Builder 中的元素相互独立。
问题 - 我应该向函数提供哪个显示框来保存隔离的上下文?我在 XML 中看到 EvalContextBox - 这是由“Context Box”生成的吗?
函数内部的语法应该是什么?由于函数不会使用上下文框,我需要去掉“box”命名空间。在这种情况下,我该如何限制上下文?
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”我有点不明白你想传递给函数的是什么,只是对图形生成器的引用吗?图形生成器还会放在上下文框里吗?
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”这也是我的疑问之一——我应该向该函数传递什么参数,以及在这种情况下我是否仍然需要上下文框。
目前我的脚本结构如下:
//Preparing display boxes structure and window
lub = Lineup Box( N );
ob_group = Outline Box( "Report: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), Window View("Invisible"), ob_group );
然后我处理数据表,选择要绘制的内容等等,并使用此函数创建一个包含图形构建器的上下文框,返回上下文框:
GB_func = Function( {dt, X_parameter, Y_Parameter...},
cb = Context Box(
gb = Graph Builder(...
//
<GRAPH builder="" code="">
); box:rgb = gb << Report; //Doing some other stuff //Adding Graphics Script box:framebox = box:rgb << XPATH( "//FrameBox" ); box:framebox << Add Graphics Script(...) Return( cb ); );
</GRAPH>
然后我选取需要绘制的列,并为每一列创建带有图形构建器平台的上下文框:
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
我想要的是一个函数,我可以为每个单独的图形构建器传递所需的任何显示框或引用,它将添加相同的图形脚本,该脚本的工作方式与现在相同——独立于其他图形构建器。
最终目标是能够通过图表构建器的上下文菜单来开启/关闭图表上的附加图形——无论是否显示图形,都有各自的使用场景。据我所知,移除图形脚本不是问题,现在的问题是如何在这种情况下添加图形脚本。
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”Context Box 可能是最容易传递的命名空间。你也可以将“全局”值存储在非 Box 命名空间(例如 window、global、named、anonymous 等)中,在这种情况下,你可以省略 Context Box,直接传递 Graph Builder 引用。
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”Context Box 创建的 Display Box 是什么?是 EvalContextBox 吗?如何指定图形脚本中的变量的作用域仅限于 EvalContextBox?直接使用 box 命名空间吗?或者有没有办法获取与 EvalContextBox 关联的命名空间引用?
回复:需要帮助排查图形脚本故障:“图形脚本在日志中报告错误”您可以使用命名空间()
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>更改文本编辑框中的值,然后再次运行最后一行代码。</P>