RTF-fält i Adobe Workfront API
Vissa objekt i Adobe Workfront tillåter lagring av text med formatering av formaterad text. I Workfront API lagras RTF-text som JSON med hjälp av den öppna källkodsmiljön Draft.js.
Exempel på översikt
Ett anpassat fält med formatering av formaterad text kallas Fält med formaterad text och kan ha följande värden kopplade till sig:
Exempel: En grundläggande begäran om GET för att hämta värdet för det anpassade formulärfältet Fält med RTF-text:
<OBJ Code><OBJ ID><OBJ Code><OBJ ID>
Exempel: Denna begäran returnerar värdet för Field med RTF-text i JSON som lagras i parameterValue DE:Field med RTF-text
{
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",
}
}
}
Exempel: Det här är en formaterad version av svaret som visas i figuren direkt ovan
{
"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":{
}
}
Block
JSON-objekten som lagrar RTF-innehållet består av två huvuddelar: blocks och entityMaps.
Ett block är ett JSON-objekt som representerar en enda rad med formaterad text. Eftersom ett enskilt anpassat fält kan innehålla mer än en textrad har varje textrad ett eget block, och varje block representeras som ett element i en överordnad array med namnet blocks.
Exempel: Här mappas varje textrad från ett anpassat fält till ett blockelement i arrayblocken
Eftersom varje blockelement också är ett JSON-objekt består varje block av elementen: key, text, type, depth, inlineStyleRanges, entityRanges och data. Var och en av dessa element fungerar enligt följande:
- Nyckel är den unika identifieraren för det blocket. Nyckeln används för att mappa en textrad via entityMaps. Information om entityMaps finns i avsnittet entityMaps i det här dokumentet.
- Text är raden med textinnehåll som lagras från det anpassade fältet.
- Typ beskriver den typ av text som representeras. En textrad som lagras i ett block kan till exempel vara en del av en lista. Om den textraden är en del av en osorterad lista definieras dess typ som: unordered-list-item.
- Listor stöds för närvarande inte, men bör vara tillgängliga inom kort.
- Djup Den här parametern definierar radens djup när raden är en kapslad del av en ordnad eller osorterad lista.
- inlineStyleRanges är en array som beskriver den eller de formattyper som tillämpades på textraden som representeras av det aktuella blocket.
Exempel: Här är en inlineStyleRanges-array som beskriver varje format på teckennivå. I det här fallet användes formatet Fet för 9 tecken (längd: 9) med början från index 0 (förskjutning: 0):
Om flera typer av formatering har använts på en rad kopplas formaten till ytterligare element i arrayen inlineStyleRanges.
Exempel: Så här ser ett block ut när du lagrar en textrad som innehåller den blandade formateringen: Fet text och Kursiv
{
"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 och entityRanges
Ett datablock kan innehålla entiteter som hyperlänkar eller andra typer av formatering som är kopplade till datakällor utanför det anpassade textfältet.
Exempel
Hämtar oformaterad text från JSON
När ett anpassat fält med RTF-formatering skickas, lagras all text i arrayen blocks. Varje rad i den fullständiga texten lagras dock i text-parametern i varje separat blockelement som utgör den överordnade arrayen blocks. För att kunna hämta hela texten måste varje separat textrad extraheras och delas upp igen. Detta kan du göra genom att göra en slinga över alla element i blocken och sammanfoga alla textparametrar med en radavgränsare (\n).
Exempel: Så här kan din JS se ut:
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)
Spara ett RTF-fältvärde med Workfront API
Så här sparar du följande värden i ett RTF-fält med Workfront API:
Hej World!!
Det här är min första RTF
-
Skapa JSON som representerar värdet för det RTF-fält som du försöker hämta genom att ordna varje textrad i ett blockelement, i arrayen blocks
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
Hämta RTF-formateringen med parametern 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", } ] }
-
Om du vill fånga den andra raden måste texten "RTF" vara formaterad med både fet och kursiv stil.
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 Funktionen EntityMap stöds inte i den första versionen, men det är ändå ett obligatoriskt fält att skicka denna JSON i en begäran -
Använd metoden stringify på JSON-objektet ovan för att göra en PUT-begäran och skicka uppdateringar
<OBJ Code><OBJ ID>