觸發程序
Azure Cosmos DB 是一個全域散發的多模型資料庫,可支援檔、圖形和索引鍵值資料模型。 本節中的內容是透過 REST 管理觸發程式資源。
觸發程式是應用程式邏輯片段,可在 (預先觸發程式) 之前,以及在 (觸發程式後) 建立、刪除和取代檔之後執行。 觸發程序是以 JavaScript 撰寫的。 前置和後置觸發程序都不會使用參數。 如同預存程序、觸發程序的存在於集合的範圍內,因此將應用程式邏輯限定於集合中。
類似於預存程序,觸發程序資源也有固定的結構描述。 主體屬性包含應用程式邏輯。 下列範例說明觸發程序的 JSON 結構。
{
"id":"PostTrigger-UpdateMetaAll",
"body": "
function updateMetadata() {
var context = getContext();
var collection = context.getCollection();
var response = context.getResponse();
var createdDocument = response.getBody();
// query for metadata document
var filterQuery = 'SELECT * FROM root r WHERE r.id = "_metadata"';
var accept = collection.queryDocuments(collection.getSelfLink(), filterQuery,
updateMetadataCallback);
if(!accept) throw "Unable to update metadata, abort";
function updateMetadataCallback(err, documents, responseOptions) {
if(err) throw new Error("Error" + err.message);
if(documents.length != 1) throw 'Unable to find metadata document';
var metadataDocument = documents[0];
// update metadata
metadataDocument.createdDocuments += 1;
metadataDocument.createdNames += " " + createdDocument.id;
var accept = collection.replaceDocument(metadataDocument._self,
metadataDocument, function(err, docReplaced) {
if(err) throw "Unable to update metadata, abort";
});
if(!accept) throw "Unable to update metadata, abort";
return;
}
}
",
"_rid":"hLEEAI1YjgcBAAAAAAAAgA==",
"_ts":1408058682,
"_self":"dbs\/hLEEAA==\/colls\/hLEEAI1Yjgc=\/udfs\/hLEEAI1YjgcBAAAAAAAAgA==\/",
"_etag":"00004100-0000-0000-0000-53ed453a0000"
}
屬性 | 描述 |
---|---|
id | 必要。 它是使用者可設定的屬性。 它用來識別觸發程序的唯一名稱。 識別碼不能超過 255 個字元。 |
body | 必要。 它是使用者可設定的屬性。 這是觸發程式的主體。 |
triggerOperation | 必要。 這是叫用觸發程式的作業類型。 可接受的值為: All、 Insert、 Replace 和 Delete。 |
triggerType | 必要。 這會指定觸發程式何時引發。 可接受的值為: Pre 和 Post。 在 作業後 張貼 觸發程式時,會在作業之前引發預先觸發程式。 |
_擺脫 | 它是系統產生的屬性。 資源識別碼 (_rid) 是資源模型上每個資源堆疊的階層式唯一識別碼。 在內部用來放置和導覽觸發程序資源。 |
_Ts | 它是系統產生的屬性。 代表資源的上次更新時間戳記。 值為時間戳記。 |
_自我 | 它是系統產生的屬性。 代表資源的唯一可定址 URI。 |
_Etag | 它是系統產生的屬性,指定開放式並行控制所需的資源 etag。 |
工作
您可以使用觸發程式執行下列動作:
如需 UDF 如何運作的詳細資訊,包括叫用觸發程式,請參閱 Azure Cosmos DB 程式設計:預存程式、觸發程式和 UDF。