如何通过C# API调用Spotfire TERR执行R脚本?
对接TERR运行R脚本的C#实现方案(Spotfire Analyst 14.0)
核心思路
要直接运行R脚本并获取结果,需基于DataFunction和DataFunctionExecutor构建完整的TERR执行流程,而非使用表达式或聚合类。以下是具体实现步骤:
1. 引用必要程序集
确保项目引用以下Spotfire核心程序集:
Spotfire.Dxp.ApplicationSpotfire.Dxp.DataSpotfire.Dxp.Data.DataFunctions
2. 构建TERR数据函数并配置参数
创建TERR类型的DataFunction,定义R脚本内容、输入数据源映射,以及输出结果的结构(新表或计算列)。
using Spotfire.Dxp.Application; using Spotfire.Dxp.Data; using Spotfire.Dxp.Data.DataFunctions; // 获取当前文档上下文 Document activeDoc = Application.Document; DataFunctionEnvironment env = activeDoc.DataFunctionEnvironment; // 创建TERR数据函数 DataFunction terrFunction = DataFunction.Create(env, DataFunctionType.Terr); // 设置R脚本内容(示例:基于输入数据生成新列并输出结果表) string rScript = @" inputData <- InputData inputData$CalculatedColumn <- inputData$OriginalColumn * 1.5 OutputData <- inputData "; terrFunction.Script = rScript; // 配置输入数据源(假设已有名为"SourceTable"的数据表) DataTable sourceTable = activeDoc.Data.Tables["SourceTable"]; InputParameter inputParam = terrFunction.InputParameters["InputData"]; inputParam.DataReference = new DataTableReference(sourceTable); // 配置输出结果(指定输出为新数据表) OutputParameter outputParam = terrFunction.OutputParameters["OutputData"]; outputParam.DataReference = new NewDataTableReference("CalculatedResultTable");
3. 执行脚本并处理结果
使用DataFunctionExecutor执行配置好的函数,获取输出结果后,即可用你已有的代码将结果添加为新列或新表。
// 创建执行器并运行脚本 DataFunctionExecutor executor = new DataFunctionExecutor(env); DataFunctionExecutionResult result = executor.Execute(terrFunction); // 检查执行状态并处理结果 if (result.Status == DataFunctionExecutionStatus.Succeeded) { // 获取输出结果表 DataTable resultTable = activeDoc.Data.Tables["CalculatedResultTable"]; // 后续操作:将结果列添加到原表,或直接使用新表(此处复用你已有的代码逻辑) Column calculatedColumn = resultTable.Columns["CalculatedColumn"]; sourceTable.Columns.Add(calculatedColumn.Duplicate()); } else { // 捕获并抛出执行错误信息 string errorDetails = string.Join("\n", result.Messages.Where(m => m.Type == MessageType.Error).Select(m => m.Text)); throw new Exception($"TERR脚本执行失败:{errorDetails}"); }
4. 关键注意事项
- 参数命名一致性:R脚本中的输入输出变量名(如
InputData、OutputData)必须与InputParameters和OutputParameters中的键完全匹配。 - 权限验证:确保Spotfire文档允许运行数据函数,可在文档设置中检查"数据函数"相关权限配置。
- 数据类型兼容:输入数据表的列类型要与R脚本中的处理逻辑匹配,避免类型转换异常。
- 资源清理:若生成了临时中间表,执行完成后可按需删除,减少文档冗余。
内容的提问来源于stack exchange,提问作者KirkD-CO
相关产品推荐
相关产品推荐

