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