Rich-Text-Felder in der Adobe Workfront-API
Einige Objekte in Adobe Workfront ermöglichen die Speicherung von Text mit Rich-Text-Formatierung. In der Workfront-API wird Rich Text mithilfe des Open-Source-Frameworks Draft.js als JSON gespeichert.
Übersichtsbeispiel
Ein benutzerdefiniertes Feld mit Rich-Text-Formatierung heißt Feld mit Rich-Text und kann die folgenden Werte enthalten:
Beispiel: Eine einfache GET-Anfrage zum Abrufen des Werts des benutzerdefinierten Formularfelds Feld mit Rich-Text:
<OBJ Code><OBJ ID><OBJ Code><OBJ ID>
Beispiel: Diese Anfrage gibt den Wert Feld mit Rich-Text in JSON zurück, der im Feld parameterValue DE:Field mit Rich-Text gespeichert ist.
{
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",
}
}
}
Beispiel: Dies ist eine formatierte Version der Antwort, die in der Abbildung direkt oben aufgeführt ist.
{
"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":{
}
}
Blöcke
Die JSON-Objekte, die den Rich-Text-Inhalt speichern, bestehen aus zwei Hauptteilen: Bausteine und entityMaps.
Ein Block ist ein JSON-Objekt, das eine einzelne Zeile formatierten Texts darstellt. Da ein einzelnes benutzerdefiniertes Feld mehrere Textzeilen haben kann, hat jede Textzeile einen eigenen Block und jeder Block wird als Element in einem übergeordneten Array namens Bausteine dargestellt.
Beispiel: Hier wird jede Textzeile aus einem benutzerdefinierten Feld einem Block-Element in den Array-Blöcken zugeordnet
Da jedes Blockelement auch ein JSON-Objekt ist, besteht jeder Block aus den folgenden Elementen: key, text, type, depth, inlineStyleRanges, entityRanges und data. Jedes dieser Elemente funktioniert wie folgt:
- Schlüssel ist die eindeutige Kennung für diesen Block. Der Schlüssel wird verwendet, um eine Textzeile über entityMaps zuzuordnen. Details zu entityMaps finden Sie im Abschnitt entityMaps dieses Dokuments.
- Text ist die Zeile des Textinhalts, die aus dem benutzerdefinierten Feld gespeichert wird.
- Typ beschreibt den Typ des Textes, der dargestellt wird. Eine Textzeile, die beispielsweise in einem Block gespeichert wird, kann Teil einer Liste sein. Wenn diese Textzeile Teil einer ungeordneten Liste ist, wird ihr Typ wie folgt definiert: unordered-list-item.
- Listen werden derzeit nicht unterstützt, sollten aber in Kürze verfügbar sein.
- Tiefe Dieser Parameter definiert die Tiefe der Zeile, wenn die Zeile ein verschachtelter Teil einer geordneten oder ungeordneten Liste ist.
- inlineStyleRanges ist ein Array, das die Formatierungstypen beschreibt, die auf die Textzeile angewendet wurden, die durch den aktuellen Block dargestellt werden.
Beispiel: Hier ist ein inlineStyleRanges-Array, das jeden Stil auf Zeichenebene beschreibt. In diesem Fall wurde der Stil "Fett" auf 9 Zeichen (Länge: 9) angewendet, beginnend beim Index 0 (Offset: 0):
Wenn mehrere Formatierungstypen auf eine einzelne Zeile angewendet wurden, werden Stile zusätzlichen Elementen im Array inlineStyleRanges zugeordnet.
Beispiel: So würde ein Block aussehen, wenn eine Textzeile gespeichert wird, die die gemischte Formatierung enthält: Fett und 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 und entityRanges
Ein Datenblock kann potenziell Entitäten wie Hyperlinks oder andere Arten von stilisierter Formatierung enthalten, die mit Datenquellen verbunden sind, die sich außerhalb des benutzerdefinierten Textfelds befinden.
Beispiele
Abrufen von normalem Text aus JSON
Wenn ein benutzerdefiniertes Feld mit Rich-Text-Formatierung gesendet wird, wird der gesamte Text im Array Bausteine gespeichert. Jede Zeile des Volltextes wird jedoch im Textparameter innerhalb der einzelnen einzelnen Blockelemente gespeichert, aus denen das übergeordnete Array block besteht. Um den Volltext abzurufen, muss also jede separate Textzeile extrahiert und wieder geparst werden. Dies kann erreicht werden, indem alle Elemente in Blöcken in Schleife gehalten und jeder Textparameter miteinander verkettet wird, wobei ein Zeilentrennzeichen (\n) verwendet wird.
Beispiel: So könnte Ihr JS aussehen:
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)
Speichern eines Rich-Text-Feldwerts mit der Workfront-API
So speichern Sie die folgenden Werte eines Rich-Text-Felds mithilfe der Workfront-API:
Hallo World!!!
Dies ist mein erster Rich-Text
-
Erstellen Sie eine JSON-Datei, die den Wert des Rich-Text-Felds darstellt, das Sie erfassen möchten, indem Sie jede Textzeile in einem Block-Element im Array Bausteine organisieren.
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
Erfassen Sie die Rich-Text-Formatierung mithilfe des Parameters 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", } ] }
-
Um die zweite Zeile zu erfassen, muss der Text "Rich Text"fett und kursiv formatiert sein.
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 Die entityMap-Funktion wird zwar während der ersten Veröffentlichung nicht unterstützt, es ist jedoch weiterhin ein erforderliches Feld, um diese JSON in einer Anfrage zu übergeben -
Verwenden Sie die stringify -Methode für die oben beschriebene JSON, um eine PUT -Anfrage zu stellen und Aktualisierungen zu senden.
<OBJ Code><OBJ ID>