Как установить настраиваемые поля для документа sharepoint в JAVA, используя остальные API sharepoint - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужно загрузить документ в sharepoint и установить некоторые поля для документа, используя код Java. Я успешно смог выполнить первую часть, используя следующий код:

Получение дайджеста запроса:

String digestqueryURL = "<websiteURL>" +"_api/contextinfo";
URL obj = new URL(digestqueryURL);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

writing to ouput steam
con.setDoOutput(true);
con.setRequestMethod("POST");

con.setRequestProperty("User-Agent", "Java Client");
con.setRequestProperty("Content-Type", "application/json;odata=verbose");
con.setRequestProperty("Accept", "application/json; odata=nometadata");
con.setRequestProperty("Content-Length", "2");
OutputStream os = con.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
osw.write("{}");
osw.flush();
osw.close();
os.close();  //don't forget to close the OutputStream
con.connect();

int responseCode = con.getResponseCode();

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
       response.append(inputLine);
}
in.close();
con.disconnect();
System.out.println(response.toString());

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(response.toString());
String formDigest = (String)json.get("FormDigestValue");

Загрузка файла:

 String uploadURL = "<websiteURL>" + "/_api/web/getfolderbyserverrelativeurl('<folderName>')/files/add(overwrite='true',url='101_16112018_1.txt')";
File file = new File("<filePath>");
if (file.length() > Integer.MAX_VALUE) {
       System.out.println("File too large");
}
byte[] bytes = new byte[(int) file.length()];
FileInputStream ins = new FileInputStream(file);
ins.read(bytes);

URL uploadURLObj = new URL(uploadURL);
HttpsURLConnection connection=(HttpsURLConnection)uploadURLObj.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("X-RequestDigest",formDigest);
connection.setRequestProperty("Content-Type", "application/json;odata=verbose");
connection.setRequestProperty("Accept", "application/json; odata=nometadata");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Length",
Integer.valueOf(bytes.length).toString());
OutputStream uploadOs = connection.getOutputStream();
uploadOs.write(bytes);
uploadOs.close();
connection.connect();
Integer uploadResponseCode = connection.getResponseCode();
System.out.println(Integer.valueOf(uploadResponseCode));
BufferedReader uploadIn = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String uploadInputLine;
StringBuffer uploadResponse = new StringBuffer();
while ((uploadInputLine = uploadIn.readLine()) != null) {
           uploadResponse.append(uploadInputLine);
}
System.out.println("upload res" + uploadResponse.toString());
uploadIn.close();
connection.disconnect();

Я не уверен, как получить идентификатор элемента для загруженного файла. Я мог найти API, который позволяет вам изменять поля для определенного itemId, поэтому я попытался извлечь все элементы в папке и выбрал itemId для одного из них и попытался изменить значение поля для элемента.

Ниже код не работает. выдает код ошибки 400

Настройка полей для itemId:

  String fieldInfo = "{ \"__metadata\": { \"type\":
\"SP.Data.ControlroomdatabaseItem\" }, \"Title\": \"TestUpdated\"}";
byte[] b = fieldInfo.getBytes();
String uploadURL2 = "https://sharepoint.deshaw.com/compliance/_api/web/lists/GetByTitle('<folderName>')/items(<itemId>)";
       URL uploadURLObj2 = new URL(uploadURL2);
       HttpsURLConnection connection2 = (HttpsURLConnection) uploadURLObj2.openConnection();
       connection2.setRequestMethod("POST");
       connection2.setRequestProperty("X-RequestDigest",formDigest);

       connection2.setRequestProperty("Accept", "application/json; odata=verbose");

       connection2.setDoOutput(true);
       connection2.setRequestProperty("Content-Length", Integer.valueOf(b.length).toString());
       OutputStream uploadOs2 = connection2.getOutputStream();
       uploadOs2.write(b);
       uploadOs2.close();

       connection2.connect();

       Integer uploadResponseCode2 = connection2.getResponseCode();


       System.out.println(Integer.valueOf(uploadResponseCode2));

       BufferedReader uploadIn2 = new BufferedReader(
               new InputStreamReader(connection2.getInputStream()));
       String uploadInputLine2;
       StringBuffer uploadResponse2 = new StringBuffer();

       while ((uploadInputLine2 = uploadIn2.readLine()) != null) {
           uploadResponse2.append(uploadInputLine2);
       }
       System.out.println(uploadResponse2.toString());
       uploadIn2.close();
       connection2.disconnect();

Как правильно задать поля для загружаемого файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...