将查询生成器脚本(带有查询后脚本)集成到另一个脚本中你好,
我一直在使用查询生成器和图形生成器来组合一些脚本,这些脚本不断地从服务器提取数据、绘图并保存结果(在 JMP 13 中)。 最近,我一直在尝试将其中几个脚本绑定到一个脚本中,该脚本使用 Include() 一次运行所有脚本,效果很好。 我现在面临的问题是所有目录都已硬编码,我想使用类似: Get Default Directory() 的方法,以便可以将更广泛的脚本集合移动到其他计算机上。
不幸的是,我遇到了以下问题:
- 当在“查询后脚本”中使用 Get Default Directory() 时,无论此脚本保存在何处,它都会返回“/”。
- 将在查询后脚本中创建的数据表/图表保存到变量时,这些变量似乎不存在(或不可访问)外部
查询后脚本。
- 在查询后脚本之外创建的任何变量都不能在其中使用。
// Main File
directory = Get Default Directory();
fileNames = Files In Directory( directory );
For( iFile = 1, iFile <= N Items( fileNames ), iFile++,
filename = fileNames[iFile];
If( Ends With( filename, ".jsl" ),
Include( directory || script_folder || filename, invisible );
);
);
// Example Post-Query File section
gb = Graph Builder(
// graph details
);
// directory = Get Default Directory(); // Another method attempted
myPath = directory || "Report\";
myName = "Example";
fileName = myPath || myName || ".pptx";
myTemplate = directory || "Template.pptx";
Report( gb ) << save presentation( fileName, Template( myTemplate ), Outline Titles( "Hide" ) );
gb << close window;
Close All( data tables );
有什么想法吗?
数据存取分享和交流结果回复:将查询生成器脚本(带有查询后脚本)集成到另一个脚本中您应该考虑为您的应用程序创建一个插件。这将解决您的文件所在位置的问题。插件将别名与文件位置相关联。如果您的插件“别名”是 com.company.dept.mygreatapp,您可以参考如下文件:
include("$ADDIN_HOME(com.company.dept.mygreatapp)\DoSomethingGreat.jsl");回复:将查询生成器脚本(带有查询后脚本)集成到另一个脚本中您的帖子包含几个需要解决的问题:
- 如果您使用的是 Windows,则 Get Default Directory() 不会获取最后使用的目录。 如果您的程序提示,使用“设置默认目录”,则“获取默认目录”() 将返回该值。
- 我建议使用命名空间或全局关联数组来维护引用/变量。如果您的程序的多个实例在任何时候都在运行,请将其设置为匿名名称空间,以便它对于每个实例都是唯一的。对于关联数组, ::varRef_aa = Associative Array(); ::varRef_aa << 设置默认值(-9999);然后在脚本中指定 ::varRef_aa[a] = 1;使用命名空间的一个好处是,意外的 Clear Globals() 不会删除命名空间及其内容。
- 我不喜欢保存演示文稿,因为每个对象都保存在不同的页面上,并且几乎无法控制缩放。 我使用一个名为的免费外部程序P3ICLI 。 因此,通常,我会创建一个对于任务或报告而言唯一的输出目录,然后将所需的视图保存到该目录中的图片中。 我提出他的方法,因为通过保存你想要的输出,如幻灯片 1、2 等,你能使用“保存演示文稿”,方法是在 Directory() 中为该保存的目录创建文件列表,并在 for 循环中使用“保存演示文稿”将它们附加到 PPTX。 此外,通过保存图片,您可以保存多对象显示,并且在使用“保存演示文稿”时,所有项目都位于同一页面上。它提供了对 PPTX 报告的一些控制。
最后,是的,令人烦恼的是,打开数据库(connect_str,...)和创建数据库连接(connect_str)可以使用需要尾部斜杠的相同连接字符串,但New SQL Query()要求删除尾部斜杠并添加ODBC 前缀:如果连接到数据库。
//--- Method 3: New SQL Query platform script -----------------------------------
//remove the trailing slash on importpath
importnoslash = substr(connect_str, 1, length(connect_str)-1 );
nconnect = "ODBC:" || importnoslash
只是一些想法。
回复:将查询生成器脚本(带有查询后脚本)集成到另一个脚本中添加另一个示例:
dir = Get Default Directory();
query = Open( dir || "query.jmpquery", Private );
query << Run(
On Run Complete(
queryResult << // some function
a = 1
)
);
Write( a ); // variable is unknown
在 Run() 内部创建变量在 Run() 外部无法访问