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 wird als Feld mit Rich-Text und können die folgenden Werte zugeordnet sein:

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 von Feld mit Rich-Text in JSON gespeichert im parameterValue DE:Feld mit Rich-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",
        }
    }
}

Beispiel: Dies ist eine formatierte Version der Antwort, die direkt oben in der Abbildung dargestellt wird.

{
   "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 dargestellt Bausteine.

Beispiel: Hier wird jede Textzeile aus einem benutzerdefinierten Feld einem Blockelement in den Array-Blöcken zugeordnet

Da jedes Blockelement auch ein JSON-Objekt ist, besteht jeder Block aus 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 Textinhaltszeile, 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: Im Folgenden finden Sie ein inlineStyleRanges -Array, das jeden Stil auf Zeichenebene beschreibt. In diesem Fall hatten 9 Zeichen (Länge: 9), beginnend mit dem Index 0 (Offset: 0) den Stil Fett angewendet:

Wenn mehrere Formatierungstypen auf eine einzelne Zeile angewendet wurden, werden Stile zusätzlichen Elementen im Array ​ inlineStyleRanges zugeordnet.

Beispiel: So würde ein Block beim Speichern einer Textzeile aussehen, die die gemischte Formatierung enthält: Fettdruck 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"
            }
         ],
         ...
      },
NOTE
Alle Versionen nach Version 20.3 unterstützen Formatierungsoptionen für Fettdruck, Kursiv und Unterstrichen.

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 gespeichert Bausteine. Jede Zeile des Volltextes wird jedoch im Textparameter innerhalb der einzelnen Blockelemente, aus denen das übergeordnete Array besteht Bausteine. 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 Welt!!
        Das ist meine erste Rich-Text
  1. Erstellen Sie JSON, das den Wert des Rich-Text-Felds darstellt, das Sie erfassen möchten, indem Sie jede Textzeile in einem Block-Element im Array organisieren. Bausteine

    code language-none
    {
        "blocks":[
                    {
                        "key":"0",
                        "text":"Hello World!!!",
                    },
                    {
                        "key":"1",
                        "text":"This is my first Rich Text",
                    }
                ]
    }
    
    
  2. Erfassen Sie die Rich-Text-Formatierung mit dem inlineStyleRanges parameter

    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",
                    }
                ]
    }
    
  3. 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
  4. Verwenden Sie die stringify -Methode für die oben beschriebene JSON verwenden, um eine PUT Anfordern und Senden von Updates

    <OBJ Code><OBJ ID>
    
recommendation-more-help
5f00cc6b-2202-40d6-bcd0-3ee0c2316b43