Adobe Workfront API의 리치 텍스트 필드
Adobe Workfront의 일부 개체를 사용하면 서식 있는 텍스트 형식으로 텍스트를 저장할 수 있습니다. Workfront API에서 리치 텍스트는 오픈 소스 프레임워크 Draft.js를 사용하여 JSON으로 저장됩니다.
개요 예
서식 있는 텍스트 서식이 있는 사용자 정의 필드를 서식 있는 텍스트 필드라고 하며, 다음과 같은 값을 연결할 수 있습니다.
예: 리치 텍스트 사용자 정의 양식 필드로 필드의 값을 검색하기 위한 기본 GET 요청:
<OBJ Code><OBJ ID><OBJ Code><OBJ ID>
예: 이 요청은 리치 텍스트가 있는 parameterValue DE:Field에 저장된 JSON의 리치 텍스트가 있는 Field 값을 반환합니다
{
data: {
ID: "5e85e3f10000b99e8cef10af4e5c6c7b",
name: "Zoom Integration Test",
objCode: "PROJ",
parameterValues: {
"DE:Field with rich text": "{"blocks":[{"key":"dpfce","text":"This is a regular text","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"a9ic6","text":"Bold text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":9,"style":"BOLD"}],"entityRanges":[],"data":{}},{"key":"1b2a4","text":"Italic text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":11,"style":"ITALIC"}],"entityRanges":[],"data":{}},{"key":"4dle1","text":"Underline text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":14,"style":"UNDERLINE"}],"entityRanges":[],"data":{}},{"key":"10mip","text":"With all formating and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":18,"style":"BOLD"},{"offset":0,"length":18,"style":"ITALIC"},{"offset":0,"length":18,"style":"UNDERLINE"}],"entityRanges":[],"data":{}}],"entityMap":{}}",
"DE:Other Type of Field": "Value",
}
}
}
예: 위의 그림에 포함된 서식이 지정된 응답 버전입니다.
{
"blocks":[
{
"key":"dpfce",
"text":"This is a regular text",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
],
"entityRanges":[
],
"data":{
}
},
{
"key":"a9ic6",
"text":"Bold text and regular text",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":9,
"style":"BOLD"
}
],
"entityRanges":[
],
"data":{
}
},
{
"key":"1b2a4",
"text":"Italic text and regular text",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":11,
"style":"ITALIC"
}
],
"entityRanges":[
],
"data":{
}
},
{
"key":"4dle1",
"text":"Underline text and regular text",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":14,
"style":"UNDERLINE"
}
],
"entityRanges":[
],
"data":{
}
},
{
"key":"10mip",
"text":"With all formating and regular text",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":18,
"style":"BOLD"
},
{
"offset":0,
"length":18,
"style":"ITALIC"
},
{
"offset":0,
"length":18,
"style":"UNDERLINE"
}
],
"entityRanges":[
],
"data":{
}
}
],
"entityMap":{
}
}
블록
리치 텍스트 콘텐츠를 저장하는 JSON 개체는 블록과 entityMap의 두 가지 주요 부분으로 구성됩니다.
블록은 형식이 지정된 텍스트의 한 줄을 나타내는 JSON 개체입니다. 단일 사용자 정의 필드에는 두 개 이상의 텍스트 줄이 있을 수 있으므로, 각 텍스트 줄에는 자체 블록이 있으며, 각 블록은 블록이라는 상위 배열의 요소로 표시됩니다.
예: 여기서 사용자 정의 필드의 각 텍스트 행은 배열 블록의 블록 요소에 매핑됩니다.
각 블록 요소는 JSON 개체이기도 하므로 각 블록은 key, text, type, depth, inlineStyleRanges, entityRanges 및 data의 요소로 구성됩니다. 이러한 각 요소는 다음과 같이 작동합니다.
- 키: 해당 블록의 고유 식별자입니다. 키는 entityMaps를 통해 텍스트 행을 매핑하는 데 사용됩니다. entityMaps에 대한 자세한 내용은 이 문서의 entityMaps 섹션에서 확인할 수 있습니다.
- 텍스트: 사용자 정의 필드에서 저장되는 텍스트 컨텐츠의 행입니다.
- 유형: 표시 중인 텍스트 유형을 설명합니다. 예를 들어 블록에 저장되는 텍스트 줄이 목록의 일부일 수 있습니다. 해당 텍스트 줄이 비순차 목록에 포함된 경우 해당 유형은 비순차 목록-항목으로 정의됩니다.
- 목록: 현재 지원되지 않지만 곧 사용할 수 있습니다.
- 깊이: 선이 순서가 지정된 목록 또는 순서가 지정되지 않은 목록의 중첩된 부분인 경우 선의 깊이를 정의하는 매개 변수입니다.
- inlineStyleRanges: 현재 블록이 나타내는 텍스트 행에 적용된 서식 유형을 설명하는 배열입니다.
예: 문자 수준에서 각 스타일을 설명하는 inlineStyleRanges 배열입니다. 이 경우 색인 0(오프셋: 0)부터 9자(길이: 9)에 굵게 스타일이 적용되었습니다.
여러 유형의 서식이 한 줄에 적용된 경우 스타일은 inlineStyleRanges 배열의 추가 요소에 매핑됩니다.
예: 굵게 텍스트와 기울임꼴, 이렇게 혼합된 서식을 포함하는 텍스트 행을 저장할 때 블록의 모양은 다음과 같습니다.
{
"key":"a9ic6",
"text":"Bold text and Italics",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":21,
"style":"BOLD"
},
{
"offset":14,
"length":7,
"style":"ITALIC"
}
],
...
},
entityMaps 및 entityRanges
데이터 블록에는 사용자 지정 텍스트 필드 외부에 있는 데이터 소스에 연결된 하이퍼링크나 기타 유형의 양식화된 서식과 같은 엔티티가 포함될 수 있습니다.
예시
JSON에서 일반 텍스트 검색
서식 있는 텍스트 형식의 사용자 지정 필드를 제출하면 모든 텍스트가 배열 블록에 저장됩니다. 그러나 전체 텍스트의 각 행은 상위 배열 블록을 구성하는 각 개별 블록 요소 내의 텍스트 매개 변수에 저장됩니다. 따라서 전체 텍스트를 검색하려면 각 개별 텍스트 행을 추출하여 다시 한 쪽으로 나란히 배치해야 합니다. 이렇게 하려면 블록의 모든 요소를 반복하고 각 텍스트 매개 변수를 줄 구분 기호(\n)와 함께 연결하면 됩니다.
예: 다음은 JS의 모습입니다.
const parameterValue = JSON.parse('{"blocks":[{"key":"dpfce","text":"This is a regular text","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"a9ic6","text":"Bold text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":9,"style":"BOLD"}],"entityRanges":[],"data":{}},{"key":"1b2a4","text":"Italic text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":11,"style":"ITALIC"}],"entityRanges":[],"data":{}},{"key":"4dle1","text":"Underline text and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":14,"style":"UNDERLINE"}],"entityRanges":[],"data":{}},{"key":"10mip","text":"With all formating and regular text","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":18,"style":"BOLD"},{"offset":0,"length":18,"style":"ITALIC"},{"offset":0,"length":18,"style":"UNDERLINE"}],"entityRanges":[],"data":{}}],"entityMap":{}}');
let plainText = "";
parameterValue.blocks.forEach((block) => {
plainText = plainText.concat(block.text, "\n");
})
console.log(plainText)
Workfront API를 사용하여 리치 텍스트 필드 값 저장
Workfront API를 사용하여 서식 있는 텍스트 필드의 다음 값을 저장하려면
World!!! 님, 안녕하세요.
내 첫 서식 있는 텍스트입니다.
-
각 텍스트 행을 배열 블록의 블록 요소로 구성하여 캡처하려는 서식 있는 텍스트 필드의 값을 나타내는 JSON을 구성합니다.
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
inlineStyleRanges 매개 변수를 사용하여 서식 있는 텍스트 서식을 캡처합니다.
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", "inlineStyleRanges": [ { "offset":6, "length":11, "style":"BOLD" } ] }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
두 번째 줄을 캡처하려면 텍스트 서식 있는 텍스트 의 서식을 굵게, 기울임체로 지정해야 합니다.
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", "inlineStyleRanges": [ { "offset":6, "length":11, "style":"BOLD" } ] }, { "key":"1", "text":"This is my first Rich Text", "inlineStyleRanges": [ { "offset":17, "length":26, "style":"BOLD" }, { "offset":17, "length":26, "style":"ITALIC" } ] } ], "entityMap":{ } }
note note NOTE 초기 릴리스 중에는 entityMap 기능이 지원되지 않지만, 요청에서 이 JSON을 전달하는 것은 필수 필드입니다. -
위에 설명된 JSON에 문자열 메서드를 사용하여 PUT 요청을 수행하고 업데이트를 보냅니다.
<OBJ Code><OBJ ID>