Advanced add/update
Advanced creating and updating items
In addition to standard OData add and update items operations REST provides such useful methods as
AddValidateUsingPath
and ValidateUpdateListItem
. The first is only presented in modern SharePoint, it not only allows adding items right in a sub folder but also operate with form data payloads and control check in process. ValidateUpdateListItem
is handy for operations requiring system-like-update logic via pure REST.In Gosip,
AddValidateUsingPath
and ValidateUpdateListItem
are represented with Items().AddValidate()
and Item.UpdateValidate()
methods correspondingly:list := sp.Web().GetList("Lists/MyList")
// Method options
options := &api.ValidateAddOptions{
NewDocumentUpdate: true,
CheckInComment: "test",
DecodedPath: "Lists/MyList/subfolder" // is optional
}
// Form data payload
data := map[string]string{
"Title": "New item",
}
if _, err := list.Items().AddValidate(data, options); err != nil {
log.Fatal(err)
}
As
DecodedPath
option the relative path to folder can be provided. It's optional. The path should be relative to a web without trailing slash in the beginning. Gosip adds web relative URL automatically.ValidateAddOptions
are also optional, when no new document update or check-in comment or folder path are ever required, a nil
value should be passed.list := sp.Web().GetList("Lists/MyList")
// Form data payload
data := map[string]string{
"Title": "New item",
}
if _, err := list.Items().AddValidate(data, nil); err != nil {
log.Fatal(err)
}
Using update validate is almost the same:
options := &ValidateUpdateOptions{
NewDocumentUpdate: true,
CheckInComment: "test",
}
data := map[string]string{
"Title": "New item",
}
if _, err := list.Items().GetByID(3).UpdateValidate(data, options); err != nil {
log.Fatal(err)
}
Form values passed to the methods should stand for an array of
{ FieldName: "", FieldValue: "" }
objects where field value is a string of specific format depending on field's data type.Gosip simplifies this payload operating with map of strings. In payload, map key should stand for a valid
FieldName
, a value, obviously, is the one mapped to FieldValue
.The fingerprints for the data types are following:
Field data type | Value sample | Comment |
Text (single line and note) | "text" | |
Number | "123" | as a string |
Yes/No | "1" | "1" - Yes, "2" - No |
Person or group, single and multiple | `[{ "Key": "LoginName", "IsResolved": true }]` | "LoginName" is a valid login name, including provider prefix "IsResolved" is optional |
Date time | "6/23/2018 10:15 PM" | for different web locales is different |
Date only | "6/23/2018' | for different web locales is different |
Choice (single) | "Choice 1" | |
Choice (multi) | "Choice 1;#Choice 2" | ";#" separated list |
Hyperlink or picture | "https://go.spflow.com, Gosip" | a description can go after URL and ", " delimiter |
Lookup (single) | "2" | item ID as string |
Lookup (multi) | "1;#;#2;#;#3;#" | ";#" separated list, after each ID goes additional ";#" |
Managed metadata (single) | "Department 2|220a3627-4cd3-453d-ac54-34e71483bb8a;" | |
Managed metadata (multi) | "Department 2|220a3627-4cd3-453d-ac54-34e71483bb8a;Department 3|700a1bc3-3ef6-41ba-8a10-d3054f58db4b;" | |
Last modified 3yr ago