public bool UpdateControlMap(EntityMap entityMap, IEnumerable <AttributeMap> attributeMaps, Guid sourceRecordId, Schema.Domain.Attribute refAttribute, IEnumerable <Schema.Domain.Attribute> sourceAttributeMeta, IEnumerable <Schema.Domain.Attribute> targetAttributeMeta, bool onDelete = false) { Sql s = Sql.Builder.Append("UPDATE [" + entityMap.SourceEnttiyName + "] SET "); foreach (var ca in attributeMaps) { //查找所有目标单据,钩稽字段的总和 s.Append(string.Format("[{0}]=(SELECT SUM([{1}]) AS SumValue FROM [{2}] WHERE [{3}] = '{4}')" , ca.RemainAttributeName, ca.TargetAttributeName, entityMap.TargetEnttiyName, refAttribute.Name, sourceRecordId)); s.Append(string.Format(",[{0}]=(CASE WHEN ([{1}]-(SELECT SUM([{2}]) AS SumValue FROM [{3}] WHERE [{4}] = '{5}'))<=0 THEN 1 ELSE 0 END)" , ca.ClosedAttributeName, ca.SourceAttributeName, ca.TargetAttributeName, entityMap.TargetEnttiyName, refAttribute.Name, sourceRecordId)); if (!onDelete && entityMap.MapType == MapType.ForceControl) { var data = _repository.ExecuteQuery(string.Format("SELECT 1 FROM [{0}] a LEFT JOIN (SELECT SUM([{1}]) AS SumValue,[{3}] FROM [{2}] WHERE [{3}] = '{4}' GROUP BY [{3}]) b ON a.{0}id=b.[{3}] WHERE a.{0}id='{4}' AND b.SumValue>a.[{5}]" , entityMap.SourceEnttiyName, ca.TargetAttributeName, entityMap.TargetEnttiyName, refAttribute.Name, sourceRecordId, ca.SourceAttributeName)); if (data.NotEmpty()) { var attr = sourceAttributeMeta.First(n => n.AttributeId.Equals(ca.SourceAttributeId)); var attr2 = targetAttributeMeta.First(n => n.AttributeId.Equals(ca.TargetAttributeId)); _repository.RollBackTransaction(); throw new XmsException(string.Format("'{0}' " + _loc["entitymap_greaterthan_error"] + " '{1}'", attr2.LocalizedName, attr.LocalizedName)); } } } s.Append(" WHERE " + entityMap.SourceEnttiyName + "id='" + sourceRecordId + "'"); _repository.Execute(s); return(true); }
public void RollBackTransaction() { _repository.RollBackTransaction(); }