Обновление базы данных с помощью функций PUT http (json) с помощью ExcelVBA - PullRequest
0 голосов
/ 12 июня 2019

У меня есть база данных для тестирования на Wix.

Я могу загрузить данные JSON и просмотреть их в базе данных LIVE, хотя и грубо.

Проблема в том, что он продолжает вставлять новые строки / столбцы. Как я могу заставить его взаимодействовать с существующими полями?

Вот код файла Backend:

export function post_myFunction(request) {
let options = {
"headers": {
"Content-Type": "application/json"
  }
};

// get the request body
return request.body.text()
  .then( (body) => {

// insert the item in a collection
return wixData.insert("zpage_test", JSON.parse(body));

  } )
  .then( (results) => {
    options.body = {
"inserted": results
    };

return created(options);
  } )

// something went wrong
  .catch( (error) => {
    options.body = {
"error": error
    };

return serverError(options);
  } );
}

Вот код VBA PUT (с включенной средой выполнения сценариев Microsoft в ссылках VBA)

Sub SendJson()
Dim objHTTP As Object
Dim Json As String
Dim result As String
Set objHTTP = CreateObject("MSXML2.XMLHTTP")

Url = "https://www.mywebsite.com/_functions/myFunction"

Json = "{""ID"":""d0f6f64a-e6d8-4cac-9285-d3e51bf3cb53"",""Title"":""tTitle1"",""t1"": ""1.5"", ""t2"": ""hello""}"
objHTTP.Open "PUT", Url, False
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.Send (Json)
result = objHTTP.responseText

'Some simple debugging
Range("A15").Value = result
Range("D15").Value = Json
Set objHTTP = Nothing
End Sub

--- ОБНОВЛЕНИЕ ЗАПРОСА! ---

--- WIX BACKEND ---

import {created, serverError, ok, notFound} from 'wix-http-functions';
import wixData from 'wix-data';
export function put_myFunction(request) {
 let options = {
 "headers": {
 "Content-Type": "application/json"
    }
  };

// get the request body
 return request.body.text()
    .then( (body) => {

 // update the item in a collection
 return wixData.update("zTest_DevDaily", JSON.parse(body));
    } )
    .then( (results) => {
      options.body = {
 "inserted": results
      };
 return ok(options);
    } )

 // something went wrong
    .catch( (error) => {
      options.body = {
 "error": error
      };
 return serverError(options);
    } );
}

export function post_myFunction(request) {
 let options = {
 "headers": {
 "Content-Type": "application/json"
    }
  };

 // get the request body
 return request.body.text()
    .then( (body) => {

 // insert the item in a collection
 return wixData.insert("zTest_DevDaily", JSON.parse(body));
    } )
    .then( (results) => {
      options.body = {
 "inserted": results
      };
 return created(options);
    } )

 // something went wrong
    .catch( (error) => {
      options.body = {
 "error": error
      };
 return serverError(options);
    } );
}

--- EXCEL / VBA ---

Sub SendJson()
   Dim objHTTP As Object
   Dim text As String
   Dim jSON As Object
   Dim result As String

   Dim rng As Range, items As New Collection, myitem As New Dictionary, subitem As New Dictionary, i As Integer, cell As Variant

   Set objHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

    Set rng = Range("A2:A2")
    'Set rng = Sheets(1).Range("A2").End(xlDown)) 'dynamic range
    i = 0

    For Each cell In rng
        Debug.Print (cell.Value)
        myitem("Title") = cell.Value
        myitem("ID") = cell.Offset(0, 1).Value
        myitem("Owner") = cell.Offset(0, 2).Value
        myitem("Created Date") = cell.Offset(0, 3).Value
        myitem("Updated Date") = cell.Offset(0, 4).Value
        myitem("VerDate") = cell.Offset(0, 5).Value
        items.Add myitem
        Set myitem = Nothing
        Set subitem = Nothing
        i = i + 1
    Next

    URL = "https://www.MYWEBSITE.com/_functions/myFunction"
    objHTTP.Open "PUT", URL, False
    objHTTP.setRequestHeader "Content-type", "application/json"
    objHTTP.Send ConvertToJson(items, Whitespace:=2)
    result = objHTTP.ResponseText

    'Some simple debugging
    Range("A25").Value = result
    Range("A26").Value = ConvertToJson(items, Whitespace:=2)
    Set objHTTP = Nothing
End Sub

Я использую EXCEL / JSON конвертер: https://github.com/VBA-tools/VBA-JSON

Я скопировал базу данных в Excel, чтобы применить преобразование, и вот как выглядит значение записи json:

     [
 {
 "Title":   "test1",
 "ID":   "a4ef53df-903c-44e5-a014-f8ae1d937b5f",
 "Created Date":   "2019-06-21T17:43:38Z",
 "Updated Date":   "2019-06-23T19:23:51Z",
 "VerDate": 3
 }
     ]    

ПОЧТА работает

PUT генерирует следующую ошибку (неверный токен ???):

"{" ошибка ":" Название ":" Ошибка " "errorGroup": "Пользователь", "код": "WD_VALIDATION_ERROR"}}"

...