/// <summary> /// 单据状态跟踪描述信息。 /// </summary> /// <param name="tableName"></param> /// <param name="docType"></param> /// <param name="docID"></param> /// <param name="userCode"></param> /// <param name="remark"></param> /// <param name="operateType"></param> public DocStateTraceInfo(string tableName, string docType, int docID, string userCode, string remark, DocOperateType operateType) { _OBJECT_TABLE_NAME = tableName; _DOC_TYPE = docType; _DOC_ID = docID; _OP_USER_CODE = userCode; _OP_STATE = operateType; _REMARK = remark; }
/// <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; }
/// <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)); }
/// <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 })); }