【问题标题】:How to safely use a tempfile in a Spotfire IronPython script for web use?如何在 Spotfire IronPython 脚本中安全地使用临时文件以供 Web 使用?
【发布时间】:2020-02-27 19:18:15
【问题描述】:

我正在尝试将 Spotfire 可视化导出到 xlsx 文件。为了导出数据,我需要能够将可视化的数据写入临时文件。 IronPython(2.7.7) 脚本在作为 Spotfire 桌面应用程序运行时有效,因为它使用本地计算机的临时文件位置。但是,它在 Web 上不起作用,因为该脚本无权写入 Path.GetTempFileName() 返回的服务器临时文件位置。

如何通过脚本安全地写入临时文件以在网络中使用?

脚本:

from System.IO import Path, File, StreamWriter
from Spotfire.Dxp.Application.Visuals import TablePlot

tf = Path.GetTempFileName()
writer = StreamWriter(tf)

# visTable is a script parameter pointing to a TablePlot
visTable.As[TablePlot]().ExportText(writer)

在网页中运行时出错:

Could not perform action 'write_to_file'.

Could not execute script 'write_to_file': The directory name is invalid.


   at Spotfire.Dxp.Application.Scripting.ScriptService.Execute(ScriptDefinition script, Dictionary`2 scope, InternalLibraryManager internalLibraryManager, NotificationService notificationService)
   at Spotfire.Dxp.Application.Scripting.ScriptManager.<>c__DisplayClass8_0.<ExecuteScript>b__0()
   at Spotfire.Dxp.Framework.Commands.CommandHistory.Transaction(Executor executor, Boolean visible, Boolean sticky, Guid stickyGuid, Boolean isHighlight)
   at Spotfire.Dxp.Framework.Commands.CommandHistory.Transaction(String displayName, Executor executor)
   at Spotfire.Dxp.Application.Scripting.ManagedScript.Execute(Dictionary`2 environment)
   at Spotfire.Dxp.Application.HtmlTextAreaControls.ActionControl.ModifyCore(Object value)
   at Spotfire.Dxp.Application.Visuals.HtmlTextArea.InteractWithControl(String id, Action`1 interaction)

IronPython 版本:2.7.7

Spotfire 版本:10.3.2.8

编辑:内置的右键单击导出功能不是一个选项,因为最终目标是注入我公司的合规信息。

【问题讨论】:

    标签: ironpython spotfire


    【解决方案1】:

    您可以将临时文件位置设置为 Spotfire 服务器和用户都可以访问的网络驱动器。

    我最好的建议是让用户能够右键单击视觉对象来下载表格,因为这是最简单的方法并且不需要编码。

    我已经实现了编写一些脚本来将数据导出为 CSV,它可以在 Desktop Client 和 WebPlayer 中使用,但它是 R 、 Python 、 Javascript 和 HTML 的混杂。可以在这里找到:My Spotfire Wiki Post

    【讨论】:

    • 您是否在大型数据集(约 100 万行)上测试了您的 tableplot 到 html?如果是这样,性能会下降吗?
    • 是的,使用大型数据集时性能肯定会下降。因此,我最好的建议是授权用户右键单击并从表/交叉表视觉效果下载,因为 spotfire 显示导出的加载/处理。请不要忘记为我的答案投票。
    • 不幸的是,我需要在导出过程中添加合规信息,因此没有使用内置右键单击导出的原因。我将尝试使用周一工作时服务器和用户都可以访问的网络驱动器。
    • 明白了。这将是一个很好的开箱即用功能,可以将页眉或页脚信息添加到导出中。只有 PDF 报告具有该选项,但并不总是最好的共享格式。
    【解决方案2】:

    我使用 Spotfire Javascript API 在 HTML/ASPX 页面中呈现我的所有分析。所以当人们需要下载数据的时候,我设置了一个按钮来打开一个只显示表格的dxp页面,这样用户就可以右键点击下载。这种方法有助于在需要之前不显示数据。甚至 Javascript API 也没有导出到 CSV 或 EXCEL only PDF 、 Visual (picture) 、 Powerpoint 和 Reports (确定的 PDF 导出)

    https://community.tibco.com/wiki/tibco-spotfire-javascript-api-overview

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多