Exemple #1
0
        /// <summary>
        /// 增加一个子项。
        /// </summary>
        /// <typeparam name="TBaseModel"></typeparam>
        /// <typeparam name="T"></typeparam>
        /// <param name="parent"></param>
        /// <param name="rootContainer"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        public static T AddChildItem <T>(this MB.Orm.Common.BaseModel parent, IDataRelationContainer <MB.Orm.Common.BaseModel> rootContainer, T child)
            where T : MB.Orm.Common.BaseModel
        {
            rootContainer.AddItem(new DataRelationValue <MB.Orm.Common.BaseModel>()
            {
                Parent = parent, Child = child
            });

            return(child);
        }
        /// <summary>
        /// 单据状态跟踪描述信息。
        /// </summary>
        /// <param name="docType"></param>
        /// <param name="docEntityInfo">单据对应的实体对象</param>
        /// <param name="remark"></param>
        /// <param name="operateType"></param>
        public DocStateTraceInfo(string docType, MB.Orm.Common.BaseModel docEntityInfo, string remark, DocOperateType operateType)
        {
            _DOC_TYPE = docType;
            _OP_STATE = operateType;
            _REMARK   = remark;

            MB.Orm.Mapping.Att.ModelMapAttribute att = Attribute.GetCustomAttribute(docEntityInfo.GetType(), typeof(MB.Orm.Mapping.Att.ModelMapAttribute)) as MB.Orm.Mapping.Att.ModelMapAttribute;
            if (att == null)
            {
                throw new MB.Util.APPException("在进行DocStateTrace 时对应的实体对象需要配置 MB.Orm.Mapping.Att.ModelMapAttribute", MB.Util.APPMessageType.SysErrInfo);
            }

            _OBJECT_TABLE_NAME = att.TableName;
            _DOC_ID            = MB.Util.MyReflection.Instance.InvokePropertyForGet <int>(docEntityInfo, "ID");
            _DOC_ORG_SATE      = MB.Util.MyReflection.Instance.InvokePropertyForGet <int>(docEntityInfo, "DOC_STATE");

            _OP_USER_CODE = MB.WcfService.MessageHeaderHelper.GetCurrentLoginUser().USER_CODE;
        }
 private void setObjectAcceptChanges(object data)
 {
     MB.Orm.Common.BaseModel temp = data as MB.Orm.Common.BaseModel;
     if (temp != null)
     {
         temp.EntityState = MB.Util.Model.EntityState.Persistent;
     }
     else
     {
         IList lst = data as IList;
         if (lst != null)
         {
             foreach (object t in lst)
             {
                 setObjectAcceptChanges(t);
             }
         }
         else
         {
             MB.Util.MyReflection.Instance.InvokeMethod(data, ACCEPT_CHANGES_METHOD);
         }
     }
 }
        /// <summary>
        /// 存储单据操作的状态改变操作记录。
        /// 这里有很多特殊的约束:要求主表必须有一个ID、DOC_STATE和LAST_MODIFIED_DATE,同时键值必须是Int32类型。
        /// </summary>
        /// <param name="db">连接的数据库</param>
        /// <param name="stateInfo">状态改变的记录信息</param>
        /// <returns>1表示成功,-1表示不成功</returns>
        public int SaveDocState(Database db, string docType, MB.Orm.Common.BaseModel docEntity, string remark, DocOperateType operateType)
        {
            DocStateTraceInfo stateInfo = new DocStateTraceInfo(docType, docEntity, remark, operateType);

            var databaseType = MB.Orm.Persistence.DatabaseHelper.GetDatabaseType(db);

            //在提交之前先检查服务器日期
            MB.Orm.Persistence.EntityDistributedHelper.NewInstance.CheckEntityCanSave(docEntity);

            string    sql   = databaseType == MB.Orm.Enums.DatabaseType.Oracle ? SQL_INSERT_DOC_TRACE.Replace('@', ':') : SQL_INSERT_DOC_TRACE;
            DbCommand dbCmd = db.GetSqlStringCommand(sql);

            if (stateInfo.ID <= 0)
            {
                stateInfo.ID = MB.Orm.Persistence.EntityIdentityHelper.NewInstance.GetEntityIdentity("SYS_DOC_STATE_CHANGED_TRACE");
            }

            //@ID,@DOC_TYPE,@DOC_ID,@DOC_ORG_SATE,@OP_USER_CODE,@OP_DATE,@OP_STATE,@REMARK
            db.AddInParameter(dbCmd, "ID", System.Data.DbType.Int32, stateInfo.ID);
            db.AddInParameter(dbCmd, "DOC_TYPE", System.Data.DbType.String, stateInfo.DOC_TYPE);
            db.AddInParameter(dbCmd, "DOC_ID", System.Data.DbType.Int32, stateInfo.DOC_ID);
            db.AddInParameter(dbCmd, "DOC_ORG_SATE", System.Data.DbType.Int32, (int)stateInfo.DOC_ORG_SATE);
            db.AddInParameter(dbCmd, "OP_STATE", System.Data.DbType.Int32, (int)stateInfo.OP_STATE);
            db.AddInParameter(dbCmd, "OP_USER_CODE", System.Data.DbType.String, stateInfo.OP_USER_CODE);
            db.AddInParameter(dbCmd, "REMARK", System.Data.DbType.String, stateInfo.REMARK);
            //更改原表的单据状态
            string orgObjectSql = string.Format(SQL_UPDATE_DOC_STATE, stateInfo.OBJECT_TABLE_NAME);

            orgObjectSql = databaseType == MB.Orm.Enums.DatabaseType.Oracle ? orgObjectSql.Replace('@', ':') : orgObjectSql;

            DbCommand orgCmd = db.GetSqlStringCommand(orgObjectSql);

            db.AddInParameter(orgCmd, "DOC_STATE", System.Data.DbType.Int32, convertToDocState(db, stateInfo));
            db.AddInParameter(orgCmd, "DOC_ID", System.Data.DbType.Int32, stateInfo.DOC_ID);

            return(MB.RuleBase.Common.DatabaseExecuteHelper.NewInstance.ExecuteNonQuery(db, new DbCommand[] { dbCmd, orgCmd }));
        }
Exemple #5
0
 /// <summary>
 /// 获取所有指定类型的子项。
 /// </summary>
 /// <typeparam name="TDetail"></typeparam>
 /// <param name="parent"></param>
 /// <param name="rootContainer"></param>
 /// <returns></returns>
 public static TDetail[] GetChildItems <TDetail>(this MB.Orm.Common.BaseModel parent, IDataRelationContainer <MB.Orm.Common.BaseModel> rootContainer)
     where TDetail : MB.Orm.Common.BaseModel
 {
     return(rootContainer.GetChilds <MB.Orm.Common.BaseModel, TDetail>(parent));
 }
        /// <summary>
        ///  存储单据操作的状态改变操作记录。
        ///  这里有很多特殊的约束:要求主表必须有一个ID、DOC_STATE和LAST_MODIFIED_DATE,同时键值必须是Int32类型。
        /// </summary>
        /// <param name="stateInfo"></param>
        /// <returns></returns>
        public int SaveDocState(string docType, MB.Orm.Common.BaseModel docEntity, string remark, DocOperateType operateType)
        {
            Database db = MB.Orm.Persistence.DatabaseHelper.CreateDatabase();

            return(SaveDocState(db, docType, docEntity, remark, operateType));
        }