<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系统上运行,则很容易实现。 我不确定这对其他操作系统有多困难。