前往 ServiceNow Store 页面并搜索 Adobe Acrobat Sign。
概述
Adobe Acrobat Sign for ServiceNow 应用程序允许您使用 ServiceNow 平台的原生功能发送文档进行签署。Acrobat Sign 与 ServiceNow 的集成为您提供以下特性和功能的访问权限:
- 向多个收件人发送文档进行签署。
- 跟踪签署过程的整个生命周期,并识别每个阶段的预期签署者。
- 检索已签署的文档,其中包含嵌入式或单独的审核跟踪文档。
- 检索在签署过程之前或期间在文档中输入的表单数据。
- 创建签署过程草稿,用于初始审阅和后续提交。提交前对签署人的任何修改都会同步到 ServiceNow 中。
- 在签署过程中生成并向相关人员发送电子邮件通知。
- 从 ServiceNow 中的本地文件或外部来源获取要签署的文档。
- 使用文档模板,其中的字段可以在提交前使用 ServiceNow 记录中的数据进行填写。它允许您使用单个模板,基于选定的主题记录(例如问题或服务请求)生成特定于用户的文档。
- 使用您 Adobe Acrobat Sign 帐户的库模板,这些模板会同步到 ServiceNow,并可在提交过程中进行选择。
Adobe Acrobat Sign for ServiceNow:安装和自定义指南提供以下操作说明:
- 安装适用于 ServiceNow 应用程序的 Acrobat Sign
- 连接到 Acrobat Sign
- 为 ServiceNow 应用程序配置 Acrobat Sign
- 将 Acrobat Sign 与合同管理结合使用
- 使用脚本 API
安装并配置 Acrobat Sign for ServiceNow 应用程序后,您可以使用它来发送、签署、跟踪和管理协议。请参阅 Adobe Acrobat Sign for ServiceNow:用户指南。
您必须是 Adobe Acrobat Sign 管理员和 ServiceNow 系统管理员 (admin),才能在 ServiceNow 上安装应用程序。
从搜索结果中,选择 Adobe Acrobat Sign,然后选择 获取。
在安装应用程序期间,请禁用任何弹出拦截器。
如果出现提示,请使用您的 ServiceNow 管理员凭据登录,并按照安装步骤操作。
要验证安装,请在 ServiceNow 实例的顶部菜单中选择 全部 > 系统应用程序 > 我的公司应用程序,然后选择 已安装选项卡。它显示 Adobe Acrobat Sign 最新版本的列表。
Adobe Acrobat Sign for ServiceNow 插件配置为与以下域配合使用:
- service-now.com
- servicenowservices.com
servicenowservices.com 适用于 Government Cloud 客户,需要其他系统属性设置。如果您的域在 servicenowservices.com 域上,您必须创建/设置系统属性 x_adosy_as.oauth_redirect_host 使用您实例的 完整子域(例如 mydomain.servicenowservices.com)。
"自助服务"菜单显示新的 Adobe Acrobat Sign 选项,包含以下两个模块:
- 我的已签署文档 - 包含已完成状态的协议列表,其中登录用户为请求者或签名者。
- 待签名 - 包含等待登录用户签名的协议列表。协议处于"发出以供签名"或"发出以供审批"状态。
注意:自助服务菜单仅对具有签名者 (x_adosy_as.adobe_sign_signer) 角色的用户可见。
所有应用程序的菜单包含 Adobe Acrobat Sign 选项,其中包含以下模块:
- 发送以供签名 - 打开记录生产器,用于创建和提交协议。
- 我的协议 - 所有协议的列表,其中登录用户为请求者或签名者。
- 我的签名 - 登录用户作为协议参与者(签名者)的记录详情。
操作
- 协议 - 签名流程的后端详情。包含 JSON 以及正在接收和处理的所有 Adobe Acrobat Sign 事件。
- 来源文档 - 表示可以添加到协议中的文档。可以是本地或库
- 参与者 - 签名者及其签名流程的详情。
- 事件 - 每个 Adobe Acrobat Sign 事件发送和接收内容的后端详情。
- 表单数据 - 协议签署后保存返回表单数据的表。这可用于报告文档及其字段数据。
管理
- 连接到 Acrobat Sign - 连接屏幕,可将有效的 Adobe Acrobat Sign 帐户关联到 ServiceNow。
- Acrobat Sign 组 - 包含 Acrobat Sign 组名称和 ID 的列表。
- Acrobat Sign 用户 - 包含 Acrobat Sign 用户的详细信息。
- 电子印章 -
- 文档模板 - 可添加到协议的模板化文档。可以是本地或库。
- 文档字段 - 嵌入在模板文档中的表单字段的详细信息。
- 合并规则 - 将文档模板与 ServiceNow 中的某种类型的主题记录关联。
- 合并字段 - 将主题记录中的字段关联到相关文档模板中包含字段的记录。
- 属性 - Adobe Acrobat Sign 的默认设置,包括签署后 URI 重定向、通知和审核跟踪。
帮助和支持 - Adobe Acrobat Sign 帮助的链接。
- "发送以供签名"、"我的协议"和"我的签名"模块对具有发送者 (x_adosy_as.adobe_sign_sender) 角色的用户可见。
- 操作和管理菜单仅对具有管理员 (x_adosy_as.adobe_sign_admin) 角色或经理 (x_adosy_as.adobe_sign_manager) 角色的用户可见。
服务门户小部件
如果您想要将 Adobe Acrobat Sign 添加到您的服务门户,可以在 URL /adobe_sign 查看演示。
此门户仅限于"x_adosy_as.adobe_sign_sender"和"x_adosy_as.adobe_sign_signer"角色。
要将此功能添加到您自己的门户,请复制小部件并修改角色以适合需要。
- Adobe Acrobat 仪表板项目列表 - 协议列表页眉小部件使用的项目列表。
- Adobe Acrobat Sign 发送以供签名 - 用于从模板或文件创建新协议的小部件。
\n - Adobe Acrobat Sign 协议列表 - 用于查看协议列表的小部件。
服务门户页面
- Adobe Acrobat Sign - 包含 Adobe Acrobat Sign 弹出小部件,可从 ServiceNow 中的记录使用以动态生成新协议。
- Adobe Acrobat Sign 主页 - 这是应用程序附带的演示服务门户的主页。
应用程序包含四个角色:
- 签署人(x_adosy_as.adobe_sign_signer)
- 拥有 x_adosy_as.adobe_sign_signer 角色的 ServiceNow 用户被授予 Adobe Acrobat Sign 自助服务模块的访问权限
- 他们还可以访问用户服务门户小组件
- 需要为任何需要签署文档/协议的用户/组添加此角色
- 发送人(x_adosy_as.adobe_sign_sender)
- 拥有 x_adosy_as.adobe_sign_sender 角色的 ServiceNow 用户可以访问应用程序功能
- 需要为任何需要跟踪他们请求的或需要签署的文档/协议的用户/组添加此角色
- 管理员(x_adosy_as.adobe_sign_manager)
- 拥有"x_adosy_as.adobe_sign_manager"角色的 ServiceNow 用户对 Acrobat Sign 功能具有管理者级别的访问权限
- 管理者可以管理所有发送人创建的协议
- 此角色授权取消其他用户创建的协议
- 管理员 (x_adosy_as.adobe_sign_admin)
- 拥有"x_adosy_as.adobe_sign_admin"角色的 ServiceNow 用户对所有功能具有完全访问权限
默认情况下,应用程序带有一个应分配给可以签署文档的用户的角色。要让所有用户都能访问签署文档,您必须更新设置。
您对应用程序文件所做的更改将阻止应用将来的更新。
将对更新集所做的任何更改保存下来,以便在应用程序更新后可以重新应用这些更改。
在应用到生产环境之前,始终在专用测试环境中测试任何自定义设置。
Adobe Acrobat Sign for ServiceNow 应用程序设计为同时适用于商业和政府 (FedRAMP) 帐户。如果您不确定自己拥有什么帐户,请按照适用于商业云客户的说明操作。
在 ServiceNow 中安装 Adobe Acrobat Sign 应用程序后,Adobe Acrobat Sign 组或帐户管理员必须使用以下步骤将 ServiceNow 连接到 Adobe Acrobat Sign Commercial Cloud:
\n
导航到Adobe Acrobat Sign > 管理 > 连接到 Adobe Acrobat Sign。
\n
在出现的对话框中,选择连接。
使用管理员凭据登录您的 Acrobat Sign 帐户。
在出现的权限对话框中,选择允许访问以授权权限并建立连接。
身份验证在弹出窗口中进行。如果您没有看到身份验证面板,请检查弹出拦截器是否已禁用。
连接完成后,您会看到一条确认信息,显示已连接的 Acrobat Sign 帐户和与其关联的 ServiceNow 帐户。
在 ServiceNow 中安装 Adobe Acrobat Sign 应用程序后,Adobe Acrobat Sign 政府云组或帐户管理员用户即可将 ServiceNow 连接到 Adobe Acrobat Sign 政府云。
从左侧面板中,选择Adobe Acrobat Sign > 管理 > 属性。
在打开的应用程序属性页面中:
- 启用使用 Adobe Acrobat Sign 政府云切换开关。
- 找到名为连接登录提示的属性,并将值设置为您将用于登录 Adobe Acrobat Sign 政府云的电子邮件地址。
- 选择保存。
导航至Adobe Acrobat Sign > 管理 > 连接到 Acrobat Sign。
在出现的页面上,选择连接。
如果出现提示,请登录您的 Adobe Acrobat Sign 政府云帐户。
建立连接后,应用程序会重定向回 ServiceNow 并自动更新连接状态。
要访问和设置应用程序属性,请导航至 Adobe Acrobat Sign > 管理 > 属性。
它显示以下默认设置:
- 主机名 [x_adosy_as.redirect_host]:如果您有自定义实例 URL,请指定要在重定向 URI 中用于 OAuth 和 API 回调(例如 Webhook)的完全限定主机。
\n默认情况下,此值为空,主机是由"glide.servlet.uri 系统属性"保存的值。
\n它仅适用于 ServiceNow 实例重定向。如果您想在签名后将签名者重定向到不同的主机,请在签名者重定向 URI (post_sign_uri) 属性中提供该主机。 - 默认签名后 URL [x_adosy_as.post_sign_uri]:用户在 Acrobat Sign 中签署文档后重定向到的默认位置。当在协议创建过程中未指定签名后 URI 时使用。此 URI 相对于指定的实例名称,但可以通过包含协议(如 https://www.adobe.com/))来覆盖,这允许签名后重定向到此 ServiceNow 实例以外的其他位置。创建的协议的 sys_id 可以在 URL 中使用"{sys_id}"注入。默认值为 "/x_adosy_as_agreement_list.do?sysparm_query=requested_byDYNAMIC90d1921e5f510100a9ad2572f2b477fe%5EORsignersDYNAMIC90d1921e5f510100a9ad2572f2b477fe%5Estate=Complete%5EORDERBYDESCsys_created_on",它将用户带到已完成协议的列表。
- 签名者重定向延迟 [x_adosy_as.post_sign_delay]:用户在 Adobe Acrobat Sign 中签署文档后被重定向前的延迟(以秒为单位)。默认值为 3。
- 点击劫持防护 [x_adosy_as.clickjacking_domains]:提供一个以逗号分隔的父域 URL 列表,这些域中发送供签名的文档可能会包含在 iframe 中,例如 service-now.com。
政府云客户需要此项。将此字段留空可能会导致 Acrobat Sign 在框架中显示时出现空白页面。 - 允许来自 Adobe Acrobat Sign 的电子邮件 [x_adosy_as.send_adobe_sign_emails]:控制在签名过程中是否由 Adobe Acrobat Sign 发送通知电子邮件。默认值为 false。
- 弹出草稿协议 [x_adosy_as.popout_draft]:默认情况下,单击协议上的"审阅详细信息"按钮将在同一浏览器窗口中在 Acrobat Sign 中打开草稿。
\n将此选项设置为 true 可在新窗口中打开。默认值为 false。 - 包含审核 [x_adosy_as.include_audit]:控制已签名文档中包含的审核跟踪。默认值为 true。
- 使用 Adobe Acrobat Sign Government Cloud [x_adosy_as.fedramp]:Adobe Government Cloud 客户必须启用此属性,以便 Acrobat Sign for ServiceNow 使用 Acrobat Sign Government Cloud 服务。默认值为 false。
- 连接登录提示 [x_adosy_as.login_hint]:首次连接到 Adobe Acrobat Sign Government Cloud 时使用的 login_hint 值。这将自动填充"连接到 Acrobat Sign"页面,通常是帐户管理员用户的电子邮件。默认值为空。
- 协议活动格式器字段 [glide.ui.x_adosy_as_agreement_activity.fields]:设置在协议记录上显示的活动格式中应显示哪些字段。
默认值为"name, state, status,agreement_id,compose_url,post_sign_uri,etag"。 - "我的协议"问题 [x_adosy_as.my_agreements_query]:在门户等位置显示我的协议时使用的问题。默认值为"requested_byDYNAMIC90d1921e5f510100a9ad2572f2b477fe^ORsignersDYNAMIC90d1921e5f510100a9ad2572f2b477fe",返回用户作为请求者或签署者的协议。
- 多部分文件扩展名 [x_adosy_as.multipart_extension]:临时多部分文件附件的文件扩展名。默认(推荐)值为"mpfd"。
- 应用程序记录 [x_adosy_as.logging.verbosity]:控制系统记录。默认值为"info"。
- 调试连接 [x_adosy_as.connect_debug]:连接到 Acrobat Sign 时显示诊断警报。默认值为 false。
默认重定向 URL 属性适用于"登录后 URI"字段中的值尚未设置的任何协议。
重定向 URL 中不支持未编码的特殊字符或空格。因此,如果应用程序属性中的"默认登录后 URL"包含插入符号 (^),您必须将其编码为 %5E。
例如,/x_adosy_as_agreement_list.do?sysparm_query=requested_byDYNAMIC90d1921e5f510100a9ad2572f2b477fe^ORsignersDYNAMIC90d1921e5f510100a9ad2572f2b477fe^state=Complete^ORDERBYDESCsys_created_on 必须更改为:
/x_adosy_as_agreement_list.do?sysparm_query=requested_byDYNAMIC90d1921e5f510100a9ad2572f2b477fe%5EORsignersDYNAMIC90d1921e5f510100a9ad2572f2b477fe%5Estate=Complete%5EORDERBYDESCsys_created_on
其余属性管理 Acrobat Sign 在签署过程中是否发送通知(默认值 = 否)以及已签署文档是否包含审核记录(默认值 = 是)。
\n
Adobe Acrobat Sign 应用程序包含可根据您的要求进行配置的自定义组件。请参阅以下组件列表,了解如何修改每个组件。
"使用 Adobe Acrobat 签署"是任务 [task] 表上的 UI 操作按钮。只有具有发送者角色 (x_adosy_as.adobe_sign_sender) 的用户才能访问该按钮。它允许发送者向协议添加文档和签署者,并将附加的文档提交给 Adobe Acrobat Sign 进行签署。
系统管理员可以按如下方式将"使用 Adobe Acrobat 签署"操作添加到其他表:
- 使用以下两种方式之一打开现有的"使用 Adobe Acrobat 签署"操作:
- 在任何从 Task 扩展的表单(如 Incident)上,执行右键单击 > 配置 UI 操作。
- 导航至系统定义 > UI 操作,然后搜索使用 Adobe Acrobat 签署。
- 根据需要更改表名称。
- 右键单击顶部操作栏并选择插入并保持以使用新表创建现有记录的副本。
"Adobe Acrobat Sign 相关列表"显示与配置该列表的记录相关的协议。只有具有用户角色 (x_adosy_as.adobe_sign_user) 的用户(即协议的申请者或签署者)才能在相关列表上看到协议。
系统管理员或具有"personalize_form"角色的用户可以配置表单和相关列表布局。
\n
将相关列表添加到表单:
- 从相关表单中,右键单击并导航至配置 > 相关列表。
- 从可用列表中,选择Adobe Acrobat Sign。
- 选择右箭头将其添加到已选择列表。
- 选择保存。
该操作会将您带到正在配置的表单,Adobe Acrobat Sign 相关列表在表单底部可见。
Acrobat Sign for ServiceNow 应用程序附带以下服务门户元素,可与您自己的服务门户一起使用或复制。
应用程序自带的 Adobe Acrobat Sign 服务门户不建议使用或扩展。它仅支持发送以供签名界面。
可通过 /adobe_sign 访问门户。
应用程序包含 2 个服务门户页面:
- Adobe Acrobat Sign (x_adosy_as_send)
- Adobe Acrobat Sign 主页 (x_adosy_as_home)
Adobe Acrobat Sign (x_adosy_as_send) 页面专门用于发送以供签名界面,不应修改。
Adobe Sign 主页 (x_adosy_as_home) 被指定为服务门户主页,旨在作为所含小组件的示例展示。
您可以根据需要使用应用程序自带的小组件。为了能够跟踪小组件更改并从应用程序获取更新,您必须仅在小组件的仿制版本中进行任何更改。
- Adobe Acrobat Sign 发送以供签名:用于从模板和/或上传的文件创建协议。通过发送以供签名菜单项和使用 Adobe Acrobat 签名 UI 操作进行访问,具有发件人角色的用户可以使用。
小组件选项:小组件设计为可根据需要通过小组件实例选项或 URL 参数进行自定义。使用文档模板和合并规则自动填充表单数据。使用 URL 参数时,可以将布尔值选项设置为"true"或"1"。
名称 |
类型 |
说明 |
subject_table |
字符串 |
协议所属表的名称。 |
subject_id |
字符串 |
协议所属记录的 sys_id。 |
agreement_name |
字符串 |
新协议的名称。 |
附件 |
字符串 |
协议中要使用的附件 sys_id 列表。 |
模板 |
字符串 |
协议中要使用的文档模板 sys_id 列表。 |
签名者 |
字符串 |
要添加为签名者的用户或电子邮件地址列表。 |
抄送 |
字符串 |
要添加为抄送条目的用户或电子邮件地址列表。 |
password_protect |
布尔值 |
要求用户设置密码来保护协议。即使 hide_options 或 lock_options 为真,也会要求用户设置密码。 |
send_emails |
布尔值 |
让 Adobe 在签名过程中发送电子邮件通知。 |
submit_as_draft |
布尔值 |
创建草稿协议,而不是立即提交签名。 |
copy_to_subject |
布尔值 |
将已签名的协议文件复制到主题记录。必须提供有效的 subject_table 和 subject_id。 |
post_sign_uri |
字符串 |
为签名者在完成签名后提供自定义重定向。默认重定向会将用户发送到协议记录。 |
hide_options |
字符串 |
用逗号分隔要隐藏的选项列表(password_protect、send_emails、submit_as_draft、copy_to_subject)。设置为真可让用户看不到所有选项。 |
lock_options |
字符串 |
用逗号分隔要设为只读的选项列表(password_protect、send_emails、submit_as_draft、copy_to_subject)。设置为真可阻止用户更改所有选项。 |
hide_subject |
布尔值 |
阻止选择主题中的附件。 |
skip_documents |
布尔值 |
跳过初始文档面板。此设置仅适用于已预选附件或模板的情况。 |
- Adobe Acrobat 仪表板项目列表:可用于在员工或客户服务门户中添加需要签名的当前协议列表。此列表用于 Adobe Sign 主页的待办事项功能。
\n要访问此列表中显示的记录,请前往自助服务 > Adobe Acrobat Sign > 待签名。 - Adobe Acrobat Sign 页眉:用于在 Adobe Sign 主页中展示待办事项功能。
文档模板定义了可选择纳入协议的模板。模板可用于提供标准文档,该文档可在许多个体协议中重复使用。"源文档"记录引用模板,使关联协议能够使用该模板的功能。
模板可以是 ServiceNow 实例的本地模板,也可以是从连接的 Adobe Acrobat Sign 帐户同步详情的库模板。
安装和配置应用程序后,管理员可以同步库模板。Adobe Acrobat Sign 库模板在 Acrobat Sign 帐户内定义,其详情会同步到 ServiceNow 中。库模板的定义文档也存储在连接的 Acrobat Sign 帐户中,因此提交时无需上载。
要将库模板同步到 ServiceNow:
- 导航到 Adobe Acrobat Sign > 管理 > 文档模板。
- 选择刷新库。
它会使用来自已连接的 Acrobat Sign 帐户的库模板更新列表视图。
\n
本地模板的定义文档作为附件记录保存在 ServiceNow 中,必须在提交过程中上传到 Acrobat Sign。
模板的文档可能包含也可能不包含需要使用协议主题记录中的数据进行预填充的表单字段。如果文档包含此类表单字段,您必须使用模板。
- 导航到 Acrobat Sign > 管理 > 文档模板。
- 选择新建。
- 在模板"新建"记录页面上:
- 为模板提供名称。
- 将类型设置为"本地"。
- 右键单击,然后选择 "保存"。
- 要将文档与模板关联,请选择文件并将其拖到模板记录上,或选择页眉中的回形针图标并选择文件。添加文件后,选择 X 图标以关闭对话框。
它会将文档附加到文档模板,并在"文档"字段中引用。
\n
您需要按照创建不含字段的模板所述的相同步骤进行操作。但是,一旦文档关联后,您必须根据需要完成以下附加配置步骤:
- 验证"可填写"字段是否设置为真。
当包含可填写字段的文档与模板关联时,系统会自动选中该字段。
- 创建文档字段记录。
您必须为父文档模板创建文档字段记录,并定义嵌入在模板文档中的表单字段的详细信息。
为此,请保存文档模板记录,然后选择刷新字段。
这会在"文档字段"相关列表中填入与附加文档上可填写表单字段对应的记录。
- 配置合并规则
\n
合并规则将文档模板与 ServiceNow 中某种类型的主题记录关联起来。
单个文档模板可以链接到多个合并规则(用于预先填充模板字段的每种主题记录类型对应一个规则)。
例如,模板可以使用来自问题、服务请求或更改请求记录的数据进行填充(在这种情况下,模板会有三个合并规则,每个主题表对应一个)。
要配置合并规则:
- 转到合并规则相关列表。
- 选择新建。
- 选择表,例如问题。
- 右键单击并选择保存。
- 配置合并字段
\n
合并字段记录将主题记录中的字段链接到相关文档模板中包含的字段。配置合并规则时需要手动创建合并字段。
要创建合并字段记录:
- 导航到 Adobe Acrobat Sign > 管理 > 合并规则。
- 在合并规则记录上,选择刷新字段。
\n它使用文档字段填充"合并字段"嵌入式列表。 - 要将相关文档字段关联到其对应的记录字段,请选择要映射的文档字段(如姓名)对应记录字段的关联。
- 从下拉菜单中选择相关的 记录字段(如呼叫方)。
- 选择更新。
它会将您重新定向回合并规则记录。合并字段相关列表现在包含在上一步中选择的记录字段的值。
为了保持整洁,请删除(并确认)不会进行映射的其余合并字段,以便合并字段嵌入式列表仅包含正在映射的值。
\n
Acrobat Sign for ServiceNow 允许您通过创建记录生成器来创建用户可通过服务目录访问的新协议。您可以配置记录生成器来收集要合并到文档中的任何数据,并自动创建协议并将其发送给用户。
具有catalog_admin或admin权限的用户可以创建目录项。以下步骤说明如何创建名为记录生成器的目录项。您可以复制这些步骤来创建其他目录项。
注意:配置实例时,请确保未选择 Adobe Acrobat Sign 应用程序。
创建每个记录生成器的过程可能因文档字段、模板、变量等的具体要求而有所不同;但是,相同的原则适用。本指南中的示例展示了如何创建停车许可证协议。
创建记录生成器:
导航到服务目录 > 目录定义 > 记录生成器,然后选择新建。
在打开的新记录生成器页面上:
- 为记录指定名称。
- 将表名称设置为 Agreement [x_adosy_as_agreement]。
- 输入简短的描述。
- 将 "重定向到" 字段设置为生成的任务记录。
选择辅助功能选项卡,并根据需要设置目录、类别和可用性字段。然后,右键单击页眉栏,选择保存。
您可以使用"类别"和"目录"相关列表来设置这些字段。
使用变量相关列表,根据需要添加变量以匹配文档字段。
在此示例中,我们添加姓名、员工和经理字段。
许可证名称"问题变量的默认值为:"javascript:'Parking Permit for ' + gs.getUserDisplayName()'
配置记录生产器脚本,该脚本将获取变量并创建协议以发送以供签名。在"脚本"字段中:
- 复制并粘贴以下脚本,该脚本读取目录项变量。
- 更新变量定义,以便从生产者收集信息。
- 更新您正在使用的文档模板 sys_id。
- 如果您希望用户在签名后前往其他位置,请更新 post_sign_uri。
// Adobe Acrobat Sign 记录生产器示例,用于停车许可证模板
(function() {
// 收集用户填写的变量中需要的信息
var employee_id = producer.employee + '';
var employee_name = producer.employee.getDisplayValue() + '';
var manager_id = producer.manager + '';
var manager_name = producer.manager.getDisplayValue() + '';
var agreement_name = "Parking permit for " + employee_name;
// 正在使用的文档模板的硬编码 sys_id
var document_template = '5a2e0131db4c7c10c39151fcd39619af'; // Parking Permit
// 设置要与上述文档模板合并的数据。
// 每个属性都是我们要映射到的文档字段的名称。
var merge_data = {
name : agreement_name,
employeename : employee_name,
managername : manager_name,
};
// 设置新协议
var agreement = new x_adosy_as.Agreement(current);
// 添加我们希望签署的文档
agreement.addDocument(document_template, merge_data);
// 添加签名者
agreement.addSigner(employee_id);
agreement.addSigner(manager_id);
// 设置协议名称
current.name = agreement_name;
// 设置签名者在签名后将重定向到的 URL
current.post_sign_uri = '/x_adosy_as_agreement.do?sys_id=' + current.sys_id;
// 将状态设置为"就绪"以立即发送以供签名
current.state = 'Ready';
})();
要将签名文档添加到现有目录项,您可以向工作流程添加一个生成协议的任务,以及一个将协议分配给用户进行签名的目录任务。
以下示例演示了如何使用 Acrobat Sign 应用程序,但配置步骤的具体细节可能因您的流程要求而有所不同。
要从工作流程活动创建协议,您必须配置以下组件:
- 目录任务:创建协议,提交以供签名,并向签名者分配任务。
- 脚本操作:响应协议签名时触发的事件,然后关闭任务,提供反馈回路并允许工作流程继续进行。
创建目录任务:
- 在工作流程编辑器中,选择"核心"选项卡。
- 导航至核心活动 > 任务,然后将目录任务活动拖动到工作流中的适当位置。
- 为任务命名并设置优先级。
- 将"等待完成"设置为真。
- 在"脚本"部分中,将"高级"标志设置为真,然后在"高级脚本"字段中编写您的代码。下面给出了示例代码。
- 选择更新。
// 示例任务工作流程活动创建
(function () {
// 需要签署协议的用户
var signer_id = current.request.requested_for + '';
var signer_name = current.request.requested_for.getDisplayValue() + '';
// 协议的名称
var agreement_name = current.short_description + ' for ' + signer_name;
// 此操作中 Adobe Sign 文档模板的硬编码 sys_id
// 实际上,这确实应当是一个工作流变量,以便通过数据来驱动。
var document_template = '2a9b1f57db508810257e73278c9619dc'; // 我的模板
// 无需调用 newRecord() 即可设置 GUID,这是协议主题所必需的
task.setNewGuid(gs.generateGUID(task.getTableName()));
// 设置任务
task.short_description = current.short_description;
task.assigned_to = signer_id;
task.description = '协议:' + '\'' + agreement_name + '\'' +
'已提交,等待您签名。\n' +
'要签名,您可以:\n' +
'1. 导航到:\'自助服务 > Adobe Sign > 待签名\',或\n' +
'2. 单击 \'Adobe Acrobat Sign\' 中协议的关联 '+
相关列表(见下方)。
// 协议选项(协议记录上的字段)
var options = {
submit_as_draft: true // 在发送前先在 Adobe 中审阅协议
};
// 创建一个对象,以协助签名过程
var adobe = new x_adosy_as.AdobeSign();
// 创建协议,并将任务记录作为主题
adobe.createAgreement(agreement_name, task, options);
// 添加文档模板。
adobe.addDocument(document_template);
// 添加签名者。 这可能是用户 sys_ids 或电子邮件地址。
adobe.addSigner(signer_id);
// 将协议提交给 Adobe。
adobe.submitAgreement();
})();
现在,您可以设置脚本操作,以便在协议完成时自动将目录任务设置为"已关闭完成"状态。您必须将脚本操作配置为由协议表上的 x_adosy_as.agreement.complete 事件触发。
要创建新的脚本操作:
- 导航至系统策略 > 事件 > 脚本操作,然后单击新建。
- 在新脚本操作页面上:
- 为脚本操作指定名称。
- 将事件名称设置为x_adosy_as.agreement.complete。
- 选中活动复选框。
- 在脚本字段中,从下面的脚本操作:示例代码复制并粘贴脚本。
- 右键单击页眉栏并选择保存。
脚本操作:示例代码
// 用于将目录任务状态设置为关闭完成的脚本操作
(function () {
var catalog_task = current.subject_id.getRefRecord();
if (!catalog_task.isValidRecord() || catalog_task.getTableName() != 'sc_task') {
return;
}
catalog_task.state = 3; // 已关闭完成
catalog_task.update();
})();
导航至系统定义 > UI 操作,然后选择新建。
或者,从合同 [ast_contract] 表单中,右键单击然后选择配置 > UI 操作 > 新建。
\n
在"UI 操作新记录"页面上,输入以下详细信息:
- 确保表格为"合同 [ast_contract]"。
- 在"名称"字段中,为记录提供名称。
- 从"表格"下拉菜单中,选择一个表格。
- 输入订购。
- 选中活动复选框。
- 选择显示插入复选框。
- 选择显示更新复选框。
- 选择表单按钮复选框。
- 完成后,右键单击顶部栏,然后选择保存。
它保存表单并重新加载。
在"条件"字段中,输入用于显示 UI 操作的条件。
当前示例将条件选择为:'current.state == 'draft' andand current.substate == 'under_review' andand !current.approver.nil()'。
在"脚本"字段中,输入代码(请参考下方示例代码)来创建协议记录、设置特定字段值并将其提交到 Adobe Acrobat Sign。
您提供的代码可能会根据您的具体要求而有所不同,但一般原则适用。
文档模板的硬编码 sys_id 是指我们在示例中使用的模板。
您使用的将是您创建的模板(有关如何创建模板的详细信息,请参阅创建本地模板)。
// 用于创建新 Adobe Acrobat Sign 协议的示例 UI 操作
(function() {
// 协议名称
var agreement_name = 'Contract: ' + current.short_description;
// 此操作的文档模板的硬编码 sys_id
var document_template = '6d0cdc26db708c50257e73278c9619c4'; // 合同
// 创建对象以协助签署过程
var adobe = new x_adosy_as.AdobeSign();
// 创建协议并将当前记录作为主体
adobe.createAgreement(agreement_name, current);
// 添加文档模板。这也可以是附件 sys_id。
adobe.addDocument(document_template);
// 添加签署者。这可以是用户 sys_id 或电子邮件地址。
adobe.addSigner(current.approver);
// 将协议提交给 Adobe。
adobe.submitAgreement();
// 将用户重定向回此记录。
action.setRedirectURL(current);
})();
您可以使用内部 API 轻松扩展 Adobe Acrobat Sign 应用程序以配合您的任何流程。API 可通过 x_adosy_as 命名空间访问。
AdobeSign()
创建 AdobeSign 实例。
示例:
// 创建新的 AdobeSign 实例
var adobe = new x_adosy_as.AdobeSign();
#addCcUser(String user_id)
为当前协议添加抄送条目,以便与非参与用户共享。可以通过提供电子邮件地址来添加未注册为 ServiceNow 用户的用户。
参数:
名称 |
类型 |
状态 |
说明 |
user_id |
字符串 |
必需 |
用户的 sys_id 或电子邮件地址。 |
返回:
类型 |
说明 |
void |
方法不返回值 |
示例:
// 向协议添加抄送用户
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addCcUser(current.requested_by);
adobe.addCcUser('abel.tuter@example.com');
#addDocument(String doc_selector, Object merge_data)
向当前协议添加文档或模板。
参数:
名称 |
类型 |
状态 |
说明 |
doc_selector |
字符串 |
必需 |
模板名称,或模板或附件的 sys_id。 |
merge_data |
对象 |
可选 |
以文档字段名称为键、文档字段值为值的键值对象。 |
返回:
类型 |
说明 |
字符串 |
如果成功,则返回所创建来源文档记录的 sys_id。 |
示例:
// 使用模板创建协议
var template_id = '2a9b1f57db508810257e73278c9619dc';
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addDocument(template_id);
#addElectronicSeal(String seal_id)
向当前协议添加电子印章。
参数:
名称 |
类型 |
状态 |
说明 |
seal_id |
字符串 |
必需 |
要添加的电子印章的 sys_id、名称或印章 ID。 |
返回值:
类型 |
说明 |
String|Boolean |
新参与者记录的 sys_id,如果未找到印章则返回假。 |
示例:
// 向协议添加电子印章
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addElectronicSeal('<SEAL>');
#addParticipant(String user_id, String participant_role)
addSigner() 的替代方法,允许向协议添加具有指定角色的参与者。未注册为 ServiceNow 用户的参与者可以通过提供电子邮件地址来添加。
注意:此方法应仅用于保存到数据库的现有协议记录。
参数:
名称 |
类型 |
状态 |
说明 |
user_id |
字符串 |
必需 |
用户的 sys_id 或电子邮件地址。 |
role |
字符串 |
可选 |
参与者在协议中的角色。默认为 SIGNER。其他值包括 APPROVER、ACCEPTOR、CERTIFIED_RECIPIENT、FORM_FILLER。 |
返回值:
类型 |
说明 |
字符串|布尔值 |
新参与者记录的 sys_id,如果未找到用户记录或该用户没有电子邮件地址,则返回 false。 |
示例:
// 向协议添加参与者
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addParticipant('abel.tuter@example.com', 'APPROVER');
#addSigner(String user_id)
向当前协议添加签名者。未注册为 ServiceNow 用户的签名者可以通过提供电子邮件地址来添加。
参数:
名称 |
类型 |
状态 |
说明 |
user_id |
字符串 |
必需 |
用户的 sys_id 或电子邮件地址。 |
返回值:
类型 |
说明 |
void |
方法不返回值。 |
示例:
// 向协议添加参与者
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addSigner('abel.tuter@example.com');
#copySignedDocumentToRecord(GlideRecord record)
将协议的已签署文档复制到另一个记录。
参数:
名称 |
类型 |
状态 |
说明 |
录制 |
GlideRecord |
必需 |
已签名文档要复制到的目标记录。 |
返回值:
类型 |
说明 |
String|Boolean |
新附件的 sys_id,如果操作失败则为假。 |
示例:
// 获取目标记录
var target = new GlideRecord('...');
// 将已签名文档从协议复制到目标
var adobe = new x_adosy_as.AdobeSign();
adobe.setAgreementRecord(agreement);
adobe.copySignedDocumentToRecord(target);
#copySignedDocumentToSubject()
将协议的已签名文档复制到其主题记录。
返回值:
类型 |
说明 |
String|Boolean |
新附件的 sys_id,如果操作失败则为 false |
示例:
// 将已签名文档从协议复制到主题记录
var adobe = new x_adosy_as.AdobeSign();
adobe.setAgreementRecord(agreement);
adobe.copySignedDocumentToSubject();
#createAgreement(String name, GlideRecord subject, Object option
创建协议。可用于需要设置新协议的脚本。
参数:
名称 |
类型 |
状态 |
说明 |
名称 |
字符串 |
必需 |
协议名称。 |
subject |
GlideRecord |
可选 |
主体记录,例如合同或请求 |
options |
对象 |
可选 |
协议记录字段名称到值的键值对象。 |
返回:
类型 |
说明 |
字符串|null |
新协议的 sys_id 或 null。 |
示例:
// 创建新的草稿协议
var options = {
submit_as_draft: true
};
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement("My Agreement", current, options);
#getAgreement()
获取当前范围内的协议实例。
返回:
类型 |
说明 |
Agreement|null |
协议实例或 null。 |
示例:
// 获取协议实例
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement("My Agreement", current, options);
var agreement = adobe.getAgreement();
#getAgreementRecord()
返回当前协议记录。
返回:
类型 |
说明 |
GlideRecord|null |
当前协议记录,或 null。 |
示例:
// 获取协议记录
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement("My Agreement", current, options);
var agreement = adobe.getAgreementRecord();
#saveAgreement(String state)
保存当前协议记录。可以选择性地传入协议状态。除非将状态参数设置为"Ready",否则不会触发器向 Adobe Acrobat Sign 提交。
参数:
名称 |
类型 |
状态 |
说明 |
state |
字符串 |
可选 |
协议的状态。 |
返回值:
类型 |
说明 |
字符串 |
已保存协议记录的 sys_id,或 null。 |
示例:
// 创建协议
var adobe = new x_adosy_as.AdobeSign();
adobe.createAgreement('My Agreement');
adobe.addSigner('abel.tuter@example.com');
adobe.saveAgreement();
#setAgreementRecord(String|GlideRecord agreement)
将协议上下文设置为给定记录。
参数:
名称 |
类型 |
状态 |
说明 |
协议 |
GlideRecord|String |
必需 |
协议记录。 |
返回值:
\n
类型 |
说明 |
void |
方法不返回值。 |
示例:
// 处理协议
var adobe = new x_adosy_as.AdobeSign();
adobe.setAgreementRecord(agreement);
#setSubject(GlideRecord subject
设置协议的主题记录。
参数:
名称 |
类型 |
状态 |
说明 |
主题 |
GlideRecord |
必需 |
主题记录。 |
返回:
类型 |
说明 |
void |
方法不返回值。 |
示例:
// 获取主题记录
var subject = new GlideRecord('...')
// 更新协议主题
var adobe = new x_adosy_as.AdobeSign();
adobe.setAgreementRecord(agreement);
adobe.setSubject(subject);
adobe.saveAgreement();
#submitAgreement()
保存当前协议并通过将状态设置为"Ready"将其提交到 Adobe Acrobat Sign。
返回:
类型 |
说明 |
字符串 |
已保存协议记录的 sys_id,或 null。 |
示例:
// 提交协议
var adobe = new x_adosy_as.AdobeSign();
adobe.setAgreementRecord(agreement);
adobe.submitAgreement();
.canSend()
确定当前用户是否可以使用"使用 Adobe Acrobat 签名"UI 操作。当实例不是 FedRAMP 或当前用户具有发送者角色时,允许发送。
返回:
类型 |
说明 |
布尔值 |
如果用户可以发送,则为 True。 |
示例:
// 检查当前用户是否可以发送以供签名
if(AdobeSign.canSend()) {
gs.addInfoMessage('此用户可以使用签名流程。');
} else {
gs.addErrorMessage('此用户无权使用签名流程。');
}
.getAgreements(String subject_table, String subject_id)
获取与主题相关的协议的 GlideRecord 实例。
参数:
名称 |
类型 |
状态 |
说明 |
subject_table |
String|GlideRecord |
必需 |
主题表名或主题记录本身。 |
subject_id |
字符串 |
可选 |
当同时传递表名时,主题的 sys_id。 |
返回:
类型 |
说明 |
GlideRecord |
与主题相关的协议的 GlideRecord 实例。 |
示例:
// 使用表名和 sys_id 获取协议
var agreement = x_adosy_as.AdobeSign.getAgreements('sc_req_item', '<sys_id>');
while (agreement.next()) {
gs.addInfoMessage(agreement.getDisplayValue());
}
// 使用 GlideRecord 获取协议
var req_item = new GlideRecord('sc_req_item');
req_item.get('<sys_id>');
var agreement = x_adosy_as.AdobeSign.getAgreements(req_item);
while (agreement.next()) {
gs.addInfoMessage(agreement.getDisplayValue());
}
.getMyAgreements(String query)
获取属于该用户的协议的 GlideRecord 实例。此方法依赖于属性 x_adosy_as.my_agreements_query 进行初始查询。可以使用查询参数添加其他查询筛选条件。
参数:
名称 |
类型 |
状态 |
说明 |
|
query |
字符串 |
可选 |
可选的编码查询,用于进一步限制协议列表。 |
|
返回:
类型 |
说明 |
GlideRecord |
属于该用户的协议。 |
示例:
// 获取当前用户的已完成协议
var query = 'state=Complete^ORDERBYsys_created_on';
var agreement = x_adosy_as.AdobeSign.getMyAgreements(query);
while (agreement.next()) {
gs.addInfoMessage(agreement.getDisplayValue());
}
.isFedRamp()
确定系统是否连接到 Adobe FedRAMP(政府云)。
返回:
类型 |
说明 |
布尔值 |
如果 x_adosy_as.fedramp 属性设置为"真",则为真。 |
示例:
// 检查我们是否使用 FedRAMP 连接
if(x_adosy_as.AdobeSign.isFedRamp()) {
gs.addInfoMessage('Acrobat Sign 正在使用政府云连接。');
} else {
gs.addErrorMessage('Acrobat Sign 未使用政府云连接。');
}