This article provides examples of some common operations using the SystemWeaver Rest API.
Prerequisites
- It is helpful to have a basic understanding of the SystemWeaver meta model building blocks
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" } ] }
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. |
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" } ] } }
POST
Create New Item
To create a new item use the following:
Url (verb POST)
/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 (verb POST)
/items/x040000000001A0C4/newversion
Command properties can be applied also to "newversion".