田爽 3 miesięcy temu
rodzic
commit
465de7d8d9
7 zmienionych plików z 52 dodań i 38 usunięć
  1. 4 4
      Entity/Order.cs
  2. 3 3
      Entity/StepBasicEntity.cs
  3. 10 6
      Joint/Delay.cs
  4. 7 5
      Joint/Order.cs
  5. 1 1
      Joint/Public.cs
  6. 2 2
      Joint/Visit.cs
  7. 25 17
      Joint/Workflow.cs

+ 4 - 4
Entity/Order.cs

@@ -283,17 +283,17 @@ namespace DataTransmission.Entity
 		/// <summary>
 		/// 工单开始时间(受理/接办时间=流程开启时间)
 		/// </summary>
-		public DateTime? StartTime { get; set; }
+		public string? StartTime { get; set; }
 
 		/// <summary>
 		/// 超期时间(期满时间)
 		/// </summary>
-		public DateTime? ExpiredTime { get; set; }
+		public string? ExpiredTime { get; set; }
 
 		/// <summary>
 		/// 即将超期时间
 		/// </summary>
-		public DateTime? NearlyExpiredTime { get; set; }
+		public string? NearlyExpiredTime { get; set; }
 
 		/// <summary>
 		/// 即将超期时间第一级
@@ -323,7 +323,7 @@ namespace DataTransmission.Entity
 		/// <summary>
 		/// 归档时间(暂为流程结束时间,因流程结束自动归档)
 		/// </summary>
-		public DateTime? FiledTime { get; set; }
+		public string? FiledTime { get; set; }
 
 		/// <summary>
 		/// 办结时长(秒) 办结时间-交办时间

+ 3 - 3
Entity/StepBasicEntity.cs

@@ -194,7 +194,7 @@ namespace DataTransmission.Entity
 		/// <summary>
 		/// 接办时间
 		/// </summary>
-		public DateTime? AcceptTime { get; set; }
+		public string? AcceptTime { get; set; }
 
 		#endregion
 
@@ -232,7 +232,7 @@ namespace DataTransmission.Entity
 		/// <summary>
 		/// 办理完成时间
 		/// </summary>
-		public DateTime? HandleTime { get; set; }
+		public string? HandleTime { get; set; }
 
 		/// <summary>
 		/// 角色id(如果指派给角色)
@@ -379,7 +379,7 @@ namespace DataTransmission.Entity
 		/// <summary>
 		/// 节点期满时间
 		/// </summary>
-		public DateTime? StepExpiredTime { get; set; }
+		public string? StepExpiredTime { get; set; }
 
 
 		/// nextStep 信息

+ 10 - 6
Joint/Delay.cs

@@ -74,14 +74,18 @@ namespace DataTransmission.Joint
 					{model.CreatorOrgLevel}, '', NULL, '{model.EmployeeName}', NULL, NULL, NULL, NULL, 'f', NULL)";
 				}
 				delayNum++;
-
-				var pgDelayWorkflow = workflow.GetWorkflow(row["FSH_FlowID"].ToString(), "CityHotline");
-				var pgDelayWorkflowSql = workflow.GetWorkflowSql(pgDelayWorkflow, row, orderId, org, user, delayModule, model);
-				if (!string.IsNullOrEmpty(pgDelayWorkflowSql)) {
-					pgDelaySql += pgDelayWorkflowSql;
+				pgDelaySql += ";";
+				var pgDelayWorkflow = workflow.GetWorkflow(row["FSH_FlowID"].ToString(), "Flow_Postpone");
+				if (pgDelayWorkflow.Rows.Count > 0)
+				{
+					var pgDelayWorkflowSql = workflow.GetWorkflowSql(pgDelayWorkflow, row, orderId, org, user, delayModule, model);
+					if (!string.IsNullOrEmpty(pgDelayWorkflowSql))
+					{
+						pgDelaySql += pgDelayWorkflowSql;
+					}
 				}
 			}
-			return pgDelaySql += ";";
+			return pgDelaySql;
 		}
 	}
 }

+ 7 - 5
Joint/Order.cs

@@ -56,7 +56,8 @@ namespace DataTransmission.Joint
 			}
 			#region CrEnt
 			var order = new Entity.Order();
-			order.InitId();
+			//order.InitId();
+			order.Id = orderId;
 			order.CallId = row["FSH_SessionID"].ToString();
 			order.FromPhone = row["FSH_FromTel"].ToString();
 			order.TransferPhone = row["FSH_HotlineNum"].ToString();
@@ -75,9 +76,9 @@ namespace DataTransmission.Joint
 			order.PushTypeCode = row["FSH_PushType"].ToString();
 			order.Content = row["受理内容"].ToString();
 			order.Status =  Enum.EOrderStatus.Visited;
-			order.StartTime = Convert.ToDateTime(row["FSH_AddDate"]) ;
-			order.ExpiredTime = Convert.ToDateTime(row["FSH_TTime"])   ;
-			order.FiledTime = Convert.ToDateTime(row["FSH_DisposeDate"])  ;
+			order.StartTime = string.IsNullOrEmpty(row["FSH_AddDate"].ToString()) ? "NULL" : Convert.ToDateTime(row["FSH_AddDate"]).ToString() ;
+			order.ExpiredTime = string.IsNullOrEmpty(row["FSH_TTime"].ToString()) ? "NULL" : Convert.ToDateTime(row["FSH_TTime"]).ToString();
+			order.FiledTime = string.IsNullOrEmpty(row["FSH_DisposeDate"].ToString()) ? "NULL" : Convert.ToDateTime(row["FSH_DisposeDate"]).ToString();
 			order.ExpiredStatus =  (Enum.EExpiredStatus)ExpiredStatus;
 			order.AreaCode = row["SA_AreaCode"].ToString();
 			order.Street = row["FLM_LKAddress"].ToString();
@@ -115,7 +116,7 @@ namespace DataTransmission.Joint
 			order.TimeLimitCount = int.Parse(row["FTRB_TLimits"].ToString());
 			order.TimeLimit = order.TimeLimitCount + "个工作日";
 			order.AcceptTypeCode = GetAcceptTypeCode(row["FSH_PurTypeName"].ToString());
-			order.NearlyExpiredTime = Convert.ToDateTime(row["FSH_EightyTTime"]) ;
+			order.NearlyExpiredTime = string.IsNullOrEmpty(row["FSH_EightyTTime"].ToString()) ? "NULL" : row["FSH_EightyTTime"].ToString() ;
 			order.Password = row["FED_ReultPWD"].ToString();
 			order.ProvinceNo = row["FSH_ProCode"].ToString();
 			order.IsUrgent = row["FSH_Urgent"].ToString() == "1";
@@ -158,6 +159,7 @@ namespace DataTransmission.Joint
 						'{Form1.Name}','0','t','f','f','{order.IsUrgent.ToString()}','f',
 						'19', '{order.NearlyExpiredTime.ToString()}', '[]', '[]', '[]', '[]',
 						'f','f','f','f','f','{order.OldOrderId}');";
+			pgOrderSql = pgOrderSql.Replace("'NULL'", "NULL");
 			return pgOrderSql;
 		}
 

+ 1 - 1
Joint/Public.cs

@@ -29,7 +29,7 @@ namespace DataTransmission.Joint
 				var item = data.Rows[0];
 				//Creator
 				var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FPLT_PubUserID"].ToString());
-				var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
+				var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<string?>("Id").ToString() == creator["OrgId"].ToString());
 
 				var model = new Entity.OrderPublish();
 				model.InitId();

+ 2 - 2
Joint/Visit.cs

@@ -46,7 +46,7 @@ namespace DataTransmission.Joint
 					}
 
 					var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FALT_InsertUserID"].ToString());
-					var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
+					var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<string?>("Id").ToString() == creator["OrgId"].ToString());
 
 					visit.Id = VisitId;
 					visit.No = row["FSH_Code"].ToString().Trim();
@@ -75,7 +75,7 @@ namespace DataTransmission.Joint
 							""CreatorOrgLevel"", ""IsCanHandle"", ""CallId"", ""IsCanAiVisit"", ""FirstVisitTime"", ""LastVisitTime"",""AiVisitCount"") VALUES (
 							'{visit.Id}', '{visit.No}', '{visit.OrderId}', 30, 10, '{visit.PublishTime.ToString()}', '{visit.EmployeeId}', 't', '{visit.VisitTime}', '{visit.CreationTime}', '{visit.CreatorOrgId}',
 							'{visit.CreatorId}', '{visit.AreaId}', '{{""Key"":""{GetSatisfaction(item["FALT_AppTypeName"].ToString())}"",""Value"":""{item["FALT_AppTypeName"]}""}}',0, '{visit.CreatorOrgName}', '{visit.CreatorName}',
-							{visit.CreatorOrgLevel}, 'f', NULL, 'f', NULL, NULL, 0);";
+							{visit.CreatorOrgLevel}, 'f', NULL, 'f', '{visit.VisitTime}', '{visit.VisitTime}', 0);";
 					//var seatsDetailId = SequentialGuidGenerator.Instance.Create().ToString("D");
 					
 					Entity.OrderVisitDetail seatDetail = new Entity.OrderVisitDetail();

+ 25 - 17
Joint/Workflow.cs

@@ -42,14 +42,13 @@ namespace DataTransmission.Joint
 
 			//Creator
 			var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == stStep["FTRB_MoveUserID"].ToString());
-			var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
+			var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<string?>("Id").ToString() == creator["OrgId"].ToString());
 
 			workflow.EndTime = DateTime.Parse(endStep["FTRB_DisposeDate"].ToString());
 			workflow.ActualHandleStepCode = "";
 			workflow.ActualHandleStepName = "";
 			workflow.ActualHandleStepId = actualStep["FSH_RunID"].ToString();
 			workflow.ActualOpinion = actualStep["FTRB_RRemark"].ToString();
-			workflow.ExternalId = row["FSH_FlowID"].ToString();
 			workflow.CreationTime = DateTime.Parse(stStep["FSH_AddDate"].ToString());
 			if (creator != null)
 			{
@@ -68,10 +67,13 @@ namespace DataTransmission.Joint
 			{
 				workflow.FlowType =  EFlowType.Handle;
 				workflow.ReviewResult =  EReviewResult.Unknown;
+				workflow.ExternalId = row["FSH_FlowID"].ToString();
 			}
-			else {
+			else if (workflow.ModuleCode == "OrderDelay")
+			{
 				workflow.FlowType =  EFlowType.Handle;
 				workflow.ReviewResult =  delay.DelayState == EDelayState.Pass ? EReviewResult.Approval : delay.DelayState == EDelayState.NoPass ? EReviewResult.Failed : EReviewResult.Unknown ;
+				workflow.ExternalId = delay.Id;
 			}
 
 			var order = 1;
@@ -92,7 +94,7 @@ namespace DataTransmission.Joint
 				'{workflow.CreatorId}', '{workflow.CreatorName}', '{workflow.CreatorOrgId}', '{workflow.CreatorOrgName}', {workflow.CreatorOrgLevel}, '{workflow.AreaId}', {(int)workflow.FlowType}, {(int)workflow.ReviewResult});";
 
 			
-			return pgSql;
+			return pgSql + sql;
 		}
 
 		/// <summary>
@@ -113,11 +115,11 @@ namespace DataTransmission.Joint
 
 			//Handler
 			var handler = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FTRB_UserID"].ToString());
-			var handlerOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == handler["OrgId"].ToString());
+			var handlerOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<string?>("Id").ToString() == handler["OrgId"].ToString());
 
 			//Creator
 			var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FTRB_MoveUserID"].ToString());
-			var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
+			var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<string?>("Id").ToString() == creator["OrgId"].ToString());
 
 
 			var step = new Entity.WorkflowStep();
@@ -136,7 +138,8 @@ namespace DataTransmission.Joint
 				step.AcceptorOrgAreaCode = acceptorOrg["AreaCode"].ToString();
 				step.AcceptorOrgAreaName = acceptorOrg["AreaName"].ToString();
 			}
-			step.AcceptTime = string.IsNullOrEmpty(item["FTRB_APDate"].ToString()) ? null : DateTime.Parse(item["FTRB_APDate"].ToString());
+			step.AcceptTime =string.IsNullOrEmpty(item["FTRB_APDate"].ToString()) ? "NULL" : item["FTRB_APDate"].ToString();
+			//var AcceptTime = step.AcceptTime.HasValue ? "'" + step.AcceptTime.ToString() + "'" : step.AcceptTime;
 			step.HandlerId = item["FTRB_UserID"].ToString();
 			if (handler != null)
 			{
@@ -151,15 +154,15 @@ namespace DataTransmission.Joint
 				step.HandlerOrgAreaName = handlerOrg["AreaName"].ToString();
 				step.HandlerOrgIsCenter =bool.Parse(handlerOrg["IsCenter"].ToString());
 			}
-			step.HandleTime = DateTime.Parse(item["FTRB_DisposeDate"].ToString());
+			step.HandleTime = string.IsNullOrEmpty(item["FTRB_DisposeDate"].ToString())  ? "NULL" : item["FTRB_DisposeDate"].ToString();
 			step.Name = item["FTRB_ItemName"].ToString();
 			step.StepType = start ? Enum.EStepType.Start : end ? Enum.EStepType.End : Enum.EStepType.Normal;
 			step.BusinessType = item["FTRB_ItemName"].ToString().Contains("话务") ? EBusinessType.Seat : item["FTRB_ItemName"].ToString().Contains("派单") ? EBusinessType.Send :
 				item["FTRB_ItemName"].ToString().Contains("结束") || item["FTRB_ItemName"].ToString().Contains("发布") || item["FTRB_ItemName"].ToString().Contains("回访") ? EBusinessType.File : EBusinessType.Department;
 
 			step.Opinion = item["FTRB_RRemark"].ToString();
-			step.StepExpiredTime = DateTime.Parse(item["FTRB_TTime"].ToString());
-			step.CreationTime = DateTime.Parse(item["FTRB_MoveDate"].ToString());
+			step.StepExpiredTime = string.IsNullOrEmpty(item["FTRB_TTime"].ToString())  ? "NULL" : item["FTRB_TTime"].ToString();
+			step.CreationTime = Convert.ToDateTime(item["FTRB_MoveDate"]) ;
 			step.CreatorId = item["FTRB_MoveUserID"].ToString();
 			if (creator != null )
 			{
@@ -180,19 +183,22 @@ namespace DataTransmission.Joint
 			var stepSql = $@"INSERT INTO ""public"".""workflow_step"" (
 			""Id"", ""NextSteps"", ""PrevStepId"", ""PrevStepCode"", ""IsMain"", ""Status"", ""IsOrigin"", ""CountersignId"",""CountersignPosition"", 
 			""IsStartedCountersignEnd"", ""StartCountersignId"", ""IsCountersignEndStep"", ""CountersignStartStepId"", ""WorkflowId"", ""FlowAssignType"", ""Handlers"", ""PrevChosenStepCode"",
-			""AcceptorId"", ""AcceptorName"", ""AcceptorOrgId"", ""AcceptorOrgName"", ""AcceptorOrgAreaCode"", ""AcceptorOrgAreaName"", ""AcceptTime"", ""HandlerId"", ""HandlerName"", ""HandlerOrgId"", 
+			""AcceptorId"", ""AcceptorName"", ""AcceptorOrgId"", ""AcceptorOrgName"", ""AcceptorOrgAreaCode"", ""AcceptorOrgAreaName"",
+			""AcceptTime"", ""HandlerId"", ""HandlerName"", ""HandlerOrgId"", 
 			""HandlerOrgIsCenter"", ""HandlerOrgName"", ""HandlerOrgAreaCode"", ""HandlerOrgAreaName"", ""HandleTime"", ""Name"", ""Code"", ""StepType"", 
 			""BusinessType"", ""HandlerType"", ""CanReject"",""ExecuteMode"", ""CanStartCountersign"",  ""NextHandlers"", ""BackToCountersignEnd"", ""IsSms"", ""Opinion"", ""StepExpiredTime"",
 			""IsStartCountersign"", ""CreationTime"", ""CreatorId"", ""CreatorName"", ""CreatorOrgId"", ""CreatorOrgName"", ""CreatorOrgLevel"", ""AreaId"", ""FlowDirection"", ""FileJson"", 
-			""IsActualHandled"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""ExpiredStatus"", ""CountersignSteps"", ""ExternalId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"") 
+			""IsActualHandled"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""ExpiredStatus"", ""CountersignSteps"", ""ExternalId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"",""InstanceMode"") 
 			VALUES ('{step.Id}', '[]', '{step.PrevStepId}', '{step.PrevStepCode}', 'f', 2, 'f', NULL, 0,
 			'f', NULL, 'f', NULL, '{workflow.Id}', 1, '[]', NULL,
-			'{step.AcceptorId}', '{step.AcceptorName}', '{step.AcceptorOrgId}', '{step.AcceptorOrgName}', '{step.AcceptorOrgAreaCode}', '{step.AcceptorOrgAreaName}', '{step.AcceptTime.ToString()}', '{step.HandlerId}', '{step.HandlerName}', '{step.HandlerOrgId}',
+			'{step.AcceptorId}', '{step.AcceptorName}', '{step.AcceptorOrgId}', '{step.AcceptorOrgName}', '{step.AcceptorOrgAreaCode}', '{step.AcceptorOrgAreaName}',
+			'{step.AcceptTime.ToString()}', '{step.HandlerId}', '{step.HandlerName}', '{step.HandlerOrgId}',
 			'{step.HandlerOrgIsCenter.ToString()}', '{step.HandlerOrgName}', '{step.HandlerOrgAreaCode}', '{step.HandlerOrgAreaName}', '{step.HandleTime.ToString()}', '{step.Name}', '', {(int)step.StepType},
 			{(int)step.BusinessType}, 3, 'f', 0, 'f', '[]', 'f', 'f', '{step.Opinion}', '{step.StepExpiredTime.ToString()}',
 			'f', '{step.CreationTime.ToString()}', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', {step.CreatorOrgLevel}, '{step.AreaId}', NULL, NULL, 
-			'f', '{workflow.ModuleId}', '{workflow.ModuleName}', '{workflow.ModuleCode}', 0, '[]', '{step.ExternalId}',  '', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', 0, 0);";
+			'f', '{workflow.ModuleId}', '{workflow.ModuleName}', '{workflow.ModuleCode}', 0, '[]', '{step.ExternalId}',  '', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', 0, 0,0);";
 
+			stepSql = stepSql.Replace("'NULL'", "NULL");
 			var traceSql = GetWorkflowTraceSql(item, step, org, user, start, end, ref workflow);
 			return stepSql + traceSql;
 		}
@@ -219,15 +225,17 @@ namespace DataTransmission.Joint
 			""IsStartCountersign"", ""CreationTime"", ""CreatorId"", ""CreatorName"", ""CreatorOrgId"", ""CreatorOrgName"", ""CreatorOrgLevel"", ""AreaId"", ""FlowDirection"", ""FileJson"",
 			""IsActualHandled"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""ExpiredStatus"", ""ExternalId"", ""TraceType"", ""NextSteps"", ""PrevStepId"", ""PrevStepCode"", ""IsMain"", ""IsOrigin"", ""CountersignId"",
 			""CountersignPosition"", ""CountersignSteps"", ""StartCountersignId"", ""IsStartedCountersignEnd"", ""IsCountersignEndStep"", ""CountersignStartStepId"", ""SendHandleTimes"", ""RoleId"", ""RoleName"", ""TraceState"", 
-			""Remark"", ""TraceStyle"", ""OrderPublishId"", ""OrderVisitId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"") 
-			VALUES ('{trace}', '{step}', 2, NULL, '{workflow.Id}', 1, '[]', NULL, '{step.AcceptorId}', '{step.AcceptorName}',
+			""Remark"", ""TraceStyle"", ""OrderPublishId"", ""OrderVisitId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"",""InstanceMode"") 
+			VALUES ('{trace.Id}', '{step.Id}', 2, NULL, '{workflow.Id}', 1, '[]', NULL, '{step.AcceptorId}', '{step.AcceptorName}',
 			'{step.AcceptorOrgId}', '{step.AcceptorOrgName}', '{step.AcceptorOrgAreaCode}', '{step.AcceptorOrgAreaName}', '{step.AcceptTime.ToString()}', '{step.HandlerId}', '{step.HandlerName}', '{step.HandlerOrgId}',
 			'{step.HandlerOrgIsCenter.ToString()}', '{step.HandlerOrgName}', '{step.HandlerOrgAreaCode}', '{step.HandlerOrgAreaName}', '{step.HandleTime.ToString()}', '{step.Name}', '', {(int)step.StepType}, {(int)step.BusinessType},
 			3, 'f', 0, 'f',  '[]',  'f', 'f', '{step.Opinion}', '{step.StepExpiredTime.ToString()}',
 			'f', '{step.CreationTime.ToString()}', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', {step.CreatorOrgLevel}, '{step.AreaId}', NULL, '[]',
 			'f', '{workflow.ModuleId}', '{workflow.ModuleName}', '{workflow.ModuleCode}', 0, '{step.ExternalId}', 1, '[]', '{step.PrevStepId}', NULL, 'f', 'f', '',
 			0, '[]', NULL, 'f', 'f', '', 0, NULL, NULL, 0,
-			NULL, 0, NULL, NULL, NULL, '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', NULL, 0);";
+			NULL, 0, NULL, NULL, NULL, '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', NULL, 0,0);";
+
+			traceSql = traceSql.Replace("'NULL'", "NULL");
 			return traceSql;
 		}
 	}