刪除事件日誌記錄代碼
private void visioEventSink_OnShapeDelete(object sender, EventArgs e)
{
Shape shape = (Shape)sender;
string strDeviceType = string.Empty;
string strDeviceName = string.Empty;
string strDeviceID = string.Empty;
strDeviceType = VisioUtility.GetShapeCellValue(shape, "設備類型");
strDeviceID = VisioUtility.GetShapeCellValue(shape, "GUID");
ShapeLogInfo logInfo = new ShapeLogInfo();
logInfo.ShapeType = strDeviceType;
logInfo.ShapeID = shape.NameID;
logInfo.ShapeName = VisioUtility.GetShapeCellValue(shape, "名稱");
// 關鍵:判斷是否為 Undo/Redo 觸發
if (shape.Application.IsUndoingOrRedoing)
{
ShapeLogInfo info = Portal.gc.gOperationLog.GetShape(strDeviceType, shape.NameID);
if (info != null)
strDeviceID = info.ShapeGuid; // 從歷史日誌取回 GUID
}
logInfo.ShapeGuid = strDeviceID;
logInfo.ShapeStatus = ShapeStatus.DeleteShape;
Portal.gc.gOperationLog.AddLog(logInfo);
}
IsUndoingOrRedoing 處理邏輯
- 使用者按 Ctrl+Z / Ctrl+Y 觸發刪除/新增
- 此時形狀屬性可能已重置,無法直接讀取 GUID
- 從操作日誌 (
gOperationLog) 查詢歷史記錄補齊 GUID
- 確保刪除日誌記錄完整性,支援後續資料庫同步
應用價值
- 儲存時依日誌增刪改資料庫關係/設備資訊
- 圖面修訂歷程記錄 (誰、何時、何地、做什麼)
- 支援協同編輯衝突檢測與合併