2016-11-05 4 views
0

У меня проблема с базой данных. В настоящее время я работаю с бот-программированием Gupshup. Существует два разных режима сохранения данных, которые можно считывать here и here. В продвинутой сохраняемости данных, следующий код documeneted поместить данные в базу данныхНе удалось обновить таблицу в режиме расширенного сохранения данных

function MessageHandler(context, event) { 
     if(event.message=='update bug - 1452') { 
     jiraUpdate(context); 
    } 
      } 
    function jiraUpdate(context){ 
     //connect to Jira and check for latest update and values 
     if(true){ 
     context.simpledb.doPut("1452" ,"{\"status\":\"QA pending\",\"lastUpdated\":\"06\/05\/2016\",\"userName\":\"John\",\"comment\":\"Dependent on builds team to provide right build\"}"); 
} else{ 
     context.sendResponse('No new updates'); 
} 
    } 
function DbPutHandler(context, event) { 
     context.sendResponse("New update in the bug, type in the bug id to see the update"); 
    } 

Если я хочу изменить только одну из столбца (скажу статус или последнее обновление) в таблице для строки с ключевым значением 1452 , Я не могу этого сделать. Как это можно сделать?

Я использовал следующий код:

function MessageHandler(context, event) { 
    // var nlpToken = "xxxxxxxxxxxxxxxxxxxxxxx";//Your API.ai token 
    // context.sendResponse(JSON.stringify(event)); 
if(event.message=='deposit') { 
     context.sendResponse("Enter the amount to be deposited"); 
    } 

    if(event.message=="1000") { 
     jiraUpdate(context); 
    } 

    if(event.message== "show"){ 
context.simpledb.doGet("1452"); 

    } 
} 

function HttpResponseHandler(context, event) { 
      var dateJson = JSON.parse(event.getresp); 
      var date = dateJson.date; 
      context.sendResponse("Today's date is : "+date+":-)"); 
     } 

function jiraUpdate(context){ 
     //connect to Jira and check for latest update and values 
     if(true){ 
     context.simpledb.doPut("aaa" ,"{\"account_number\":\"90400\",\"balance\":\"5800\"}"); 
} else{ 
     context.sendResponse('No new updates'); 
} 

} 

/** Functions declared below are required **/ 
function EventHandler(context, event) { 
    if (!context.simpledb.botleveldata.numinstance) 
     context.simpledb.botleveldata.numinstance = 0; 
    numinstances = parseInt(context.simpledb.botleveldata.numinstance) + 1; 
    context.simpledb.botleveldata.numinstance = numinstances; 
    context.sendResponse("Thanks for adding me. You are:" + numinstances); 
} 



function DbGetHandler(context, event) { 
    var bugObj = JSON.parse(event.dbval); 
      var bal = bugObj.balance; 
    var acc = bugObj.account_number; 
    context.sendResponse(bal); 
    var a = parseInt (bal,10); 
    var b = a +1000; 
    var num = b.toString(); 
    context.simpledb.doPut.aaa.balance = num; 


} 

function DbPutHandler(context, event) { 
    context.sendResponse("testdbput keyword was last put by:" + event.dbval); 
} 

ответ

1

Так как организовано БД, что обеспечивается Gupshup является DynamoDB АМС. Следовательно, вы можете ввести что-то как ключ, пара значений.

Следовательно, вы должны установить правильный ключ при использовании doPut метода для хранения данных в базу данных и использовать тот же ключ, чтобы получить данные из базы данных с помощью методаdoGet.

Чтобы обновить данные, которые вы должны сначала позвонить doGet метода, а затем обновить JSON с правильными данными, а затем вызывать doPut метода для обновления базы данных с последними данными.

Я также добавил что-то, чего нет в документации. Теперь вы можете делать вызовы БД и выбирать, к какой функции отвечает ответ.

Я рефакторинг вашего примера, как с помощью 3 ключевых слов и жесткого кодирования некоторых вещей просто для примера -

  1. имеет - это будет обновлять базу данных с этими значениями

    {"account_number":"90400","balance":"5800"}

  2. депозит - при этом код добавит 1000 к весу

  3. показать - при этом код показывает баланс пользователю.

код -

function MessageHandler(context, event) { 

if(event.message=='have') { 
    var data = {"account_number":"90400","balance":"5800"}; 
     context.simpledb.doPut(event.sender,JSON.stringify(data),insertData); //using event.sender to keep the key unique 
     return; 
    } 
if(event.message=="deposit") { 
    context.simpledb.doGet(event.sender, updateData); 
    return; 
} 
if(event.message== "show"){ 
context.simpledb.doGet(event.sender); 
return; 
    } 
} 
function insertData(context){ 
    context.sendResponse("I have your data now. To update just say \"deposit\""); 
} 
function updateData(context,event){ 
    var bugObj = JSON.parse(event.dbval); 

    var bal = bugObj.balance; 
    var a = parseInt(bal,10); 
    var b = a + 1000; 
    var num = b.toString(); 
    bugObj.balance = num; 

context.simpledb.doPut(event.sender,bugObj); 
} 

function EventHandler(context, event) { 
    if (!context.simpledb.botleveldata.numinstance) 
     context.simpledb.botleveldata.numinstance = 0; 
    numinstances = parseInt(context.simpledb.botleveldata.numinstance) + 1; 
    context.simpledb.botleveldata.numinstance = numinstances; 
    context.sendResponse("Thanks for adding me. You are:" + numinstances); 
} 

function DbGetHandler(context, event) { 
    var accountObj = JSON.parse(event.dbval); 
    context.sendResponse(accountObj); 
} 

function DbPutHandler(context, event) { 
    context.sendResponse("I have updated your data. Just say \"show\" to view the data."); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^