<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,
是否可以編寫JSL腳本來監視JMP使用情況。
例如,您是否可以編寫一個在打開JMP時自動啟動的代碼?
假設有多個用戶,理想情況下你會想看到:(1)誰在使用該工具;(2)他們使用它的頻率和持續時間?
或者即使那是不可能的,只要一個腳本會在我們小組中的某個人打開JMP時自動向我發送電子郵件?
提前致謝
謝謝你 - 你在這裡給了一些好建議。想想我可能會使用try()命令!
如果您將跟踪安裝為加載項,則可以使用退出腳本。請參閱腳本手冊“指定啟動和退出腳本(可選)”的第526頁。
使用共享表進行跟踪時的一個注意事項 - 即2個用戶嘗試打開文件時的用戶爭用。更具體地說,user1打開它 - 然後user2啟動並嘗試打開它。有兩種方法可以解決這個問題:
- 在整個腳本周圍放一個try()!您將失去對user2的跟踪,但user2不會出錯。
- 鎖定文件 - 在打開JMP表之前,user1創建一個“lock.txt”文件,該文件可以為空。 當User2啟動時,腳本首先檢查是否存在lock.txt - 如果是abscent,則創建它並打開JMP表。 如果存在lock.txt,則1)等待幾秒鐘再試一次,或者2)乾淨地退出腳本而不嘗試日誌啟動信息。 user1完成更新JMP數據表後,user1刪除lock.txt文件。 使用此方法可以獲得的問題是lock.txt文件持久存儲在共享目錄中而不會被刪除 - 例如,如果user1在lock.txt被刪除之前崩潰,則會發生這種情況。
- 您還可能在JMP表打開時捕獲錯誤而不是使用鎖定文件。如果後續表操作需要很長時間,則鎖定文件很好。您的JMP跟踪文件的大小將穩步增長,並且每次用戶都需要更長時間才能打開。如果您在短暫延遲後捕獲錯誤並重試,請確保放置計數器和最大重試次數 - 否則使用可能會卡住等待對於永遠不可用的文件。
- 登錄1文件的另一種方法是登錄多個文件。當用戶啟動JMP時,他會創建一個JMP表 - 其文件名包含日期時間和用戶名。然後,您需要編寫一個腳本來讀取所有這些1行JMP表並將它們附加到1個大文件中。
我還看到通過借用互聯網上廣告商的方法來完成用戶跟踪 - 即網絡信標。您可以使用web()打開網頁。
最後,我建議您發布“隱私政策”,讓用戶知道他們正在監控他們的使用情況,正在收集哪些數據以及如何使用這些數據。如果將來數據的使用發生變化,請發布修訂後的“隱私政策”,說明數據的新用途。
我不知道如何做到這一點,但它不是我試圖得到的東西。
我同意klaus819,從管理員的角度來看,有非JMP方法可用於跟踪軟件安裝和軟件使用。
在JMP內部,除了發送電子郵件之外還有其他一些選項。我最近玩的是使用JMP啟動腳本來跟踪我自己的JMP使用情況。有關如何執行此操作的詳細信息,請參閱JMP腳本指南,位於第257頁左右。
下面的腳本適用於在Windows 7中運行的JMP10,其他操作系統或版本需要進行一些調整(參見上面的參考資料)。每次聲明JMP時,此腳本將在數據表中寫入新行。它的設置在沒有顯示的情況下運行。
我使用了另一個類似的腳本,其中“event”變量有另一個定義,腳本由Windows調度程序在指定的時間運行。在這種情況下,腳本只在我的筆記本電腦運行時運行,這也是我運行的代理。
該腳本依賴於具有特定列名的特定數據表。此表腳本包含在下面腳本的末尾。
//!
//“//!”在腳本的第一行上,腳本可以打開並運行而不顯示。
//打開此腳本時,它將運行,然後關閉。要打開它,要編輯它,在JMP Home Window文件列表中右鍵單擊它,然後//選擇“編輯”。
//筆記:
//此腳本打開一個名為Data1.jmp的文件。下表包含空表的腳本
//實際上,“log”文件將位於所有用戶都可以訪問的目錄中
//當任何用戶在此計算機上打開JMPon時,腳本將運行
//
//腳本必須具有以下名稱:jmpStartAdmin.jsl
//腳本可以位於Windows 7中的多個位置
// ref:腳本指南p.257(JMP 10)
//在此處保存腳本(假設此處安裝了JMP)C:\ ProgramData \ SAS \ JMP \ jmpStartAdmin.jsl
//如果已經存在jmpStartAdmin.jsl文件,那麼寫它可能不是一個好主意。
////////////////////////////////////////////////// //////劇本
名稱默認為此處(1);
////////第1步:獲取用戶名和ID(來自R. Lucas(謝謝))
//看 http://msdn2.microsoft.com/en-us/library/ms724435.aspx
NameUnknown = 0;
NameFullyQualifiedDN = 1;
NameSamCompatible = 2;
NameDisplay = 3;
NameUniqueId = 6;
NameCanonical = 7;
NameUserPrincipal = 8;
NameCanonicalEx = 9;
NameServicePrincipal = 10;
NameDnsDomain = 12;
securDll =加載DLL(“Secur32.dll”,AutoDeclare(false));
securDLL << DeclareFunction(
“GetUserNameExW”
Arg(Int32),//名稱格式(使用上面的代碼)
Arg(UnicodeString(80),輸出),//名稱緩衝區
Arg(UInt32,更新)//緩衝區長度
);
UserName =“”;
Userid =“”;
NameLen = 80;
securDLL << GetUserNameExW(NameDisplay,UserName,NameLen);
securDLL << GetUserNameExW(NameSamCompatible,Userid,NameLen);
顯示(UserName);
顯示(Userid);
ver = JMP Version();
/////////第2步:打開要添加信息的文件
//注意:您必須為數據表的位置添加自己的文件路徑
dt = open(“C:\ file path \ Data1.jmp”,不可見); //隱形參數將其隱藏在用戶之外。
////////第3步:將信息添加到數據表中
dt << AddRows({Col1 = today(),Event =“Start Up”,:name(“User Name”)= UserName,UserID = Userid,Version = ver});
////////第4步:關閉日誌數據表
close(dt,save(“C:\ file path \ Data1.jmp”));
//出口();這會在腳本運行後立即關閉(退出)JMP
//如果這個腳本是用Windows調度程序運行的話
//是一個方便的步驟,但在這種情況下,它真的很煩人。
////////////////////////////////////////////////// /////////////////腳本結束
//這是“Data1.jmp”的表腳本,運行它來創建初始的空數據表
//然後將其保存為文件路徑,以便腳本可以使用它。
/ *
新表(“Data1”,
添加行(0),
新欄目(“TimeStamp”,
數字,
連續,
格式(“m / d / yh:m:s”,23,0),
輸入格式(“m / d / yh:m:s”,0),
設定值([])
)
新列(“事件”,字符,標稱,設置值({})),
新列(“用戶名”,字符,標稱,設置選定,設置值({})),
新列(“UserID”,字符,標稱,設置值({})),
新欄目(“版本”,
數字,
連續,
格式(“最佳”,12),
設定值([])
)
新欄目(“日期”,
數字,
連續,
格式(“m / d / y”,12),
輸入格式(“m / d / y”),
公式(:TimeStamp - 時間(:TimeStamp))
)
新專欄(“完成任務的持續時間”,
數字,
連續,
格式(“hr:m”,12),
輸入格式(“hr:m”),
公式(時間(:TimeStamp - :目標時間))
)
新欄目(“目標時間”,
數字,
連續,
格式(“h:m”,8),
輸入格式(“h:m”),
設定值([])
)
新欄目(“星期幾”,
數字,
連續,
格式(“最佳”,12),
公式(星期幾(:TimeStamp))
)
)
我在JMP網站上發現了這個問題。我安裝了64位JMP 10,但我的Outlook是32位。他們顯然需要逐位匹配

我很抱歉,但我認為我不能在這方面提供太多幫助。也許Outlook以典型的Microsoft方式擁有一系列默認啟用的安全措施,這些措施阻止了與JMP的通信。嘗試查看是否有任何相關的Outlook安全設置或通常可以放寬。
非常感謝您的回复。我使用了上面的代碼,但很難收到要發送的電子郵件。
然後我通過運行腳本來使用以下格式發送郵件來簡化代碼:
郵件(” john.doe@company.com “,”主題“,”消息“,)
我一直收到以下回复:

我使用Microsoft Outlook。這裡有什麼問題?
這聽起來好像您可能在終端服務器環境中擁有用戶。 那是對的嗎?最簡單的方法是編寫一個在計算機啟動時啟動的vbscript。 這只會睡覺,直到某人啟動jmp並可以向您發送電子郵件或寫入日誌。 根據經驗,我建議寫日誌。 你真的不想讓自己像那樣被垃圾郵件。 還有關於您可能想要收集的用戶會話的其他信息。
您可以擁有一個在JMP啟動時自動運行的jsl腳本。查看JMP腳本指南第259頁(JMP 10)。
每次有人啟動JMP時,下面的代碼段都應發送包含用戶和時間信息的郵件。該腳本必須命名為jslStart.jsl並本地放在C:\ ProgramData \ SAS \ JMP \中(可能在Windows版本中有所不同,請查看腳本指南)。
但是,我不知道退出JMP激活的命令。操作系統解決方案可能更強大。我沒有測試下面的腳本,因為我使用JMP for Macintosh。
//使用用戶名和開始時間的信息啟動JMP時發送郵件
如果 ( 主持人是 ( 視窗 ) ,
郵件 (
“ to@me.com “ ,
“用戶” || 字 ( 3 ,獲取默認目錄 () , “/” ) || “運行JMP” ,
“用戶” || 字 ( 3 ,獲取默認目錄 () , “/” ) || “已開始JMP會議” ||
格式 ( 今天 () , “mdy hm” ) || “。”
) ,
“郵件僅適用於Windows。”
) ;
是的,這是在Windows上運行。你能告訴我怎麼做嗎?!
如果這在Windows系統上運行,則很容易實現。 我不確定這對其他操作系統有多困難。