各位,
(JMP Pro 16.1.0, Win10)
我有一個與我以前的帖子有關的問題這裡,如果你對一些“背景故事”感興趣。
我現在遇到的主要問題是 Throw() 命令沒有按預期工作。 在我的代碼中(完整代碼見末尾),我在幾個地方進行了測試,看看當前是否有一個打開的圖形生成器報告,看起來像這樣,它包含在 Expr() 語句中:
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
問題是,每當我運行代碼(就像從工具欄熱按鈕運行它一樣)時,它似乎會跳過這些行並忽略如果沒有打開報告。 但是,當我“逐行”運行代碼時,它會正確捕捉到沒有打開的報告並通知用戶。
我正在嘗試編寫代碼以分發給整個組織的用戶,並嘗試使其足夠健壯以處理不同類型的情況,例如,如果用戶打開一個或多個數據表和/或打開一個或多個項目(其中可以包含多個數據表)。
這是代碼的概念(問題出現在第 6 項):用戶正在 Graph Builder 中創建圖形,然後想要對圖形進行例行修改(有關詳細信息,請參見上面的鏈接),然後用戶單擊工具欄執行上述操作的熱鍵。
- 代碼運行 Graphic_Expr 表達式以確定圖形的位置——它是在“獨立”數據表中還是在項目中(只能選擇一個選項)。 ->(轉到)
- 根據選中的複選框,代碼然後運行 dt_win_Expr 或 prj_win_Expr 代碼(現在,我只在測試代碼時為數據表選項設置了它,但理想情況下最終的功能應該或多或少相同) . ->(轉到)
- 如果是獨立的數據表,則運行 dt_win_Expr 並創建一個窗口供用戶選擇他們要編輯的圖形所在的數據表。 回想一下,用戶可以打開多個數據表,並可能打開多個 Graph Builder。 | (或者)
- 同樣,如果用戶選擇一個項目,它將運行 prj_win_Expr(尚未完成)以讓用戶選擇哪個項目(如果打開多個)以及該項目中的後續數據表。 ->(轉到)
- 一旦選擇了數據表,無論是獨立的還是在項目中,代碼都會運行 SquarifyWin_Expr 表達式。 它在這裡做的第一件事是測試是否確實存在當前報告 - 上面的 If() 代碼(我可能需要修改和測試當前報告是否是 Graph Builder)。 **這是代碼無法按預期運行的地方。 即使沒有打開 Graph Builder,它也會在應該引發警告時繼續執行其餘代碼。** 如果一切正常....->(轉到)
- 然後,根據像素尺寸和是否平方化,代碼運行 RprtUpdate_Expr 表達式,將所需的更新發送到 Graph Builder 報告。
我希望這個描述是有意義的,並有助於將我想要的編程路徑/功能放在上下文中。
非常感謝您在尋找解決方案方面的任何幫助。 最後是完整的 JSL 代碼。
謝謝!,
DS
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>