Spotfire 개발자 가이드

1. Spotfire Extension 기본 실습

1.1 환경 구성(Spotfire 10.10 기준)

구성 항목 호환 버전
운영체제 Windows 7, Windows 8, Windows 10
Visual Studio 2013, 2015, 2017, 2019
.NET Framework 4.5.x , 4.6.x, 4.7.x, 4.8.x
제품 설치 Spotfire Server 및 Spotfire Analyst Clinet 가 설치 되어 있어야함

1.2 다운로드 항목

다운로드 사이트 : edelivery.tibco.com

항목 설명
개발자용 SDK TIB_sfire_dev_10.10.2_win.zip
Spotfire 서버 설치 바이너리 TIB_sfire_server_10.10.3_win.zip
Sptofire 확장팩 바이너리 TIB_sfire_deploy_10.10.2.zip

spotfire-download-item

1.3 개발자 SDK Template 을 이용한 프로젝트 생성

  • TIB_sfire_dev_10.10.2_win\SDK\Templates 아래의 "TIBCO Spotfire Extension VS"를 복사해서 Visual Studio Templates 디렉토리로 복사

sdk_copy

  • 파일새로만들기프로젝트 or ctr+shift+N

template_project

  • 그림과 같이 TIBCO Spotfire Extension_VS 를 선택 하고 아래 값을 입력 한뒤 확인 클릭
항목
이름 QuickStartExample
솔루션 이름 QuickStartExample

1.4 프로젝트 설정

1.4.1 빌드 설정

솔루션 탐색기 에서 오른쪽 마우스 버튼을 눌러 속성 을 선택 합니다.

solution_exp_property


빌드출력경로 : <프로젝트>\bin\debug 로 설정하되, 없으면 디렉토리를 만들어야함

project_property_build


1.4.2 디버그 설정

빌드시작 외부 프로그램 :

start_out_program

1.4.3 참조 경로 설정

참조 경로 에 SDK 의 Binaries 디렉토리를 넣어줍니다.

reference_path

1.5 잘못된 참조 삭제 및 신규 참조 추가

1.5.1 참조 제거

아래와 같이 "솔루션 탐색기" 에서 참조 링크가 깨진 것들을 일괄 삭제 합니다.

delete_reference

1.5.2 참조 추가

참조 오른쪽 마우스를 클릭하여 참조추가 를 클릭 합니다.

add_reference

팝업 창이 뜨면 아래와 같이 3개 파일을 선택 하여 추가 를 클릭 합니다.

파일명 설명
Spotfire.Dxp.Application.dll 애플리케이션 DLL
Spotfire.Dxp.Data.dll 데이터 DLL
Spotfire.Dxp.Framework.dll 프레임워크 DLL

add_reference2

추가한후 3가지 DLL 모두를 선택 한뒤 확인 을 클릭 합니다.

reference_add_complete

1.6 소스 코드 작성

1.6.1 SampleApplicationToolAddIn 작성

"솔루션 탐색기" 에서 CustomAddIn.cs 파일을 더블클릭 합니다.

CustomAddIncs

아래와 같이 SampleApplicationTooAddIn 클래스를 작성 합니다.

// CustomAddIn.cs
using System;
using System.Windows.Forms;

using Spotfire.Dxp.Application;
using Spotfire.Dxp.Application.Extension;

namespace QuickStartExample
{
    public class SampleApplicationToolAddIn : AddIn
    {
        protected override void RegisterTools(ToolRegistrar registrar)
        {
            base.RegisterTools(registrar);

            CustomMenuGroup menuGroup = new CustomMenuGroup("AddINPlus");

            registrar.Register(new SampleApplicationTool(), menuGroup);
        }
    }
}

1.6.2 클래스 추가

프로젝트 클래스 추가 를 클릭 합니다.

QuickStart_class_add

"클래스" 를 선택하고 "이름" 에는 myCustomTool.cs 를 입력 합니다.

mycustom_tool_add

아래와 같이 SampleApplicationTool 클래스를 작성 합니다.

// myCustomTool.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Spotfire.Dxp.Application;  // 추가
using Spotfire.Dxp.Application.Extension; //추가

namespace QuickStartExample
{
    public class SampleApplicationTool : CustomTool<AnalysisApplication>
    {
        public SampleApplicationTool()
            : base("&Open \"C:\\Data.dxp\"")
        {
        }
        protected override void ExecuteCore(AnalysisApplication context)
        {
            context.Open(@"C:\Data.dxp");
        }
    }
}

1.7 패키지 빌더 사용

1.7.1 Configuration 추가

다운받은 개발자 SDK의 패키지 빌더 디렉토리로 이동합니다. [TIB_sfire_dev_10.10.2_win\SDK\Package Builder]

  • Spotfire.Dxp.PackageBuilder 를 실행 합니다.

package_builder_start

  • ManageAdd→ "QuickStart" 입력 → OK 로 신규 Configuration 을 생성 합니다.

package_config1

1.7.2 Spotfire Distribution 추가 하기

  • FileAdd TIBCO Spotfire Distribution 클릭

add_distribution

  • Spotfire 가 설치된 디렉토리를 선택 하고 폴더 선택 을 클릭 합니다.

select_folder_for_package_manager

  • 아래와 같이 환경이 추가 되었습니다.

add_distribution_env_list

1.7.3 빌드 추가 하기

AddBrowse → 빌드대상(프로젝트) 폴더 선택 → 폴더선택

QuickStart 소스의 위치는 일반적으로 C:\Users<user-name>\source\repos\ 아래에 있습니다.

Build_add

  • Next 를 클릭 합니다.

add_project_next

  • module.xml 생성을 선택하고 Next 를 클릭 합니다.

module_create

  • 프로젝트 이름과 버전을 기록 한뒤 Finish 클 클릭 합니다.

build_target_selection

  • 프로젝트 이름을 작성 합니다.

ProjectInfo

  • Run Configuration 을 클릭 합니다.

all_done

1.8 결과 학인

1234

2. 확장 패널 추가 프로젝트

2.1 프로젝트 생성

TIBCO Spotfire Extension_VS로 프로젝트를 생성 합니다.

dp_new_project

항목
프로젝트 이름 DockedPanel
솔루션 이름 DockedPanel

2.2 참조 제거 및 신규 참조 추가

2.2.1 참조 제거

delete_reference

2.2.2 참조 추가

dp_add_reference

2.3 프로젝트 설정

2.3.1 빌드 설정

  • 솔루션 탐색기 에서 오른쪽 마우스 버튼을 눌러 속성 을 선택 합니다.

solution_exp_property

  • 빌드출력경로 : <프로젝트>\bin\debug 로 설정하되, 없으면 디렉토리를 만들어야함

project_property_build

2.3.2 디브그 설정

  • 빌드시작 외부 프로그램 :

start_out_program

2.3.3 참조 경로 설정

  • 참조 경로 에 SDK 의 Binaries 디렉토리를 넣어줍니다.

reference_path

2.3.4 Icon 설정

dp_icon_add

2.4 소스 코드 작성

  • 프로젝트클래스추가클래스 → DockedPanel.cs 생성
  • 프로젝트클래스추가클래스 → DockedPanelFactory.cs 생성
  • 프로젝트클래스추가사용자정의 컨트롤 → DockedPanelUI.cs 생성

2.4.1 CustomAddIn.cs 작성

using System;
using System.Windows.Forms;

using Spotfire.Dxp.Application;
using Spotfire.Dxp.Application.Extension;

namespace DockedPanel
{
    public sealed class CustomAddIn : AddIn
    {
        protected override void RegisterViews(ViewRegistrar registrar)
        {
            base.RegisterViews(registrar);
            registrar.Register(typeof(Control), typeof(DockedPanel), typeof(DockedPanelUI));
        }

        protected override void RegisterPanels(AddIn.PanelRegistrar registrar)
        {
            base.RegisterPanels(registrar);
            registrar.Register(new DockedPanelFactory());
        }
    }
}

2.4.2 DockedPanel.cs 작성

프로젝트 클래스 추가 → DockedPanel.cs 생성

using System;
using Spotfire.Dxp.Application.Extension;

namespace DockedPanelProject
{
    public class DockedPanel : CustomPanel
    {
        public DockedPanel()
            : base()
        { }
    }
}

2.4.3 DockedPanelFactory.cs 작성

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using DockedPanelProject.Properties;
using Spotfire.Dxp.Application.Extension;
using Spotfire.Dxp.Application.Layout;

namespace DockedPanelProject
{
    class DockedPanelFactory : CustomPanelFactory<DockedPanel>
    {
        // Identifier 를 파라메터로 전달하고, 패널의 위치와 아이콘을 설저앻 줍니다.
        public DockedPanelFactory()
               : base(FirstProjectIdentifiers.FirstProjectPanel,
                       Resources.Icon.ToBitmap(),
                       new PanelPlacement(PanelRegion.Left, 3, false), null)
        {
            // Empty
        }
        protected override DockedPanel CreateCore(IServiceProvider context)
        {
            return new DockedPanel();
        }
    }
}

2.4.4 DockedPanelUI.cs 작성

  • Panel 디자인

dp_panel_design

  • Panel 소스

UI 를 더블 클릭해서 아래와 같이 수정 합니다.

using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DockedPanelProject
{
    public partial class DockedPanelUI : UserControl
    {
        private DockedPanel panel;

        public DockedPanelUI()
        {
            InitializeComponent();
        }
       // 패널을 파라메터로 받는 생성자를 추가로 작성 합니다.
        public DockedPanelUI(DockedPanel panel) : this()
        {
            this.panel = panel;
            InitializeComponent();
        }

        private void DockedPanelUI_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
        }

        private void label1_Click(object sender, EventArgs e)
        {
        }
    }
}

소스코드를 모두 작성 한 다음 패키지 빌더를 이용해 테스트 합니다.

2.5 프로젝트 결과

dp_last_output

3. 패널에 파일 열기 기능 추가

3.1 UI 수정

3.1.1 UI 추가 수정 및 추가

  • Button 도구를 추가 하고 Text 를 Open 으로 변경 합니다.

dp_open_panel_property

3.1.2 파일 다이얼 로그 추가

dp_createtable_openfiledialog

3.2 소스 추가 생성

3.2.1 DockedPanel.cs 코드 추가

// 3.2 추가 라이브러리
using System;
using Spotfire.Dxp.Application.Extension;
// 3.3 추가 라이브러리
using Spotfire.Dxp.Data;
using Spotfire.Dxp.Data.Import;
using Spotfire.Dxp.Application;
using Spotfire.Dxp.Framework.Persistence;
using System.Runtime.Serialization;
using System.IO;
using System.Reflection;


namespace DockedPanelProject
{
    // Serialization 설정 추가
    [Serializable]
    [PersistenceVersion(1, 0)]
    // 추가 END
    public class DockedPanel : CustomPanel
    {
        public DockedPanel()
            : base()
        { }
        // createDataTable 함수 추가
        internal void createDataTable(String Path)
        {
            AnalysisApplication mainApp = GetService<AnalysisApplication>();
            DataSource TableDS = new TextFileDataSource(GetAsResourcePath(Path), null);

            DataTable myDataTable = mainApp.Document.Data.Tables.Add("My Data Table", TableDS);
        }
        // 추가 END
        private TService GetService<TService>()
        {
            return (TService)this.GetService(typeof(TService));
        }

        private string GetAsResourcePath(string resourceFileName)
        {
            string executionDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string resourceDirectory = Path.Combine(executionDirectory, "Resources");

            return Path.Combine(resourceDirectory, resourceFileName);
        }
        // Serializable 추가
        #region ISerializable Members
        public DockedPanel(SerializationInfo info, StreamingContext context)
            : base(info, context)
        { }
        #endregion ISerializable Members
        // 추가 END
    }
}

3.2.2 DockedPanelUI.cs 코드 추가

DockedPanelUI.cs 에서 Open 을 더블 클릭해서 아래와 같이 추가 합니다.

private void button1_Click(object sender, EventArgs e)
{
            String file_path = null;
            openFileDialog1.InitialDirectory = "C:\\";
            if(openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                file_path = openFileDialog1.FileName;
                this.panel.createDataTable(file_path);
            }
}

3.3 결과 확인

data_add_result

4. Panel에 BoxPlot 생성 기능 추가

4.1 DockedPanel.cs 에 소스 추가

using Spotfire.Dxp.Application.Visuals;

internal void createBarChart()
{
     AnalysisApplication mainApp = GetService<AnalysisApplication>();
     BarChart barChart1 = mainApp.Document.ActivePageReference.Visuals.AddNew<BarChart>();
     //BarChart barChart1 = mainApp.Document.Pages[pageCount-1].Visuals.AddNew<BarChart>();
     barChart1.ApplyUserPreferences();
     barChart1.AutoConfigure();
     barChart1.YAxis.Expression = "Avg([Hits])";
     barChart1.XAxis.Expression = "<Team>";
     barChart1.ColorAxis.Expression = "<Team>";
     barChart1.BarWidth = 70;
     barChart1.Title = "Sample Bar Chart";
}

4.2 DockedPanelUI.cs 에 소스 추가

private void button2_Click(object sender, EventArgs e)
{
     this.panel.createBarChart();
}

4.3 결과 확인

dp_create_barchart

5. 패널에 계산된 컬럼 추가 기능 구현

5.1. DockedPanelUI 생성

아래와 같이 **Calculated Column" 버튼을 추가 합니다.

dp_cal_col_create_ui

5.2 DockedPanel.cs 코드 추가

using Spotfire.Dxp.Application.Visuals;

internal void createColumns()
{
      AnalysisApplication mainApp = GetService<AnalysisApplication>();

      //신규 계산된 컬럼 생성
      mainApp.Document.ActiveDataTableReference.Columns.AddCalculatedColumn("My Calculated Column", "Sqrt([Hits])");

      //Hierarchy Column 추가시
      //List<string> levelExpressions = new List<string>(new string[] { "League", "Team" });
      //HierarchyDefinition definition = new HierarchyDefinition(HierarchyNestingMode.Nested, levelExpressions);
      //cols.AddHierarchyColumn("Team Hierarchy", definition);

       //Binned Column 추가시
       //string binExpression = "binbyevenintervals([Hits], 12)";
       //cols.AddCalculatedColumn("binned hits", binExpression);

 }

5.3. DockedPanelUI.cs 코드 추가

private void button3_Click(object sender, EventArgs e)
{
       this.panel.createColumns();
}

5.4 결과 확인

Calculated Column 을 클릭한뒤, Data Canvas 로 이동해서 테이블을 확인하면 아래와 같이 컬럼이 추가 된것을 확인 할 수 있습니다.

dp_cal_col_result