This article provides examples of some common operations using the SystemWeaver Rest API. 


PATCH


Note: PropertyCommands are case sensitive!!


Note: Last update has to be included in each request to make sure nobody else has updated the data since you read it.


Use the verb PATCH and e.g., which item that should be updated, and add the last updated information:


/items/x0400000000019FA9/lastupdate/2020-02-18T10:40:21.883


In the body, send information about:

  • Which operation that will be applied: "Add", "Update", "Delete"
  • Which property that should be updated, e.g., "attributes"
  • Which identifier type that will be used: "sid" or "handle"
  • Which identifier that corresponds to the property that should be updated. For a sid, it can be, e.g., "MTA"
  • The value that the property should get: "test value"


To find out if there are errors, check the validationMessage at the end of the response.


PATCH a Single Value


Example: Update Foreign Id


URL (verb PATCH):

/items/x0400000000019FA9/lastupdate/2020-02-18T10:40:21.883


To patch a single value, like the item's foreign id, use the following.


Body:

{
	"propertyCommands": [
		{
			"operation": "Update",
			"propertyName": "foreignId",
			"value": "test value"
		}
	]
}

The result will be:

{
	"response": {
		"handle": "x040000000001A06F",
		"name": "i3",
		"foreignId": "test value"
	}
}


PATCH Item Lists Like Attributes and Parts

When adding the attribute, you should send the following.


Example: Add attribute


Url (verb PATCH):

/items/x0400000000019FA9/lastupdate/2020-02-18T10:40:21.883


Body:

{
	"propertyCommands": [
		{
			"operation": "Add",
			"propertyName": "attributes",
			"identifierType": "sid",
			"identifier": "MTA",
			"value": "test value"
		}
	] 
}

If patching an item, and item is returned and you can verify that the properties that you wanted to patch really are updated. In this case, we added an attribute:

{
	"response": {
		"handle": "x0400000000019FA9",
		"name": "i3",
		"type": {
			"handle": "x0200000000019F9A",
			"name": "Application SW Component",
			"sid": "ARAP"
		},
		"attributes": [ 
			{ 
				"attributeType": {
					"handle": "x1600000000000554",
					"sid": "MTA",
					"name": "Meta test attribute",
					"dataType": "String",
					"dataDimension": "Single",
					"value": "test value"
				}
			}
		],
		"validationMessage": {
			"validationStatus": "OK",
			"validationMessages": []
		}
	}
}

Check that there are no errors by reading the validationMessage in the response:


Example: Update Attribute

Do exactly as "Add attribute" but use the operation "Update" instead.


Body:

{
	"propertyCommands": [
		{
			"operation": "Update",
			"propertyName": "attributes",
			"identifierType": "sid",
			"identifier": "MTA",
			"value": "test value"
		}
	] 
}


Example: Update Attribute by Handle Instead of SID

Change identifierType to "handle" and send the handle of the attribute that is going to be updated.


Body:

{
	"propertyCommands": [
		{
			"operation": "Update",
			"propertyName": "attributes",
			"identifierType": "handle",
			"identifier": "x1600000000000554",
			"value": "test value"
		}
	] 
}


Example: Delete Attribute


Body:

{
	"propertyCommands": [
		{
			"operation": "Delete",
			"propertyName": "attributes",
			"identifierType": "handle",
			"identifier": "x1600000000000554",
			"value": "test value"
		}
	]
} 


Validation messages

If a validation error happens during PATCH, status code is <> from 200 (Success) and the errors are returned as validation messages.


{
	"validationMessage": {
		"validationStatus": "Failed",
		"validationMessages": [
			{
				"status": "Failed",
				"message": "A newer version of this item exists.",
				"handle": null,
				"objectType": "LibraryItem",
				"property": "LastUpdate"
			} 
		]
	}
}


Example: Add Part, defObj


Url (verb PATCH):

/items/x0400000000019FA9/lastupdate/2020-02-18T10:40:21.883


To add a part is very similar to add an attribute, but the defObject has to be defined in a JSON format:


Body:

{
	"propertyCommands": [
		{
			"operation": "Add",
			"propertyName": "parts",
			"identifierType": "sid",
			"identifier": "ARPP",
			"value": "{defObject:{handle:\"x040000000001A082\"}}"
		}
	]
} 


If you have a refObject, define it like this:


      "value": "{defObject:{handle:\"x040000000001A098\"}, refObject:{handle:\"x040000000001A096\"}}"


The delete part follows the pattern of the attributes.


Note: Update part is not yet implemented.

POST


Create New Item


To create a new item use the following url:

restapi/items


Body:

{
	"name": "Mrs Test",
	"typeIdentifier": "x020000000001A0A1",
	"homeLibraryHandle": "x1300000000000017"
} 


To create a new item and update more properties than the above, you can use one or many property commands.


Body:

{
	"name": "Mrs Test",
	"typeIdentifier": "x020000000001A0A1",
	"homeLibraryHandle": "x1300000000000017",
	"propertyCommands": [
		{
			"operation": "update",
			"propertyName": "foreignId",
			"value": "abc 123"
		}
	] 
}


Create New Version


To create a new version of the item use the following url:

restapi/items/x040000000001A0C4/newversion


Command properties can be applied also to "newversion".