definePageLayout()을 사용하고, 이미 존재하는 레이아웃(사용자 소유 또는 표준 Twenty 레이아웃)에 단일 탭을 추가하려면 definePageLayoutTab()을 사용합니다.
definePageLayout
전체 상세 페이지를 소유할 때 사용합니다. 일반적으로 직접 정의한 사용자 지정 객체에 해당합니다.src/page-layouts/example-record-page-layout.ts
핵심 요점
type은'RECORD_INDEX','RECORD_PAGE','DASHBOARD','STANDALONE_PAGE'중 하나입니다. ‘RECORD_PAGE’를 사용하면 특정 객체의 상세 보기를 사용자 지정할 수 있습니다.objectUniversalIdentifier는 이 레이아웃이 적용되는 객체를 지정합니다.- 각
tab은title,position,layoutMode를 사용해 페이지의 섹션을 정의합니다. 레코드 페이지와 독립형 페이지에는VERTICAL_LIST를, 대시보드에는GRID를, 탭 뷰포트를 채워야 하는 단일 위젯에는CANVAS를 사용합니다.VERTICAL_LIST탭은 위젯을 세로로 쌓습니다. 타임라인, 파일, 메모, 작업, 워크플로와 같이 자체 스크롤을 관리하는 기본 제공 위젯은 하나의 뷰포트를 채우며, 필드, 프론트 컴포넌트, 그래프 및 기타 콘텐츠 크기에 맞는 위젯은 콘텐츠 높이 또는 구성된 높이로 렌더링됩니다.GRID탭은 항상 12열 그리드에서 위젯을 카드로 배치합니다.CANVAS위젯에는 명시적 위치가 없습니다. 캔버스 탭에 여러 위젯이 포함된 경우, 뷰포트를 채우는 대신 콘텐츠 높이로 렌더링됩니다. layoutMode를 명시적으로 설정하세요. 이를 생략하면STANDALONE_PAGE에서는VERTICAL_LIST가, 그 외의 경우에는GRID가 기본값으로 설정되는데, 이는 레코드 페이지에서는 거의 원하지 않는 동작입니다.- 탭 내부의 각
widget은 front component, 관계 목록 또는 기타 기본 제공 위젯 타입을 렌더링할 수 있습니다. FRONT_COMPONENT위젯은 동일한 앱의 명령 메뉴 항목 범용 식별자로 이루어진 순서 있는 배열로headerCommandMenuItemUniversalIdentifiers를 설정할 수 있습니다. 이러한 작업은 위젯 카드 헤더에 아이콘 버튼으로 표시되며, 명령 수준의 가용성 및 권한 검사를 유지합니다. 식별자는 고유해야 하며 앱이 설치될 때 확인 가능해야 합니다.- 탭의
position은 탭의 순서를 제어합니다. 값을 더 높게 설정하면(예: 50) 기본 탭 뒤에 사용자 지정 탭을 배치할 수 있습니다.
필드 위젯
FIELD 위젯은 레코드의 하나의 필드를 렌더링합니다. 관계 필드의 경우 관련 레코드 목록을 포함할 수도 있습니다:
fieldMetadataId는 레이아웃의 오브젝트에 있는 필드의 범용 식별자를 받습니다.fieldDisplayMode는'FIELD','CARD','EDITOR','VIEW','TABLE'중 하나입니다.TABLE은 일대다 관계 필드의 레코드를 나열하는 뷰를 포함합니다.nestedRelationFieldMetadataId는 선택 사항이며, 관계 대상 객체에 있는 일대다 관계 필드의 범용 식별자를 받습니다. 이를 통해 두 번의 관계 홉을 거친 레코드를 나열할 수 있습니다(예: Company 페이지에서 해당 회사 사람들의 Opportunity 레코드를 나열하거나, Person 페이지에서 해당 사람의 회사의 Opportunity 레코드를 나열하는 경우). 첫 번째 홉은 일대다 또는 다대일 관계 필드일 수 있지만, 두 번째 홉은 반드시 일대다 관계여야 합니다(junction 관계는 지원되지 않습니다). 또한fieldDisplayMode: 'TABLE'이 필요하며, 다른 어떤 display mode와 결합하면 유효성 검사 오류가 발생합니다. 중첩 위젯은 항상 임베디드 뷰로 렌더링되기 때문입니다.
definePageLayoutTab
기존 레이아웃에 탭만 추가하려는 경우에 사용합니다. 예를 들어, 표준 Company 페이지에 분석 탭을 추가하거나, 자신이 소유한 객체의 레이아웃에 AI 요약 탭을 연결하는 경우입니다.src/page-layouts/example-extra-tab.ts
핵심 요점
-
pageLayoutUniversalIdentifier는 필수이며, 설치 시점에 이미 존재하는 페이지 레이아웃을 가리켜야 합니다. 이는 표준 Twenty 레이아웃이거나, 사용자의 앱에서 정의한 레이아웃일 수 있습니다. 현재는 설치된 다른 앱이 소유한 레이아웃에 대한 크로스 앱 참조는 지원되지 않습니다. 상위 레이아웃이 없으면, 명확한 유효성 검사 오류와 함께 설치가 실패합니다. -
표준 Twenty 레이아웃의 경우
twenty-sdk/define에서 식별자를 가져옵니다:각 레이아웃 항목은tabs와 해당widgets도 노출하므로, 모든 수준을 참조할 수 있습니다:짧은 별칭인STANDARD_PAGE_LAYOUT도 사용할 수 있습니다: -
widgets는 이 탭에만 범위가 국한됩니다.definePageLayout에 인라인으로 정의된 위젯과 완전히 동일한 방식으로 front components, 뷰 등을 참조합니다. -
position은 대상 레이아웃의 기존 탭과의 순서를 제어합니다. 기본 제공 탭을 기준으로 원하는 위치에 탭이 놓이도록 값을 선택하세요. -
기존 레이아웃에만 추가하려는 경우에는
definePageLayout대신 이것을 사용하세요. 전체 레이아웃을 소유하는 경우에는definePageLayout을 사용하세요.