Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 58 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,58 @@
# ea-servicenow-guide
ServiceNow assets for EA solution guide
# Ironclad EA ServiceNow Example Code
This repository contains all of the ServiceNow application assets for the EA ServiceNow solution guide.

# Installing the ServiceNow application
## Create Github credential
You will need to create a credential in ServiceNow to hold an SSH key for an Github account that can access this repo. If you are only importing the application into ServiceNow (e.g., for a demo), then you only need read access to the repo. If you are making application changes that you want to save back to the repo, you will need read/write access.
### Create SSH Key
If you do not already have a suitable SSH key registered in your Github account, you will need to create one. Note that ServiceNow has limitations in terms of what encryption algorithms it will support for SSH credentials (e.g., it does NOT support ED25519 encryption, but it DOES support ECDSA).

Use whatever SSH key generation tool you have - if you are using ssh-keygen on a Mac or other Unix platform, you would do the following to create a new ECDSA key pair:

```
> cd ~/.ssh
> ssh-keygen -t ecdsa -C "<your Github account email address>"
```

Be sure to keep track of the passphrase you use for the SSH key when you create it. It will be needed in the ServiceNow credential setup.

### Register SSH key with your Github account
Comment thread
jimfarley-ironclad marked this conversation as resolved.
The general instructions for adding a new SSH key for your Github account can be [found here](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account). The following is a summary of the necessary steps:

- In your GitHub account, navigate to "Settings" (using the menu on your profile picture), and go to "SSH and GPG keys"
- Under "SSH Keys", click the "New" button
- Set the title to whatever makes sense to you (e.g., "ServiceNow dev key")
- Set the "Key type" to "Authentication key"
- Paste the public key content of your SSH key into the Key field.
- Add the SSH key to your account.

## Install the "Legal Intake" Application in ServiceNow
Installing the Legal Intake app into ServiceNow involves creating a SNOW dev instance (if you don't already have one), creating a new SSH credential to connect to the GitHub repository, and importing the
### Create a ServiceNow developer instance
- Create an account/login to developer.servicenow.com
- Create a new developer instance if you don’t have one already
### Create ServiceNow SSH Credential
- Go to "Credentials" in the ServiceNow instance and create a new "SSH Private Key" entry in that table.
- Set the name to whatever makes sense to you (e.g., "ServiceNow Guide Github repo")
- Enter your Github user name (NOT your email address) and password, and the passcode for your SSH key.
- Copy the private key contents for your SSH key and paste them into the private key field of the credential.
- Make sure the "Active" checkbox is checked and save the credential entry.
## Import ServiceNow Application
- In the developer instance, go to System Applications -> Studio (e.g., search for “Studio” in the main search)
- In the dialog that appears, choose "Import from Source Control"
- In the dialog that appears, choose the "ssh" option, enter the Github URL for the repository with the ServiceNow code (this repository), choose the SSH credential you create above, and specify the branch containing the code version you want. Normally you will want to import from "main", but there might be situations where you will want to import a specific version of the application, and if so, use the branch field to specify that.

## Configure Application Properties
There are a set of application properties that need to be configured to allow the application to target the workflows in your Ironclad instance.

In your ServiceNow instance, open the Legal Intake application in Studio and navigate to the "Properties -> System Properties" section in the navigation. Then set each property as follows:

- ```ironclad_api_key```: This needs to contain the contents of an API key generated from your Ironclad instance.
- ```ironclad_environment```: Set this to the appropriate domain for your Ironclad environment ("ironcladapp.com" for production, "demo.ironcladapp.com" for demo, etc.)
- ```ironclad_msa_template```: Set this to the template ID for the MSA workflow you will use in the integration.
- ```ironclad_msa_signer_email_attribute```: Set this to the attribute ID for the countrparty signer email atttibure in your MSA workflow. Signer attribute IDs are unique for each workflow.
- ```ironclad_msa_signer_name_attribute```: Set this to the attribute ID for the countrparty signer name atttibure in your MSA workflow. Signer attribute IDs are unique for each workflow.
- ```ironclad_workflow_creator```: Set this to the email address of the Ironclad user you would like to use as the creator of all workflows launched from ServiceNow.
- ```ironclad_nda_template```: Set this to the template ID for the NDA workflow in your Ironclad environment.
## Configure Ironclad Webhooks
Once the application is loaded, you need to retrieve the endpoints of the Scripted REST resources defined in the app and register them to receive webhooks from your Ironclad instance. In Studio, navigate to the Inbound Integrations -> Scripted REST Resources, and for each item in this list, select it and capture the "Resource path" in the details for the REST endpoint. The full endpoint URL will be the domain of your developer instance (see your browser address bar, typically this will be of the form "devXXXX.service-now.com").
27 changes: 27 additions & 0 deletions a388c41397151110940a7b771153af49/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated files
This repository contains generated files and a checksum.

If you find yourself unable to import your repository due to the presence of files edited outside an instance of ServiceNow, merge commits that mix files from different revisions, or other data that does not match the checksum, you may recover using either of the following techniques:
* Remove the problem commits:
1. Clone your repository to a personal computer with the git command line tools installed and open a git command prompt in the repository root
2. Run `git log` and take note of the SHA1s of the problem commits
3. Build revert commits using `git revert SHA1` repeatedly, working backward in time, for each commit that introduced changes not generated by a ServiceNow instance
4. Run `git push`

* Overwrite the problem code snapshot with a known good one:
1. Clone your repository to a personal computer with the git command line tools installed and open a git command prompt in the repository root,
2. Locate a known good code snapshot and record its SHA1. For this step, `git log` can be useful.
2. Run `git reset --hard SHA1` to a commit that was generated by a ServiceNow instance
3. Run `git reset HEAD{1}`
4. Run `git add -A`
5. Run `git commit`
6. Run `git push`

**Notes on dependencies**
1. Dependencies will not show up in the list of changes but will be exported/imported
2. It is your responsibility to resolve the dependencies before installing an application. ServiceNow source control will not manage these for you. In case you installed an application before installing its dependencies:
2.1 Delete the application
2.2 Activate/install all required dependencies
2.3 Re-import the application from source control
Currently listed dependencies:
* Task table schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?><record_update>
<sys_choice action="INSERT_OR_UPDATE" field="agreement_type" table="x_749125_legal_i_0_legal_agreement_request" version="3">
<sys_choice_set action="INSERT_OR_UPDATE">
<element>agreement_type</element>
<name>x_749125_legal_i_0_legal_agreement_request</name>
<sys_class_name>sys_choice_set</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-08-18 22:18:03</sys_created_on>
<sys_name>agreement_type</sys_name>
<sys_package display_value="Legal Intake Management" source="x_749125_legal_i_0">a388c41397151110940a7b771153af49</sys_package>
<sys_policy/>
<sys_scope display_value="Legal Intake Management">a388c41397151110940a7b771153af49</sys_scope>
<sys_update_name>sys_choice_x_749125_legal_i_0_legal_agreement_request_agreement_type</sys_update_name>
</sys_choice_set>
</sys_choice>
</record_update>
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?><record_update>
<sys_choice action="INSERT_OR_UPDATE" field="agreement_type" table="x_749125_legal_i_0_legal_agreement_task" version="3">
<sys_choice_set action="INSERT_OR_UPDATE">
<element>agreement_type</element>
<name>x_749125_legal_i_0_legal_agreement_task</name>
<sys_class_name>sys_choice_set</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-10-16 22:21:10</sys_created_on>
<sys_name>agreement_type</sys_name>
<sys_package display_value="Legal Intake Management" source="x_749125_legal_i_0">a388c41397151110940a7b771153af49</sys_package>
<sys_policy/>
<sys_scope display_value="Legal Intake Management">a388c41397151110940a7b771153af49</sys_scope>
<sys_update_name>sys_choice_x_749125_legal_i_0_legal_agreement_task_agreement_type</sys_update_name>
</sys_choice_set>
<sys_choice action="INSERT_OR_UPDATE">
<dependent_value/>
<element>agreement_type</element>
<hint/>
<inactive>false</inactive>
<label>Master Service Agreement</label>
<language>en</language>
<name>x_749125_legal_i_0_legal_agreement_task</name>
<sequence/>
<synonyms/>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-10-16 22:21:10</sys_created_on>
<sys_domain>global</sys_domain>
<sys_domain_path>/</sys_domain_path>
<value>MSA</value>
</sys_choice>
<sys_choice action="INSERT_OR_UPDATE">
<dependent_value/>
<element>agreement_type</element>
<hint/>
<inactive>false</inactive>
<label>Non-Disclosure Agreement</label>
<language>en</language>
<name>x_749125_legal_i_0_legal_agreement_task</name>
<sequence/>
<synonyms/>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-10-16 22:21:48</sys_created_on>
<sys_domain>global</sys_domain>
<sys_domain_path>/</sys_domain_path>
<value>NDA</value>
</sys_choice>
</sys_choice>
</record_update>
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_db_object">
<sys_db_object action="DELETE">
<access/>
<actions_access>true</actions_access>
<alter_access>true</alter_access>
<caller_access/>
<client_scripts_access>true</client_scripts_access>
<configuration_access>false</configuration_access>
<create_access>true</create_access>
<create_access_controls>false</create_access_controls>
<delete_access>false</delete_access>
<is_extendable>false</is_extendable>
<label>Legal Agreement Request</label>
<live_feed_enabled>false</live_feed_enabled>
<name>x_749125_legal_i_0_legal_agreement_request</name>
<number_ref/>
<provider_class/>
<read_access>true</read_access>
<scriptable_table>false</scriptable_table>
<super_class/>
<sys_class_name>sys_db_object</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-10-02 17:50:47</sys_created_on>
<sys_id>84bcbae52f121110443b5fd92799b6f8</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_name>Legal I 0 Legal Agreement Request</sys_name>
<sys_package display_value="Legal Intake Management" source="x_749125_legal_i_0">a388c41397151110940a7b771153af49</sys_package>
<sys_policy/>
<sys_scope display_value="Legal Intake Management">a388c41397151110940a7b771153af49</sys_scope>
<sys_update_name>sys_db_object_84bcbae52f121110443b5fd92799b6f8</sys_update_name>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-10-02 17:50:47</sys_updated_on>
<update_access>true</update_access>
<user_role/>
<ws_access>true</ws_access>
</sys_db_object>
<sys_update_version action="INSERT_OR_UPDATE">
<action>DELETE</action>
<application display_value="Legal Intake Management">a388c41397151110940a7b771153af49</application>
<file_path/>
<instance_id>65a8398ddb62dbc04f035d00cf9619c1</instance_id>
<instance_name>dev60711</instance_name>
<name>sys_db_object_84bcbae52f121110443b5fd92799b6f8</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_db_object"><sys_db_object action="INSERT_OR_UPDATE"><access/><actions_access>true</actions_access><alter_access>true</alter_access><caller_access/><client_scripts_access>true</client_scripts_access><configuration_access>false</configuration_access><create_access>true</create_access><create_access_controls>false</create_access_controls><delete_access>false</delete_access><is_extendable>false</is_extendable><label>Legal Agreement Request</label><live_feed_enabled>false</live_feed_enabled><name>x_749125_legal_i_0_legal_agreement_request</name><number_ref/><provider_class/><read_access>true</read_access><scriptable_table>false</scriptable_table><super_class/><sys_class_name>sys_db_object</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-10-02 17:50:47</sys_created_on><sys_id>84bcbae52f121110443b5fd92799b6f8</sys_id><sys_mod_count>0</sys_mod_count><sys_name>Legal I 0 Legal Agreement Request</sys_name><sys_package display_value="Legal Intake Management" source="x_749125_legal_i_0">a388c41397151110940a7b771153af49</sys_package><sys_policy/><sys_scope display_value="Legal Intake Management">a388c41397151110940a7b771153af49</sys_scope><sys_update_name>sys_db_object_84bcbae52f121110443b5fd92799b6f8</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-10-02 17:50:47</sys_updated_on><update_access>true</update_access><user_role/><ws_access>true</ws_access></sys_db_object></record_update>]]></payload>
<payload_hash>-1981645015</payload_hash>
<record_name>Legal Agreement Request</record_name>
<reverted_from/>
<source>d8a316332f021110443b5fd92799b613</source>
<source_table>sys_upgrade_history</source_table>
<state>previous</state>
<sys_created_by/>
<sys_created_on>2022-09-27 04:22:01</sys_created_on>
<sys_id>a4bcfae52f121110443b5fd92799b65b</sys_id>
<sys_mod_count/>
<sys_recorded_at>1837d2e2a280000000</sys_recorded_at>
<sys_updated_by/>
<sys_updated_on/>
<type>Table</type>
<update_guid>64bcfae5b1121110917681756900ed5b</update_guid>
<update_guid_history>64bcfae5b1121110917681756900ed5b:-1981645015</update_guid_history>
</sys_update_version>
<sys_metadata_delete action="INSERT_OR_UPDATE">
<sys_audit_delete/>
<sys_class_name>sys_metadata_delete</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-11-08 17:08:18</sys_created_on>
<sys_db_object display_value="" name="sys_db_object">sys_db_object</sys_db_object>
<sys_id>be4af075537f4d408d845e1a1744de40</sys_id>
<sys_metadata>84bcbae52f121110443b5fd92799b6f8</sys_metadata>
<sys_name>Legal Agreement Request</sys_name>
<sys_package display_value="Legal Intake Management" source="x_749125_legal_i_0">a388c41397151110940a7b771153af49</sys_package>
<sys_parent/>
<sys_policy/>
<sys_scope display_value="Legal Intake Management">a388c41397151110940a7b771153af49</sys_scope>
<sys_scope_delete display_value="">76957533a4164a94af24a6a3a42a2510</sys_scope_delete>
<sys_update_name>sys_db_object_84bcbae52f121110443b5fd92799b6f8</sys_update_name>
<sys_update_version display_value="sys_db_object_84bcbae52f121110443b5fd92799b6f8">a4bcfae52f121110443b5fd92799b65b</sys_update_version>
</sys_metadata_delete>
</record_update>
Loading