1 of 21

차트 신기능 개발[ A-Point ]

2024 . 08 . 05

권보미

2 of 21

01

레퍼런스 제품 분석

차트 in 포인트

웹 오피스 제품은 구글 슬라이드 제외 포인트 내 차트 기능 없음

포인트에서 차트 삽입할 때 참조할 데이터를 어떻게 나타낼 것인지가 관건

1

2

3

4

차트 삽입 누르면 셀 창이 따로 

(1) Microsoft (설치용)

차트 삽입 누르면

드라이브 내에 스프레드시트 파일이

새롭게 생기며 해당 파일을 참조하도록 함.

디폴트 데이터와 디폴트 차트 생겨남.

해당 파일 수정 후 슬라이드로 돌아와서

업데이트 눌러야 업데이트 됨

(2) Google 슬라이드 (웹)

포인트 내 차트 기능 없음!

(3) Microsoft (웹), Synapoffice (웹)

A-Point도 와플쉘을 통해 새 창을 띄워 셀 데이터를 나타낼 수 있으므로

레퍼런스 제품 기준을 MS 설치용 파워포인트로 잡아 동작 분석하겠음!

UI 가이드가 나와있으면 그대로 적고 없는 부분은 파워포인트 참고 하겠음!!

3 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

리본 [삽입] 탭의 ‘차트’ 클릭시

‘차트 삽입’ dialog 등장

원하는 형식 선택하고 ‘확인’

4 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

미니셀과 함께 차트 등장

default 데이터 반영된 상태

ChartDataProvider에

하드코딩 되어있음.

5 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

미니셀 끄는법 (파워포인트)

  1. 셀 X표 눌러 직접 닫기
  2. 연결된 차트 삭제
  3. 문서 종료

(1) edit 영역을 누르거나 (2) 다른 슬라이드로 이동하거나

(3) 다른 차트를 선택하거나 (4) 보기 모드 변경하거나 해도??

==>> 한번 열린 미니셀은 잘 닫히지 않음;;;;;

፠ 슬라이드 ‘쇼’ 진행시 잠시 안 보이지만 나가면 보임 (가려져서 안 보이는 듯)

슬라이드 마스터 보기에서도

꿋꿋이 버티고 있는 미니셀..;;

꿋꿋

6 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

미니셀 껐다가 다시 켜려면

  1. 리본의 ‘데이터 선택’ 또는 ‘데이터 편집’ 클릭
  2. 차트 우클릭 contextMenu > 데이터 편집

7 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

차트 2개 이상이어도

미니셀은 2개 이상 열 수 없음.

미니셀 열린 상태에서 다른 미니셀 열려고 시도하면

경고창 나와야 함!

미니셀은 나야

둘이 될 순 없어

8 of 21

01

동작 분석

동작 분석 - 런타임

1

2

3

4

  1. 미니셀 데이터 수정시

-> 차트에 실시간 반영

  1. 차트 막대 클릭시

-> 관련 데이터가

셀에 selection됨

양방향 소통

9 of 21

01

동작 분석

동작 분석 - 복사 / 붙여넣기

1

2

3

4

파워포인트

A-Point

미니셀 열려있을때 복/붙

차트만 복붙됨.

이전 미니셀만 계속 열려있음.

미니셀 닫혀있을때 복/붙

차트만 복붙됨.

미니셀 새로 열리지 않음.

(A-Point UI Guideline 일부)

표현이 애매함.

  1. 미니셀 열려있을때/닫혀있을때

상황 나눠야되고

  1. 닫혀있을때 복붙하면 새로운 미니셀 호출한다는 건지 문의 필요!!

10 of 21

01

동작 분석

동작 분석 - UNDO / REDO

1

2

3

4

(파워포인트)

미니셀 열고 닫는 건 UNDO / REDO로 처리 불가

삽입 후 미니셀 열린 상태에서 UNDO 시

⇒ 차트 삭제 X (아무 동작 안 일어남)

삽입 후 미니셀 닫고 UNDO 시

⇒ 차트 삭제 O

⇒ REDO 하면 차트만 등장

파워포인트와 같은 동작으로 갈지 의논해야할 듯!

UNDO / REDO로는

날 다룰 수 없어!!

11 of 21

01

동작 분석

동작 분석 - 로딩 / 저장

1

2

3

4

로딩

  • 로딩할 때는 미니셀 안 열림

저장

  • 미니셀의 데이터 변경시 텍스트 바꾸고 엔터 쳐야 차트에 반영됨 (A-Cell도 마찬가지)
  • Ctrl + S 사용시 포인트의 차트 + 미니셀 데이터 한꺼번에 저장

12 of 21

embeddings

Microsoft_Excel___.xlsx

slide1.xml.rels

_rels

slides

slide1.xml

a:graphic

> a:graphicData

> c:chart 의 r:id="rId2"

Relationship의 Id="rId2",

Target="../charts/chart1.xml"

charts

chart1.xml.rels

_rels

chart1.xml

c:externalData의 r:id="rId3"

Relationship의 Id="rId3",

Target="../embeddings

/Microsoft_Excel___.xlsx"

(데이터 담긴 엑셀파일 원본)

(차트 데이터 담긴 곳)

1

2

3

4

OOXML 스펙 분석

02

스펙 분석

13 of 21

1

2

3

4

  1. <c:chart>를 만나면 rId로
  2. 같은 rId를 가진 relationship 찾아서 target과 현재 노드를 저장
  3. 저장해둔 정보를 꺼내서
  4. 노드를 parentNode로 셋해주고
  5. Target으로 inputSource를 찾아 파싱하도록 함

차트 파싱되어 DB에 OFFICE_CHART_ELEMENT 저장!!

SAS 수정사항​

slide1.xml.rels

_rels

slides

slide1.xml

a:graphic

> a:graphicData

> c:chart 의 r:id="rId2"

Relationship의 Id="rId2",

Target="../charts/chart1.xml"

charts

chart1.xml.rels

_rels

chart1.xml

c:externalData의 r:id="rId3"

Relationship의 Id="rId3",

Target="../embeddings

/Microsoft_Excel___.xlsx"

02

스펙 분석

14 of 21

1

2

3

4

  1. <c:externalData>를 만나면 rId로
  2. 같은 rId를 가진 relationship 찾아서 target 과 해당 파일 저장
  3. Target, 해당파일, 차트노드를
  4. OLEImportContainer의 맵에 저장

(서버팀에서 제공해준 API 사용)

원본 엑셀문서 DB에 저장!!

포인트 문서ID, 차트ID, 셀 문서 ID가

OLE_MAPPING_TB에 저장

SAS 수정사항​

embeddings

Microsoft_Excel___.xlsx

charts

chart1.xml.rels

_rels

chart1.xml

c:externalData의 r:id="rId3"

Relationship의 Id="rId3",

Target="../embeddings

/Microsoft_Excel___.xlsx"

02

스펙 분석

15 of 21

문서 연결 정보 -> client 어디에 담아둘지

1

2

3

4

복사/붙여넣기,

차트 생성 후 DB 저장 등

여러 관점에서 생각해보고

결정하기

공통팀과 논의할 예정

03

모듈단 회의 내용

DocumentContext의

OLEContainer

GraphicModel

or Node

VS

DB

Client

16 of 21

‘미니셀 데이터’ <-> ‘포인트 차트’ 메시지 통신

1

2

3

4

03

모듈단 회의 내용

서로 다른 document간

CMS 통신

통신 방향 : 양방향

미니셀 -> 차트 (데이터 값)

차트 -> 미니셀 (데이터 셀렉션)

공통팀과 논의할 예정

(MS 파워포인트 참고)

17 of 21

뷰모드 추가

1

2

3

4

03

모듈단 회의 내용

미니셀은 일반 문서와 달리 리본 필요 X

뷰모드 따로 필요할 듯.

useShell에서 정보 받아서 isSubApp 판단

레퍼런스 -> 앱 모드로 확장(전환) 가능한데

토핑 앱 새로 열기?? 추후 논의해야할 듯

공통팀과 논의할 예정

(A-Cell Guideline 미니셀 가이드 참고)

18 of 21

Dialog 켤 때

1

2

3

4

03

모듈단 회의 내용

1) 서브앱 종속

미니셀 창 밖을 벗어나게?

2) 서브앱 호출단계에서

차트model의 정보를

받아 dialog 형성

shellAPI 함수에 args로 어떻게 줄지 추후 생각해보기

(MS 파워포인트 참고)

19 of 21

리본 추가

1

2

3

4

03

모듈단 회의 내용

각 모듈팀 (포인트, 워드)에서 진행

차트 최초 삽입시 default data 필요함. 셀팀에서 제공해주면 Command Handler에서 호출해서 쓰면 됨.

테스트 코드에 있는 initData 참고해도 됨.

20 of 21

UNDO/REDO를 고려한 저장

1

2

3

4

03

모듈단 회의 내용

차트를 삽입했다가 UNDO로 삭제하면? -> 서브앱의 미니셀도 닫아야함.

런타임 내에서는 일단 스택으로 쌓아두기 (REDO할 수도 있으니까)

DB에 연결정보 문서 지우기 시점? -> 문서종료 시??

런타임 내에서 1) 다른 문서를 2) UNDO 가능하도록 새문서로 생성하는건 이번이 최초

공통팀과 논의할 예정

21 of 21

감사합니다.

2024 . 08 . 05

권보미