Added code to raise an error if trying to paste a step in reference to a step that has been deleted by another user (eg: paste before, paste after or paste replace)
Added handlers for new treeview events of NodeCopy and ClipboardStatus Added exception handlers to handle the exception of trying to use a deleted step as a reference point for a paste operation (before, after or replace) Added code to set the MyCopyStep property to the value of the new step added in a paste replace operation
This commit is contained in:
parent
b5ded05838
commit
a17c27c0a8
@ -53,6 +53,11 @@ BEGIN TRY -- Try Block
|
|||||||
ContentID INT
|
ContentID INT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
-- First check if the replaced item can be deleted, i.e. it doesn't have transitions
|
-- First check if the replaced item can be deleted, i.e. it doesn't have transitions
|
||||||
-- pointing to it or children.
|
-- pointing to it or children.
|
||||||
|
|
||||||
@ -419,6 +424,11 @@ WITH EXECUTE AS OWNER
|
|||||||
AS
|
AS
|
||||||
BEGIN TRY -- Try Block
|
BEGIN TRY -- Try Block
|
||||||
BEGIN TRANSACTION
|
BEGIN TRANSACTION
|
||||||
|
if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
-- First make a copy of the input StartItemID
|
-- First make a copy of the input StartItemID
|
||||||
-- DestFormatID is the formatid for the destination parent's format
|
-- DestFormatID is the formatid for the destination parent's format
|
||||||
DECLARE @DestFormatID int
|
DECLARE @DestFormatID int
|
||||||
@ -526,6 +536,11 @@ WITH EXECUTE AS OWNER
|
|||||||
AS
|
AS
|
||||||
BEGIN TRY -- Try Block
|
BEGIN TRY -- Try Block
|
||||||
BEGIN TRANSACTION
|
BEGIN TRANSACTION
|
||||||
|
if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1)
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
-- First make a copy of the input CopyStartID
|
-- First make a copy of the input CopyStartID
|
||||||
-- DestFormatID is the formatid for the destination parent's format
|
-- DestFormatID is the formatid for the destination parent's format
|
||||||
DECLARE @DestFormatID int
|
DECLARE @DestFormatID int
|
||||||
|
@ -245,7 +245,9 @@ namespace VEPROMS
|
|||||||
tv.InsertItemInfo += new vlnTreeViewItemInfoInsertEvent(tv_InsertItemInfo);
|
tv.InsertItemInfo += new vlnTreeViewItemInfoInsertEvent(tv_InsertItemInfo);
|
||||||
tv.NodeInsert += new vlnTreeViewEvent(tv_NodeInsert);
|
tv.NodeInsert += new vlnTreeViewEvent(tv_NodeInsert);
|
||||||
tv.PasteItemInfo += new vlnTreeViewItemInfoPasteEvent(tv_PasteItemInfo);
|
tv.PasteItemInfo += new vlnTreeViewItemInfoPasteEvent(tv_PasteItemInfo);
|
||||||
tc.ItemPaste += new StepPanelItemPastedEvent(tc_ItemPasted);
|
tv.NodeCopy += new vlnTreeViewEvent(tv_NodeCopy);
|
||||||
|
tv.ClipboardStatus += new vlnTreeViewClipboardStatusEvent(tv_ClipboardStatus);
|
||||||
|
tc.ItemPaste += new StepPanelItemPastedEvent(tc_ItemPasted);
|
||||||
displayHistory.HistorySelectionChanged += new DisplayHistoryEvent(displayHistory_HistorySelectionChanged);
|
displayHistory.HistorySelectionChanged += new DisplayHistoryEvent(displayHistory_HistorySelectionChanged);
|
||||||
_CommentTitleBckColor = epAnnotations.TitleStyle.BackColor1.Color;
|
_CommentTitleBckColor = epAnnotations.TitleStyle.BackColor1.Color;
|
||||||
if (!btnAnnoDetailsPushPin.Checked)
|
if (!btnAnnoDetailsPushPin.Checked)
|
||||||
@ -280,7 +282,16 @@ namespace VEPROMS
|
|||||||
displayApplicability.ApplicabilityViewModeChanged += new DisplayApplicability.DisplayApplicabilityEvent(displayApplicability_ApplicabilityViewModeChanged);
|
displayApplicability.ApplicabilityViewModeChanged += new DisplayApplicability.DisplayApplicabilityEvent(displayApplicability_ApplicabilityViewModeChanged);
|
||||||
tv.ExportImportProcedureSets += new vlnTreeViewEvent(tv_ExportImportProcedureSets);
|
tv.ExportImportProcedureSets += new vlnTreeViewEvent(tv_ExportImportProcedureSets);
|
||||||
}
|
}
|
||||||
|
ItemInfo tv_ClipboardStatus(object sender, vlnTreeEventArgs args)
|
||||||
|
{
|
||||||
|
return tc.MyCopyStep;
|
||||||
|
}
|
||||||
|
void tv_NodeCopy(object sender, vlnTreeEventArgs args)
|
||||||
|
{
|
||||||
|
VETreeNode tn = args.Node as VETreeNode;
|
||||||
|
ItemInfo ii = tn.VEObject as ItemInfo;
|
||||||
|
tc.MyCopyStep = ii;
|
||||||
|
}
|
||||||
void tv_ExportImportProcedureSets(object sender, vlnTreeEventArgs args)
|
void tv_ExportImportProcedureSets(object sender, vlnTreeEventArgs args)
|
||||||
{
|
{
|
||||||
FolderInfo fi = null;
|
FolderInfo fi = null;
|
||||||
@ -349,7 +360,7 @@ namespace VEPROMS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MakeDatabaseChanges()
|
private void MakeDatabaseChanges()
|
||||||
{
|
{
|
||||||
// September 2012: Decided to store roimages as zipped. Any previous data may not have them zipped.
|
// September 2012: Decided to store roimages as zipped. Any previous data may not have them zipped.
|
||||||
// Check the top folders config to see, and if needed, zip them:
|
// Check the top folders config to see, and if needed, zip them:
|
||||||
|
@ -471,7 +471,13 @@ namespace VEPROMS.CSLA.Library
|
|||||||
, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand);
|
, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
if(ex.Message.Contains("This current step has been deleted in another session"))
|
||||||
|
{
|
||||||
|
System.Windows.Forms.MessageBox.Show("The highlighted step has been deleted by another user!", "Cannot Paste Step"
|
||||||
|
, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
private ItemInfo CopyPasteItemInfoFetch(int copyStartID, int itemID, int? type, int? fromType, EAddpingPart addType)
|
private ItemInfo CopyPasteItemInfoFetch(int copyStartID, int itemID, int? type, int? fromType, EAddpingPart addType)
|
||||||
{
|
{
|
||||||
@ -717,9 +723,12 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
if (_MyLog.IsErrorEnabled) _MyLog.Error("ItemInfo.DataPortal_Fetch", ex);
|
if (!ex.Message.Contains("This step has been deleted") && !ex.Message.Contains("This current step has been deleted in another session"))
|
||||||
_ErrorMessage = ex.Message;
|
{
|
||||||
throw new DbCslaException("ItemInfo.DataPortal_Fetch", ex);
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("ItemInfo.DataPortal_Fetch", ex);
|
||||||
|
}
|
||||||
|
_ErrorMessage = ex.Message;
|
||||||
|
throw new DbCslaException("ItemInfo.DataPortal_Fetch", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void DataPortal_Fetch(AddingPartCriteria criteria)
|
private void DataPortal_Fetch(AddingPartCriteria criteria)
|
||||||
@ -1237,15 +1246,36 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
if (ex.Message.Contains("has External Transitions and has no next step")
|
if (!HandleSqlExceptionOnCopy(ex))
|
||||||
|| ex.Message.Contains("has External Transitions to it's children")
|
{
|
||||||
|| ex.Message.Contains("This step has been deleted")
|
if (ex.Message.Contains("has External Transitions and has no next step")
|
||||||
)
|
|| ex.Message.Contains("has External Transitions to it's children")
|
||||||
throw ex;
|
|| ex.Message.Contains("This step has been deleted")
|
||||||
System.Windows.Forms.MessageBox.Show("Details were written to the Error Log.", "Paste Replace Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
|
)
|
||||||
return itemInfo;
|
throw ex;
|
||||||
|
System.Windows.Forms.MessageBox.Show("Details were written to the Error Log.", "Paste Replace Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
|
||||||
|
return itemInfo;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return itemInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
private static bool HandleSqlExceptionOnCopy(Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("This step has been deleted"))
|
||||||
|
{
|
||||||
|
System.Windows.Forms.MessageBox.Show("The step being pasted has been deleted!", "Cannot Paste Deleted Step"
|
||||||
|
, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (ex.Message.Contains("This current step has been deleted in another session"))
|
||||||
|
{
|
||||||
|
System.Windows.Forms.MessageBox.Show("The highlighted step has been deleted by another user!", "Cannot Paste Step"
|
||||||
|
, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,8 +449,12 @@ namespace Volian.Controls.Library
|
|||||||
edtitm.PasteSiblingAfter(copyStartID);
|
edtitm.PasteSiblingAfter(copyStartID);
|
||||||
break;
|
break;
|
||||||
case ItemInfo.EAddpingPart.Replace:
|
case ItemInfo.EAddpingPart.Replace:
|
||||||
edtitm.PasteReplace(copyStartID);
|
EditItem ei = edtitm.PasteReplace(copyStartID);
|
||||||
edtitm.Dispose();
|
if (ei.MyItemInfo.ItemID != edtitm.MyItemInfo.ItemID)
|
||||||
|
{
|
||||||
|
edtitm.Dispose();
|
||||||
|
MyCopyStep = ei.MyItemInfo;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return false; ;
|
return false; ;
|
||||||
|
@ -1246,8 +1246,8 @@ namespace Volian.Controls.Library
|
|||||||
//catch (System.Data.SqlClient.SqlException ex)
|
//catch (System.Data.SqlClient.SqlException ex)
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
if(!HandleSqlExceptionOnCopy(ex))
|
if (HandleSqlExceptionOnCopy(ex)) return this;
|
||||||
HandleSqlExceptionOnDelete(ex);
|
HandleSqlExceptionOnDelete(ex);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
// Remove the EditItem that was the replaced item.
|
// Remove the EditItem that was the replaced item.
|
||||||
@ -1307,7 +1307,12 @@ namespace Volian.Controls.Library
|
|||||||
MessageBox.Show("The step being pasted has been deleted", "Cannot Paste Step", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
MessageBox.Show("The step being pasted has been deleted", "Cannot Paste Step", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
if(ex.Message.Contains("This current step has been deleted in another session"))
|
||||||
|
{
|
||||||
|
MessageBox.Show("The highlighted step has been deleted by another user.", "Cannot Paste Step", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
public void IdentifyChildren(bool highlight)
|
public void IdentifyChildren(bool highlight)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user