Adobe Workfront API中的富文本字段
Adobe Workfront中的某些对象允许存储具有富文本格式的文本。 在Workfront API中,使用开源框架Draft.js将RTF存储为JSON。
概述示例
具有富文本格式的自定义字段称为具有富文本格式的字段,可以具有以下关联的值:
示例:用于检索富文本自定义表单字段字段值的基本GET请求:
<OBJ Code><OBJ ID><OBJ Code><OBJ ID>
示例:此请求将返回JSON中富文本字段的值,该富文本字段存储在parameterValue DE:Field中
{
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",
}
}
}
示例:这是上图所示响应的格式化版本。
{
"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":{
}
}
个块
存储富文本内容的JSON对象由两个主要部分组成:块和entityMap。
块是一个JSON对象,它表示一行带格式的文本。 由于单个自定义字段可以包含多行文本,因此每行文本都有自己的块,并且每个块在称为块的父数组中表示为一个元素。
示例:此处,自定义字段中的每一行文本都映射到数组块中的块元素。
由于每个块元素也是一个JSON对象,因此每个块由以下元素组成:key、text、type、depth、inlineStyleRanges、entityRanges和data。 其中每个元素均具有以下功能:
- 密钥:该块的唯一标识符。 键用于通过entityMap映射一行文本。 有关entityMap的详细信息,请参阅本文档的entityMap部分。
- 文本:从自定义字段中存储的文本内容行。
- 类型:描述所表示的文本类型。 例如,存储在块中的文本行可以是列表的一部分。 如果该行文本属于未排序列表,则其类型将定义为:unordered-list-item。
- 列表:当前不支持,但应该很快就会提供。
- Depth:一个参数,当直线是已排序或未排序列表的嵌套部分时,定义直线的深度。
- inlineStyleRanges:一个数组,用于描述应用于当前块表示的文本行的格式类型。
示例:以下是一个inlineStyleRanges数组,它描述了字符级别的每个样式。 在本例中:从索引0 (offset: 0)开始的9个字符(长度: 9)应用了样式“粗体”:
如果将多种类型的格式应用于单行,则样式将映射到inlineStyleRanges数组中的其他元素。
示例:以下是存储包含混合格式的文本行时块的外观:粗体文本和斜体。
{
"key":"a9ic6",
"text":"Bold text and Italics",
"type":"unstyled",
"depth":0,
"inlineStyleRanges":[
{
"offset":0,
"length":21,
"style":"BOLD"
},
{
"offset":14,
"length":7,
"style":"ITALIC"
}
],
...
},
entityMap和entityRanges
数据块可能包含实体,例如超链接或其他类型的样式化格式,这些实体已连接到位于自定义文本字段之外的数据源。
示例
从JSON检索纯文本
提交具有富文本格式的自定义字段时,所有文本都存储在数组块中。 但是,全文的每一行都存储在构成父数组块的每个单独块元素内的文本参数中。 因此,为了检索全文,需要提取每一行单独的文本并将其拼合在一起。 这可以通过循环遍历块中的所有元素并将每个文本参数连接在一起并使用行分隔符(\n)来实现。
示例:您的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)
使用Workfront API保存富文本字段值
要使用Workfront API保存富文本字段的以下值,请执行以下操作:
世界您好!!!
这是我的第一个富文本
-
通过将每一行文本组织到数组块中的块元素中,构建表示您尝试捕获的富文本字段值的JSON。
code language-none { "blocks":[ { "key":"0", "text":"Hello World!!!", }, { "key":"1", "text":"This is my first Rich Text", } ] }
-
使用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", } ] }
-
若要捕获第二行,文本 富文本 必须同时采用粗体和斜体格式。
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 尽管在初始版本中不支持entityMap功能,但在请求中传递此JSON时仍需要填写此字段。 -
使用上面概述的JSON上的stringify方法发出PUT请求并发送更新。
<OBJ Code><OBJ ID>