Moved ItemInsert code from ItemExt.cs and now using stored procedures to do all changes within a Transaction.
This commit is contained in:
parent
7f0eb11f47
commit
406e8a928c
339
PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs
Normal file
339
PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs
Normal file
@ -0,0 +1,339 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using Csla;
|
||||
using Csla.Data;
|
||||
|
||||
namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
public partial class ItemInfo
|
||||
{
|
||||
#region Old Insert
|
||||
//public ItemInfo InsertSiblingBeforeOld(string text)
|
||||
//{
|
||||
// return InsertSiblingBefore(text, null);
|
||||
//}
|
||||
//public ItemInfo InsertSiblingBeforeOld(string text, string number)
|
||||
//{
|
||||
// ItemInfo prevItemInfo = MyPrevious;
|
||||
// ItemInfo newItemInfo = null;
|
||||
// PartInfoList partInfoList = null;
|
||||
// if (MyParent != null && MyParent.MyContent != null)
|
||||
// {
|
||||
// MyParent.MyContent.RefreshContentParts();
|
||||
// partInfoList = MyParent.MyContent.ContentParts;
|
||||
// }
|
||||
// using (Item prevItem = prevItemInfo == null ? null : prevItemInfo.Get()) // Get the previous Item
|
||||
// {
|
||||
// using (Item newItem = Item.MakeItem(prevItem, Content.MakeContent(number, text, MyContent.Type, null, null))) // Create the new Item
|
||||
// {
|
||||
// using (Item thisItem = Get()) // Get the next item in the list
|
||||
// {
|
||||
// thisItem.MyPrevious = newItem; // Point to the new item
|
||||
// thisItem.Save(); // Save Changes
|
||||
// if (prevItem == null)
|
||||
// {
|
||||
// PartInfo partInfo = partInfoList.Find(this);
|
||||
// using (Part part = partInfo.Get())
|
||||
// {
|
||||
// part.MyItem = newItem;
|
||||
// part.Save();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// // ToDo: Need change PartInfo in PartInfoList
|
||||
// newItemInfo = ItemInfo.Get(newItem.ItemID);
|
||||
// newItemInfo.ResetOrdinal();
|
||||
// }
|
||||
// }
|
||||
// return newItemInfo;
|
||||
//}
|
||||
//public ItemInfo InsertSiblingAfterOld(string text)
|
||||
//{
|
||||
// return InsertSiblingAfter(text, null);
|
||||
//}
|
||||
//public ItemInfo InsertSiblingAfterOld(string text, string number)
|
||||
//{
|
||||
// return InsertSiblingAfter(text, number, MyContent.Type);
|
||||
//}
|
||||
//public ItemInfo InsertSiblingAfterOld(string text, string number, int? type)
|
||||
//{
|
||||
// ItemInfo nextItemInfo = NextItem;
|
||||
// ItemInfo newItemInfo = null;
|
||||
// using (Item thisItem = Get()) // Get the Current Item
|
||||
// {
|
||||
// using (Item newItem = Item.MakeItem(thisItem, Content.MakeContent(number, text, type, null, null))) // Create the new Item
|
||||
// {
|
||||
// if (nextItemInfo != null) // Simple case, adding to end of list:
|
||||
// using (Item nextItem = nextItemInfo.Get()) // Get the next item in the list
|
||||
// {
|
||||
// nextItem.MyPrevious = newItem; // Point to the new item
|
||||
// nextItem.Save(); // Save Changes
|
||||
// }
|
||||
// // ToDo: Need change PartInfo in PartInfoList
|
||||
// newItemInfo = ItemInfo.Get(newItem.ItemID);
|
||||
// newItemInfo.ResetOrdinal();
|
||||
// }
|
||||
// }
|
||||
// return newItemInfo;
|
||||
//}
|
||||
//public ItemInfo InsertChildOld(E_FromType fromType, int type, string text)
|
||||
//{
|
||||
// return InsertChild(fromType, type, text, null);
|
||||
//}
|
||||
//public ItemInfo InsertChildOld(E_FromType fromType, int type, string text, string number)
|
||||
//{
|
||||
// ItemInfo newItemInfo = null;
|
||||
// using (Item thisItem = Get()) // Get the Current Item
|
||||
// {
|
||||
// using (Item newItem = Item.MakeItem(null, Content.MakeContent(number, text, type, null, null))) // Create the new Item
|
||||
// {
|
||||
// PartInfo partInfo = MyContent.ContentParts == null ? null : MyContent.ContentParts.Find(fromType);
|
||||
// if (partInfo != null)
|
||||
// {
|
||||
// //this could be equivalent to adding a sibling with a specific type
|
||||
// using (Part part = partInfo.Get())
|
||||
// {
|
||||
// part.MyItem.MyPrevious = newItem;
|
||||
// part.MyItem.Save();
|
||||
// part.MyItem = newItem;
|
||||
// part.Save();
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // This means that a part needs to be added to point to the new item
|
||||
// //using (Part part = Part.MakePart(thisItem.MyContent, ))
|
||||
// //{ ;}
|
||||
// thisItem.MyContent.ContentParts.Add((int)fromType, newItem);
|
||||
// thisItem.Save();
|
||||
// }
|
||||
// newItemInfo = ItemInfo.Get(newItem.ItemID);
|
||||
// }
|
||||
// }
|
||||
// ResetParts();
|
||||
// return newItemInfo;
|
||||
//}
|
||||
#endregion
|
||||
#region Insert Before
|
||||
public ItemInfo InsertSiblingBefore(string text)
|
||||
{
|
||||
return InsertSiblingBefore(text, null);
|
||||
}
|
||||
public ItemInfo InsertSiblingBefore(string text, string number)
|
||||
{
|
||||
ItemInfo tmp = DataPortal.Fetch<ItemInfo>(new AddingPartCriteria(ItemID, EAddpingPart.Before, number, text, null, null, null, null, DateTime.Now, Environment.UserName));
|
||||
return tmp;
|
||||
}
|
||||
#endregion
|
||||
#region Insert After
|
||||
public ItemInfo InsertSiblingAfter(string text)
|
||||
{
|
||||
return InsertSiblingAfter(text, null);
|
||||
}
|
||||
public ItemInfo InsertSiblingAfter(string text, string number)
|
||||
{
|
||||
return InsertSiblingAfter(text, number, MyContent.Type);
|
||||
}
|
||||
public ItemInfo InsertSiblingAfter(string text, string number, int? type)
|
||||
{
|
||||
ItemInfo tmp = DataPortal.Fetch<ItemInfo>(new AddingPartCriteria(ItemID, EAddpingPart.After, number, text, type, null, null, null, DateTime.Now, Environment.UserName));
|
||||
return tmp;
|
||||
}
|
||||
#endregion
|
||||
#region Insert Child
|
||||
public ItemInfo InsertChild(E_FromType fromType, int type, string text)
|
||||
{
|
||||
return InsertChild(fromType, type, text, null);
|
||||
}
|
||||
public ItemInfo InsertChild(E_FromType fromType, int type, string text, string number)
|
||||
{
|
||||
ItemInfo tmp = DataPortal.Fetch<ItemInfo>(new AddingPartCriteria(ItemID, EAddpingPart.Child, number, text, type, (int?) fromType, null, null, DateTime.Now, Environment.UserName));
|
||||
return tmp;
|
||||
}
|
||||
#endregion
|
||||
#region DataPortal
|
||||
private void DataPortal_Fetch(AddingPartCriteria criteria)
|
||||
{
|
||||
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ItemInfo.DataPortal_Fetch", GetHashCode());
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
{
|
||||
ApplicationContext.LocalContext["cn"] = cn;
|
||||
using (SqlCommand cm = cn.CreateCommand())
|
||||
{
|
||||
cm.CommandType = CommandType.StoredProcedure;
|
||||
cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); //ABC
|
||||
cm.Parameters.AddWithValue("@Number", criteria.Number); //ABC
|
||||
cm.Parameters.AddWithValue("@Text", criteria.Text); //ABC
|
||||
cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); //ABC
|
||||
cm.Parameters.AddWithValue("@Config", criteria.Config); //ABC
|
||||
cm.Parameters.AddWithValue("@Type", criteria.Type); //ABC
|
||||
cm.Parameters.AddWithValue("@DTS", criteria.DTS); //ABC
|
||||
cm.Parameters.AddWithValue("@UserID", criteria.UserID); //ABC
|
||||
SqlParameter param_ContentID = new SqlParameter("@newItemID", SqlDbType.Int);
|
||||
param_ContentID.Direction = ParameterDirection.Output;
|
||||
cm.Parameters.Add(param_ContentID);
|
||||
switch (criteria.AddType)
|
||||
{
|
||||
case EAddpingPart.Child:
|
||||
cm.CommandText = "addItemChild";
|
||||
cm.Parameters.AddWithValue("@FromType", criteria.FromType); //--C
|
||||
break;
|
||||
case EAddpingPart.Before:
|
||||
cm.CommandText = "addItemSiblingBefore";
|
||||
break;
|
||||
case EAddpingPart.After:
|
||||
cm.CommandText = "addItemSiblingAfter";
|
||||
break;
|
||||
}
|
||||
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
||||
{
|
||||
//newItemID = (int)cm.Parameters["@newContentID"].Value;
|
||||
if (!dr.Read())
|
||||
{
|
||||
_ErrorMessage = "No Record Found";
|
||||
return;
|
||||
}
|
||||
ReadData(dr);
|
||||
}
|
||||
}
|
||||
// removing of item only needed for local data portal
|
||||
if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
|
||||
ApplicationContext.LocalContext.Remove("cn");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_MyLog.IsErrorEnabled) _MyLog.Error("ItemInfo.DataPortal_Fetch", ex);
|
||||
_ErrorMessage = ex.Message;
|
||||
throw new DbCslaException("ItemInfo.DataPortal_Fetch", ex);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
[Serializable()]
|
||||
protected class AddingPartCriteria
|
||||
{
|
||||
#region Properties
|
||||
private int _ItemID;
|
||||
public int ItemID
|
||||
{
|
||||
get { return _ItemID; }
|
||||
set { _ItemID = value; }
|
||||
}
|
||||
private EAddpingPart _AddType;
|
||||
public EAddpingPart AddType
|
||||
{
|
||||
get { return _AddType; }
|
||||
set { _AddType = value; }
|
||||
}
|
||||
private string _Number=null;
|
||||
public string Number
|
||||
{
|
||||
get { return _Number; }
|
||||
set { _Number = value; }
|
||||
}
|
||||
private string _Text=null;
|
||||
public string Text
|
||||
{
|
||||
get { return _Text; }
|
||||
set { _Text = value; }
|
||||
}
|
||||
private int? _FromType = null;
|
||||
public int? FromType
|
||||
{
|
||||
get { return _FromType; }
|
||||
set { _FromType = value; }
|
||||
}
|
||||
private int? _Type=null;
|
||||
public int? Type
|
||||
{
|
||||
get { return _Type; }
|
||||
set { _Type = value; }
|
||||
}
|
||||
private int? _FormatID=null;
|
||||
public int? FormatID
|
||||
{
|
||||
get { return _FormatID; }
|
||||
set { _FormatID = value; }
|
||||
}
|
||||
private string _Config=null;
|
||||
public string Config
|
||||
{
|
||||
get { return _Config; }
|
||||
set { _Config = value; }
|
||||
}
|
||||
private DateTime _DTS;
|
||||
public DateTime DTS
|
||||
{
|
||||
get { return _DTS; }
|
||||
set { _DTS = value; }
|
||||
}
|
||||
private string _UserID;
|
||||
public string UserID
|
||||
{
|
||||
get { return _UserID; }
|
||||
set { _UserID = value; }
|
||||
}
|
||||
#endregion
|
||||
#region Constructor
|
||||
public AddingPartCriteria(int itemID, EAddpingPart addType, string number, string text, int? type, int? fromType, int? formatID, string config, DateTime dts, string userID)
|
||||
{
|
||||
_ItemID = itemID;
|
||||
_AddType = addType;
|
||||
_Number = number;
|
||||
_Text = text;
|
||||
_Type = type;
|
||||
_FromType = fromType;
|
||||
_FormatID = formatID;
|
||||
_Config = config;
|
||||
_DTS = dts;
|
||||
_UserID = userID;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
public enum EAddpingPart
|
||||
{
|
||||
Child=0,
|
||||
Before=1,
|
||||
After=2
|
||||
}
|
||||
public ItemInfo NextItem
|
||||
{
|
||||
get
|
||||
{
|
||||
if (NextItemCount > 0 && NextItems.Count > 0)
|
||||
return NextItems[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private static void ResetOrdinal(int itemID)
|
||||
{
|
||||
bool first = true;
|
||||
ConvertListToDictionary();
|
||||
string key = itemID.ToString();
|
||||
if (_CacheByPrimaryKey.ContainsKey(key))
|
||||
{
|
||||
foreach (ItemInfo itm in _CacheByPrimaryKey[key])
|
||||
{
|
||||
itm._Ordinal = null;
|
||||
//Console.WriteLine("Ordinal {0},{1}",key,itm.MyPrevious == null ? 0 : itm.MyPrevious._Ordinal);
|
||||
if (first && itm.NextItem != null)
|
||||
{
|
||||
ResetOrdinal(itm.NextItem.ItemID);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void ResetOrdinal()
|
||||
{
|
||||
//_Ordinal = null;
|
||||
//Console.WriteLine("Ordinal {0},{1}",ItemID,MyPrevious == null ? 0 : MyPrevious.Ordinal);
|
||||
ResetOrdinal(ItemID);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user