Campi Rich Text nell’API di Adobe Workfront

Alcuni oggetti in Adobe Workfront consentono l’archiviazione di testo con formattazione RTF. In Workfront API il testo RTF viene memorizzato come JSON utilizzando il framework open source Draft.js.

Esempio di panoramica

Un campo personalizzato con formattazione RTF è denominato Campo con testo RTF e possono essere associati ai seguenti valori:

Esempio: Richiesta di base del GET per recuperare il valore del campo modulo personalizzato Campo con testo RTF:

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

Esempio: Questa richiesta restituirà il valore di Campo con testo RTF in JSON memorizzato in parameterValue DE:Campo con testo RTF

{
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",
        }
    }
}

Esempio: Questa è una versione formattata della risposta presentata nella figura direttamente sopra

{
   "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":{

   }
}

Blocchi

Gli oggetti JSON che memorizzano il contenuto in formato Rich Text sono composti da due parti principali: blocchi e entityMaps.

Un blocco è un oggetto JSON che rappresenta una singola riga di testo formattato. Poiché un singolo campo personalizzato può avere più righe di testo, ogni riga di testo ha un proprio blocco e ogni blocco è rappresentato come un elemento in una matrice principale denominata blocchi.

Esempio: In questo caso, ogni riga di testo da un campo personalizzato viene mappata a un elemento di blocco nei blocchi array

Poiché ogni elemento del blocco è anche un oggetto JSON, ogni blocco è composto dagli elementi: chiave, text, tipo, profondità, inlineStyleRanges, entityRange, e dati. Ciascuno di questi elementi funziona come segue:

  • Chiave è l’identificatore univoco di quel blocco. La chiave viene utilizzata per mappare una riga di testo tramite entityMaps. I dettagli su entityMaps sono disponibili nella sezione entityMaps di questo documento.
  • Testo è la riga di contenuto di testo memorizzata dal campo personalizzato.
  • Tipo descrive il tipo di testo rappresentato. Ad esempio, una riga di testo memorizzata in un blocco potrebbe far parte di un elenco. Se tale riga di testo faceva parte di un elenco non ordinato, il relativo tipo sarebbe definito come: unordered-list-item.
  • Gli elenchi non sono attualmente supportati, ma dovrebbero essere disponibili a breve.
  • Profondità Questo parametro definisce la profondità della linea quando questa è una parte nidificata di un elenco ordinato o non ordinato.
  • inlineStyleRanges È una matrice che descrive i tipi di formattazione applicati alla riga di testo rappresentata dal blocco corrente.

Esempio: Di seguito è riportato un array inlineStyleRanges che descrive ogni stile a livello di carattere. In questo caso: 9 caratteri (lunghezza: 9) a partire dall'indice 0 (offset: 0) avevano lo stile Bold applicato:

Se a una singola riga sono stati applicati più tipi di formattazione, gli stili verranno mappati su elementi aggiuntivi nell’array ​ inlineStyleRanges.

Esempio: Ecco come apparirebbe un blocco quando si memorizza una riga di testo contenente la formattazione mista: Testo grassetto e corsivo

{
         "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
Tutte le versioni successive alla versione 20.3 supportano le opzioni di formattazione in grassetto, corsivo e sottolineato.

entityMaps ed entityRanges

Un blocco di dati può potenzialmente contenere entità come collegamenti ipertestuali o altri tipi di formattazione stilizzata che sono connesse a origini dati che si trovano al di fuori del campo di testo personalizzato.

Esempi

Recupero di testo normale da JSON

Quando viene inviato un campo personalizzato con formattazione RTF, tutto il testo viene memorizzato nell’array blocchi. Tuttavia, ogni riga del testo completo viene memorizzata nel parametro di testo all’interno di ciascuno dei diversi elementi del blocco che compongono l’array principale blocchi. Quindi, per recuperare il testo completo, ogni riga di testo separata deve essere estratta e ritagliata insieme. A questo scopo, è possibile eseguire un ciclo su tutti gli elementi nei blocchi e concatenare ogni parametro di testo con un delimitatore di riga (\n).

Esempio: Ecco come potrebbe apparire il tuo JS:

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)

Salvataggio di un valore di campo in formato Rich Text tramite l’API Workfront

Per salvare i seguenti valori di un campo in formato Rich Text utilizzando l’API Workfront:

        Ciao Mondo!!!
        Questo è il mio primo Rich Text
  1. Creare un JSON che rappresenta il valore del campo in formato Rich Text che si sta tentando di acquisire organizzando ogni riga di testo in un elemento di blocco, nell’array blocchi

    code language-none
    {
        "blocks":[
                    {
                        "key":"0",
                        "text":"Hello World!!!",
                    },
                    {
                        "key":"1",
                        "text":"This is my first Rich Text",
                    }
                ]
    }
    
    
  2. Acquisire la formattazione RTF utilizzando inlineStyleRanges parametro

    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. Per acquisire la seconda riga, il testo "Rich Text" deve essere formattato in grassetto e corsivo.

    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
    Anche se la funzionalità entityMap non è supportata durante la versione iniziale, rimane comunque un campo obbligatorio per trasmettere questo JSON in una richiesta
  4. Utilizza il stringioso metodo JSON descritto sopra per effettuare una PUT richiedere e inviare aggiornamenti

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