Есть ли способ добавить пользовательский ввод в таблицу в spotfire?

#r #ironpython #spotfire #spotfire-webplayer

#r #ironpython #spotfire #spotfire-webplayer

Вопрос:

У меня есть таблица Table1 с некоторой контекстной информацией в spotfire (dcube), которая имеет что-то вроде:

 Name      Food    Seating
XYZ     Seafood   outdoors
  

Я создал тестовую область с двумя кнопками Yes и No .
Пользователь выберет запись в Table1 и нажмет на одну из кнопок, и она должна заполнить другую таблицу Table2 добавленным столбцом Preference с выводом следующего вида:

 Name      Food    Seating   Preference
XYZ     Seafood   outdoor     Yes
  

Где значение для preference столбца заполняется в зависимости от того, нажал ли пользователь Yes или No . когда пользователь устанавливает предпочтение для другой записи в Table1 , она должна добавляться в виде строки в Table2 .

Возможно ли это через R или IronPython без использования TERR?

Ответ №1:

Для достижения этой цели вы можете использовать python и выполнять обратную запись в базу данных. Но я не уверен в хорошем / эффективном способе сделать это без внешнего источника данных.

 from Spotfire.Dxp.Data.Import import DatabaseDataSource
from Spotfire.Dxp.Data.Import import DatabaseDataSourceSettings
from Spotfire.Dxp.Application.Visuals import TablePlot
from Spotfire.Dxp.Application.Visuals import VisualTypeIdentifiers
from Spotfire.Dxp.Data import IndexSet
from Spotfire.Dxp.Data import RowSelection
from Spotfire.Dxp.Data import DataValueCursor
from Spotfire.Dxp.Data import DataSelection
from Spotfire.Dxp.Data import DataPropertyClass

rowCount = Document.ActiveDataTableReference.RowCount
rowsToInclude = IndexSet(rowCount,True)

#Get a cursor to the two columns we want to use. cursor1 is for the key column and cursor2 is for the column selected by the user input

cursor1 = DataValueCursor.Create[int](Document.ActiveDataTableReference.Columns["ProductID"])
cursor2 = DataValueCursor.CreateFormatted(Document.ActiveDataTableReference.Columns[whichCol])

#The following section will add a column to the database table using the name specified by the user. This assumes a column with this name does not already exist.

sqlCommand = "ALTER TABLE Products ADD "   colName   " varchar(50);"
dbsettings = DatabaseDataSourceSettings( "System.Data.SqlClient","Server=localhost;Database=myDB;UID=myuser;PWD=mypass",sqlCommand)
ds = DatabaseDataSource(dbsettings)
newDataTable = Document.Data.Tables.Add("temp",ds)
Document.Data.Tables.Remove(newDataTable)

#The following section will update the specified column in the database using the key column in the where clause
sqlStr=""
for  row in  Document.ActiveDataTableReference.GetRows(rowsToInclude,cursor1,cursor2):
   value1 = cursor1.CurrentValue
   value2 = cursor2.CurrentValue
   sqlStr = sqlStr    "UPDATE Products SET "   colName   "='"   value2   "' WHERE (ProductID="   str(value1)    ");"

sqlCommand = "UPDATE Products "    sqlStr   ";"
dbsettings = DatabaseDataSourceSettings( "System.Data.SqlClient",
"Server=localhost;Database=Northwind;UID=myuser;PWD=mypass",sqlStr)
ds = DatabaseDataSource(dbsettings)
newDataTable = Document.Data.Tables.Add("temp",ds)
Document.Data.Tables.Remove(newDataTable)
  

Приведенное выше от Tibco Spotfire Я использовал его в качестве шаблона для создания системы заявок в spotfire с использованием таблиц на сервере SQL.

Комментарии:

1. Спасибо за публикацию потенциального решения. Также хорошо, если я могу записать его во внешнюю базу данных. В вашем примере dbsettings это тот, где вы указываете строку подключения и аутентификацию во внешней базе данных?

2. Да, это правильно. Примером является подключение к базе данных SQL. (примером является база данных Northwind SQL, которая обычно используется в примерах для SQL)