1
votes

I'm using the (JSON) HTTP interface to communicate with SharePoint. The communication itself is done via cURL and a convinience-wrapper in PHP. Problems arise, when I want to push data to SP.

Since I'm no Microsoft / SharePoint guy, I'm missing the proper vocabulary to explain my needs. I'll therefore demonstrate using data I received from SharePoint.

GET http://example.org/mytest/_vti_bin/listdata.svc/Aufgaben(2) returns the following (truncated by me) data:

{
  "d" : {
    "__metadata": {
      "uri": "http://example.org/mytest/_vti_bin/listdata.svc/Aufgaben(2)", 
      "etag": "W/\"5\"", 
      "type": "Microsoft.SharePoint.DataService.AufgabenItem"
    }, 
    "ID": 2, 
    "InhaltstypID": "0x010800821BC29B80192B4C960A688416597526", 
    "Inhaltstyp": "Aufgabe", 
    "Titel": "Neuer Titel", 
    "ZugewiesenAn": {
      "__deferred": {
        "uri": "http://example.org/mytest/_vti_bin/listdata.svc/Aufgaben(2)/ZugewiesenAn"
      }
    }, 
    "ZugewiesenAnId": 29, 
    "F\u00e4lligkeitsdatum": "\/Date(1323993600000)\/"
  }
}

"ZugewiesenAn" is a user. If I query the deferred values, I get (truncated by me, again)

{
  "d" : {
    "__metadata": {
      "uri": "http://example.org/mytest/_vti_bin/listdata.svc/Benutzerinformationsliste(29)", 
      "etag": "W/\"1\"", 
      "type": "Microsoft.SharePoint.DataService.BenutzerinformationslisteItem"
    }, 
    "InhaltstypID": "0x010A000719C31710976A48867763D86F6586E0", 
    "Name": "Rehm Rodney", 
    "Konto": "EXT\\rodney.rehm", 
    "ID": 29, 
    "Inhaltstyp": "Person", 
  }
}

So I can see that the value of "ZugewiesenAn" should be "EXT\rodney.rehm" (as I need the username). Thus far, no problem.

The question is how I create a new or update an existing object with a different user for "ZugewiesenAn" (a User/Group field)?

I've tried:

  • Sending the username as the value of "ZugewiesenAn" or "ZugewiesenAnId" results in a Bad Request.
  • Querying http://example.org/_vti_bin/People.asmx (SOAP: SearchPrincipals) only yields numeric IDs for people that have actually worked with the list. If I query a username that hasn't logged into that SharePoint list before, I get ID -1.
2

2 Answers

2
votes

I could not find out how to add users to the userlist via REST. You can, however, use the SOAP ResolvePrincipal request (example) - which does the job!

1
votes

I am not a SharePoint guy and focus mostly on REST and OData. But think that REST OData API for SharePoint follows common rules for REST OData.

Common rules for REST and OData is to use different HTTP verbs for different operations. Read, create, update, and delete operations are mapped directly to GET, POST, PUT, and DELETE HTTP verbs.

So, you are getting your user by GET HTTP verb on URI http://example.org/mytest/_vti_bin/listdata.svc/Benutzerinformationsliste(29)

To delete this user use verb DELETE on the same URI and user id with empty HTTP message body.

To create user HTTP verb POST, same URI and json in message body. Also while creating ID shouldn't be specified (except situations when ID isn't auto-incremented in databases). Content-Type for HTTP message should be set: application/json for JSON.

The same situation with update - PUT, same URI http://example.org/mytest/_vti_bin/listdata.svc/Benutzerinformationsliste(29)

and json in HTTP message body with content-type:application/json.

Format of json should be the same as you've received.

{    
    "InhaltstypID": "0x010A000719C31710976A48867763D86F6586E0", 
    "Name": "Rehm Rodney", 
    "Konto": "EXT\\rodney.rehm", 
    "ID": 29, 
    "Inhaltstyp": "Person", 
}