Audit History,常被用來記錄record的日常操作信息,包括創(chuàng)建,更新,刪除。這是一個非常實用的功能,想想看,如果數(shù)據(jù)被誤修改了,通過Audit History,可以很容易地找到修改前的數(shù)據(jù)值,然后還原回來;不僅如此,如果數(shù)據(jù)有異常,也可以通過Audit History,看看數(shù)據(jù)是由誰在什么時候給修改了。 關于如何開啟Audit,以及如何自定義配置Auditing,這里不再多贅述,這些基礎操作都在Settings -> Auditing 里,網(wǎng)上也有不少這方面的介紹 這里著重想說的,是在誤刪了數(shù)據(jù)之后,如何借用Audit功能,還原數(shù)據(jù)。 一般情況下,我們查看數(shù)據(jù)的Audit信息,是通過具體record的Audit History。 但是如果這條record已經(jīng)被刪除了呢,上面的操作就行不通了。 這個時候,可以看第一張截圖,里面有個Audit Summary View。在這里,我們將會有所發(fā)現(xiàn)。 這里是其中的一條刪除的相關記錄,可以看到,最后的操作是Delete。 如果你打開這條操作記錄,里面會顯示這條記錄在刪除前的字段信息,以及是誰在什么時候,執(zhí)行了刪除操作。 現(xiàn)在,我們已經(jīng)有了這條刪除操作的記錄,那么如何還原這條記錄,大致的思路也就很清晰了: 1. 獲取Audit操作記錄 2. 根據(jù)Audit中待還原記錄的字段信息,還原數(shù)據(jù) 下面是具體的代碼實現(xiàn): //獲取所有的相關的Audit記錄 var auditrecords = service.RetrieveMultiple(new FetchExpression(fetchXML)); foreach (Entityaudit in auditrecords.Entities) { //根據(jù)Audit Id查詢Audit Details RetrieveAuditDetailsRequest auditDetailsRequest = new RetrieveAuditDetailsRequest(); auditDetailsRequest.AuditId = audit.Id; RetrieveAuditDetailsResponseauditDetailsResponse = (RetrieveAuditDetailsResponse)service.Execute(auditDetailsRequest); //待還原對象是Audit Detail的OldValue AuditDetail auditDetail = auditDetailsResponse.AuditDetail; AttributeAuditDetail attributeAuditDetail = auditDetail as AttributeAuditDetail; //還原對象 service.Create(attributeAuditDetail.OldValue); } 需要注意的是,在過濾Audit記錄的時候,以上面的例子來看,我們想找的是對某個Entity的delete操作,那么條件包含如下: 1. Delete操作。在Audit Summary View中對Operation Filter的時候,可以看到有4個選項 其實Operation是一個OptionSet:Create -> 1; Update -> 2; Delete -> 3; Access -> 4 logicalName: operation 2. 某個Entity。這里需要的是Entity的OTC值 logicalName:objecttypecode 當然,根據(jù)不同的場景,會用到不同的過濾條件,但是不管如何過濾,需要提醒一點的是,對待還原的數(shù)據(jù)多做一次確認,以免誤還原,帶來更多的問題。
|
|