2016-04-22 8 views
10

मैं एक Azure फ़ंक्शन के आधार पर एक Azure तालिका में एक पंक्ति को अपडेट करने का प्रयास कर रहा हूं। मैं देखता हूं कि टेबल बाइंडिंग एक आईसीओलेक्टर को संभाल सकती है जिसमें एक अतिरिक्त विधि है जो एक पंक्ति जोड़ती है। मैं यह भी देखता हूं कि आप डेटा पढ़ने के लिए IQueryable का उपयोग करते हैं।Azure Functions Table बाइंडिंग: मैं एक पंक्ति कैसे अपडेट करूं?

आप डेटा में एक विशिष्ट पंक्ति को अपडेट करने के बारे में कैसे जाते हैं?

मैंने वेबजब्स में InsertOrReplace से संबंधित कुछ देखा जो टेबलऑपरेशंस का एक तरीका है, लेकिन मुझे नहीं पता कि यह कैसे खेलता है या कैसे एज़ूर फ़ंक्शंस के साथ इसका उपयोग किया जाता है।

उत्तर

14

निम्नलिखित एक तरीका है जिससे आप यह कर सकते हैं। हमारी अगली रिलीज के साथ ये कदम आसान हो जाएंगे, लेकिन अब आपको एज़ूर स्टोरेज एसडीके मैन्युअल रूप से लाने की जरूरत है।

सबसे पहले, this help page के "पैकेज प्रबंधन" खंड में एज़ूर स्टोरेज एसडीके खींचने के लिए चरणों का पालन करें। आप एक project.json कि आपके समारोह फ़ोल्डर में इस तरह दिखता है अपलोड करने जाएगा:

{ 
    "frameworks": { 
    "net46":{ 
     "dependencies": { 
     "WindowsAzure.Storage": "7.0.0" 
     } 
    } 
    } 
} 

नोट: अगली फिल्म में हम स्वचालित रूप से तो आप बस इसे अपने कोड में सीधे उपयोग कर सकते हैं Azure संग्रहण एसडीके शामिल करेंगे। आप पैकेज में खींच लिया के बाद, आप टैब टैब उन्नत संपादक में एकीकृत निम्नलिखित की तरह समारोह मेटाडाटा में प्रवेश कर सकते हैं:

{ 
    "bindings": [ 
    { 
     "name": "input", 
     "type": "manualTrigger", 
     "direction": "in" 
    }, 
    { 
     "name": "table", 
     "type": "table", 
     "tableName": "test", 
     "connection": "<your connection>", 
     "direction": "in" 
    } 
    ] 
} 

और नीचे दिए गए संबंधित कोड है। हम एक CloudTable यहाँ हमें/लिखने संस्थाओं को पढ़ने की सुविधा देता है जो के लिए बाध्य कर रहे हैं:

#r "Microsoft.WindowsAzure.Storage" 

using System; 
using Microsoft.WindowsAzure.Storage; 
using Microsoft.WindowsAzure.Storage.Table; 

public static void Run(string input, CloudTable table, TraceWriter log) 
{ 
    TableOperation operation = TableOperation.Retrieve<Person>("AAA", "001"); 
    TableResult result = table.Execute(operation); 
    Person person = (Person)result.Result; 

    log.Verbose($"{person.Name} is {person.Status}"); 

    person.Status = input; 
    operation = TableOperation.Replace(person); 
    table.Execute(operation); 
} 

public class Person : TableEntity 
{ 
    public string Name { get;set; } 
    public string Status { get;set; } 
} 

मैं इस उदाहरण के लिए एक ManualTrigger इस्तेमाल किया, लेकिन तालिका आपके पास जो कुछ भी ट्रिगर के साथ काम करेंगे बंधन। उपरोक्त सेट अप के साथ, मैं पोर्टल के रन इनपुट बॉक्स में एक मान डाल सकता हूं और हिट रन कर सकता हूं। फ़ंक्शन इकाई से पूछताछ करेगा, इसके वर्तमान मानों को आउटपुट करेगा, फिर मेरे इनपुट का उपयोग करके अपडेट करें।

अन्य क्रमपरिवर्तन संभव हैं। उदाहरण के लिए, यदि आपके पास किसी अन्य बाध्यकारी पैरामीटर से एक इकाई उदाहरण है, तो आप इसे अद्यतन करने के लिए क्लाउडटेबल का उपयोग उसी तरह कर सकते हैं।

+0

है यही कारण है कि मैं क्या जरूरत है। यह काम कर रहा है। धन्यवाद –

+0

हाल के अपडेट के बाद से काम नहीं करना प्रतीत होता है। देखें: https://social.msdn.microsoft.com/Forums/en-US/8f70fb3c-ad60-4cb4-be7a-a8b46c95ce8c/method-not-found-microsoftwindowsazurestoragetabletableoperation पुनर्प्राप्ति ?forum=AzureFunctions –

+0

कृपया पैकेज संदर्भ को अपडेट करने का प्रयास करें * * WindowsAzure.Storage ** संस्करण 4.3 से 7.0 तक। – mathewc

1

फ़ंक्शंस के वर्तमान संस्करण के साथ, मैं घोषणात्मक बाइंडिंग के साथ पंक्ति अद्यतनों को काम करने में सक्षम था। यहां HTTP ट्रिगर के साथ एक उदाहरण दिया गया है, जो एज़ूर टेबल पंक्ति में एक संख्या को बढ़ाता है।

function.json:

{ 
    "bindings": [ 
    { 
     "authLevel": "function", 
     "name": "req", 
     "type": "httpTrigger", 
     "direction": "in", 
     "route": "HttpTriggerTableUpdate/{partition}/{rowkey}" 
    }, 
    { 
     "name": "$return", 
     "type": "http", 
     "direction": "out" 
    }, 
    { 
     "type": "table", 
     "name": "inputEntity", 
     "tableName": "SOTrial", 
     "partitionKey": "{partition}", 
     "rowKey": "{rowkey}", 
     "connection": "my_STORAGE", 
     "direction": "in" 
    }, 
    { 
     "type": "table", 
     "name": "outputEntity", 
     "tableName": "SOTrial", 
     "partitionKey": "{partition}", 
     "rowKey": "{rowkey}", 
     "connection": "my_STORAGE", 
     "direction": "out" 
    } 
    ], 
    "disabled": false 
} 

सी # समारोह:

#r "Microsoft.WindowsAzure.Storage" 

using System; 
using System.Net; 
using Microsoft.WindowsAzure.Storage.Table; 

public class Entity : TableEntity 
{ 
    public int Number {get; set;} 
} 

public static HttpResponseMessage Run(HttpRequestMessage req, string partition, 
    string rowkey, Entity inputEntity, out Entity outputEntity) 
{ 
    if (inputEntity == null) 
     outputEntity = new Entity { PartitionKey = partition, RowKey = rowkey, Number = 1}; 
    else 
    { 
     outputEntity = inputEntity; 
     outputEntity.Number += 1; 
    } 

    return req.CreateResponse(HttpStatusCode.OK, $"Done, Number = {outputEntity.Number}"); 
} 
+0

दुर्भाग्य से मैं इस तकनीक को नोड के लिए काम करने में सक्षम नहीं हूं। –

+0

मैंने इस मुद्दे की रिपोर्ट https://github.com/Azure/azure-webjobs-sdk-script/issues/1663 पर की –

संबंधित मुद्दे