DocumentazioneWorkfrontGuida di Workfront

Campi Rich Text nell’API di Adobe Workfront

Ultimo aggiornamento: 28 maggio 2025
  • Argomenti:

Creato per:

  • Sviluppatore

Alcuni oggetti in Adobe Workfront consentono l’archiviazione di testo con formattazione RTF. Nell’API di Workfront, 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 può essere associato ai seguenti valori:

Esempio Rich Text

Esempio: una richiesta GET di base 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 Field con testo RTF in JSON memorizzato nel parametroValue DE:Field 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: block ed 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 un array principale denominato blocchi.

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

Mappatura Rich Text

Poiché ogni elemento del blocco è anche un oggetto JSON, ogni blocco è composto dagli elementi chiave, testo, tipo, profondità, inlineStyleRanges, entityRanges 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 che viene 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.
  • Elenchi: attualmente non supportato, ma dovrebbe essere disponibile a breve.
  • Profondità: parametro che definisce la profondità della linea quando questa è una parte nidificata di un elenco ordinato o non ordinato.
  • inlineStyleRanges: Matrice che descrive il tipo o i tipi di formattazione applicati alla riga di testo rappresentata dal blocco corrente.

Esempio: questo è 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) era applicato lo stile Grassetto:

Mappatura Rich Text

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 che contiene il formato misto: testo in 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 nei blocchi di matrice. Tuttavia, ogni riga del testo completo viene memorizzata nel parametro di testo all’interno di ciascuno degli elementi di blocco separati che compongono i blocchi di matrice principali. 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:

        Salve Mondo!!!
        Questo è il mio primo Rich Text
  1. Costruisci JSON che rappresenta il valore del campo in formato Rich Text che stai tentando di acquisire organizzando ogni riga di testo in un elemento blocco nei blocchi array.

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

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

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

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