차트 신기능 개발[ A-Point ]
2024 . 08 . 05
권보미
01
레퍼런스 제품 분석
차트 in 포인트
웹 오피스 제품은 구글 슬라이드 제외 포인트 내 차트 기능 없음
포인트에서 차트 삽입할 때 참조할 데이터를 어떻게 나타낼 것인지가 관건
1
2
3
4
차트 삽입 누르면 셀 창이 따로
(1) Microsoft (설치용)
차트 삽입 누르면
드라이브 내에 스프레드시트 파일이
새롭게 생기며 해당 파일을 참조하도록 함.
디폴트 데이터와 디폴트 차트 생겨남.
해당 파일 수정 후 슬라이드로 돌아와서
업데이트 눌러야 업데이트 됨
(2) Google 슬라이드 (웹)
포인트 내 차트 기능 없음!
(3) Microsoft (웹), Synapoffice (웹)
A-Point도 와플쉘을 통해 새 창을 띄워 셀 데이터를 나타낼 수 있으므로
레퍼런스 제품 기준을 MS 설치용 파워포인트로 잡아 동작 분석하겠음!
UI 가이드가 나와있으면 그대로 적고 없는 부분은 파워포인트 참고 하겠음!!
01
동작 분석
동작 분석 - 런타임
1
2
3
4
리본 [삽입] 탭의 ‘차트’ 클릭시
‘차트 삽입’ dialog 등장
원하는 형식 선택하고 ‘확인’
01
동작 분석
동작 분석 - 런타임
1
2
3
4
미니셀과 함께 차트 등장
default 데이터 반영된 상태
ChartDataProvider에
하드코딩 되어있음.
01
동작 분석
동작 분석 - 런타임
1
2
3
4
미니셀 끄는법 (파워포인트)
(1) edit 영역을 누르거나 (2) 다른 슬라이드로 이동하거나
(3) 다른 차트를 선택하거나 (4) 보기 모드 변경하거나 해도??
==>> 한번 열린 미니셀은 잘 닫히지 않음;;;;;
፠ 슬라이드 ‘쇼’ 진행시 잠시 안 보이지만 나가면 보임 (가려져서 안 보이는 듯)
슬라이드 마스터 보기에서도
꿋꿋이 버티고 있는 미니셀..;;
꿋꿋
01
동작 분석
동작 분석 - 런타임
1
2
3
4
미니셀 껐다가 다시 켜려면
01
동작 분석
동작 분석 - 런타임
1
2
3
4
차트 2개 이상이어도
미니셀은 2개 이상 열 수 없음.
미니셀 열린 상태에서 다른 미니셀 열려고 시도하면
경고창 나와야 함!
미니셀은 나야
둘이 될 순 없어
01
동작 분석
동작 분석 - 런타임
1
2
3
4
-> 차트에 실시간 반영
-> 관련 데이터가
셀에 selection됨
양방향 소통
01
동작 분석
동작 분석 - 복사 / 붙여넣기
1
2
3
4
| 파워포인트 | A-Point |
미니셀 열려있을때 복/붙 | 차트만 복붙됨. 이전 미니셀만 계속 열려있음. | |
미니셀 닫혀있을때 복/붙 | 차트만 복붙됨. 미니셀 새로 열리지 않음. |
(A-Point UI Guideline 일부)
표현이 애매함.
상황 나눠야되고
01
동작 분석
동작 분석 - UNDO / REDO
1
2
3
4
(파워포인트)
미니셀 열고 닫는 건 UNDO / REDO로 처리 불가
삽입 후 미니셀 열린 상태에서 UNDO 시
⇒ 차트 삭제 X (아무 동작 안 일어남)
삽입 후 미니셀 닫고 UNDO 시
⇒ 차트 삭제 O
⇒ REDO 하면 차트만 등장
파워포인트와 같은 동작으로 갈지 의논해야할 듯!
UNDO / REDO로는
날 다룰 수 없어!!
01
동작 분석
동작 분석 - 로딩 / 저장
1
2
3
4
로딩
저장
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
스펙 분석
1
2
3
4
차트 파싱되어 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
스펙 분석
1
2
3
4
(서버팀에서 제공해준 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
스펙 분석
문서 연결 정보 -> client 어디에 담아둘지
1
2
3
4
복사/붙여넣기,
차트 생성 후 DB 저장 등
여러 관점에서 생각해보고
결정하기
공통팀과 논의할 예정
03
모듈단 회의 내용
DocumentContext의
OLEContainer
GraphicModel
or Node
VS
DB
Client
‘미니셀 데이터’ <-> ‘포인트 차트’ 메시지 통신
1
2
3
4
03
모듈단 회의 내용
서로 다른 document간
CMS 통신
통신 방향 : 양방향
미니셀 -> 차트 (데이터 값)
차트 -> 미니셀 (데이터 셀렉션)
공통팀과 논의할 예정
(MS 파워포인트 참고)
뷰모드 추가
1
2
3
4
03
모듈단 회의 내용
미니셀은 일반 문서와 달리 리본 필요 X
뷰모드 따로 필요할 듯.
useShell에서 정보 받아서 isSubApp 판단
레퍼런스 -> 앱 모드로 확장(전환) 가능한데
토핑 앱 새로 열기?? 추후 논의해야할 듯
공통팀과 논의할 예정
(A-Cell Guideline 미니셀 가이드 참고)
Dialog 켤 때
1
2
3
4
03
모듈단 회의 내용
1) 서브앱 종속
미니셀 창 밖을 벗어나게?
2) 서브앱 호출단계에서
차트model의 정보를
받아 dialog 형성
shellAPI 함수에 args로 어떻게 줄지 추후 생각해보기
(MS 파워포인트 참고)
리본 추가
1
2
3
4
03
모듈단 회의 내용
각 모듈팀 (포인트, 워드)에서 진행
차트 최초 삽입시 default data 필요함. 셀팀에서 제공해주면 Command Handler에서 호출해서 쓰면 됨.
테스트 코드에 있는 initData 참고해도 됨.
UNDO/REDO를 고려한 저장
1
2
3
4
03
모듈단 회의 내용
차트를 삽입했다가 UNDO로 삭제하면? -> 서브앱의 미니셀도 닫아야함.
런타임 내에서는 일단 스택으로 쌓아두기 (REDO할 수도 있으니까)
DB에 연결정보 문서 지우기 시점? -> 문서종료 시??
런타임 내에서 1) 다른 문서를 2) UNDO 가능하도록 새문서로 생성하는건 이번이 최초
공통팀과 논의할 예정
감사합니다.
2024 . 08 . 05
권보미