Rijke tekstvelden in de Adobe Workfront API
Sommige objecten in Adobe Workfront maken het mogelijk tekst met opmaak op te slaan. In de Workfront API wordt RTF-tekst opgeslagen als JSON met behulp van het open-sourceframework Draft.js.
Overzicht
Een aangepast veld met RTF-opmaak wordt Veld met RTF-opmaak genoemd en kan de volgende waarden bevatten:
Voorbeeld: een standaard GET-aanvraag om de waarde van het veld op te halen met een aangepast tekstveld met tekstopmaak:
<OBJ Code><OBJ ID><OBJ Code><OBJ ID>
Voorbeeld: deze aanvraag retourneert de waarde Veld met RTF-tekst in JSON die is opgeslagen in de parameterValue DE:Field met RTF-tekst
{
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",
}
}
}
Voorbeeld: dit is een opgemaakte versie van het antwoord dat direct in de bovenstaande afbeelding is weergegeven.
{
"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":{
}
}
Blokken
De JSON-objecten die de RTF-inhoud opslaan, bestaan uit twee hoofdonderdelen: blokken en entiteitskaarten.
Een blok is een JSON-object dat een enkele regel opgemaakte tekst vertegenwoordigt. Aangezien één enkel douanegebied meer dan één lijn van tekst kan hebben, heeft elke lijn van tekst zijn eigen blok, en elk blok wordt vertegenwoordigd als element in een ouderserie genoemd blokken.
Voorbeeld: hier wordt elke tekstregel van een aangepast veld toegewezen aan een blokelement in de arrayblokken.
Aangezien elk blokelement ook een JSON-object is, bestaat elk blok uit de elementen: key, text, type, depth, inlineStyleRanges, entityRanges en data. Elk van deze elementen werkt als volgt:
- Sleutel: De unieke id voor dat blok. De sleutel wordt gebruikt om een tekstregel via entityMaps in kaart te brengen. Meer informatie over entiteitskaarten vindt u in de sectie entityMaps van dit document.
- Tekst: de regel tekstinhoud die wordt opgeslagen vanuit het aangepaste veld.
- Type: beschrijft het type tekst dat wordt vertegenwoordigd. Een tekstregel die bijvoorbeeld in een blok wordt opgeslagen, kan onderdeel zijn van een lijst. Als die tekstregel onderdeel was van een niet-geordende lijst, zou het type ervan worden gedefinieerd als: unordered-list-item.
- Lijsten: wordt momenteel niet ondersteund, maar moet binnenkort beschikbaar zijn.
- Diepte: een parameter die de diepte van de lijn bepaalt wanneer de lijn een genest deel van een geordende of ongeordende lijst is.
- inlineStyleRanges: een array die de opmaaktypen beschrijft die zijn toegepast op de tekstregel die wordt vertegenwoordigd door het huidige blok.
Voorbeeld: hier is een inlineStyleRanges-array die elke stijl op tekenniveau beschrijft. In dit geval: 9 tekens (lengte: 9) vanaf index 0 (verschuiving: 0) waarop de stijl Vet is toegepast:
Wanneer meerdere typen opmaak zijn toegepast op één regel, worden stijlen toegewezen aan extra elementen in de array inlineStyleRanges.
Voorbeeld: zo ziet een blok eruit als u een tekstregel opslaat die de gemengde opmaak bevat: Vette tekst en Cursief.
{
"key":"a9ic6",
"text":"Bold text and Italics",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":21,
"style":"BOLD"
},
{
"offset":14,
"length":7,
"style":"ITALIC"
}
],
...
},
entiteitMaps en entiteitRanges
Een gegevensblok kan entiteiten bevatten zoals hyperlinks of andere typen gestileerde opmaak die zijn verbonden met gegevensbronnen buiten het aangepaste tekstveld.
Voorbeelden
Onbewerkte tekst ophalen van JSON
Wanneer een aangepast veld met RTF-opmaak wordt verzonden, wordt alle tekst opgeslagen in de arrayblokken. Elke regel van de volledige tekst wordt echter opgeslagen in de parameter text binnen elk van de afzonderlijke blokelementen die de bovenliggende arrayblokken vormen. Om de volledige tekst op te halen, moet elke afzonderlijke tekstregel worden opgehaald en samen worden geparkeerd. Dit kan worden bereikt door alle elementen in blokken te herhalen en elke tekstparameter samen met een regelscheidingsteken (\n) te koppelen.
Voorbeeld: Dit is hoe uw JS er zou kunnen uitzien:
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)
Een RTF-waarde opslaan met de Workfront API
De volgende waarden van een RTF-veld opslaan met de Workfront API:
Hallo Wereld !!
Dit is mijn eerste Rijke Tekst
-
Construeer JSON die de waarde van het rijke-tekstgebied vertegenwoordigt u probeert te vangen door elke lijn van tekst in een blokelement in de serieblokken te organiseren.
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
Leg de RTF-opmaak vast met de parameter 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 de tweede lijn te vangen, moet de tekst Rijke Tekst in zowel vette als cursieve teksten worden geformatteerd.
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 Hoewel de functionaliteit entityMap niet tijdens de aanvankelijke versie wordt gesteund, is het nog een vereist gebied om deze JSON in een verzoek over te gaan. -
Gebruik de stringify-methode op de JSON die hierboven wordt beschreven om een PUT-aanvraag in te dienen en updates te verzenden.
<OBJ Code><OBJ ID>