/// <summary>
        /// ��������Ϣ��������
        /// </summary>
        /// <param name="parent">���������������ֻ��һ����ϵʹ��0</param>
        /// <param name="serialIndex">����ϵ�У�������ǵڼ����������������Ӷ���������ϣ�</param>
        /// <param name="subIndex">����������������Ƕ������е�ÿһ������������</param>
        /// <param name="name">��������</param>
        /// <param name="value">����ֵ��Ŀǰֻ֧��int, string, float, double, decimal, DateTime�⼸�ֻ�����������</param>
        internal NotificationParam(int notifyId, NotificationParam parent, int serialIndex, int subIndex, string name, object value)
        {
            this._parent = parent;
            this.NotifyID = notifyId;
            this.ParentID = parent == null ? 0 : parent.ParamID;
            this.SerialIndex = serialIndex;
            this.SubIndex = subIndex;
            this.ParamName = name;

            if (value == null)
            {
                this.DataType = NotificationDataType.String;
                this.ParamValue = null;
            }
            else if (value is IList<NotificationParam> || value is NotificationParam[])
            {
                //�������ΪNotificationParam���ϣ������Ӳ㼶��ϵ
                //TODO: �ݲ�֧��ֱ�Ӵ���NotificationParam���ϴ���NotificationParam����
            }
            else if (value is NotificationParam)
            {
                this.DataType = (value as NotificationParam).DataType;
                this.ParamValue = (value as NotificationParam).ParamValue;
            }
            else
            {
                //����Ļ�����������Ϊint, decimal, float, double, string, datetime
                switch (value.GetType().Name)
                {
                    case "Int32":
                    case "Int16":
                        this.DataType = NotificationDataType.Int;
                        this.ParamValue = Cast.Int(value, 0).ToString();
                        break;

                    case "Single":
                    case "Double":
                    case "Decimal":
                        this.DataType = NotificationDataType.Decimal;
                        this.ParamValue = Cast.Decimal(value, 0M).ToString("#0.##");
                        break;

                    case "DateTime":
                        this.DataType = NotificationDataType.DateTime;
                        this.ParamValue = Cast.DateTime(value, new DateTime(1900, 1, 1)).ToString("yyyy-MM-dd HH:mm").TrimEnd(":00".ToCharArray()).Trim();
                        break;

                    default:
                        this.DataType = NotificationDataType.String;
                        this.ParamValue = value.ToString().Trim();
                        break;
                }
            }
        }
 /// <summary>
 /// ����������Ϣ��������
 /// </summary>
 /// <param name="parent">���������������ֻ��һ����ϵʹ��0</param>
 /// <param name="serialIndex">����ϵ�У�������ǵڼ����������������Ӷ���������ϣ�</param>
 /// <param name="subIndex">����������������Ƕ������е�ÿһ������������</param>
 /// <param name="name">��������</param>
 internal NotificationParam(ISession session, int notifyId, NotificationParam parent, int serialIndex, int subIndex, string name)
 {
     this._session = session;
     this._parent = parent;
     this.NotifyID = notifyId;
     this.ParentID = parent == null ? 0 : parent.ParamID;
     this.SerialIndex = serialIndex;
     this.SubIndex = subIndex;
     this.ParamName = name;
     this.DataType = NotificationDataType.ListOfNotificationParam;
     this.ParamValue = null;
 }
 /// <summary>
 /// ��Ӽ򵥲���
 /// </summary>
 /// <param name="name">��������</param>
 /// <param name="value">����ֵ��������int, string, float, double, decimal, DateTime����</param>
 /// <returns>������Ϣ����������</returns>
 public NotificationParam AddSingleParam(string name, object value)
 {
     this.IsListParam();
     NotificationParam param = new NotificationParam(this.NotifyID, this, this._childSerial, this._childIndex++, name, value);
     param.Create(this._session);
     return this;
 }
 /// <summary>
 /// ��Ӽ��ϲ���
 /// </summary>
 /// <param name="name">���ϲ�����</param>
 /// <returns>����ӵļ��ϲ�������</returns>
 public NotificationParam AddListParam(string name)
 {
     this.IsListParam();
     NotificationParam param = new NotificationParam(this._session, this.NotifyID, this, this._childSerial, this._childIndex++, name);
     param.Create(this._session);
     return param;
 }
        private object BuildParam(NotificationParam param)
        {
            if (param.DataType != NotificationDataType.ListOfNotificationParam)
            {
                log.DebugFormat("build single param, name: {0}, value: {1} ", param.ParamName, param.ParamValue);
                return param.ParamValue;
            }
            log.DebugFormat("build list param, name: {0}", param.ParamName, param.ParamValue);
            IList<IDictionary<string, object>> result = new List<IDictionary<string, object>>();
            System.Data.DataSet ds = this._session.CreateObjectQuery(@"select distinct SerialIndex from NotificationParam where ParentID=?pid order by SerialIndex")
                .Attach(typeof(NotificationParam))
                .SetValue("?pid", param.ParamID, "ParentID")
                .DataSet();
            foreach (System.Data.DataRow row in ds.Tables[0].Rows)
            {
                IDictionary<string, object> paramList = new Dictionary<string, object>();
                IList<NotificationParam> notifyParams = this._session.CreateEntityQuery<NotificationParam>()
                    .Where(Exp.Eq("ParentID", param.ParamID) & Exp.Eq("SerialIndex", row[0]))
                    .OrderBy("SubIndex")
                    .List<NotificationParam>();
                log.DebugFormat("serial: {0}, param count: {1}", row[0], notifyParams.Count);
                foreach (NotificationParam p in notifyParams)
                    paramList.Add(p.ParamName, BuildParam(p));
                result.Add(paramList);
            }

            return result;
        }
 /// <summary>
 /// ��Ӽ򵥲���
 /// </summary>
 /// <param name="name">��������</param>
 /// <param name="value">����ֵ��������int, string, float, double, decimal, DateTime����</param>
 /// <returns>��Ϣ֪ͨ������</returns>
 public Notification AddSingleParam(string name, object value)
 {
     NotificationParam param = new NotificationParam(this.NotifyID, null, 1, this._subIndex++, name, value);
     param.Create(this._session);
     return this;
 }
 /// <summary>
 /// ��Ӽ��ϲ���
 /// </summary>
 /// <param name="name">���ϲ�����</param>
 /// <returns>����ӵļ��ϲ�������</returns>
 public NotificationParam AddListParam(string name)
 {
     NotificationParam param = new NotificationParam(this._session, this.NotifyID, null, 1, this._subIndex++, name);
     param.Create(this._session);
     return param;
 }