private DomainObjectData loadFolderAndIncident(DomainObjectDataSet dataSet, GetMailMsgInfoRequest request, IXExecutionContext context) { DomainObjectData xobjFolder; if (request.ObjectType == "Folder") { xobjFolder = dataSet.GetLoadedStub("Folder", request.ObjectID); dataSet.LoadProperty(context.Connection, xobjFolder, "Name"); } else { XDbCommand cmd = context.Connection.CreateCommand( @"SELECT f.ObjectID as FolderID, f.Name as FolderName, i.Name as IncidentName, i.Number as IncidentNumber FROM Incident i JOIN Folder f ON i.Folder=f.ObjectID WHERE i.ObjectID = @IncidentID" ); cmd.Parameters.Add("IncidentID", DbType.Guid, ParameterDirection.Input, false, request.ObjectID); DomainObjectData xobjIncident = dataSet.GetLoadedStub("Incident", request.ObjectID); using (IDataReader reader = cmd.ExecuteReader()) { if (!reader.Read()) { throw new XObjectNotFoundException("Incident", request.ObjectID); } xobjFolder = dataSet.GetLoadedStub("Folder", reader.GetGuid(reader.GetOrdinal("FolderID"))); xobjFolder.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("FolderName"))); xobjIncident.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("IncidentName"))); xobjIncident.SetLoadedPropValue("Number", reader.GetInt32(reader.GetOrdinal("IncidentNumber"))); xobjIncident.SetLoadedPropValue("Folder", xobjFolder.ObjectID); } } return(xobjFolder); }
/// <summary> /// Загружает поля State, BlockDate в случае, если они еще не загружены и если они обновлялись. /// </summary> /// <param name="xobj"></param> /// <param name="bUpdatedState">Признак обновления поля State</param> /// <param name="bUpdatedBlockDate">Признак обновления поля BlockDate</param> /// <param name="context"></param> private void preloadProps(DomainObjectData xobj, bool bUpdatedState, bool bUpdateIsLocked, IXExecutionContext context) { bool bLoadState = bUpdatedState && !xobj.HasLoadedProp("State"); bool bLoadIsLocked = bUpdateIsLocked && !xobj.HasLoadedProp("IsLocked"); // если надо зачитать хотя бы одно свойство if (bLoadState || bLoadIsLocked) { XDbCommand cmd = context.Connection.CreateCommand(); StringBuilder cmdTextBuilder = new StringBuilder(); cmdTextBuilder.Append("SELECT "); if (bLoadState) { cmdTextBuilder.Append("[State]"); } if (bLoadIsLocked) { if (bLoadState) { cmdTextBuilder.Append(", "); } cmdTextBuilder.Append("[IsLocked]"); } cmdTextBuilder.Append(" FROM "); cmdTextBuilder.Append(context.Connection.GetTableQName(xobj.TypeInfo)); cmdTextBuilder.Append(" WHERE ObjectID = @ObjectID"); cmd.CommandText = cmdTextBuilder.ToString(); cmd.Parameters.Add("ObjectID", DbType.Guid, ParameterDirection.Input, false, xobj.ObjectID); using (IXDataReader reader = cmd.ExecuteXReader()) { if (reader.Read()) { if (bLoadState) { xobj.SetLoadedPropValue("State", reader.GetInt16(reader.GetOrdinal("State"))); } if (bLoadIsLocked) { xobj.SetLoadedPropValue("IsLocked", reader.GetBoolean(reader.GetOrdinal("IsLocked"))); } } } } }