레거시 객체 뷰의 앱, 미디어와 파일
앱과 파일 위젯은 기존 객체 뷰에 다른 앱, 미디어, 링크와 대화를 넣습니다. 위젯의 상태가 곧 온톨로지 속성으로 저장되는 것은 아닙니다. 댓글과 Linked Files의 연결은 객체 속성에 쓰지 않으며, 재사용할 업무 데이터나 첨부파일은 액션으로 저장해야 합니다.
더 복잡한 업무 화면을 새로 만들 때는 Workshop 기반 탭을 사용할 수 있습니다.
Quiver Dashboard
게시한 Quiver 대시보드를 기존 레거시 탭의 Add widget > Quiver dashboard에서 추가하고 드롭다운으로 선택합니다. 새 레거시 탭을 만드는 경로는 지원하지 않습니다.
현재 객체를 넘기려면 대시보드에 정의한 객체 입력 이름을 Dashboard’s input name for object에 정확히 넣습니다. Additional dashboard inputs의 Add Item으로 다른 입력을 매핑할 수 있습니다.
| Quiver 추가 입력 | 객체 뷰에서 전달할 필터 |
|---|---|
| Boolean, Number, String, Time | 문자열 또는 문자열 목록의 첫 값 |
| Time Range | 시간 범위 또는 상대 시간 범위 |
| String List | 문자열 목록 |
| Time Series, Object, Object Set | 추가 입력 매핑에서는 지원하지 않음 |
추가 Object 입력의 제한과 앞의 전용 현재 객체 입력은 다른 설정입니다. 대시보드 표시 방식이 Stretch이면 위젯 높이를 반드시 지정해야 합니다. 그렇지 않으면 기본 높이가 0픽셀이 되어 보이지 않습니다.
Slate Application
Slate 위젯은 현재 객체의 맥락과 필터를 Slate로 전달하고, Slate에서 객체 뷰로 탐색과 필터 이벤트를 보낼 수 있습니다. 단순 URL iframe과 구분되는 연계입니다.
표시할 Slate 리소스를 선택하고 객체 뷰 사용자에게 해당 앱의 조회 권한도 부여해야 합니다. 화면 크기가 객체 뷰 배치와 기기에 따라 달라지므로 반응형 앱으로 구성합니다.
기본 매개변수 objectId와 objectTypeId는 끄거나 대상 변수 이름을 바꿀 수 있습니다. Slate의 Variables 탭에 같은 이름의 변수를 직접 만들어야 값을 받습니다. 사용자 지정 매개변수로 현재 객체의 속성값이나 정적 값을 전달할 때도 같은 이름의 변수가 필요합니다. 값은 앱을 로드할 때 전달하며 객체 뷰 편집기의 디버깅 도구에서 View parameters로 확인할 수 있습니다.
필터 수신
객체 뷰는 필터가 바뀌면 프레임 간 postMessage로 전달합니다. 필터는 Slate에서 사용하는 Object Set API의 IObjectSetFilter 형식입니다.
Slate의 slate.getMessage 이벤트에서 다음 Custom Logic으로 메시지의 JSON 텍스트를 해석하고 결과를 앱 변수에 저장합니다. {{slEventValue}}는 Slate가 해당 이벤트에 제공하는 값이며 일반 JavaScript 파일의 전역 변수가 아닙니다.
const payload = {{slEventValue}}["payload"];
return JSON.parse(payload);
| 메시지 type | 해석한 payload |
|---|---|
HUBBLE_SLATE_WIDGET // ACTIVE_FILTERS_UPDATED | 객체 유형 구분 없는 IObjectSetFilter[] |
HUBBLE_SLATE_WIDGET // ACTIVE_FILTERS_BY_OBJECT_TYPE_ID_UPDATED | filtersByObjectType와 globalFilters를 가진 객체 |
두 번째 형식에서 filtersByObjectType은 객체 유형 ID를 키로 하고 필터 배열을 값으로 갖는 맵입니다. globalFilters는 특정 유형에 속하지 않는 필터 배열입니다. 개별 필터는 실제 Object Set API 형식 그대로 사용해야 하며 단순 문자열 목록으로 대체할 수 없습니다.
Slate에서 객체 뷰로 보내기
다음 코드는 Slate의 slate.sendMessage 액션 Custom Logic에 넣는 본문입니다. 반환한 이벤트를 Slate가 부모 iframe으로 전송합니다. 전달용 외부 source나 message 봉투를 직접 한 번 더 감쌀 필요는 없습니다.
입력 변수는 실제 앱 데이터에 연결해야 합니다.
| 변수 | 입력 계약 |
|---|---|
v_targetObjectRid | 조회한 대상 객체의 실제 RID 문자열 |
v_targetObjectTypeId | 대상 객체 유형의 ID |
v_targetPrimaryKey | 해당 객체 유형의 기본 키 속성 ID와 실제 값을 담은 맵 |
v_targetObjectSet | Object Set API에서 사용할 실제 객체 집합 정의 |
v_ownFilters | 이 Slate 위젯이 Object Set API 형식으로 구성한 발신 payload. 유형별 filtersByObjectType과 전역 globalFilters 필터 객체를 포함합니다. |
수신한 전체 필터와 이 위젯이 직접 발행할 필터 상태는 따로 관리합니다. 수신 메시지의 globalFilters 배열을 발신의 전역 필터 객체와 같은 형식으로 취급하지 않습니다. 새 발행은 같은 Slate 위젯이 이전에 발행한 필터를 교체하므로, 필요한 조건 전체를 v_ownFilters에 유지해야 합니다.
객체 RID로 새 객체 탭을 열 때는 다음 이벤트를 반환합니다. 특정 객체 뷰 탭을 지정할 때에는 tabId를 선택적으로 사용할 수 있습니다.
return {
type: "HUBBLE_SLATE_WIDGET // OPEN_OBJECT_BY_RID",
payload: { objectRid: {{v_targetObjectRid}} }
};
RID를 모르면 객체 유형 ID와 기본 키 맵을 사용합니다.
return {
type: "HUBBLE_SLATE_WIDGET // OPEN_OBJECT_BY_PRIMARY_KEY",
payload: {
objectTypeId: {{v_targetObjectTypeId}},
primaryKey: {{v_targetPrimaryKey}}
}
};
객체 집합으로 탐색 탭을 열 수 있습니다. 탐색 UI가 표현할 수 있도록 집합 정의의 복잡도를 제한해야 합니다.
return {
type: "HUBBLE_SLATE_WIDGET // OPEN_NEW_SEARCH_FOR_OBJECT_SET",
payload: { objectSet: {{v_targetObjectSet}} }
};
이 Slate 위젯의 필터를 발행하는 이벤트입니다. 앱의 실제 필터 구성 결과를 v_ownFilters에 연결한 뒤 사용자의 필터 적용 동작에서 실행합니다.
return {
type: "HUBBLE_SLATE_WIDGET // PUBLISH_OBJECT_SET_FILTER",
payload: {{v_ownFilters}}
};
이 위젯이 발행한 필터를 해제할 때는 payload 없이 보냅니다.
return { type: "HUBBLE_SLATE_WIDGET // CLEAR_PUBLISHED_FILTERS" };
현재 객체 뷰의 데이터를 새로고침하는 이벤트도 payload가 없습니다.
return { type: "HUBBLE_SLATE_WIDGET // REFRESH_OBJECT_VIEW" };
Slate가 초기화를 마쳐 메시지를 받을 준비가 되면 현재 필터를 다시 요청할 수 있습니다. 아래 두 요청 중 필요한 형식을 선택합니다. 응답은 별도 수신 이벤트로 돌아옵니다.
return { type: "HUBBLE_SLATE_WIDGET // REQUEST_ACTIVE_FILTERS" };
return { type: "HUBBLE_SLATE_WIDGET // REQUEST_ACTIVE_FILTERS_BY_OBJECT_TYPE" };
객체 뷰 편집기의 디버깅 도구는 수신한 메시지의 이벤트 payload가 잘못되었을 때 경고를 표시합니다. JSON 파싱 실패나 잘못된 이벤트를 성공 또는 빈 필터 결과로 처리해서는 안 됩니다.
Media Preview
Media Preview는 첨부파일(Attachment) 속성이나 미디어 URL 속성의 파일 하나를 크게 표시합니다. 이미지와 PDF 같은 형식을 사용할 수 있습니다.
첨부파일 속성은 첨부파일 액션으로 채울 수 있고 객체의 접근 권한을 따릅니다. URL로 별도 Foundry 파일을 표시한다면 사용자는 객체와 미디어 저장 위치 양쪽에 접근할 수 있어야 합니다.
파일 데이터셋과 URL 속성
파일을 폴더에 업로드할 때 Bundle all files as a single dataset을 선택합니다. 파일 하나면 Upload to a dataset without a schema를 사용합니다.
기존 데이터셋에는 Dataset Preview 오른쪽 위의 Import로 파일을 추가합니다.
대화상자에서 추가 파일을 선택합니다.
객체의 기반 데이터셋에 해당 파일 URL을 가진 열을 만듭니다. 일반 미디어의 주소 서식은 다음 중 하나입니다. 중괄호의 항목은 실제 호스트, RID와 파일 이름으로 바꾸는 서식 요소입니다.
https://{foundry-host}/foundry-data-proxy/api/web/dataproxy/datasets/{dataset-rid}/transactions/{transaction-rid}/{filename}
https://{foundry-host}/foundry-data-proxy/api/web/dataproxy/datasets/{dataset-rid}/views/{branch-name}/{filename}
PDF는 /api/web/dataproxy가 아니라 /api/dataproxy를 사용합니다. 다음은 설명용 호스트와 RID를 사용한 PDF 주소 예시입니다.
https://foundry.example.com/foundry-data-proxy/api/dataproxy/datasets/ri.foundry.main.dataset.39ce332b-1d74-40ca-be35-5a5b48459a9a/transactions/ri.foundry.main.transaction.00000000-0000-30d2-8067-4b5d9c819f4c/sample-doc.pdf
URL 열을 객체 속성으로 만들고 유형 클래스의 kind를 hubble, name을 media_url로 지정합니다. hubble:icon은 객체 아이콘, hubble:thumbnail은 검색 결과 카드의 썸네일에 사용하는 대안입니다.
객체 뷰의 Add Section에서 Media Preview 또는 Media Thumbnails를 고르고 URL을 가진 Media Property를 지정합니다. 제목과 아이콘은 필수이며 Help Info와 픽셀 높이를 추가로 설정할 수 있습니다.
Hyperlink
Hyperlink는 웹 주소를 여는 버튼입니다. 객체마다 다른 주소나 공통 주소를 사용할 수 있습니다.
Open Link In의 기본은 같은 브라우저 탭이며 새 탭이나 팝업으로 바꿀 수 있습니다. 팝업은 브라우저와 확장 프로그램에 의해 차단될 수 있습니다.
Link Intent는 기본 None의 회색, Primary의 파랑, Success의 녹색, Warning의 주황과 Danger의 빨강을 선택합니다.
| URL Type | 구성 |
|---|---|
| Property | 객체 유형과 URL 속성을 선택합니다. 값이 null일 때 버튼을 숨길 수 있습니다. |
| Hardcoded | 모든 객체에 같은 주소를 사용하며 https://를 포함해야 합니다. |
| Templated | {propertyName}처럼 한 겹 중괄호로 객체 속성을 넣습니다. 예: /workspace/report/{report_rid} |
가상의 Website 객체 두 개가 site_URL에 각각 https://palantir.com, https://palantir.com/uk를 갖도록 구성하면 객체에 따라 다른 주소를 엽니다. Link Title은 모든 객체에서 같은 버튼 레이블입니다. 링크가 잘못되면 Object Explorer 시작 화면으로 이동할 수 있습니다.
Linked Files
기존 Foundry 파일을 리소스 선택기로 연결하거나 로컬 파일을 새로 업로드할 수 있습니다. 이 연결은 현재 객체의 온톨로지 속성에 저장되지 않습니다. 파일 자체와 뷰의 연결을 다른 업무에서 재사용할 첨부파일 속성으로 취급하지 않아야 합니다.
위젯별 추가 설정은 없고 Format의 제목과 일반 서식만 바꿀 수 있습니다. Upload files와 Link new file 중 하나를 숨길 수 없으며, 기본 업로드 위치도 지정할 수 없어 사용자가 매번 저장 위치를 선택해야 합니다.
온톨로지 속성에 파일을 저장하려면 첨부파일 액션을 사용합니다. 구형 Forms의 직접 쓰기 반영을 사용하는 기존 구성은 OSv1과 OSv2의 편집 차이를 구분해야 합니다.
Iframe
Iframe은 Foundry 앱을 웹페이지 안에 삽입합니다. 객체 속성을 Slate 변수나 Contour 매개변수에 넘길 수 있지만, 단순 iframe만으로 앞의 Slate 전용 이벤트 연계가 자동 구성되지는 않습니다.
삽입할 주소에서 /workspace/ 앞의 호스트 부분을 제거하고 embedded=true를 넣습니다. 첫 질의 매개변수에는 ?, 다음 매개변수에는 &를 사용합니다.
다음은 실제 리소스가 아닌 설명용 Report RID와 Slate 문서 이름을 사용한 서식입니다.
/workspace/report/ri.report.main.report.ABCDEF-1234-5678/?embedded=true
/workspace/slate/documents/SLATE_DOCUMENT_NAME/latest?embedded=true
객체의 속성 ID를 두 겹 중괄호로 치환하여 입력을 넘길 수 있습니다. 아래의 PARAMETER_NAME과 VARIABLE_NAME은 대상 앱에 정의한 실제 입력 이름으로 바꿉니다.
/workspace/report/ri.report.main.report.ABCDEF-1234-5678/?PARAMETER_NAME={{propertyID}}&embedded=true
/workspace/slate/documents/SLATE_DOCUMENT_NAME/latest?VARIABLE_NAME={{propertyID}}&embedded=true
Headerless iframe은 위젯 헤더의 아이콘과 제목을 숨깁니다. 기본 위젯 높이는 500픽셀이며 수동으로 조정합니다. 편집 모드에는 전달 가능한 객체 속성과 ID를 보여 주는 도움말이 나타납니다. Report 자체의 헤더는 URL에 &__rp_headerBar=hidden을 추가해 숨길 수 있습니다.
외부 사이트 삽입은 보안과 정책 조건을 따르므로 필요하면 Palantir 담당자와 확인해야 합니다.
Comments
레거시 Comments는 해당 객체 뷰에서 대화하고 @user_name으로 사용자를 언급하는 기능입니다. 이 댓글을 객체 속성에 기록하지 않으며 Foundry 전체에서 검색하거나 재사용하는 업무 데이터로 제공하지 않습니다.
추가 위젯 설정은 없고 Format에서 제목과 일반 서식을 바꿀 수 있습니다. 객체 유형의 원천 데이터셋을 바꾸면 해당 댓글 피드가 사라집니다. 댓글을 검색, 분석하거나 학습 데이터로 사용해야 한다면 액션으로 별도 객체 또는 속성에 기록하는 구성을 사용합니다.