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 på RTF

Exempel: En grundläggande GET-begäran om att hämta värdet för fältet med anpassat RTF-formulärfält:

<OBJ Code><OBJ ID><OBJ Code><OBJ ID>

Exempel: Den här begäran returnerar värdet för Field med RTF i JSON som lagras i parameternValue 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: Detta ä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: block 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 som kallas block.

Exempel: Här mappas varje textrad från ett anpassat fält till ett blockelement i arrayblocken.

RTF-mappning

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: 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: Den rad 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: En parameter som definierar radens djup när raden är en kapslad del av en ordnad eller osorterad lista.
  • inlineStyleRanges: 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 alla format på teckennivå. I det här fallet användes formatet Fet: 9 tecken (längd: 9) med början från index 0 (förskjutning: 0):

RTF-mappning

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"
            }
         ],
         ...
      },
NOTE
Alla versioner efter version 20.3 har stöd för formatering med fet stil, kursiv och understrykning.

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 arrayblocken. Varje rad i den fullständiga texten lagras dock i textparametern i varje separat blockelement som utgör det överordnade arrayblocken. 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
  1. 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 arrayblocken.

    code language-none
    {
        "blocks":[
                    {
                        "key":"0",
                        "text":"Hello World!!!",
                    },
                    {
                        "key":"1",
                        "text":"This is my first Rich Text",
                    }
                ]
    }
    
    
  2. Fånga formateringen med hjälp av 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",
                    }
                ]
    }
    
  3. 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.
  4. Använd metoden stringify på den JSON som beskrivs ovan för att göra en PUT-begäran och skicka uppdateringar.

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