需要協助排查圖形腳本故障:“圖形腳本在日誌中報告錯誤”我需要幫助理解如何在圖形腳本中引用框架框的軸。
我現在有以下資訊:
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>