JSL:如何將紅色熱按鈕選項加入大綱框中? 或者你可以嗎?大家好,
我有興趣了解如何(如果可能)將紅色熱按鈕選單新增至您自己定義的大綱框。 例如,在圖形生成器平台上,有一個熱門按鈕,允許執行「將腳本儲存到資料表」和其他選項等操作。

我編寫了其他腳本,希望有這個選項。 大綱框帶有一些選項的灰色小三角形,但它不提供紅色熱按鈕選項。 例如:

我搜尋了腳本索引和腳本指南,但找不到任何相關文件。
有誰知道這是否可能? 如果是這樣,怎麼辦?
謝謝!,
DS
自動化和腳本編寫大規模客製化分享和交流成果視窗回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?您是否正在尋找<<設定選單腳本? 腳本索引範例
Names Default To Here(1);
New Window("Example",
fontobj = ob = Outline Box("Outline Box",
V List Box(
ob2 = Outline Box("Outline Box 2",
H List Box(
Text Edit Box("Top Left"),
Text Edit Box("Top Right")
)
),
ob3 = Outline Box("Outline Box 3",
H List Box(
Text Edit Box("Bottom Left"),
Text Edit Box("Bottom Right")
)
)
)
)
);
ob << Set Menu Script(
{"A", Print("A"), "B", Print("B"), "B1", Print("B1"), "B2",
Print("B2"), "B3", Print("B3"), "C", Print("C")}
);
ob << Set Submenu(2, 3);

JMP 幫助中也有與此相關的內容,但由於 JMP 幫助頁面的搜尋非常糟糕,因此很難找到( https://www.jmp.com/support/help/en/17.2/#page/jmp/construct-display-boxes-for-new-windows.shtml#ww883930 )

回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?教學影片:
JMP 腳本語言簡介第 5.3 章@ 10:30分鐘
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?你好@jthi和@hogi ,
感謝您提供有關從哪裡開始此過程的信息,這非常有幫助。 而且,目前這實際上只是部分解決方案。
我已經能夠添加選單腳本 - 現在,我只添加兩件事:本地資料過濾器和保存腳本(3 個選項):資料表、腳本視窗和日誌。
現在,我的本機資料過濾器和儲存腳本到日誌運作得很好。 我遇到的困難是將保存腳本保存到資料表並將腳本保存到腳本視窗功能正常運作。 以下是啟動選單腳本的程式碼部分,然後為每個選定的選單項目指派操作。
mob << Set Menu Script(
{"Local Data Filter", ts << Local Data Filter ; gb << Local Data Filter, "Save Script", "", "To Data Table", nwin <<
Save Script to Data Table( "Correlation Analysis of " || ycols[1] || " vs. " || xcols[1], <<PROMTP></PROMTP>我的自訂報告視窗看起來像這樣:

我希望有一個選項,用戶可以選擇將腳本保存到數據表(或腳本視窗),它基本上保存用於生成此自訂報告的腳本,以便可以將此分析保存到數據表中,並且有人可以單擊腳本旁的綠色腳本箭頭並重新執行分析,而無需重新執行整個加載項。
透過閱讀腳本索引中的相關內容,似乎只有平台報告(例如圖形生成器或時間序列)之類的物件可以單獨保存到資料表中,但整個大綱框物件(即我的報表視窗)卻無法儲存到在資料表中。 t 接受那種發送(<<)命令。 我不想單獨保存每個平台對象,而是在使用它對資料表/腳本視窗進行分析後保存整個腳本程式碼。
我不確定到底為什麼,但也許是因為我的程式碼結構不同,因為我使用了多個 Expr 語句。 作為一個粗略的想法,我的程式碼結構如下:
Names Default To Here( 1 );
//any variable definitions
var1 = .;
var2 = .;//etc
//Expression to recall roles
RecallRoles = Expr(
//inside is the code to recall roles
);
//Expression to clear roles
ClearRoles = Expr(
//similar code to clear roles
);
//User interface window
ValueDlg = Expr(
nwin = New Window(
// opens a new window with the main outline box and subpanels
//and action buttons
mob = Outline Box(
//this is the main outline box that contains the subpanels and
//time series and graph builder platforms
//it also contains the action buttons that perform certain tasks
)
);
mob << Set Menu Script(
//this is where I'm trying to save the evaluated script to the data
//table so a usercan just cick it, and the script will execute with
//the variables already evaluated and not have to cast columns into
//roles, etc.
);
);
ValueDlg;//this calls the ValueDlg Expr and evaluates it.
如果你們中的任何一個人對我如何做到這一點有任何想法或想法(我希望我的解釋有意義),我很感激任何對此的反饋。
謝謝!,
DS
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?新增資料篩選器並將報告的儲存腳本儲存到資料表 - 如果您使用視窗電腦,您可以考慮使用報告工具列:

回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?向大綱框詢問腳本只會傳回類似顯示樹的內容。
所以,這也是行不通的。
產生報告時,您擁有用於產生報告的完整表達式。
因此,當使用者按一下「儲存腳本」時,您可以使用此表達式並將其另存為腳本。
[那麼用戶之後所做的更改將不會被儲存]
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
New Window( "test",
ob = Outline Box( "test",
V List Box( Text Box( "hello" ), gb = dt << Graph Builder( Variables( X( :height ), Y( :weight ), Overlay( :sex ) ) ) )
)
);
ob << get script(); // Display Tree
ob << get scriptable Object (); // Empty
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?保存創建自定義視窗的腳本通常非常困難,因為您基本上必須在該腳本中包含整個加載項,並應用用戶選擇(然後它與用戶基本上重新運行加載項相同)。 對於這樣的事情,我至少有幾種不同的解決方案(我不會嘗試保存整個窗口,因為我的加載項通常太複雜):
- 將某種設定變數儲存到資料表中,然後使用者可以將其載入到您的加載項中以「重新填充」它
- 不要儲存整個腳本,而是儲存某種「儀表板」類型的解決方案,功能不多
- 僅將一些簡單的部分儲存為表格腳本
- 也許還有一些我現在不記得了...
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?我認為最好的想法不是手動產生報告 - 而是透過儀表板產生器。
在產生的儀表板中,有一個紅色三角形選單,其中包含儲存(儀表板)腳本的選項
……從 Jmp17 開始,甚至可以選擇儲存簡化版本,它看起來像手動生成的腳本:

回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?添加到建議中@jthi ,您可以建立一個在加載項中呼叫的函數,然後您的儲存腳本只是函數呼叫。 需要一些管理來確保函數設計良好並處理您需要的選項,但如果您正在建立對話方塊來啟動加載項,那麼您可能已經定義了許多參數。
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?你好@jthi , @hogi , 和@傑夫·珀金森,
我感謝您的回饋、想法和討論。 嗯,看來事情可能比我想像的還要棘手。 這並不是說它不可行,但它不會像將選單腳本添加到大綱框中那麼「簡單」。 我可能需要仔細思考這裡的一些想法。
@hogi ,我確實嘗試了“將腳本保存到視窗”以及“將所有物件的腳本保存到資料表”,但這些都沒有按照我的預期工作。
如果我確實找到了我想要的解決方案,我一定會更新這篇文章,說明我是如何解決它的,以防其他人遇到這個問題並感興趣。
感謝大家!,
DS
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?應用程式/儀表板產生器非常有用 - 值得嘗試:)
使用 JMP® 建立儀表板和應用程式 (US 2018 408)
YouTube 影片 (Jmp 10)
https://www.youtube.com/watch?v=XyiQqUELc2A
這是一個更長的視頻,包含很多細節:
為什麼您還沒有使用 App Builder? - (2023-US-30MP-1401)
簡潔版本:
使用 App 生成器建立參數化應用程式
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?基本上,您應該從一開始就設計它,以使其“輕鬆”可行。
這是我的一個範例,從這個意義上說,該加載項相當簡單,它只包含圖形生成器(和分區/引導林)。

但試圖保存建置的腳本將是一場噩夢。 有許多隱藏的東西無法透過 JMP 的獲取腳本或將腳本保存到資料表(或任何方法)捕獲,並且該插件分為 10 多個不同的 .jsl 檔案。 即使我能夠將 UI 儲存到資料表中,當使用者重新執行腳本時,由於我對命名空間的嚴格管理(例如,UI 無法存取所有不同的功能),它也無法運作。因此,在這種情況下,我只為使用者提供一個選項來保存列選擇和順序(他們可以保存多個)。然後,當他們打開相同的表並重新運行插件時,他們可以加載不同的輸入。

我很可能會重構此加載項以這樣的方式工作,即我可以將(大部分)保存到表腳本或腳本窗口,但我必須從頭開始重寫它。
其他加載項(我無法顯示其圖片)我有它根據用戶輸入查詢數據,執行一些計算,然後使用幾個圖形生成器和一些額外的列切換器/數據過濾器顯示結果,確實保存了“平台” /查詢和計算完成後立即向資料表顯示 UI/視覺化。 然後我運行該表腳本向用戶顯示結果。 這是相當簡單的插件,所以我可以輕鬆地使用一些表達式來完成此操作(我的初始版本沒有保存視覺化,但這是用戶的請求,所以我確實實現了它)。
我目前正在研究的第三個(再次無法展示)也做了類似的事情。 它根據用戶輸入獲取數據,對其進行計算,顯示分析結果並將其視覺化。 再說一遍,我無法將整個 UI 保存到數據表中,因為我為用戶提供的所有選項都太麻煩了,但我將添加一個基本上是「彈出儀表板」的按鈕,然後它只會創建儀表板使用者介面的某些部分以及在這個「彈出儀表板」中,我可以添加一些額外的功能,因為我會從一開始就為它設計。 然後可以將這個彈出儀表板儲存(希望)到資料表中。
編輯:我也很少在我的腳本中添加呼叫按鈕,因為它也可能很麻煩並且需要很長時間才能正常工作。 我知道有一個腳本可以幫助解決此問題,但它無法(總是)足夠好地執行任務以供我使用。 如果使用者開始要求呼叫我編寫的大多數工具的按鈕,我可能會考慮編寫希望在大多數情況下都能工作的腳本。
回覆:JSL:如何將紅色熱按鈕選項加入大綱框? 或者你可以嗎?使用透過應用程式產生器產生的 GUI,這一切都非常簡單 - 您可以在 GUI 上工作,對其進行最佳化並將完整功能的最新版本儲存為新的表腳本。 注意到隱含的“最好不要使用應用程式生成器來執行此操作” - 是否存在無法透過應用程式生成器實現的功能?
我注意到一個缺點:
對於不只是平台物件的簡單集合的儀表板,必須添加一些 JSL 程式碼來自動化 GUI。
調試此 JSL 程式碼感覺比在 JSL 編輯器中複雜得多。
也許我只是不知道怎麼做才是正確的。
Application Builder 使用者是否對如何偵錯部分程式碼有任何建議,例如從 Application Builder 啟動應用程式並在 JSL 編輯器中並行運行程式碼片段以檢查它們的作用? 是否有一個框架如何存取應用程式的名稱空間,以便我可以在 JSL 編輯器中使用程式碼片段而不進行任何更改?