private static void cacheDocInfo(K3DataParaInfo docInfo, K3InterceptConfig busiConfig) { try { using (SqlConnection sqlconn = new SqlConnection(@"context connection=true")) { sqlconn.Open(); using (SqlCommand sqlcommCache = new SqlCommand("zz_pr_X9WebSrvBackup_Save", sqlconn)) { sqlcommCache.CommandType = CommandType.StoredProcedure; string strDocInfo = XmlSerialize <K3DataParaInfo>(docInfo, Encoding.Unicode); SqlParameter sqlparamDocInfo = new SqlParameter("@DocInfo", SqlDbType.Xml); sqlparamDocInfo.Value = strDocInfo; SqlParameter sqlparamUrl = new SqlParameter("@Url", SqlDbType.NVarChar); sqlparamUrl.Value = string.Format("http://{0}", busiConfig.ServiceAddress); sqlcommCache.Parameters.Add(sqlparamDocInfo); sqlcommCache.Parameters.Add(sqlparamUrl); sqlcommCache.ExecuteNonQuery(); } } infoLogger(docInfo, string.Format("X9系统服务调用异常,事件{0}数据被缓存。", docInfo.EventName)); } catch (Exception ex) { //throw new RankException(string.Format("暂存DocInfo存储异常:{0}", string.Empty), ex); //MessageBox.Show(string.Format("{0}\t暂存DocInfo存储异常:{1}", Environment.NewLine, ex.Message)); infoLogger(docInfo, string.Format("暂存DocInfo存储异常:{0}", ex.Message)); throw new Exception(string.Format("{0}\t暂存DocInfo存储异常:{1}", Environment.NewLine, ex.Message), ex); } }
public static K3InterceptConfig validateBusinessEnable(K3DataParaInfo docInfo) { SqlPipe pipe = SqlContext.Pipe; K3InterceptConfig busiConfig = null; string strViewXml = string.Empty; using (SqlConnection sqlconn = new SqlConnection(@"context connection=true")) { sqlconn.Open(); using (SqlCommand sqlcommPOView = new SqlCommand("zz_pr_BusiConfigSingle_View", sqlconn)) { sqlcommPOView.CommandType = CommandType.StoredProcedure; SqlParameter sqlparaResult = new SqlParameter("@Infos", SqlDbType.Xml, 5000); sqlparaResult.Direction = ParameterDirection.Output; SqlParameter sqlparaDocInfo = new SqlParameter("@DocInfo", SqlDbType.Xml); sqlparaDocInfo.Direction = ParameterDirection.Input; sqlparaDocInfo.Value = XmlSerialize <K3DataParaInfo>(docInfo, Encoding.Unicode); sqlcommPOView.Parameters.Add(sqlparaDocInfo); sqlcommPOView.Parameters.Add(sqlparaResult); sqlcommPOView.ExecuteNonQuery(); strViewXml = sqlparaResult.Value.ToString(); busiConfig = XmlDeserialize <K3InterceptConfig>(strViewXml, Encoding.UTF8); } } return(busiConfig);; }
/// <summary> /// 所单据表头增加了“是否进X9”字段,并在zz_t_K3InterceptConfig配置表设置好对应字段则会进行过滤调用。 /// </summary> /// <param name="itemConfig"></param> /// <param name="docInfo"></param> /// <returns></returns> internal static bool isCalledFilter(K3InterceptConfig itemConfig, K3DataParaInfo docInfo) { bool bRlt = true; if (itemConfig == null || string.IsNullOrEmpty(itemConfig.ConditionTable) || string.IsNullOrEmpty(itemConfig.ConditionField) || string.IsNullOrEmpty(itemConfig.KeyField)) { return(bRlt); } using (SqlConnection sqlconn = new SqlConnection(@"context connection=true")) { sqlconn.Open(); using (SqlCommand sqlcommExists = new SqlCommand(string.Format("select 1 from sys.columns where [object_id] = object_id('{0}') and name = '{1}'", itemConfig.ConditionTable, itemConfig.ConditionField), sqlconn)) { Object objIsExists = sqlcommExists.ExecuteScalar(); if (objIsExists == null || Convert.ToInt32(objIsExists.ToString()) != 1) { return(bRlt); } } using (SqlCommand sqlcommKeyExists = new SqlCommand(string.Format("select 1 from sys.columns where [object_id] = object_id('{0}') and name = '{1}'", itemConfig.ConditionTable, itemConfig.KeyField), sqlconn)) { Object objIsExists = sqlcommKeyExists.ExecuteScalar(); if (objIsExists == null || Convert.ToInt32(objIsExists.ToString()) != 1) { return(bRlt); } } string strExcludedValue = "N"; if (!string.IsNullOrEmpty(itemConfig.ExcludedValue)) { strExcludedValue = itemConfig.ExcludedValue; } using (SqlCommand sqlcommCondition = new SqlCommand(string.Format("select isnull({1},'1') from {0} where {2} = {3}", itemConfig.ConditionTable, itemConfig.ConditionField, itemConfig.KeyField, docInfo.InterID.ToString()), sqlconn)) { Object objValue = sqlcommCondition.ExecuteScalar(); if (objValue == null) { return(bRlt); } else { if (string.Equals(strExcludedValue, objValue.ToString(), StringComparison.OrdinalIgnoreCase)) { bRlt = false; } } } } return(bRlt); }
//基础缺省处理事件方法。 private static bool basicHandle(K3DataParaInfo docInfo) { SqlPipe pipe = SqlContext.Pipe; bool bRlt = true; try { //WriteInfoToLogFile(string.Format("进入基类{0}事件响应", docInfo.EventName), LOG_TYPE.LOG_DEBUG); debugLogger(docInfo, string.Format("进入基类{0}事件响应", docInfo.EventName)); K3InterceptConfig itemConfig = validateBusinessEnable(docInfo); //K3InterceptConfig itemConfig = new K3InterceptConfig() //{ // ServiceAddress = "192.168.1.100/WebService/WebService.asmx", // X9BusinessType = 5, // InterceptEvent = "ClosedBefore", // IsEnable = 1, //}; if (itemConfig != null) { if (!isCalledFilter(itemConfig, docInfo)) { infoLogger(docInfo, string.Format("X9系统业务校验事件{0}服务,单据【{1}]表头标记为“不进入X9系统”。", docInfo.EventName, docInfo.InterID.ToString())); return(true);//直接返回,不再调用X9服务。 } ResultInfo rltInfo = defaultServiceHandle(docInfo, itemConfig); if (rltInfo != null) { if (docInfo.EventName.IndexOf("After", 0, StringComparison.OrdinalIgnoreCase) > 0) { bRlt = true; } else { bRlt = rltInfo.IsSuccess;//(2019-8-17取消)2019-8-13 改为:不管X9服务认定是否通过,都不再中断K3动作。 } infoLogger(docInfo, string.Format("X9系统业务校验事件{0}服务,返回结果为{1}。", docInfo.EventName, bRlt.ToString())); } } else { infoLogger(docInfo, string.Format("未启用X9系统对K3事件{0}的拦截", docInfo.EventName)); } } catch (Exception ex) { pipe.Send(ex.Message); infoLogger(docInfo, string.Format("执行基类缺省拦截处理:{0}事件。异常:{1}", docInfo.EventName, ex.Message)); bRlt = false; } return(bRlt); }
private static ResultInfo defaultServiceHandle(K3DataParaInfo docInfo, K3InterceptConfig busiConfig) { SqlPipe pipe = SqlContext.Pipe; try { string strRlt = string.Empty; debugLogger(docInfo, string.Format("进入X9系统业务校验事件{0}服务中", docInfo.EventName)); //WindowsIdentity windowsIdentity = null; //WindowsImpersonationContext userImpersonated = null; //windowsIdentity = SqlContext.WindowsIdentity; //// Switch the context to local service account user (a domain user) //// by getting its identity in order to call the web service //userImpersonated = windowsIdentity.Impersonate(); //if (userImpersonated != null) //{ // // Create the instance of a web service to be called. // Remember this is not actual // CAAT search web service but a similar fake web service just for testing. // pipe.Send("create service"); // X9WebService.WebService svValidateBM = new X9WebService.WebService(); // pipe.Send("end service"); // svValidateBM.Url = string.Format("http://{0}", busiConfig.ServiceAddress); // string strDocInfo = SimpleConfig.XmlSerialize<K3DataParaInfo>(docInfo, Encoding.Unicode); // pipe.Send(strDocInfo); // // Execute the web service and get the IEnumerable type results // strRlt = svValidateBM.SynchBillFromK3ToX9(strDocInfo); // // Switch the context back to the SQL Server // userImpersonated.Undo(); //} //else //{ // pipe.Send("userImpersonated is null"); //} X9WebService.WebService svValidateBM = new X9WebService.WebService(); svValidateBM.Url = string.Format("http://{0}", busiConfig.ServiceAddress); string strDocInfo = XmlSerialize <K3DataParaInfo>(docInfo, Encoding.Unicode); pipe.Send(strDocInfo); //string strHttpEncoding = HttpUtility.HtmlEncode(strDocInfo); strRlt = svValidateBM.SynchBillFromK3ToX9(strDocInfo); if (!string.IsNullOrEmpty(strRlt)) { pipe.Send(strRlt); //strRlt = strRlt.Replace(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", ""); //string strHttpDecoding = HttpUtility.HtmlDecode(strRlt); ResultInfo rltInfo = XmlDeserialize <ResultInfo>(strRlt, Encoding.Unicode); //(2019-8-17取消) //if (!rltInfo.IsSuccess) //{ // StringBuilder strbError = new StringBuilder(); // foreach (var item in rltInfo.Errors) // { // if (!String.IsNullOrEmpty(item.ErrorText)) // { // strbError.AppendLine(item.ErrorText); // } // } // docInfo.Data = strbError.ToString(); // cacheDocInfo(docInfo, busiConfig); //} return(rltInfo); } else { docInfo.Data = "X9服务未开启或执行返回为空字符"; cacheDocInfo(docInfo, busiConfig); } return(null); } catch (Exception ex) { //LogInfoHelp.infoLog(eventName, docInfo, string.Format("调用X9系统服务时,异常:{0}", ex.Message)); infoLogger(docInfo, string.Format("调用X9系统服务时,异常:{0}", ex.Message)); docInfo.Data = ex.Message; cacheDocInfo(docInfo, busiConfig); return(null); } }