예제 #1
0
        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);
        }
예제 #2
0
        /// <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")));
                        }
                    }
                }
            }
        }