diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AssemblyInfo.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AssemblyInfo.cs new file mode 100644 index 0000000..a73c3e0 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// 一般的組件資訊是由下列這組屬性所控制。 +// 變更這些屬性的值即可修改組件的相關資訊。 +// 檢閱組件屬性的值 + +[assembly: AssemblyTitle("AutoRunLib")] +[assembly: AssemblyDescription("AutoRunLib for MESSeries")] +[assembly: AssemblyCompany("iMES Technology Inc.")] +[assembly: AssemblyProduct("MESSeries 6")] +[assembly: AssemblyCopyright("Copyright © iMES Technology Inc.")] +[assembly: AssemblyTrademark("")] +[assembly: ComVisible(true)] + +// 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID +[assembly: Guid("C4620590-2AB6-4D4D-8D66-A8D689DA698C")] + +// 組件的版本資訊由下列四個值所組成: +// +// 主要版本 +// 次要版本 +// 組建編號 +// 修訂 +// +// 您可以自行指定所有的值,也可以依照以下的方式,使用 '*' 將修訂和組建編號 +// 指定為預設值: + +[assembly: AssemblyVersion("6.0.0.0")] diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj new file mode 100644 index 0000000..92ce32b --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj @@ -0,0 +1,380 @@ + + + + Local + 8.0.50727 + 2.0 + {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A} + SAK + SAK + SAK + SAK + Debug + AnyCPU + + + + + AutoRunLib + + + None + JScript + Grid + IE50 + false + Library + Binary + On + Off + AutoRunLib + + + true + false + true + + + Windows + + + false + v4.6.2 + 2.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + $(DefaultItemExcludes);$(ProjectDir)**\*.vb + + + ..\..\..\MES_C_DLL\ + ..\..\..\MES_C_DLL\AutoRunLib.xml + 285212672 + + + + + true + true + true + false + false + false + false + 0 + 42016,42017,42018,42019,42032,42353,42354,42355 + full + AllRules.ruleset + false + + + ..\..\..\MES_C_DLL\ + ..\..\..\MES_C_DLL\ + + 285212672 + + + + + false + true + false + true + false + false + false + 0 + 42016,42017,42018,42019,42032,42353,42354,42355 + none + AllRules.ruleset + false + + + true + true + true + ..\..\..\MES_C_DLL\ + 285212672 + 0 + 42016,42017,42018,42019,42032,42353,42354,42355 + full + x86 + ..\..\..\MES_C_DLL\AutoRunLib.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + AllRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + false + + + true + bin\x86\Release\ + 285212672 + true + 0 + 42016,42017,42018,42019,42032,42353,42354,42355 + x86 + ..\..\..\MES_C_DLL\AutoRunLib.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + AllRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + false + false + + + + False + ..\..\..\MES_S_DLL\data_access_service.dll + False + + + False + ..\..\..\MES_S_DLL\iMESAppSetting.dll + False + + + ..\..\..\MES_S_DLL\iMESChart_HtmlHandler.dll + False + + + ..\..\..\MES_S_DLL\iMESComInvoke.dll + False + + + ..\..\..\MES_S_DLL\iMESComSubroutine.dll + False + + + ..\..\..\MES_S_DLL\iMESComXML.dll + False + + + ..\..\..\MES_S_DLL\iMESConst.dll + False + + + False + ..\..\..\MES_C_DLL\Ionic.Zip.dll + False + + + + False + ..\..\..\MES_S_DLL\GuardServerProvider.dll + False + + + False + ..\..\..\MES_S_DLL\iMESCIO.dll + False + + + ..\..\..\MES_S_DLL\iMESDAO.dll + False + + + ..\..\..\MES_S_DLL\iMESDataObject.dll + False + + + ..\..\..\MES_S_DLL\iMESProjectBase.dll + False + + + False + ..\..\..\MES_C_DLL\NPOI.dll + False + + + False + ..\..\..\MES_C_DLL\NPOI.OOXML.dll + False + + + False + ..\..\..\MES_C_DLL\NPOI.OpenXml4Net.dll + False + + + False + ..\..\..\MES_C_DLL\NPOI.OpenXmlFormats.dll + False + + + False + ..\..\..\MES_S_DLL\Oracle.ManagedDataAccess.dll + False + + + System + + + + System.Data + + + + + + System.Web.Services + + + + System.XML + + + + + + + + + + + + + + + + True + True + Reference.map + + + + AutoRunLib.My + SettingsSingleFileGenerator + Settings.Designer.cs + + + MSDiscoCodeGenerator + Reference.cs + + + + MSDiscoCodeGenerator + Reference.cs + + + + Code + + + Code + + + Code + + + Code + + + True + True + Settings.settings + + + True + True + Reference.map + + + True + True + Reference.map + + + MSDiscoCodeGenerator + Reference.cs + + + + Dynamic + Web References\wsERP_WorkFlow\ + http://10.40.30.73/WFMES/WFMESService.asmx + + + + + MySettings + AutoRunLib_wsERP_WorkFlow_WFMESService + + + Dynamic + Web References\wsERP_TP\ + http://localhost/ERPws_DSC/TIPTOPServiceGateWay.wsdl + + + + + MySettings + AutoRunLib_wsERP_TP_TIPTOPServiceGateWay + + + Dynamic + Web References\wsERP_TP_RPC\ + http://localhost/ERPws_DSC/TIPTOPServiceGateWay_RPC.wsdl + + + + + MySettings + AutoRunLib_wsERP_TP_RPC_TIPTOPServiceGateWay + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj.vspscc b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/AutoRunLib.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/EAIMessageSynchronizer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/EAIMessageSynchronizer.cs new file mode 100644 index 0000000..8ef9a07 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/EAIMessageSynchronizer.cs @@ -0,0 +1,658 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using iMESCIO.CDO.Tables; +using iMESCIO.SCI.DPM.Request; +using iMESCIO.SCI.DPM.Response; +using iMESCIO.SCI.ERP.Request; +using iMESCIO.SCI.ERP.Response; +using iMESCIO.SCI.SMES.Request; +using iMESCIO.SCI.SMES.Response; +using iMESCore.Base.ProjectBase.Base; +using iMESCore.Settings; +using MESDAO.Tables; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; +using static iMESCore.DataBase.iMESSql; +using static iMESCore.Base.iMESComSubroutine; + +namespace AutoRunLib +{ + + public class EAIMessageSynchronizer + { + + public enum WorkCode + { + ContinueRun = 0, // 繼續執行作業 + StopSame = 1, // 停止相同的作業 + StopAll = 2 // 停止所有作業 + } + + private string strDataBaseType; // DataBase Type:oracle, mysql, access + private string strConnectionString; // Connection string + private string strReportDataBaseType; + private string strReportConnectionString; // Report DB Connection string + private string strERPconnectionString; + private string strERPDataBaseType; + private string strERPReportConnectionString; + private string InXML, OutXML; + private string RequestKey = ""; + private AppSettings objSetting = new AppSettings(); + private string strLanguageMode = "zh-cht"; + private string strResourceDir = "Resources"; + + // //Initial Object-------------------------------------------------------------------------------------------------------------------------------- + public EAIMessageSynchronizer() + { + // //Get database type + strDataBaseType = objSetting.GetDataBaseType(); + // //Get connection string + strConnectionString = objSetting.GetConnectionString(strDataBaseType); + // //Get Message Queue Type + // strMQType = objSetting.GetMQType() + + strReportDataBaseType = objSetting.GetReportDataBaseType(); + // //Get connection string + strReportConnectionString = objSetting.GetReportConnectionString(strReportDataBaseType); + + // ERP + // //Get ERP database type + strERPDataBaseType = objSetting.GetDataBaseType_ERP(); + // //Get ERP connection string + strERPconnectionString = objSetting.GetConnectionString_ERP(strERPDataBaseType); + + try + { + strResourceDir = objSetting["ResourceDir"].ToString(); + } + catch (Exception) + { } + try + { + strLanguageMode = objSetting["LanguageMode"].ToString(); + } + catch (Exception) + { } + + // 'T100 整合項目增加, 取得 Web.Config 設定項目, 2015/12/15 Add. + + // Try + // '從Web.config取出目前的DatabaseType + // strERPCreator = System.Configuration.ConfigurationSettings.AppSettings.Get("defCreator") + // '2016-03-09, Joe, 取出預設ERP單位屬性編號 + // strERPUnitNo = System.Configuration.ConfigurationSettings.AppSettings.Get("defERPUnitNoProperty") + // '2016-03-02, Joe, 取出預設語系並轉換成ERP對應語系,後續T100多語系資料需用到 + // strDefLanguage = System.Configuration.ConfigurationSettings.AppSettings.Get("LanguageMode") + // Select Case strDefLanguage.ToUpper + // Case "ZH-CHS" + // strLanguage_T100 = "zh_CN" + // Case "EN" + // strLanguage_T100 = "en_US" + // Case Else + // strLanguage_T100 = "zh_TW" + // End Select + // Catch ex As Exception + // '發生錯誤時丟回本身的Function Name及系統錯誤訊息 + // End Try + + + } + + + // //Property-------------------------------------------------------------------------------------------------------------------------------- + public string ConnectionString + { + get + { + return strConnectionString; + } + } + + public string DataBaseType + { + get + { + return strDataBaseType; + } + } + + public void StartSyncing(Collection colParameters = null) + { + var StopRunList = new List(); + var objERPSetting = new List(); + var objQueue = new List(); + string Parameter01, Parameter02; + WorkCode ReturnWorkCode; + bool bSendMail = false; + + do + { + try + { + + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + Parameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + throw new Exception(TranslateMsg("Mail GroupNo (Parameter 01) [%NOT SET%]!", strLanguageMode, strResourceDir)); + } + + // Parameter02為參數二 + // 重新拋轉上限(數值) + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + if (Information.IsNumeric(colParameters["Parameter02"]) == false) + { + throw new Exception("(Parameter 02) [%is not%] [%Numeric%]!"); + } + Parameter02 = colParameters["Parameter02"].ToString().Trim(); + } + else + { + throw new Exception(TranslateMsg("Limit Qty (Parameter 02) [%NOT SET%]!", strLanguageMode, strResourceDir)); + } + + // 取得ERP整合設定資訊 + objERPSetting = GetERPSetting(); + + // 取得要拋送給ERP的資訊 + objQueue = GetSendQueue(); + if (objQueue == null) + break; + + string StopData; + var SendERPSetting = new CDO_TBLSYSERPSETTING(); + bool exitTry1 = false; + foreach (CDO_TBLSYSSENDTOEAIQUEUE objQ in objQueue) + { + InXML = ""; + RequestKey = ""; + + // 找出目前要拋送的目的服務是否有在StopRunList中,如存在則不允許執行 + StopData = StopRunList.Where(x => (x ?? "") == (objQ.SENDTO ?? "")).FirstOrDefault(); + if (string.IsNullOrEmpty(StopData)) + { + // 取出要拋送的目的服務的ERP整合設定資訊 + SendERPSetting = objERPSetting.Where(x => (x.ERP_NAME ?? "") == (objQ.SENDTO ?? "")).FirstOrDefault(); + if (SendERPSetting == null) + { + // Throw New Exception("[%ERP_Name%]:" & objQ.SENDTO & "[%IS NOT FOUND%]!") + // Exit Try + continue; + } + // 組Req uest XML + InXML = CombineRequestXML(SendERPSetting, objQ); + // 將資訊拋給ERP + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = SendERPSetting.ERP_WSURL; + OutXML = ws.invokeSrv(InXML); + } + // 處理執行結果 + ReturnWorkCode = HandleSendResult(OutXML, objQ, SendERPSetting, Parameter01, Parameter02); + // 依回傳的結果判定是否繼續執行 + bool exitTry = false; + switch (ReturnWorkCode) + { + case WorkCode.ContinueRun: + { + // 繼續執行 + continue; + } + case WorkCode.StopSame: + { + // 將此次失敗的ERP名稱加到StopRunList + StopRunList.Add(objQ.SENDTO); + // 繼續執行 + continue; + } + case WorkCode.StopAll: + { + // 全部停止執行 + exitTry1 = exitTry = true; + break; + } + } + + if (exitTry) + { + break; + } + } + } + + if (exitTry1) + { + break; + } + } + + catch (Exception ex) + { + throw; + } + } + while (false); + + + } + + + /// + /// 取得ERP整合的設定資料 + /// + /// List(Of CDO_TBLSYSERPSETTING) + private List GetERPSetting() + { + + var DAO = new DAO_TBLSYSERPSETTING(); + var Data = new List(); + + try + { + // 取出ERP整合資訊 + Data = (List)DAO.Query(null, new QueryRelatedInfo() { ReturnType = ReturnMode.List }); + } + + catch (Exception ex) + { + throw; + } + + return Data; + + } + + + /// + /// 取得Queue資料 + /// + /// List(Of CDO_TBLSYSSENDTOEAIQUEUE) + private List GetSendQueue() + { + + var DAO = new DAO_TBLSYSSENDTOEAIQUEUE(); + var Data = new List(); + + try + { + + // 取出待拋轉資訊 + Data = (List)DAO.Query(null, new QueryRelatedInfo() { ReturnType = ReturnMode.List }); + } + + catch (Exception ex) + { + throw; + } + + return Data; + + } + + /// + /// 組出RequestXML + /// + /// + private string CombineRequestXML(CDO_TBLSYSERPSETTING pERPSetting, CDO_TBLSYSSENDTOEAIQUEUE pSendContent) + { + string CombineRequestXMLRet = default(string); + + DataRow[] drERPSetting; + string strFilter = ""; + + try + { + // pSendContent.enterprise_no = drERPSetting(0)("ERP_ENTID").ToString + // pSendContent.site_no = drERPSetting(0)("ERP_ORG").ToString + + // 轉XML + string RequestHead = ""; + RequestHead += ""; + string RequestDataKey = "" + pERPSetting.ERP_ENTID + "" + pERPSetting.ERP_ORG + ""; + string RequestXML_Body = pSendContent.PAYLOAD; + RequestKey = modAutoRunLibrary.GetRequestKey(RequestHead); + string RequestHeader = "" + RequestHead + RequestDataKey + "" + RequestXML_Body + ""; + // CDO to XML + CombineRequestXMLRet = RequestHeader; + } + + catch (Exception ex) + { + throw; + } + + return CombineRequestXMLRet; + + } + + /// + /// 同步結果處理 + /// + /// + private WorkCode HandleSendResult(string pEAIResult, CDO_TBLSYSSENDTOEAIQUEUE pSendSrc, CDO_TBLSYSERPSETTING pEAISetting, string pJobParam01, string pJobParam02) + { + WorkCode HandleSendResultRet = default(WorkCode); + + //IDbConnection cnnTemp = null; + //IDbCommand cmmTemp; + string strSQL; + //System.Data.OleDbDataAdapter daTemp; + var dsTemp = new DataSet(); + var objReturn = default(WorkCode); + var objEAIResult = default(object); + bool ProcessResult = false; + string ProcessMessage = ""; + + try + { + // 物件初始化 + switch (pSendSrc.SERVICENAME ?? "") + { + case "issue.wo.item.process": // MES發料 + { + objEAIResult = new SCI_Response_issue_wo_item_process(); + break; + } + case "stockin.data.create": // 完工入庫 + { + objEAIResult = new SCI_Response_stockin_data_create(); + break; + } + case "workorder.create": // DPM 拋報工單 + { + objEAIResult = new SCI_Response_workorder_create(); + break; + } + } + // 將中台回的結果轉成物件 + try + { + (objEAIResult as SCI_Response_workorder_create).ParseXmlToObject(pEAIResult); + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual((objEAIResult as SCI_Response_workorder_create).code, "0", false))) + { + ProcessResult = true; + } + else + { + ProcessMessage = Conversions.ToString((objEAIResult as SCI_Response_workorder_create).description); + } + } + catch (Exception ex) + { + ProcessMessage = OutXML; + } + // 紀錄TransactionLog + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXML, OutXML, DateTime.Now.ToString("yyyyMMddHHmmssss"), "MES", "StartSyncing", Environment.MachineName, "AutoRun", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), Conversions.ToString(Interaction.IIf(ProcessResult == Conversions.ToBoolean("0"), "success", "fail")), ProcessMessage, pSendSrc.SERVICENAME, strException: argstrException); + // 判斷中台回的結果 + if (ProcessResult) + { + // 成功 + HandleSendResultRet = WorkCode.ContinueRun; + // 處理執行成功資訊及歷程 + HandleSendSuccess(pEAIResult, pSendSrc); + } + else + { + // 失敗 + // 處理執行失敗資訊及歷程 + HandleSendFail(pEAIResult, ProcessMessage, pSendSrc, pJobParam02); + // 寄送Mail + string argFileName = "N/A"; + string argEmailSubject = "AutuRunJob : StartSyncing Fail![" + pSendSrc.SERVICENAME + "]"; + string argEmailBody = TranslateMsg("[%SENDID%]:" + pSendSrc.SENDID + " [%EXECUTE%] [%ISSUEMOMATERIAL%] [%FAIL%]! [%ERRORMESSAGE%]:", strLanguageMode, strResourceDir) + ProcessMessage; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, pJobParam01); + } + } + + catch (Exception ex) + { + throw; + } + finally + { + //CloseConnection(cnnTemp); + } + + return objReturn; + + } + + /// + /// 同步結果處理-成功 + /// + /// + private void HandleSendSuccess(string pEAIResult, CDO_TBLSYSSENDTOEAIQUEUE pSendSrc) + { + + string strSQL; + var objQueueLog = new CDO_TBLSYSSENDTOEAIQUEUE_LOG(); + var objEAIResult = new object(); + var DAO = new DAO_TBLSYSSENDTOEAIQUEUE(); + var DAO_Log = new DAO_TBLSYSSENDTOEAIQUEUE_LOG(); + + var cdoERPDocLog = new CDO_TBLSYSERPDOCUMENTLOG(); + var daoERPDocLog = new DAO_TBLSYSERPDOCUMENTLOG(); + + try + { + // 執行成功後呼叫各服務各自處理邏輯 + switch (pSendSrc.SERVICENAME ?? "") + { + case "issue.wo.item.process": // MES發料 + { + objEAIResult = new SCI_Response_issue_wo_item_process(); + // 將中台回的結果轉成物件 + try + { + (objEAIResult as SCI_Response_issue_wo_item_process).ParseXmlToObject(pEAIResult); + } + catch (Exception ex) + { + throw new Exception("[%XML FORMAT ERROR%]"); + } + + // 解析Request XML + var cdoInXML = new SCI_Request_issue_wo_item_process(); + cdoInXML.ParseXmlToObject(InXML); + + object argdaoTransaction = DAO; + AddERPDocumentLog(8, Conversions.ToString((objEAIResult as SCI_Response_issue_wo_item_process).return_no), cdoInXML.doc_no, pSendSrc, ref argdaoTransaction); + DAO = (DAO_TBLSYSSENDTOEAIQUEUE)argdaoTransaction; + break; + } + case "stockin.data.create": // 完工入庫 + { + objEAIResult = new SCI_Response_stockin_data_create(); + // 將中台回的結果轉成物件 + try + { + (objEAIResult as SCI_Response_stockin_data_create).ParseXmlToObject(pEAIResult); + } + catch (Exception ex) + { + throw new Exception("[%XML FORMAT ERROR%]"); + } + + // 解析Request XML + var cdoInXML = new SCI_Request_stockin_data_create(); + cdoInXML.ParseXmlToObject(InXML); + + object argdaoTransaction1 = DAO; + AddERPDocumentLog(4, Conversions.ToString((objEAIResult as SCI_Response_stockin_data_create).stock_in_no), cdoInXML.source_no, pSendSrc, ref argdaoTransaction1); + DAO = (DAO_TBLSYSSENDTOEAIQUEUE)argdaoTransaction1; + break; + } + + case "workorder.create": // DPM報工單 + { + objEAIResult = new SCI_Response_workorder_create(); + // 將中台回的結果轉成物件 + try + { + (objEAIResult as SCI_Response_workorder_create).ParseXmlToObject(pEAIResult); + } + catch (Exception ex) + { + throw new Exception("[%XML FORMAT ERROR%]"); + } + + // 解析Request XML + var cdoInXML = new SCI_Request_workorder_create(); + cdoInXML.ParseXmlToObject(InXML); + break; + } + } + + // 將Queue資訊搬至Log + objQueueLog.SENDID = pSendSrc.SENDID; + objQueueLog.SENDTO = pSendSrc.SENDTO; + objQueueLog.SERVICENAME = pSendSrc.SERVICENAME; + objQueueLog.SERVICEVERSION = pSendSrc.SERVICEVERSION; + objQueueLog.SENDCONTENT = pSendSrc.PAYLOAD; + objQueueLog.SENDCOUNT = pSendSrc.SENDCOUNT; + objQueueLog.RETURNINFO = Conversions.ToString(funGetParameterValue(objEAIResult, "description")); + objQueueLog.RUNRESULT = "success"; + objQueueLog.CREATOR = pSendSrc.CREATOR; + objQueueLog.CREATEDATE = pSendSrc.CREATEDATE; + // 2017-07-17, Joe, 將ERP入庫單號寫入Queue中,還原時才能與MES發料資訊做對應一起還原 + objQueueLog.RELATIONERPNO = pSendSrc.RELATIONERPNO; + objQueueLog.LOTSERIAL = pSendSrc.LOTSERIAL; + DAO_Log.Add(objQueueLog, DAO); + + // 刪除已拋轉成功的Queue + DAO.Delete(pSendSrc, DAO); + } + + catch (Exception ex) + { + throw; + } + finally + { + } + + } + + /// + /// 同步結果處理-失敗 + /// + /// + private void HandleSendFail(string pEAIResult, string pEAIMessage, CDO_TBLSYSSENDTOEAIQUEUE pSendSrc, string pJobParam02) + { + + string strSQL; + var objQueueLog = new CDO_TBLSYSSENDTOEAIQUEUE_LOG(); + var DAO = new DAO_TBLSYSSENDTOEAIQUEUE(); + var DAO_Log = new DAO_TBLSYSSENDTOEAIQUEUE_LOG(); + + try + { + // 錯誤次數加1 + pSendSrc.SENDCOUNT = pSendSrc.SENDCOUNT + 1; + pSendSrc.EXCEPTION = pEAIResult; + + // 將此筆Queue回寫DB + DAO.Update(pSendSrc, DAO); + + // 發送Mail + + // 判斷目前執行的同步次數是否已達到最大限制次數 + if (string.IsNullOrEmpty(pJobParam02) == false && Convert.ToInt32(pJobParam02) != -1 && pSendSrc.SENDCOUNT > Convert.ToInt32(pJobParam02)) + { + + // 將Queue資訊搬至Log + objQueueLog.SENDID = pSendSrc.SENDID; + objQueueLog.SENDTO = pSendSrc.SENDTO; + objQueueLog.SERVICENAME = pSendSrc.SERVICENAME; + objQueueLog.SERVICEVERSION = pSendSrc.SERVICEVERSION; + objQueueLog.SENDCONTENT = pSendSrc.PAYLOAD; + objQueueLog.SENDCOUNT = pSendSrc.SENDCOUNT; + objQueueLog.RETURNINFO = pEAIMessage; + objQueueLog.RUNRESULT = "fail"; + objQueueLog.EXCEPTION = pSendSrc.EXCEPTION; + objQueueLog.CREATOR = pSendSrc.CREATOR; + objQueueLog.CREATEDATE = pSendSrc.CREATEDATE; + // 2017-07-17, Joe, 將ERP入庫單號寫入Queue中,還原時才能與MES發料資訊做對應一起還原 + objQueueLog.RELATIONERPNO = pSendSrc.RELATIONERPNO; + DAO_Log.Add(objQueueLog, DAO); + + // 刪除已拋轉成功的Queue + DAO.Delete(pSendSrc, DAO); + + } + } + + catch (Exception ex) + { + throw; + } + finally + { + } + + } + + private object AddERPDocumentLog(int pDocType, string ERPNo, string MESNo, CDO_TBLSYSSENDTOEAIQUEUE pSendSrc, ref object daoTransaction) + { + + var cdoERPDocLog = new CDO_TBLSYSERPDOCUMENTLOG(); + var daoERPDocLog = new DAO_TBLSYSERPDOCUMENTLOG(); + + try + { + // 將資訊寫入ERP Document Log + cdoERPDocLog.TRANSID = RequestKey; + cdoERPDocLog.DOCUMENTTYPE = pDocType; // 單據類別 1:工單發料,2:工單退料,3:報工單,4:完工入庫,5:不良品入庫單,6:外包出貨單,7:外包回貨單,8:MES發料 + cdoERPDocLog.MESNO = MESNo; + cdoERPDocLog.ERPNO = ERPNo; + cdoERPDocLog.CREATEDATE = pSendSrc.CREATEDATE; + // 2017-07-17, Joe, 將ERP入庫單號寫入Queue中,還原時才能與MES發料資訊做對應一起還原 + cdoERPDocLog.RELATIONERPNO = pSendSrc.RELATIONERPNO; + cdoERPDocLog.SENDID = pSendSrc.SENDID; + daoERPDocLog.Add(cdoERPDocLog, (iMESDBBase)daoTransaction); + } + + catch (Exception ex) + { + throw; + } + + return default(Object); + } + + + /// + /// 20230207,13871,部分函式存取Object obj的成員,但此obj可能有多種型別故使用此方式取的值 + /// + /// + /// + /// + private static object funGetParameterValue(object obj, string key) + { + object result = ""; + try + { + Type t = obj.GetType(); + System.Reflection.PropertyInfo p = t.GetProperty(key); + if (p != null) + { + result = p.GetValue(obj); + } + } + catch (Exception) + { + throw; + } + + return result; + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/BuildIncrementVersionInfo.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/BuildIncrementVersionInfo.cs new file mode 100644 index 0000000..8ac3c45 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/BuildIncrementVersionInfo.cs @@ -0,0 +1,4 @@ +using COM_ERP.clsCommon; +using COM_ERP.clsWorkFlow; + +[assembly: System.Reflection.AssemblyFileVersion("6.0.7.30207")] diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.Designer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.Designer.cs new file mode 100644 index 0000000..1ef6ad2 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.Designer.cs @@ -0,0 +1,161 @@ +// ------------------------------------------------------------------------------ +// +// 這段程式碼是由工具產生的。 +// 執行階段版本:4.0.30319.42000 +// +// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, +// 變更將會遺失。 +// +// ------------------------------------------------------------------------------ + +using System.Diagnostics; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; + + +namespace AutoRunLib.My +{ + + [System.Runtime.CompilerServices.CompilerGenerated()] + [System.CodeDom.Compiler.GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)] + internal sealed partial class MySettings : System.Configuration.ApplicationSettingsBase + { + + private static MySettings defaultInstance = (MySettings)Synchronized(new MySettings()); + + #region My.Settings 自動儲存功能 + /* TODO ERROR: Skipped IfDirectiveTrivia + #If _MyType = "WindowsForms" Then + *//* TODO ERROR: Skipped DisabledTextTrivia + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub + *//* TODO ERROR: Skipped EndIfDirectiveTrivia + #End If + */ + #endregion + + public static MySettings Default + { + get + { + + /* TODO ERROR: Skipped IfDirectiveTrivia + #If _MyType = "WindowsForms" Then + *//* TODO ERROR: Skipped DisabledTextTrivia + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If + *//* TODO ERROR: Skipped EndIfDirectiveTrivia + #End If + */ + return defaultInstance; + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://10.40.40.30/gas/ws/r/aws_ttsrv2_top2o")] + public string AutoRunLib_wsERP_TP_TIPTOPServiceGateWay + { + get + { + return Conversions.ToString(this["AutoRunLib_wsERP_TP_TIPTOPServiceGateWay"]); + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://218.211.164.212:8082/ws/r/aws_ttsrv2_top3o")] + public string AutoRunLib_wsERP_TP_RPC_TIPTOPServiceGateWay + { + get + { + return Conversions.ToString(this["AutoRunLib_wsERP_TP_RPC_TIPTOPServiceGateWay"]); + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://10.40.41.197:9999/IntegrationEntry")] + public string AutoRunLib_wsERP_EAI_IntegrationEntry + { + get + { + return Conversions.ToString(this["AutoRunLib_wsERP_EAI_IntegrationEntry"]); + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://localhost/MESws_STD/wsInvoke.asmx")] + public string AutoRunLib_wsInvoke_wsInvoke + { + get + { + return Conversions.ToString(this["AutoRunLib_wsInvoke_wsInvoke"]); + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://10.40.30.73/WFMES/WFMESService.asmx")] + public string AutoRunLib_wsERP_WorkFlow_WFMESService + { + get + { + return Conversions.ToString(this["AutoRunLib_wsERP_WorkFlow_WFMESService"]); + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://localhost/605EAI/wsMES.asmx")] + public string AutoRunLib_wsERP_MES_wsMES + { + get + { + return Conversions.ToString(this["AutoRunLib_wsERP_MES_wsMES"]); + } + } + } +} + +namespace AutoRunLib.My +{ + + [HideModuleName()] + [DebuggerNonUserCode()] + [System.Runtime.CompilerServices.CompilerGenerated()] + internal static class MySettingsProperty + { + + [System.ComponentModel.Design.HelpKeyword("My.Settings")] + internal static MySettings Settings + { + get + { + return MySettings.Default; + } + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.settings b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.settings new file mode 100644 index 0000000..3dc3e20 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/My Project/Settings.settings @@ -0,0 +1,24 @@ + + + + + + http://10.40.40.30/gas/ws/r/aws_ttsrv2_top2o + + + http://218.211.164.212:8082/ws/r/aws_ttsrv2_top3o + + + http://10.40.41.197:9999/IntegrationEntry + + + http://localhost/MESws_STD/wsInvoke.asmx + + + http://10.40.30.73/WFMES/WFMESService.asmx + + + http://localhost/605EAI/wsMES.asmx + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.cs new file mode 100644 index 0000000..d051f85 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.cs @@ -0,0 +1,8996 @@ +//------------------------------------------------------------------------------ +// +// 這段程式碼是由工具產生的。 +// 執行階段版本:4.0.30319.42000 +// +// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, +// 變更將會遺失。 +// +//------------------------------------------------------------------------------ + +// +// 原始程式碼已由 Microsoft.VSDesigner 自動產生,版本 4.0.30319.42000。 +// +#pragma warning disable 1591 + +namespace AutoRunLib.wsERP_TP { + using System; + using System.Web.Services; + using System.Diagnostics; + using System.Web.Services.Protocols; + using System.Xml.Serialization; + using System.ComponentModel; + + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Web.Services.WebServiceBindingAttribute(Name="TIPTOPServiceGateWayBinding", Namespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public partial class TIPTOPServiceGateWay : System.Web.Services.Protocols.SoapHttpClientProtocol { + + private System.Threading.SendOrPostCallback CreateCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateQuotationDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetDocumentNumberOperationCompleted; + + private System.Threading.SendOrPostCallback CreateItemMasterDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateVendorDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateEmployeeDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateAddressDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountSubjectDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAxmDocumentOperationCompleted; + + private System.Threading.SendOrPostCallback GetAreaListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCostGroupDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCountryDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCountryListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCurrencyDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCurrencyListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerProductDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetDepartmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetDepartmentListOperationCompleted; + + private System.Threading.SendOrPostCallback GetEmployeeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetEmployeeListOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemListOperationCompleted; + + private System.Threading.SendOrPostCallback GetOrganizationListOperationCompleted; + + private System.Threading.SendOrPostCallback GetOverdueAmtRankingDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetProdClassListOperationCompleted; + + private System.Threading.SendOrPostCallback GetSalesDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSalesStatisticsDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSOInfoDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSOInfoDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSupplierDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSupplierItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetOverdueAmtDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMonthListOperationCompleted; + + private System.Threading.SendOrPostCallback GetInspectionDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetOperationDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetUnitDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetBasicCodeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetComponentrepsubDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAreaDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWarehouseDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetLocationDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetProductClassDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateIssueReturnDataOperationCompleted; + + private System.Threading.SendOrPostCallback createasft5icd2OperationCompleted; + + private System.Threading.SendOrPostCallback GetUserTokenOperationCompleted; + + private System.Threading.SendOrPostCallback CheckUserAuthOperationCompleted; + + private System.Threading.SendOrPostCallback GetMenuDataOperationCompleted; + + private System.Threading.SendOrPostCallback CheckExecAuthorizationOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePurchaseStockInOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePurchaseStockOutOperationCompleted; + + private System.Threading.SendOrPostCallback CreateWOStockinDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCountingLabelDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetFQCDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemStockListOperationCompleted; + + private System.Threading.SendOrPostCallback GetLabelTypeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMFGDocumentOperationCompleted; + + private System.Threading.SendOrPostCallback GetPODataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPOReceivingInDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPOReceivingOutDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPurchaseStockInQtyOperationCompleted; + + private System.Threading.SendOrPostCallback GetPurchaseStockOutQtyOperationCompleted; + + private System.Threading.SendOrPostCallback GetReasonCodeOperationCompleted; + + private System.Threading.SendOrPostCallback GetReceivingQtyOperationCompleted; + + private System.Threading.SendOrPostCallback GetStockDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWODataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWOIssueDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWOStockQtyOperationCompleted; + + private System.Threading.SendOrPostCallback UpdateCountingLabelDataOperationCompleted; + + private System.Threading.SendOrPostCallback UpdateWOIssueDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateSalesReturnOperationCompleted; + + private System.Threading.SendOrPostCallback CreateShippingOrderOperationCompleted; + + private System.Threading.SendOrPostCallback CreateTransferNoteOperationCompleted; + + private System.Threading.SendOrPostCallback GetQtyConversionOperationCompleted; + + private System.Threading.SendOrPostCallback GetShippingNoticeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetShippingOrderDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePOReceivingDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSalesDocumentOperationCompleted; + + private System.Threading.SendOrPostCallback CreateMISCIssueDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateStockDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBOMMasterDataOperationCompleted; + + private System.Threading.SendOrPostCallback TIPTOPGateWayOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBOMDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateDepartmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback RunCommandOperationCompleted; + + private System.Threading.SendOrPostCallback EboGetCustDataOperationCompleted; + + private System.Threading.SendOrPostCallback EboGetOrderDataOperationCompleted; + + private System.Threading.SendOrPostCallback EboGetProdDataOperationCompleted; + + private System.Threading.SendOrPostCallback CheckApsExecutionOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerContactDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPackingMethodDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePotentialCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTaxTypeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetUnitConversionDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMFGSettingSmaDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerOtheraddressDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateCustomerContactDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateCustomerOtheraddressDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPotentialCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback CRMGetCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTableAmendmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetReportDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountTypeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateVoucherDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetVoucherDocumentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTransactionCategoryOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBillingAPOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemGroupDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMachineDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetProdRoutingDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWorkstationDataOperationCompleted; + + private System.Threading.SendOrPostCallback RollbackVoucherDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateRepSubPBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateSupplierItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateECNDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetBrandDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateItemApprovalDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateWOWorkReportDataOperationCompleted; + + private bool useDefaultCredentialsSetExplicitly; + + /// + public TIPTOPServiceGateWay() { + this.Url = "http://10.40.40.30/gas/ws/r/aws_ttsrv2_top2o"; + if ((this.IsLocalFileSystemWebService(this.Url) == true)) { + this.UseDefaultCredentials = true; + this.useDefaultCredentialsSetExplicitly = false; + } + else { + this.useDefaultCredentialsSetExplicitly = true; + } + } + + public new string Url { + get { + return base.Url; + } + set { + if ((((this.IsLocalFileSystemWebService(base.Url) == true) + && (this.useDefaultCredentialsSetExplicitly == false)) + && (this.IsLocalFileSystemWebService(value) == false))) { + base.UseDefaultCredentials = false; + } + base.Url = value; + } + } + + public new bool UseDefaultCredentials { + get { + return base.UseDefaultCredentials; + } + set { + base.UseDefaultCredentials = value; + this.useDefaultCredentialsSetExplicitly = true; + } + } + + /// + public event CreateCustomerDataCompletedEventHandler CreateCustomerDataCompleted; + + /// + public event CreateQuotationDataCompletedEventHandler CreateQuotationDataCompleted; + + /// + public event GetItemDataCompletedEventHandler GetItemDataCompleted; + + /// + public event GetBOMDataCompletedEventHandler GetBOMDataCompleted; + + /// + public event GetDocumentNumberCompletedEventHandler GetDocumentNumberCompleted; + + /// + public event CreateItemMasterDataCompletedEventHandler CreateItemMasterDataCompleted; + + /// + public event CreateVendorDataCompletedEventHandler CreateVendorDataCompleted; + + /// + public event CreateEmployeeDataCompletedEventHandler CreateEmployeeDataCompleted; + + /// + public event CreateAddressDataCompletedEventHandler CreateAddressDataCompleted; + + /// + public event GetAccountSubjectDataCompletedEventHandler GetAccountSubjectDataCompleted; + + /// + public event GetAxmDocumentCompletedEventHandler GetAxmDocumentCompleted; + + /// + public event GetAreaListCompletedEventHandler GetAreaListCompleted; + + /// + public event GetCostGroupDataCompletedEventHandler GetCostGroupDataCompleted; + + /// + public event GetCountryDataCompletedEventHandler GetCountryDataCompleted; + + /// + public event GetCountryListCompletedEventHandler GetCountryListCompleted; + + /// + public event GetCurrencyDataCompletedEventHandler GetCurrencyDataCompleted; + + /// + public event GetCurrencyListCompletedEventHandler GetCurrencyListCompleted; + + /// + public event GetCustListCompletedEventHandler GetCustListCompleted; + + /// + public event GetCustomerDataCompletedEventHandler GetCustomerDataCompleted; + + /// + public event GetCustomerProductDataCompletedEventHandler GetCustomerProductDataCompleted; + + /// + public event GetDepartmentDataCompletedEventHandler GetDepartmentDataCompleted; + + /// + public event GetDepartmentListCompletedEventHandler GetDepartmentListCompleted; + + /// + public event GetEmployeeDataCompletedEventHandler GetEmployeeDataCompleted; + + /// + public event GetEmployeeListCompletedEventHandler GetEmployeeListCompleted; + + /// + public event GetItemListCompletedEventHandler GetItemListCompleted; + + /// + public event GetOrganizationListCompletedEventHandler GetOrganizationListCompleted; + + /// + public event GetOverdueAmtRankingDataCompletedEventHandler GetOverdueAmtRankingDataCompleted; + + /// + public event GetProdClassListCompletedEventHandler GetProdClassListCompleted; + + /// + public event GetSalesDetailDataCompletedEventHandler GetSalesDetailDataCompleted; + + /// + public event GetSalesStatisticsDataCompletedEventHandler GetSalesStatisticsDataCompleted; + + /// + public event GetSOInfoDataCompletedEventHandler GetSOInfoDataCompleted; + + /// + public event GetSOInfoDetailDataCompletedEventHandler GetSOInfoDetailDataCompleted; + + /// + public event GetSupplierDataCompletedEventHandler GetSupplierDataCompleted; + + /// + public event GetSupplierItemDataCompletedEventHandler GetSupplierItemDataCompleted; + + /// + public event GetOverdueAmtDetailDataCompletedEventHandler GetOverdueAmtDetailDataCompleted; + + /// + public event GetMonthListCompletedEventHandler GetMonthListCompleted; + + /// + public event GetInspectionDataCompletedEventHandler GetInspectionDataCompleted; + + /// + public event CreateBOMDataCompletedEventHandler CreateBOMDataCompleted; + + /// + public event GetOperationDataCompletedEventHandler GetOperationDataCompleted; + + /// + public event GetUnitDataCompletedEventHandler GetUnitDataCompleted; + + /// + public event GetBasicCodeDataCompletedEventHandler GetBasicCodeDataCompleted; + + /// + public event GetComponentrepsubDataCompletedEventHandler GetComponentrepsubDataCompleted; + + /// + public event GetAreaDataCompletedEventHandler GetAreaDataCompleted; + + /// + public event GetWarehouseDataCompletedEventHandler GetWarehouseDataCompleted; + + /// + public event GetLocationDataCompletedEventHandler GetLocationDataCompleted; + + /// + public event GetProductClassDataCompletedEventHandler GetProductClassDataCompleted; + + /// + public event CreateIssueReturnDataCompletedEventHandler CreateIssueReturnDataCompleted; + + /// + public event createasft5icd2CompletedEventHandler createasft5icd2Completed; + + /// + public event GetUserTokenCompletedEventHandler GetUserTokenCompleted; + + /// + public event CheckUserAuthCompletedEventHandler CheckUserAuthCompleted; + + /// + public event GetMenuDataCompletedEventHandler GetMenuDataCompleted; + + /// + public event CheckExecAuthorizationCompletedEventHandler CheckExecAuthorizationCompleted; + + /// + public event CreatePurchaseStockInCompletedEventHandler CreatePurchaseStockInCompleted; + + /// + public event CreatePurchaseStockOutCompletedEventHandler CreatePurchaseStockOutCompleted; + + /// + public event CreateWOStockinDataCompletedEventHandler CreateWOStockinDataCompleted; + + /// + public event GetCountingLabelDataCompletedEventHandler GetCountingLabelDataCompleted; + + /// + public event GetFQCDataCompletedEventHandler GetFQCDataCompleted; + + /// + public event GetItemStockListCompletedEventHandler GetItemStockListCompleted; + + /// + public event GetLabelTypeDataCompletedEventHandler GetLabelTypeDataCompleted; + + /// + public event GetMFGDocumentCompletedEventHandler GetMFGDocumentCompleted; + + /// + public event GetPODataCompletedEventHandler GetPODataCompleted; + + /// + public event GetPOReceivingInDataCompletedEventHandler GetPOReceivingInDataCompleted; + + /// + public event GetPOReceivingOutDataCompletedEventHandler GetPOReceivingOutDataCompleted; + + /// + public event GetPurchaseStockInQtyCompletedEventHandler GetPurchaseStockInQtyCompleted; + + /// + public event GetPurchaseStockOutQtyCompletedEventHandler GetPurchaseStockOutQtyCompleted; + + /// + public event GetReasonCodeCompletedEventHandler GetReasonCodeCompleted; + + /// + public event GetReceivingQtyCompletedEventHandler GetReceivingQtyCompleted; + + /// + public event GetStockDataCompletedEventHandler GetStockDataCompleted; + + /// + public event GetWODataCompletedEventHandler GetWODataCompleted; + + /// + public event GetWOIssueDataCompletedEventHandler GetWOIssueDataCompleted; + + /// + public event GetWOStockQtyCompletedEventHandler GetWOStockQtyCompleted; + + /// + public event UpdateCountingLabelDataCompletedEventHandler UpdateCountingLabelDataCompleted; + + /// + public event UpdateWOIssueDataCompletedEventHandler UpdateWOIssueDataCompleted; + + /// + public event CreateSalesReturnCompletedEventHandler CreateSalesReturnCompleted; + + /// + public event CreateShippingOrderCompletedEventHandler CreateShippingOrderCompleted; + + /// + public event CreateTransferNoteCompletedEventHandler CreateTransferNoteCompleted; + + /// + public event GetQtyConversionCompletedEventHandler GetQtyConversionCompleted; + + /// + public event GetShippingNoticeDataCompletedEventHandler GetShippingNoticeDataCompleted; + + /// + public event GetShippingOrderDataCompletedEventHandler GetShippingOrderDataCompleted; + + /// + public event CreatePOReceivingDataCompletedEventHandler CreatePOReceivingDataCompleted; + + /// + public event GetSalesDocumentCompletedEventHandler GetSalesDocumentCompleted; + + /// + public event CreateMISCIssueDataCompletedEventHandler CreateMISCIssueDataCompleted; + + /// + public event CreateStockDataCompletedEventHandler CreateStockDataCompleted; + + /// + public event CreateBOMMasterDataCompletedEventHandler CreateBOMMasterDataCompleted; + + /// + public event TIPTOPGateWayCompletedEventHandler TIPTOPGateWayCompleted; + + /// + public event CreateBOMDetailDataCompletedEventHandler CreateBOMDetailDataCompleted; + + /// + public event CreateDepartmentDataCompletedEventHandler CreateDepartmentDataCompleted; + + /// + public event RunCommandCompletedEventHandler RunCommandCompleted; + + /// + public event EboGetCustDataCompletedEventHandler EboGetCustDataCompleted; + + /// + public event EboGetOrderDataCompletedEventHandler EboGetOrderDataCompleted; + + /// + public event EboGetProdDataCompletedEventHandler EboGetProdDataCompleted; + + /// + public event CheckApsExecutionCompletedEventHandler CheckApsExecutionCompleted; + + /// + public event GetCustomerContactDataCompletedEventHandler GetCustomerContactDataCompleted; + + /// + public event GetPackingMethodDataCompletedEventHandler GetPackingMethodDataCompleted; + + /// + public event CreatePotentialCustomerDataCompletedEventHandler CreatePotentialCustomerDataCompleted; + + /// + public event GetTaxTypeDataCompletedEventHandler GetTaxTypeDataCompleted; + + /// + public event GetUnitConversionDataCompletedEventHandler GetUnitConversionDataCompleted; + + /// + public event GetMFGSettingSmaDataCompletedEventHandler GetMFGSettingSmaDataCompleted; + + /// + public event GetCustomerOtheraddressDataCompletedEventHandler GetCustomerOtheraddressDataCompleted; + + /// + public event CreateCustomerContactDataCompletedEventHandler CreateCustomerContactDataCompleted; + + /// + public event CreateCustomerOtheraddressDataCompletedEventHandler CreateCustomerOtheraddressDataCompleted; + + /// + public event GetPotentialCustomerDataCompletedEventHandler GetPotentialCustomerDataCompleted; + + /// + public event CRMGetCustomerDataCompletedEventHandler CRMGetCustomerDataCompleted; + + /// + public event GetTableAmendmentDataCompletedEventHandler GetTableAmendmentDataCompleted; + + /// + public event GetReportDataCompletedEventHandler GetReportDataCompleted; + + /// + public event GetAccountTypeDataCompletedEventHandler GetAccountTypeDataCompleted; + + /// + public event GetAccountDataCompletedEventHandler GetAccountDataCompleted; + + /// + public event CreateVoucherDataCompletedEventHandler CreateVoucherDataCompleted; + + /// + public event GetVoucherDocumentDataCompletedEventHandler GetVoucherDocumentDataCompleted; + + /// + public event GetTransactionCategoryCompletedEventHandler GetTransactionCategoryCompleted; + + /// + public event CreateBillingAPCompletedEventHandler CreateBillingAPCompleted; + + /// + public event GetItemGroupDataCompletedEventHandler GetItemGroupDataCompleted; + + /// + public event GetMachineDataCompletedEventHandler GetMachineDataCompleted; + + /// + public event GetProdRoutingDataCompletedEventHandler GetProdRoutingDataCompleted; + + /// + public event GetWorkstationDataCompletedEventHandler GetWorkstationDataCompleted; + + /// + public event RollbackVoucherDataCompletedEventHandler RollbackVoucherDataCompleted; + + /// + public event CreateRepSubPBOMDataCompletedEventHandler CreateRepSubPBOMDataCompleted; + + /// + public event CreateSupplierItemDataCompletedEventHandler CreateSupplierItemDataCompleted; + + /// + public event CreateECNDataCompletedEventHandler CreateECNDataCompleted; + + /// + public event GetBrandDataCompletedEventHandler GetBrandDataCompleted; + + /// + public event CreateItemApprovalDataCompletedEventHandler CreateItemApprovalDataCompleted; + + /// + public event CreateWOWorkReportDataCompletedEventHandler CreateWOWorkReportDataCompleted; + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateCustomerDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateCustomerData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateCustomerData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateCustomerData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateCustomerData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateCustomerData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateCustomerDataAsync(string request) { + this.CreateCustomerDataAsync(request, null); + } + + /// + public void CreateCustomerDataAsync(string request, object userState) { + if ((this.CreateCustomerDataOperationCompleted == null)) { + this.CreateCustomerDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateCustomerDataOperationCompleted); + } + this.InvokeAsync("CreateCustomerData", new object[] { + request}, this.CreateCustomerDataOperationCompleted, userState); + } + + private void OnCreateCustomerDataOperationCompleted(object arg) { + if ((this.CreateCustomerDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateCustomerDataCompleted(this, new CreateCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateQuotationDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateQuotationData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateQuotationData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateQuotationData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateQuotationData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateQuotationData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateQuotationDataAsync(string request) { + this.CreateQuotationDataAsync(request, null); + } + + /// + public void CreateQuotationDataAsync(string request, object userState) { + if ((this.CreateQuotationDataOperationCompleted == null)) { + this.CreateQuotationDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateQuotationDataOperationCompleted); + } + this.InvokeAsync("CreateQuotationData", new object[] { + request}, this.CreateQuotationDataOperationCompleted, userState); + } + + private void OnCreateQuotationDataOperationCompleted(object arg) { + if ((this.CreateQuotationDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateQuotationDataCompleted(this, new CreateQuotationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetItemDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetItemData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetItemData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetItemData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetItemData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetItemData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetItemDataAsync(string request) { + this.GetItemDataAsync(request, null); + } + + /// + public void GetItemDataAsync(string request, object userState) { + if ((this.GetItemDataOperationCompleted == null)) { + this.GetItemDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetItemDataOperationCompleted); + } + this.InvokeAsync("GetItemData", new object[] { + request}, this.GetItemDataOperationCompleted, userState); + } + + private void OnGetItemDataOperationCompleted(object arg) { + if ((this.GetItemDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetItemDataCompleted(this, new GetItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetBOMDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetBOMData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetBOMData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetBOMData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetBOMData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetBOMData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetBOMDataAsync(string request) { + this.GetBOMDataAsync(request, null); + } + + /// + public void GetBOMDataAsync(string request, object userState) { + if ((this.GetBOMDataOperationCompleted == null)) { + this.GetBOMDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetBOMDataOperationCompleted); + } + this.InvokeAsync("GetBOMData", new object[] { + request}, this.GetBOMDataOperationCompleted, userState); + } + + private void OnGetBOMDataOperationCompleted(object arg) { + if ((this.GetBOMDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetBOMDataCompleted(this, new GetBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetDocumentNumberRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetDocumentNumber([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetDocumentNumber", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetDocumentNumber(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetDocumentNumber", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetDocumentNumber(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetDocumentNumberAsync(string request) { + this.GetDocumentNumberAsync(request, null); + } + + /// + public void GetDocumentNumberAsync(string request, object userState) { + if ((this.GetDocumentNumberOperationCompleted == null)) { + this.GetDocumentNumberOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDocumentNumberOperationCompleted); + } + this.InvokeAsync("GetDocumentNumber", new object[] { + request}, this.GetDocumentNumberOperationCompleted, userState); + } + + private void OnGetDocumentNumberOperationCompleted(object arg) { + if ((this.GetDocumentNumberCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetDocumentNumberCompleted(this, new GetDocumentNumberCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateItemMasterDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateItemMasterData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateItemMasterData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateItemMasterData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateItemMasterData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateItemMasterData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateItemMasterDataAsync(string request) { + this.CreateItemMasterDataAsync(request, null); + } + + /// + public void CreateItemMasterDataAsync(string request, object userState) { + if ((this.CreateItemMasterDataOperationCompleted == null)) { + this.CreateItemMasterDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateItemMasterDataOperationCompleted); + } + this.InvokeAsync("CreateItemMasterData", new object[] { + request}, this.CreateItemMasterDataOperationCompleted, userState); + } + + private void OnCreateItemMasterDataOperationCompleted(object arg) { + if ((this.CreateItemMasterDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateItemMasterDataCompleted(this, new CreateItemMasterDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateVendorDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateVendorData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateVendorData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateVendorData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateVendorData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateVendorData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateVendorDataAsync(string request) { + this.CreateVendorDataAsync(request, null); + } + + /// + public void CreateVendorDataAsync(string request, object userState) { + if ((this.CreateVendorDataOperationCompleted == null)) { + this.CreateVendorDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateVendorDataOperationCompleted); + } + this.InvokeAsync("CreateVendorData", new object[] { + request}, this.CreateVendorDataOperationCompleted, userState); + } + + private void OnCreateVendorDataOperationCompleted(object arg) { + if ((this.CreateVendorDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateVendorDataCompleted(this, new CreateVendorDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateEmployeeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateEmployeeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateEmployeeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateEmployeeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateEmployeeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateEmployeeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateEmployeeDataAsync(string request) { + this.CreateEmployeeDataAsync(request, null); + } + + /// + public void CreateEmployeeDataAsync(string request, object userState) { + if ((this.CreateEmployeeDataOperationCompleted == null)) { + this.CreateEmployeeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateEmployeeDataOperationCompleted); + } + this.InvokeAsync("CreateEmployeeData", new object[] { + request}, this.CreateEmployeeDataOperationCompleted, userState); + } + + private void OnCreateEmployeeDataOperationCompleted(object arg) { + if ((this.CreateEmployeeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateEmployeeDataCompleted(this, new CreateEmployeeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateAddressDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateAddressData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateAddressData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateAddressData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateAddressData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateAddressData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateAddressDataAsync(string request) { + this.CreateAddressDataAsync(request, null); + } + + /// + public void CreateAddressDataAsync(string request, object userState) { + if ((this.CreateAddressDataOperationCompleted == null)) { + this.CreateAddressDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateAddressDataOperationCompleted); + } + this.InvokeAsync("CreateAddressData", new object[] { + request}, this.CreateAddressDataOperationCompleted, userState); + } + + private void OnCreateAddressDataOperationCompleted(object arg) { + if ((this.CreateAddressDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateAddressDataCompleted(this, new CreateAddressDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAccountSubjectDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAccountSubjectData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAccountSubjectData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAccountSubjectData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAccountSubjectData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAccountSubjectData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAccountSubjectDataAsync(string request) { + this.GetAccountSubjectDataAsync(request, null); + } + + /// + public void GetAccountSubjectDataAsync(string request, object userState) { + if ((this.GetAccountSubjectDataOperationCompleted == null)) { + this.GetAccountSubjectDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAccountSubjectDataOperationCompleted); + } + this.InvokeAsync("GetAccountSubjectData", new object[] { + request}, this.GetAccountSubjectDataOperationCompleted, userState); + } + + private void OnGetAccountSubjectDataOperationCompleted(object arg) { + if ((this.GetAccountSubjectDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAccountSubjectDataCompleted(this, new GetAccountSubjectDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAxmDocumentRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAxmDocument([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAxmDocument", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAxmDocument(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAxmDocument", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAxmDocument(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAxmDocumentAsync(string request) { + this.GetAxmDocumentAsync(request, null); + } + + /// + public void GetAxmDocumentAsync(string request, object userState) { + if ((this.GetAxmDocumentOperationCompleted == null)) { + this.GetAxmDocumentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAxmDocumentOperationCompleted); + } + this.InvokeAsync("GetAxmDocument", new object[] { + request}, this.GetAxmDocumentOperationCompleted, userState); + } + + private void OnGetAxmDocumentOperationCompleted(object arg) { + if ((this.GetAxmDocumentCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAxmDocumentCompleted(this, new GetAxmDocumentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAreaListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAreaList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAreaList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAreaList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAreaList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAreaList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAreaListAsync(string request) { + this.GetAreaListAsync(request, null); + } + + /// + public void GetAreaListAsync(string request, object userState) { + if ((this.GetAreaListOperationCompleted == null)) { + this.GetAreaListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAreaListOperationCompleted); + } + this.InvokeAsync("GetAreaList", new object[] { + request}, this.GetAreaListOperationCompleted, userState); + } + + private void OnGetAreaListOperationCompleted(object arg) { + if ((this.GetAreaListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAreaListCompleted(this, new GetAreaListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCostGroupDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCostGroupData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCostGroupData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCostGroupData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCostGroupData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCostGroupData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCostGroupDataAsync(string request) { + this.GetCostGroupDataAsync(request, null); + } + + /// + public void GetCostGroupDataAsync(string request, object userState) { + if ((this.GetCostGroupDataOperationCompleted == null)) { + this.GetCostGroupDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCostGroupDataOperationCompleted); + } + this.InvokeAsync("GetCostGroupData", new object[] { + request}, this.GetCostGroupDataOperationCompleted, userState); + } + + private void OnGetCostGroupDataOperationCompleted(object arg) { + if ((this.GetCostGroupDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCostGroupDataCompleted(this, new GetCostGroupDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCountryDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCountryData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCountryData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCountryData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCountryData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCountryData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCountryDataAsync(string request) { + this.GetCountryDataAsync(request, null); + } + + /// + public void GetCountryDataAsync(string request, object userState) { + if ((this.GetCountryDataOperationCompleted == null)) { + this.GetCountryDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCountryDataOperationCompleted); + } + this.InvokeAsync("GetCountryData", new object[] { + request}, this.GetCountryDataOperationCompleted, userState); + } + + private void OnGetCountryDataOperationCompleted(object arg) { + if ((this.GetCountryDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCountryDataCompleted(this, new GetCountryDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCountryListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCountryList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCountryList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCountryList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCountryList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCountryList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCountryListAsync(string request) { + this.GetCountryListAsync(request, null); + } + + /// + public void GetCountryListAsync(string request, object userState) { + if ((this.GetCountryListOperationCompleted == null)) { + this.GetCountryListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCountryListOperationCompleted); + } + this.InvokeAsync("GetCountryList", new object[] { + request}, this.GetCountryListOperationCompleted, userState); + } + + private void OnGetCountryListOperationCompleted(object arg) { + if ((this.GetCountryListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCountryListCompleted(this, new GetCountryListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCurrencyDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCurrencyData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCurrencyData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCurrencyData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCurrencyData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCurrencyData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCurrencyDataAsync(string request) { + this.GetCurrencyDataAsync(request, null); + } + + /// + public void GetCurrencyDataAsync(string request, object userState) { + if ((this.GetCurrencyDataOperationCompleted == null)) { + this.GetCurrencyDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCurrencyDataOperationCompleted); + } + this.InvokeAsync("GetCurrencyData", new object[] { + request}, this.GetCurrencyDataOperationCompleted, userState); + } + + private void OnGetCurrencyDataOperationCompleted(object arg) { + if ((this.GetCurrencyDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCurrencyDataCompleted(this, new GetCurrencyDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCurrencyListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCurrencyList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCurrencyList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCurrencyList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCurrencyList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCurrencyList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCurrencyListAsync(string request) { + this.GetCurrencyListAsync(request, null); + } + + /// + public void GetCurrencyListAsync(string request, object userState) { + if ((this.GetCurrencyListOperationCompleted == null)) { + this.GetCurrencyListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCurrencyListOperationCompleted); + } + this.InvokeAsync("GetCurrencyList", new object[] { + request}, this.GetCurrencyListOperationCompleted, userState); + } + + private void OnGetCurrencyListOperationCompleted(object arg) { + if ((this.GetCurrencyListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCurrencyListCompleted(this, new GetCurrencyListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCustListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCustList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCustList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCustList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCustList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCustList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCustListAsync(string request) { + this.GetCustListAsync(request, null); + } + + /// + public void GetCustListAsync(string request, object userState) { + if ((this.GetCustListOperationCompleted == null)) { + this.GetCustListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCustListOperationCompleted); + } + this.InvokeAsync("GetCustList", new object[] { + request}, this.GetCustListOperationCompleted, userState); + } + + private void OnGetCustListOperationCompleted(object arg) { + if ((this.GetCustListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCustListCompleted(this, new GetCustListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCustomerDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCustomerData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCustomerData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCustomerData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCustomerData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCustomerData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCustomerDataAsync(string request) { + this.GetCustomerDataAsync(request, null); + } + + /// + public void GetCustomerDataAsync(string request, object userState) { + if ((this.GetCustomerDataOperationCompleted == null)) { + this.GetCustomerDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCustomerDataOperationCompleted); + } + this.InvokeAsync("GetCustomerData", new object[] { + request}, this.GetCustomerDataOperationCompleted, userState); + } + + private void OnGetCustomerDataOperationCompleted(object arg) { + if ((this.GetCustomerDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCustomerDataCompleted(this, new GetCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCustomerProductDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCustomerProductData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCustomerProductData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCustomerProductData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCustomerProductData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCustomerProductData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCustomerProductDataAsync(string request) { + this.GetCustomerProductDataAsync(request, null); + } + + /// + public void GetCustomerProductDataAsync(string request, object userState) { + if ((this.GetCustomerProductDataOperationCompleted == null)) { + this.GetCustomerProductDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCustomerProductDataOperationCompleted); + } + this.InvokeAsync("GetCustomerProductData", new object[] { + request}, this.GetCustomerProductDataOperationCompleted, userState); + } + + private void OnGetCustomerProductDataOperationCompleted(object arg) { + if ((this.GetCustomerProductDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCustomerProductDataCompleted(this, new GetCustomerProductDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetDepartmentDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetDepartmentData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetDepartmentData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetDepartmentData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetDepartmentData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetDepartmentData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetDepartmentDataAsync(string request) { + this.GetDepartmentDataAsync(request, null); + } + + /// + public void GetDepartmentDataAsync(string request, object userState) { + if ((this.GetDepartmentDataOperationCompleted == null)) { + this.GetDepartmentDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDepartmentDataOperationCompleted); + } + this.InvokeAsync("GetDepartmentData", new object[] { + request}, this.GetDepartmentDataOperationCompleted, userState); + } + + private void OnGetDepartmentDataOperationCompleted(object arg) { + if ((this.GetDepartmentDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetDepartmentDataCompleted(this, new GetDepartmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetDepartmentListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetDepartmentList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetDepartmentList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetDepartmentList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetDepartmentList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetDepartmentList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetDepartmentListAsync(string request) { + this.GetDepartmentListAsync(request, null); + } + + /// + public void GetDepartmentListAsync(string request, object userState) { + if ((this.GetDepartmentListOperationCompleted == null)) { + this.GetDepartmentListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetDepartmentListOperationCompleted); + } + this.InvokeAsync("GetDepartmentList", new object[] { + request}, this.GetDepartmentListOperationCompleted, userState); + } + + private void OnGetDepartmentListOperationCompleted(object arg) { + if ((this.GetDepartmentListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetDepartmentListCompleted(this, new GetDepartmentListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetEmployeeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetEmployeeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetEmployeeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetEmployeeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetEmployeeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetEmployeeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetEmployeeDataAsync(string request) { + this.GetEmployeeDataAsync(request, null); + } + + /// + public void GetEmployeeDataAsync(string request, object userState) { + if ((this.GetEmployeeDataOperationCompleted == null)) { + this.GetEmployeeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetEmployeeDataOperationCompleted); + } + this.InvokeAsync("GetEmployeeData", new object[] { + request}, this.GetEmployeeDataOperationCompleted, userState); + } + + private void OnGetEmployeeDataOperationCompleted(object arg) { + if ((this.GetEmployeeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetEmployeeDataCompleted(this, new GetEmployeeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetEmployeeListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetEmployeeList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetEmployeeList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetEmployeeList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetEmployeeList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetEmployeeList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetEmployeeListAsync(string request) { + this.GetEmployeeListAsync(request, null); + } + + /// + public void GetEmployeeListAsync(string request, object userState) { + if ((this.GetEmployeeListOperationCompleted == null)) { + this.GetEmployeeListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetEmployeeListOperationCompleted); + } + this.InvokeAsync("GetEmployeeList", new object[] { + request}, this.GetEmployeeListOperationCompleted, userState); + } + + private void OnGetEmployeeListOperationCompleted(object arg) { + if ((this.GetEmployeeListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetEmployeeListCompleted(this, new GetEmployeeListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetItemListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetItemList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetItemList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetItemList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetItemList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetItemList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetItemListAsync(string request) { + this.GetItemListAsync(request, null); + } + + /// + public void GetItemListAsync(string request, object userState) { + if ((this.GetItemListOperationCompleted == null)) { + this.GetItemListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetItemListOperationCompleted); + } + this.InvokeAsync("GetItemList", new object[] { + request}, this.GetItemListOperationCompleted, userState); + } + + private void OnGetItemListOperationCompleted(object arg) { + if ((this.GetItemListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetItemListCompleted(this, new GetItemListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetOrganizationListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetOrganizationList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetOrganizationList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetOrganizationList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetOrganizationList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetOrganizationList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetOrganizationListAsync(string request) { + this.GetOrganizationListAsync(request, null); + } + + /// + public void GetOrganizationListAsync(string request, object userState) { + if ((this.GetOrganizationListOperationCompleted == null)) { + this.GetOrganizationListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOrganizationListOperationCompleted); + } + this.InvokeAsync("GetOrganizationList", new object[] { + request}, this.GetOrganizationListOperationCompleted, userState); + } + + private void OnGetOrganizationListOperationCompleted(object arg) { + if ((this.GetOrganizationListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetOrganizationListCompleted(this, new GetOrganizationListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetOverdueAmtRankingDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetOverdueAmtRankingData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetOverdueAmtRankingData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetOverdueAmtRankingData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetOverdueAmtRankingData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetOverdueAmtRankingData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetOverdueAmtRankingDataAsync(string request) { + this.GetOverdueAmtRankingDataAsync(request, null); + } + + /// + public void GetOverdueAmtRankingDataAsync(string request, object userState) { + if ((this.GetOverdueAmtRankingDataOperationCompleted == null)) { + this.GetOverdueAmtRankingDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOverdueAmtRankingDataOperationCompleted); + } + this.InvokeAsync("GetOverdueAmtRankingData", new object[] { + request}, this.GetOverdueAmtRankingDataOperationCompleted, userState); + } + + private void OnGetOverdueAmtRankingDataOperationCompleted(object arg) { + if ((this.GetOverdueAmtRankingDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetOverdueAmtRankingDataCompleted(this, new GetOverdueAmtRankingDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetProdClassListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetProdClassList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetProdClassList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetProdClassList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetProdClassList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetProdClassList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetProdClassListAsync(string request) { + this.GetProdClassListAsync(request, null); + } + + /// + public void GetProdClassListAsync(string request, object userState) { + if ((this.GetProdClassListOperationCompleted == null)) { + this.GetProdClassListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetProdClassListOperationCompleted); + } + this.InvokeAsync("GetProdClassList", new object[] { + request}, this.GetProdClassListOperationCompleted, userState); + } + + private void OnGetProdClassListOperationCompleted(object arg) { + if ((this.GetProdClassListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetProdClassListCompleted(this, new GetProdClassListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSalesDetailDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSalesDetailData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSalesDetailData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSalesDetailData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSalesDetailData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSalesDetailData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSalesDetailDataAsync(string request) { + this.GetSalesDetailDataAsync(request, null); + } + + /// + public void GetSalesDetailDataAsync(string request, object userState) { + if ((this.GetSalesDetailDataOperationCompleted == null)) { + this.GetSalesDetailDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSalesDetailDataOperationCompleted); + } + this.InvokeAsync("GetSalesDetailData", new object[] { + request}, this.GetSalesDetailDataOperationCompleted, userState); + } + + private void OnGetSalesDetailDataOperationCompleted(object arg) { + if ((this.GetSalesDetailDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSalesDetailDataCompleted(this, new GetSalesDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSalesStatisticsDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSalesStatisticsData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSalesStatisticsData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSalesStatisticsData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSalesStatisticsData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSalesStatisticsData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSalesStatisticsDataAsync(string request) { + this.GetSalesStatisticsDataAsync(request, null); + } + + /// + public void GetSalesStatisticsDataAsync(string request, object userState) { + if ((this.GetSalesStatisticsDataOperationCompleted == null)) { + this.GetSalesStatisticsDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSalesStatisticsDataOperationCompleted); + } + this.InvokeAsync("GetSalesStatisticsData", new object[] { + request}, this.GetSalesStatisticsDataOperationCompleted, userState); + } + + private void OnGetSalesStatisticsDataOperationCompleted(object arg) { + if ((this.GetSalesStatisticsDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSalesStatisticsDataCompleted(this, new GetSalesStatisticsDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSOInfoDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSOInfoData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSOInfoData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSOInfoData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSOInfoData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSOInfoData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSOInfoDataAsync(string request) { + this.GetSOInfoDataAsync(request, null); + } + + /// + public void GetSOInfoDataAsync(string request, object userState) { + if ((this.GetSOInfoDataOperationCompleted == null)) { + this.GetSOInfoDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSOInfoDataOperationCompleted); + } + this.InvokeAsync("GetSOInfoData", new object[] { + request}, this.GetSOInfoDataOperationCompleted, userState); + } + + private void OnGetSOInfoDataOperationCompleted(object arg) { + if ((this.GetSOInfoDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSOInfoDataCompleted(this, new GetSOInfoDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSOInfoDetailDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSOInfoDetailData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSOInfoDetailData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSOInfoDetailData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSOInfoDetailData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSOInfoDetailData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSOInfoDetailDataAsync(string request) { + this.GetSOInfoDetailDataAsync(request, null); + } + + /// + public void GetSOInfoDetailDataAsync(string request, object userState) { + if ((this.GetSOInfoDetailDataOperationCompleted == null)) { + this.GetSOInfoDetailDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSOInfoDetailDataOperationCompleted); + } + this.InvokeAsync("GetSOInfoDetailData", new object[] { + request}, this.GetSOInfoDetailDataOperationCompleted, userState); + } + + private void OnGetSOInfoDetailDataOperationCompleted(object arg) { + if ((this.GetSOInfoDetailDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSOInfoDetailDataCompleted(this, new GetSOInfoDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSupplierDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSupplierData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSupplierData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSupplierData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSupplierData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSupplierData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSupplierDataAsync(string request) { + this.GetSupplierDataAsync(request, null); + } + + /// + public void GetSupplierDataAsync(string request, object userState) { + if ((this.GetSupplierDataOperationCompleted == null)) { + this.GetSupplierDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupplierDataOperationCompleted); + } + this.InvokeAsync("GetSupplierData", new object[] { + request}, this.GetSupplierDataOperationCompleted, userState); + } + + private void OnGetSupplierDataOperationCompleted(object arg) { + if ((this.GetSupplierDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSupplierDataCompleted(this, new GetSupplierDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSupplierItemDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSupplierItemData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSupplierItemData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSupplierItemData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSupplierItemData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSupplierItemData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSupplierItemDataAsync(string request) { + this.GetSupplierItemDataAsync(request, null); + } + + /// + public void GetSupplierItemDataAsync(string request, object userState) { + if ((this.GetSupplierItemDataOperationCompleted == null)) { + this.GetSupplierItemDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupplierItemDataOperationCompleted); + } + this.InvokeAsync("GetSupplierItemData", new object[] { + request}, this.GetSupplierItemDataOperationCompleted, userState); + } + + private void OnGetSupplierItemDataOperationCompleted(object arg) { + if ((this.GetSupplierItemDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSupplierItemDataCompleted(this, new GetSupplierItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetOverdueAmtDetailDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetOverdueAmtDetailData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetOverdueAmtDetailData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetOverdueAmtDetailData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetOverdueAmtDetailData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetOverdueAmtDetailData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetOverdueAmtDetailDataAsync(string request) { + this.GetOverdueAmtDetailDataAsync(request, null); + } + + /// + public void GetOverdueAmtDetailDataAsync(string request, object userState) { + if ((this.GetOverdueAmtDetailDataOperationCompleted == null)) { + this.GetOverdueAmtDetailDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOverdueAmtDetailDataOperationCompleted); + } + this.InvokeAsync("GetOverdueAmtDetailData", new object[] { + request}, this.GetOverdueAmtDetailDataOperationCompleted, userState); + } + + private void OnGetOverdueAmtDetailDataOperationCompleted(object arg) { + if ((this.GetOverdueAmtDetailDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetOverdueAmtDetailDataCompleted(this, new GetOverdueAmtDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetMonthListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetMonthList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetMonthList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMonthList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMonthList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetMonthList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetMonthListAsync(string request) { + this.GetMonthListAsync(request, null); + } + + /// + public void GetMonthListAsync(string request, object userState) { + if ((this.GetMonthListOperationCompleted == null)) { + this.GetMonthListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMonthListOperationCompleted); + } + this.InvokeAsync("GetMonthList", new object[] { + request}, this.GetMonthListOperationCompleted, userState); + } + + private void OnGetMonthListOperationCompleted(object arg) { + if ((this.GetMonthListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMonthListCompleted(this, new GetMonthListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetInspectionDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetInspectionData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetInspectionData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetInspectionData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetInspectionData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetInspectionData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetInspectionDataAsync(string request) { + this.GetInspectionDataAsync(request, null); + } + + /// + public void GetInspectionDataAsync(string request, object userState) { + if ((this.GetInspectionDataOperationCompleted == null)) { + this.GetInspectionDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetInspectionDataOperationCompleted); + } + this.InvokeAsync("GetInspectionData", new object[] { + request}, this.GetInspectionDataOperationCompleted, userState); + } + + private void OnGetInspectionDataOperationCompleted(object arg) { + if ((this.GetInspectionDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetInspectionDataCompleted(this, new GetInspectionDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateBOMDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateBOMData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateBOMData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateBOMData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateBOMData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateBOMData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateBOMDataAsync(string request) { + this.CreateBOMDataAsync(request, null); + } + + /// + public void CreateBOMDataAsync(string request, object userState) { + if ((this.CreateBOMDataOperationCompleted == null)) { + this.CreateBOMDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateBOMDataOperationCompleted); + } + this.InvokeAsync("CreateBOMData", new object[] { + request}, this.CreateBOMDataOperationCompleted, userState); + } + + private void OnCreateBOMDataOperationCompleted(object arg) { + if ((this.CreateBOMDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateBOMDataCompleted(this, new CreateBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetOperationDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetOperationData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetOperationData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetOperationData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetOperationData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetOperationData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetOperationDataAsync(string request) { + this.GetOperationDataAsync(request, null); + } + + /// + public void GetOperationDataAsync(string request, object userState) { + if ((this.GetOperationDataOperationCompleted == null)) { + this.GetOperationDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOperationDataOperationCompleted); + } + this.InvokeAsync("GetOperationData", new object[] { + request}, this.GetOperationDataOperationCompleted, userState); + } + + private void OnGetOperationDataOperationCompleted(object arg) { + if ((this.GetOperationDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetOperationDataCompleted(this, new GetOperationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetUnitDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetUnitData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetUnitData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetUnitData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetUnitData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetUnitData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetUnitDataAsync(string request) { + this.GetUnitDataAsync(request, null); + } + + /// + public void GetUnitDataAsync(string request, object userState) { + if ((this.GetUnitDataOperationCompleted == null)) { + this.GetUnitDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUnitDataOperationCompleted); + } + this.InvokeAsync("GetUnitData", new object[] { + request}, this.GetUnitDataOperationCompleted, userState); + } + + private void OnGetUnitDataOperationCompleted(object arg) { + if ((this.GetUnitDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetUnitDataCompleted(this, new GetUnitDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetBasicCodeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetBasicCodeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetBasicCodeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetBasicCodeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetBasicCodeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetBasicCodeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetBasicCodeDataAsync(string request) { + this.GetBasicCodeDataAsync(request, null); + } + + /// + public void GetBasicCodeDataAsync(string request, object userState) { + if ((this.GetBasicCodeDataOperationCompleted == null)) { + this.GetBasicCodeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetBasicCodeDataOperationCompleted); + } + this.InvokeAsync("GetBasicCodeData", new object[] { + request}, this.GetBasicCodeDataOperationCompleted, userState); + } + + private void OnGetBasicCodeDataOperationCompleted(object arg) { + if ((this.GetBasicCodeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetBasicCodeDataCompleted(this, new GetBasicCodeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetComponentrepsubDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetComponentrepsubData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetComponentrepsubData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetComponentrepsubData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetComponentrepsubData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetComponentrepsubData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetComponentrepsubDataAsync(string request) { + this.GetComponentrepsubDataAsync(request, null); + } + + /// + public void GetComponentrepsubDataAsync(string request, object userState) { + if ((this.GetComponentrepsubDataOperationCompleted == null)) { + this.GetComponentrepsubDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetComponentrepsubDataOperationCompleted); + } + this.InvokeAsync("GetComponentrepsubData", new object[] { + request}, this.GetComponentrepsubDataOperationCompleted, userState); + } + + private void OnGetComponentrepsubDataOperationCompleted(object arg) { + if ((this.GetComponentrepsubDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetComponentrepsubDataCompleted(this, new GetComponentrepsubDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAreaDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAreaData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAreaData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAreaData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAreaData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAreaData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAreaDataAsync(string request) { + this.GetAreaDataAsync(request, null); + } + + /// + public void GetAreaDataAsync(string request, object userState) { + if ((this.GetAreaDataOperationCompleted == null)) { + this.GetAreaDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAreaDataOperationCompleted); + } + this.InvokeAsync("GetAreaData", new object[] { + request}, this.GetAreaDataOperationCompleted, userState); + } + + private void OnGetAreaDataOperationCompleted(object arg) { + if ((this.GetAreaDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAreaDataCompleted(this, new GetAreaDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetWarehouseDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetWarehouseData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetWarehouseData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetWarehouseData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetWarehouseData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetWarehouseData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetWarehouseDataAsync(string request) { + this.GetWarehouseDataAsync(request, null); + } + + /// + public void GetWarehouseDataAsync(string request, object userState) { + if ((this.GetWarehouseDataOperationCompleted == null)) { + this.GetWarehouseDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetWarehouseDataOperationCompleted); + } + this.InvokeAsync("GetWarehouseData", new object[] { + request}, this.GetWarehouseDataOperationCompleted, userState); + } + + private void OnGetWarehouseDataOperationCompleted(object arg) { + if ((this.GetWarehouseDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetWarehouseDataCompleted(this, new GetWarehouseDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetLocationDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetLocationData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetLocationData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetLocationData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetLocationData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetLocationData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetLocationDataAsync(string request) { + this.GetLocationDataAsync(request, null); + } + + /// + public void GetLocationDataAsync(string request, object userState) { + if ((this.GetLocationDataOperationCompleted == null)) { + this.GetLocationDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetLocationDataOperationCompleted); + } + this.InvokeAsync("GetLocationData", new object[] { + request}, this.GetLocationDataOperationCompleted, userState); + } + + private void OnGetLocationDataOperationCompleted(object arg) { + if ((this.GetLocationDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetLocationDataCompleted(this, new GetLocationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetProductClassDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetProductClassData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetProductClassData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetProductClassData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetProductClassData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetProductClassData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetProductClassDataAsync(string request) { + this.GetProductClassDataAsync(request, null); + } + + /// + public void GetProductClassDataAsync(string request, object userState) { + if ((this.GetProductClassDataOperationCompleted == null)) { + this.GetProductClassDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetProductClassDataOperationCompleted); + } + this.InvokeAsync("GetProductClassData", new object[] { + request}, this.GetProductClassDataOperationCompleted, userState); + } + + private void OnGetProductClassDataOperationCompleted(object arg) { + if ((this.GetProductClassDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetProductClassDataCompleted(this, new GetProductClassDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateIssueReturnDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateIssueReturnData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateIssueReturnData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateIssueReturnData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateIssueReturnData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateIssueReturnData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateIssueReturnDataAsync(string request) { + this.CreateIssueReturnDataAsync(request, null); + } + + /// + public void CreateIssueReturnDataAsync(string request, object userState) { + if ((this.CreateIssueReturnDataOperationCompleted == null)) { + this.CreateIssueReturnDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateIssueReturnDataOperationCompleted); + } + this.InvokeAsync("CreateIssueReturnData", new object[] { + request}, this.CreateIssueReturnDataOperationCompleted, userState); + } + + private void OnCreateIssueReturnDataOperationCompleted(object arg) { + if ((this.CreateIssueReturnDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateIssueReturnDataCompleted(this, new CreateIssueReturnDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="createasft5icd2Request", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string createasft5icd2([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("createasft5icd2", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult Begincreateasft5icd2(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("createasft5icd2", new object[] { + request}, callback, asyncState); + } + + /// + public string Endcreateasft5icd2(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void createasft5icd2Async(string request) { + this.createasft5icd2Async(request, null); + } + + /// + public void createasft5icd2Async(string request, object userState) { + if ((this.createasft5icd2OperationCompleted == null)) { + this.createasft5icd2OperationCompleted = new System.Threading.SendOrPostCallback(this.Oncreateasft5icd2OperationCompleted); + } + this.InvokeAsync("createasft5icd2", new object[] { + request}, this.createasft5icd2OperationCompleted, userState); + } + + private void Oncreateasft5icd2OperationCompleted(object arg) { + if ((this.createasft5icd2Completed != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.createasft5icd2Completed(this, new createasft5icd2CompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetUserTokenRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetUserToken([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetUserToken", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetUserToken(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetUserToken", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetUserToken(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetUserTokenAsync(string request) { + this.GetUserTokenAsync(request, null); + } + + /// + public void GetUserTokenAsync(string request, object userState) { + if ((this.GetUserTokenOperationCompleted == null)) { + this.GetUserTokenOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserTokenOperationCompleted); + } + this.InvokeAsync("GetUserToken", new object[] { + request}, this.GetUserTokenOperationCompleted, userState); + } + + private void OnGetUserTokenOperationCompleted(object arg) { + if ((this.GetUserTokenCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetUserTokenCompleted(this, new GetUserTokenCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CheckUserAuthRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CheckUserAuth([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CheckUserAuth", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckUserAuth(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckUserAuth", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCheckUserAuth(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CheckUserAuthAsync(string request) { + this.CheckUserAuthAsync(request, null); + } + + /// + public void CheckUserAuthAsync(string request, object userState) { + if ((this.CheckUserAuthOperationCompleted == null)) { + this.CheckUserAuthOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckUserAuthOperationCompleted); + } + this.InvokeAsync("CheckUserAuth", new object[] { + request}, this.CheckUserAuthOperationCompleted, userState); + } + + private void OnCheckUserAuthOperationCompleted(object arg) { + if ((this.CheckUserAuthCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckUserAuthCompleted(this, new CheckUserAuthCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetMenuDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetMenuData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetMenuData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMenuData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMenuData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetMenuData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetMenuDataAsync(string request) { + this.GetMenuDataAsync(request, null); + } + + /// + public void GetMenuDataAsync(string request, object userState) { + if ((this.GetMenuDataOperationCompleted == null)) { + this.GetMenuDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMenuDataOperationCompleted); + } + this.InvokeAsync("GetMenuData", new object[] { + request}, this.GetMenuDataOperationCompleted, userState); + } + + private void OnGetMenuDataOperationCompleted(object arg) { + if ((this.GetMenuDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMenuDataCompleted(this, new GetMenuDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CheckExecAuthorizationRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CheckExecAuthorization([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CheckExecAuthorization", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckExecAuthorization(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckExecAuthorization", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCheckExecAuthorization(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CheckExecAuthorizationAsync(string request) { + this.CheckExecAuthorizationAsync(request, null); + } + + /// + public void CheckExecAuthorizationAsync(string request, object userState) { + if ((this.CheckExecAuthorizationOperationCompleted == null)) { + this.CheckExecAuthorizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckExecAuthorizationOperationCompleted); + } + this.InvokeAsync("CheckExecAuthorization", new object[] { + request}, this.CheckExecAuthorizationOperationCompleted, userState); + } + + private void OnCheckExecAuthorizationOperationCompleted(object arg) { + if ((this.CheckExecAuthorizationCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckExecAuthorizationCompleted(this, new CheckExecAuthorizationCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreatePurchaseStockInRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreatePurchaseStockIn([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreatePurchaseStockIn", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreatePurchaseStockIn(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreatePurchaseStockIn", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreatePurchaseStockIn(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreatePurchaseStockInAsync(string request) { + this.CreatePurchaseStockInAsync(request, null); + } + + /// + public void CreatePurchaseStockInAsync(string request, object userState) { + if ((this.CreatePurchaseStockInOperationCompleted == null)) { + this.CreatePurchaseStockInOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePurchaseStockInOperationCompleted); + } + this.InvokeAsync("CreatePurchaseStockIn", new object[] { + request}, this.CreatePurchaseStockInOperationCompleted, userState); + } + + private void OnCreatePurchaseStockInOperationCompleted(object arg) { + if ((this.CreatePurchaseStockInCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreatePurchaseStockInCompleted(this, new CreatePurchaseStockInCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreatePurchaseStockOutRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreatePurchaseStockOut([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreatePurchaseStockOut", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreatePurchaseStockOut(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreatePurchaseStockOut", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreatePurchaseStockOut(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreatePurchaseStockOutAsync(string request) { + this.CreatePurchaseStockOutAsync(request, null); + } + + /// + public void CreatePurchaseStockOutAsync(string request, object userState) { + if ((this.CreatePurchaseStockOutOperationCompleted == null)) { + this.CreatePurchaseStockOutOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePurchaseStockOutOperationCompleted); + } + this.InvokeAsync("CreatePurchaseStockOut", new object[] { + request}, this.CreatePurchaseStockOutOperationCompleted, userState); + } + + private void OnCreatePurchaseStockOutOperationCompleted(object arg) { + if ((this.CreatePurchaseStockOutCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreatePurchaseStockOutCompleted(this, new CreatePurchaseStockOutCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateWOStockinDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateWOStockinData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateWOStockinData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateWOStockinData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateWOStockinData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateWOStockinData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateWOStockinDataAsync(string request) { + this.CreateWOStockinDataAsync(request, null); + } + + /// + public void CreateWOStockinDataAsync(string request, object userState) { + if ((this.CreateWOStockinDataOperationCompleted == null)) { + this.CreateWOStockinDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateWOStockinDataOperationCompleted); + } + this.InvokeAsync("CreateWOStockinData", new object[] { + request}, this.CreateWOStockinDataOperationCompleted, userState); + } + + private void OnCreateWOStockinDataOperationCompleted(object arg) { + if ((this.CreateWOStockinDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateWOStockinDataCompleted(this, new CreateWOStockinDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCountingLabelDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCountingLabelData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCountingLabelData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCountingLabelData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCountingLabelData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCountingLabelData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCountingLabelDataAsync(string request) { + this.GetCountingLabelDataAsync(request, null); + } + + /// + public void GetCountingLabelDataAsync(string request, object userState) { + if ((this.GetCountingLabelDataOperationCompleted == null)) { + this.GetCountingLabelDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCountingLabelDataOperationCompleted); + } + this.InvokeAsync("GetCountingLabelData", new object[] { + request}, this.GetCountingLabelDataOperationCompleted, userState); + } + + private void OnGetCountingLabelDataOperationCompleted(object arg) { + if ((this.GetCountingLabelDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCountingLabelDataCompleted(this, new GetCountingLabelDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetFQCDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetFQCData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetFQCData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetFQCData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetFQCData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetFQCData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetFQCDataAsync(string request) { + this.GetFQCDataAsync(request, null); + } + + /// + public void GetFQCDataAsync(string request, object userState) { + if ((this.GetFQCDataOperationCompleted == null)) { + this.GetFQCDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFQCDataOperationCompleted); + } + this.InvokeAsync("GetFQCData", new object[] { + request}, this.GetFQCDataOperationCompleted, userState); + } + + private void OnGetFQCDataOperationCompleted(object arg) { + if ((this.GetFQCDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetFQCDataCompleted(this, new GetFQCDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetItemStockListRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetItemStockList([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetItemStockList", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetItemStockList(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetItemStockList", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetItemStockList(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetItemStockListAsync(string request) { + this.GetItemStockListAsync(request, null); + } + + /// + public void GetItemStockListAsync(string request, object userState) { + if ((this.GetItemStockListOperationCompleted == null)) { + this.GetItemStockListOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetItemStockListOperationCompleted); + } + this.InvokeAsync("GetItemStockList", new object[] { + request}, this.GetItemStockListOperationCompleted, userState); + } + + private void OnGetItemStockListOperationCompleted(object arg) { + if ((this.GetItemStockListCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetItemStockListCompleted(this, new GetItemStockListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetLabelTypeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetLabelTypeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetLabelTypeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetLabelTypeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetLabelTypeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetLabelTypeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetLabelTypeDataAsync(string request) { + this.GetLabelTypeDataAsync(request, null); + } + + /// + public void GetLabelTypeDataAsync(string request, object userState) { + if ((this.GetLabelTypeDataOperationCompleted == null)) { + this.GetLabelTypeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetLabelTypeDataOperationCompleted); + } + this.InvokeAsync("GetLabelTypeData", new object[] { + request}, this.GetLabelTypeDataOperationCompleted, userState); + } + + private void OnGetLabelTypeDataOperationCompleted(object arg) { + if ((this.GetLabelTypeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetLabelTypeDataCompleted(this, new GetLabelTypeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetMFGDocumentRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetMFGDocument([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetMFGDocument", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMFGDocument(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMFGDocument", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetMFGDocument(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetMFGDocumentAsync(string request) { + this.GetMFGDocumentAsync(request, null); + } + + /// + public void GetMFGDocumentAsync(string request, object userState) { + if ((this.GetMFGDocumentOperationCompleted == null)) { + this.GetMFGDocumentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMFGDocumentOperationCompleted); + } + this.InvokeAsync("GetMFGDocument", new object[] { + request}, this.GetMFGDocumentOperationCompleted, userState); + } + + private void OnGetMFGDocumentOperationCompleted(object arg) { + if ((this.GetMFGDocumentCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMFGDocumentCompleted(this, new GetMFGDocumentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPODataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPOData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPOData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPOData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPOData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPOData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPODataAsync(string request) { + this.GetPODataAsync(request, null); + } + + /// + public void GetPODataAsync(string request, object userState) { + if ((this.GetPODataOperationCompleted == null)) { + this.GetPODataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPODataOperationCompleted); + } + this.InvokeAsync("GetPOData", new object[] { + request}, this.GetPODataOperationCompleted, userState); + } + + private void OnGetPODataOperationCompleted(object arg) { + if ((this.GetPODataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPODataCompleted(this, new GetPODataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPOReceivingInDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPOReceivingInData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPOReceivingInData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPOReceivingInData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPOReceivingInData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPOReceivingInData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPOReceivingInDataAsync(string request) { + this.GetPOReceivingInDataAsync(request, null); + } + + /// + public void GetPOReceivingInDataAsync(string request, object userState) { + if ((this.GetPOReceivingInDataOperationCompleted == null)) { + this.GetPOReceivingInDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPOReceivingInDataOperationCompleted); + } + this.InvokeAsync("GetPOReceivingInData", new object[] { + request}, this.GetPOReceivingInDataOperationCompleted, userState); + } + + private void OnGetPOReceivingInDataOperationCompleted(object arg) { + if ((this.GetPOReceivingInDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPOReceivingInDataCompleted(this, new GetPOReceivingInDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPOReceivingOutDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPOReceivingOutData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPOReceivingOutData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPOReceivingOutData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPOReceivingOutData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPOReceivingOutData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPOReceivingOutDataAsync(string request) { + this.GetPOReceivingOutDataAsync(request, null); + } + + /// + public void GetPOReceivingOutDataAsync(string request, object userState) { + if ((this.GetPOReceivingOutDataOperationCompleted == null)) { + this.GetPOReceivingOutDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPOReceivingOutDataOperationCompleted); + } + this.InvokeAsync("GetPOReceivingOutData", new object[] { + request}, this.GetPOReceivingOutDataOperationCompleted, userState); + } + + private void OnGetPOReceivingOutDataOperationCompleted(object arg) { + if ((this.GetPOReceivingOutDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPOReceivingOutDataCompleted(this, new GetPOReceivingOutDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPurchaseStockInQtyRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPurchaseStockInQty([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPurchaseStockInQty", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPurchaseStockInQty(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPurchaseStockInQty", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPurchaseStockInQty(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPurchaseStockInQtyAsync(string request) { + this.GetPurchaseStockInQtyAsync(request, null); + } + + /// + public void GetPurchaseStockInQtyAsync(string request, object userState) { + if ((this.GetPurchaseStockInQtyOperationCompleted == null)) { + this.GetPurchaseStockInQtyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPurchaseStockInQtyOperationCompleted); + } + this.InvokeAsync("GetPurchaseStockInQty", new object[] { + request}, this.GetPurchaseStockInQtyOperationCompleted, userState); + } + + private void OnGetPurchaseStockInQtyOperationCompleted(object arg) { + if ((this.GetPurchaseStockInQtyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPurchaseStockInQtyCompleted(this, new GetPurchaseStockInQtyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPurchaseStockOutQtyRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPurchaseStockOutQty([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPurchaseStockOutQty", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPurchaseStockOutQty(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPurchaseStockOutQty", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPurchaseStockOutQty(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPurchaseStockOutQtyAsync(string request) { + this.GetPurchaseStockOutQtyAsync(request, null); + } + + /// + public void GetPurchaseStockOutQtyAsync(string request, object userState) { + if ((this.GetPurchaseStockOutQtyOperationCompleted == null)) { + this.GetPurchaseStockOutQtyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPurchaseStockOutQtyOperationCompleted); + } + this.InvokeAsync("GetPurchaseStockOutQty", new object[] { + request}, this.GetPurchaseStockOutQtyOperationCompleted, userState); + } + + private void OnGetPurchaseStockOutQtyOperationCompleted(object arg) { + if ((this.GetPurchaseStockOutQtyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPurchaseStockOutQtyCompleted(this, new GetPurchaseStockOutQtyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetReasonCodeRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetReasonCode([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetReasonCode", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetReasonCode(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetReasonCode", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetReasonCode(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetReasonCodeAsync(string request) { + this.GetReasonCodeAsync(request, null); + } + + /// + public void GetReasonCodeAsync(string request, object userState) { + if ((this.GetReasonCodeOperationCompleted == null)) { + this.GetReasonCodeOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetReasonCodeOperationCompleted); + } + this.InvokeAsync("GetReasonCode", new object[] { + request}, this.GetReasonCodeOperationCompleted, userState); + } + + private void OnGetReasonCodeOperationCompleted(object arg) { + if ((this.GetReasonCodeCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetReasonCodeCompleted(this, new GetReasonCodeCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetReceivingQtyRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetReceivingQty([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetReceivingQty", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetReceivingQty(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetReceivingQty", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetReceivingQty(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetReceivingQtyAsync(string request) { + this.GetReceivingQtyAsync(request, null); + } + + /// + public void GetReceivingQtyAsync(string request, object userState) { + if ((this.GetReceivingQtyOperationCompleted == null)) { + this.GetReceivingQtyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetReceivingQtyOperationCompleted); + } + this.InvokeAsync("GetReceivingQty", new object[] { + request}, this.GetReceivingQtyOperationCompleted, userState); + } + + private void OnGetReceivingQtyOperationCompleted(object arg) { + if ((this.GetReceivingQtyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetReceivingQtyCompleted(this, new GetReceivingQtyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetStockDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetStockData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetStockData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetStockData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetStockData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetStockData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetStockDataAsync(string request) { + this.GetStockDataAsync(request, null); + } + + /// + public void GetStockDataAsync(string request, object userState) { + if ((this.GetStockDataOperationCompleted == null)) { + this.GetStockDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetStockDataOperationCompleted); + } + this.InvokeAsync("GetStockData", new object[] { + request}, this.GetStockDataOperationCompleted, userState); + } + + private void OnGetStockDataOperationCompleted(object arg) { + if ((this.GetStockDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetStockDataCompleted(this, new GetStockDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetWODataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetWOData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetWOData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetWOData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetWOData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetWOData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetWODataAsync(string request) { + this.GetWODataAsync(request, null); + } + + /// + public void GetWODataAsync(string request, object userState) { + if ((this.GetWODataOperationCompleted == null)) { + this.GetWODataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetWODataOperationCompleted); + } + this.InvokeAsync("GetWOData", new object[] { + request}, this.GetWODataOperationCompleted, userState); + } + + private void OnGetWODataOperationCompleted(object arg) { + if ((this.GetWODataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetWODataCompleted(this, new GetWODataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetWOIssueDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetWOIssueData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetWOIssueData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetWOIssueData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetWOIssueData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetWOIssueData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetWOIssueDataAsync(string request) { + this.GetWOIssueDataAsync(request, null); + } + + /// + public void GetWOIssueDataAsync(string request, object userState) { + if ((this.GetWOIssueDataOperationCompleted == null)) { + this.GetWOIssueDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetWOIssueDataOperationCompleted); + } + this.InvokeAsync("GetWOIssueData", new object[] { + request}, this.GetWOIssueDataOperationCompleted, userState); + } + + private void OnGetWOIssueDataOperationCompleted(object arg) { + if ((this.GetWOIssueDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetWOIssueDataCompleted(this, new GetWOIssueDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetWOStockQtyRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetWOStockQty([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetWOStockQty", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetWOStockQty(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetWOStockQty", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetWOStockQty(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetWOStockQtyAsync(string request) { + this.GetWOStockQtyAsync(request, null); + } + + /// + public void GetWOStockQtyAsync(string request, object userState) { + if ((this.GetWOStockQtyOperationCompleted == null)) { + this.GetWOStockQtyOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetWOStockQtyOperationCompleted); + } + this.InvokeAsync("GetWOStockQty", new object[] { + request}, this.GetWOStockQtyOperationCompleted, userState); + } + + private void OnGetWOStockQtyOperationCompleted(object arg) { + if ((this.GetWOStockQtyCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetWOStockQtyCompleted(this, new GetWOStockQtyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="UpdateCountingLabelDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string UpdateCountingLabelData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("UpdateCountingLabelData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginUpdateCountingLabelData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("UpdateCountingLabelData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndUpdateCountingLabelData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void UpdateCountingLabelDataAsync(string request) { + this.UpdateCountingLabelDataAsync(request, null); + } + + /// + public void UpdateCountingLabelDataAsync(string request, object userState) { + if ((this.UpdateCountingLabelDataOperationCompleted == null)) { + this.UpdateCountingLabelDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateCountingLabelDataOperationCompleted); + } + this.InvokeAsync("UpdateCountingLabelData", new object[] { + request}, this.UpdateCountingLabelDataOperationCompleted, userState); + } + + private void OnUpdateCountingLabelDataOperationCompleted(object arg) { + if ((this.UpdateCountingLabelDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.UpdateCountingLabelDataCompleted(this, new UpdateCountingLabelDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="UpdateWOIssueDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string UpdateWOIssueData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("UpdateWOIssueData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginUpdateWOIssueData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("UpdateWOIssueData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndUpdateWOIssueData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void UpdateWOIssueDataAsync(string request) { + this.UpdateWOIssueDataAsync(request, null); + } + + /// + public void UpdateWOIssueDataAsync(string request, object userState) { + if ((this.UpdateWOIssueDataOperationCompleted == null)) { + this.UpdateWOIssueDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateWOIssueDataOperationCompleted); + } + this.InvokeAsync("UpdateWOIssueData", new object[] { + request}, this.UpdateWOIssueDataOperationCompleted, userState); + } + + private void OnUpdateWOIssueDataOperationCompleted(object arg) { + if ((this.UpdateWOIssueDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.UpdateWOIssueDataCompleted(this, new UpdateWOIssueDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateSalesReturnRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateSalesReturn([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateSalesReturn", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateSalesReturn(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateSalesReturn", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateSalesReturn(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateSalesReturnAsync(string request) { + this.CreateSalesReturnAsync(request, null); + } + + /// + public void CreateSalesReturnAsync(string request, object userState) { + if ((this.CreateSalesReturnOperationCompleted == null)) { + this.CreateSalesReturnOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateSalesReturnOperationCompleted); + } + this.InvokeAsync("CreateSalesReturn", new object[] { + request}, this.CreateSalesReturnOperationCompleted, userState); + } + + private void OnCreateSalesReturnOperationCompleted(object arg) { + if ((this.CreateSalesReturnCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateSalesReturnCompleted(this, new CreateSalesReturnCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateShippingOrderRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateShippingOrder([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateShippingOrder", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateShippingOrder(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateShippingOrder", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateShippingOrder(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateShippingOrderAsync(string request) { + this.CreateShippingOrderAsync(request, null); + } + + /// + public void CreateShippingOrderAsync(string request, object userState) { + if ((this.CreateShippingOrderOperationCompleted == null)) { + this.CreateShippingOrderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateShippingOrderOperationCompleted); + } + this.InvokeAsync("CreateShippingOrder", new object[] { + request}, this.CreateShippingOrderOperationCompleted, userState); + } + + private void OnCreateShippingOrderOperationCompleted(object arg) { + if ((this.CreateShippingOrderCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateShippingOrderCompleted(this, new CreateShippingOrderCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateTransferNoteRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateTransferNote([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateTransferNote", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateTransferNote(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateTransferNote", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateTransferNote(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateTransferNoteAsync(string request) { + this.CreateTransferNoteAsync(request, null); + } + + /// + public void CreateTransferNoteAsync(string request, object userState) { + if ((this.CreateTransferNoteOperationCompleted == null)) { + this.CreateTransferNoteOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateTransferNoteOperationCompleted); + } + this.InvokeAsync("CreateTransferNote", new object[] { + request}, this.CreateTransferNoteOperationCompleted, userState); + } + + private void OnCreateTransferNoteOperationCompleted(object arg) { + if ((this.CreateTransferNoteCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateTransferNoteCompleted(this, new CreateTransferNoteCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetQtyConversionRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetQtyConversion([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetQtyConversion", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetQtyConversion(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetQtyConversion", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetQtyConversion(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetQtyConversionAsync(string request) { + this.GetQtyConversionAsync(request, null); + } + + /// + public void GetQtyConversionAsync(string request, object userState) { + if ((this.GetQtyConversionOperationCompleted == null)) { + this.GetQtyConversionOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetQtyConversionOperationCompleted); + } + this.InvokeAsync("GetQtyConversion", new object[] { + request}, this.GetQtyConversionOperationCompleted, userState); + } + + private void OnGetQtyConversionOperationCompleted(object arg) { + if ((this.GetQtyConversionCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetQtyConversionCompleted(this, new GetQtyConversionCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetShippingNoticeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetShippingNoticeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetShippingNoticeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetShippingNoticeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetShippingNoticeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetShippingNoticeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetShippingNoticeDataAsync(string request) { + this.GetShippingNoticeDataAsync(request, null); + } + + /// + public void GetShippingNoticeDataAsync(string request, object userState) { + if ((this.GetShippingNoticeDataOperationCompleted == null)) { + this.GetShippingNoticeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetShippingNoticeDataOperationCompleted); + } + this.InvokeAsync("GetShippingNoticeData", new object[] { + request}, this.GetShippingNoticeDataOperationCompleted, userState); + } + + private void OnGetShippingNoticeDataOperationCompleted(object arg) { + if ((this.GetShippingNoticeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetShippingNoticeDataCompleted(this, new GetShippingNoticeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetShippingOrderDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetShippingOrderData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetShippingOrderData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetShippingOrderData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetShippingOrderData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetShippingOrderData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetShippingOrderDataAsync(string request) { + this.GetShippingOrderDataAsync(request, null); + } + + /// + public void GetShippingOrderDataAsync(string request, object userState) { + if ((this.GetShippingOrderDataOperationCompleted == null)) { + this.GetShippingOrderDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetShippingOrderDataOperationCompleted); + } + this.InvokeAsync("GetShippingOrderData", new object[] { + request}, this.GetShippingOrderDataOperationCompleted, userState); + } + + private void OnGetShippingOrderDataOperationCompleted(object arg) { + if ((this.GetShippingOrderDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetShippingOrderDataCompleted(this, new GetShippingOrderDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreatePOReceivingDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreatePOReceivingData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreatePOReceivingData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreatePOReceivingData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreatePOReceivingData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreatePOReceivingData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreatePOReceivingDataAsync(string request) { + this.CreatePOReceivingDataAsync(request, null); + } + + /// + public void CreatePOReceivingDataAsync(string request, object userState) { + if ((this.CreatePOReceivingDataOperationCompleted == null)) { + this.CreatePOReceivingDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePOReceivingDataOperationCompleted); + } + this.InvokeAsync("CreatePOReceivingData", new object[] { + request}, this.CreatePOReceivingDataOperationCompleted, userState); + } + + private void OnCreatePOReceivingDataOperationCompleted(object arg) { + if ((this.CreatePOReceivingDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreatePOReceivingDataCompleted(this, new CreatePOReceivingDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetSalesDocumentRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetSalesDocument([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetSalesDocument", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetSalesDocument(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetSalesDocument", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetSalesDocument(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetSalesDocumentAsync(string request) { + this.GetSalesDocumentAsync(request, null); + } + + /// + public void GetSalesDocumentAsync(string request, object userState) { + if ((this.GetSalesDocumentOperationCompleted == null)) { + this.GetSalesDocumentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSalesDocumentOperationCompleted); + } + this.InvokeAsync("GetSalesDocument", new object[] { + request}, this.GetSalesDocumentOperationCompleted, userState); + } + + private void OnGetSalesDocumentOperationCompleted(object arg) { + if ((this.GetSalesDocumentCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetSalesDocumentCompleted(this, new GetSalesDocumentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateMISCIssueDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateMISCIssueData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateMISCIssueData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateMISCIssueData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateMISCIssueData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateMISCIssueData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateMISCIssueDataAsync(string request) { + this.CreateMISCIssueDataAsync(request, null); + } + + /// + public void CreateMISCIssueDataAsync(string request, object userState) { + if ((this.CreateMISCIssueDataOperationCompleted == null)) { + this.CreateMISCIssueDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateMISCIssueDataOperationCompleted); + } + this.InvokeAsync("CreateMISCIssueData", new object[] { + request}, this.CreateMISCIssueDataOperationCompleted, userState); + } + + private void OnCreateMISCIssueDataOperationCompleted(object arg) { + if ((this.CreateMISCIssueDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateMISCIssueDataCompleted(this, new CreateMISCIssueDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateStockDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateStockData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateStockData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateStockData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateStockData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateStockData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateStockDataAsync(string request) { + this.CreateStockDataAsync(request, null); + } + + /// + public void CreateStockDataAsync(string request, object userState) { + if ((this.CreateStockDataOperationCompleted == null)) { + this.CreateStockDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateStockDataOperationCompleted); + } + this.InvokeAsync("CreateStockData", new object[] { + request}, this.CreateStockDataOperationCompleted, userState); + } + + private void OnCreateStockDataOperationCompleted(object arg) { + if ((this.CreateStockDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateStockDataCompleted(this, new CreateStockDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateBOMMasterDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateBOMMasterData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateBOMMasterData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateBOMMasterData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateBOMMasterData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateBOMMasterData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateBOMMasterDataAsync(string request) { + this.CreateBOMMasterDataAsync(request, null); + } + + /// + public void CreateBOMMasterDataAsync(string request, object userState) { + if ((this.CreateBOMMasterDataOperationCompleted == null)) { + this.CreateBOMMasterDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateBOMMasterDataOperationCompleted); + } + this.InvokeAsync("CreateBOMMasterData", new object[] { + request}, this.CreateBOMMasterDataOperationCompleted, userState); + } + + private void OnCreateBOMMasterDataOperationCompleted(object arg) { + if ((this.CreateBOMMasterDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateBOMMasterDataCompleted(this, new CreateBOMMasterDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="TIPTOPGateWayRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string TIPTOPGateWay([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("TIPTOPGateWay", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginTIPTOPGateWay(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("TIPTOPGateWay", new object[] { + request}, callback, asyncState); + } + + /// + public string EndTIPTOPGateWay(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void TIPTOPGateWayAsync(string request) { + this.TIPTOPGateWayAsync(request, null); + } + + /// + public void TIPTOPGateWayAsync(string request, object userState) { + if ((this.TIPTOPGateWayOperationCompleted == null)) { + this.TIPTOPGateWayOperationCompleted = new System.Threading.SendOrPostCallback(this.OnTIPTOPGateWayOperationCompleted); + } + this.InvokeAsync("TIPTOPGateWay", new object[] { + request}, this.TIPTOPGateWayOperationCompleted, userState); + } + + private void OnTIPTOPGateWayOperationCompleted(object arg) { + if ((this.TIPTOPGateWayCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.TIPTOPGateWayCompleted(this, new TIPTOPGateWayCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateBOMDetailDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateBOMDetailData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateBOMDetailData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateBOMDetailData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateBOMDetailData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateBOMDetailData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateBOMDetailDataAsync(string request) { + this.CreateBOMDetailDataAsync(request, null); + } + + /// + public void CreateBOMDetailDataAsync(string request, object userState) { + if ((this.CreateBOMDetailDataOperationCompleted == null)) { + this.CreateBOMDetailDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateBOMDetailDataOperationCompleted); + } + this.InvokeAsync("CreateBOMDetailData", new object[] { + request}, this.CreateBOMDetailDataOperationCompleted, userState); + } + + private void OnCreateBOMDetailDataOperationCompleted(object arg) { + if ((this.CreateBOMDetailDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateBOMDetailDataCompleted(this, new CreateBOMDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateDepartmentDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateDepartmentData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateDepartmentData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateDepartmentData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateDepartmentData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateDepartmentData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateDepartmentDataAsync(string request) { + this.CreateDepartmentDataAsync(request, null); + } + + /// + public void CreateDepartmentDataAsync(string request, object userState) { + if ((this.CreateDepartmentDataOperationCompleted == null)) { + this.CreateDepartmentDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateDepartmentDataOperationCompleted); + } + this.InvokeAsync("CreateDepartmentData", new object[] { + request}, this.CreateDepartmentDataOperationCompleted, userState); + } + + private void OnCreateDepartmentDataOperationCompleted(object arg) { + if ((this.CreateDepartmentDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateDepartmentDataCompleted(this, new CreateDepartmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="RunCommandRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string RunCommand([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("RunCommand", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginRunCommand(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("RunCommand", new object[] { + request}, callback, asyncState); + } + + /// + public string EndRunCommand(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void RunCommandAsync(string request) { + this.RunCommandAsync(request, null); + } + + /// + public void RunCommandAsync(string request, object userState) { + if ((this.RunCommandOperationCompleted == null)) { + this.RunCommandOperationCompleted = new System.Threading.SendOrPostCallback(this.OnRunCommandOperationCompleted); + } + this.InvokeAsync("RunCommand", new object[] { + request}, this.RunCommandOperationCompleted, userState); + } + + private void OnRunCommandOperationCompleted(object arg) { + if ((this.RunCommandCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.RunCommandCompleted(this, new RunCommandCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="EboGetCustDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string EboGetCustData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("EboGetCustData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginEboGetCustData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EboGetCustData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndEboGetCustData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void EboGetCustDataAsync(string request) { + this.EboGetCustDataAsync(request, null); + } + + /// + public void EboGetCustDataAsync(string request, object userState) { + if ((this.EboGetCustDataOperationCompleted == null)) { + this.EboGetCustDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEboGetCustDataOperationCompleted); + } + this.InvokeAsync("EboGetCustData", new object[] { + request}, this.EboGetCustDataOperationCompleted, userState); + } + + private void OnEboGetCustDataOperationCompleted(object arg) { + if ((this.EboGetCustDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EboGetCustDataCompleted(this, new EboGetCustDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="EboGetOrderDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string EboGetOrderData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("EboGetOrderData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginEboGetOrderData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EboGetOrderData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndEboGetOrderData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void EboGetOrderDataAsync(string request) { + this.EboGetOrderDataAsync(request, null); + } + + /// + public void EboGetOrderDataAsync(string request, object userState) { + if ((this.EboGetOrderDataOperationCompleted == null)) { + this.EboGetOrderDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEboGetOrderDataOperationCompleted); + } + this.InvokeAsync("EboGetOrderData", new object[] { + request}, this.EboGetOrderDataOperationCompleted, userState); + } + + private void OnEboGetOrderDataOperationCompleted(object arg) { + if ((this.EboGetOrderDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EboGetOrderDataCompleted(this, new EboGetOrderDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="EboGetProdDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string EboGetProdData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("EboGetProdData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginEboGetProdData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("EboGetProdData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndEboGetProdData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void EboGetProdDataAsync(string request) { + this.EboGetProdDataAsync(request, null); + } + + /// + public void EboGetProdDataAsync(string request, object userState) { + if ((this.EboGetProdDataOperationCompleted == null)) { + this.EboGetProdDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnEboGetProdDataOperationCompleted); + } + this.InvokeAsync("EboGetProdData", new object[] { + request}, this.EboGetProdDataOperationCompleted, userState); + } + + private void OnEboGetProdDataOperationCompleted(object arg) { + if ((this.EboGetProdDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.EboGetProdDataCompleted(this, new EboGetProdDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CheckApsExecutionRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CheckApsExecution([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CheckApsExecution", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCheckApsExecution(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CheckApsExecution", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCheckApsExecution(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CheckApsExecutionAsync(string request) { + this.CheckApsExecutionAsync(request, null); + } + + /// + public void CheckApsExecutionAsync(string request, object userState) { + if ((this.CheckApsExecutionOperationCompleted == null)) { + this.CheckApsExecutionOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckApsExecutionOperationCompleted); + } + this.InvokeAsync("CheckApsExecution", new object[] { + request}, this.CheckApsExecutionOperationCompleted, userState); + } + + private void OnCheckApsExecutionOperationCompleted(object arg) { + if ((this.CheckApsExecutionCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CheckApsExecutionCompleted(this, new CheckApsExecutionCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCustomerContactDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCustomerContactData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCustomerContactData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCustomerContactData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCustomerContactData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCustomerContactData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCustomerContactDataAsync(string request) { + this.GetCustomerContactDataAsync(request, null); + } + + /// + public void GetCustomerContactDataAsync(string request, object userState) { + if ((this.GetCustomerContactDataOperationCompleted == null)) { + this.GetCustomerContactDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCustomerContactDataOperationCompleted); + } + this.InvokeAsync("GetCustomerContactData", new object[] { + request}, this.GetCustomerContactDataOperationCompleted, userState); + } + + private void OnGetCustomerContactDataOperationCompleted(object arg) { + if ((this.GetCustomerContactDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCustomerContactDataCompleted(this, new GetCustomerContactDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPackingMethodDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPackingMethodData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPackingMethodData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPackingMethodData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPackingMethodData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPackingMethodData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPackingMethodDataAsync(string request) { + this.GetPackingMethodDataAsync(request, null); + } + + /// + public void GetPackingMethodDataAsync(string request, object userState) { + if ((this.GetPackingMethodDataOperationCompleted == null)) { + this.GetPackingMethodDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPackingMethodDataOperationCompleted); + } + this.InvokeAsync("GetPackingMethodData", new object[] { + request}, this.GetPackingMethodDataOperationCompleted, userState); + } + + private void OnGetPackingMethodDataOperationCompleted(object arg) { + if ((this.GetPackingMethodDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPackingMethodDataCompleted(this, new GetPackingMethodDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreatePotentialCustomerDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreatePotentialCustomerData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreatePotentialCustomerData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreatePotentialCustomerData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreatePotentialCustomerData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreatePotentialCustomerData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreatePotentialCustomerDataAsync(string request) { + this.CreatePotentialCustomerDataAsync(request, null); + } + + /// + public void CreatePotentialCustomerDataAsync(string request, object userState) { + if ((this.CreatePotentialCustomerDataOperationCompleted == null)) { + this.CreatePotentialCustomerDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePotentialCustomerDataOperationCompleted); + } + this.InvokeAsync("CreatePotentialCustomerData", new object[] { + request}, this.CreatePotentialCustomerDataOperationCompleted, userState); + } + + private void OnCreatePotentialCustomerDataOperationCompleted(object arg) { + if ((this.CreatePotentialCustomerDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreatePotentialCustomerDataCompleted(this, new CreatePotentialCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetTaxTypeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetTaxTypeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetTaxTypeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetTaxTypeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetTaxTypeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetTaxTypeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetTaxTypeDataAsync(string request) { + this.GetTaxTypeDataAsync(request, null); + } + + /// + public void GetTaxTypeDataAsync(string request, object userState) { + if ((this.GetTaxTypeDataOperationCompleted == null)) { + this.GetTaxTypeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetTaxTypeDataOperationCompleted); + } + this.InvokeAsync("GetTaxTypeData", new object[] { + request}, this.GetTaxTypeDataOperationCompleted, userState); + } + + private void OnGetTaxTypeDataOperationCompleted(object arg) { + if ((this.GetTaxTypeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetTaxTypeDataCompleted(this, new GetTaxTypeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetUnitConversionDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetUnitConversionData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetUnitConversionData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetUnitConversionData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetUnitConversionData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetUnitConversionData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetUnitConversionDataAsync(string request) { + this.GetUnitConversionDataAsync(request, null); + } + + /// + public void GetUnitConversionDataAsync(string request, object userState) { + if ((this.GetUnitConversionDataOperationCompleted == null)) { + this.GetUnitConversionDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUnitConversionDataOperationCompleted); + } + this.InvokeAsync("GetUnitConversionData", new object[] { + request}, this.GetUnitConversionDataOperationCompleted, userState); + } + + private void OnGetUnitConversionDataOperationCompleted(object arg) { + if ((this.GetUnitConversionDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetUnitConversionDataCompleted(this, new GetUnitConversionDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetMFGSettingSmaDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetMFGSettingSmaData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetMFGSettingSmaData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMFGSettingSmaData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMFGSettingSmaData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetMFGSettingSmaData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetMFGSettingSmaDataAsync(string request) { + this.GetMFGSettingSmaDataAsync(request, null); + } + + /// + public void GetMFGSettingSmaDataAsync(string request, object userState) { + if ((this.GetMFGSettingSmaDataOperationCompleted == null)) { + this.GetMFGSettingSmaDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMFGSettingSmaDataOperationCompleted); + } + this.InvokeAsync("GetMFGSettingSmaData", new object[] { + request}, this.GetMFGSettingSmaDataOperationCompleted, userState); + } + + private void OnGetMFGSettingSmaDataOperationCompleted(object arg) { + if ((this.GetMFGSettingSmaDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMFGSettingSmaDataCompleted(this, new GetMFGSettingSmaDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetCustomerOtheraddressDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetCustomerOtheraddressData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetCustomerOtheraddressData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetCustomerOtheraddressData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetCustomerOtheraddressData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetCustomerOtheraddressData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetCustomerOtheraddressDataAsync(string request) { + this.GetCustomerOtheraddressDataAsync(request, null); + } + + /// + public void GetCustomerOtheraddressDataAsync(string request, object userState) { + if ((this.GetCustomerOtheraddressDataOperationCompleted == null)) { + this.GetCustomerOtheraddressDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCustomerOtheraddressDataOperationCompleted); + } + this.InvokeAsync("GetCustomerOtheraddressData", new object[] { + request}, this.GetCustomerOtheraddressDataOperationCompleted, userState); + } + + private void OnGetCustomerOtheraddressDataOperationCompleted(object arg) { + if ((this.GetCustomerOtheraddressDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetCustomerOtheraddressDataCompleted(this, new GetCustomerOtheraddressDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateCustomerContactDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateCustomerContactData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateCustomerContactData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateCustomerContactData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateCustomerContactData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateCustomerContactData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateCustomerContactDataAsync(string request) { + this.CreateCustomerContactDataAsync(request, null); + } + + /// + public void CreateCustomerContactDataAsync(string request, object userState) { + if ((this.CreateCustomerContactDataOperationCompleted == null)) { + this.CreateCustomerContactDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateCustomerContactDataOperationCompleted); + } + this.InvokeAsync("CreateCustomerContactData", new object[] { + request}, this.CreateCustomerContactDataOperationCompleted, userState); + } + + private void OnCreateCustomerContactDataOperationCompleted(object arg) { + if ((this.CreateCustomerContactDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateCustomerContactDataCompleted(this, new CreateCustomerContactDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateCustomerOtheraddressDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateCustomerOtheraddressData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateCustomerOtheraddressData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateCustomerOtheraddressData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateCustomerOtheraddressData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateCustomerOtheraddressData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateCustomerOtheraddressDataAsync(string request) { + this.CreateCustomerOtheraddressDataAsync(request, null); + } + + /// + public void CreateCustomerOtheraddressDataAsync(string request, object userState) { + if ((this.CreateCustomerOtheraddressDataOperationCompleted == null)) { + this.CreateCustomerOtheraddressDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateCustomerOtheraddressDataOperationCompleted); + } + this.InvokeAsync("CreateCustomerOtheraddressData", new object[] { + request}, this.CreateCustomerOtheraddressDataOperationCompleted, userState); + } + + private void OnCreateCustomerOtheraddressDataOperationCompleted(object arg) { + if ((this.CreateCustomerOtheraddressDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateCustomerOtheraddressDataCompleted(this, new CreateCustomerOtheraddressDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetPotentialCustomerDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetPotentialCustomerData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetPotentialCustomerData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetPotentialCustomerData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetPotentialCustomerData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetPotentialCustomerData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetPotentialCustomerDataAsync(string request) { + this.GetPotentialCustomerDataAsync(request, null); + } + + /// + public void GetPotentialCustomerDataAsync(string request, object userState) { + if ((this.GetPotentialCustomerDataOperationCompleted == null)) { + this.GetPotentialCustomerDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPotentialCustomerDataOperationCompleted); + } + this.InvokeAsync("GetPotentialCustomerData", new object[] { + request}, this.GetPotentialCustomerDataOperationCompleted, userState); + } + + private void OnGetPotentialCustomerDataOperationCompleted(object arg) { + if ((this.GetPotentialCustomerDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetPotentialCustomerDataCompleted(this, new GetPotentialCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CRMGetCustomerDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CRMGetCustomerData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CRMGetCustomerData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCRMGetCustomerData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CRMGetCustomerData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCRMGetCustomerData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CRMGetCustomerDataAsync(string request) { + this.CRMGetCustomerDataAsync(request, null); + } + + /// + public void CRMGetCustomerDataAsync(string request, object userState) { + if ((this.CRMGetCustomerDataOperationCompleted == null)) { + this.CRMGetCustomerDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCRMGetCustomerDataOperationCompleted); + } + this.InvokeAsync("CRMGetCustomerData", new object[] { + request}, this.CRMGetCustomerDataOperationCompleted, userState); + } + + private void OnCRMGetCustomerDataOperationCompleted(object arg) { + if ((this.CRMGetCustomerDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CRMGetCustomerDataCompleted(this, new CRMGetCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetTableAmendmentDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetTableAmendmentData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetTableAmendmentData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetTableAmendmentData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetTableAmendmentData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetTableAmendmentData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetTableAmendmentDataAsync(string request) { + this.GetTableAmendmentDataAsync(request, null); + } + + /// + public void GetTableAmendmentDataAsync(string request, object userState) { + if ((this.GetTableAmendmentDataOperationCompleted == null)) { + this.GetTableAmendmentDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetTableAmendmentDataOperationCompleted); + } + this.InvokeAsync("GetTableAmendmentData", new object[] { + request}, this.GetTableAmendmentDataOperationCompleted, userState); + } + + private void OnGetTableAmendmentDataOperationCompleted(object arg) { + if ((this.GetTableAmendmentDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetTableAmendmentDataCompleted(this, new GetTableAmendmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetReportDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetReportData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetReportData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetReportData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetReportData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetReportData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetReportDataAsync(string request) { + this.GetReportDataAsync(request, null); + } + + /// + public void GetReportDataAsync(string request, object userState) { + if ((this.GetReportDataOperationCompleted == null)) { + this.GetReportDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetReportDataOperationCompleted); + } + this.InvokeAsync("GetReportData", new object[] { + request}, this.GetReportDataOperationCompleted, userState); + } + + private void OnGetReportDataOperationCompleted(object arg) { + if ((this.GetReportDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetReportDataCompleted(this, new GetReportDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAccountTypeDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAccountTypeData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAccountTypeData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAccountTypeData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAccountTypeData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAccountTypeData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAccountTypeDataAsync(string request) { + this.GetAccountTypeDataAsync(request, null); + } + + /// + public void GetAccountTypeDataAsync(string request, object userState) { + if ((this.GetAccountTypeDataOperationCompleted == null)) { + this.GetAccountTypeDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAccountTypeDataOperationCompleted); + } + this.InvokeAsync("GetAccountTypeData", new object[] { + request}, this.GetAccountTypeDataOperationCompleted, userState); + } + + private void OnGetAccountTypeDataOperationCompleted(object arg) { + if ((this.GetAccountTypeDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAccountTypeDataCompleted(this, new GetAccountTypeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetAccountDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetAccountData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetAccountData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetAccountData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetAccountData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetAccountData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetAccountDataAsync(string request) { + this.GetAccountDataAsync(request, null); + } + + /// + public void GetAccountDataAsync(string request, object userState) { + if ((this.GetAccountDataOperationCompleted == null)) { + this.GetAccountDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAccountDataOperationCompleted); + } + this.InvokeAsync("GetAccountData", new object[] { + request}, this.GetAccountDataOperationCompleted, userState); + } + + private void OnGetAccountDataOperationCompleted(object arg) { + if ((this.GetAccountDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetAccountDataCompleted(this, new GetAccountDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateVoucherDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateVoucherData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateVoucherData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateVoucherData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateVoucherData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateVoucherData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateVoucherDataAsync(string request) { + this.CreateVoucherDataAsync(request, null); + } + + /// + public void CreateVoucherDataAsync(string request, object userState) { + if ((this.CreateVoucherDataOperationCompleted == null)) { + this.CreateVoucherDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateVoucherDataOperationCompleted); + } + this.InvokeAsync("CreateVoucherData", new object[] { + request}, this.CreateVoucherDataOperationCompleted, userState); + } + + private void OnCreateVoucherDataOperationCompleted(object arg) { + if ((this.CreateVoucherDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateVoucherDataCompleted(this, new CreateVoucherDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetVoucherDocumentDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetVoucherDocumentData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetVoucherDocumentData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetVoucherDocumentData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetVoucherDocumentData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetVoucherDocumentData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetVoucherDocumentDataAsync(string request) { + this.GetVoucherDocumentDataAsync(request, null); + } + + /// + public void GetVoucherDocumentDataAsync(string request, object userState) { + if ((this.GetVoucherDocumentDataOperationCompleted == null)) { + this.GetVoucherDocumentDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetVoucherDocumentDataOperationCompleted); + } + this.InvokeAsync("GetVoucherDocumentData", new object[] { + request}, this.GetVoucherDocumentDataOperationCompleted, userState); + } + + private void OnGetVoucherDocumentDataOperationCompleted(object arg) { + if ((this.GetVoucherDocumentDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetVoucherDocumentDataCompleted(this, new GetVoucherDocumentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetTransactionCategoryRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetTransactionCategory([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetTransactionCategory", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetTransactionCategory(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetTransactionCategory", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetTransactionCategory(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetTransactionCategoryAsync(string request) { + this.GetTransactionCategoryAsync(request, null); + } + + /// + public void GetTransactionCategoryAsync(string request, object userState) { + if ((this.GetTransactionCategoryOperationCompleted == null)) { + this.GetTransactionCategoryOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetTransactionCategoryOperationCompleted); + } + this.InvokeAsync("GetTransactionCategory", new object[] { + request}, this.GetTransactionCategoryOperationCompleted, userState); + } + + private void OnGetTransactionCategoryOperationCompleted(object arg) { + if ((this.GetTransactionCategoryCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetTransactionCategoryCompleted(this, new GetTransactionCategoryCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateBillingAPRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateBillingAP([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateBillingAP", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateBillingAP(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateBillingAP", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateBillingAP(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateBillingAPAsync(string request) { + this.CreateBillingAPAsync(request, null); + } + + /// + public void CreateBillingAPAsync(string request, object userState) { + if ((this.CreateBillingAPOperationCompleted == null)) { + this.CreateBillingAPOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateBillingAPOperationCompleted); + } + this.InvokeAsync("CreateBillingAP", new object[] { + request}, this.CreateBillingAPOperationCompleted, userState); + } + + private void OnCreateBillingAPOperationCompleted(object arg) { + if ((this.CreateBillingAPCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateBillingAPCompleted(this, new CreateBillingAPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetItemGroupDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetItemGroupData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetItemGroupData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetItemGroupData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetItemGroupData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetItemGroupData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetItemGroupDataAsync(string request) { + this.GetItemGroupDataAsync(request, null); + } + + /// + public void GetItemGroupDataAsync(string request, object userState) { + if ((this.GetItemGroupDataOperationCompleted == null)) { + this.GetItemGroupDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetItemGroupDataOperationCompleted); + } + this.InvokeAsync("GetItemGroupData", new object[] { + request}, this.GetItemGroupDataOperationCompleted, userState); + } + + private void OnGetItemGroupDataOperationCompleted(object arg) { + if ((this.GetItemGroupDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetItemGroupDataCompleted(this, new GetItemGroupDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetMachineDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetMachineData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetMachineData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMachineData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMachineData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetMachineData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetMachineDataAsync(string request) { + this.GetMachineDataAsync(request, null); + } + + /// + public void GetMachineDataAsync(string request, object userState) { + if ((this.GetMachineDataOperationCompleted == null)) { + this.GetMachineDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMachineDataOperationCompleted); + } + this.InvokeAsync("GetMachineData", new object[] { + request}, this.GetMachineDataOperationCompleted, userState); + } + + private void OnGetMachineDataOperationCompleted(object arg) { + if ((this.GetMachineDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMachineDataCompleted(this, new GetMachineDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetProdRoutingDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetProdRoutingData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetProdRoutingData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetProdRoutingData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetProdRoutingData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetProdRoutingData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetProdRoutingDataAsync(string request) { + this.GetProdRoutingDataAsync(request, null); + } + + /// + public void GetProdRoutingDataAsync(string request, object userState) { + if ((this.GetProdRoutingDataOperationCompleted == null)) { + this.GetProdRoutingDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetProdRoutingDataOperationCompleted); + } + this.InvokeAsync("GetProdRoutingData", new object[] { + request}, this.GetProdRoutingDataOperationCompleted, userState); + } + + private void OnGetProdRoutingDataOperationCompleted(object arg) { + if ((this.GetProdRoutingDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetProdRoutingDataCompleted(this, new GetProdRoutingDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetWorkstationDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetWorkstationData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetWorkstationData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetWorkstationData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetWorkstationData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetWorkstationData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetWorkstationDataAsync(string request) { + this.GetWorkstationDataAsync(request, null); + } + + /// + public void GetWorkstationDataAsync(string request, object userState) { + if ((this.GetWorkstationDataOperationCompleted == null)) { + this.GetWorkstationDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetWorkstationDataOperationCompleted); + } + this.InvokeAsync("GetWorkstationData", new object[] { + request}, this.GetWorkstationDataOperationCompleted, userState); + } + + private void OnGetWorkstationDataOperationCompleted(object arg) { + if ((this.GetWorkstationDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetWorkstationDataCompleted(this, new GetWorkstationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="RollbackVoucherDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string RollbackVoucherData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("RollbackVoucherData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginRollbackVoucherData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("RollbackVoucherData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndRollbackVoucherData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void RollbackVoucherDataAsync(string request) { + this.RollbackVoucherDataAsync(request, null); + } + + /// + public void RollbackVoucherDataAsync(string request, object userState) { + if ((this.RollbackVoucherDataOperationCompleted == null)) { + this.RollbackVoucherDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnRollbackVoucherDataOperationCompleted); + } + this.InvokeAsync("RollbackVoucherData", new object[] { + request}, this.RollbackVoucherDataOperationCompleted, userState); + } + + private void OnRollbackVoucherDataOperationCompleted(object arg) { + if ((this.RollbackVoucherDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.RollbackVoucherDataCompleted(this, new RollbackVoucherDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateRepSubPBOMDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateRepSubPBOMData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateRepSubPBOMData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateRepSubPBOMData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateRepSubPBOMData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateRepSubPBOMData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateRepSubPBOMDataAsync(string request) { + this.CreateRepSubPBOMDataAsync(request, null); + } + + /// + public void CreateRepSubPBOMDataAsync(string request, object userState) { + if ((this.CreateRepSubPBOMDataOperationCompleted == null)) { + this.CreateRepSubPBOMDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateRepSubPBOMDataOperationCompleted); + } + this.InvokeAsync("CreateRepSubPBOMData", new object[] { + request}, this.CreateRepSubPBOMDataOperationCompleted, userState); + } + + private void OnCreateRepSubPBOMDataOperationCompleted(object arg) { + if ((this.CreateRepSubPBOMDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateRepSubPBOMDataCompleted(this, new CreateRepSubPBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateSupplierItemDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateSupplierItemData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateSupplierItemData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateSupplierItemData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateSupplierItemData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateSupplierItemData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateSupplierItemDataAsync(string request) { + this.CreateSupplierItemDataAsync(request, null); + } + + /// + public void CreateSupplierItemDataAsync(string request, object userState) { + if ((this.CreateSupplierItemDataOperationCompleted == null)) { + this.CreateSupplierItemDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateSupplierItemDataOperationCompleted); + } + this.InvokeAsync("CreateSupplierItemData", new object[] { + request}, this.CreateSupplierItemDataOperationCompleted, userState); + } + + private void OnCreateSupplierItemDataOperationCompleted(object arg) { + if ((this.CreateSupplierItemDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateSupplierItemDataCompleted(this, new CreateSupplierItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateECNDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateECNData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateECNData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateECNData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateECNData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateECNData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateECNDataAsync(string request) { + this.CreateECNDataAsync(request, null); + } + + /// + public void CreateECNDataAsync(string request, object userState) { + if ((this.CreateECNDataOperationCompleted == null)) { + this.CreateECNDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateECNDataOperationCompleted); + } + this.InvokeAsync("CreateECNData", new object[] { + request}, this.CreateECNDataOperationCompleted, userState); + } + + private void OnCreateECNDataOperationCompleted(object arg) { + if ((this.CreateECNDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateECNDataCompleted(this, new CreateECNDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="GetBrandDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string GetBrandData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("GetBrandData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginGetBrandData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetBrandData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndGetBrandData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void GetBrandDataAsync(string request) { + this.GetBrandDataAsync(request, null); + } + + /// + public void GetBrandDataAsync(string request, object userState) { + if ((this.GetBrandDataOperationCompleted == null)) { + this.GetBrandDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetBrandDataOperationCompleted); + } + this.InvokeAsync("GetBrandData", new object[] { + request}, this.GetBrandDataOperationCompleted, userState); + } + + private void OnGetBrandDataOperationCompleted(object arg) { + if ((this.GetBrandDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetBrandDataCompleted(this, new GetBrandDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateItemApprovalDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateItemApprovalData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateItemApprovalData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateItemApprovalData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateItemApprovalData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateItemApprovalData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateItemApprovalDataAsync(string request) { + this.CreateItemApprovalDataAsync(request, null); + } + + /// + public void CreateItemApprovalDataAsync(string request, object userState) { + if ((this.CreateItemApprovalDataOperationCompleted == null)) { + this.CreateItemApprovalDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateItemApprovalDataOperationCompleted); + } + this.InvokeAsync("CreateItemApprovalData", new object[] { + request}, this.CreateItemApprovalDataOperationCompleted, userState); + } + + private void OnCreateItemApprovalDataOperationCompleted(object arg) { + if ((this.CreateItemApprovalDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateItemApprovalDataCompleted(this, new CreateItemApprovalDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestElementName="CreateWOWorkReportDataRequest", RequestNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace="http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + [return: System.Xml.Serialization.XmlElementAttribute("response", IsNullable=true)] + public string CreateWOWorkReportData([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string request) { + object[] results = this.Invoke("CreateWOWorkReportData", new object[] { + request}); + return ((string)(results[0])); + } + + /// + public System.IAsyncResult BeginCreateWOWorkReportData(string request, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("CreateWOWorkReportData", new object[] { + request}, callback, asyncState); + } + + /// + public string EndCreateWOWorkReportData(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((string)(results[0])); + } + + /// + public void CreateWOWorkReportDataAsync(string request) { + this.CreateWOWorkReportDataAsync(request, null); + } + + /// + public void CreateWOWorkReportDataAsync(string request, object userState) { + if ((this.CreateWOWorkReportDataOperationCompleted == null)) { + this.CreateWOWorkReportDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateWOWorkReportDataOperationCompleted); + } + this.InvokeAsync("CreateWOWorkReportData", new object[] { + request}, this.CreateWOWorkReportDataOperationCompleted, userState); + } + + private void OnCreateWOWorkReportDataOperationCompleted(object arg) { + if ((this.CreateWOWorkReportDataCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.CreateWOWorkReportDataCompleted(this, new CreateWOWorkReportDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + public new void CancelAsync(object userState) { + base.CancelAsync(userState); + } + + private bool IsLocalFileSystemWebService(string url) { + if (((url == null) + || (url == string.Empty))) { + return false; + } + System.Uri wsUri = new System.Uri(url); + if (((wsUri.Port >= 1024) + && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { + return true; + } + return false; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateCustomerDataCompletedEventHandler(object sender, CreateCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateCustomerDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateCustomerDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateQuotationDataCompletedEventHandler(object sender, CreateQuotationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateQuotationDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateQuotationDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetItemDataCompletedEventHandler(object sender, GetItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetItemDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetItemDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetBOMDataCompletedEventHandler(object sender, GetBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetBOMDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetBOMDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetDocumentNumberCompletedEventHandler(object sender, GetDocumentNumberCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetDocumentNumberCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetDocumentNumberCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateItemMasterDataCompletedEventHandler(object sender, CreateItemMasterDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateItemMasterDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateItemMasterDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateVendorDataCompletedEventHandler(object sender, CreateVendorDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateVendorDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateVendorDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateEmployeeDataCompletedEventHandler(object sender, CreateEmployeeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateEmployeeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateEmployeeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateAddressDataCompletedEventHandler(object sender, CreateAddressDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateAddressDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateAddressDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAccountSubjectDataCompletedEventHandler(object sender, GetAccountSubjectDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAccountSubjectDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAccountSubjectDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAxmDocumentCompletedEventHandler(object sender, GetAxmDocumentCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAxmDocumentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAxmDocumentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAreaListCompletedEventHandler(object sender, GetAreaListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAreaListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAreaListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCostGroupDataCompletedEventHandler(object sender, GetCostGroupDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCostGroupDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCostGroupDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCountryDataCompletedEventHandler(object sender, GetCountryDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCountryDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCountryDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCountryListCompletedEventHandler(object sender, GetCountryListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCountryListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCountryListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCurrencyDataCompletedEventHandler(object sender, GetCurrencyDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCurrencyDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCurrencyDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCurrencyListCompletedEventHandler(object sender, GetCurrencyListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCurrencyListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCurrencyListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCustListCompletedEventHandler(object sender, GetCustListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCustListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCustListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCustomerDataCompletedEventHandler(object sender, GetCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCustomerDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCustomerDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCustomerProductDataCompletedEventHandler(object sender, GetCustomerProductDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCustomerProductDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCustomerProductDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetDepartmentDataCompletedEventHandler(object sender, GetDepartmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetDepartmentDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetDepartmentDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetDepartmentListCompletedEventHandler(object sender, GetDepartmentListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetDepartmentListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetDepartmentListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetEmployeeDataCompletedEventHandler(object sender, GetEmployeeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetEmployeeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetEmployeeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetEmployeeListCompletedEventHandler(object sender, GetEmployeeListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetEmployeeListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetEmployeeListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetItemListCompletedEventHandler(object sender, GetItemListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetItemListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetItemListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetOrganizationListCompletedEventHandler(object sender, GetOrganizationListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetOrganizationListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetOrganizationListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetOverdueAmtRankingDataCompletedEventHandler(object sender, GetOverdueAmtRankingDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetOverdueAmtRankingDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetOverdueAmtRankingDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetProdClassListCompletedEventHandler(object sender, GetProdClassListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetProdClassListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetProdClassListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSalesDetailDataCompletedEventHandler(object sender, GetSalesDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSalesDetailDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSalesDetailDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSalesStatisticsDataCompletedEventHandler(object sender, GetSalesStatisticsDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSalesStatisticsDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSalesStatisticsDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSOInfoDataCompletedEventHandler(object sender, GetSOInfoDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSOInfoDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSOInfoDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSOInfoDetailDataCompletedEventHandler(object sender, GetSOInfoDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSOInfoDetailDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSOInfoDetailDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSupplierDataCompletedEventHandler(object sender, GetSupplierDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSupplierDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSupplierDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSupplierItemDataCompletedEventHandler(object sender, GetSupplierItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSupplierItemDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSupplierItemDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetOverdueAmtDetailDataCompletedEventHandler(object sender, GetOverdueAmtDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetOverdueAmtDetailDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetOverdueAmtDetailDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetMonthListCompletedEventHandler(object sender, GetMonthListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMonthListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMonthListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetInspectionDataCompletedEventHandler(object sender, GetInspectionDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetInspectionDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetInspectionDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateBOMDataCompletedEventHandler(object sender, CreateBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateBOMDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateBOMDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetOperationDataCompletedEventHandler(object sender, GetOperationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetOperationDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetOperationDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetUnitDataCompletedEventHandler(object sender, GetUnitDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetUnitDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetUnitDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetBasicCodeDataCompletedEventHandler(object sender, GetBasicCodeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetBasicCodeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetBasicCodeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetComponentrepsubDataCompletedEventHandler(object sender, GetComponentrepsubDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetComponentrepsubDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetComponentrepsubDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAreaDataCompletedEventHandler(object sender, GetAreaDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAreaDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAreaDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetWarehouseDataCompletedEventHandler(object sender, GetWarehouseDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetWarehouseDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetWarehouseDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetLocationDataCompletedEventHandler(object sender, GetLocationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetLocationDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetLocationDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetProductClassDataCompletedEventHandler(object sender, GetProductClassDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetProductClassDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetProductClassDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateIssueReturnDataCompletedEventHandler(object sender, CreateIssueReturnDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateIssueReturnDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateIssueReturnDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void createasft5icd2CompletedEventHandler(object sender, createasft5icd2CompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class createasft5icd2CompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal createasft5icd2CompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetUserTokenCompletedEventHandler(object sender, GetUserTokenCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetUserTokenCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetUserTokenCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CheckUserAuthCompletedEventHandler(object sender, CheckUserAuthCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckUserAuthCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckUserAuthCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetMenuDataCompletedEventHandler(object sender, GetMenuDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMenuDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMenuDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CheckExecAuthorizationCompletedEventHandler(object sender, CheckExecAuthorizationCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckExecAuthorizationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckExecAuthorizationCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreatePurchaseStockInCompletedEventHandler(object sender, CreatePurchaseStockInCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreatePurchaseStockInCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreatePurchaseStockInCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreatePurchaseStockOutCompletedEventHandler(object sender, CreatePurchaseStockOutCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreatePurchaseStockOutCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreatePurchaseStockOutCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateWOStockinDataCompletedEventHandler(object sender, CreateWOStockinDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateWOStockinDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateWOStockinDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCountingLabelDataCompletedEventHandler(object sender, GetCountingLabelDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCountingLabelDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCountingLabelDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetFQCDataCompletedEventHandler(object sender, GetFQCDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetFQCDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetFQCDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetItemStockListCompletedEventHandler(object sender, GetItemStockListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetItemStockListCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetItemStockListCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetLabelTypeDataCompletedEventHandler(object sender, GetLabelTypeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetLabelTypeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetLabelTypeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetMFGDocumentCompletedEventHandler(object sender, GetMFGDocumentCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMFGDocumentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMFGDocumentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPODataCompletedEventHandler(object sender, GetPODataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPODataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPODataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPOReceivingInDataCompletedEventHandler(object sender, GetPOReceivingInDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPOReceivingInDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPOReceivingInDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPOReceivingOutDataCompletedEventHandler(object sender, GetPOReceivingOutDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPOReceivingOutDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPOReceivingOutDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPurchaseStockInQtyCompletedEventHandler(object sender, GetPurchaseStockInQtyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPurchaseStockInQtyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPurchaseStockInQtyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPurchaseStockOutQtyCompletedEventHandler(object sender, GetPurchaseStockOutQtyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPurchaseStockOutQtyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPurchaseStockOutQtyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetReasonCodeCompletedEventHandler(object sender, GetReasonCodeCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetReasonCodeCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetReasonCodeCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetReceivingQtyCompletedEventHandler(object sender, GetReceivingQtyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetReceivingQtyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetReceivingQtyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetStockDataCompletedEventHandler(object sender, GetStockDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetStockDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetStockDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetWODataCompletedEventHandler(object sender, GetWODataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetWODataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetWODataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetWOIssueDataCompletedEventHandler(object sender, GetWOIssueDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetWOIssueDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetWOIssueDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetWOStockQtyCompletedEventHandler(object sender, GetWOStockQtyCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetWOStockQtyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetWOStockQtyCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void UpdateCountingLabelDataCompletedEventHandler(object sender, UpdateCountingLabelDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class UpdateCountingLabelDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal UpdateCountingLabelDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void UpdateWOIssueDataCompletedEventHandler(object sender, UpdateWOIssueDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class UpdateWOIssueDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal UpdateWOIssueDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateSalesReturnCompletedEventHandler(object sender, CreateSalesReturnCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateSalesReturnCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateSalesReturnCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateShippingOrderCompletedEventHandler(object sender, CreateShippingOrderCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateShippingOrderCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateShippingOrderCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateTransferNoteCompletedEventHandler(object sender, CreateTransferNoteCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateTransferNoteCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateTransferNoteCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetQtyConversionCompletedEventHandler(object sender, GetQtyConversionCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetQtyConversionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetQtyConversionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetShippingNoticeDataCompletedEventHandler(object sender, GetShippingNoticeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetShippingNoticeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetShippingNoticeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetShippingOrderDataCompletedEventHandler(object sender, GetShippingOrderDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetShippingOrderDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetShippingOrderDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreatePOReceivingDataCompletedEventHandler(object sender, CreatePOReceivingDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreatePOReceivingDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreatePOReceivingDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetSalesDocumentCompletedEventHandler(object sender, GetSalesDocumentCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetSalesDocumentCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetSalesDocumentCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateMISCIssueDataCompletedEventHandler(object sender, CreateMISCIssueDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateMISCIssueDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateMISCIssueDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateStockDataCompletedEventHandler(object sender, CreateStockDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateStockDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateStockDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateBOMMasterDataCompletedEventHandler(object sender, CreateBOMMasterDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateBOMMasterDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateBOMMasterDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void TIPTOPGateWayCompletedEventHandler(object sender, TIPTOPGateWayCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class TIPTOPGateWayCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal TIPTOPGateWayCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateBOMDetailDataCompletedEventHandler(object sender, CreateBOMDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateBOMDetailDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateBOMDetailDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateDepartmentDataCompletedEventHandler(object sender, CreateDepartmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateDepartmentDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateDepartmentDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void RunCommandCompletedEventHandler(object sender, RunCommandCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class RunCommandCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal RunCommandCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void EboGetCustDataCompletedEventHandler(object sender, EboGetCustDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class EboGetCustDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal EboGetCustDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void EboGetOrderDataCompletedEventHandler(object sender, EboGetOrderDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class EboGetOrderDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal EboGetOrderDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void EboGetProdDataCompletedEventHandler(object sender, EboGetProdDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class EboGetProdDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal EboGetProdDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CheckApsExecutionCompletedEventHandler(object sender, CheckApsExecutionCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CheckApsExecutionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CheckApsExecutionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCustomerContactDataCompletedEventHandler(object sender, GetCustomerContactDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCustomerContactDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCustomerContactDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPackingMethodDataCompletedEventHandler(object sender, GetPackingMethodDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPackingMethodDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPackingMethodDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreatePotentialCustomerDataCompletedEventHandler(object sender, CreatePotentialCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreatePotentialCustomerDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreatePotentialCustomerDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetTaxTypeDataCompletedEventHandler(object sender, GetTaxTypeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetTaxTypeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetTaxTypeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetUnitConversionDataCompletedEventHandler(object sender, GetUnitConversionDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetUnitConversionDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetUnitConversionDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetMFGSettingSmaDataCompletedEventHandler(object sender, GetMFGSettingSmaDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMFGSettingSmaDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMFGSettingSmaDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetCustomerOtheraddressDataCompletedEventHandler(object sender, GetCustomerOtheraddressDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetCustomerOtheraddressDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetCustomerOtheraddressDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateCustomerContactDataCompletedEventHandler(object sender, CreateCustomerContactDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateCustomerContactDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateCustomerContactDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateCustomerOtheraddressDataCompletedEventHandler(object sender, CreateCustomerOtheraddressDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateCustomerOtheraddressDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateCustomerOtheraddressDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetPotentialCustomerDataCompletedEventHandler(object sender, GetPotentialCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetPotentialCustomerDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetPotentialCustomerDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CRMGetCustomerDataCompletedEventHandler(object sender, CRMGetCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CRMGetCustomerDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CRMGetCustomerDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetTableAmendmentDataCompletedEventHandler(object sender, GetTableAmendmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetTableAmendmentDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetTableAmendmentDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetReportDataCompletedEventHandler(object sender, GetReportDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetReportDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetReportDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAccountTypeDataCompletedEventHandler(object sender, GetAccountTypeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAccountTypeDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAccountTypeDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetAccountDataCompletedEventHandler(object sender, GetAccountDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetAccountDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetAccountDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateVoucherDataCompletedEventHandler(object sender, CreateVoucherDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateVoucherDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateVoucherDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetVoucherDocumentDataCompletedEventHandler(object sender, GetVoucherDocumentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetVoucherDocumentDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetVoucherDocumentDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetTransactionCategoryCompletedEventHandler(object sender, GetTransactionCategoryCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetTransactionCategoryCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetTransactionCategoryCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateBillingAPCompletedEventHandler(object sender, CreateBillingAPCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateBillingAPCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateBillingAPCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetItemGroupDataCompletedEventHandler(object sender, GetItemGroupDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetItemGroupDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetItemGroupDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetMachineDataCompletedEventHandler(object sender, GetMachineDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMachineDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMachineDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetProdRoutingDataCompletedEventHandler(object sender, GetProdRoutingDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetProdRoutingDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetProdRoutingDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetWorkstationDataCompletedEventHandler(object sender, GetWorkstationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetWorkstationDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetWorkstationDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void RollbackVoucherDataCompletedEventHandler(object sender, RollbackVoucherDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class RollbackVoucherDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal RollbackVoucherDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateRepSubPBOMDataCompletedEventHandler(object sender, CreateRepSubPBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateRepSubPBOMDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateRepSubPBOMDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateSupplierItemDataCompletedEventHandler(object sender, CreateSupplierItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateSupplierItemDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateSupplierItemDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateECNDataCompletedEventHandler(object sender, CreateECNDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateECNDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateECNDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void GetBrandDataCompletedEventHandler(object sender, GetBrandDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetBrandDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetBrandDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateItemApprovalDataCompletedEventHandler(object sender, CreateItemApprovalDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateItemApprovalDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateItemApprovalDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + public delegate void CreateWOWorkReportDataCompletedEventHandler(object sender, CreateWOWorkReportDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class CreateWOWorkReportDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal CreateWOWorkReportDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public string Result { + get { + this.RaiseExceptionIfNecessary(); + return ((string)(this.results[0])); + } + } + } +} + +#pragma warning restore 1591 \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.map b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.map new file mode 100644 index 0000000..14aaaf9 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/Reference.map @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/TIPTOPServiceGateWay.wsdl b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/TIPTOPServiceGateWay.wsdl new file mode 100644 index 0000000..d3eaf01 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP/TIPTOPServiceGateWay.wsdl @@ -0,0 +1,3830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.cs new file mode 100644 index 0000000..40eabed --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.cs @@ -0,0 +1,7460 @@ +// ------------------------------------------------------------------------------ +// +// 這段程式碼是由工具產生的。 +// 執行階段版本:4.0.30319.18063 +// +// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, +// 變更將會遺失。 +// +// ------------------------------------------------------------------------------ + + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Web.Services; +using System.Web.Services.Protocols; +using Microsoft.VisualBasic.CompilerServices; + +// +// 原始程式碼已由 Microsoft.VSDesigner 自動產生,版本 4.0.30319.18063。 +// +namespace AutoRunLib.wsERP_TP_RPC +{ + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [WebServiceBinding(Name = "TIPTOPServiceGateWayBind", Namespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public partial class TIPTOPServiceGateWay : SoapHttpClientProtocol + { + + private System.Threading.SendOrPostCallback CRMGetCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback CheckApsExecutionOperationCompleted; + + private System.Threading.SendOrPostCallback CheckUserAuthOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateBillingAPOperationCompleted; + + private System.Threading.SendOrPostCallback CreateCustomerContactDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateCustomerOtheraddressDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateDepartmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateECNDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateEmployeeDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateIssueReturnDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateItemApprovalDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateItemMasterDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateMISCIssueDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePLMBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePLMTempTableDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreatePotentialCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateQuotationDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateRepSubPBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateSalesOrderDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateShippingOrdersWithoutOrdersOperationCompleted; + + private System.Threading.SendOrPostCallback CreateStockInDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateSupplierItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateVoucherDataOperationCompleted; + + private System.Threading.SendOrPostCallback CreateWOWorkReportDataOperationCompleted; + + private System.Threading.SendOrPostCallback DeletePLMTempTableDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAPCategoryAccountCodeOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountSubjectDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAccountTypeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAreaDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetAreaListOperationCompleted; + + private System.Threading.SendOrPostCallback GetAxmDocumentOperationCompleted; + + private System.Threading.SendOrPostCallback GetBOMDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetBrandDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetComponentrepsubDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCostGroupDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCountryDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCountryListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCurrencyDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCurrencyListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustClassificationDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustListOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerContactDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerOtheraddressDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetCustomerProductDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetDepartmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetDepartmentListOperationCompleted; + + private System.Threading.SendOrPostCallback GetDocumentNumberOperationCompleted; + + private System.Threading.SendOrPostCallback GetEmployeeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetEmployeeListOperationCompleted; + + private System.Threading.SendOrPostCallback GetExchangeRateDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetInvoiceTypeListOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemGroupDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemListOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemOtherGroupDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetItemStockListOperationCompleted; + + private System.Threading.SendOrPostCallback GetMFGDocumentOperationCompleted; + + private System.Threading.SendOrPostCallback GetMFGSettingSmaDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMachineDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMemoDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetMonthListOperationCompleted; + + private System.Threading.SendOrPostCallback GetOrganizationListOperationCompleted; + + private System.Threading.SendOrPostCallback GetOverdueAmtDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetOverdueAmtRankingDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPLMTempTableDataStatusOperationCompleted; + + private System.Threading.SendOrPostCallback GetPackingMethodDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPaymentTermsDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetPotentialCustomerDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetProdClassListOperationCompleted; + + private System.Threading.SendOrPostCallback GetProdRoutingDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetProjectWBSDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetReasonCodeOperationCompleted; + + private System.Threading.SendOrPostCallback GetSOInfoDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSOInfoDetailDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSalesStatisticsDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetStockDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSupplierDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetSupplierItemDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTableAmendmentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTaxTypeDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTradeTermDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetTransactionCategoryOperationCompleted; + + private System.Threading.SendOrPostCallback GetUnitConversionDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetUserTokenOperationCompleted; + + private System.Threading.SendOrPostCallback GetVoucherDocumentDataOperationCompleted; + + private System.Threading.SendOrPostCallback GetWorkstationDataOperationCompleted; + + private System.Threading.SendOrPostCallback RollbackBillingAPOperationCompleted; + + private System.Threading.SendOrPostCallback RollbackVoucherDataOperationCompleted; + + private bool useDefaultCredentialsSetExplicitly; + + /// + public TIPTOPServiceGateWay() : base() + { + Url = My.MySettings.Default.AutoRunLib_wsERP_TP_RPC_TIPTOPServiceGateWay; + if (IsLocalFileSystemWebService(Url) == true) + { + UseDefaultCredentials = true; + useDefaultCredentialsSetExplicitly = false; + } + else + { + useDefaultCredentialsSetExplicitly = true; + } + } + + public new string Url + { + get + { + return base.Url; + } + set + { + if (IsLocalFileSystemWebService(base.Url) == true && useDefaultCredentialsSetExplicitly == false && IsLocalFileSystemWebService(value) == false) + + { + base.UseDefaultCredentials = false; + } + base.Url = value; + } + } + + public new bool UseDefaultCredentials + { + get + { + return base.UseDefaultCredentials; + } + set + { + base.UseDefaultCredentials = value; + useDefaultCredentialsSetExplicitly = true; + } + } + + /// + public event CRMGetCustomerDataCompletedEventHandler CRMGetCustomerDataCompleted; + + /// + public event CheckApsExecutionCompletedEventHandler CheckApsExecutionCompleted; + + /// + public event CheckUserAuthCompletedEventHandler CheckUserAuthCompleted; + + /// + public event CreateBOMDataCompletedEventHandler CreateBOMDataCompleted; + + /// + public event CreateBillingAPCompletedEventHandler CreateBillingAPCompleted; + + /// + public event CreateCustomerContactDataCompletedEventHandler CreateCustomerContactDataCompleted; + + /// + public event CreateCustomerDataCompletedEventHandler CreateCustomerDataCompleted; + + /// + public event CreateCustomerOtheraddressDataCompletedEventHandler CreateCustomerOtheraddressDataCompleted; + + /// + public event CreateDepartmentDataCompletedEventHandler CreateDepartmentDataCompleted; + + /// + public event CreateECNDataCompletedEventHandler CreateECNDataCompleted; + + /// + public event CreateEmployeeDataCompletedEventHandler CreateEmployeeDataCompleted; + + /// + public event CreateIssueReturnDataCompletedEventHandler CreateIssueReturnDataCompleted; + + /// + public event CreateItemApprovalDataCompletedEventHandler CreateItemApprovalDataCompleted; + + /// + public event CreateItemMasterDataCompletedEventHandler CreateItemMasterDataCompleted; + + /// + public event CreateMISCIssueDataCompletedEventHandler CreateMISCIssueDataCompleted; + + /// + public event CreatePLMBOMDataCompletedEventHandler CreatePLMBOMDataCompleted; + + /// + public event CreatePLMTempTableDataCompletedEventHandler CreatePLMTempTableDataCompleted; + + /// + public event CreatePotentialCustomerDataCompletedEventHandler CreatePotentialCustomerDataCompleted; + + /// + public event CreateQuotationDataCompletedEventHandler CreateQuotationDataCompleted; + + /// + public event CreateRepSubPBOMDataCompletedEventHandler CreateRepSubPBOMDataCompleted; + + /// + public event CreateSalesOrderDataCompletedEventHandler CreateSalesOrderDataCompleted; + + /// + public event CreateShippingOrdersWithoutOrdersCompletedEventHandler CreateShippingOrdersWithoutOrdersCompleted; + + /// + public event CreateStockInDataCompletedEventHandler CreateStockInDataCompleted; + + /// + public event CreateSupplierItemDataCompletedEventHandler CreateSupplierItemDataCompleted; + + /// + public event CreateVoucherDataCompletedEventHandler CreateVoucherDataCompleted; + + /// + public event CreateWOWorkReportDataCompletedEventHandler CreateWOWorkReportDataCompleted; + + /// + public event DeletePLMTempTableDataCompletedEventHandler DeletePLMTempTableDataCompleted; + + /// + public event GetAPCategoryAccountCodeCompletedEventHandler GetAPCategoryAccountCodeCompleted; + + /// + public event GetAccountDataCompletedEventHandler GetAccountDataCompleted; + + /// + public event GetAccountSubjectDataCompletedEventHandler GetAccountSubjectDataCompleted; + + /// + public event GetAccountTypeDataCompletedEventHandler GetAccountTypeDataCompleted; + + /// + public event GetAreaDataCompletedEventHandler GetAreaDataCompleted; + + /// + public event GetAreaListCompletedEventHandler GetAreaListCompleted; + + /// + public event GetAxmDocumentCompletedEventHandler GetAxmDocumentCompleted; + + /// + public event GetBOMDataCompletedEventHandler GetBOMDataCompleted; + + /// + public event GetBrandDataCompletedEventHandler GetBrandDataCompleted; + + /// + public event GetComponentrepsubDataCompletedEventHandler GetComponentrepsubDataCompleted; + + /// + public event GetCostGroupDataCompletedEventHandler GetCostGroupDataCompleted; + + /// + public event GetCountryDataCompletedEventHandler GetCountryDataCompleted; + + /// + public event GetCountryListCompletedEventHandler GetCountryListCompleted; + + /// + public event GetCurrencyDataCompletedEventHandler GetCurrencyDataCompleted; + + /// + public event GetCurrencyListCompletedEventHandler GetCurrencyListCompleted; + + /// + public event GetCustClassificationDataCompletedEventHandler GetCustClassificationDataCompleted; + + /// + public event GetCustListCompletedEventHandler GetCustListCompleted; + + /// + public event GetCustomerContactDataCompletedEventHandler GetCustomerContactDataCompleted; + + /// + public event GetCustomerDataCompletedEventHandler GetCustomerDataCompleted; + + /// + public event GetCustomerOtheraddressDataCompletedEventHandler GetCustomerOtheraddressDataCompleted; + + /// + public event GetCustomerProductDataCompletedEventHandler GetCustomerProductDataCompleted; + + /// + public event GetDepartmentDataCompletedEventHandler GetDepartmentDataCompleted; + + /// + public event GetDepartmentListCompletedEventHandler GetDepartmentListCompleted; + + /// + public event GetDocumentNumberCompletedEventHandler GetDocumentNumberCompleted; + + /// + public event GetEmployeeDataCompletedEventHandler GetEmployeeDataCompleted; + + /// + public event GetEmployeeListCompletedEventHandler GetEmployeeListCompleted; + + /// + public event GetExchangeRateDataCompletedEventHandler GetExchangeRateDataCompleted; + + /// + public event GetInvoiceTypeListCompletedEventHandler GetInvoiceTypeListCompleted; + + /// + public event GetItemDataCompletedEventHandler GetItemDataCompleted; + + /// + public event GetItemGroupDataCompletedEventHandler GetItemGroupDataCompleted; + + /// + public event GetItemListCompletedEventHandler GetItemListCompleted; + + /// + public event GetItemOtherGroupDataCompletedEventHandler GetItemOtherGroupDataCompleted; + + /// + public event GetItemStockListCompletedEventHandler GetItemStockListCompleted; + + /// + public event GetMFGDocumentCompletedEventHandler GetMFGDocumentCompleted; + + /// + public event GetMFGSettingSmaDataCompletedEventHandler GetMFGSettingSmaDataCompleted; + + /// + public event GetMachineDataCompletedEventHandler GetMachineDataCompleted; + + /// + public event GetMemoDataCompletedEventHandler GetMemoDataCompleted; + + /// + public event GetMonthListCompletedEventHandler GetMonthListCompleted; + + /// + public event GetOrganizationListCompletedEventHandler GetOrganizationListCompleted; + + /// + public event GetOverdueAmtDetailDataCompletedEventHandler GetOverdueAmtDetailDataCompleted; + + /// + public event GetOverdueAmtRankingDataCompletedEventHandler GetOverdueAmtRankingDataCompleted; + + /// + public event GetPLMTempTableDataStatusCompletedEventHandler GetPLMTempTableDataStatusCompleted; + + /// + public event GetPackingMethodDataCompletedEventHandler GetPackingMethodDataCompleted; + + /// + public event GetPaymentTermsDataCompletedEventHandler GetPaymentTermsDataCompleted; + + /// + public event GetPotentialCustomerDataCompletedEventHandler GetPotentialCustomerDataCompleted; + + /// + public event GetProdClassListCompletedEventHandler GetProdClassListCompleted; + + /// + public event GetProdRoutingDataCompletedEventHandler GetProdRoutingDataCompleted; + + /// + public event GetProjectWBSDataCompletedEventHandler GetProjectWBSDataCompleted; + + /// + public event GetReasonCodeCompletedEventHandler GetReasonCodeCompleted; + + /// + public event GetSOInfoDataCompletedEventHandler GetSOInfoDataCompleted; + + /// + public event GetSOInfoDetailDataCompletedEventHandler GetSOInfoDetailDataCompleted; + + /// + public event GetSalesStatisticsDataCompletedEventHandler GetSalesStatisticsDataCompleted; + + /// + public event GetStockDataCompletedEventHandler GetStockDataCompleted; + + /// + public event GetSupplierDataCompletedEventHandler GetSupplierDataCompleted; + + /// + public event GetSupplierItemDataCompletedEventHandler GetSupplierItemDataCompleted; + + /// + public event GetTableAmendmentDataCompletedEventHandler GetTableAmendmentDataCompleted; + + /// + public event GetTaxTypeDataCompletedEventHandler GetTaxTypeDataCompleted; + + /// + public event GetTradeTermDataCompletedEventHandler GetTradeTermDataCompleted; + + /// + public event GetTransactionCategoryCompletedEventHandler GetTransactionCategoryCompleted; + + /// + public event GetUnitConversionDataCompletedEventHandler GetUnitConversionDataCompleted; + + /// + public event GetUserTokenCompletedEventHandler GetUserTokenCompleted; + + /// + public event GetVoucherDocumentDataCompletedEventHandler GetVoucherDocumentDataCompleted; + + /// + public event GetWorkstationDataCompletedEventHandler GetWorkstationDataCompleted; + + /// + public event RollbackBillingAPCompletedEventHandler RollbackBillingAPCompleted; + + /// + public event RollbackVoucherDataCompletedEventHandler RollbackVoucherDataCompleted; + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CRMGetCustomerData(string request) + { + object[] results = Invoke("CRMGetCustomerData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCRMGetCustomerData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CRMGetCustomerData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCRMGetCustomerData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CRMGetCustomerDataAsync(string request) + { + CRMGetCustomerDataAsync(request, null); + } + + /// + public void CRMGetCustomerDataAsync(string request, object userState) + { + if (CRMGetCustomerDataOperationCompleted == null) + { + CRMGetCustomerDataOperationCompleted = OnCRMGetCustomerDataOperationCompleted; + } + InvokeAsync("CRMGetCustomerData", new object[] { request }, CRMGetCustomerDataOperationCompleted, userState); + } + + private void OnCRMGetCustomerDataOperationCompleted(object arg) + { + if (CRMGetCustomerDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CRMGetCustomerDataCompleted?.Invoke(this, new CRMGetCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CheckApsExecution(string request) + { + object[] results = Invoke("CheckApsExecution", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCheckApsExecution(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CheckApsExecution", new object[] { request }, callback, asyncState); + } + + /// + public string EndCheckApsExecution(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CheckApsExecutionAsync(string request) + { + CheckApsExecutionAsync(request, null); + } + + /// + public void CheckApsExecutionAsync(string request, object userState) + { + if (CheckApsExecutionOperationCompleted == null) + { + CheckApsExecutionOperationCompleted = OnCheckApsExecutionOperationCompleted; + } + InvokeAsync("CheckApsExecution", new object[] { request }, CheckApsExecutionOperationCompleted, userState); + } + + private void OnCheckApsExecutionOperationCompleted(object arg) + { + if (CheckApsExecutionCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CheckApsExecutionCompleted?.Invoke(this, new CheckApsExecutionCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CheckUserAuth(string request) + { + object[] results = Invoke("CheckUserAuth", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCheckUserAuth(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CheckUserAuth", new object[] { request }, callback, asyncState); + } + + /// + public string EndCheckUserAuth(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CheckUserAuthAsync(string request) + { + CheckUserAuthAsync(request, null); + } + + /// + public void CheckUserAuthAsync(string request, object userState) + { + if (CheckUserAuthOperationCompleted == null) + { + CheckUserAuthOperationCompleted = OnCheckUserAuthOperationCompleted; + } + InvokeAsync("CheckUserAuth", new object[] { request }, CheckUserAuthOperationCompleted, userState); + } + + private void OnCheckUserAuthOperationCompleted(object arg) + { + if (CheckUserAuthCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CheckUserAuthCompleted?.Invoke(this, new CheckUserAuthCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateBOMData(string request) + { + object[] results = Invoke("CreateBOMData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateBOMData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateBOMData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateBOMData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateBOMDataAsync(string request) + { + CreateBOMDataAsync(request, null); + } + + /// + public void CreateBOMDataAsync(string request, object userState) + { + if (CreateBOMDataOperationCompleted == null) + { + CreateBOMDataOperationCompleted = OnCreateBOMDataOperationCompleted; + } + InvokeAsync("CreateBOMData", new object[] { request }, CreateBOMDataOperationCompleted, userState); + } + + private void OnCreateBOMDataOperationCompleted(object arg) + { + if (CreateBOMDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateBOMDataCompleted?.Invoke(this, new CreateBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateBillingAP(string request) + { + object[] results = Invoke("CreateBillingAP", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateBillingAP(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateBillingAP", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateBillingAP(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateBillingAPAsync(string request) + { + CreateBillingAPAsync(request, null); + } + + /// + public void CreateBillingAPAsync(string request, object userState) + { + if (CreateBillingAPOperationCompleted == null) + { + CreateBillingAPOperationCompleted = OnCreateBillingAPOperationCompleted; + } + InvokeAsync("CreateBillingAP", new object[] { request }, CreateBillingAPOperationCompleted, userState); + } + + private void OnCreateBillingAPOperationCompleted(object arg) + { + if (CreateBillingAPCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateBillingAPCompleted?.Invoke(this, new CreateBillingAPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateCustomerContactData(string request) + { + object[] results = Invoke("CreateCustomerContactData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateCustomerContactData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateCustomerContactData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateCustomerContactData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateCustomerContactDataAsync(string request) + { + CreateCustomerContactDataAsync(request, null); + } + + /// + public void CreateCustomerContactDataAsync(string request, object userState) + { + if (CreateCustomerContactDataOperationCompleted == null) + { + CreateCustomerContactDataOperationCompleted = OnCreateCustomerContactDataOperationCompleted; + } + InvokeAsync("CreateCustomerContactData", new object[] { request }, CreateCustomerContactDataOperationCompleted, userState); + } + + private void OnCreateCustomerContactDataOperationCompleted(object arg) + { + if (CreateCustomerContactDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateCustomerContactDataCompleted?.Invoke(this, new CreateCustomerContactDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateCustomerData(string request) + { + object[] results = Invoke("CreateCustomerData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateCustomerData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateCustomerData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateCustomerData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateCustomerDataAsync(string request) + { + CreateCustomerDataAsync(request, null); + } + + /// + public void CreateCustomerDataAsync(string request, object userState) + { + if (CreateCustomerDataOperationCompleted == null) + { + CreateCustomerDataOperationCompleted = OnCreateCustomerDataOperationCompleted; + } + InvokeAsync("CreateCustomerData", new object[] { request }, CreateCustomerDataOperationCompleted, userState); + } + + private void OnCreateCustomerDataOperationCompleted(object arg) + { + if (CreateCustomerDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateCustomerDataCompleted?.Invoke(this, new CreateCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateCustomerOtheraddressData(string request) + { + object[] results = Invoke("CreateCustomerOtheraddressData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateCustomerOtheraddressData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateCustomerOtheraddressData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateCustomerOtheraddressData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateCustomerOtheraddressDataAsync(string request) + { + CreateCustomerOtheraddressDataAsync(request, null); + } + + /// + public void CreateCustomerOtheraddressDataAsync(string request, object userState) + { + if (CreateCustomerOtheraddressDataOperationCompleted == null) + { + CreateCustomerOtheraddressDataOperationCompleted = OnCreateCustomerOtheraddressDataOperationCompleted; + } + InvokeAsync("CreateCustomerOtheraddressData", new object[] { request }, CreateCustomerOtheraddressDataOperationCompleted, userState); + } + + private void OnCreateCustomerOtheraddressDataOperationCompleted(object arg) + { + if (CreateCustomerOtheraddressDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateCustomerOtheraddressDataCompleted?.Invoke(this, new CreateCustomerOtheraddressDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateDepartmentData(string request) + { + object[] results = Invoke("CreateDepartmentData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateDepartmentData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateDepartmentData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateDepartmentData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateDepartmentDataAsync(string request) + { + CreateDepartmentDataAsync(request, null); + } + + /// + public void CreateDepartmentDataAsync(string request, object userState) + { + if (CreateDepartmentDataOperationCompleted == null) + { + CreateDepartmentDataOperationCompleted = OnCreateDepartmentDataOperationCompleted; + } + InvokeAsync("CreateDepartmentData", new object[] { request }, CreateDepartmentDataOperationCompleted, userState); + } + + private void OnCreateDepartmentDataOperationCompleted(object arg) + { + if (CreateDepartmentDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateDepartmentDataCompleted?.Invoke(this, new CreateDepartmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateECNData(string request) + { + object[] results = Invoke("CreateECNData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateECNData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateECNData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateECNData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateECNDataAsync(string request) + { + CreateECNDataAsync(request, null); + } + + /// + public void CreateECNDataAsync(string request, object userState) + { + if (CreateECNDataOperationCompleted == null) + { + CreateECNDataOperationCompleted = OnCreateECNDataOperationCompleted; + } + InvokeAsync("CreateECNData", new object[] { request }, CreateECNDataOperationCompleted, userState); + } + + private void OnCreateECNDataOperationCompleted(object arg) + { + if (CreateECNDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateECNDataCompleted?.Invoke(this, new CreateECNDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateEmployeeData(string request) + { + object[] results = Invoke("CreateEmployeeData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateEmployeeData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateEmployeeData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateEmployeeData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateEmployeeDataAsync(string request) + { + CreateEmployeeDataAsync(request, null); + } + + /// + public void CreateEmployeeDataAsync(string request, object userState) + { + if (CreateEmployeeDataOperationCompleted == null) + { + CreateEmployeeDataOperationCompleted = OnCreateEmployeeDataOperationCompleted; + } + InvokeAsync("CreateEmployeeData", new object[] { request }, CreateEmployeeDataOperationCompleted, userState); + } + + private void OnCreateEmployeeDataOperationCompleted(object arg) + { + if (CreateEmployeeDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateEmployeeDataCompleted?.Invoke(this, new CreateEmployeeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateIssueReturnData(string request) + { + object[] results = Invoke("CreateIssueReturnData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateIssueReturnData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateIssueReturnData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateIssueReturnData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateIssueReturnDataAsync(string request) + { + CreateIssueReturnDataAsync(request, null); + } + + /// + public void CreateIssueReturnDataAsync(string request, object userState) + { + if (CreateIssueReturnDataOperationCompleted == null) + { + CreateIssueReturnDataOperationCompleted = OnCreateIssueReturnDataOperationCompleted; + } + InvokeAsync("CreateIssueReturnData", new object[] { request }, CreateIssueReturnDataOperationCompleted, userState); + } + + private void OnCreateIssueReturnDataOperationCompleted(object arg) + { + if (CreateIssueReturnDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateIssueReturnDataCompleted?.Invoke(this, new CreateIssueReturnDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateItemApprovalData(string request) + { + object[] results = Invoke("CreateItemApprovalData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateItemApprovalData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateItemApprovalData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateItemApprovalData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateItemApprovalDataAsync(string request) + { + CreateItemApprovalDataAsync(request, null); + } + + /// + public void CreateItemApprovalDataAsync(string request, object userState) + { + if (CreateItemApprovalDataOperationCompleted == null) + { + CreateItemApprovalDataOperationCompleted = OnCreateItemApprovalDataOperationCompleted; + } + InvokeAsync("CreateItemApprovalData", new object[] { request }, CreateItemApprovalDataOperationCompleted, userState); + } + + private void OnCreateItemApprovalDataOperationCompleted(object arg) + { + if (CreateItemApprovalDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateItemApprovalDataCompleted?.Invoke(this, new CreateItemApprovalDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateItemMasterData(string request) + { + object[] results = Invoke("CreateItemMasterData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateItemMasterData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateItemMasterData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateItemMasterData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateItemMasterDataAsync(string request) + { + CreateItemMasterDataAsync(request, null); + } + + /// + public void CreateItemMasterDataAsync(string request, object userState) + { + if (CreateItemMasterDataOperationCompleted == null) + { + CreateItemMasterDataOperationCompleted = OnCreateItemMasterDataOperationCompleted; + } + InvokeAsync("CreateItemMasterData", new object[] { request }, CreateItemMasterDataOperationCompleted, userState); + } + + private void OnCreateItemMasterDataOperationCompleted(object arg) + { + if (CreateItemMasterDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateItemMasterDataCompleted?.Invoke(this, new CreateItemMasterDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateMISCIssueData(string request) + { + object[] results = Invoke("CreateMISCIssueData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateMISCIssueData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateMISCIssueData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateMISCIssueData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateMISCIssueDataAsync(string request) + { + CreateMISCIssueDataAsync(request, null); + } + + /// + public void CreateMISCIssueDataAsync(string request, object userState) + { + if (CreateMISCIssueDataOperationCompleted == null) + { + CreateMISCIssueDataOperationCompleted = OnCreateMISCIssueDataOperationCompleted; + } + InvokeAsync("CreateMISCIssueData", new object[] { request }, CreateMISCIssueDataOperationCompleted, userState); + } + + private void OnCreateMISCIssueDataOperationCompleted(object arg) + { + if (CreateMISCIssueDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateMISCIssueDataCompleted?.Invoke(this, new CreateMISCIssueDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreatePLMBOMData(string request) + { + object[] results = Invoke("CreatePLMBOMData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreatePLMBOMData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreatePLMBOMData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreatePLMBOMData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreatePLMBOMDataAsync(string request) + { + CreatePLMBOMDataAsync(request, null); + } + + /// + public void CreatePLMBOMDataAsync(string request, object userState) + { + if (CreatePLMBOMDataOperationCompleted == null) + { + CreatePLMBOMDataOperationCompleted = OnCreatePLMBOMDataOperationCompleted; + } + InvokeAsync("CreatePLMBOMData", new object[] { request }, CreatePLMBOMDataOperationCompleted, userState); + } + + private void OnCreatePLMBOMDataOperationCompleted(object arg) + { + if (CreatePLMBOMDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreatePLMBOMDataCompleted?.Invoke(this, new CreatePLMBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreatePLMTempTableData(string request) + { + object[] results = Invoke("CreatePLMTempTableData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreatePLMTempTableData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreatePLMTempTableData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreatePLMTempTableData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreatePLMTempTableDataAsync(string request) + { + CreatePLMTempTableDataAsync(request, null); + } + + /// + public void CreatePLMTempTableDataAsync(string request, object userState) + { + if (CreatePLMTempTableDataOperationCompleted == null) + { + CreatePLMTempTableDataOperationCompleted = OnCreatePLMTempTableDataOperationCompleted; + } + InvokeAsync("CreatePLMTempTableData", new object[] { request }, CreatePLMTempTableDataOperationCompleted, userState); + } + + private void OnCreatePLMTempTableDataOperationCompleted(object arg) + { + if (CreatePLMTempTableDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreatePLMTempTableDataCompleted?.Invoke(this, new CreatePLMTempTableDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreatePotentialCustomerData(string request) + { + object[] results = Invoke("CreatePotentialCustomerData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreatePotentialCustomerData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreatePotentialCustomerData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreatePotentialCustomerData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreatePotentialCustomerDataAsync(string request) + { + CreatePotentialCustomerDataAsync(request, null); + } + + /// + public void CreatePotentialCustomerDataAsync(string request, object userState) + { + if (CreatePotentialCustomerDataOperationCompleted == null) + { + CreatePotentialCustomerDataOperationCompleted = OnCreatePotentialCustomerDataOperationCompleted; + } + InvokeAsync("CreatePotentialCustomerData", new object[] { request }, CreatePotentialCustomerDataOperationCompleted, userState); + } + + private void OnCreatePotentialCustomerDataOperationCompleted(object arg) + { + if (CreatePotentialCustomerDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreatePotentialCustomerDataCompleted?.Invoke(this, new CreatePotentialCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateQuotationData(string request) + { + object[] results = Invoke("CreateQuotationData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateQuotationData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateQuotationData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateQuotationData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateQuotationDataAsync(string request) + { + CreateQuotationDataAsync(request, null); + } + + /// + public void CreateQuotationDataAsync(string request, object userState) + { + if (CreateQuotationDataOperationCompleted == null) + { + CreateQuotationDataOperationCompleted = OnCreateQuotationDataOperationCompleted; + } + InvokeAsync("CreateQuotationData", new object[] { request }, CreateQuotationDataOperationCompleted, userState); + } + + private void OnCreateQuotationDataOperationCompleted(object arg) + { + if (CreateQuotationDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateQuotationDataCompleted?.Invoke(this, new CreateQuotationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateRepSubPBOMData(string request) + { + object[] results = Invoke("CreateRepSubPBOMData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateRepSubPBOMData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateRepSubPBOMData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateRepSubPBOMData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateRepSubPBOMDataAsync(string request) + { + CreateRepSubPBOMDataAsync(request, null); + } + + /// + public void CreateRepSubPBOMDataAsync(string request, object userState) + { + if (CreateRepSubPBOMDataOperationCompleted == null) + { + CreateRepSubPBOMDataOperationCompleted = OnCreateRepSubPBOMDataOperationCompleted; + } + InvokeAsync("CreateRepSubPBOMData", new object[] { request }, CreateRepSubPBOMDataOperationCompleted, userState); + } + + private void OnCreateRepSubPBOMDataOperationCompleted(object arg) + { + if (CreateRepSubPBOMDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateRepSubPBOMDataCompleted?.Invoke(this, new CreateRepSubPBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateSalesOrderData(string request) + { + object[] results = Invoke("CreateSalesOrderData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateSalesOrderData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateSalesOrderData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateSalesOrderData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateSalesOrderDataAsync(string request) + { + CreateSalesOrderDataAsync(request, null); + } + + /// + public void CreateSalesOrderDataAsync(string request, object userState) + { + if (CreateSalesOrderDataOperationCompleted == null) + { + CreateSalesOrderDataOperationCompleted = OnCreateSalesOrderDataOperationCompleted; + } + InvokeAsync("CreateSalesOrderData", new object[] { request }, CreateSalesOrderDataOperationCompleted, userState); + } + + private void OnCreateSalesOrderDataOperationCompleted(object arg) + { + if (CreateSalesOrderDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateSalesOrderDataCompleted?.Invoke(this, new CreateSalesOrderDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateShippingOrdersWithoutOrders(string request) + { + object[] results = Invoke("CreateShippingOrdersWithoutOrders", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateShippingOrdersWithoutOrders(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateShippingOrdersWithoutOrders", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateShippingOrdersWithoutOrders(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateShippingOrdersWithoutOrdersAsync(string request) + { + CreateShippingOrdersWithoutOrdersAsync(request, null); + } + + /// + public void CreateShippingOrdersWithoutOrdersAsync(string request, object userState) + { + if (CreateShippingOrdersWithoutOrdersOperationCompleted == null) + { + CreateShippingOrdersWithoutOrdersOperationCompleted = OnCreateShippingOrdersWithoutOrdersOperationCompleted; + } + InvokeAsync("CreateShippingOrdersWithoutOrders", new object[] { request }, CreateShippingOrdersWithoutOrdersOperationCompleted, userState); + } + + private void OnCreateShippingOrdersWithoutOrdersOperationCompleted(object arg) + { + if (CreateShippingOrdersWithoutOrdersCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateShippingOrdersWithoutOrdersCompleted?.Invoke(this, new CreateShippingOrdersWithoutOrdersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateStockInData(string request) + { + object[] results = Invoke("CreateStockInData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateStockInData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateStockInData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateStockInData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateStockInDataAsync(string request) + { + CreateStockInDataAsync(request, null); + } + + /// + public void CreateStockInDataAsync(string request, object userState) + { + if (CreateStockInDataOperationCompleted == null) + { + CreateStockInDataOperationCompleted = OnCreateStockInDataOperationCompleted; + } + InvokeAsync("CreateStockInData", new object[] { request }, CreateStockInDataOperationCompleted, userState); + } + + private void OnCreateStockInDataOperationCompleted(object arg) + { + if (CreateStockInDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateStockInDataCompleted?.Invoke(this, new CreateStockInDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateSupplierItemData(string request) + { + object[] results = Invoke("CreateSupplierItemData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateSupplierItemData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateSupplierItemData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateSupplierItemData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateSupplierItemDataAsync(string request) + { + CreateSupplierItemDataAsync(request, null); + } + + /// + public void CreateSupplierItemDataAsync(string request, object userState) + { + if (CreateSupplierItemDataOperationCompleted == null) + { + CreateSupplierItemDataOperationCompleted = OnCreateSupplierItemDataOperationCompleted; + } + InvokeAsync("CreateSupplierItemData", new object[] { request }, CreateSupplierItemDataOperationCompleted, userState); + } + + private void OnCreateSupplierItemDataOperationCompleted(object arg) + { + if (CreateSupplierItemDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateSupplierItemDataCompleted?.Invoke(this, new CreateSupplierItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateVoucherData(string request) + { + object[] results = Invoke("CreateVoucherData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateVoucherData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateVoucherData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateVoucherData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateVoucherDataAsync(string request) + { + CreateVoucherDataAsync(request, null); + } + + /// + public void CreateVoucherDataAsync(string request, object userState) + { + if (CreateVoucherDataOperationCompleted == null) + { + CreateVoucherDataOperationCompleted = OnCreateVoucherDataOperationCompleted; + } + InvokeAsync("CreateVoucherData", new object[] { request }, CreateVoucherDataOperationCompleted, userState); + } + + private void OnCreateVoucherDataOperationCompleted(object arg) + { + if (CreateVoucherDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateVoucherDataCompleted?.Invoke(this, new CreateVoucherDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string CreateWOWorkReportData(string request) + { + object[] results = Invoke("CreateWOWorkReportData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginCreateWOWorkReportData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("CreateWOWorkReportData", new object[] { request }, callback, asyncState); + } + + /// + public string EndCreateWOWorkReportData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void CreateWOWorkReportDataAsync(string request) + { + CreateWOWorkReportDataAsync(request, null); + } + + /// + public void CreateWOWorkReportDataAsync(string request, object userState) + { + if (CreateWOWorkReportDataOperationCompleted == null) + { + CreateWOWorkReportDataOperationCompleted = OnCreateWOWorkReportDataOperationCompleted; + } + InvokeAsync("CreateWOWorkReportData", new object[] { request }, CreateWOWorkReportDataOperationCompleted, userState); + } + + private void OnCreateWOWorkReportDataOperationCompleted(object arg) + { + if (CreateWOWorkReportDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + CreateWOWorkReportDataCompleted?.Invoke(this, new CreateWOWorkReportDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string DeletePLMTempTableData(string request) + { + object[] results = Invoke("DeletePLMTempTableData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginDeletePLMTempTableData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("DeletePLMTempTableData", new object[] { request }, callback, asyncState); + } + + /// + public string EndDeletePLMTempTableData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void DeletePLMTempTableDataAsync(string request) + { + DeletePLMTempTableDataAsync(request, null); + } + + /// + public void DeletePLMTempTableDataAsync(string request, object userState) + { + if (DeletePLMTempTableDataOperationCompleted == null) + { + DeletePLMTempTableDataOperationCompleted = OnDeletePLMTempTableDataOperationCompleted; + } + InvokeAsync("DeletePLMTempTableData", new object[] { request }, DeletePLMTempTableDataOperationCompleted, userState); + } + + private void OnDeletePLMTempTableDataOperationCompleted(object arg) + { + if (DeletePLMTempTableDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + DeletePLMTempTableDataCompleted?.Invoke(this, new DeletePLMTempTableDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAPCategoryAccountCode(string request) + { + object[] results = Invoke("GetAPCategoryAccountCode", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAPCategoryAccountCode(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAPCategoryAccountCode", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAPCategoryAccountCode(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAPCategoryAccountCodeAsync(string request) + { + GetAPCategoryAccountCodeAsync(request, null); + } + + /// + public void GetAPCategoryAccountCodeAsync(string request, object userState) + { + if (GetAPCategoryAccountCodeOperationCompleted == null) + { + GetAPCategoryAccountCodeOperationCompleted = OnGetAPCategoryAccountCodeOperationCompleted; + } + InvokeAsync("GetAPCategoryAccountCode", new object[] { request }, GetAPCategoryAccountCodeOperationCompleted, userState); + } + + private void OnGetAPCategoryAccountCodeOperationCompleted(object arg) + { + if (GetAPCategoryAccountCodeCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAPCategoryAccountCodeCompleted?.Invoke(this, new GetAPCategoryAccountCodeCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAccountData(string request) + { + object[] results = Invoke("GetAccountData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAccountData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAccountData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAccountData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAccountDataAsync(string request) + { + GetAccountDataAsync(request, null); + } + + /// + public void GetAccountDataAsync(string request, object userState) + { + if (GetAccountDataOperationCompleted == null) + { + GetAccountDataOperationCompleted = OnGetAccountDataOperationCompleted; + } + InvokeAsync("GetAccountData", new object[] { request }, GetAccountDataOperationCompleted, userState); + } + + private void OnGetAccountDataOperationCompleted(object arg) + { + if (GetAccountDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAccountDataCompleted?.Invoke(this, new GetAccountDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAccountSubjectData(string request) + { + object[] results = Invoke("GetAccountSubjectData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAccountSubjectData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAccountSubjectData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAccountSubjectData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAccountSubjectDataAsync(string request) + { + GetAccountSubjectDataAsync(request, null); + } + + /// + public void GetAccountSubjectDataAsync(string request, object userState) + { + if (GetAccountSubjectDataOperationCompleted == null) + { + GetAccountSubjectDataOperationCompleted = OnGetAccountSubjectDataOperationCompleted; + } + InvokeAsync("GetAccountSubjectData", new object[] { request }, GetAccountSubjectDataOperationCompleted, userState); + } + + private void OnGetAccountSubjectDataOperationCompleted(object arg) + { + if (GetAccountSubjectDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAccountSubjectDataCompleted?.Invoke(this, new GetAccountSubjectDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAccountTypeData(string request) + { + object[] results = Invoke("GetAccountTypeData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAccountTypeData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAccountTypeData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAccountTypeData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAccountTypeDataAsync(string request) + { + GetAccountTypeDataAsync(request, null); + } + + /// + public void GetAccountTypeDataAsync(string request, object userState) + { + if (GetAccountTypeDataOperationCompleted == null) + { + GetAccountTypeDataOperationCompleted = OnGetAccountTypeDataOperationCompleted; + } + InvokeAsync("GetAccountTypeData", new object[] { request }, GetAccountTypeDataOperationCompleted, userState); + } + + private void OnGetAccountTypeDataOperationCompleted(object arg) + { + if (GetAccountTypeDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAccountTypeDataCompleted?.Invoke(this, new GetAccountTypeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAreaData(string request) + { + object[] results = Invoke("GetAreaData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAreaData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAreaData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAreaData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAreaDataAsync(string request) + { + GetAreaDataAsync(request, null); + } + + /// + public void GetAreaDataAsync(string request, object userState) + { + if (GetAreaDataOperationCompleted == null) + { + GetAreaDataOperationCompleted = OnGetAreaDataOperationCompleted; + } + InvokeAsync("GetAreaData", new object[] { request }, GetAreaDataOperationCompleted, userState); + } + + private void OnGetAreaDataOperationCompleted(object arg) + { + if (GetAreaDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAreaDataCompleted?.Invoke(this, new GetAreaDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAreaList(string request) + { + object[] results = Invoke("GetAreaList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAreaList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAreaList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAreaList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAreaListAsync(string request) + { + GetAreaListAsync(request, null); + } + + /// + public void GetAreaListAsync(string request, object userState) + { + if (GetAreaListOperationCompleted == null) + { + GetAreaListOperationCompleted = OnGetAreaListOperationCompleted; + } + InvokeAsync("GetAreaList", new object[] { request }, GetAreaListOperationCompleted, userState); + } + + private void OnGetAreaListOperationCompleted(object arg) + { + if (GetAreaListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAreaListCompleted?.Invoke(this, new GetAreaListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetAxmDocument(string request) + { + object[] results = Invoke("GetAxmDocument", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetAxmDocument(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetAxmDocument", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetAxmDocument(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetAxmDocumentAsync(string request) + { + GetAxmDocumentAsync(request, null); + } + + /// + public void GetAxmDocumentAsync(string request, object userState) + { + if (GetAxmDocumentOperationCompleted == null) + { + GetAxmDocumentOperationCompleted = OnGetAxmDocumentOperationCompleted; + } + InvokeAsync("GetAxmDocument", new object[] { request }, GetAxmDocumentOperationCompleted, userState); + } + + private void OnGetAxmDocumentOperationCompleted(object arg) + { + if (GetAxmDocumentCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetAxmDocumentCompleted?.Invoke(this, new GetAxmDocumentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetBOMData(string request) + { + object[] results = Invoke("GetBOMData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetBOMData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetBOMData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetBOMData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetBOMDataAsync(string request) + { + GetBOMDataAsync(request, null); + } + + /// + public void GetBOMDataAsync(string request, object userState) + { + if (GetBOMDataOperationCompleted == null) + { + GetBOMDataOperationCompleted = OnGetBOMDataOperationCompleted; + } + InvokeAsync("GetBOMData", new object[] { request }, GetBOMDataOperationCompleted, userState); + } + + private void OnGetBOMDataOperationCompleted(object arg) + { + if (GetBOMDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetBOMDataCompleted?.Invoke(this, new GetBOMDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetBrandData(string request) + { + object[] results = Invoke("GetBrandData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetBrandData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetBrandData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetBrandData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetBrandDataAsync(string request) + { + GetBrandDataAsync(request, null); + } + + /// + public void GetBrandDataAsync(string request, object userState) + { + if (GetBrandDataOperationCompleted == null) + { + GetBrandDataOperationCompleted = OnGetBrandDataOperationCompleted; + } + InvokeAsync("GetBrandData", new object[] { request }, GetBrandDataOperationCompleted, userState); + } + + private void OnGetBrandDataOperationCompleted(object arg) + { + if (GetBrandDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetBrandDataCompleted?.Invoke(this, new GetBrandDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetComponentrepsubData(string request) + { + object[] results = Invoke("GetComponentrepsubData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetComponentrepsubData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetComponentrepsubData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetComponentrepsubData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetComponentrepsubDataAsync(string request) + { + GetComponentrepsubDataAsync(request, null); + } + + /// + public void GetComponentrepsubDataAsync(string request, object userState) + { + if (GetComponentrepsubDataOperationCompleted == null) + { + GetComponentrepsubDataOperationCompleted = OnGetComponentrepsubDataOperationCompleted; + } + InvokeAsync("GetComponentrepsubData", new object[] { request }, GetComponentrepsubDataOperationCompleted, userState); + } + + private void OnGetComponentrepsubDataOperationCompleted(object arg) + { + if (GetComponentrepsubDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetComponentrepsubDataCompleted?.Invoke(this, new GetComponentrepsubDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCostGroupData(string request) + { + object[] results = Invoke("GetCostGroupData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCostGroupData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCostGroupData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCostGroupData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCostGroupDataAsync(string request) + { + GetCostGroupDataAsync(request, null); + } + + /// + public void GetCostGroupDataAsync(string request, object userState) + { + if (GetCostGroupDataOperationCompleted == null) + { + GetCostGroupDataOperationCompleted = OnGetCostGroupDataOperationCompleted; + } + InvokeAsync("GetCostGroupData", new object[] { request }, GetCostGroupDataOperationCompleted, userState); + } + + private void OnGetCostGroupDataOperationCompleted(object arg) + { + if (GetCostGroupDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCostGroupDataCompleted?.Invoke(this, new GetCostGroupDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCountryData(string request) + { + object[] results = Invoke("GetCountryData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCountryData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCountryData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCountryData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCountryDataAsync(string request) + { + GetCountryDataAsync(request, null); + } + + /// + public void GetCountryDataAsync(string request, object userState) + { + if (GetCountryDataOperationCompleted == null) + { + GetCountryDataOperationCompleted = OnGetCountryDataOperationCompleted; + } + InvokeAsync("GetCountryData", new object[] { request }, GetCountryDataOperationCompleted, userState); + } + + private void OnGetCountryDataOperationCompleted(object arg) + { + if (GetCountryDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCountryDataCompleted?.Invoke(this, new GetCountryDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCountryList(string request) + { + object[] results = Invoke("GetCountryList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCountryList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCountryList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCountryList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCountryListAsync(string request) + { + GetCountryListAsync(request, null); + } + + /// + public void GetCountryListAsync(string request, object userState) + { + if (GetCountryListOperationCompleted == null) + { + GetCountryListOperationCompleted = OnGetCountryListOperationCompleted; + } + InvokeAsync("GetCountryList", new object[] { request }, GetCountryListOperationCompleted, userState); + } + + private void OnGetCountryListOperationCompleted(object arg) + { + if (GetCountryListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCountryListCompleted?.Invoke(this, new GetCountryListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCurrencyData(string request) + { + object[] results = Invoke("GetCurrencyData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCurrencyData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCurrencyData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCurrencyData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCurrencyDataAsync(string request) + { + GetCurrencyDataAsync(request, null); + } + + /// + public void GetCurrencyDataAsync(string request, object userState) + { + if (GetCurrencyDataOperationCompleted == null) + { + GetCurrencyDataOperationCompleted = OnGetCurrencyDataOperationCompleted; + } + InvokeAsync("GetCurrencyData", new object[] { request }, GetCurrencyDataOperationCompleted, userState); + } + + private void OnGetCurrencyDataOperationCompleted(object arg) + { + if (GetCurrencyDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCurrencyDataCompleted?.Invoke(this, new GetCurrencyDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCurrencyList(string request) + { + object[] results = Invoke("GetCurrencyList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCurrencyList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCurrencyList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCurrencyList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCurrencyListAsync(string request) + { + GetCurrencyListAsync(request, null); + } + + /// + public void GetCurrencyListAsync(string request, object userState) + { + if (GetCurrencyListOperationCompleted == null) + { + GetCurrencyListOperationCompleted = OnGetCurrencyListOperationCompleted; + } + InvokeAsync("GetCurrencyList", new object[] { request }, GetCurrencyListOperationCompleted, userState); + } + + private void OnGetCurrencyListOperationCompleted(object arg) + { + if (GetCurrencyListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCurrencyListCompleted?.Invoke(this, new GetCurrencyListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustClassificationData(string request) + { + object[] results = Invoke("GetCustClassificationData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustClassificationData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustClassificationData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustClassificationData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustClassificationDataAsync(string request) + { + GetCustClassificationDataAsync(request, null); + } + + /// + public void GetCustClassificationDataAsync(string request, object userState) + { + if (GetCustClassificationDataOperationCompleted == null) + { + GetCustClassificationDataOperationCompleted = OnGetCustClassificationDataOperationCompleted; + } + InvokeAsync("GetCustClassificationData", new object[] { request }, GetCustClassificationDataOperationCompleted, userState); + } + + private void OnGetCustClassificationDataOperationCompleted(object arg) + { + if (GetCustClassificationDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustClassificationDataCompleted?.Invoke(this, new GetCustClassificationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustList(string request) + { + object[] results = Invoke("GetCustList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustListAsync(string request) + { + GetCustListAsync(request, null); + } + + /// + public void GetCustListAsync(string request, object userState) + { + if (GetCustListOperationCompleted == null) + { + GetCustListOperationCompleted = OnGetCustListOperationCompleted; + } + InvokeAsync("GetCustList", new object[] { request }, GetCustListOperationCompleted, userState); + } + + private void OnGetCustListOperationCompleted(object arg) + { + if (GetCustListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustListCompleted?.Invoke(this, new GetCustListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustomerContactData(string request) + { + object[] results = Invoke("GetCustomerContactData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustomerContactData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustomerContactData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustomerContactData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustomerContactDataAsync(string request) + { + GetCustomerContactDataAsync(request, null); + } + + /// + public void GetCustomerContactDataAsync(string request, object userState) + { + if (GetCustomerContactDataOperationCompleted == null) + { + GetCustomerContactDataOperationCompleted = OnGetCustomerContactDataOperationCompleted; + } + InvokeAsync("GetCustomerContactData", new object[] { request }, GetCustomerContactDataOperationCompleted, userState); + } + + private void OnGetCustomerContactDataOperationCompleted(object arg) + { + if (GetCustomerContactDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustomerContactDataCompleted?.Invoke(this, new GetCustomerContactDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustomerData(string request) + { + object[] results = Invoke("GetCustomerData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustomerData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustomerData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustomerData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustomerDataAsync(string request) + { + GetCustomerDataAsync(request, null); + } + + /// + public void GetCustomerDataAsync(string request, object userState) + { + if (GetCustomerDataOperationCompleted == null) + { + GetCustomerDataOperationCompleted = OnGetCustomerDataOperationCompleted; + } + InvokeAsync("GetCustomerData", new object[] { request }, GetCustomerDataOperationCompleted, userState); + } + + private void OnGetCustomerDataOperationCompleted(object arg) + { + if (GetCustomerDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustomerDataCompleted?.Invoke(this, new GetCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustomerOtheraddressData(string request) + { + object[] results = Invoke("GetCustomerOtheraddressData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustomerOtheraddressData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustomerOtheraddressData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustomerOtheraddressData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustomerOtheraddressDataAsync(string request) + { + GetCustomerOtheraddressDataAsync(request, null); + } + + /// + public void GetCustomerOtheraddressDataAsync(string request, object userState) + { + if (GetCustomerOtheraddressDataOperationCompleted == null) + { + GetCustomerOtheraddressDataOperationCompleted = OnGetCustomerOtheraddressDataOperationCompleted; + } + InvokeAsync("GetCustomerOtheraddressData", new object[] { request }, GetCustomerOtheraddressDataOperationCompleted, userState); + } + + private void OnGetCustomerOtheraddressDataOperationCompleted(object arg) + { + if (GetCustomerOtheraddressDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustomerOtheraddressDataCompleted?.Invoke(this, new GetCustomerOtheraddressDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetCustomerProductData(string request) + { + object[] results = Invoke("GetCustomerProductData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetCustomerProductData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetCustomerProductData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetCustomerProductData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetCustomerProductDataAsync(string request) + { + GetCustomerProductDataAsync(request, null); + } + + /// + public void GetCustomerProductDataAsync(string request, object userState) + { + if (GetCustomerProductDataOperationCompleted == null) + { + GetCustomerProductDataOperationCompleted = OnGetCustomerProductDataOperationCompleted; + } + InvokeAsync("GetCustomerProductData", new object[] { request }, GetCustomerProductDataOperationCompleted, userState); + } + + private void OnGetCustomerProductDataOperationCompleted(object arg) + { + if (GetCustomerProductDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetCustomerProductDataCompleted?.Invoke(this, new GetCustomerProductDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetDepartmentData(string request) + { + object[] results = Invoke("GetDepartmentData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetDepartmentData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetDepartmentData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetDepartmentData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetDepartmentDataAsync(string request) + { + GetDepartmentDataAsync(request, null); + } + + /// + public void GetDepartmentDataAsync(string request, object userState) + { + if (GetDepartmentDataOperationCompleted == null) + { + GetDepartmentDataOperationCompleted = OnGetDepartmentDataOperationCompleted; + } + InvokeAsync("GetDepartmentData", new object[] { request }, GetDepartmentDataOperationCompleted, userState); + } + + private void OnGetDepartmentDataOperationCompleted(object arg) + { + if (GetDepartmentDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetDepartmentDataCompleted?.Invoke(this, new GetDepartmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetDepartmentList(string request) + { + object[] results = Invoke("GetDepartmentList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetDepartmentList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetDepartmentList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetDepartmentList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetDepartmentListAsync(string request) + { + GetDepartmentListAsync(request, null); + } + + /// + public void GetDepartmentListAsync(string request, object userState) + { + if (GetDepartmentListOperationCompleted == null) + { + GetDepartmentListOperationCompleted = OnGetDepartmentListOperationCompleted; + } + InvokeAsync("GetDepartmentList", new object[] { request }, GetDepartmentListOperationCompleted, userState); + } + + private void OnGetDepartmentListOperationCompleted(object arg) + { + if (GetDepartmentListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetDepartmentListCompleted?.Invoke(this, new GetDepartmentListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetDocumentNumber(string request) + { + object[] results = Invoke("GetDocumentNumber", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetDocumentNumber(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetDocumentNumber", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetDocumentNumber(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetDocumentNumberAsync(string request) + { + GetDocumentNumberAsync(request, null); + } + + /// + public void GetDocumentNumberAsync(string request, object userState) + { + if (GetDocumentNumberOperationCompleted == null) + { + GetDocumentNumberOperationCompleted = OnGetDocumentNumberOperationCompleted; + } + InvokeAsync("GetDocumentNumber", new object[] { request }, GetDocumentNumberOperationCompleted, userState); + } + + private void OnGetDocumentNumberOperationCompleted(object arg) + { + if (GetDocumentNumberCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetDocumentNumberCompleted?.Invoke(this, new GetDocumentNumberCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetEmployeeData(string request) + { + object[] results = Invoke("GetEmployeeData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetEmployeeData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetEmployeeData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetEmployeeData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetEmployeeDataAsync(string request) + { + GetEmployeeDataAsync(request, null); + } + + /// + public void GetEmployeeDataAsync(string request, object userState) + { + if (GetEmployeeDataOperationCompleted == null) + { + GetEmployeeDataOperationCompleted = OnGetEmployeeDataOperationCompleted; + } + InvokeAsync("GetEmployeeData", new object[] { request }, GetEmployeeDataOperationCompleted, userState); + } + + private void OnGetEmployeeDataOperationCompleted(object arg) + { + if (GetEmployeeDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetEmployeeDataCompleted?.Invoke(this, new GetEmployeeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetEmployeeList(string request) + { + object[] results = Invoke("GetEmployeeList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetEmployeeList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetEmployeeList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetEmployeeList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetEmployeeListAsync(string request) + { + GetEmployeeListAsync(request, null); + } + + /// + public void GetEmployeeListAsync(string request, object userState) + { + if (GetEmployeeListOperationCompleted == null) + { + GetEmployeeListOperationCompleted = OnGetEmployeeListOperationCompleted; + } + InvokeAsync("GetEmployeeList", new object[] { request }, GetEmployeeListOperationCompleted, userState); + } + + private void OnGetEmployeeListOperationCompleted(object arg) + { + if (GetEmployeeListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetEmployeeListCompleted?.Invoke(this, new GetEmployeeListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetExchangeRateData(string request) + { + object[] results = Invoke("GetExchangeRateData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetExchangeRateData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetExchangeRateData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetExchangeRateData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetExchangeRateDataAsync(string request) + { + GetExchangeRateDataAsync(request, null); + } + + /// + public void GetExchangeRateDataAsync(string request, object userState) + { + if (GetExchangeRateDataOperationCompleted == null) + { + GetExchangeRateDataOperationCompleted = OnGetExchangeRateDataOperationCompleted; + } + InvokeAsync("GetExchangeRateData", new object[] { request }, GetExchangeRateDataOperationCompleted, userState); + } + + private void OnGetExchangeRateDataOperationCompleted(object arg) + { + if (GetExchangeRateDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetExchangeRateDataCompleted?.Invoke(this, new GetExchangeRateDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetInvoiceTypeList(string request) + { + object[] results = Invoke("GetInvoiceTypeList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetInvoiceTypeList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetInvoiceTypeList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetInvoiceTypeList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetInvoiceTypeListAsync(string request) + { + GetInvoiceTypeListAsync(request, null); + } + + /// + public void GetInvoiceTypeListAsync(string request, object userState) + { + if (GetInvoiceTypeListOperationCompleted == null) + { + GetInvoiceTypeListOperationCompleted = OnGetInvoiceTypeListOperationCompleted; + } + InvokeAsync("GetInvoiceTypeList", new object[] { request }, GetInvoiceTypeListOperationCompleted, userState); + } + + private void OnGetInvoiceTypeListOperationCompleted(object arg) + { + if (GetInvoiceTypeListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetInvoiceTypeListCompleted?.Invoke(this, new GetInvoiceTypeListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetItemData(string request) + { + object[] results = Invoke("GetItemData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetItemData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetItemData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetItemData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetItemDataAsync(string request) + { + GetItemDataAsync(request, null); + } + + /// + public void GetItemDataAsync(string request, object userState) + { + if (GetItemDataOperationCompleted == null) + { + GetItemDataOperationCompleted = OnGetItemDataOperationCompleted; + } + InvokeAsync("GetItemData", new object[] { request }, GetItemDataOperationCompleted, userState); + } + + private void OnGetItemDataOperationCompleted(object arg) + { + if (GetItemDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetItemDataCompleted?.Invoke(this, new GetItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetItemGroupData(string request) + { + object[] results = Invoke("GetItemGroupData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetItemGroupData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetItemGroupData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetItemGroupData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetItemGroupDataAsync(string request) + { + GetItemGroupDataAsync(request, null); + } + + /// + public void GetItemGroupDataAsync(string request, object userState) + { + if (GetItemGroupDataOperationCompleted == null) + { + GetItemGroupDataOperationCompleted = OnGetItemGroupDataOperationCompleted; + } + InvokeAsync("GetItemGroupData", new object[] { request }, GetItemGroupDataOperationCompleted, userState); + } + + private void OnGetItemGroupDataOperationCompleted(object arg) + { + if (GetItemGroupDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetItemGroupDataCompleted?.Invoke(this, new GetItemGroupDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetItemList(string request) + { + object[] results = Invoke("GetItemList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetItemList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetItemList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetItemList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetItemListAsync(string request) + { + GetItemListAsync(request, null); + } + + /// + public void GetItemListAsync(string request, object userState) + { + if (GetItemListOperationCompleted == null) + { + GetItemListOperationCompleted = OnGetItemListOperationCompleted; + } + InvokeAsync("GetItemList", new object[] { request }, GetItemListOperationCompleted, userState); + } + + private void OnGetItemListOperationCompleted(object arg) + { + if (GetItemListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetItemListCompleted?.Invoke(this, new GetItemListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetItemOtherGroupData(string request) + { + object[] results = Invoke("GetItemOtherGroupData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetItemOtherGroupData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetItemOtherGroupData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetItemOtherGroupData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetItemOtherGroupDataAsync(string request) + { + GetItemOtherGroupDataAsync(request, null); + } + + /// + public void GetItemOtherGroupDataAsync(string request, object userState) + { + if (GetItemOtherGroupDataOperationCompleted == null) + { + GetItemOtherGroupDataOperationCompleted = OnGetItemOtherGroupDataOperationCompleted; + } + InvokeAsync("GetItemOtherGroupData", new object[] { request }, GetItemOtherGroupDataOperationCompleted, userState); + } + + private void OnGetItemOtherGroupDataOperationCompleted(object arg) + { + if (GetItemOtherGroupDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetItemOtherGroupDataCompleted?.Invoke(this, new GetItemOtherGroupDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetItemStockList(string request) + { + object[] results = Invoke("GetItemStockList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetItemStockList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetItemStockList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetItemStockList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetItemStockListAsync(string request) + { + GetItemStockListAsync(request, null); + } + + /// + public void GetItemStockListAsync(string request, object userState) + { + if (GetItemStockListOperationCompleted == null) + { + GetItemStockListOperationCompleted = OnGetItemStockListOperationCompleted; + } + InvokeAsync("GetItemStockList", new object[] { request }, GetItemStockListOperationCompleted, userState); + } + + private void OnGetItemStockListOperationCompleted(object arg) + { + if (GetItemStockListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetItemStockListCompleted?.Invoke(this, new GetItemStockListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetMFGDocument(string request) + { + object[] results = Invoke("GetMFGDocument", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetMFGDocument(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetMFGDocument", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetMFGDocument(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetMFGDocumentAsync(string request) + { + GetMFGDocumentAsync(request, null); + } + + /// + public void GetMFGDocumentAsync(string request, object userState) + { + if (GetMFGDocumentOperationCompleted == null) + { + GetMFGDocumentOperationCompleted = OnGetMFGDocumentOperationCompleted; + } + InvokeAsync("GetMFGDocument", new object[] { request }, GetMFGDocumentOperationCompleted, userState); + } + + private void OnGetMFGDocumentOperationCompleted(object arg) + { + if (GetMFGDocumentCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetMFGDocumentCompleted?.Invoke(this, new GetMFGDocumentCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetMFGSettingSmaData(string request) + { + object[] results = Invoke("GetMFGSettingSmaData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetMFGSettingSmaData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetMFGSettingSmaData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetMFGSettingSmaData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetMFGSettingSmaDataAsync(string request) + { + GetMFGSettingSmaDataAsync(request, null); + } + + /// + public void GetMFGSettingSmaDataAsync(string request, object userState) + { + if (GetMFGSettingSmaDataOperationCompleted == null) + { + GetMFGSettingSmaDataOperationCompleted = OnGetMFGSettingSmaDataOperationCompleted; + } + InvokeAsync("GetMFGSettingSmaData", new object[] { request }, GetMFGSettingSmaDataOperationCompleted, userState); + } + + private void OnGetMFGSettingSmaDataOperationCompleted(object arg) + { + if (GetMFGSettingSmaDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetMFGSettingSmaDataCompleted?.Invoke(this, new GetMFGSettingSmaDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetMachineData(string request) + { + object[] results = Invoke("GetMachineData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetMachineData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetMachineData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetMachineData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetMachineDataAsync(string request) + { + GetMachineDataAsync(request, null); + } + + /// + public void GetMachineDataAsync(string request, object userState) + { + if (GetMachineDataOperationCompleted == null) + { + GetMachineDataOperationCompleted = OnGetMachineDataOperationCompleted; + } + InvokeAsync("GetMachineData", new object[] { request }, GetMachineDataOperationCompleted, userState); + } + + private void OnGetMachineDataOperationCompleted(object arg) + { + if (GetMachineDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetMachineDataCompleted?.Invoke(this, new GetMachineDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetMemoData(string request) + { + object[] results = Invoke("GetMemoData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetMemoData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetMemoData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetMemoData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetMemoDataAsync(string request) + { + GetMemoDataAsync(request, null); + } + + /// + public void GetMemoDataAsync(string request, object userState) + { + if (GetMemoDataOperationCompleted == null) + { + GetMemoDataOperationCompleted = OnGetMemoDataOperationCompleted; + } + InvokeAsync("GetMemoData", new object[] { request }, GetMemoDataOperationCompleted, userState); + } + + private void OnGetMemoDataOperationCompleted(object arg) + { + if (GetMemoDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetMemoDataCompleted?.Invoke(this, new GetMemoDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetMonthList(string request) + { + object[] results = Invoke("GetMonthList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetMonthList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetMonthList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetMonthList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetMonthListAsync(string request) + { + GetMonthListAsync(request, null); + } + + /// + public void GetMonthListAsync(string request, object userState) + { + if (GetMonthListOperationCompleted == null) + { + GetMonthListOperationCompleted = OnGetMonthListOperationCompleted; + } + InvokeAsync("GetMonthList", new object[] { request }, GetMonthListOperationCompleted, userState); + } + + private void OnGetMonthListOperationCompleted(object arg) + { + if (GetMonthListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetMonthListCompleted?.Invoke(this, new GetMonthListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetOrganizationList(string request) + { + object[] results = Invoke("GetOrganizationList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetOrganizationList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetOrganizationList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetOrganizationList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetOrganizationListAsync(string request) + { + GetOrganizationListAsync(request, null); + } + + /// + public void GetOrganizationListAsync(string request, object userState) + { + if (GetOrganizationListOperationCompleted == null) + { + GetOrganizationListOperationCompleted = OnGetOrganizationListOperationCompleted; + } + InvokeAsync("GetOrganizationList", new object[] { request }, GetOrganizationListOperationCompleted, userState); + } + + private void OnGetOrganizationListOperationCompleted(object arg) + { + if (GetOrganizationListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetOrganizationListCompleted?.Invoke(this, new GetOrganizationListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetOverdueAmtDetailData(string request) + { + object[] results = Invoke("GetOverdueAmtDetailData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetOverdueAmtDetailData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetOverdueAmtDetailData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetOverdueAmtDetailData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetOverdueAmtDetailDataAsync(string request) + { + GetOverdueAmtDetailDataAsync(request, null); + } + + /// + public void GetOverdueAmtDetailDataAsync(string request, object userState) + { + if (GetOverdueAmtDetailDataOperationCompleted == null) + { + GetOverdueAmtDetailDataOperationCompleted = OnGetOverdueAmtDetailDataOperationCompleted; + } + InvokeAsync("GetOverdueAmtDetailData", new object[] { request }, GetOverdueAmtDetailDataOperationCompleted, userState); + } + + private void OnGetOverdueAmtDetailDataOperationCompleted(object arg) + { + if (GetOverdueAmtDetailDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetOverdueAmtDetailDataCompleted?.Invoke(this, new GetOverdueAmtDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetOverdueAmtRankingData(string request) + { + object[] results = Invoke("GetOverdueAmtRankingData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetOverdueAmtRankingData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetOverdueAmtRankingData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetOverdueAmtRankingData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetOverdueAmtRankingDataAsync(string request) + { + GetOverdueAmtRankingDataAsync(request, null); + } + + /// + public void GetOverdueAmtRankingDataAsync(string request, object userState) + { + if (GetOverdueAmtRankingDataOperationCompleted == null) + { + GetOverdueAmtRankingDataOperationCompleted = OnGetOverdueAmtRankingDataOperationCompleted; + } + InvokeAsync("GetOverdueAmtRankingData", new object[] { request }, GetOverdueAmtRankingDataOperationCompleted, userState); + } + + private void OnGetOverdueAmtRankingDataOperationCompleted(object arg) + { + if (GetOverdueAmtRankingDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetOverdueAmtRankingDataCompleted?.Invoke(this, new GetOverdueAmtRankingDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetPLMTempTableDataStatus(string request) + { + object[] results = Invoke("GetPLMTempTableDataStatus", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetPLMTempTableDataStatus(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetPLMTempTableDataStatus", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetPLMTempTableDataStatus(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetPLMTempTableDataStatusAsync(string request) + { + GetPLMTempTableDataStatusAsync(request, null); + } + + /// + public void GetPLMTempTableDataStatusAsync(string request, object userState) + { + if (GetPLMTempTableDataStatusOperationCompleted == null) + { + GetPLMTempTableDataStatusOperationCompleted = OnGetPLMTempTableDataStatusOperationCompleted; + } + InvokeAsync("GetPLMTempTableDataStatus", new object[] { request }, GetPLMTempTableDataStatusOperationCompleted, userState); + } + + private void OnGetPLMTempTableDataStatusOperationCompleted(object arg) + { + if (GetPLMTempTableDataStatusCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetPLMTempTableDataStatusCompleted?.Invoke(this, new GetPLMTempTableDataStatusCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetPackingMethodData(string request) + { + object[] results = Invoke("GetPackingMethodData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetPackingMethodData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetPackingMethodData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetPackingMethodData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetPackingMethodDataAsync(string request) + { + GetPackingMethodDataAsync(request, null); + } + + /// + public void GetPackingMethodDataAsync(string request, object userState) + { + if (GetPackingMethodDataOperationCompleted == null) + { + GetPackingMethodDataOperationCompleted = OnGetPackingMethodDataOperationCompleted; + } + InvokeAsync("GetPackingMethodData", new object[] { request }, GetPackingMethodDataOperationCompleted, userState); + } + + private void OnGetPackingMethodDataOperationCompleted(object arg) + { + if (GetPackingMethodDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetPackingMethodDataCompleted?.Invoke(this, new GetPackingMethodDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetPaymentTermsData(string request) + { + object[] results = Invoke("GetPaymentTermsData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetPaymentTermsData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetPaymentTermsData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetPaymentTermsData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetPaymentTermsDataAsync(string request) + { + GetPaymentTermsDataAsync(request, null); + } + + /// + public void GetPaymentTermsDataAsync(string request, object userState) + { + if (GetPaymentTermsDataOperationCompleted == null) + { + GetPaymentTermsDataOperationCompleted = OnGetPaymentTermsDataOperationCompleted; + } + InvokeAsync("GetPaymentTermsData", new object[] { request }, GetPaymentTermsDataOperationCompleted, userState); + } + + private void OnGetPaymentTermsDataOperationCompleted(object arg) + { + if (GetPaymentTermsDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetPaymentTermsDataCompleted?.Invoke(this, new GetPaymentTermsDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetPotentialCustomerData(string request) + { + object[] results = Invoke("GetPotentialCustomerData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetPotentialCustomerData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetPotentialCustomerData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetPotentialCustomerData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetPotentialCustomerDataAsync(string request) + { + GetPotentialCustomerDataAsync(request, null); + } + + /// + public void GetPotentialCustomerDataAsync(string request, object userState) + { + if (GetPotentialCustomerDataOperationCompleted == null) + { + GetPotentialCustomerDataOperationCompleted = OnGetPotentialCustomerDataOperationCompleted; + } + InvokeAsync("GetPotentialCustomerData", new object[] { request }, GetPotentialCustomerDataOperationCompleted, userState); + } + + private void OnGetPotentialCustomerDataOperationCompleted(object arg) + { + if (GetPotentialCustomerDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetPotentialCustomerDataCompleted?.Invoke(this, new GetPotentialCustomerDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetProdClassList(string request) + { + object[] results = Invoke("GetProdClassList", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetProdClassList(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetProdClassList", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetProdClassList(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetProdClassListAsync(string request) + { + GetProdClassListAsync(request, null); + } + + /// + public void GetProdClassListAsync(string request, object userState) + { + if (GetProdClassListOperationCompleted == null) + { + GetProdClassListOperationCompleted = OnGetProdClassListOperationCompleted; + } + InvokeAsync("GetProdClassList", new object[] { request }, GetProdClassListOperationCompleted, userState); + } + + private void OnGetProdClassListOperationCompleted(object arg) + { + if (GetProdClassListCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetProdClassListCompleted?.Invoke(this, new GetProdClassListCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetProdRoutingData(string request) + { + object[] results = Invoke("GetProdRoutingData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetProdRoutingData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetProdRoutingData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetProdRoutingData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetProdRoutingDataAsync(string request) + { + GetProdRoutingDataAsync(request, null); + } + + /// + public void GetProdRoutingDataAsync(string request, object userState) + { + if (GetProdRoutingDataOperationCompleted == null) + { + GetProdRoutingDataOperationCompleted = OnGetProdRoutingDataOperationCompleted; + } + InvokeAsync("GetProdRoutingData", new object[] { request }, GetProdRoutingDataOperationCompleted, userState); + } + + private void OnGetProdRoutingDataOperationCompleted(object arg) + { + if (GetProdRoutingDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetProdRoutingDataCompleted?.Invoke(this, new GetProdRoutingDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetProjectWBSData(string request) + { + object[] results = Invoke("GetProjectWBSData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetProjectWBSData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetProjectWBSData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetProjectWBSData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetProjectWBSDataAsync(string request) + { + GetProjectWBSDataAsync(request, null); + } + + /// + public void GetProjectWBSDataAsync(string request, object userState) + { + if (GetProjectWBSDataOperationCompleted == null) + { + GetProjectWBSDataOperationCompleted = OnGetProjectWBSDataOperationCompleted; + } + InvokeAsync("GetProjectWBSData", new object[] { request }, GetProjectWBSDataOperationCompleted, userState); + } + + private void OnGetProjectWBSDataOperationCompleted(object arg) + { + if (GetProjectWBSDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetProjectWBSDataCompleted?.Invoke(this, new GetProjectWBSDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetReasonCode(string request) + { + object[] results = Invoke("GetReasonCode", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetReasonCode(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetReasonCode", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetReasonCode(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetReasonCodeAsync(string request) + { + GetReasonCodeAsync(request, null); + } + + /// + public void GetReasonCodeAsync(string request, object userState) + { + if (GetReasonCodeOperationCompleted == null) + { + GetReasonCodeOperationCompleted = OnGetReasonCodeOperationCompleted; + } + InvokeAsync("GetReasonCode", new object[] { request }, GetReasonCodeOperationCompleted, userState); + } + + private void OnGetReasonCodeOperationCompleted(object arg) + { + if (GetReasonCodeCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetReasonCodeCompleted?.Invoke(this, new GetReasonCodeCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetSOInfoData(string request) + { + object[] results = Invoke("GetSOInfoData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetSOInfoData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetSOInfoData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetSOInfoData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetSOInfoDataAsync(string request) + { + GetSOInfoDataAsync(request, null); + } + + /// + public void GetSOInfoDataAsync(string request, object userState) + { + if (GetSOInfoDataOperationCompleted == null) + { + GetSOInfoDataOperationCompleted = OnGetSOInfoDataOperationCompleted; + } + InvokeAsync("GetSOInfoData", new object[] { request }, GetSOInfoDataOperationCompleted, userState); + } + + private void OnGetSOInfoDataOperationCompleted(object arg) + { + if (GetSOInfoDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetSOInfoDataCompleted?.Invoke(this, new GetSOInfoDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetSOInfoDetailData(string request) + { + object[] results = Invoke("GetSOInfoDetailData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetSOInfoDetailData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetSOInfoDetailData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetSOInfoDetailData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetSOInfoDetailDataAsync(string request) + { + GetSOInfoDetailDataAsync(request, null); + } + + /// + public void GetSOInfoDetailDataAsync(string request, object userState) + { + if (GetSOInfoDetailDataOperationCompleted == null) + { + GetSOInfoDetailDataOperationCompleted = OnGetSOInfoDetailDataOperationCompleted; + } + InvokeAsync("GetSOInfoDetailData", new object[] { request }, GetSOInfoDetailDataOperationCompleted, userState); + } + + private void OnGetSOInfoDetailDataOperationCompleted(object arg) + { + if (GetSOInfoDetailDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetSOInfoDetailDataCompleted?.Invoke(this, new GetSOInfoDetailDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetSalesStatisticsData(string request) + { + object[] results = Invoke("GetSalesStatisticsData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetSalesStatisticsData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetSalesStatisticsData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetSalesStatisticsData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetSalesStatisticsDataAsync(string request) + { + GetSalesStatisticsDataAsync(request, null); + } + + /// + public void GetSalesStatisticsDataAsync(string request, object userState) + { + if (GetSalesStatisticsDataOperationCompleted == null) + { + GetSalesStatisticsDataOperationCompleted = OnGetSalesStatisticsDataOperationCompleted; + } + InvokeAsync("GetSalesStatisticsData", new object[] { request }, GetSalesStatisticsDataOperationCompleted, userState); + } + + private void OnGetSalesStatisticsDataOperationCompleted(object arg) + { + if (GetSalesStatisticsDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetSalesStatisticsDataCompleted?.Invoke(this, new GetSalesStatisticsDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetStockData(string request) + { + object[] results = Invoke("GetStockData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetStockData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetStockData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetStockData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetStockDataAsync(string request) + { + GetStockDataAsync(request, null); + } + + /// + public void GetStockDataAsync(string request, object userState) + { + if (GetStockDataOperationCompleted == null) + { + GetStockDataOperationCompleted = OnGetStockDataOperationCompleted; + } + InvokeAsync("GetStockData", new object[] { request }, GetStockDataOperationCompleted, userState); + } + + private void OnGetStockDataOperationCompleted(object arg) + { + if (GetStockDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetStockDataCompleted?.Invoke(this, new GetStockDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetSupplierData(string request) + { + object[] results = Invoke("GetSupplierData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetSupplierData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetSupplierData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetSupplierData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetSupplierDataAsync(string request) + { + GetSupplierDataAsync(request, null); + } + + /// + public void GetSupplierDataAsync(string request, object userState) + { + if (GetSupplierDataOperationCompleted == null) + { + GetSupplierDataOperationCompleted = OnGetSupplierDataOperationCompleted; + } + InvokeAsync("GetSupplierData", new object[] { request }, GetSupplierDataOperationCompleted, userState); + } + + private void OnGetSupplierDataOperationCompleted(object arg) + { + if (GetSupplierDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetSupplierDataCompleted?.Invoke(this, new GetSupplierDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetSupplierItemData(string request) + { + object[] results = Invoke("GetSupplierItemData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetSupplierItemData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetSupplierItemData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetSupplierItemData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetSupplierItemDataAsync(string request) + { + GetSupplierItemDataAsync(request, null); + } + + /// + public void GetSupplierItemDataAsync(string request, object userState) + { + if (GetSupplierItemDataOperationCompleted == null) + { + GetSupplierItemDataOperationCompleted = OnGetSupplierItemDataOperationCompleted; + } + InvokeAsync("GetSupplierItemData", new object[] { request }, GetSupplierItemDataOperationCompleted, userState); + } + + private void OnGetSupplierItemDataOperationCompleted(object arg) + { + if (GetSupplierItemDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetSupplierItemDataCompleted?.Invoke(this, new GetSupplierItemDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetTableAmendmentData(string request) + { + object[] results = Invoke("GetTableAmendmentData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetTableAmendmentData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetTableAmendmentData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetTableAmendmentData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetTableAmendmentDataAsync(string request) + { + GetTableAmendmentDataAsync(request, null); + } + + /// + public void GetTableAmendmentDataAsync(string request, object userState) + { + if (GetTableAmendmentDataOperationCompleted == null) + { + GetTableAmendmentDataOperationCompleted = OnGetTableAmendmentDataOperationCompleted; + } + InvokeAsync("GetTableAmendmentData", new object[] { request }, GetTableAmendmentDataOperationCompleted, userState); + } + + private void OnGetTableAmendmentDataOperationCompleted(object arg) + { + if (GetTableAmendmentDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetTableAmendmentDataCompleted?.Invoke(this, new GetTableAmendmentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetTaxTypeData(string request) + { + object[] results = Invoke("GetTaxTypeData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetTaxTypeData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetTaxTypeData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetTaxTypeData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetTaxTypeDataAsync(string request) + { + GetTaxTypeDataAsync(request, null); + } + + /// + public void GetTaxTypeDataAsync(string request, object userState) + { + if (GetTaxTypeDataOperationCompleted == null) + { + GetTaxTypeDataOperationCompleted = OnGetTaxTypeDataOperationCompleted; + } + InvokeAsync("GetTaxTypeData", new object[] { request }, GetTaxTypeDataOperationCompleted, userState); + } + + private void OnGetTaxTypeDataOperationCompleted(object arg) + { + if (GetTaxTypeDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetTaxTypeDataCompleted?.Invoke(this, new GetTaxTypeDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetTradeTermData(string request) + { + object[] results = Invoke("GetTradeTermData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetTradeTermData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetTradeTermData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetTradeTermData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetTradeTermDataAsync(string request) + { + GetTradeTermDataAsync(request, null); + } + + /// + public void GetTradeTermDataAsync(string request, object userState) + { + if (GetTradeTermDataOperationCompleted == null) + { + GetTradeTermDataOperationCompleted = OnGetTradeTermDataOperationCompleted; + } + InvokeAsync("GetTradeTermData", new object[] { request }, GetTradeTermDataOperationCompleted, userState); + } + + private void OnGetTradeTermDataOperationCompleted(object arg) + { + if (GetTradeTermDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetTradeTermDataCompleted?.Invoke(this, new GetTradeTermDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetTransactionCategory(string request) + { + object[] results = Invoke("GetTransactionCategory", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetTransactionCategory(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetTransactionCategory", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetTransactionCategory(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetTransactionCategoryAsync(string request) + { + GetTransactionCategoryAsync(request, null); + } + + /// + public void GetTransactionCategoryAsync(string request, object userState) + { + if (GetTransactionCategoryOperationCompleted == null) + { + GetTransactionCategoryOperationCompleted = OnGetTransactionCategoryOperationCompleted; + } + InvokeAsync("GetTransactionCategory", new object[] { request }, GetTransactionCategoryOperationCompleted, userState); + } + + private void OnGetTransactionCategoryOperationCompleted(object arg) + { + if (GetTransactionCategoryCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetTransactionCategoryCompleted?.Invoke(this, new GetTransactionCategoryCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetUnitConversionData(string request) + { + object[] results = Invoke("GetUnitConversionData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetUnitConversionData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetUnitConversionData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetUnitConversionData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetUnitConversionDataAsync(string request) + { + GetUnitConversionDataAsync(request, null); + } + + /// + public void GetUnitConversionDataAsync(string request, object userState) + { + if (GetUnitConversionDataOperationCompleted == null) + { + GetUnitConversionDataOperationCompleted = OnGetUnitConversionDataOperationCompleted; + } + InvokeAsync("GetUnitConversionData", new object[] { request }, GetUnitConversionDataOperationCompleted, userState); + } + + private void OnGetUnitConversionDataOperationCompleted(object arg) + { + if (GetUnitConversionDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetUnitConversionDataCompleted?.Invoke(this, new GetUnitConversionDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetUserToken(string request) + { + object[] results = Invoke("GetUserToken", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetUserToken(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetUserToken", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetUserToken(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetUserTokenAsync(string request) + { + GetUserTokenAsync(request, null); + } + + /// + public void GetUserTokenAsync(string request, object userState) + { + if (GetUserTokenOperationCompleted == null) + { + GetUserTokenOperationCompleted = OnGetUserTokenOperationCompleted; + } + InvokeAsync("GetUserToken", new object[] { request }, GetUserTokenOperationCompleted, userState); + } + + private void OnGetUserTokenOperationCompleted(object arg) + { + if (GetUserTokenCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetUserTokenCompleted?.Invoke(this, new GetUserTokenCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetVoucherDocumentData(string request) + { + object[] results = Invoke("GetVoucherDocumentData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetVoucherDocumentData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetVoucherDocumentData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetVoucherDocumentData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetVoucherDocumentDataAsync(string request) + { + GetVoucherDocumentDataAsync(request, null); + } + + /// + public void GetVoucherDocumentDataAsync(string request, object userState) + { + if (GetVoucherDocumentDataOperationCompleted == null) + { + GetVoucherDocumentDataOperationCompleted = OnGetVoucherDocumentDataOperationCompleted; + } + InvokeAsync("GetVoucherDocumentData", new object[] { request }, GetVoucherDocumentDataOperationCompleted, userState); + } + + private void OnGetVoucherDocumentDataOperationCompleted(object arg) + { + if (GetVoucherDocumentDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetVoucherDocumentDataCompleted?.Invoke(this, new GetVoucherDocumentDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string GetWorkstationData(string request) + { + object[] results = Invoke("GetWorkstationData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginGetWorkstationData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("GetWorkstationData", new object[] { request }, callback, asyncState); + } + + /// + public string EndGetWorkstationData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void GetWorkstationDataAsync(string request) + { + GetWorkstationDataAsync(request, null); + } + + /// + public void GetWorkstationDataAsync(string request, object userState) + { + if (GetWorkstationDataOperationCompleted == null) + { + GetWorkstationDataOperationCompleted = OnGetWorkstationDataOperationCompleted; + } + InvokeAsync("GetWorkstationData", new object[] { request }, GetWorkstationDataOperationCompleted, userState); + } + + private void OnGetWorkstationDataOperationCompleted(object arg) + { + if (GetWorkstationDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + GetWorkstationDataCompleted?.Invoke(this, new GetWorkstationDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string RollbackBillingAP(string request) + { + object[] results = Invoke("RollbackBillingAP", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginRollbackBillingAP(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("RollbackBillingAP", new object[] { request }, callback, asyncState); + } + + /// + public string EndRollbackBillingAP(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void RollbackBillingAPAsync(string request) + { + RollbackBillingAPAsync(request, null); + } + + /// + public void RollbackBillingAPAsync(string request, object userState) + { + if (RollbackBillingAPOperationCompleted == null) + { + RollbackBillingAPOperationCompleted = OnRollbackBillingAPOperationCompleted; + } + InvokeAsync("RollbackBillingAP", new object[] { request }, RollbackBillingAPOperationCompleted, userState); + } + + private void OnRollbackBillingAPOperationCompleted(object arg) + { + if (RollbackBillingAPCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + RollbackBillingAPCompleted?.Invoke(this, new RollbackBillingAPCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + [SoapRpcMethod("", RequestNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay", ResponseNamespace = "http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay")] + public string RollbackVoucherData(string request) + { + object[] results = Invoke("RollbackVoucherData", new object[] { request }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginRollbackVoucherData(string request, AsyncCallback callback, object asyncState) + { + return BeginInvoke("RollbackVoucherData", new object[] { request }, callback, asyncState); + } + + /// + public string EndRollbackVoucherData(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void RollbackVoucherDataAsync(string request) + { + RollbackVoucherDataAsync(request, null); + } + + /// + public void RollbackVoucherDataAsync(string request, object userState) + { + if (RollbackVoucherDataOperationCompleted == null) + { + RollbackVoucherDataOperationCompleted = OnRollbackVoucherDataOperationCompleted; + } + InvokeAsync("RollbackVoucherData", new object[] { request }, RollbackVoucherDataOperationCompleted, userState); + } + + private void OnRollbackVoucherDataOperationCompleted(object arg) + { + if (RollbackVoucherDataCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + RollbackVoucherDataCompleted?.Invoke(this, new RollbackVoucherDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + public new void CancelAsync(object userState) + { + base.CancelAsync(userState); + } + + private bool IsLocalFileSystemWebService(string url) + { + if (url == null || ReferenceEquals(url, string.Empty)) + { + return false; + } + var wsUri = new Uri(url); + if (wsUri.Port >= 1024 && string.Compare(wsUri.Host, "localHost", StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + return false; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CRMGetCustomerDataCompletedEventHandler(object sender, CRMGetCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CRMGetCustomerDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CRMGetCustomerDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CheckApsExecutionCompletedEventHandler(object sender, CheckApsExecutionCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CheckApsExecutionCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CheckApsExecutionCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CheckUserAuthCompletedEventHandler(object sender, CheckUserAuthCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CheckUserAuthCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CheckUserAuthCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateBOMDataCompletedEventHandler(object sender, CreateBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateBOMDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateBOMDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateBillingAPCompletedEventHandler(object sender, CreateBillingAPCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateBillingAPCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateBillingAPCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateCustomerContactDataCompletedEventHandler(object sender, CreateCustomerContactDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateCustomerContactDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateCustomerContactDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateCustomerDataCompletedEventHandler(object sender, CreateCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateCustomerDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateCustomerDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateCustomerOtheraddressDataCompletedEventHandler(object sender, CreateCustomerOtheraddressDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateCustomerOtheraddressDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateCustomerOtheraddressDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateDepartmentDataCompletedEventHandler(object sender, CreateDepartmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateDepartmentDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateDepartmentDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateECNDataCompletedEventHandler(object sender, CreateECNDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateECNDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateECNDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateEmployeeDataCompletedEventHandler(object sender, CreateEmployeeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateEmployeeDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateEmployeeDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateIssueReturnDataCompletedEventHandler(object sender, CreateIssueReturnDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateIssueReturnDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateIssueReturnDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateItemApprovalDataCompletedEventHandler(object sender, CreateItemApprovalDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateItemApprovalDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateItemApprovalDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateItemMasterDataCompletedEventHandler(object sender, CreateItemMasterDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateItemMasterDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateItemMasterDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateMISCIssueDataCompletedEventHandler(object sender, CreateMISCIssueDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateMISCIssueDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateMISCIssueDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreatePLMBOMDataCompletedEventHandler(object sender, CreatePLMBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreatePLMBOMDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreatePLMBOMDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreatePLMTempTableDataCompletedEventHandler(object sender, CreatePLMTempTableDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreatePLMTempTableDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreatePLMTempTableDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreatePotentialCustomerDataCompletedEventHandler(object sender, CreatePotentialCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreatePotentialCustomerDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreatePotentialCustomerDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateQuotationDataCompletedEventHandler(object sender, CreateQuotationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateQuotationDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateQuotationDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateRepSubPBOMDataCompletedEventHandler(object sender, CreateRepSubPBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateRepSubPBOMDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateRepSubPBOMDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateSalesOrderDataCompletedEventHandler(object sender, CreateSalesOrderDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateSalesOrderDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateSalesOrderDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateShippingOrdersWithoutOrdersCompletedEventHandler(object sender, CreateShippingOrdersWithoutOrdersCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateShippingOrdersWithoutOrdersCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateShippingOrdersWithoutOrdersCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateStockInDataCompletedEventHandler(object sender, CreateStockInDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateStockInDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateStockInDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateSupplierItemDataCompletedEventHandler(object sender, CreateSupplierItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateSupplierItemDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateSupplierItemDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateVoucherDataCompletedEventHandler(object sender, CreateVoucherDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateVoucherDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateVoucherDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void CreateWOWorkReportDataCompletedEventHandler(object sender, CreateWOWorkReportDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class CreateWOWorkReportDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal CreateWOWorkReportDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void DeletePLMTempTableDataCompletedEventHandler(object sender, DeletePLMTempTableDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class DeletePLMTempTableDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal DeletePLMTempTableDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAPCategoryAccountCodeCompletedEventHandler(object sender, GetAPCategoryAccountCodeCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAPCategoryAccountCodeCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAPCategoryAccountCodeCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAccountDataCompletedEventHandler(object sender, GetAccountDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAccountDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAccountDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAccountSubjectDataCompletedEventHandler(object sender, GetAccountSubjectDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAccountSubjectDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAccountSubjectDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAccountTypeDataCompletedEventHandler(object sender, GetAccountTypeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAccountTypeDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAccountTypeDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAreaDataCompletedEventHandler(object sender, GetAreaDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAreaDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAreaDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAreaListCompletedEventHandler(object sender, GetAreaListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAreaListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAreaListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetAxmDocumentCompletedEventHandler(object sender, GetAxmDocumentCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetAxmDocumentCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetAxmDocumentCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetBOMDataCompletedEventHandler(object sender, GetBOMDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetBOMDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetBOMDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetBrandDataCompletedEventHandler(object sender, GetBrandDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetBrandDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetBrandDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetComponentrepsubDataCompletedEventHandler(object sender, GetComponentrepsubDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetComponentrepsubDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetComponentrepsubDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCostGroupDataCompletedEventHandler(object sender, GetCostGroupDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCostGroupDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCostGroupDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCountryDataCompletedEventHandler(object sender, GetCountryDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCountryDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCountryDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCountryListCompletedEventHandler(object sender, GetCountryListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCountryListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCountryListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCurrencyDataCompletedEventHandler(object sender, GetCurrencyDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCurrencyDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCurrencyDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCurrencyListCompletedEventHandler(object sender, GetCurrencyListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCurrencyListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCurrencyListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustClassificationDataCompletedEventHandler(object sender, GetCustClassificationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustClassificationDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustClassificationDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustListCompletedEventHandler(object sender, GetCustListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustomerContactDataCompletedEventHandler(object sender, GetCustomerContactDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustomerContactDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustomerContactDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustomerDataCompletedEventHandler(object sender, GetCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustomerDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustomerDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustomerOtheraddressDataCompletedEventHandler(object sender, GetCustomerOtheraddressDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustomerOtheraddressDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustomerOtheraddressDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetCustomerProductDataCompletedEventHandler(object sender, GetCustomerProductDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetCustomerProductDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetCustomerProductDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetDepartmentDataCompletedEventHandler(object sender, GetDepartmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetDepartmentDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetDepartmentDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetDepartmentListCompletedEventHandler(object sender, GetDepartmentListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetDepartmentListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetDepartmentListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetDocumentNumberCompletedEventHandler(object sender, GetDocumentNumberCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetDocumentNumberCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetDocumentNumberCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetEmployeeDataCompletedEventHandler(object sender, GetEmployeeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetEmployeeDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetEmployeeDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetEmployeeListCompletedEventHandler(object sender, GetEmployeeListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetEmployeeListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetEmployeeListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetExchangeRateDataCompletedEventHandler(object sender, GetExchangeRateDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetExchangeRateDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetExchangeRateDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetInvoiceTypeListCompletedEventHandler(object sender, GetInvoiceTypeListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetInvoiceTypeListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetInvoiceTypeListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetItemDataCompletedEventHandler(object sender, GetItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetItemDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetItemDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetItemGroupDataCompletedEventHandler(object sender, GetItemGroupDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetItemGroupDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetItemGroupDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetItemListCompletedEventHandler(object sender, GetItemListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetItemListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetItemListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetItemOtherGroupDataCompletedEventHandler(object sender, GetItemOtherGroupDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetItemOtherGroupDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetItemOtherGroupDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetItemStockListCompletedEventHandler(object sender, GetItemStockListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetItemStockListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetItemStockListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetMFGDocumentCompletedEventHandler(object sender, GetMFGDocumentCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetMFGDocumentCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetMFGDocumentCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetMFGSettingSmaDataCompletedEventHandler(object sender, GetMFGSettingSmaDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetMFGSettingSmaDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetMFGSettingSmaDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetMachineDataCompletedEventHandler(object sender, GetMachineDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetMachineDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetMachineDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetMemoDataCompletedEventHandler(object sender, GetMemoDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetMemoDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetMemoDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetMonthListCompletedEventHandler(object sender, GetMonthListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetMonthListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetMonthListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetOrganizationListCompletedEventHandler(object sender, GetOrganizationListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetOrganizationListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetOrganizationListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetOverdueAmtDetailDataCompletedEventHandler(object sender, GetOverdueAmtDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetOverdueAmtDetailDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetOverdueAmtDetailDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetOverdueAmtRankingDataCompletedEventHandler(object sender, GetOverdueAmtRankingDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetOverdueAmtRankingDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetOverdueAmtRankingDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetPLMTempTableDataStatusCompletedEventHandler(object sender, GetPLMTempTableDataStatusCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetPLMTempTableDataStatusCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetPLMTempTableDataStatusCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetPackingMethodDataCompletedEventHandler(object sender, GetPackingMethodDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetPackingMethodDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetPackingMethodDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetPaymentTermsDataCompletedEventHandler(object sender, GetPaymentTermsDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetPaymentTermsDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetPaymentTermsDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetPotentialCustomerDataCompletedEventHandler(object sender, GetPotentialCustomerDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetPotentialCustomerDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetPotentialCustomerDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetProdClassListCompletedEventHandler(object sender, GetProdClassListCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetProdClassListCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetProdClassListCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetProdRoutingDataCompletedEventHandler(object sender, GetProdRoutingDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetProdRoutingDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetProdRoutingDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetProjectWBSDataCompletedEventHandler(object sender, GetProjectWBSDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetProjectWBSDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetProjectWBSDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetReasonCodeCompletedEventHandler(object sender, GetReasonCodeCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetReasonCodeCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetReasonCodeCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetSOInfoDataCompletedEventHandler(object sender, GetSOInfoDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetSOInfoDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetSOInfoDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetSOInfoDetailDataCompletedEventHandler(object sender, GetSOInfoDetailDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetSOInfoDetailDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetSOInfoDetailDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetSalesStatisticsDataCompletedEventHandler(object sender, GetSalesStatisticsDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetSalesStatisticsDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetSalesStatisticsDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetStockDataCompletedEventHandler(object sender, GetStockDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetStockDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetStockDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetSupplierDataCompletedEventHandler(object sender, GetSupplierDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetSupplierDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetSupplierDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetSupplierItemDataCompletedEventHandler(object sender, GetSupplierItemDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetSupplierItemDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetSupplierItemDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetTableAmendmentDataCompletedEventHandler(object sender, GetTableAmendmentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetTableAmendmentDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetTableAmendmentDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetTaxTypeDataCompletedEventHandler(object sender, GetTaxTypeDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetTaxTypeDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetTaxTypeDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetTradeTermDataCompletedEventHandler(object sender, GetTradeTermDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetTradeTermDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetTradeTermDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetTransactionCategoryCompletedEventHandler(object sender, GetTransactionCategoryCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetTransactionCategoryCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetTransactionCategoryCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetUnitConversionDataCompletedEventHandler(object sender, GetUnitConversionDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetUnitConversionDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetUnitConversionDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetUserTokenCompletedEventHandler(object sender, GetUserTokenCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetUserTokenCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetUserTokenCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetVoucherDocumentDataCompletedEventHandler(object sender, GetVoucherDocumentDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetVoucherDocumentDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetVoucherDocumentDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void GetWorkstationDataCompletedEventHandler(object sender, GetWorkstationDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class GetWorkstationDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal GetWorkstationDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void RollbackBillingAPCompletedEventHandler(object sender, RollbackBillingAPCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class RollbackBillingAPCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal RollbackBillingAPCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + public delegate void RollbackVoucherDataCompletedEventHandler(object sender, RollbackVoucherDataCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.0.30319.17929")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class RollbackVoucherDataCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal RollbackVoucherDataCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.map b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.map new file mode 100644 index 0000000..19834ab --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/Reference.map @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/TIPTOPServiceGateWay.wsdl b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/TIPTOPServiceGateWay.wsdl new file mode 100644 index 0000000..d240a3c --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_TP_RPC/TIPTOPServiceGateWay.wsdl @@ -0,0 +1,1762 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.cs new file mode 100644 index 0000000..9ed8b94 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.cs @@ -0,0 +1,180 @@ +// ------------------------------------------------------------------------------ +// +// 這段程式碼是由工具產生的。 +// 執行階段版本:4.0.30319.42000 +// +// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, +// 變更將會遺失。 +// +// ------------------------------------------------------------------------------ + + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Web.Services; +using System.Web.Services.Protocols; +using Microsoft.VisualBasic.CompilerServices; + +// +// 原始程式碼已由 Microsoft.VSDesigner 自動產生,版本 4.0.30319.42000。 +// +namespace AutoRunLib.wsERP_WorkFlow +{ + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.6.1087.0")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [WebServiceBinding(Name = "WFMESServiceSoap", Namespace = "http://tempuri.org/")] + public partial class WFMESService : SoapHttpClientProtocol + { + + private System.Threading.SendOrPostCallback XMLAdapterOperationCompleted; + + private bool useDefaultCredentialsSetExplicitly; + + /// + public WFMESService() : base() + { + Url = My.MySettings.Default.AutoRunLib_wsERP_WorkFlow_WFMESService; + if (IsLocalFileSystemWebService(Url) == true) + { + UseDefaultCredentials = true; + useDefaultCredentialsSetExplicitly = false; + } + else + { + useDefaultCredentialsSetExplicitly = true; + } + } + + public new string Url + { + get + { + return base.Url; + } + set + { + if (IsLocalFileSystemWebService(base.Url) == true && useDefaultCredentialsSetExplicitly == false && IsLocalFileSystemWebService(value) == false) + + { + base.UseDefaultCredentials = false; + } + base.Url = value; + } + } + + public new bool UseDefaultCredentials + { + get + { + return base.UseDefaultCredentials; + } + set + { + base.UseDefaultCredentials = value; + useDefaultCredentialsSetExplicitly = true; + } + } + + /// + public event XMLAdapterCompletedEventHandler XMLAdapterCompleted; + + /// + [SoapDocumentMethod("http://tempuri.org/XMLAdapter", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)] + public string XMLAdapter(string sXML) + { + object[] results = Invoke("XMLAdapter", new object[] { sXML }); + return Conversions.ToString(results[0]); + } + + /// + public IAsyncResult BeginXMLAdapter(string sXML, AsyncCallback callback, object asyncState) + { + return BeginInvoke("XMLAdapter", new object[] { sXML }, callback, asyncState); + } + + /// + public string EndXMLAdapter(IAsyncResult asyncResult) + { + object[] results = EndInvoke(asyncResult); + return Conversions.ToString(results[0]); + } + + /// + public void XMLAdapterAsync(string sXML) + { + XMLAdapterAsync(sXML, null); + } + + /// + public void XMLAdapterAsync(string sXML, object userState) + { + if (XMLAdapterOperationCompleted == null) + { + XMLAdapterOperationCompleted = OnXMLAdapterOperationCompleted; + } + InvokeAsync("XMLAdapter", new object[] { sXML }, XMLAdapterOperationCompleted, userState); + } + + private void OnXMLAdapterOperationCompleted(object arg) + { + if (XMLAdapterCompleted != null) + { + InvokeCompletedEventArgs invokeArgs = (InvokeCompletedEventArgs)arg; + XMLAdapterCompleted?.Invoke(this, new XMLAdapterCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + + /// + public new void CancelAsync(object userState) + { + base.CancelAsync(userState); + } + + private bool IsLocalFileSystemWebService(string url) + { + if (url == null || ReferenceEquals(url, string.Empty)) + { + return false; + } + var wsUri = new Uri(url); + if (wsUri.Port >= 1024 && string.Compare(wsUri.Host, "localHost", StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + return false; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.6.1087.0")] + public delegate void XMLAdapterCompletedEventHandler(object sender, XMLAdapterCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCode("System.Web.Services", "4.6.1087.0")] + [DebuggerStepThrough()] + [DesignerCategory("code")] + public partial class XMLAdapterCompletedEventArgs : AsyncCompletedEventArgs + { + + private object[] results; + + internal XMLAdapterCompletedEventArgs(object[] results, Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) + { + this.results = results; + } + + /// + public string Result + { + get + { + RaiseExceptionIfNecessary(); + return Conversions.ToString(results[0]); + } + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.map b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.map new file mode 100644 index 0000000..0aacda6 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/Reference.map @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.disco b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.disco new file mode 100644 index 0000000..032f9f9 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.disco @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.wsdl b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.wsdl new file mode 100644 index 0000000..851ed7a --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/Web References/wsERP_WorkFlow/WFMESService.wsdl @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/app.config b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/app.config new file mode 100644 index 0000000..2b83b6f --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/app.config @@ -0,0 +1,35 @@ + + + + +
+ + + + + + + + + + http://10.40.40.30/gas/ws/r/aws_ttsrv2_top2o + + + http://218.211.164.212:8082/ws/r/aws_ttsrv2_top3o + + + http://10.40.41.197:9999/IntegrationEntry + + + http://localhost/MESws_STD/wsInvoke.asmx + + + http://10.40.30.73/WFMES/WFMESService.asmx + + + http://localhost/605EAI/wsMES.asmx + + + + diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/clsAutoRunLibrary.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/clsAutoRunLibrary.cs new file mode 100644 index 0000000..72feb93 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/clsAutoRunLibrary.cs @@ -0,0 +1,49468 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using Oracle.ManagedDataAccess.Client; +using System.Data.SqlClient; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Xml; +using iMESCIO.SCI.ERP.Request; +using iMESCIO.SCI.ERP.Response; +using iMESCIO.SCI.ERP.Request_E10ICD; +using iMESCIO.SCI.ERP.Response_E10ICD; +using iMESCIO.SCI.Base; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; +using iMESCore.Settings; +using static iMESCore.DataBase.iMESSql; +using static iMESCore.Base.iMESComXML; +using static iMESCore.Base.iMESConst; +using static iMESCore.Base.iMESComSubroutine; +using System.Data.Common; +using System.Drawing; +using Ionic.Zip; +using System.EnterpriseServices.CompensatingResourceManager; +using static System.Windows.Forms.AxHost; +using System.Runtime.Remoting.Messaging; +using System.Collections.ObjectModel; + +namespace AutoRunLib +{ + + + + + public class clsAutoRunLibrary + { + + // 2016/06/23 YF, 原呼叫標準各模組的WebService, 改統一呼叫wsInvoke + + public enum ERPName + { + TIPTOP = 0, + Workflow = 1, + T100 = 2, + HMI = 3, + APS = 4 + } + + private DataTable dtERPSetting = null; + + //private IDbCommand cmmTemp; + private string strDataBaseType; // DataBase Type:oracle, mysql, access + private string strConnectionString; // Connection string + private string strReportDataBaseType; + private string strReportConnectionString; // Report DB Connection string + private string strMQType; // MessageQueue Type:TIBCO, MQSeries, MSMQ + + //private IDbCommand cmmTempERP; + private string strERPconnectionString; + private string strERPDataBaseType; + private string strERPReportConnectionString; + + private string strERPCreator = "ERP"; // 取得Config設定之defCreator. + private string strDefLanguage; // 取得Config設定之LanguageMode. + private string strLanguage_T100; // MES對應ERP T100語系 + + private AppSettings objSetting = new AppSettings(); + private clsDBCom objDBcom = new clsDBCom(); + + public string strComputerName, strERPUnitNo; + public string strAppPath; + + public string gERPUser; // ERP使用者名稱 + public string gERPPassword; // ERP密碼 + public string gERPWSURL; // ERP Web服務網址 + public string gERPOraganization; // ERP營運中心代碼 + public string gERPLanguage; // ERP語系 + public string gERPVersion; // ERP版本 + + // //Web Service相關變數 + private XmlDocument XmlDoc = new XmlDocument(); + private StringReader tmpStringReader; + private string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; + + private string ExceptionXML; // ===== + + private string ERP_EntID; + private string ERP_Site; + private string ERP_URL; + private string results; + private string strLanguageMode = "zh-cht"; + private string strResourceDir = "Resources"; + + // Dim objkcWIP As New kcWIP.clsOperatorState '宣告Sys的物件 + + // //Initial Object-------------------------------------------------------------------------------------------------------------------------------- + public clsAutoRunLibrary() + { + // //Get database type + strDataBaseType = objSetting.GetDataBaseType(); + // //Get connection string + strConnectionString = objSetting.GetConnectionString(strDataBaseType); + // //Get Message Queue Type + strMQType = objSetting.GetMQType(); + + strReportDataBaseType = objSetting.GetReportDataBaseType(); + // //Get connection string + strReportConnectionString = objSetting.GetReportConnectionString(strReportDataBaseType); + + // ERP + // //Get ERP database type + strERPDataBaseType = objSetting.GetDataBaseType_ERP(); + // //Get ERP connection string + strERPconnectionString = objSetting.GetConnectionString_ERP(strERPDataBaseType); + + try + { + strResourceDir = objSetting["ResourceDir"].ToString(); + } + catch (Exception) + { } + try + { + strLanguageMode = objSetting["LanguageMode"].ToString(); + } + catch (Exception) + { } + + // T100 整合項目增加, 取得 Web.Config 設定項目, 2015/12/15 Add. + + try + { + // 從Web.config取出目前的DatabaseType + strERPCreator = System.Configuration.ConfigurationSettings.AppSettings.Get("defCreator"); + // 2016-03-09, Joe, 取出預設ERP單位屬性編號 + strERPUnitNo = System.Configuration.ConfigurationSettings.AppSettings.Get("defERPUnitNoProperty"); + // 2016-03-02, Joe, 取出預設語系並轉換成ERP對應語系,後續T100多語系資料需用到 + strDefLanguage = System.Configuration.ConfigurationSettings.AppSettings.Get("LanguageMode"); + switch (strDefLanguage.ToUpper() ?? "") + { + case "ZH-CHS": + { + strLanguage_T100 = "zh_CN"; + break; + } + case "EN": + { + strLanguage_T100 = "en_US"; + break; + } + + default: + { + strLanguage_T100 = "zh_TW"; + break; + } + } + } + catch (Exception ex) + { + // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 + } + + + } + + + // //Property-------------------------------------------------------------------------------------------------------------------------------- + public object ConnectionString + { + get + { + return strConnectionString; + } + } + + public object DataBaseType + { + get + { + return strDataBaseType; + } + } + + // Public ReadOnly Property ERPConnectionString() + // Get + // ERPConnectionString = strERPconnectionString + // End Get + // End Property + + // Public ReadOnly Property ERPDataBaseType() + // Get + // ERPDataBaseType = strERPDataBaseType + // End Get + // End Property + + public object MQType + { + get + { + return strMQType; + } + } + + + // //Function-------------------------------------------------------------------------------------------------------------------------------- + #region 共用的function (不可刪除) + + // //Public function---------------------------------------------------------------------------------------------------- + public string ExecuteFunction(string FunctionName, Collection colParameters = null) + { + string ExecuteFunctionRet = default(string); + // 此 Function 將執行傳入之FunctionName + // 傳入值: FunctionName,colParameters + // 傳回值: DataSet(成功), nothing(失敗) + + // colParameters的資料範例如下 + // colParameters.Add("C1", "CustomerNo") + // colParameters.Add("P1", "ProductNo") + + int i; + + try + { + // 2019/07/26 OwenLiu, Mantis:0060463, AutoRunService 支持行業包共用架構 + // -------------------------------------------------------------------------------------------------- + // 半導體芯片製造行業包(SEMI_WAFER):S, AutoRunLib_SEMI_WAFER.dll, Job Function固定以 fun_S_ 開頭 + // 半導體芯片測試行業包(IC_CP_PKG):P, AutoRunLib_IC_CP_PKG.dll, Job Function固定以 fun_P_ 開頭 + // 集成電路封測行業包(IC_FT_PKG):I, AutoRunLib_IC_FT_PKG.dll, Job Function固定以 fun_I_ 開頭 + // 分立器件封測行業包(DISCRETE_PKG):D, AutoRunLib_DISCRETE_PKG.dll, Job Function固定以 fun_D_ 開頭 + // LED封測行業包(LED_PKG):L, AutoRunLib_LED_PKG.dll, Job Function固定以 fun_L_ 開頭 + // 序號組裝行業包(ASM):A, AutoRunLib_ASM.dll, Job Function固定以 fun_A_ 開頭 + // 行業包基底(Industry_Base):B, AutoRunLib_Base.dll, Job Function固定以 fun_B_ 開頭 + // -------------------------------------------------------------------------------------------------- + // 1.處理 FunctionName 大小寫問題 + // 本機執行:將DLL放在執行檔編譯後的位置底下(AutoRunService) + string strFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\"; + string strLibFileName = ""; + string strLibraryName = ""; + if (FunctionName.ToUpper().StartsWith("FUN_S_")) // SEMI_WAFER + { + strLibFileName = "AutoRunLib_SEMI_WAFER.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_P_")) // IC_CP_PKG + { + strLibFileName = "AutoRunLib_IC_CP_PKG.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_I_")) // IC_FT_PKG + { + strLibFileName = "AutoRunLib_IC_FT_PKG.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_D_")) // DISCRETE_PKG + { + strLibFileName = "AutoRunLib_DISCRETE_PKG.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_L_")) // LED_PKG + { + strLibFileName = "AutoRunLib_LED_PKG.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_A_")) // ASM + { + strLibFileName = "AutoRunLib_ASM.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_C_")) // 個案 + { + strLibFileName = "AutoRunLib_C.dll"; + } + else if (FunctionName.ToUpper().StartsWith("FUN_B_")) // Industry_Base + { + strLibFileName = "AutoRunLib_Base.dll"; + } + else + { + strLibFileName = "AutoRunLib.dll"; + } + strLibraryName = strLibFileName.Substring(0, strLibFileName.LastIndexOf(".dll")) + ".clsAutoRunLibrary"; + strFilePath += strLibFileName; + var mainAssembly = System.Reflection.Assembly.LoadFrom(strFilePath); + System.Reflection.MethodInfo[] MyMethodInfos = mainAssembly.GetType(strLibraryName).GetMethods(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); // 取出Private的Function + + var loopTo = MyMethodInfos.Length - 1; + for (i = 0; i <= loopTo; i++) + { + if ((MyMethodInfos[i].Name.ToUpper() ?? "") == (FunctionName.ToUpper() ?? "")) + { + FunctionName = MyMethodInfos[i].Name; + break; + } + } + + // 2.執行Private Function,傳出DataSet + object objArgs = new object[] { colParameters }; + string strClassName = "clsAutoRunLibrary"; + Type t; + System.Reflection.MethodInfo mi; + Type[] argumentTypes; + System.Reflection.ConstructorInfo ctor; + object obj; + + try + { + t = mainAssembly.GetType(mainAssembly.GetName().Name + "." + strClassName, true, true); + } + catch (Exception ex) + { + throw; + } + + argumentTypes = Type.EmptyTypes; + ctor = t.GetConstructor(argumentTypes); + obj = ctor.Invoke(new object[] { }); + mi = t.GetMethod(FunctionName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + + ExecuteFunctionRet = Conversions.ToString(mi.Invoke(obj, (object[])objArgs)); + } + + + catch (Exception e1) + { + // 2016-08-25, Joe, 加.InnerException將exception傳出 + if (e1.InnerException == null) + { + ExecuteFunctionRet = "fail;" + e1.Message; + } + else + { + ExecuteFunctionRet = "fail;" + e1.InnerException.Message; + } + } + + finally + { + + } + + return ExecuteFunctionRet; + + } + + // 0125796: [6.0.7] SDD230104_01-01_訂閱報表新增輸出圖表 2023/3/10 + private string SendMultiEmailNonGroup(ref string EmailSubject, string EmailBody = defString, string EmailAddress = defString, string AttachFileName = defString, byte[] AttachFile = null, string EmailAddressCC = defString, DataTable AttachFiles = null) + { + string SendMultiEmailNonGroupRet = default(string); + + // 將發Mail給非群組收件者 多人可用 , 隔開 + + string[] aryAddress, aryAddressCC; + string tmpXML = default(string), tmpXMLCC = default(string); + aryAddress = Strings.Split(EmailAddress, ","); + + // 子收件者包幾個child tag + foreach (string StrTemp in aryAddress) + { + tmpXML += CombineXMLValueTag(CombineXMLValue("address", StrTemp)); + } + + if (EmailAddressCC != defString && !string.IsNullOrEmpty(EmailAddressCC)) + { + aryAddressCC = Strings.Split(EmailAddressCC, ","); + foreach (string StrTemp in aryAddressCC) + { + tmpXMLCC += CombineXMLValueTag(CombineXMLValue("address", StrTemp)); + } + } + + try + { + if (AttachFiles == null) + { + AttachFiles = new DataTable(); + AttachFiles.Columns.Add(new DataColumn("Name", typeof(string))); + AttachFiles.Columns.Add(new DataColumn("Content", typeof(byte[]))); + } + + strIdentity = CombineXMLIdentity(modWIN.gComputerName, "AUTORUN", Conversions.ToString(DateTime.Now)); + + strParameter = CombineXMLParameterMultiValue("emailaddress", "EmailAddress", "String", tmpXML, ""); + strParameter += CombineXMLParameter("emailsubject", "EmailSubject", "String", EmailSubject, ""); + strParameter += CombineXMLParameter("emailbody", "EmailBody", "String", CInput(EmailBody), ""); + + if (!string.IsNullOrEmpty(tmpXMLCC)) + { + strParameter += CombineXMLParameterMultiValue("emailaddresscc", "EmailAddressCC", "String", tmpXMLCC, ""); + } + + if (AttachFileName != defString) + { + DataRow row = AttachFiles.NewRow(); + row["Name"] = AttachFileName; + row["Content"] = AttachFile; + AttachFiles.Rows.InsertAt(row, 0); + } + + + string strFileItem = ""; + for (int i = 0, loopTo = AttachFiles.Rows.Count - 1; i <= loopTo; i++) + { + strFileItem += CombineXMLValueTag( + CombineXMLValue("name", AttachFiles.Rows[i]["Name"].ToString()) + + CombineXMLValue("content", BitConverter.ToString((byte[])AttachFiles.Rows[i]["Content"]).Replace("-", string.Empty))); + } + + strParameter += CombineXMLParameterMultiValue("fileitem", "FileItem", "String", strFileItem, ""); + + var XmlDoc = new XmlDocument(); + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.SendMultiEmailAndAttachReportFile", InXml); + + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) // 找出Exception訊並顯示出來 + { + SendMultiEmailNonGroupRet = "success"; + } + else + { + // 20220901,13871,0118251: 【度亘】描述性语言报表,排程执行失败,調整錯誤訊息 + SendMultiEmailNonGroupRet = "fail;" + GetExceptionMesMsg(XmlDoc) + ";" + GetExceptionSysMsg(XmlDoc); + } + + XmlDoc = null; + } + + catch (Exception ex) + { + SendMultiEmailNonGroupRet = "fail;" + ex.Message; + } + + return SendMultiEmailNonGroupRet; + + } + + private void SendJobFailEmail(Collection colParameters) + { + // 發送Email前置作業, 可判別群組與非群組寄送 + + var dsGroup = new DataSet(); + var strGroupBasis = default(string); + + string[] aryEmailAddress; + string strEmailAddress, strNonGroup = default(string), strGroup = default(string), strEmailBody, strEmailTitle; // EmailInfo + + // 取出參數EmailAddress 取不到則不發送 + // 2013/10/18, Hank, 修改若無EmailAddress欄位會crash + if (colParameters.Contains("EmailAddress") == false || colParameters["EmailAddress"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["EmailAddress"])))) + { + return; + } + else + { + strEmailAddress = Strings.Trim(Conversions.ToString(colParameters["EmailAddress"])); + } + strEmailTitle = "MES AutoRun-" + Strings.Trim(Conversions.ToString(colParameters["JobNo"])) + " Fail"; + strEmailBody = Strings.Trim(Conversions.ToString(colParameters["EmailBody"])); + + LoadGroupBasis(ref dsGroup); + + // 切出 有效群組與非群組 + aryEmailAddress = Strings.Split(strEmailAddress, ","); + for (int i = 0, loopTo = aryEmailAddress.Length - 1; i <= loopTo; i++) + { + if (System.Text.RegularExpressions.Regex.Matches(aryEmailAddress[i], "@").Count == 1) // Non Group + { + strNonGroup += Strings.Trim(aryEmailAddress[i]) + ","; + } + else if (dsGroup.Tables[strGroupBasis].Select("GroupNo ='" + Strings.Trim(aryEmailAddress[i]) + "'").Length > 0) // Group + { + strGroup += Strings.Trim(aryEmailAddress[i]) + ","; + } + } + + // 去掉最後字元為 , + if (Strings.Right(strGroup, 1) == ",") + strGroup = Strings.Mid(strGroup, 1, Strings.Len(strGroup) - 1); + if (Strings.Right(strNonGroup, 1) == ",") + strNonGroup = Strings.Mid(strNonGroup, 1, Strings.Len(strNonGroup) - 1); + + // 群組寄送 + if (!string.IsNullOrEmpty(strGroup)) + { + string argFileName = "N/A"; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref strEmailTitle, strEmailBody, strGroup); + } + // 非群組寄送 + if (!string.IsNullOrEmpty(strNonGroup)) + { + SendMultiEmailNonGroup(ref strEmailTitle, strEmailBody, strNonGroup); + } + + } + + ~clsAutoRunLibrary() + { + + if (objSetting != null) + objSetting = null; + + } + + /// + /// 向資料庫取得使用TipTop時的ERP整合設定資訊。 + /// + /// + /// + public void funGetERPSetting(string pERPName) + { + // Gary Lu 20120614:ERP整合設定統一由此函數取得 + StringReader tmpStringReader; // 將字串轉換成可讀入DataSet的物件 + string strERPSettingTableName; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; // 呼叫WS的字串參數 + var XmlDoc = new XmlDocument(); + try + { + var dsERPSetting_TP = new DataSet(); + + // 組InXml + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "erpname"; + string argname = "ERPName"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, pERPName, argdesc); + + if (pERPName == "TIPTOPICD") + { + strParameter += CombineXMLParameter("activeerp", "ActiveERP", "Integer", "1", ""); + } + + InXml = CombineXMLRequest(strIdentity, strParameter); + + // 呼叫Web服務執行 + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.LoadERPSetting", InXml); + + // 解讀Web服務的執行結果 + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 讀取取出資料表的名稱 + strERPSettingTableName = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loaderpsetting").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsERPSetting_TP.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsERPSetting_TP.ReadXml(tmpStringReader, XmlReadMode.InferSchema); + tmpStringReader.Close(); + } + + if (dsERPSetting_TP.Tables[strERPSettingTableName].Rows.Count > 0) + { + gERPUser = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_USER"].ToString(); + gERPPassword = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_PWD"].ToString(); + gERPWSURL = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_WSURL"].ToString(); + gERPOraganization = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_ORG"].ToString(); + gERPLanguage = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_LANG"].ToString(); + gERPVersion = dsERPSetting_TP.Tables[strERPSettingTableName].Rows[0]["ERP_VERSION"].ToString(); + } + else + { + throw new Exception(TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir)); + } + } + else + { + throw new Exception(TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir)); + } + } + + catch (Exception ex) + { + throw; + } + } + + /// + /// 取得ERP整合的設定資料 + /// + /// + /// + /// + private bool GetERPSetting(ref DataTable pTable, string pERPName = defString, int pEAIType = 0, int pActiveERP = 0) + { + + bool blnResult = false; + var XmlDoc = new XmlDocument(); + var dsTemp = new DataSet(); + + try + { + + // 組InXml + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + if ((pERPName ?? "") != defString) + { + string argvalue_name = "erpname"; + string argname = "ERPName"; + string argtype = "String"; + string argdesc = ""; + strParameter += CombineXMLParameter(argvalue_name, argname, argtype, pERPName, argdesc); + } + if (pEAIType != 0) + { + string argstrAdditional = CombineAddXML_Condition("EAI_Type = " + pEAIType); + strParameter += CombineXMLAdditional(argstrAdditional); + } + if (pActiveERP != 0) + { + strParameter += CombineXMLParameter("activeerp", "ActiveERP", "Integer", Conversions.ToString(pActiveERP), ""); + } + + + + InXml = CombineXMLRequest(strIdentity, strParameter); + + // 呼叫Web服務執行 + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.LoadERPSetting", InXml); + + // 解讀Web服務的執行結果 + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("schema").Item(0).InnerXml; + + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsTemp.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("value").Item(0).InnerXml; + + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsTemp.ReadXml(tmpStringReader, XmlReadMode.InferSchema); + tmpStringReader.Close(); + } + + if (dsTemp.Tables.Count > 0 && dsTemp.Tables[0].Rows.Count > 0) + { + pTable = dsTemp.Tables[0].Copy(); + blnResult = true; + } + else + { + throw new Exception(TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir)); + } + + dtERPSetting = dsTemp.Tables[0]; + var row = dtERPSetting.Rows[0]; + + ERP_EntID = row["ERP_ENTID"].ToString(); + ERP_Site = row["ERP_ORG"].ToString(); + ERP_URL = row["ERP_WSURL"].ToString(); + } + + + else + { + throw new Exception(TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir)); + } + } + catch (Exception ex) + { + throw; + } + finally + { + XmlDoc = null; + dsTemp = null; + } + + return blnResult; + + } + + #region ProcessAbout + + private int[] GetProcessID(string Str_ProcessName) + { + int[] GetProcessIDRet = default(int[]); + int[] IntArray; + int i; + Process[] allRelationalProcs = Process.GetProcessesByName(Str_ProcessName); + i = 0; + IntArray = new int[1]; + + foreach (var thisProcess in allRelationalProcs) + { + try + { + Array.Resize(ref IntArray, i + 1); + IntArray[i] = thisProcess.Id; + i += 1; + } + catch (Exception ex) + { + // MessageBox.Show(ex.GetBaseException.ToString, "GetProcessID Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + } + } + + GetProcessIDRet = IntArray; + return GetProcessIDRet; + + } + + private int[] GetNewPID(int[] OldPID, int[] AllPID) + { + int[] GetNewPIDRet = default(int[]); + int i, j, k; + int[] IntArray; + j = 0; + IntArray = new int[1]; + + var loopTo = Information.UBound(AllPID); + for (i = 0; i <= loopTo; i++) + { + k = Array.IndexOf(OldPID, AllPID[i]); + if (k == -1) + { + Array.Resize(ref IntArray, j + 1); + IntArray[j] = AllPID[i]; + j += 1; + } + } + GetNewPIDRet = IntArray; + return GetNewPIDRet; + + } + + private bool KillProcess(int Str_ProcessID) + { + try + { + var Process = System.Diagnostics.Process.GetProcessById(Str_ProcessID); + + if (Conversions.ToBoolean(!Process.CloseMainWindow())) + { + Process.Kill(); + } + } + catch (Exception ex) + { + // MessageBox.Show(ex.GetBaseException.ToString, "Close Process Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + } + + return default(Boolean); + + } + + #endregion + + private void LoadGroupBasis(ref DataSet dsGroup) + { + // 讀取使用者群組主檔 + var strGroupBasis = default(string); + + // 先判斷是否dataset中已有equipmenttype之datatable,若有,需先remove否則會有錯誤 + if (!(dsGroup.Tables[strGroupBasis] == null)) + { + dsGroup.Tables.Remove(strGroupBasis); + } + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + // 加上IssueState要求取出所有資料 + string argvalue_name = "issuestate"; + string argname = "issuestate"; + string argtype = "Integer"; + string argvalue = defInteger.ToString(); + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + int modAutoRundefTmp = defInteger; + modAutoRundefTmp = Conversions.ToInteger(argvalue); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsUSR.LoadGroupBasis(InXml) + OutXml = modAutoRunLibrary.InvokeSrv("wsUSR.LoadGroupBasis", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + strGroupBasis = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadgroupbasis").Item(0).SelectNodes("name").Item(0).InnerXml; + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadgroupbasis").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsGroup.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadgroupbasis").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsGroup.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc)); + } + } + } + catch (Exception ex) + { + throw; + } + + } + + public string CombineRequestXMLbyCDO(ref object SCI_Object, string pService, string pUserNo, string pServiceName, string pCalledID = defString, string pRequestKey = defString) + { + string CombineRequestXMLbyCDORet = default(string); + + DataRow[] drERPSetting; + string strFilter = ""; + + do + { + try + { + strFilter = "ERP_Name ='" + pService + "' "; + if ((pCalledID ?? "") != defString && string.IsNullOrEmpty(pCalledID) == false) + strFilter += " And CalledID ='" + pCalledID + "' "; + // 取得服務資訊 + drERPSetting = dtERPSetting.Select(strFilter); + if (drERPSetting == null) + break; + if (drERPSetting.Length != 1) + break; + if ((pCalledID ?? "") == defString) + { + pCalledID = drERPSetting[0]["CalledID"].ToString(); + } + + // 2017-03-17, Joe, 加Parameter for E10 + (SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).enterprise_no = drERPSetting[0]["ERP_ENTID"].ToString(); + (SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).site_no = drERPSetting[0]["ERP_ORG"].ToString(); + + // 轉XML + string RequestHead = ""; + RequestHead += ""; + string RequestDataKey = "" + drERPSetting[0]["ERP_ENTID"].ToString() + "" + drERPSetting[0]["ERP_ORG"].ToString() + ""; + string RequestXML_Body = Conversions.ToString((SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).ParseXml()); + pRequestKey = modAutoRunLibrary.GetRequestKey(RequestHead); + string RequestHeader = "" + RequestHead + RequestDataKey + "" + RequestXML_Body + ""; + // CDO to XML + CombineRequestXMLbyCDORet = RequestHeader; + } + + catch (Exception ex) + { + throw; + } + } + while (false); + return CombineRequestXMLbyCDORet; + + } + + /// + /// EAI 檢核編碼(MD5) + /// + /// + /// + // Private Function GetRequestKey(ByVal input As String) As String + + // Const ID As String = "28682266" ' 鼎新統編 + + // Dim key As String = "" + // Dim md5Hasher As MD5 = MD5.Create() ' 建立MD5物件 + + // Try + + // input += ID + + // ' 將input轉換成MD5,並且以Bytes傳回,由於ComputeHash只接受Bytes型別參數,所以要先轉型別為Bytes + // Dim data As Byte() = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(input)) + + // ' 建立StringBuilder物件 + // Dim sb As New StringBuilder() + + // ' 將Bytes轉型別為String,並且以16進位存放 + // For i As Integer = 0 To data.Length - 1 + // sb.Append(data(i).ToString("x2")) + // Next i + + // key = sb.ToString + + // Catch ex As Exception + // Throw + // Finally + // md5Hasher = Nothing + // End Try + + // Return key + + // End Function + + #endregion + + #region 標準版JobName + + #region Tip Top ERP & MES 標準整合 + + #region --- TP ERP Request --- + + public string cbXMLRequest_TP(string strAccess, string strParameter, string strMaster, string strDetail) + { + string cbXMLRequest_TPRet = default(string); + + cbXMLRequest_TPRet = "" + '\n'; + cbXMLRequest_TPRet += strAccess + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += strParameter + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += strMaster + '\n'; + cbXMLRequest_TPRet += strDetail + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += "" + '\n'; + cbXMLRequest_TPRet += ""; + return cbXMLRequest_TPRet; + + } + + public string cbXMLAccess_TP(string User = null, string Password = null, string ApplicationName = null, string Source = null, string Oraganization = null, string Language = null, string ERPName = "TIPTOP") + { + string cbXMLAccess_TPRet = default(string); + try + { + // Authentication User; Password; Connection Application; Source; Organization Name; Local Language + // Dim ary As Array = Split(GetAppSettings("ERPSignIn"), ";") + // If String.IsNullOrEmpty(ary(0)) = False Then User = ary(0) + // If String.IsNullOrEmpty(ary(1)) = False Then Password = ary(1) + // If String.IsNullOrEmpty(ary(2)) = False Then ApplicationName = ary(2) + // If String.IsNullOrEmpty(ary(3)) = False Then Source = ary(3) + // If String.IsNullOrEmpty(ary(4)) = False Then Oraganization = ary(4) + // If String.IsNullOrEmpty(ary(5)) = False Then Language = ary(5) + + // Garu Lu 20120618:自tblSysERPSetting表取得ERP設定 + funGetERPSetting(ERPName); + + if (User == null) + User = gERPUser; + if (Password == null) + Password = gERPPassword; + if (ApplicationName == null) + ApplicationName = "MES"; + if (Source == null) + Source = Environment.MachineName; + if (Oraganization == null) + Oraganization = gERPOraganization; + if (Language == null) + Language = gERPLanguage; + } + + catch (Exception ex) + { + throw ex; + + } + // Gary Lu 20120618:Source的IP在此取得,並加上過濾假IP + // Dim heserver As Net.IPHostEntry = System.Net.Dns.Resolve(My.Computer.Name) + // Dim curAdd As Net.IPAddress + // For Each curAdd In heserver.AddressList + // If curAdd.ToString.Substring(0, 7) <> "169.254" Then + // Source = curAdd.ToString + // Exit For + // End If + // Next + cbXMLAccess_TPRet = "" + '\n'; + cbXMLAccess_TPRet += "" + '\n'; + cbXMLAccess_TPRet += "" + '\n'; + cbXMLAccess_TPRet += "" + '\n'; + cbXMLAccess_TPRet += "" + '\n'; + cbXMLAccess_TPRet += ""; + return cbXMLAccess_TPRet; + + } + + public string cbXMLParameter_TP(string strRecord) + { + string cbXMLParameter_TPRet = default(string); + + cbXMLParameter_TPRet = "" + '\n'; + cbXMLParameter_TPRet += strRecord + '\n'; + cbXMLParameter_TPRet += ""; + return cbXMLParameter_TPRet; + + } + + public string cbXMLMaster_TP(string MasterName, string strRecord) + { + string cbXMLMaster_TPRet = default(string); + + cbXMLMaster_TPRet = "" + '\n'; + cbXMLMaster_TPRet += strRecord + '\n'; + cbXMLMaster_TPRet += ""; + return cbXMLMaster_TPRet; + + } + + public string cbXMLDetail_TP(string DetailName, string strRecord) + { + string cbXMLDetail_TPRet = default(string); + + cbXMLDetail_TPRet = "" + '\n'; + cbXMLDetail_TPRet += strRecord; + cbXMLDetail_TPRet += ""; + return cbXMLDetail_TPRet; + + } + + public string cbXMLRecord_TP(string strField) + { + string cbXMLRecord_TPRet = default(string); + + cbXMLRecord_TPRet = "" + '\n'; + cbXMLRecord_TPRet += strField; + cbXMLRecord_TPRet += ""; + return cbXMLRecord_TPRet; + + } + + public string cbXMLField_TP(string name, string value) + { + string cbXMLField_TPRet = default(string); + + cbXMLField_TPRet = "" + '\n'; + return cbXMLField_TPRet; + + } + + #endregion + + #region --- TP ERP Response --- + + /// + /// 檢查ERP處理後結果: ERP執行狀態 + /// + /// + /// + /// + public bool chkExecutionStatus_TP(XmlDocument Xmldoc, ref string code, ref string sqlcode, ref string description) + { + bool chkExecutionStatus_TPRet = default(bool); + + // xmldoc.DocumentElement("Execution").ChildNodes(0).Attributes("code").Value + chkExecutionStatus_TPRet = false; + + var de = Xmldoc.DocumentElement["Execution"]; + if (de == null == true) + return chkExecutionStatus_TPRet; + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes[i].Name == "Status") + { + var cn = de.ChildNodes[i]; + code = de.ChildNodes[i].Attributes["code"].Value; + sqlcode = de.ChildNodes[i].Attributes["sqlcode"].Value; + description = de.ChildNodes[i].Attributes["description"].Value; + chkExecutionStatus_TPRet = true; + } + } + + return chkExecutionStatus_TPRet; + + } + + public bool chkResponseContent_TP(XmlDocument Xmldoc, string responseName, ref string responseValue) + { + bool chkResponseContent_TPRet = default(bool); + + // xmldoc.DocumentElement("ResponseContent").ChildNodes.Item(0).ChildNodes(0).ChildNodes(0).Attributes("value").Value + + try + { + chkResponseContent_TPRet = false; + + var de = Xmldoc.DocumentElement["ResponseContent"]; + if (de == null == true) + return chkResponseContent_TPRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "Parameter") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "Record") + { + for (int k = 0, loopTo2 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes.Count - 1; k <= loopTo2; k++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].Attributes.Count > 0) + { + if ((de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].Attributes["name"].Value ?? "") == (responseName ?? "")) + { + responseValue = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].Attributes["value"].Value; + } + } + } + } + } + } + } + chkResponseContent_TPRet = true; + } + catch (Exception ex) + { + chkResponseContent_TPRet = false; + } + + return chkResponseContent_TPRet; + } + + + public bool chkResponseContentDocument_TP(XmlDocument Xmldoc, string responseName, ref string[] responseValue) + { + bool chkResponseContentDocument_TPRet = default(bool); + + // xmldoc.DocumentElement("ResponseContent").ChildNodes.Item(0).ChildNodes(0).ChildNodes(0).Attributes("value").Value + + try + { + chkResponseContentDocument_TPRet = false; + + var de = Xmldoc.DocumentElement["ResponseContent"]; + if (de == null == true) + return chkResponseContentDocument_TPRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "Document") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "RecordSet") + { + for (int k = 0, loopTo2 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes.Count - 1; k <= loopTo2; k++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].Name == "Master") + { + for (int l = 0, loopTo3 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes.Count - 1; l <= loopTo3; l++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].Name == "Record") + { + for (int m = 0, loopTo4 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes.Count - 1; m <= loopTo4; m++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes.Count > 0) + { + if ((de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes["name"].Value ?? "") == (responseName ?? "")) + { + responseValue[j] = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes["value"].Value; + } + } + } + } + } + } + } + } + } + } + } + chkResponseContentDocument_TPRet = true; + } + catch (Exception ex) + { + chkResponseContentDocument_TPRet = false; + } + + return chkResponseContentDocument_TPRet; + } + + public bool chkResponseContentDocument_TP_Multi(XmlDocument Xmldoc, string[] responseName, ref string[][] responseValue) + { + bool chkResponseContentDocument_TP_MultiRet = default(bool); + + // xmldoc.DocumentElement("ResponseContent").ChildNodes.Item(0).ChildNodes(0).ChildNodes(0).Attributes("value").Value + + int intIndex; + + try + { + chkResponseContentDocument_TP_MultiRet = false; + + var de = Xmldoc.DocumentElement["ResponseContent"]; + if (de == null == true) + return chkResponseContentDocument_TP_MultiRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "Document") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "RecordSet") + { + for (int k = 0, loopTo2 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes.Count - 1; k <= loopTo2; k++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].Name == "Master") + { + for (int l = 0, loopTo3 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes.Count - 1; l <= loopTo3; l++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].Name == "Record") + { + for (int m = 0, loopTo4 = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes.Count - 1; m <= loopTo4; m++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes.Count > 0) + { + + intIndex = Array.IndexOf(responseName, de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes["name"].Value); + if (intIndex >= 0) + { + responseValue[intIndex][j] = de.ChildNodes.Item(i).ChildNodes[j].ChildNodes[k].ChildNodes[l].ChildNodes[m].Attributes["value"].Value; + } + + } + } + } + } + } + } + } + } + } + } + chkResponseContentDocument_TP_MultiRet = true; + } + catch (Exception ex) + { + chkResponseContentDocument_TP_MultiRet = false; + } + + return chkResponseContentDocument_TP_MultiRet; + } + + #endregion + + // ======================================================================================================================== + // 程式名稱:funCreateWOWorkReportData_TP + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:建立工單生產報工單資料 + // 撰寫人員:Acer.Wei + // 撰寫日期:2011/01/31 + // ======================================================================================================================== + private object funCreateWOWorkReportData_TP(Collection colParameters = null) + { + object funCreateWOWorkReportData_TPRet = default(object); + + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + string strSQL; + var XmlDoc = new XmlDocument(); + //System.Data.OleDb.OleDbDataAdapter daTemp; + + var CollectionSQL = new Collection(); + var colSQL_T2 = new Collection(); + var colSQL_T3 = new Collection(); + + string strAccess = string.Empty; + string strParameter = string.Empty; + string strMaster = string.Empty; + string strDetail = string.Empty; + + string strTempField = string.Empty; + string strTempRecord = string.Empty; + + var arriveTime = DateTime.Now; + + string strSheetType = string.Empty; // 報工單別 + string strGroupNo = string.Empty; // 異常處理群組 + + // 2012/09/25, Aaron, 將生產日期改用起訖方式 + string strProductionDateFrom = string.Empty; // 生產日期起(如無指定則帶昨天) + string strProductionDateEnd = string.Empty; // 生產日期迄(如無指定則帶今天) + + string strEquipmentNo = string.Empty; // 設備 + string strShiftNo = string.Empty; // 班別 + string strMONo = string.Empty; // 工單 + + string auto = "N"; // Request... Y: 建立入庫單後自動確認+過帳, N:建立入庫單後不自動確認過帳 + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + string sqlcode = string.Empty; + string description = string.Empty; // Response... 錯誤訊息 + string responseName = "srf01"; // Request/Response... 報工單單號ERP欄位名稱 + string responseValue = string.Empty; // Request/Response... 報工單單號, 成功回傳ERP單號 + string costCenter = "N"; // Request... Y:表示整合成本中心;N:表示未整合成本中心 + string VirtualEQP = ""; // Request... 整合成本中心時,沒有機台編號的人工作業站帶入的ERP虛擬機台編號 + + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + + string ReturnMSG = string.Empty; + + string strSQL_Field, strSQL_Value; + + var datNow = DateTime.Now; + + // 2019/3/20 YuWen SequenceNo增加亂數3碼 + string strSequenceNo = Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "_" + Convert.ToInt16(Math.Floor((1 - 999 + 1) * VBMath.Rnd()) + 999d).ToString("000"); + + // 2019/6/11,Ning, WorkReportID + string strWorkReportID = Strings.Format(datNow, "yyyyMMddHHmmssfff"); + + do + { + try + { + // ParameterXX參數說明 + // 01 報工單單別 + // 02 使用者群組 + // 03 生產日期[yyyy/MM/dd](如無指定則用昨天) + // 04 ERP自動確認(如無指定則用N) + + // 2012/09/25, Aaron + // 05 整合成本中心 Y:表示整合成本中心;N:表示未整合成本中心;未設定預設值為N + // 06 整合成本中心時,純人工作業站沒有機台,回報人時需所指定ERP虛擬機台編號,如果未設定,ERP將抓取ERP工單上的成本中心欄位作為歸屬機台。 + + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funCreateWOWorkReportData_TPRet = "SheetType not found!!!(Parameter 01)"; + break; + } + else + { + strSheetType = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])); + } + + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + funCreateWOWorkReportData_TPRet = "User GroupNo not found!!!(Parameter 02)"; + break; + } + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (colParameters["Parameter03"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strProductionDateFrom = Strings.Format(datNow.AddDays(-1), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(datNow, "yyyy/MM/dd"); + } + else + { + do + { + try + { + strProductionDateFrom = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd"); + } + catch (Exception ex) + { + funCreateWOWorkReportData_TPRet = "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 03)"; + break; + } + } + while (false); + } + + // Parameter04為傳入參數,作為自動確認,若無此值則用N + if (colParameters["Parameter04"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + auto = "N"; + } + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "Y", false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "N", false))) + { + auto = colParameters["Parameter04"].ToString().ToUpper(); + } + else + { + funCreateWOWorkReportData_TPRet = "Parameter 04 not Y or N"; + break; + } + + // 2012/09/25, Aaron + // Parameter05為傳入參數,作為整合成本中心,若無此值則用N + if (colParameters["Parameter05"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter05"])))) + { + costCenter = "N"; + } + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().ToUpper(), "Y", false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().ToUpper(), "N", false))) + { + costCenter = colParameters["Parameter05"].ToString().ToUpper(); + } + else + { + funCreateWOWorkReportData_TPRet = "Parameter 05 not Y or N"; + break; + } + + // Parameter06為傳入參數,作為defVirtualEQP + if (colParameters["Parameter06"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter06"])))) + { + VirtualEQP = ""; + } + else + { + VirtualEQP = colParameters["Parameter06"].ToString().Trim().ToUpper(); + } + + cnnTemp = CreateConnection(strConnectionString); + + // 取得設備第1筆資料 + strSQL = "Select * From tblEQPEquipmentBasis"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strEquipmentNo = Conversions.ToString(drTemp["EquipmentNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strEquipmentNo) || string.IsNullOrEmpty(strEquipmentNo)) + { + funCreateWOWorkReportData_TPRet = "EquipmentNo not found!!!"; + break; + } + + // 取得班別第1筆資料 + strSQL = "Select * From tblUSRShiftBasis"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strShiftNo = Conversions.ToString(drTemp["ShiftNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strShiftNo) || string.IsNullOrEmpty(strShiftNo)) + { + funCreateWOWorkReportData_TPRet = "ShiftNo not found!!!"; + break; + } + + + // 2017/12/27,sammi.MEStoERP生產報工抛轉資料,1:平攤(tblWIPCont_Resource_Share),2:原始(未平攤,tblWIPCont_Resource) + string tblCont_Resource = "tblWIPCont_Resource_Share "; + bool blnReCalResource = true; + bool blnShare = true; + + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWORKREPORTDATA' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "2") + { + tblCont_Resource = "tblWIPCont_Resource"; + blnReCalResource = false; + blnShare = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/07/19 Lena, 增加系統參數,判定是否需要重匯機時、人時, 0:No、1:Yes. + // 當為平攤時, 必須再參考系統參數中是否有設定要重匯機時 + if (blnReCalResource) + { + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWorkReportReCalResource' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "0") + { + blnReCalResource = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (blnReCalResource) + { + // 機時,人時 + var colParameters_Resource = new Collection(); + colParameters_Resource.Add(strProductionDateFrom, "Parameter01"); + // funCreateWOWorkReportData_T100,TP,WF,call funShareEQPTime/funShareEMPTime,發Mail通知,統一由主funciton發出. + // colParameters_Resource.Add(strGroupNo, "Parameter02") + colParameters_Resource.Add("", "Parameter02"); + + string strResult_EQP; + strResult_EQP = Conversions.ToString(funShareEQPTime(colParameters_Resource)); + if (strResult_EQP != "success") + { + funCreateWOWorkReportData_TPRet = "funShareEQPTime:" + strResult_EQP; + break; + } + + string strResult_EMP; + strResult_EMP = Conversions.ToString(funShareEMPTime(colParameters_Resource)); + if (strResult_EMP != "success") + { + funCreateWOWorkReportData_TPRet = "funShareEMPTime:" + strResult_EMP; + break; + } + } + + // ---- InXml ----- + // + strAccess = cbXMLAccess_TP(); + + // + strTempField = cbXMLField_TP("status", auto); + strTempField += cbXMLField_TP("costcenter", costCenter); + strTempRecord = cbXMLRecord_TP(strTempField); + strParameter = cbXMLParameter_TP(strTempRecord); + + int intItemNo = 1; + decimal decT_EQP, decT_EMP; // 各機台的人時工時 + + if (costCenter == "N") // 2012/09/25, Aaron, 依工單報工,機台生產線欄位為設備主檔第一筆資料,僅為了填入值讓ERP接受。 + { + + // + strTempField = cbXMLField_TP(responseName, strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srf02", Strings.Format(datNow, "yyyy/MM/dd")); // 報工日期 + strTempField += cbXMLField_TP("srf03", strEquipmentNo); // 機台生產線 + strTempField += cbXMLField_TP("srf04", strShiftNo); // 班別 + strTempField += cbXMLField_TP("srf05", strProductionDateFrom); // 生產日期 + strTempField += cbXMLField_TP("srf07", "2"); // 報工類別(1:重複性生產報工;2:工單生產報工) + strTempRecord = cbXMLRecord_TP(strTempField); + strMaster = cbXMLMaster_TP("srf_file", strTempRecord); + + // + strTempRecord = string.Empty; + + // 2012/09/25, Aaron, 修正原本只能在Oracle上Run的語法以及Where日期條件修正支援Index作法。 + // 2019/6/11,Ning,加上ERPFlag=0的條件 + if (strDataBaseType != "oracle") + { + strSQL = " Select distinct CONVERT(char(10), EventTime, 111) EventTime, MONo, "; + strSQL += "ISNULL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=0 And EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "' And MONo=A.MONo),0) EMP, "; + strSQL += "ISNULL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=1 And EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "' And MONo=A.MONo),0) EQP "; + strSQL += "From " + tblCont_Resource + " A "; + strSQL += "Where EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "'"; + strSQL += " And IsNull(A.ERPFlag,0) = 0"; + } + else + { + strSQL = " Select distinct To_Char(EventTime,'YYYY/MM/DD') EventTime, MONo, "; + strSQL += "NVL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=0 And EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') And MONo=A.MONo),0) EMP, "; + strSQL += "NVL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=1 And EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') And MONo=A.MONo),0) EQP "; + strSQL += "From " + tblCont_Resource + " A "; + strSQL += "Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strSQL += " And Nvl(A.ERPFlag,0) = 0"; + } + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + strTempField = ""; + + var colSQL_Log = new Collection(); + decT_EMP = 0m; + decT_EQP = 0m; + + while (drTemp.Read()) + { + strTempField = cbXMLField_TP("srg01", strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srg05", "0"); // 良品數 + strTempField += cbXMLField_TP("srg06", "0"); // 不良品數 + strTempField += cbXMLField_TP("srg07", "0"); // 報廢數量 + strTempField += cbXMLField_TP("srg10", Conversions.ToString(drTemp["EMP"])); // 工時(分) + strTempField += cbXMLField_TP("srg13", "1"); // 1:主產品 ; 2:聯產品 ; 3:副產品 ; 4:再生產品 + strTempField += cbXMLField_TP("srg15", "Y"); // 檢驗否(y/n) + strTempField += cbXMLField_TP("srg16", Conversions.ToString(drTemp["MONo"])); // 工單編號 + strTempField += cbXMLField_TP("srg19", Conversions.ToString(drTemp["EQP"])); // 機時(分) + + strTempRecord += cbXMLRecord_TP(strTempField) + '\n'; + + strMONo = Conversions.ToString(strMONo + Operators.AddObject(Constants.vbCrLf, drTemp["MONo"])); + + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReportDetail_TP + strSQL_Field = "Insert into tblERPWorkReportDetail_TP " + " (SequenceNo,ItemNo,srg01,srg05,srg06,srg07,srg10,srg13,srg15,srg16,srg19 "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "'," + intItemNo + ",'" + strSheetType + "',0,0,0," + + drTemp["EMP"] + ",1,'Y','" + drTemp["MONo"] + "','" + drTemp["EQP"] + "'"); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 2019/6/11, Ning, 紀錄報工單拋轉明細資料(T3) + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail (WorkReportID, ItemNo, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, SequenceNo)" + " Values ('" + strWorkReportID + "'," + intItemNo + ",'" + strEquipmentNo + "','" + + drTemp["MONo"] + "'," + drTemp["EQP"] + "," + drTemp["EMP"] + ",'" + strSequenceNo + "')"); + colSQL_T3.Add(strSQL); + + // 2019/6/13, Ning, 加總人時機時, 以紀錄報工單拋轉設備彙整資料表(T2) + decT_EMP = Conversions.ToDecimal(Operators.AddObject(decT_EMP, drTemp["EMP"])); + decT_EQP = Conversions.ToDecimal(Operators.AddObject(decT_EQP, drTemp["EQP"])); + + intItemNo += 1; + } + drTemp.Close(); + + if (string.IsNullOrEmpty(strTempField)) + { + funCreateWOWorkReportData_TPRet = strProductionDateFrom + " Warning!!! No transaction data found!!!"; + return funCreateWOWorkReportData_TPRet; + } + + strDetail = cbXMLDetail_TP("srg_file", strTempRecord); + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, strParameter, strMaster, strDetail); + + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + // ----- 取得ERP執行結果 code, sqlcode, description ----- + chkExecutionStatus_TP(XmlDoc, ref code, ref sqlcode, ref description); + + // ----- 取得ERP入庫單號 ----- + chkResponseContent_TP(XmlDoc, responseName, ref responseValue); + + // 2013/03/08, Aaron, 執行ERP交易完畢寫入Log + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TP", My.Computer.Name, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData") + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TP", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData", strException: argstrException); + + if (code == "success") + { + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReport_TP + strSQL_Field = "Insert into tblERPWorkReport_TP " + " (SequenceNo,srf01,srf02,srf03,srf04,srf05,srf07,ERPNo,CreateDate,StartDate,EndDate "; + strSQL_Value = " Values ('" + strSequenceNo + "','" + strSheetType + "','" + Strings.Format(datNow, "yyyy/MM/dd") + "','" + strEquipmentNo + "','" + strShiftNo + "','" + strProductionDateFrom + "','2','" + responseValue + "', To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateEnd), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 以一次抛轉為單位,直接先寫入. + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_Log); + + // 2019/6/13, Ning, 記錄T2 + strSQL = "Insert Into tblERPWorkRPT_EQPSummary (WorkReportID, EquipmentNo, EQP_ResValue, EMP_ResValue, ERPFlag, ERPNo)" + " Values('" + strWorkReportID + "','" + strEquipmentNo + "'," + decT_EQP + "," + decT_EMP + ",1,'" + responseValue + "')"; + colSQL_T2.Add(strSQL); + } + + else + { + funCreateWOWorkReportData_TPRet = "fail;ERP Return Message:" + description + ""; + break; + } + } + + else // 2012/09/25, Aaron, 整合成本中心,依設備、工單報工。 + { + + // 2012/09/25, Aaron, SQL語法說明:先依日期取出人時部分,同一作業加工紀錄的人時必須先Group By,因為有可能有多人加工 + // 人時彙總完後,再判斷是否為多機台加工,如果是1台以上機台,人時必須均分到各機台上 + // 如果是沒有機台純人工, ERP收到資料後會以ERP工單單頭的成本中心欄位作為成本中心歸屬,後再取出機時Join, + + // 2017/11/23 KunYuan:若為虛擬機,可能有工時/機時皆為0之狀況,故需加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 ↓ + + // If strDataBaseType <> "oracle" Then + // strSQL = " SELECT F.EVENTTIME, F.EQUIPMENTNO, F.MONO, SUM(F.EQP) EQP, ROUND(SUM(F.EMP), 2) EMP FROM " + // strSQL += "( " + // strSQL += "SELECT A.EVENTTIME, ISNULL(B.RESITEM,'" & VirtualEQP & "') EQUIPMENTNO, A.MONO, SUM(ISNULL(B.RESVALUE,0)) EQP, " + // strSQL += "(SUM(ISNULL(A.RESVALUE,0)) / IIF((SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0, 1, (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1))) EMP " + // strSQL += "FROM (SELECT CONVERT(CHAR(10), EVENTTIME, 111) EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM TBLWIPCONT_RESOURCE A WHERE A.RESCLASS = 0 AND A.EVENTTIME >= '" & strProductionDateFrom & "' AND A.EVENTTIME < '" & strProductionDateEnd & "' GROUP BY CONVERT(CHAR(10), EVENTTIME, 111), A.MONO, A.LOGGROUPSERIAL) A " + // strSQL += "LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + // strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO, A.LOGGROUPSERIAL " + // strSQL += ") F " + // strSQL += "GROUP BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO " + // strSQL += "ORDER BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO " + // Else + // strSQL = " SELECT A.EVENTTIME, NVL(B.RESITEM, '" & VirtualEQP & "') AS EQUIPMENTNO, A.MONO, " + // strSQL += "SUM(NVL(B.RESVALUE,0)) EQP, " + // strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 THEN A.RESVALUE / (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) ELSE A.RESVALUE END),2) AS EMP " + // strSQL += "FROM (SELECT TO_CHAR(A.EVENTTIME,'YYYY/MM/DD') EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM TBLWIPCONT_RESOURCE A WHERE A.RESCLASS = 0 AND A.EVENTTIME >= TO_DATE('" & strProductionDateFrom & "','YYYY/MM/DD') AND A.EVENTTIME < TO_DATE('" & strProductionDateEnd & "','YYYY/MM/DD') GROUP BY TO_CHAR(A.EVENTTIME,'YYYY/MM/DD'), A.MONO, A.LOGGROUPSERIAL) A " + // strSQL += "LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + // strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO " + // strSQL += "ORDER BY A.EVENTTIME, B.RESITEM, A.MONO " + // End If + + // 2021/01/12 Grace Mantis 85731: 須排除已拋轉資料, 否則會重複拋送 + if (strDataBaseType != "oracle") + { + strSQL = " SELECT F.EVENTTIME, F.EQUIPMENTNO, F.MONO, SUM(F.EQP) EQP, ROUND(SUM(F.EMP), 2) EMP FROM "; + strSQL += "( "; + strSQL += "SELECT A.EVENTTIME, ISNULL(B.RESITEM,'" + VirtualEQP + "') EQUIPMENTNO, A.MONO, SUM(ISNULL(B.RESVALUE,0)) EQP, "; + strSQL += "(SUM(ISNULL(A.RESVALUE,0)) / IIF((SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0, 1, (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1))) EMP "; + strSQL += "FROM (SELECT CONVERT(CHAR(10), EVENTTIME, 111) EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM " + tblCont_Resource + " A WHERE A.RESCLASS = 0 And NVL (ERPFlag, 0) = 0 AND A.EVENTTIME >= '" + strProductionDateFrom + "' AND A.EVENTTIME < '" + strProductionDateEnd + "' GROUP BY CONVERT(CHAR(10), EVENTTIME, 111), A.MONO, A.LOGGROUPSERIAL) A "; + strSQL += "LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += " Where IsNull(B.ERPFlag,0) = 0 "; + strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO, A.LOGGROUPSERIAL "; + strSQL += ") F WHERE (EQP > 0 OR EMP > 0) "; + strSQL += "GROUP BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO "; + strSQL += "ORDER BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO "; + } + else + { + strSQL = "SELECT Z.* FROM ( "; + strSQL += " SELECT A.EVENTTIME, NVL(B.RESITEM, '" + VirtualEQP + "') AS EQUIPMENTNO, A.MONO, "; + strSQL += "SUM(NVL(B.RESVALUE,0)) EQP, "; + strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 THEN A.RESVALUE / (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) ELSE A.RESVALUE END),2) AS EMP "; + strSQL += "FROM (SELECT TO_CHAR(A.EVENTTIME,'YYYY/MM/DD') EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM " + tblCont_Resource + " A WHERE A.RESCLASS = 0 And NVL (ERPFlag, 0) = 0 AND A.EVENTTIME >= TO_DATE('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EVENTTIME < TO_DATE('" + strProductionDateEnd + "','YYYY/MM/DD') GROUP BY TO_CHAR(A.EVENTTIME,'YYYY/MM/DD'), A.MONO, A.LOGGROUPSERIAL) A "; + strSQL += "LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += " Where Nvl(B.ERPFlag,0) = 0 "; + strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO "; + strSQL += "ORDER BY A.EVENTTIME, B.RESITEM, A.MONO "; + strSQL += ") Z WHERE (Z.EQP > 0 OR Z.EMP > 0) "; + } + + // 2017/11/23 KunYuan:若為虛擬機,可能有工時/機時皆為0之狀況,故需加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 ↑ + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + var dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "costCenter"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "costCenter", cnnTemp); + + strEquipmentNo = ""; + if (dsTemp.Tables["costCenter"].Rows.Count > 0) + { + + var aryEquipmentNo = new ArrayList(); // 2020/12/31 Grace 若參數6有設定虛擬機, 設備資料會包含 + var aryMONo = new ArrayList(); + // strMONo = dsTemp.Tables("MONO").ToString '2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + + for (int i = 0, loopTo = dsTemp.Tables["costCenter"].Rows.Count - 1; i <= loopTo; i++) + { + if (aryEquipmentNo.IndexOf(dsTemp.Tables["costCenter"].Rows[i]["EQUIPMENTNO"].ToString()) == -1) + { + aryEquipmentNo.Add(dsTemp.Tables["costCenter"].Rows[i]["EQUIPMENTNO"].ToString()); + } + if (aryMONo.IndexOf(dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString()) == -1) + { + if (string.IsNullOrEmpty(strMONo)) + { + strMONo = dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString(); + } + else + { + strMONo = strMONo + "," + dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString(); + } + aryMONo.Add(dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString()); + } + } + + // 進行拋轉之前,先呼叫EEP,檢查預計要拋轉的設備編號是否存在於ERP,不存在就中止拋轉 + var eci = new string[1]; + bool exitTry = false; + for (int i = 0, loopTo1 = aryEquipmentNo.Count - 1; i <= loopTo1; i++) + { + if (!string.IsNullOrEmpty(aryEquipmentNo[i].ToString())) + { + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, cbXMLParameter_TP(cbXMLRecord_TP(cbXMLField_TP("condition", "eci01 = '" + aryEquipmentNo[i].ToString() + "'"))), "", ""); + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.GetMachineData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.GetMachineData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + eci[0] = ""; + if (chkResponseContentDocument_TP(XmlDoc, "eci01", ref eci) == false || string.IsNullOrEmpty(eci[0])) + { + funCreateWOWorkReportData_TPRet = "ERP Equipment Not Found! (" + aryEquipmentNo[i].ToString() + ")"; + exitTry = true; + break; + } + + } + } + + if (exitTry) + { + break; + } + + + bool exitTry1 = false; + for (int i = 0, loopTo2 = aryEquipmentNo.Count - 1; i <= loopTo2; i++) + { + + // Reset + var colSQL_Log = new Collection(); + colSQL_T2 = new Collection(); + colSQL_T3 = new Collection(); + CollectionSQL = new Collection(); + + datNow = DateTime.Now; + intItemNo = 1; + + decT_EMP = 0m; + decT_EQP = 0m; + + // 2019/3/20 YuWen SequenceNo增加亂數3碼 + strSequenceNo = Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "_" + Convert.ToInt16(Math.Floor((1 - 999 + 1) * VBMath.Rnd()) + 999d).ToString("000"); + + // + strTempField = cbXMLField_TP(responseName, strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srf02", Strings.Format(datNow, "yyyy/MM/dd")); // 報工日期 + strTempField += cbXMLField_TP("srf03", Conversions.ToString(aryEquipmentNo[i])); // 機台生產線 + strTempField += cbXMLField_TP("srf04", strShiftNo); // 班別 + strTempField += cbXMLField_TP("srf05", strProductionDateFrom); // 生產日期 + strTempField += cbXMLField_TP("srf07", "2"); // 報工類別(1:重複性生產報工;2:工單生產報工) + strTempRecord = cbXMLRecord_TP(strTempField); + strMaster = cbXMLMaster_TP("srf_file", strTempRecord); + + // + strTempRecord = string.Empty; + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false))) + { + dsTemp.Tables["costCenter"].DefaultView.RowFilter = "EquipmentNo is Null "; + } + else + { + dsTemp.Tables["costCenter"].DefaultView.RowFilter = Conversions.ToString("EquipmentNo = '" + aryEquipmentNo[i] + "'"); + } + strEquipmentNo = Conversions.ToString(strEquipmentNo + Operators.AddObject(Constants.vbCrLf, aryEquipmentNo[i])); + + for (int j = 0, loopTo3 = dsTemp.Tables["costCenter"].DefaultView.Count - 1; j <= loopTo3; j++) + { + // 2017/11/23 KunYuan:加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 + if (Conversions.ToDecimal(dsTemp.Tables["costCenter"].DefaultView[j]["EMP"]) == 0m & Conversions.ToDecimal(dsTemp.Tables["costCenter"].DefaultView[j]["EQP"]) == 0m) + { + continue; + } + + strTempField = cbXMLField_TP("srg01", strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srg05", "0"); // 良品數 + strTempField += cbXMLField_TP("srg06", "0"); // 不良品數 + strTempField += cbXMLField_TP("srg07", "0"); // 報廢數量 + strTempField += cbXMLField_TP("srg10", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["EMP"])); // 工時(分) + strTempField += cbXMLField_TP("srg13", "1"); // 1:主產品 ; 2:聯產品 ; 3:副產品 ; 4:再生產品 + strTempField += cbXMLField_TP("srg15", "Y"); // 檢驗否(y/n) + strTempField += cbXMLField_TP("srg16", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["MONo"])); // 工單編號 + strTempField += cbXMLField_TP("srg19", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["EQP"])); // 機時(分) + + strTempRecord += cbXMLRecord_TP(strTempField) + '\n'; + + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReportDetail_TP + strSQL_Field = "Insert into tblERPWorkReportDetail_TP " + " (SequenceNo,ItemNo,srg01,srg05,srg06,srg07,srg10,srg13,srg15,srg16,srg19 "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "'," + intItemNo + ",'" + strSheetType + "',0,0,0," + + dsTemp.Tables["costCenter"].DefaultView[j]["EMP"] + ",1,'Y','" + dsTemp.Tables["costCenter"].DefaultView[j]["MONo"] + "','" + + dsTemp.Tables["costCenter"].DefaultView[j]["EQP"] + "'"); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(aryEquipmentNo[i], "", false))) + { + // 2019/6/11, Ning, 紀錄報工單拋轉明細資料 + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail (WorkReportID, ItemNo, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, SequenceNo)" + " Values ('" + strWorkReportID + "'," + intItemNo + ",'" + + aryEquipmentNo[i] + "','" + dsTemp.Tables["costCenter"].DefaultView[j]["MONo"] + "'," + dsTemp.Tables["costCenter"].DefaultView[j]["EQP"] + + "," + dsTemp.Tables["costCenter"].DefaultView[j]["EMP"] + ",'" + strSequenceNo + "')"); + colSQL_T3.Add(strSQL); + } + + // 2019/6/13, Ning, 加總人時機時, 以紀錄報工單拋轉設備彙整資料表 + decT_EMP = Conversions.ToDecimal(Operators.AddObject(decT_EMP, dsTemp.Tables["costCenter"].DefaultView[j]["EMP"])); + decT_EQP = Conversions.ToDecimal(Operators.AddObject(decT_EQP, dsTemp.Tables["costCenter"].DefaultView[j]["EQP"])); + + intItemNo += 1; + } + + if (string.IsNullOrEmpty(strTempField)) + { + funCreateWOWorkReportData_TPRet = strProductionDateFrom + " Warning!!! No transaction data found!!!"; + return funCreateWOWorkReportData_TPRet; + } + + strDetail = cbXMLDetail_TP("srg_file", strTempRecord); + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, strParameter, strMaster, strDetail); + + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + // 一個機台拋一筆單頭, 一工單一筆單身 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + // ----- 取得ERP執行結果 code, sqlcode, description ----- + chkExecutionStatus_TP(XmlDoc, ref code, ref sqlcode, ref description); + + // ----- 取得ERP入庫單號 ----- + chkResponseContent_TP(XmlDoc, responseName, ref responseValue); + + // 2013/03/08, Aaron, 執行ERP交易完畢寫入Log + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TP", My.Computer.Name, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData") + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TP", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData", strException: argstrException1); + + if (code == "success") + { + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReport_TP + strSQL_Field = "Insert into tblERPWorkReport_TP " + " (SequenceNo,srf01,srf02,srf03,srf04,srf05,srf07,ERPNo,CreateDate,StartDate,EndDate "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "','" + strSheetType + "','" + Strings.Format(datNow, "yyyy/MM/dd") + "','" + + aryEquipmentNo[i] + "','" + strShiftNo + "','" + strProductionDateFrom + "','2','" + responseValue + "', To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateFrom), "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateEnd), "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS') "); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 以一次抛轉為單位,直接先寫入. + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_Log); + + // 2020/12/30 Grace 因為tblERPWorkRPT_EQPSummary為設備彙整資料, 因此若為純人時無機台且無設定虛擬機, 不寫入 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(aryEquipmentNo[i], "", false))) + { + // 2019/6/13, Ning, 紀錄T2 + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_EQPSummary (WorkReportID, EquipmentNo, EQP_ResValue, EMP_ResValue, ERPFlag, ERPNo)" + " Values('" + strWorkReportID + "','" + + aryEquipmentNo[i] + "'," + decT_EQP + "," + decT_EMP + ",1,'" + responseValue + "')"); + colSQL_T2.Add(strSQL); + } + + + // 2020/12/29 Grace Mantis 84927: [瑞賢] AUTORUN報工資料重複, 修改為每拋轉一筆報工單資料, 就更新一次MES資料, 避免ERP回復失敗後, 失敗前已拋轉的資料未記錄到, 造成重複拋送 + // ----- 將UNDO鎖住 ----- + string strCond; + string strCond2; + if (strDataBaseType != "oracle") + { + strCond = " Select distinct B.LotSerial "; + strCond += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond += "And A.EventTime >= '" + strProductionDateFrom + "' AND A.EventTime < '" + strProductionDateEnd + "' "; + + strCond2 = ""; + + // 2020/12/31 Grace 若參數6有設定虛擬機, aryEquipmentNo會包含虛擬機資料, 但MES實際報工為人時的資料, 造成後續更新已拋轉資料時, 查詢條件不正確 + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除Equipment為查詢條件 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false)) || Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], VirtualEQP, false)) + { + strCond += " And A.RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + strCond2 = " And RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + } + else + { + strCond = Conversions.ToString(strCond + " And A.RESITEM = '" + aryEquipmentNo[i] + "' "); + + // 2020/12/31 Grace 更新機時之外也需更新到人時 + strCond2 = " Select distinct B.LogGroupSerial "; + strCond2 += " From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond2 += " Where A.LogGroupSerial = B.LogGroupSerial "; + strCond2 += " And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strCond2 = Conversions.ToString(strCond2 + " And RESITEM = '" + aryEquipmentNo[i] + "' "); + strCond2 = " And LogGroupSerial in (" + strCond2 + ") "; + } + } + + else + { + strCond = " Select distinct B.LotSerial "; + strCond += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond += "And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除RESITEM為設備編號的查詢條件 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false)) || Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], VirtualEQP, false)) + { + strCond += " And A.RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + strCond2 = " And RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + } + else + { + strCond = Conversions.ToString(strCond + " And A.RESITEM = '" + aryEquipmentNo[i] + "' "); + + // 2020/12/31 Grace 更新機時之外也需更新到人時 + strCond2 = " Select distinct B.LogGroupSerial "; + strCond2 += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond2 += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond2 += " And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strCond2 = Conversions.ToString(strCond2 + " And RESITEM = '" + aryEquipmentNo[i] + "' "); + strCond2 = " And LogGroupSerial in (" + strCond2 + ") "; + } + } + + strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_TP' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + + // 平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + if (blnShare) + { + strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + + strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + } + + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除Equipment為查詢條件 + // tblCont_Resource壓上ERPFlag與WorkReportID + strSQL = "Update " + tblCont_Resource + " Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "'" + " Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') " + strCond2; + SQLCommandTuning(strDataBaseType, ref strSQL); + CollectionSQL.Add(strSQL); + + // '報工單拋轉彙整資料表(T1) + // strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" & + // " Values('" & strWorkReportID & "', To_Date('" & strProductionDateFrom & "','YYYY/MM/DD'), To_Date('" & strProductionDateEnd & "','YYYY/MM/DD'), 1)" + // CollectionSQL.Add(strSQL) + + // 報工單拋轉設備彙整資料表(T2) + for (int j = 1, loopTo4 = colSQL_T2.Count; j <= loopTo4; j++) + CollectionSQL.Add(colSQL_T2[j]); + + // 報工單拋轉明細資料表(T3) + for (int j = 1, loopTo5 = colSQL_T3.Count; j <= loopTo5; j++) + CollectionSQL.Add(colSQL_T3[j]); + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + else + { + funCreateWOWorkReportData_TPRet = "fail;ERP Return Message:" + description + ""; + exitTry1 = true; + break; + } + } + + if (exitTry1) + { + break; + } + + } + + dsTemp.Dispose(); + + } + + // '----- 將UNDO鎖住 ----- + // Dim strCond As String + // If strDataBaseType <> "oracle" Then + // strCond = " Select distinct B.LotSerial " + // strCond += "From " & tblCont_Resource & " A, tblWIPLotLog B " + // strCond += "Where A.LogGroupSerial = B.LogGroupSerial " + // strCond += "And A.EventTime >= '" & strProductionDateFrom & "' AND A.EventTime < '" & strProductionDateEnd & "' " + // Else + // strCond = " Select distinct B.LotSerial " + // strCond += "From " & tblCont_Resource & " A, tblWIPLotLog B " + // strCond += "Where A.LogGroupSerial = B.LogGroupSerial " + // strCond += "And A.EventTime >= To_Date('" & strProductionDateFrom & "','YYYY/MM/DD') AND A.EventTime < To_Date('" & strProductionDateEnd & "','YYYY/MM/DD') " + // End If + + // strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_TP' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + + // '平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + // If blnShare Then + // strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + + // strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + // End If + + // 'tblCont_Resource壓上ERPFlag與WorkReportID + // strSQL = "Update " & tblCont_Resource & " Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "'" & + // " Where EventTime >= To_Date('" & strProductionDateFrom & "','YYYY/MM/DD') AND EventTime < To_Date('" & strProductionDateEnd & "','YYYY/MM/DD') " + // CollectionSQL.Add(strSQL) + + // 報工單拋轉彙整資料表(T1) + strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" + " Values('" + strWorkReportID + "', To_Date('" + strProductionDateFrom + "','YYYY/MM/DD'), To_Date('" + strProductionDateEnd + "','YYYY/MM/DD'), 1)"; + SQLCommandTuning(strDataBaseType, ref strSQL); + CollectionSQL = new Collection(); + CollectionSQL.Add(strSQL); + + // '報工單拋轉設備彙整資料表(T2) + // For i As Integer = 1 To colSQL_T2.Count + // CollectionSQL.Add(colSQL_T2(i)) + // Next + + // '報工單拋轉明細資料表(T3) + // For i As Integer = 1 To colSQL_T3.Count + // CollectionSQL.Add(colSQL_T3(i)) + // Next + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + + // //Return success + if (costCenter == "N") + { + funCreateWOWorkReportData_TPRet = "success;" + responseValue + ";" + strMONo; + } + else + { + funCreateWOWorkReportData_TPRet = "success;" + responseValue + ";" + strEquipmentNo; + } + } + + catch (Exception ex) + { + funCreateWOWorkReportData_TPRet = CombineFailMsg("0000-999999", ex.Message); + + // 2013/02/05, Hank, Send Email + colParameters.Add(funCreateWOWorkReportData_TPRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + try + { + CloseConnection(cnnTemp); + + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + var dsResult = new DataTable("dsResult"); + // 拋轉日期、報工日期、工單編號、失敗原因 + // strProductionDateFrom 報工日期CreateConnection + // drResource("MONo").ToString 工單編號 + // funCreateWOWorkReportData_TP 失敗原因CreateConnection + dsResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dsResult.Columns.Add("ProductionDate", Type.GetType("System.String")); // 報工日期 + dsResult.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dsResult.Columns.Add("FailReason", Type.GetType("System.String")); // 失敗原因 + string strFillType = "XLS"; + dsResult.Rows.Add(strProductionDateEnd, strProductionDateFrom, strMONo, funCreateWOWorkReportData_TPRet); + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + // Dim iugTemp As New iMESUltraGrid.iMESUltraGridControl + // AddHandler iugTemp.iMESUltraGrid_InitializeLayOut, AddressOf iMESUltraGrid_InitializeLayOut + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + //var memStream = new MemoryStream(); + //讓最後一列style生效,新增空列 + DataRow drEnd = dsResult.NewRow(); + dsResult.Rows.Add(drEnd); + var dtResult = new DataSet(); + dtResult.Tables.Add(dsResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult.Tables[0]; + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dtResult, ExcelMode, strLanguageMode, strResourceDir); + //var memStream = new MemoryStream(membyte); + //memStream.Seek(0L, SeekOrigin.Begin); + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + //} + //foreach (DataRow drResource in dsResult.Rows) + //{ + // switch (strFillType.ToString().ToUpper() ?? "") + // { + // // Case "XLSX" + // // '匯出Excel再轉Stream + // // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel2007) + // // workbook.Save(memStream) + // // memStream.Seek(0, SeekOrigin.Begin) + + // case "XLS": + // { + // // 匯出Excel再轉Stream + // //workbook = ExcelExp.Export(iugTemp.iMESUltraGrid); // iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003 + // //workbook.Save(memStream); + // //memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + // } + //} + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + try + { + dtResult.Dispose(); + } + catch (Exception ex) + { + } + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 END + + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "WO Work Report Data [" + strProductionDateFrom + "]"; + string argEmailBody = Conversions.ToString(funCreateWOWorkReportData_TPRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funCreateWOWorkReportData_TPRet = argEmailBody; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_TPRet = "fail_Finally;" + ex.Message; + } + } + } + while (false); + return funCreateWOWorkReportData_TPRet; + + } + + #endregion + + #region Tip Top ICD ERP & MES 標準整合 + + // ======================================================================================================================== + // 程式名稱:funCreateWOWorkReportData_TTICD + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:建立工單生產報工單資料 + // ======================================================================================================================== + private object funCreateWOWorkReportData_TTICD(Collection colParameters = null) + { + object funCreateWOWorkReportData_TTICDRet = default(object); + + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + string strSQL; + var XmlDoc = new XmlDocument(); + //System.Data.OleDb.OleDbDataAdapter daTemp; + + var CollectionSQL = new Collection(); + var colSQL_T2 = new Collection(); + var colSQL_T3 = new Collection(); + + string strAccess = string.Empty; + string strParameter = string.Empty; + string strMaster = string.Empty; + string strDetail = string.Empty; + + string strTempField = string.Empty; + string strTempRecord = string.Empty; + + var arriveTime = DateTime.Now; + + string strSheetType = string.Empty; // 報工單別 + string strGroupNo = string.Empty; // 異常處理群組 + + // 2012/09/25, Aaron, 將生產日期改用起訖方式 + string strProductionDateFrom = string.Empty; // 生產日期起(如無指定則帶昨天) + string strProductionDateEnd = string.Empty; // 生產日期迄(如無指定則帶今天) + + string strEquipmentNo = string.Empty; // 設備 + string strShiftNo = string.Empty; // 班別 + string strMONo = string.Empty; // 工單 + + string auto = "N"; // Request... Y: 建立入庫單後自動確認+過帳, N:建立入庫單後不自動確認過帳 + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + string sqlcode = string.Empty; + string description = string.Empty; // Response... 錯誤訊息 + string responseName = "srf01"; // Request/Response... 報工單單號ERP欄位名稱 + string responseValue = string.Empty; // Request/Response... 報工單單號, 成功回傳ERP單號 + string costCenter = "N"; // Request... Y:表示整合成本中心;N:表示未整合成本中心 + string VirtualEQP = ""; // Request... 整合成本中心時,沒有機台編號的人工作業站帶入的ERP虛擬機台編號 + + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + + string ReturnMSG = string.Empty; + + string strSQL_Field, strSQL_Value; + + var datNow = DateTime.Now; + + // 2019/3/20 YuWen SequenceNo增加亂數3碼 + string strSequenceNo = Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "_" + Convert.ToInt16(Math.Floor((1 - 999 + 1) * VBMath.Rnd()) + 999d).ToString("000"); + + // 2019/6/11,Ning, WorkReportID + string strWorkReportID = Strings.Format(datNow, "yyyyMMddHHmmssfff"); + + do + { + try + { + // ParameterXX參數說明 + // 01 報工單單別 + // 02 使用者群組 + // 03 生產日期[yyyy/MM/dd](如無指定則用昨天) + // 04 ERP自動確認(如無指定則用N) + + // 2012/09/25, Aaron + // 05 整合成本中心 Y:表示整合成本中心;N:表示未整合成本中心;未設定預設值為N + // 06 整合成本中心時,純人工作業站沒有機台,回報人時需所指定ERP虛擬機台編號,如果未設定,ERP將抓取ERP工單上的成本中心欄位作為歸屬機台。 + + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%SheetType%][%not found%]!!!([%Parameter%]01)", strLanguageMode, strResourceDir); + break; + } + else + { + strSheetType = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])); + } + + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%User%][%GroupNo%][%not found%]!!!([%Parameter%]02)", strLanguageMode, strResourceDir); + break; + } + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (colParameters["Parameter03"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strProductionDateFrom = Strings.Format(datNow.AddDays(-1), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(datNow, "yyyy/MM/dd"); + } + else + { + do + { + try + { + strProductionDateFrom = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd"); + } + catch (Exception ex) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%PDDATE%][%fail%](yyyy/MM/dd)!!!([%Parameter%]03)", strLanguageMode, strResourceDir); + break; + } + } + while (false); + } + + // Parameter04為傳入參數,作為自動確認,若無此值則用N + if (colParameters["Parameter04"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + auto = "N"; + } + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "Y", false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "N", false))) + { + auto = colParameters["Parameter04"].ToString().ToUpper(); + } + else + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%Parameter%]04 [%SELECTITEM%] Y [%or%] N", strLanguageMode, strResourceDir); + break; + } + + // 2012/09/25, Aaron + // Parameter05為傳入參數,作為整合成本中心,若無此值則用N + if (colParameters["Parameter05"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter05"])))) + { + costCenter = "N"; + } + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().ToUpper(), "Y", false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().ToUpper(), "N", false))) + { + costCenter = colParameters["Parameter05"].ToString().ToUpper(); + } + else + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%Parameter%]05 [%SELECTITEM%] Y [%or%] N", strLanguageMode, strResourceDir); + break; + } + + // Parameter06為傳入參數,作為defVirtualEQP + if (colParameters["Parameter06"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter06"])))) + { + VirtualEQP = ""; + } + else + { + VirtualEQP = colParameters["Parameter06"].ToString().Trim().ToUpper(); + } + + cnnTemp = CreateConnection(strConnectionString); + + // 取得設備第1筆資料 + strSQL = "Select * From tblEQPEquipmentBasis"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strEquipmentNo = Conversions.ToString(drTemp["EquipmentNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strEquipmentNo) || string.IsNullOrEmpty(strEquipmentNo)) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%EquipmentNo%][%not found%]!!!", strLanguageMode, strResourceDir); + break; + } + + // 取得班別第1筆資料 + strSQL = "Select * From tblUSRShiftBasis"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strShiftNo = Conversions.ToString(drTemp["ShiftNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strShiftNo) || string.IsNullOrEmpty(strShiftNo)) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("[%ShiftNo%][%not found%]!!!", strLanguageMode, strResourceDir); + break; + } + + + // 2017/12/27,sammi.MEStoERP生產報工抛轉資料,1:平攤(tblWIPCont_Resource_Share),2:原始(未平攤,tblWIPCont_Resource) + string tblCont_Resource = "tblWIPCont_Resource_Share "; + bool blnReCalResource = true; + bool blnShare = true; + + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWORKREPORTDATA' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "2") + { + tblCont_Resource = "tblWIPCont_Resource"; + blnReCalResource = false; + blnShare = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/07/19 Lena, 增加系統參數,判定是否需要重匯機時、人時, 0:No、1:Yes. + // 當為平攤時, 必須再參考系統參數中是否有設定要重匯機時 + if (blnReCalResource) + { + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWorkReportReCalResource' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "0") + { + blnReCalResource = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (blnReCalResource) + { + // 機時,人時 + var colParameters_Resource = new Collection(); + colParameters_Resource.Add(strProductionDateFrom, "Parameter01"); + // funCreateWOWorkReportData_T100,TP,WF,call funShareEQPTime/funShareEMPTime,發Mail通知,統一由主funciton發出. + // colParameters_Resource.Add(strGroupNo, "Parameter02") + colParameters_Resource.Add("", "Parameter02"); + + string strResult_EQP; + strResult_EQP = Conversions.ToString(funShareEQPTime(colParameters_Resource)); + if (strResult_EQP != "success") + { + funCreateWOWorkReportData_TTICDRet = "funShareEQPTime:" + strResult_EQP; + break; + } + + string strResult_EMP; + strResult_EMP = Conversions.ToString(funShareEMPTime(colParameters_Resource)); + if (strResult_EMP != "success") + { + funCreateWOWorkReportData_TTICDRet = "funShareEMPTime:" + strResult_EMP; + break; + } + } + + // ---- InXml ----- + // + strAccess = cbXMLAccess_TP(ERPName: "TIPTOPICD"); + + // + strTempField = cbXMLField_TP("status", auto); + strTempField += cbXMLField_TP("costcenter", costCenter); + strTempRecord = cbXMLRecord_TP(strTempField); + strParameter = cbXMLParameter_TP(strTempRecord); + + int intItemNo = 1; + decimal decT_EQP, decT_EMP; // 各機台的人時工時 + + if (costCenter == "N") // 2012/09/25, Aaron, 依工單報工,機台生產線欄位為設備主檔第一筆資料,僅為了填入值讓ERP接受。 + { + + // + strTempField = cbXMLField_TP(responseName, strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srf02", Strings.Format(datNow, "yyyy/MM/dd")); // 報工日期 + strTempField += cbXMLField_TP("srf03", strEquipmentNo); // 機台生產線 + strTempField += cbXMLField_TP("srf04", strShiftNo); // 班別 + strTempField += cbXMLField_TP("srf05", strProductionDateFrom); // 生產日期 + strTempField += cbXMLField_TP("srf07", "2"); // 報工類別(1:重複性生產報工;2:工單生產報工) + strTempRecord = cbXMLRecord_TP(strTempField); + strMaster = cbXMLMaster_TP("srf_file", strTempRecord); + + // + strTempRecord = string.Empty; + + // 2012/09/25, Aaron, 修正原本只能在Oracle上Run的語法以及Where日期條件修正支援Index作法。 + // 2019/6/11,Ning,加上ERPFlag=0的條件 + if (strDataBaseType != "oracle") + { + strSQL = " Select distinct CONVERT(char(10), EventTime, 111) EventTime, MONo, "; + strSQL += "ISNULL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=0 And EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "' And MONo=A.MONo),0) EMP, "; + strSQL += "ISNULL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=1 And EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "' And MONo=A.MONo),0) EQP "; + strSQL += "From " + tblCont_Resource + " A "; + strSQL += "Where EventTime >= '" + strProductionDateFrom + "' And EventTime < '" + strProductionDateEnd + "'"; + strSQL += " And IsNull(A.ERPFlag,0) = 0"; + } + else + { + strSQL = " Select distinct To_Char(EventTime,'YYYY/MM/DD') EventTime, MONo, "; + strSQL += "NVL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=0 And EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') And MONo=A.MONo),0) EMP, "; + strSQL += "NVL((Select Sum(ResValue) From " + tblCont_Resource + " Where ResClass=1 And EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') And MONo=A.MONo),0) EQP "; + strSQL += "From " + tblCont_Resource + " A "; + strSQL += "Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strSQL += " And Nvl(A.ERPFlag,0) = 0"; + } + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + strTempField = ""; + + var colSQL_Log = new Collection(); + decT_EMP = 0m; + decT_EQP = 0m; + + while (drTemp.Read()) + { + strTempField = cbXMLField_TP("srg01", strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srg05", "0"); // 良品數 + strTempField += cbXMLField_TP("srg06", "0"); // 不良品數 + strTempField += cbXMLField_TP("srg07", "0"); // 報廢數量 + strTempField += cbXMLField_TP("srg10", Conversions.ToString(drTemp["EMP"])); // 工時(分) + strTempField += cbXMLField_TP("srg13", "1"); // 1:主產品 ; 2:聯產品 ; 3:副產品 ; 4:再生產品 + strTempField += cbXMLField_TP("srg15", "Y"); // 檢驗否(y/n) + strTempField += cbXMLField_TP("srg16", Conversions.ToString(drTemp["MONo"])); // 工單編號 + strTempField += cbXMLField_TP("srg19", Conversions.ToString(drTemp["EQP"])); // 機時(分) + + strTempRecord += cbXMLRecord_TP(strTempField) + '\n'; + + strMONo = Conversions.ToString(strMONo + Operators.AddObject(Constants.vbCrLf, drTemp["MONo"])); + + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkRPTDetail_TTICD + strSQL_Field = "Insert into tblERPWorkRPTDetail_TTICD " + " (SequenceNo,ItemNo,srg01,srg05,srg06,srg07,srg10,srg13,srg15,srg16,srg19 "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "'," + intItemNo + ",'" + strSheetType + "',0,0,0," + + drTemp["EMP"] + ",1,'Y','" + drTemp["MONo"] + "','" + drTemp["EQP"] + "'"); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 2019/6/11, Ning, 紀錄報工單拋轉明細資料(T3) + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail (WorkReportID, ItemNo, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, SequenceNo)" + " Values ('" + strWorkReportID + "'," + intItemNo + ",'" + strEquipmentNo + "','" + + drTemp["MONo"] + "'," + drTemp["EQP"] + "," + drTemp["EMP"] + ",'" + strSequenceNo + "')"); + colSQL_T3.Add(strSQL); + + // 2019/6/13, Ning, 加總人時機時, 以紀錄報工單拋轉設備彙整資料表(T2) + decT_EMP = Conversions.ToDecimal(Operators.AddObject(decT_EMP, drTemp["EMP"])); + decT_EQP = Conversions.ToDecimal(Operators.AddObject(decT_EQP, drTemp["EQP"])); + + intItemNo += 1; + } + drTemp.Close(); + + if (string.IsNullOrEmpty(strTempField)) + { + funCreateWOWorkReportData_TTICDRet = strProductionDateFrom + TranslateMsg(" [%Warning%]!!! [%No transaction data found%]!!!", strLanguageMode, strResourceDir); + return funCreateWOWorkReportData_TTICDRet; + } + + strDetail = cbXMLDetail_TP("srg_file", strTempRecord); + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, strParameter, strMaster, strDetail); + + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + // ----- 取得ERP執行結果 code, sqlcode, description ----- + chkExecutionStatus_TP(XmlDoc, ref code, ref sqlcode, ref description); + + // ----- 取得ERP入庫單號 ----- + chkResponseContent_TP(XmlDoc, responseName, ref responseValue); + + // 2013/03/08, Aaron, 執行ERP交易完畢寫入Log + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TTICD", My.Computer.Name, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData") + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TTICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData", strException: argstrException); + + if (code == "success") + { + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReport_TTICD + strSQL_Field = "Insert into tblERPWorkReport_TTICD " + " (SequenceNo,srf01,srf02,srf03,srf04,srf05,srf07,ERPNo,CreateDate,StartDate,EndDate "; + strSQL_Value = " Values ('" + strSequenceNo + "','" + strSheetType + "','" + Strings.Format(datNow, "yyyy/MM/dd") + "','" + strEquipmentNo + "','" + strShiftNo + "','" + strProductionDateFrom + "','2','" + responseValue + "', To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateEnd), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 以一次抛轉為單位,直接先寫入. + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_Log); + + // 2019/6/13, Ning, 記錄T2 + strSQL = "Insert Into tblERPWorkRPT_EQPSummary (WorkReportID, EquipmentNo, EQP_ResValue, EMP_ResValue, ERPFlag, ERPNo)" + " Values('" + strWorkReportID + "','" + strEquipmentNo + "'," + decT_EQP + "," + decT_EMP + ",1,'" + responseValue + "')"; + colSQL_T2.Add(strSQL); + } + + else + { + funCreateWOWorkReportData_TTICDRet = "fail;" + TranslateMsg("[%ERP Return Message%]:", strLanguageMode, strResourceDir) + description + ""; + break; + } + } + + else // 2012/09/25, Aaron, 整合成本中心,依設備、工單報工。 + { + + // 2012/09/25, Aaron, SQL語法說明:先依日期取出人時部分,同一作業加工紀錄的人時必須先Group By,因為有可能有多人加工 + // 人時彙總完後,再判斷是否為多機台加工,如果是1台以上機台,人時必須均分到各機台上 + // 如果是沒有機台純人工, ERP收到資料後會以ERP工單單頭的成本中心欄位作為成本中心歸屬,後再取出機時Join, + + // 2017/11/23 KunYuan:若為虛擬機,可能有工時/機時皆為0之狀況,故需加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 ↓ + + // If strDataBaseType <> "oracle" Then + // strSQL = " SELECT F.EVENTTIME, F.EQUIPMENTNO, F.MONO, SUM(F.EQP) EQP, ROUND(SUM(F.EMP), 2) EMP FROM " + // strSQL += "( " + // strSQL += "SELECT A.EVENTTIME, ISNULL(B.RESITEM,'" & VirtualEQP & "') EQUIPMENTNO, A.MONO, SUM(ISNULL(B.RESVALUE,0)) EQP, " + // strSQL += "(SUM(ISNULL(A.RESVALUE,0)) / IIF((SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0, 1, (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1))) EMP " + // strSQL += "FROM (SELECT CONVERT(CHAR(10), EVENTTIME, 111) EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM TBLWIPCONT_RESOURCE A WHERE A.RESCLASS = 0 AND A.EVENTTIME >= '" & strProductionDateFrom & "' AND A.EVENTTIME < '" & strProductionDateEnd & "' GROUP BY CONVERT(CHAR(10), EVENTTIME, 111), A.MONO, A.LOGGROUPSERIAL) A " + // strSQL += "LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + // strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO, A.LOGGROUPSERIAL " + // strSQL += ") F " + // strSQL += "GROUP BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO " + // strSQL += "ORDER BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO " + // Else + // strSQL = " SELECT A.EVENTTIME, NVL(B.RESITEM, '" & VirtualEQP & "') AS EQUIPMENTNO, A.MONO, " + // strSQL += "SUM(NVL(B.RESVALUE,0)) EQP, " + // strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 THEN A.RESVALUE / (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) ELSE A.RESVALUE END),2) AS EMP " + // strSQL += "FROM (SELECT TO_CHAR(A.EVENTTIME,'YYYY/MM/DD') EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM TBLWIPCONT_RESOURCE A WHERE A.RESCLASS = 0 AND A.EVENTTIME >= TO_DATE('" & strProductionDateFrom & "','YYYY/MM/DD') AND A.EVENTTIME < TO_DATE('" & strProductionDateEnd & "','YYYY/MM/DD') GROUP BY TO_CHAR(A.EVENTTIME,'YYYY/MM/DD'), A.MONO, A.LOGGROUPSERIAL) A " + // strSQL += "LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + // strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO " + // strSQL += "ORDER BY A.EVENTTIME, B.RESITEM, A.MONO " + // End If + + // 2021/01/12 Grace Mantis 85731: 須排除已拋轉資料, 否則會重複拋送 + if (strDataBaseType != "oracle") + { + strSQL = " SELECT F.EVENTTIME, F.EQUIPMENTNO, F.MONO, SUM(F.EQP) EQP, ROUND(SUM(F.EMP), 2) EMP FROM "; + strSQL += "( "; + strSQL += "SELECT A.EVENTTIME, ISNULL(B.RESITEM,'" + VirtualEQP + "') EQUIPMENTNO, A.MONO, SUM(ISNULL(B.RESVALUE,0)) EQP, "; + strSQL += "(SUM(ISNULL(A.RESVALUE,0)) / IIF((SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0, 1, (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1))) EMP "; + strSQL += "FROM (SELECT CONVERT(CHAR(10), EVENTTIME, 111) EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM " + tblCont_Resource + " A WHERE A.RESCLASS = 0 And NVL (ERPFlag, 0) = 0 AND A.EVENTTIME >= '" + strProductionDateFrom + "' AND A.EVENTTIME < '" + strProductionDateEnd + "' GROUP BY CONVERT(CHAR(10), EVENTTIME, 111), A.MONO, A.LOGGROUPSERIAL) A "; + strSQL += "LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += " Where IsNull(B.ERPFlag,0) = 0 "; + strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO, A.LOGGROUPSERIAL "; + strSQL += ") F WHERE (EQP > 0 OR EMP > 0) "; + strSQL += "GROUP BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO "; + strSQL += "ORDER BY F.EVENTTIME, F.EQUIPMENTNO, F.MONO "; + } + else + { + strSQL = "SELECT Z.* FROM ( "; + strSQL += " SELECT A.EVENTTIME, NVL(B.RESITEM, '" + VirtualEQP + "') AS EQUIPMENTNO, A.MONO, "; + strSQL += "SUM(NVL(B.RESVALUE,0)) EQP, "; + strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 THEN A.RESVALUE / (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) ELSE A.RESVALUE END),2) AS EMP "; + strSQL += "FROM (SELECT TO_CHAR(A.EVENTTIME,'YYYY/MM/DD') EVENTTIME, A.MONO, A.LOGGROUPSERIAL, SUM(A.RESVALUE) RESVALUE FROM " + tblCont_Resource + " A WHERE A.RESCLASS = 0 And NVL (ERPFlag, 0) = 0 AND A.EVENTTIME >= TO_DATE('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EVENTTIME < TO_DATE('" + strProductionDateEnd + "','YYYY/MM/DD') GROUP BY TO_CHAR(A.EVENTTIME,'YYYY/MM/DD'), A.MONO, A.LOGGROUPSERIAL) A "; + strSQL += "LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += " Where Nvl(B.ERPFlag,0) = 0 "; + strSQL += "GROUP BY A.EVENTTIME, B.RESITEM, A.MONO "; + strSQL += "ORDER BY A.EVENTTIME, B.RESITEM, A.MONO "; + strSQL += ") Z WHERE (Z.EQP > 0 OR Z.EMP > 0) "; + } + + // 2017/11/23 KunYuan:若為虛擬機,可能有工時/機時皆為0之狀況,故需加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 ↑ + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + var dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "costCenter"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "costCenter", cnnTemp); + + strEquipmentNo = ""; + if (dsTemp.Tables["costCenter"].Rows.Count > 0) + { + + var aryEquipmentNo = new ArrayList(); // 2020/12/31 Grace 若參數6有設定虛擬機, 設備資料會包含 + var aryMONo = new ArrayList(); + // strMONo = dsTemp.Tables("MONO").ToString '2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + + for (int i = 0, loopTo = dsTemp.Tables["costCenter"].Rows.Count - 1; i <= loopTo; i++) + { + if (aryEquipmentNo.IndexOf(dsTemp.Tables["costCenter"].Rows[i]["EQUIPMENTNO"].ToString()) == -1) + { + aryEquipmentNo.Add(dsTemp.Tables["costCenter"].Rows[i]["EQUIPMENTNO"].ToString()); + } + if (aryMONo.IndexOf(dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString()) == -1) + { + if (string.IsNullOrEmpty(strMONo)) + { + strMONo = dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString(); + } + else + { + strMONo = strMONo + "," + dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString(); + } + aryMONo.Add(dsTemp.Tables["costCenter"].Rows[i]["MONo"].ToString()); + } + } + + // 進行拋轉之前,先呼叫EEP,檢查預計要拋轉的設備編號是否存在於ERP,不存在就中止拋轉 + var eci = new string[1]; + bool exitTry = false; + for (int i = 0, loopTo1 = aryEquipmentNo.Count - 1; i <= loopTo1; i++) + { + if (!string.IsNullOrEmpty(aryEquipmentNo[i].ToString())) + { + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, cbXMLParameter_TP(cbXMLRecord_TP(cbXMLField_TP("condition", "eci01 = '" + aryEquipmentNo[i].ToString() + "'"))), "", ""); + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.GetMachineData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.GetMachineData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + eci[0] = ""; + if (chkResponseContentDocument_TP(XmlDoc, "eci01", ref eci) == false || string.IsNullOrEmpty(eci[0])) + { + funCreateWOWorkReportData_TTICDRet = TranslateMsg("ERP[%Equipment%][%Not Found%]! (", strLanguageMode, strResourceDir) + aryEquipmentNo[i].ToString() + ")"; + exitTry = true; + break; + } + + } + } + + if (exitTry) + { + break; + } + + + bool exitTry1 = false; + for (int i = 0, loopTo2 = aryEquipmentNo.Count - 1; i <= loopTo2; i++) + { + + // Reset + var colSQL_Log = new Collection(); + colSQL_T2 = new Collection(); + colSQL_T3 = new Collection(); + CollectionSQL = new Collection(); + + datNow = DateTime.Now; + intItemNo = 1; + + decT_EMP = 0m; + decT_EQP = 0m; + + // 2019/3/20 YuWen SequenceNo增加亂數3碼 + strSequenceNo = Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "_" + Convert.ToInt16(Math.Floor((1 - 999 + 1) * VBMath.Rnd()) + 999d).ToString("000"); + + // + strTempField = cbXMLField_TP(responseName, strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srf02", Strings.Format(datNow, "yyyy/MM/dd")); // 報工日期 + strTempField += cbXMLField_TP("srf03", Conversions.ToString(aryEquipmentNo[i])); // 機台生產線 + strTempField += cbXMLField_TP("srf04", strShiftNo); // 班別 + strTempField += cbXMLField_TP("srf05", strProductionDateFrom); // 生產日期 + strTempField += cbXMLField_TP("srf07", "2"); // 報工類別(1:重複性生產報工;2:工單生產報工) + strTempRecord = cbXMLRecord_TP(strTempField); + strMaster = cbXMLMaster_TP("srf_file", strTempRecord); + + // + strTempRecord = string.Empty; + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false))) + { + dsTemp.Tables["costCenter"].DefaultView.RowFilter = "EquipmentNo is Null "; + } + else + { + dsTemp.Tables["costCenter"].DefaultView.RowFilter = Conversions.ToString("EquipmentNo = '" + aryEquipmentNo[i] + "'"); + } + strEquipmentNo = Conversions.ToString(strEquipmentNo + Operators.AddObject(Constants.vbCrLf, aryEquipmentNo[i])); + + for (int j = 0, loopTo3 = dsTemp.Tables["costCenter"].DefaultView.Count - 1; j <= loopTo3; j++) + { + // 2017/11/23 KunYuan:加判工時、機時其中一者>0才拋轉ERP,否則會違反ERP規則導致報錯 + if (Conversions.ToDecimal(dsTemp.Tables["costCenter"].DefaultView[j]["EMP"]) == 0m & Conversions.ToDecimal(dsTemp.Tables["costCenter"].DefaultView[j]["EQP"]) == 0m) + { + continue; + } + + strTempField = cbXMLField_TP("srg01", strSheetType); // 報工單別 + strTempField += cbXMLField_TP("srg05", "0"); // 良品數 + strTempField += cbXMLField_TP("srg06", "0"); // 不良品數 + strTempField += cbXMLField_TP("srg07", "0"); // 報廢數量 + strTempField += cbXMLField_TP("srg10", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["EMP"])); // 工時(分) + strTempField += cbXMLField_TP("srg13", "1"); // 1:主產品 ; 2:聯產品 ; 3:副產品 ; 4:再生產品 + strTempField += cbXMLField_TP("srg15", "Y"); // 檢驗否(y/n) + strTempField += cbXMLField_TP("srg16", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["MONo"])); // 工單編號 + strTempField += cbXMLField_TP("srg19", Conversions.ToString(dsTemp.Tables["costCenter"].DefaultView[j]["EQP"])); // 機時(分) + + strTempRecord += cbXMLRecord_TP(strTempField) + '\n'; + + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkRPTDetail_TTICD + strSQL_Field = "Insert into tblERPWorkRPTDetail_TTICD " + " (SequenceNo,ItemNo,srg01,srg05,srg06,srg07,srg10,srg13,srg15,srg16,srg19 "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "'," + intItemNo + ",'" + strSheetType + "',0,0,0," + + dsTemp.Tables["costCenter"].DefaultView[j]["EMP"] + ",1,'Y','" + dsTemp.Tables["costCenter"].DefaultView[j]["MONo"] + "','" + + dsTemp.Tables["costCenter"].DefaultView[j]["EQP"] + "'"); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(aryEquipmentNo[i], "", false))) + { + // 2019/6/11, Ning, 紀錄報工單拋轉明細資料 + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail (WorkReportID, ItemNo, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, SequenceNo)" + " Values ('" + strWorkReportID + "'," + intItemNo + ",'" + + aryEquipmentNo[i] + "','" + dsTemp.Tables["costCenter"].DefaultView[j]["MONo"] + "'," + dsTemp.Tables["costCenter"].DefaultView[j]["EQP"] + + "," + dsTemp.Tables["costCenter"].DefaultView[j]["EMP"] + ",'" + strSequenceNo + "')"); + colSQL_T3.Add(strSQL); + } + + // 2019/6/13, Ning, 加總人時機時, 以紀錄報工單拋轉設備彙整資料表 + decT_EMP = Conversions.ToDecimal(Operators.AddObject(decT_EMP, dsTemp.Tables["costCenter"].DefaultView[j]["EMP"])); + decT_EQP = Conversions.ToDecimal(Operators.AddObject(decT_EQP, dsTemp.Tables["costCenter"].DefaultView[j]["EQP"])); + + intItemNo += 1; + } + + if (string.IsNullOrEmpty(strTempField)) + { + funCreateWOWorkReportData_TTICDRet = strProductionDateFrom + TranslateMsg(" [%Warning%]!!! [%No transaction data found%]!!!", strLanguageMode, strResourceDir); + return funCreateWOWorkReportData_TTICDRet; + } + + strDetail = cbXMLDetail_TP("srg_file", strTempRecord); + + InXml = ""; + InXml = cbXMLRequest_TP(strAccess, strParameter, strMaster, strDetail); + + // ----- Call ERP Web Service ----- + OutXml = ""; + // Kevin 15/05/12,依照ERP整合設定,如ERP版本是設定GP3.X則要使用RPC格式的參考 + // 一個機台拋一筆單頭, 一工單一筆單身 + if (gERPVersion == "GP 3.X") + { + using (var ws = new wsERP_TP_RPC.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + else + { + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.CreateWOWorkReportData(InXml); + } + } + + XmlDoc.LoadXml(OutXml); + + // ----- 取得ERP執行結果 code, sqlcode, description ----- + chkExecutionStatus_TP(XmlDoc, ref code, ref sqlcode, ref description); + + // ----- 取得ERP入庫單號 ----- + chkResponseContent_TP(XmlDoc, responseName, ref responseValue); + + // 2013/03/08, Aaron, 執行ERP交易完畢寫入Log + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TTICD", My.Computer.Name, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData") + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_TTICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "CreateWOWorkReportData", strException: argstrException1); + + if (code == "success") + { + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReport_TTICD + strSQL_Field = "Insert into tblERPWorkReport_TTICD " + " (SequenceNo,srf01,srf02,srf03,srf04,srf05,srf07,ERPNo,CreateDate,StartDate,EndDate "; + strSQL_Value = Conversions.ToString(" Values ('" + strSequenceNo + "','" + strSheetType + "','" + Strings.Format(datNow, "yyyy/MM/dd") + "','" + + aryEquipmentNo[i] + "','" + strShiftNo + "','" + strProductionDateFrom + "','2','" + responseValue + "', To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateFrom), "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateEnd), "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS') "); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 以一次抛轉為單位,直接先寫入. + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_Log); + + // 2020/12/30 Grace 因為tblERPWorkRPT_EQPSummary為設備彙整資料, 因此若為純人時無機台且無設定虛擬機, 不寫入 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(aryEquipmentNo[i], "", false))) + { + // 2019/6/13, Ning, 紀錄T2 + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_EQPSummary (WorkReportID, EquipmentNo, EQP_ResValue, EMP_ResValue, ERPFlag, ERPNo)" + " Values('" + strWorkReportID + "','" + + aryEquipmentNo[i] + "'," + decT_EQP + "," + decT_EMP + ",1,'" + responseValue + "')"); + colSQL_T2.Add(strSQL); + } + + + // 2020/12/29 Grace Mantis 84927: [瑞賢] AUTORUN報工資料重複, 修改為每拋轉一筆報工單資料, 就更新一次MES資料, 避免ERP回復失敗後, 失敗前已拋轉的資料未記錄到, 造成重複拋送 + // ----- 將UNDO鎖住 ----- + string strCond; + string strCond2; + if (strDataBaseType != "oracle") + { + strCond = " Select distinct B.LotSerial "; + strCond += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond += "And A.EventTime >= '" + strProductionDateFrom + "' AND A.EventTime < '" + strProductionDateEnd + "' "; + + strCond2 = ""; + + // 2020/12/31 Grace 若參數6有設定虛擬機, aryEquipmentNo會包含虛擬機資料, 但MES實際報工為人時的資料, 造成後續更新已拋轉資料時, 查詢條件不正確 + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除Equipment為查詢條件 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false)) || Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], VirtualEQP, false)) + { + strCond += " And A.RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + strCond2 = " And RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + } + else + { + strCond = Conversions.ToString(strCond + " And A.RESITEM = '" + aryEquipmentNo[i] + "' "); + + // 2020/12/31 Grace 更新機時之外也需更新到人時 + strCond2 = " Select distinct B.LogGroupSerial "; + strCond2 += " From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond2 += " Where A.LogGroupSerial = B.LogGroupSerial "; + strCond2 += " And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strCond2 = Conversions.ToString(strCond2 + " And RESITEM = '" + aryEquipmentNo[i] + "' "); + strCond2 = " And LogGroupSerial in (" + strCond2 + ") "; + } + } + + else + { + strCond = " Select distinct B.LotSerial "; + strCond += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond += "And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除RESITEM為設備編號的查詢條件 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], "", false)) || Operators.ConditionalCompareObjectEqual(aryEquipmentNo[i], VirtualEQP, false)) + { + strCond += " And A.RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + strCond2 = " And RESITEM Not in (Select EquipmentNo from tblEQPEquipmentBasis ) "; + } + else + { + strCond = Conversions.ToString(strCond + " And A.RESITEM = '" + aryEquipmentNo[i] + "' "); + + // 2020/12/31 Grace 更新機時之外也需更新到人時 + strCond2 = " Select distinct B.LogGroupSerial "; + strCond2 += "From " + tblCont_Resource + " A, tblWIPLotLog B "; + strCond2 += "Where A.LogGroupSerial = B.LogGroupSerial "; + strCond2 += " And A.EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strCond2 = Conversions.ToString(strCond2 + " And RESITEM = '" + aryEquipmentNo[i] + "' "); + strCond2 = " And LogGroupSerial in (" + strCond2 + ") "; + } + } + + strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_TTICD' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + + // 平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + if (blnShare) + { + strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + + strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LotSerial In (" + strCond + ")"; + CollectionSQL.Add(strSQL); + } + + // 2020/12/29 Grace Mantis 84927 因一台設備拋一筆報工資料, 因此增加設備查詢條件; 若為純人時資料, 改為排除Equipment為查詢條件 + // tblCont_Resource壓上ERPFlag與WorkReportID + strSQL = "Update " + tblCont_Resource + " Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "'" + " Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') " + strCond2; + SQLCommandTuning(strDataBaseType, ref strSQL); + CollectionSQL.Add(strSQL); + + // '報工單拋轉彙整資料表(T1) + // strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" & + // " Values('" & strWorkReportID & "', To_Date('" & strProductionDateFrom & "','YYYY/MM/DD'), To_Date('" & strProductionDateEnd & "','YYYY/MM/DD'), 1)" + // CollectionSQL.Add(strSQL) + + // 報工單拋轉設備彙整資料表(T2) + for (int j = 1, loopTo4 = colSQL_T2.Count; j <= loopTo4; j++) + CollectionSQL.Add(colSQL_T2[j]); + + // 報工單拋轉明細資料表(T3) + for (int j = 1, loopTo5 = colSQL_T3.Count; j <= loopTo5; j++) + CollectionSQL.Add(colSQL_T3[j]); + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + else + { + funCreateWOWorkReportData_TTICDRet = "fail;" + TranslateMsg("[%ERP Return Message%]:", strLanguageMode, strResourceDir) + description + ""; + exitTry1 = true; + break; + } + } + + if (exitTry1) + { + break; + } + + } + + dsTemp.Dispose(); + + } + + // '----- 將UNDO鎖住 ----- + // Dim strCond As String + // If strDataBaseType <> "oracle" Then + // strCond = " Select distinct B.LotSerial " + // strCond += "From " & tblCont_Resource & " A, tblWIPLotLog B " + // strCond += "Where A.LogGroupSerial = B.LogGroupSerial " + // strCond += "And A.EventTime >= '" & strProductionDateFrom & "' AND A.EventTime < '" & strProductionDateEnd & "' " + // Else + // strCond = " Select distinct B.LotSerial " + // strCond += "From " & tblCont_Resource & " A, tblWIPLotLog B " + // strCond += "Where A.LogGroupSerial = B.LogGroupSerial " + // strCond += "And A.EventTime >= To_Date('" & strProductionDateFrom & "','YYYY/MM/DD') AND A.EventTime < To_Date('" & strProductionDateEnd & "','YYYY/MM/DD') " + // End If + + // strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_TTICD' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + + // '平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + // If blnShare Then + // strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + + // strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "' Where LotSerial In (" & strCond & ")" + // CollectionSQL.Add(strSQL) + // End If + + // 'tblCont_Resource壓上ERPFlag與WorkReportID + // strSQL = "Update " & tblCont_Resource & " Set ERPFlag = 1, WorkReportID = '" & strWorkReportID & "'" & + // " Where EventTime >= To_Date('" & strProductionDateFrom & "','YYYY/MM/DD') AND EventTime < To_Date('" & strProductionDateEnd & "','YYYY/MM/DD') " + // CollectionSQL.Add(strSQL) + + // 報工單拋轉彙整資料表(T1) + strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" + " Values('" + strWorkReportID + "', To_Date('" + strProductionDateFrom + "','YYYY/MM/DD'), To_Date('" + strProductionDateEnd + "','YYYY/MM/DD'), 1)"; + SQLCommandTuning(strDataBaseType, ref strSQL); + CollectionSQL = new Collection(); + CollectionSQL.Add(strSQL); + + // '報工單拋轉設備彙整資料表(T2) + // For i As Integer = 1 To colSQL_T2.Count + // CollectionSQL.Add(colSQL_T2(i)) + // Next + + // '報工單拋轉明細資料表(T3) + // For i As Integer = 1 To colSQL_T3.Count + // CollectionSQL.Add(colSQL_T3(i)) + // Next + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + + // //Return success + if (costCenter == "N") + { + funCreateWOWorkReportData_TTICDRet = "success;" + responseValue + ";" + strMONo; + } + else + { + funCreateWOWorkReportData_TTICDRet = "success;" + responseValue + ";" + strEquipmentNo; + } + } + + catch (Exception ex) + { + funCreateWOWorkReportData_TTICDRet = CombineFailMsg("0000-999999", ex.Message); + + // 2013/02/05, Hank, Send Email + colParameters.Add(funCreateWOWorkReportData_TTICDRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + try + { + CloseConnection(cnnTemp); + + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + var dsResult = new DataTable("dsResult"); + // 拋轉日期、報工日期、工單編號、失敗原因 + // strProductionDateFrom 報工日期CreateConnection + // drResource("MONo").ToString 工單編號 + // funCreateWOWorkReportData_TTICD 失敗原因CreateConnection + dsResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dsResult.Columns.Add("ProductionDate", Type.GetType("System.String")); // 報工日期 + dsResult.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dsResult.Columns.Add("FailReason", Type.GetType("System.String")); // 失敗原因 + string strFillType = "XLS"; + dsResult.Rows.Add(strProductionDateEnd, strProductionDateFrom, strMONo, funCreateWOWorkReportData_TTICDRet); + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + // Dim iugTemp As New iMESUltraGrid.iMESUltraGridControl + // AddHandler iugTemp.iMESUltraGrid_InitializeLayOut, AddressOf iMESUltraGrid_InitializeLayOut + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + //var memStream = new MemoryStream(); + //讓最後一列style生效,新增空列 + DataRow drEnd = dsResult.NewRow(); + dsResult.Rows.Add(drEnd); + var dtResult = new DataSet(); + dtResult.Tables.Add(dsResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult.Tables[0]; + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dtResult, ExcelMode, strLanguageMode, strResourceDir); + //var memStream = new MemoryStream(membyte); + //memStream.Seek(0L, SeekOrigin.Begin); + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + //} + //foreach (DataRow drResource in dsResult.Rows) + //{ + // switch (strFillType.ToString().ToUpper() ?? "") + // { + // // Case "XLSX" + // // '匯出Excel再轉Stream + // // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel2007) + // // workbook.Save(memStream) + // // memStream.Seek(0, SeekOrigin.Begin) + + // case "XLS": + // { + // // 匯出Excel再轉Stream + // //workbook = ExcelExp.Export(iugTemp.iMESUltraGrid); // iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003 + // //workbook.Save(memStream); + // //memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + // } + //} + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + try + { + dtResult.Dispose(); + } + catch (Exception ex) + { + } + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 END + + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "WO Work Report Data [" + strProductionDateFrom + "]"; + string argEmailBody = Conversions.ToString(funCreateWOWorkReportData_TTICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funCreateWOWorkReportData_TTICDRet = argEmailBody; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_TTICDRet = "fail_Finally;" + ex.Message; + } + } + } + while (false); + return funCreateWOWorkReportData_TTICDRet; + + } + + #endregion + + #region PM + + // ======================================================================================================================== + // 程式名稱:funEQPMaintenancePlan + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:寄送保養計畫通知 + // 撰寫人員:Acer.Wei + // 撰寫日期:2011/12/23 + // ======================================================================================================================== + // Private Function funEQPMaintenancePlan(Optional ByVal colParameters As Collection = Nothing) + + // Dim cnnTemp As OleDb.OleDbConnection + // Dim drTemp As OleDb.OleDbDataReader + // Dim strSQL As String + + // Dim arriveTime As DateTime = DateTime.Now + + // Dim strGroupNo As String = String.Empty '異常處理群組 + // Dim strAfterDayQty As String = String.Empty '發送多少天後資料 + // Dim datData As Date + + // Dim strEmailSubject As String + // Dim strEmailBody As String + + + // Try + // 'ParameterXX參數說明 + // '01 使用者群組 + // '02 發送多少天後資料 + + // 'Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + // If IsNothing(colParameters("Parameter01")) OrElse Trim(colParameters("Parameter01")) = "" Then + // funEQPMaintenancePlan = "User GroupNo not found!!!(Parameter 01)" + // Exit Try + // Else + // strGroupNo = Trim(colParameters("Parameter01")) + // End If + + // 'Parameter02為傳入參數,作為AfterDayQty,若無此值則不進行下面的程式 + // If IsNothing(colParameters("Parameter02")) OrElse Trim(colParameters("Parameter02")) = "" Then + // funEQPMaintenancePlan = "After Day Qty not found!!!(Parameter 02)" + // Exit Try + // Else + // If IsNumeric(colParameters("Parameter02")) Then + // strAfterDayQty = Trim(colParameters("Parameter02")) + // Else + // funEQPMaintenancePlan = "After Day Qty not Numeric!!!(Parameter 02)" + // Exit Try + // End If + // End If + + // strAfterDayQty = Trim(colParameters("Parameter02")) + // datData = DateAdd(DateInterval.Day, CInt(strAfterDayQty), Now()) + + + // cnnTemp = CreateConnection(strConnectionString) + + // strSQL = " Select A.*, C.EngineerGroupNo " & _ + // " From tblPMEqpMaintenancePlan A, " & _ + // " tblPMEqpTypeSopBasis B, " & _ + // " tblEQPEquipmentBasis C " & _ + // " Where A.PMEqpSopNo=B.PMEqpSopNo " & _ + // " And A.EquipmentNo=C.EquipmentNo " & _ + // " And B.AutoEmail=1 " & _ + // " And A.PMEstDateTime=To_Date('" & Format(datData, "yyyy/MM/dd") & "','YYYY/MM/DD')" + + // strSQL = SQLCommandTuning(strDataBaseType, strSQL) + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnTemp) + // drTemp = ExecuteSQLQuery_Reader() + // Do While drTemp.Read + + // strEmailSubject = "Information, EquipmentNo:" & drTemp("EquipmentNo") & " Maintenance Plan At " & Format(datData, "yyyy/MM/dd") + + // '使用Html的寫法 + // strEmailBody = "

Equipment Maintenance Plan Information :

" + // strEmailBody += "

EquipemntNo:" & drTemp("EquipmentNo") & "

" + // strEmailBody += "

FrequencyNo:" & drTemp("FrequencyNo") & "

" + // strEmailBody += "

PMSOPNo:" & drTemp("PMSOPNo") & "

" + // strEmailBody += "

PlanDate:" & Format(drTemp("PMEstDateTime"), "yyyy/MM/dd") & "

" + // strEmailBody += "" + + // SendMultiEmail("N/A", strEmailSubject, strEmailBody, drTemp("EngineerGroupNo"), , GroupType.EquipmentGroup) + // Loop + // drTemp.Close() + + // '//Return success + // funEQPMaintenancePlan = "success;" + + // Catch ex As Exception + // funEQPMaintenancePlan = "fail;" & ex.Message + // '寄送Mail + // SendMultiEmail("N/A", "Equipment Maintenance Plan Report Error [Plan Date:" & Format(CDate(datData), "yyyy/MM/dd") & "]", funEQPMaintenancePlan, strGroupNo, , GroupType.UserGroup) + // Finally + // Try + // Call objSetting.CloseConnection(cnnTemp) + + // Catch ex As Exception + // funEQPMaintenancePlan = "fail_Finally;" & ex.Message + // End Try + // End Try + + // End Function + + #endregion + + #region Replication + + private string funReplicationDB(Collection colParameters = null) + { + string funReplicationDBRet = default(string); + // 此 Function 將目前現況的交易資料轉入ReportDB + // 傳入值: colParameters{要轉送的Table,不轉送的Table} + // 傳回值: success(成功), fail(失敗) + + // colParameters的資料取得範例如下 + // colParameters("TBLMESAUTORUNJOB,") + // colParameters("ProductNo") + + var cnnSource = default(IDbConnection); + var cmmSource = default(IDbCommand); + //System.Data.OleDb.OleDbDataAdapter daTemp; + DbDataReader drTemp; + var oTranSource = default(IDbTransaction); + var CollectionSQL = new Collection(); + + var cnnTarget = default(IDbConnection); + var cmmTarget = default(IDbCommand); + IDataParameter param; + var oTranTarget = default(IDbTransaction); + + var dsTemp = new DataSet(); + DataRow[] drSel; + + var strSQL = default(string); + string strCommandText; + + string[] aryReplicationTableList; + + try + { + + // 取出目前現況資料 + cnnSource = CreateConnection(strConnectionString); + + // 取得目標資料庫的連線字串 + string argstrDataBaseType = "Null"; + string strTargetConnection = AppSettings.GetConnectionString_LOB(objSetting.GetReportConnectionString(strDataBaseType: argstrDataBaseType)); + string strTargetDataBaseType = objSetting.GetReportDataBaseType(); + + // 建立目標資料庫連線 + if (strTargetDataBaseType == "oracle") + { + cnnTarget = new OracleConnection(strTargetConnection); + cnnTarget.Open(); + } + else if (strTargetDataBaseType == "mssql") + { + cnnTarget = new SqlConnection(strTargetConnection); + cnnTarget.Open(); + } + else + { + throw new Exception("Database not support,only support Oracle & SQL!"); + } + + try + { + aryReplicationTableList = Strings.Split(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "ReplicationTableList.config"), Constants.vbNewLine); + if (aryReplicationTableList.Length == 1 && string.IsNullOrEmpty(aryReplicationTableList[0])) + { + aryReplicationTableList = null; + } + } + catch (Exception ex) + { + aryReplicationTableList = null; + } + + ToNextTrans: + ; + + + // 取出先執行的交易資料 + if (strDataBaseType == "oracle") + { + strSQL = "Select * From tblSYSTrans Where TransID = (Select TransID From tblSYSTrans Where TransDate = (Select Min(TransDate) TransDate From tblSYSTrans) AND ROWNUM <= 1) Order By SQLID"; + } + else if (strDataBaseType == "mssql") + { + strSQL = "Select * From tblSYSTrans Where TransID = (Select TOP 1 TransID From tblSYSTrans Where TransDate = (Select Min(TransDate) TransDate From tblSYSTrans)) Order By SQLID"; + } + + //cmmSource = new IDbCommand(strSQL, cnnSource); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmSource); + //daTemp.Fill(dsTemp, "tblSYSTrans"); + //daTemp.Dispose(); + //cmmSource.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblSYSTrans", cnnSource); + + // 如果有交易資料才要處理,不然直接跳到結束 + if (dsTemp.Tables["tblSYSTrans"] == null || dsTemp.Tables["tblSYSTrans"].Rows.Count <= 0) + goto ToEnd; + + if (dsTemp.Tables["tblSYSTrans"].Select("SQLType=1").Length > 0) + { + strSQL = "Select * From tblSYSTrans_AttachFile Where TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[0]["TransID"].ToString() + "' Order By SQLID"; + //cmmSource = new IDbCommand(strSQL, cnnSource); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmSource); + //daTemp.Fill(dsTemp, "tblSYSTrans_AttachFile"); + //daTemp.Dispose(); + //cmmSource.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblSYSTrans_AttachFile", cnnSource); + } + + if (dsTemp.Tables["tblSYSTrans"].Select("SQLType=2").Length > 0) + { + strSQL = "Select * From tblSYSTrans_Clob Where TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[0]["TransID"].ToString() + "' Order By SQLID"; + //cmmSource = new IDbCommand(strSQL, cnnSource); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmSource); + //daTemp.Fill(dsTemp, "tblSYSTrans_Clob"); + //daTemp.Dispose(); + //cmmSource.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblSYSTrans_Clob", cnnSource); + } + + // //Begin Source Transaction + oTranSource = cnnSource.BeginTransaction(); + + if (strTargetDataBaseType == "oracle") + { + cmmTarget = new OracleCommand(); + } + else if (strTargetDataBaseType == "mssql") + { + cmmTarget = new SqlCommand(); + } + else + { + throw new Exception("Database not support,only support Oracle & SQL!"); + } + + cmmTarget.Connection = cnnTarget; + + // Begin Target Transaction + oTranTarget = cnnTarget.BeginTransaction(); + cmmTarget.Transaction = oTranTarget; + + for (int i = 0, loopTo = dsTemp.Tables["tblSYSTrans"].Rows.Count - 1; i <= loopTo; i++) + { + + // 如果沒有設定Table則全部執行,有設定Table則只執行Table List中的SQL + if (aryReplicationTableList != null && aryReplicationTableList.Length > 0) + { + foreach (string strReplicationTable in aryReplicationTableList) + { + if (!string.IsNullOrEmpty(strReplicationTable.Trim()) && dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLTEXT"].ToString().ToUpper().IndexOf(" " + strReplicationTable.Trim().ToUpper()) != -1) + { + // 有找到,離開For,執行SQL + goto ToExeSQL; + } + } + // 沒找到,表示不用執行,跳到下一個SQL + goto ToNextSQL; + } + + ToExeSQL: + ; + + string strSQLCommandTmp = dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLTEXT"].ToString(); + strCommandText = SQLCommandTuning(strTargetDataBaseType, ref strSQLCommandTmp); + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLTYPE"], 0, false))) // 普通SQL + { + + cmmTarget.CommandText = strCommandText; + cmmTarget.ExecuteNonQuery(); + } + + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLTYPE"], 1, false))) // 有附檔類型的SQL + { + + cmmTarget.CommandText = strCommandText; + + drSel = dsTemp.Tables["tblSYSTrans_AttachFile"].Select("TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[i]["TransID"].ToString() + "' And SQLID = " + dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLID"].ToString()); + + if (drSel.Length > 0) + { + + for (int j = 0, loopTo1 = drSel.Length - 1; j <= loopTo1; j++) + { + if (strDataBaseType == "oracle") + { + + param = new OracleParameter(":" + drSel[j]["PName"].ToString(), OracleDbType.Blob); + param.Value = drSel[j]["PBinary"]; + cmmTarget.Parameters.Add(param); + param = null; + } + + else if (strDataBaseType == "mssql") + { + + param = new SqlParameter("@" + drSel[j]["PName"].ToString(), SqlDbType.VarBinary); + param.Value = drSel[j]["PBinary"]; + cmmTarget.Parameters.Add(param); + param = null; + } + + else + { + throw new Exception("Database not support,only support Oracle & SQL!"); + } + } + } + + cmmTarget.ExecuteNonQuery(); + cmmTarget.Parameters.Clear(); + } + + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLTYPE"], 2, false))) // LOB類型的SQL + { + + cmmTarget.CommandText = strCommandText; + + drSel = dsTemp.Tables["tblSYSTrans_CLOB"].Select("TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[i]["TransID"].ToString() + "' And SQLID = " + dsTemp.Tables["tblSYSTrans"].Rows[i]["SQLID"].ToString()); + + if (drSel.Length > 0) + { + + for (int j = 0, loopTo2 = drSel.Length - 1; j <= loopTo2; j++) + { + if (strDataBaseType == "oracle") + { + + param = new OracleParameter(":" + drSel[j]["PName"].ToString(), OracleDbType.Clob); + param.Value = drSel[j]["PVarchar"]; + cmmTarget.Parameters.Add(param); + param = null; + } + + else if (strDataBaseType == "mssql") + { + + param = new SqlParameter("@" + drSel[j]["PName"].ToString(), SqlDbType.NVarChar); + param.Value = drSel[j]["PVarchar"]; + cmmTarget.Parameters.Add(param); + param = null; + } + else + { + throw new Exception("Database not support,only support Oracle & SQL!"); + } + } + } + + cmmTarget.ExecuteNonQuery(); + cmmTarget.Parameters.Clear(); + + } + + ToNextSQL: + ; + + + } + + cmmSource = CreateCommand(); + cmmSource.Connection = cnnSource; + cmmSource.Transaction = oTranSource; + + cmmSource.CommandText = "Delete From tblSYSTrans_CLOB Where TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[0]["TransID"].ToString() + "'"; + cmmSource.ExecuteNonQuery(); + + cmmSource.CommandText = "Delete From tblSYSTrans_ATTACHFILE Where TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[0]["TransID"].ToString() + "'"; + cmmSource.ExecuteNonQuery(); + + cmmSource.CommandText = "Delete From tblSYSTrans Where TransID = '" + dsTemp.Tables["tblSYSTrans"].Rows[0]["TransID"].ToString() + "'"; + cmmSource.ExecuteNonQuery(); + + oTranSource.Commit(); + oTranTarget.Commit(); + + cmmSource.Dispose(); + cmmTarget.Dispose(); + + if (dsTemp.Tables["tblSYSTrans"] != null) + dsTemp.Tables["tblSYSTrans"].Clear(); + if (dsTemp.Tables["tblSYSTrans_AttachFile"] != null) + dsTemp.Tables["tblSYSTrans"].Clear(); + if (dsTemp.Tables["tblSYSTrans_Clob"] != null) + dsTemp.Tables["tblSYSTrans"].Clear(); + + // 交易完成,取出下一筆交易資料 + goto ToNextTrans; + + ToEnd: + ; + + + // //Return success + funReplicationDBRet = "success"; + } + + catch (Exception e1) + { + + // Try to rollback the transaction + try + { + if (oTranSource != null) + oTranSource.Rollback(); + if (oTranTarget != null) + oTranSource.Rollback(); + } + catch + { + // Do nothing here; transaction is not active. + } + + // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 + funReplicationDBRet = CombineFailMsg("0000-999999", e1.Message); + + // 發送EMAIL + colParameters.Add(funReplicationDBRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + + finally + { + + if (oTranSource != null) + oTranSource = null; + if (oTranTarget != null) + oTranTarget = null; + + CloseConnection(cnnSource); + CloseConnection(cnnTarget); + + if (cmmSource != null) + cmmSource.Dispose(); + if (cmmTarget != null) + cmmTarget.Dispose(); + + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return funReplicationDBRet; + + } + + #endregion + + #region Data Archive + // 2013/02/04,Hank,資料封存 + // 共用函數 + private void LoadArchiveBasis(ref DataSet dsTemp, ref DataTable dtArchiveByMO, ref DataTable dtDeleteByDate) + { + // 讀取數據封存主檔 + + string strArchiveBasis = default(string), strArchiveRelation = default(string); + + dsTemp.Relations.Clear(); + + foreach (DataTable table in dsTemp.Tables) + table.Constraints.Clear(); + + // 先判斷是否dataset中已有element之datatable,若有,需先remove否則會有錯誤 + if (!(dsTemp.Tables[strArchiveBasis] == null)) + { + dsTemp.Tables.Remove(strArchiveBasis); + } + + if (!(dsTemp.Tables[strArchiveRelation] == null)) + { + dsTemp.Tables.Remove(strArchiveRelation); + } + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // 呼叫WebService + // OutXml = wsSYS.LoadArchiveBasis(InXml) + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.LoadArchiveBasis", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + strArchiveBasis = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadarchivebasis").Item(0).SelectNodes("name").Item(0).InnerXml; + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadarchivebasis").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsTemp.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadarchivebasis").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsTemp.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + + var colCheckFlag = new DataColumn(); + colCheckFlag.ColumnName = "CheckFlag"; + colCheckFlag.DataType = Type.GetType("System.Boolean"); + colCheckFlag.DefaultValue = true; + dsTemp.Tables[strArchiveBasis].Columns.Add(colCheckFlag); + + dsTemp.Tables[strArchiveBasis].DefaultView.Sort = "ARCHIVETABLENAME"; + + dtArchiveByMO.Clear(); + dsTemp.Tables[strArchiveBasis].DefaultView.RowFilter = "ARCHIVETYPE = 'ARCHIVEBYMONO' OR ARCHIVETYPE = 'ARCHIVEBYLOTNO' OR ARCHIVETYPE = 'ARCHIVEBYLOTSERIAL' OR ARCHIVETYPE = 'ARCHIVEBYLOGGROUPSERIAL'"; + dtArchiveByMO = dsTemp.Tables[strArchiveBasis].DefaultView.ToTable(); + + dtDeleteByDate.Clear(); + dsTemp.Tables[strArchiveBasis].DefaultView.RowFilter = "ARCHIVETYPE = 'DELETEBYDATE'"; + dtDeleteByDate = dsTemp.Tables[strArchiveBasis].DefaultView.ToTable(); + + dsTemp.Tables[strArchiveBasis].DefaultView.RowFilter = "ARCHIVETYPE = 'ARCHIVEBYDATE'"; + } + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc)); + } + } + + catch (Exception ex) + { + throw; + } + finally + { + } + + } + + private string GetArchiveConfig() + { + string GetArchiveConfigRet = default(string); + // 取得封存目的schema + + //System.Data.OleDb.OleDbDataAdapter daTemp; + var dsTempConfig = new DataSet(); + var cnnTemp = default(IDbConnection); + string strSQL; + + try + { + // //Create connection + cnnTemp = CreateConnection(strConnectionString); + + strSQL = "Select ARCHIVEDATABASE From TBLSYSARCHIVECONFIG Where ACTIVESTATUS = 1"; + + // //Select data + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTempConfig, "ArchiveConfig"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTempConfig, "ArchiveConfig", cnnTemp); + + GetArchiveConfigRet = Conversions.ToString(dsTempConfig.Tables[0].Rows[0][0]); + } + + catch (Exception ex) + { + GetArchiveConfigRet = null; + throw; + } + finally + { + CloseConnection(cnnTemp); + if (dsTempConfig != null) + { + dsTempConfig.Dispose(); + } + } + + return GetArchiveConfigRet; + + } + + private DateTime GetOldestMOCloseDate() + { + DateTime GetOldestMOCloseDateRet = default(DateTime); + // 取得工單結案日 + + GetOldestMOCloseDateRet = defDateTime; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // 呼叫WebService + // OutXml = wsSYS.GetOldestMOCloseDate(InXml) + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.GetOldestMOCloseDate", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + GetOldestMOCloseDateRet = Conversions.ToDate(XmlDoc.GetElementsByTagName("returnvalue").Item(0).InnerText); + } + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc)); + } + } + + catch (Exception ex) + { + throw ex; + } + finally + { + } + + return GetOldestMOCloseDateRet; + + } + + private DateTime GetOldestTableDate(string TableList) + { + DateTime GetOldestTableDateRet = default(DateTime); + // 取得封存日期 + + GetOldestTableDateRet = defDateTime; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "tablelist"; + string argname = "TableList"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameterMultiValue(argvalue_name, argname, argtype, TableList, argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // 呼叫WebService + // OutXml = wsSYS.GetOldestTableDate(InXml) + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.GetOldestTableDate", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + GetOldestTableDateRet = Conversions.ToDate(XmlDoc.GetElementsByTagName("returnvalue").Item(0).InnerText); + } + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc)); + } + } + + catch (Exception ex) + { + throw ex; + } + + return GetOldestTableDateRet; + + } + + + // Archive By MO + private string funDataArchiveByMO(Collection colParameters = null) + { + string funDataArchiveByMORet = default(string); + + var dsTemp = new DataSet(); + DataTable dtArchiveByMO = new DataTable(), dtDeleteByDate = new DataTable(); + DataRow[] drSel; + DataRow drAdd; + + int IntParDay; // 傳入天數-封存幾天以前的資料 + + do + { + try + { + // ParameterXX參數說明 + // 01 Archive Day + + // Parameter01為傳入參數,作為IntParDay,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funDataArchiveByMORet = "Archive Day not found!!!(Parameter 01)"; + break; + } + else if (Information.IsNumeric(colParameters["Parameter01"])) + { + IntParDay = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter01"]))); + } + else + { + funDataArchiveByMORet = "Archive Day not Numeric!!!(Parameter 01)"; + break; + } + + + int IntMaxDay; // Maximum Day + DateTime IntArchiveDay = Conversions.ToDate(DateTime.Now.AddDays(-IntParDay).ToString("yyyy/MM/dd 23:59:59")); // 轉成日期 + string strArchiveConfig; // Schema name + var dtArchiveProcess1 = new DataTable(); // 要執行封存的table記錄 + dtArchiveProcess1 = new DataTable("ArchiveProcess1"); + dtArchiveProcess1.Columns.Add("ItemNo", Type.GetType("System.Decimal")); + dtArchiveProcess1.Columns.Add("ArchiveDate", Type.GetType("System.DateTime")); + LoadArchiveBasis(ref dsTemp, ref dtArchiveByMO, ref dtDeleteByDate); + dsTemp.Dispose(); + dtDeleteByDate.Dispose(); + + strArchiveConfig = GetArchiveConfig(); + + // 都沒有勾選就不執行了 + drSel = dtArchiveByMO.Select("CheckFlag=True"); + if (drSel.Length == 0) + throw new Exception(TranslateMsg("[%PleaseCheck%] [%ArchiveByMO%] [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + + // 要封存的TABLE資訊 存成XML + string strArchiveByMOTable = ""; + for (int i = 0, loopTo = drSel.Length - 1; i <= loopTo; i++) + { + strArchiveByMOTable += CombineXMLValueTag( + CombineXMLValue("archivetype", drSel[i]["ArchiveType"].ToString()) + + CombineXMLValue("archivetablename", drSel[i]["ArchiveTableName"].ToString()) + + CombineXMLValue("historytablename", drSel[i]["HistoryTableName"].ToString()) + + CombineXMLValue("conditioncolumn", drSel[i]["ConditionColumn"].ToString())); + } + + // 取得工單結案日 + var OldestMOCloseDate = defDateTime; + OldestMOCloseDate = GetOldestMOCloseDate(); + // 沒有取得工單結案日不執行 + if (OldestMOCloseDate == defDateTime) + throw new Exception(TranslateMsg("[%MOCloseDate%] [%IS NOT EXIST%]!", strLanguageMode, strResourceDir)); + + // 執行封存紀錄,先以天為單位執行 + if (DateAndTime.DateDiff(DateInterval.Day, OldestMOCloseDate, IntArchiveDay) > 0L) + { + + if (DateAndTime.DateAdd(DateInterval.Day, DateAndTime.DateDiff(DateInterval.Day, OldestMOCloseDate, IntArchiveDay), OldestMOCloseDate) < IntArchiveDay) + { + IntMaxDay = (int)(DateAndTime.DateDiff(DateInterval.Day, OldestMOCloseDate, IntArchiveDay) + 1L); + } + else + { + IntMaxDay = (int)DateAndTime.DateDiff(DateInterval.Day, OldestMOCloseDate, IntArchiveDay); + } + + dtArchiveProcess1.Clear(); + + for (int i = 0, loopTo1 = IntMaxDay - 1; i <= loopTo1; i++) + { + + if (i != IntMaxDay - 1) + { + drAdd = dtArchiveProcess1.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = DateAndTime.DateAdd(DateInterval.Day, i + 1, OldestMOCloseDate); + dtArchiveProcess1.Rows.Add(drAdd); + } + else + { + drAdd = dtArchiveProcess1.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess1.Rows.Add(drAdd); + } + } + } + + else if (OldestMOCloseDate < IntArchiveDay) // 執行封存紀錄小於1天,執行一次就足夠 + { + IntMaxDay = 1; + + dtArchiveProcess1.Clear(); + drAdd = dtArchiveProcess1.NewRow(); + drAdd["ItemNo"] = 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess1.Rows.Add(drAdd); + } + + else // 沒有需要執行的封存紀錄 + { + funDataArchiveByMORet = "success"; + break; + } + + // 開始執行封存記錄 + ArchiveByMO(strArchiveConfig, strArchiveByMOTable, dtArchiveProcess1); + + funDataArchiveByMORet = "success"; + } + + catch (Exception ex) + { + funDataArchiveByMORet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funDataArchiveByMORet, "EmailBody"); + SendJobFailEmail(colParameters); + } + } + + while (false); + return funDataArchiveByMORet; + + } + + private void ArchiveByMO(string strArchiveDatabase1, string strArchiveByMOTable, DataTable dtArchiveProcess1) + { + + dtArchiveProcess1.DefaultView.Sort = "ItemNo"; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "archivedate"; + string argname = "ArchiveDate"; + string argtype = "DateTime"; + string argvalue = Strings.Format(dtArchiveProcess1.DefaultView[0]["ArchiveDate"], "yyyy/MM/dd H:mm:ss"); + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + string argvalue_name1 = "archivedatabase"; + string argname1 = "ArchiveDatabase"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, strArchiveDatabase1, argdesc1); + string argvalue_name2 = "archivetable"; + string argname2 = "ArchiveTable"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameterMultiValue(argvalue_name2, argname2, argtype2, strArchiveByMOTable, argdesc2); + string argvalue_name3 = "userno"; + string argname3 = "UserNo"; + string argtype3 = "String"; + string argvalue1 = "AutoRun"; + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, argvalue1, argdesc3); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.ExeArchiveByMO", InXml); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 刪除已送出的資料 + dtArchiveProcess1.DefaultView[0].Delete(); + dtArchiveProcess1.AcceptChanges(); + + if (dtArchiveProcess1.Rows.Count > 0) + { + // 遞迴處理下一筆資料 + ArchiveByMO(strArchiveDatabase1, strArchiveByMOTable, dtArchiveProcess1); + } + } + else + { + throw new Exception(XmlDoc.InnerText); + } + + XmlDoc = null; + } + + catch (Exception ex) + { + throw; + } + + } + + + // Archive By Date + private string funDataArchiveByDate(Collection colParameters = null) + { + string funDataArchiveByDateRet = default(string); + + DataSet dsTemp = new DataSet(), dsGroup = new DataSet(); + DataTable dtArchiveByMO = new DataTable(), dtDeleteByDate = new DataTable(); + DataRow[] drSel; + DataRow drAdd; + + int IntParDay; // 傳入天數-封存幾天以前的資料 + + do + { + try + { + // ParameterXX參數說明 + // 01 Archive Day + + // Parameter01為傳入參數,作為IntParDay,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funDataArchiveByDateRet = "Archive Day not found!!!(Parameter 01)"; + break; + } + else if (Information.IsNumeric(colParameters["Parameter01"])) + { + IntParDay = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter01"]))); + } + else + { + funDataArchiveByDateRet = "Archive Day not Numeric!!!(Parameter 01)"; + break; + } + + int IntMaxDay; // Maximum Day + var IntArchiveDay = DateTime.Now.AddDays(-IntParDay); // 轉成日期 + string strArchiveConfig; // Schema name + var dtArchiveProcess2 = new DataTable(); + dtArchiveProcess2 = new DataTable("ArchiveProcess2"); + dtArchiveProcess2.Columns.Add("ItemNo", Type.GetType("System.Decimal")); + dtArchiveProcess2.Columns.Add("ArchiveDate", Type.GetType("System.DateTime")); + LoadArchiveBasis(ref dsTemp, ref dtArchiveByMO, ref dtDeleteByDate); + dtArchiveByMO.Dispose(); + dtDeleteByDate.Dispose(); + + strArchiveConfig = GetArchiveConfig(); + + // 都沒有勾選就不執行了 + drSel = dsTemp.Tables[0].Select("ArchiveType = 'ARCHIVEBYDATE' AND CheckFlag=True"); + if (drSel.Length == 0) + throw new Exception(TranslateMsg("[%PleaseCheck%] [%ArchivebyDate%] [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + + // 要封存的TABLE資訊 存成XML + string strArchiveByDateTable = ""; + string strTableList = ""; + for (int i = 0, loopTo = drSel.Length - 1; i <= loopTo; i++) + { + strArchiveByDateTable += CombineXMLValueTag( + CombineXMLValue("archivetype", drSel[i]["ArchiveType"].ToString()) + + CombineXMLValue("archivetablename", drSel[i]["ArchiveTableName"].ToString()) + + CombineXMLValue("historytablename", drSel[i]["HistoryTableName"].ToString()) + + CombineXMLValue("conditioncolumn", drSel[i]["ConditionColumn"].ToString())); + + strTableList += CombineXMLValueTag( + CombineXMLValue("tablename", drSel[i]["ArchiveTableName"].ToString()) + + CombineXMLValue("conditioncolumn", drSel[i]["ConditionColumn"].ToString())); + } + + // 取得封存日 + var OldestTableDate = defDateTime; + OldestTableDate = GetOldestTableDate(strTableList); + // 沒有取得封存日不執行 + if (OldestTableDate == defDateTime) + throw new Exception(TranslateMsg("[%ARCHIVEDATE%] [%IS NOT EXIST%]!", strLanguageMode, strResourceDir)); + + // 執行封存紀錄,先以天為單位執行 + if (DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay) > 0L) + { + + if (DateAndTime.DateAdd(DateInterval.Day, DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay), OldestTableDate) < IntArchiveDay) + { + IntMaxDay = (int)(DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay) + 1L); + } + else + { + IntMaxDay = (int)DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay); + } + + dtArchiveProcess2.Clear(); + + for (int i = 0, loopTo1 = IntMaxDay - 1; i <= loopTo1; i++) + { + + if (i != IntMaxDay - 1) + { + drAdd = dtArchiveProcess2.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = DateAndTime.DateAdd(DateInterval.Day, i + 1, OldestTableDate); + dtArchiveProcess2.Rows.Add(drAdd); + } + else + { + drAdd = dtArchiveProcess2.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess2.Rows.Add(drAdd); + } + } + } + + else if (OldestTableDate < IntArchiveDay) // 執行封存紀錄小於1天,執行一次就足夠 + { + IntMaxDay = 1; + + dtArchiveProcess2.Clear(); + drAdd = dtArchiveProcess2.NewRow(); + drAdd["ItemNo"] = 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess2.Rows.Add(drAdd); + } + + else // 沒有需要執行的封存紀錄 + { + funDataArchiveByDateRet = "success"; + break; + } + + // 開始執行封存記錄 + ArchiveByDate(strArchiveConfig, strArchiveByDateTable, dtArchiveProcess2); + + funDataArchiveByDateRet = "success"; + } + + catch (Exception ex) + { + funDataArchiveByDateRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funDataArchiveByDateRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + } + + while (false); + return funDataArchiveByDateRet; + + } + + private void ArchiveByDate(string strArchiveDatabase2, string strArchiveByDateTable, DataTable dtArchiveProcess2) + { + + dtArchiveProcess2.DefaultView.Sort = "ItemNo"; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "archivedate"; + string argname = "ArchiveDate"; + string argtype = "DateTime"; + string argvalue = Strings.Format(dtArchiveProcess2.DefaultView[0]["ArchiveDate"], "yyyy/MM/dd H:mm:ss"); + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + string argvalue_name1 = "archivedatabase"; + string argname1 = "ArchiveDatabase"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, strArchiveDatabase2, argdesc1); + string argvalue_name2 = "archivetable"; + string argname2 = "ArchiveTable"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameterMultiValue(argvalue_name2, argname2, argtype2, strArchiveByDateTable, argdesc2); + string argvalue_name3 = "userno"; + string argname3 = "UserNo"; + string argtype3 = "String"; + string argvalue1 = "AutoRun"; + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, argvalue1, argdesc3); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.ExeArchiveByDate", InXml); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 刪除已送出的資料 + dtArchiveProcess2.DefaultView[0].Delete(); + dtArchiveProcess2.AcceptChanges(); + + if (dtArchiveProcess2.Rows.Count > 0) + { + // 遞迴處理下一筆資料 + ArchiveByDate(strArchiveDatabase2, strArchiveByDateTable, dtArchiveProcess2); + } + } + else + { + throw new Exception(XmlDoc.InnerText); + } + + XmlDoc = null; + } + + catch (Exception ex) + { + throw; + } + + } + + + // Delete By Date + private string funDataDeleteByDate(Collection colParameters = null) + { + string funDataDeleteByDateRet = default(string); + + var dsTemp = new DataSet(); + DataTable dtArchiveByMO = new DataTable(), dtDeleteByDate = new DataTable(); + DataRow[] drSel; + DataRow drAdd; + + int IntParDay; // 傳入天數-封存幾天以前的資料 + + do + { + try + { + // ParameterXX參數說明 + // 01 Archive Day + + // Parameter01為傳入參數,作為IntParDay,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funDataDeleteByDateRet = "Archive Day not found!!!(Parameter 01)"; + break; + } + else if (Information.IsNumeric(colParameters["Parameter01"])) + { + IntParDay = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter01"]))); + } + else + { + funDataDeleteByDateRet = "Archive Day not Numeric!!!(Parameter 01)"; + break; + + } + + int IntMaxDay; // Maximum Day + var IntArchiveDay = DateTime.Now.AddDays(-IntParDay); // 轉成日期 + string strArchiveConfig; // 傳入Schema name + var dtArchiveProcess3 = new DataTable(); + dtArchiveProcess3 = new DataTable("ArchiveProcess3"); + dtArchiveProcess3.Columns.Add("ItemNo", Type.GetType("System.Decimal")); + dtArchiveProcess3.Columns.Add("ArchiveDate", Type.GetType("System.DateTime")); + LoadArchiveBasis(ref dsTemp, ref dtArchiveByMO, ref dtDeleteByDate); + dsTemp.Dispose(); + dtArchiveByMO.Dispose(); + + strArchiveConfig = GetArchiveConfig(); + + // 都沒有勾選就不執行了 + drSel = dtDeleteByDate.Select("CheckFlag=True"); + if (drSel.Length == 0) + throw new Exception(TranslateMsg("[%PleaseCheck%] [%DataDelete%] [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + + // 要封存的TABLE資訊 存成XML + string strDeleteByDateTable = ""; + string strTableList = ""; + for (int i = 0, loopTo = drSel.Length - 1; i <= loopTo; i++) + { + strDeleteByDateTable += CombineXMLValueTag( + CombineXMLValue("archivetablename", drSel[i]["ArchiveTableName"].ToString()) + + CombineXMLValue("conditioncolumn", drSel[i]["ConditionColumn"].ToString())); + + strTableList += CombineXMLValueTag( + CombineXMLValue("tablename", drSel[i]["ArchiveTableName"].ToString()) + + CombineXMLValue("conditioncolumn", drSel[i]["ConditionColumn"].ToString())); + } + + // 取得日期 + var OldestTableDate = defDateTime; + OldestTableDate = GetOldestTableDate(strTableList); + // 沒有取得日期不執行 + if (OldestTableDate == defDateTime) + throw new Exception(TranslateMsg("[%DELETEDATE%] [%IS NOT EXIST%]!", strLanguageMode, strResourceDir)); + + // 執行封存紀錄,先以天為單位執行 + if (DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay) > 0L) + { + + if (DateAndTime.DateAdd(DateInterval.Day, DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay), OldestTableDate) < IntArchiveDay) + { + IntMaxDay = (int)(DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay) + 1L); + } + else + { + IntMaxDay = (int)DateAndTime.DateDiff(DateInterval.Day, OldestTableDate, IntArchiveDay); + } + + dtArchiveProcess3.Clear(); + + for (int i = 0, loopTo1 = IntMaxDay - 1; i <= loopTo1; i++) + { + + if (i != IntMaxDay - 1) + { + drAdd = dtArchiveProcess3.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = DateAndTime.DateAdd(DateInterval.Day, i + 1, OldestTableDate); + dtArchiveProcess3.Rows.Add(drAdd); + } + else + { + drAdd = dtArchiveProcess3.NewRow(); + drAdd["ItemNo"] = i + 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess3.Rows.Add(drAdd); + } + } + } + + else if (OldestTableDate < IntArchiveDay) // 執行封存紀錄小於1天,執行一次就足夠 + { + IntMaxDay = 1; + + dtArchiveProcess3.Clear(); + drAdd = dtArchiveProcess3.NewRow(); + drAdd["ItemNo"] = 1; + drAdd["ArchiveDate"] = IntArchiveDay; + dtArchiveProcess3.Rows.Add(drAdd); + } + + else // 沒有需要執行的封存紀錄 + { + funDataDeleteByDateRet = "success"; + break; + } + + // 開始執行封存記錄 + DeleteByDate(strArchiveConfig, strDeleteByDateTable, dtArchiveProcess3); + + funDataDeleteByDateRet = "success"; + } + + catch (Exception ex) + { + funDataDeleteByDateRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funDataDeleteByDateRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + } + + while (false); + return funDataDeleteByDateRet; + + } + + private void DeleteByDate(string strArchiveDatabase3, string strDeleteByDateTable, DataTable dtArchiveProcess3) + { + + dtArchiveProcess3.DefaultView.Sort = "ItemNo"; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "archivedate"; + string argname = "ArchiveDate"; + string argtype = "DateTime"; + string argvalue = Strings.Format(dtArchiveProcess3.DefaultView[0]["ArchiveDate"], "yyyy/MM/dd H:mm:ss"); + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + string argvalue_name1 = "archivedatabase"; + string argname1 = "ArchiveDatabase"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, strArchiveDatabase3, argdesc1); + string argvalue_name2 = "archivetable"; + string argname2 = "ArchiveTable"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameterMultiValue(argvalue_name2, argname2, argtype2, strDeleteByDateTable, argdesc2); + string argvalue_name3 = "userno"; + string argname3 = "UserNo"; + string argtype3 = "String"; + string argvalue1 = "AutoRun"; + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, argvalue1, argdesc3); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.DelLogData", InXml); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 刪除已送出的資料 + dtArchiveProcess3.DefaultView[0].Delete(); + dtArchiveProcess3.AcceptChanges(); + + if (dtArchiveProcess3.Rows.Count > 0) + { + // 遞迴處理下一筆資料 + DeleteByDate(strArchiveDatabase3, strDeleteByDateTable, dtArchiveProcess3); + } + } + else + { + throw new Exception(XmlDoc.InnerText); + } + + XmlDoc = null; + } + + catch (Exception ex) + { + throw; + } + + } + + #endregion + + #region Subscription Report + + private string funSubscriptionReport(Collection colParameters = null) + { + string funSubscriptionReportRet = default(string); + + var cnnTemp = default(IDbConnection); + //System.Data.OleDb.OleDbDataAdapter daTemp; + var dsTemp = new DataSet(); + string strSQL; + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + + DataTable dtChartSettingResult = new DataTable(); + DataTable dtAttachFiles = new DataTable(); + + DataRow[] drReportBasis, drCond, drPeriod; + string strCondition, strOperand, strMailBody, strOperandChar; + int intDataType; + string[] aryInDefaultValue; + string strTempDefaultValue; + string strFinalScript, strRPTLogSerial = default(string); // ScriptReprot執行結果 + + try + { + cnnTemp = CreateConnection(strConnectionString); + + // 取出需要執行的報表訂閱 + // 2019/04/16 OwenLiu, Mantis:0056206, 報表訂閱僅取出已簽核的使用者資料 + strSQL = "Select A.*, B.EmailAddress From tblRPTSubscription A, tblUSRUserBasis B " + "Where A.UserNo = B.UserNo And B.EmailAddress is not null AND B.IssueState = 2 And " + "A.NextRunTime is not null And " + "A.NextRunTime <= To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(strSQL, cnnTemp); + //daTemp.Fill(dsTemp, "Subscription"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "Subscription", cnnTemp); + + if (dsTemp.Tables["Subscription"].Rows.Count == 0) // 沒有需要執行的訂閱 + { + funSubscriptionReportRet = "success"; + return funSubscriptionReportRet; + } + + strSQL = "Select * From tblRPTReportBasis Where ReportType = 2"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(strSQL, cnnTemp); + //daTemp.Fill(dsTemp, "ReportBasis"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ReportBasis", cnnTemp); + + strSQL = "Select * From tblRPTSubscriptionCond"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(strSQL, cnnTemp); + //daTemp.Fill(dsTemp, "SubscriptionCond"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "SubscriptionCond", cnnTemp); + + strSQL = "Select * From tblRPTSubscriptionPeriod"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(strSQL, cnnTemp); + //daTemp.Fill(dsTemp, "Period"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "Period", cnnTemp); + + strSQL = "Select * From tblUSRUserBasis Where IssueState = 2"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(strSQL, cnnTemp); + //daTemp.Fill(dsTemp, "User"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "User", cnnTemp); + + dtAttachFiles.Columns.Add(new DataColumn("Name", typeof(string))); + dtAttachFiles.Columns.Add(new DataColumn("Content", typeof(byte[]))); + + if (dsTemp.Tables["Subscription"].Rows.Count > 0) + { + var strEmailCC = default(string); + foreach (DataRow drSub in dsTemp.Tables["Subscription"].Rows) + { + + drReportBasis = dsTemp.Tables["ReportBasis"].Select(Conversions.ToString("ReportID = '" + drSub["ReportID"] + "'")); + if (drReportBasis.Length == 0) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Report Basis not found: ReportID(" + + drSub["ReportID"] + ") "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + else if (string.IsNullOrEmpty(drReportBasis[0]["ReportScript"].ToString())) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Report Script not found: ReportID(" + + drSub["ReportID"] + ") "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + + try + { + strCondition = ""; + strMailBody = "[%ReportID%]:" + drSub["ReportID"].ToString() + "
"; + strMailBody += "[%ReportName%]:" + drReportBasis[0]["ReportName"].ToString() + "
"; + strMailBody += "[%CondField%]:" + "

    "; + // 設定的條件 + drCond = dsTemp.Tables["SubscriptionCond"].Select(Conversions.ToString("SubscriptionID = '" + drSub["SubscriptionID"] + "'")); + for (int i = 0, loopTo = drCond.Length - 1; i <= loopTo; i++) + { + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drCond[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", drCond[i]["CondDataType"].ToString()) + + CombineXMLValue("condoperand", CInput(drCond[i]["CondOperand"].ToString())) + + CombineXMLValue("condvalue", CInput(drCond[i]["defaultvalue"].ToString())) + + CombineXMLValue("insertname", CInput(drCond[i]["InsertName"].ToString()))); + + + strOperand = drCond[i]["CondOperand"].ToString().ToUpper(); + intDataType = Conversions.ToInteger(drCond[i]["CondDataType"]); + strTempDefaultValue = drCond[i]["DefaultValue"].ToString(); + switch (strOperand ?? "") + { + case "=": + { + strOperandChar = "[%IS EQUAL TO%]"; + break; + } + case "<>": + { + strOperandChar = "[%IS NOT EQUAL TO%]"; + break; + } + case ">": + { + strOperandChar = "[%IS GREATER THAN%]"; + break; + } + case ">=": + { + strOperandChar = "[%IS GREATER THAN OR EQUAL TO%]"; + break; + } + case "<": + { + strOperandChar = "[%IS LESS THAN%]"; + break; + } + case "<=": + { + strOperandChar = "[%IS LESS THAN OR EQUAL TO%]"; + break; + } + case "Like": + { + strOperandChar = "[%LIKE QUERY%]"; + break; + } + case "In": + { + strOperandChar = "[%In%]"; + break; + } + + default: + { + strOperandChar = strOperand; + break; + } + } + // 以運算元來決定Script寫法 + if (strOperand == "IN") + { + + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drCond[i]["CondField"] + "(" + drCond[i]["CondDesc"].ToString() + ") " + strOperandChar + " (" + strTempDefaultValue + ")" + + "
  • "); + } + + else if (strOperand == "LIKE") + { + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drCond[i]["CondField"] + "(" + drCond[i]["CondDesc"].ToString() + ") " + strOperandChar + " '" + drCond[i]["DefaultValue"] + + "%'" + "
  • "); + } + + else + { + switch (intDataType) + { + case 0: // Numeric + { + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drCond[i]["CondField"] + "(" + drCond[i]["CondDesc"].ToString() + ") " + strOperandChar + " " + drCond[i]["DefaultValue"] + + "
  • "); + break; + } + + case 3: // DateTime + { + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drCond[i]["CondField"] + "(" + drCond[i]["CondDesc"].ToString() + ") " + strOperandChar + " " + Strings.Format(Conversions.ToDate(drCond[i]["DefaultValue"]), "yyyy/MM/dd HH:mm:ss") + + "
  • "); // 其他一律視為字串 + break; + } + + default: + { + strMailBody += "
  • " + drCond[i]["CondField"] + "(" + drCond[i]["CondDesc"].ToString() + ") " + strOperandChar + " '" + CInput(drCond[i]["DefaultValue"].ToString()) + "'" + "
  • "; + break; + } + } + + } + } + + // 設定的區間條件 + drPeriod = dsTemp.Tables["Period"].Select(Conversions.ToString("SubscriptionID = '" + drSub["SubscriptionID"] + "'")); + for (int i = 0, loopTo1 = drPeriod.Length - 1; i <= loopTo1; i++) + { + switch (drPeriod[i]["DatetimePeriodType"].ToString() ?? "") + { + case "DayToDate": + { + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput(">=")) + + CombineXMLValue("condvalue", Strings.Format(DateTime.Now.AddDays(Convert.ToDouble(drPeriod[i]["FromDays"])), "yyyy/MM/dd") + " " + drPeriod[i]["FromTime"].ToString()) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput("<=")) + + CombineXMLValue("condvalue", Strings.Format(DateTime.Now.AddDays(Convert.ToDouble(drPeriod[i]["ToDays"])), "yyyy/MM/dd") + " " + drPeriod[i]["ToTime"].ToString()) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + // strCondition += " And " & drPeriod(i)("CondField") & " " & CInput(">=") & " To_Date('" & + // Format(New Date(Now.Year, Now.Month, Now.AddDays(drPeriod(i)("FromDays")).Day, CInt(drPeriod(i)("FromTime").ToString.Substring(0, 2)), CInt(drPeriod(i)("FromTime").ToString.Substring(3, 2)), CInt(drPeriod(i)("FromTime").ToString.Substring(6, 2))), "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') And " & + // drPeriod(i)("CondField") & " " & CInput("<=") & " To_Date('" & + // Format(New Date(Now.Year, Now.Month, Now.AddDays(drPeriod(i)("ToDays")).Day, CInt(drPeriod(i)("ToTime").ToString.Substring(0, 2)), CInt(drPeriod(i)("ToTime").ToString.Substring(3, 2)), CInt(drPeriod(i)("ToTime").ToString.Substring(6, 2))), "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')" + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drPeriod[i]["CondField"] + "(" + drPeriod[i]["CondDesc"].ToString() + ") [%Between%] " + Strings.Format(DateTime.Now.AddDays(Conversions.ToDouble(drPeriod[i]["FromDays"])), "yyyy/MM/dd") + + " " + drPeriod[i]["FromTime"].ToString() + " ~ " + Strings.Format(DateTime.Now.AddDays(Conversions.ToDouble(drPeriod[i]["ToDays"])), "yyyy/MM/dd") + + " " + drPeriod[i]["ToTime"].ToString() + "
  • "); + break; + } + + + case "MonthToDate": + { + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput(">=")) + + CombineXMLValue("condvalue", Strings.Format(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1), "yyyy/MM/dd HH:mm:ss")) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + strCondition += CombineXMLValueTag + (CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput("<=")) + + CombineXMLValue("condvalue", Strings.Format(DateTime.Now, "yyyy/MM/dd") + " " + drPeriod[i]["ToTime"].ToString()) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + // strCondition += " And " & drPeriod(i)("CondField") & " " & CInput(">=") & " To_Date('" & Format(New Date(Now.Year, Now.Month, 1), "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') And " & drPeriod(i)("CondField") & " " & CInput("<=") & " To_Date('" & Format(Now, "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')" + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drPeriod[i]["CondField"] + "(" + drPeriod[i]["CondDesc"].ToString() + ") [%Between%] " + Strings.Format(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1), "yyyy/MM/dd HH:mm:ss") + + " ~ " + Strings.Format(DateTime.Now, "yyyy/MM/dd") + " " + drPeriod[i]["ToTime"].ToString() + "
  • "); + break; + } + + case "YearToDate": + { + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput(">=")) + + CombineXMLValue("condvalue", Strings.Format(new DateTime(DateTime.Now.Year, 1, 1), "yyyy/MM/dd HH:mm:ss")) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + strCondition += CombineXMLValueTag( + CombineXMLValue("condfield", CInput(drPeriod[i]["CondField"].ToString())) + + CombineXMLValue("conddatatype", "3") + + CombineXMLValue("condoperand", CInput("<=")) + + CombineXMLValue("condvalue", Strings.Format(DateTime.Now, "yyyy/MM/dd") + " " + drPeriod[i]["ToTime"].ToString()) + + CombineXMLValue("insertname", CInput(drPeriod[i]["InsertName"].ToString()))); + + // strCondition += " And " & drPeriod(i)("CondField") & " " & CInput(">=") & " To_Date('" & Format(New Date(Now.Year, 1, 1), "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') And " & drPeriod(i)("CondField") & " " & CInput("<=") & " To_Date('" & Format(Now, "yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')" + strMailBody = Conversions.ToString(strMailBody + "
  • " + + drPeriod[i]["CondField"] + "(" + drPeriod[i]["CondDesc"].ToString() + ") [%Between%] " + Strings.Format(new DateTime(DateTime.Now.Year, 1, 1), "yyyy/MM/dd HH:mm:ss") + + " ~ " + Strings.Format(DateTime.Now, "yyyy/MM/dd") + " " + drPeriod[i]["ToTime"].ToString() + "
  • "); + break; + } + + } + + } + + strMailBody += "
"; + + var dsResult = new DataSet(); + + strIdentity = CombineXMLIdentity(modWIN.gComputerName, drSub["UserNo"].ToString(), DateTime.Now.ToString()); + strParameter = CombineXMLParameter("reportid", "ReportId", "String", CInput(drSub["ReportID"].ToString()), ""); + strParameter += CombineXMLParameterMultiValue("scriptcond", "ScriptCond", "String", strCondition, ""); + strParameter += CombineXMLParameter("clientstarttime", "ClientStartTime", "DateTime", Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss"), ""); + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsReportEngine.Query_ReturnDataSet", InXml, ref dsResult); + + // Dim XmlDoc As New XmlDocument + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + + // Get RPTLogSerial + if (XmlDoc.GetElementsByTagName("rptlogserial").Item(0).SelectNodes("value").Count > 0) + { + strRPTLogSerial = XmlDoc.DocumentElement.GetElementsByTagName("rptlogserial").Item(0).SelectNodes("value").Item(0).InnerText; + } + // Get FinalScript + if (XmlDoc.GetElementsByTagName("finalscript").Item(0).SelectNodes("value").Count > 0) + { + strFinalScript = XmlDoc.DocumentElement.GetElementsByTagName("finalscript").Item(0).SelectNodes("value").Item(0).InnerText; + // 將二個單引號取代為一個單引號 + strFinalScript = Strings.Replace(strFinalScript, "''", "'"); + } + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + + + //iugTemp.iMESUltraGrid.DataSource = dsResult.Tables[0]; + + //讓最後一列style生效,新增空列 + DataRow drEnd = dsResult.Tables[0].NewRow(); + dsResult.Tables[0].Rows.Add(drEnd); + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = drSub["FileType"].ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dsResult, ExcelMode, strLanguageMode, strResourceDir); + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + // ColSaveControl = null; + //} + + //switch (drSub["FileType"].ToString().ToUpper() ?? "") + //{ + // case "XLSX": + // { + // // 匯出Excel再轉Stream + // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel2007); + + // workbook.Save(memStream); + // memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + // case "XLS": + // { + // // 匯出Excel再轉Stream + // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003); + // workbook.Save(memStream); + // memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + //} + + // 0125796: [6.0.7] SDD230104_01-01_訂閱報表新增輸出圖表 2023/3/10 + if (drSub["EXPORTCHART"].ToString() == "1") + { + //Load ChartSetting + dtChartSettingResult = LoadReportChartSetting(CInput(drSub["ReportID"].ToString())); + + string strMailBody1 = ""; + string strMailBody2 = ""; + + // 取出 dtChartSettingResult 的 CHARTID 每一欄的資料 + foreach (DataRow dtrow in dtChartSettingResult.Rows) + { + + strMailBody1 += dtrow["CHARTID"].ToString() + ";"; + strMailBody2 += dtrow["CHARTTITLE"].ToString() + ";"; + } + // 移除最後一個分號 + strMailBody1 = strMailBody1.Remove(strMailBody1.Length - 1); + strMailBody2 = strMailBody2.Remove(strMailBody2.Length - 1); + + strMailBody += "[%CHART ID%]:" + strMailBody1 + "
"; + strMailBody += "[%CHART NAME%]:" + strMailBody2 + "
"; + + DataRow row = dtAttachFiles.NewRow(); + row["Name"] = "Report Chart.zip"; + row["Content"] = DrawChart(dsResult.Tables[0], dtChartSettingResult); + dtAttachFiles.Rows.Add(row); + + if (!(dtChartSettingResult == null)) + dtChartSettingResult.Dispose(); + } + + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + + // 20220927,13871,0118625: [聯詠] Autorun占用過多記憶體造成B2B服務停止 + try + { + //memStream.Close(); + //memStream.Dispose(); + + //iugTemp.iMESUltraGrid_InitializeLayOut -= iMESUltraGrid_InitializeLayOut; + //iugTemp.iMESUltraGrid.DataSource = null; + //iugTemp.Dispose(); + + dsResult.Dispose(); + } + catch (Exception ex) + { + + + // 副本收件人 + } + + + string[] UserNoCC = null; + DataRow[] drUser = null; + if (!string.IsNullOrEmpty(drSub["EmailCC"].ToString())) + { + UserNoCC = Strings.Split(drSub["EmailCC"].ToString(), ","); + foreach (string u in UserNoCC) + { + drUser = dsTemp.Tables["User"].Select("UserNo = '" + u + "' And EmailAddress <> ''"); + if (drUser.Length > 0) + { + strEmailCC += drUser[0]["EmailAddress"].ToString() + ","; + } + } + strEmailCC = strEmailCC.TrimEnd(','); + } + + + + // 發送郵件 + string argEmailSubject = TranslateMsg("[%SubscriptionReport%]", strLanguageMode, strResourceDir) + "-" + drSub["SubscriptionName"].ToString(); + string argEmailBody = TranslateMsg(strMailBody, strLanguageMode, strResourceDir); + string MailResult = this.SendMultiEmailNonGroup(ref argEmailSubject, argEmailBody, drSub["EmailAddress"].ToString(), DateTime.Now.ToString("yyyyMMddhhmmss") + "." + drSub["FileType"].ToString(), membyte, strEmailCC, dtAttachFiles); + if (MailResult.StartsWith("fail")) // Mail寄送失敗 + { + // 20220901,13871,0118251: 【度亘】描述性语言报表,排程执行失败,調整錯誤訊息 + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + MailResult + ",Send Email Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + + // 組InXml的字串 + string argSendTime1 = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime1); + string argvalue_name3 = "rptlogserial"; + string argname3 = "RPTLogSerial"; + string argtype3 = "String"; + string argdesc3 = ""; + strParameter = CombineXMLParameter(argvalue_name3, argname3, argtype3, strRPTLogSerial, argdesc3); + string argvalue_name4 = "clientendtime"; + string argname4 = "ClientEndTime"; + string argtype4 = "DateTime"; + string argvalue2 = Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss"); + string argdesc4 = ""; + strParameter += CombineXMLParameter(argvalue_name4, argname4, argtype4, argvalue2, argdesc4); + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsReportEngine.EditReportQueryLog", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Edit Report Query Log Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") " + GetExceptionSysMsg(XmlDoc) + " "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + + // 更新下次執行時間、最後執行時間 + if (drSub["RunFrequent"].ToString().ToUpper() == "ONLYONCE") // 執行一次, 清空下次執行時間 + { + + // 組InXml的字串 + string argSendTime2 = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime2); + string argvalue_name5 = "subscriptionid"; + string argname5 = "SubscriptionID"; + string argtype5 = "String"; + var tmp1 = drSub; + string argvalue3 = Conversions.ToString(tmp1["SubscriptionID"]); + string argdesc5 = ""; + strParameter = CombineXMLParameter(argvalue_name5, argname5, argtype5, argvalue3, argdesc5); + tmp1["SubscriptionID"] = argvalue3; + string argvalue_name6 = "lastruntime"; + string argname6 = "LastRunTime"; + string argtype6 = "Date"; + string argvalue4 = Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss"); + string argdesc6 = ""; + strParameter += CombineXMLParameter(argvalue_name6, argname6, argtype6, argvalue4, argdesc6); + + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsRPT.UpdSubscriptionReportRunTime", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Update Report RunTime Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") " + GetExceptionSysMsg(XmlDoc) + " "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + } + + else // 更新下次執行時間 + { + string strNextRunTime = GetSubscriptionNextDate(drSub); + if (string.IsNullOrEmpty(strNextRunTime)) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Get Report Next RunTime Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + + + // 組InXml的字串 + string argSendTime3 = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime3); + string argvalue_name7 = "subscriptionid"; + string argname7 = "SubscriptionID"; + string argtype7 = "String"; + var tmp2 = drSub; + string argvalue5 = Conversions.ToString(tmp2["SubscriptionID"]); + string argdesc7 = ""; + strParameter = CombineXMLParameter(argvalue_name7, argname7, argtype7, argvalue5, argdesc7); + tmp2["SubscriptionID"] = argvalue5; + string argvalue_name8 = "lastruntime"; + string argname8 = "LastRunTime"; + string argtype8 = "Date"; + string argvalue6 = Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss"); + string argdesc8 = ""; + strParameter += CombineXMLParameter(argvalue_name8, argname8, argtype8, argvalue6, argdesc8); + string argvalue_name9 = "nextruntime"; + string argname9 = "NextRunTime"; + string argtype9 = "Date"; + string argdesc9 = ""; + strParameter += CombineXMLParameter(argvalue_name9, argname9, argtype9, strNextRunTime, argdesc9); + + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsRPT.UpdSubscriptionReportRunTime", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Update Report RunTime Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") " + GetExceptionSysMsg(XmlDoc) + " "); + continue; // 此訂閱失敗,執行下一筆訂閱 + } + + } + dtAttachFiles.Clear(); + } + + else + { + // Get FinalScript,若有Script即取出,可方便Debug. + if (XmlDoc.GetElementsByTagName("finalscript").Item(0).SelectNodes("value").Count > 0) + { + strFinalScript = XmlDoc.DocumentElement.GetElementsByTagName("finalscript").Item(0).SelectNodes("value").Item(0).InnerText; + // 將二個單引號取代為一個單引號 + strFinalScript = Strings.Replace(strFinalScript, "''", "'"); + } + + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Query Report Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") " + GetExceptionSysMsg(XmlDoc) + " "); + continue; + + } // 此訂閱失敗,執行下一筆訂閱 + } + + + catch (Exception ex) + { + funSubscriptionReportRet = Conversions.ToString(funSubscriptionReportRet + "fail;Query Report Fail : SubscriptionID(" + + drSub["SubscriptionID"] + ") " + ex.Message + " "); + continue; + } // 此訂閱失敗,執行下一筆訂閱 + + } + + } + + if (string.IsNullOrEmpty(funSubscriptionReportRet)) + funSubscriptionReportRet = "success"; + } + + catch (Exception ex) + { + funSubscriptionReportRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funSubscriptionReportRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + + finally + { + if (dtAttachFiles != null) + { + dtAttachFiles.Clear(); + dtAttachFiles.Dispose(); + } + if (!(dsTemp == null)) + dsTemp.Dispose(); + + // 20220927,13871, 0118625: [聯詠] Autorun占用過多記憶體造成B2B服務停止 + try + { + //if (ExcelExp != null) + //{ + // ExcelExp.Dispose(); + // ExcelExp = null; + //} + //workbook = null; + } + catch (Exception ex) + { + + } + + CloseConnection(cnnTemp); + } + + return funSubscriptionReportRet; + + } + + //private void iMESUltraGrid_InitializeLayOut(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e) + //{ + + // { + // var withBlock = ((iMESUltraGrid.iMESUltraGridControl)sender).iMESUltraGrid.DisplayLayout; + // withBlock.PerformAutoResizeColumns(false, Infragistics.Win.UltraWinGrid.PerformAutoSizeType.AllRowsInBand, true); + + // if (((iMESUltraGrid.iMESUltraGridControl)sender).iMESUltraGrid.DisplayLayout.Bands.Count > 0) + // { + // for (int i = 0, loopTo = ((iMESUltraGrid.iMESUltraGridControl)sender).iMESUltraGrid.DisplayLayout.Bands[0].Columns.Count - 1; i <= loopTo; i++) + // { + // { + // var withBlock1 = withBlock.Bands[0].Columns[i]; + // if (withBlock1.DataType.Name == "DateTime") + // { + // withBlock1.Format = "yyyy/MM/dd HH:mm:ss"; + // } + // if (withBlock1.DataType.Name == "String") + // { + // withBlock1.CellAppearance.TextHAlign = Infragistics.Win.HAlign.Left; + // } + // if (withBlock1.DataType.Name == "Decimal") + // { + // withBlock1.Format = "0.######"; + // withBlock1.CellAppearance.TextHAlign = Infragistics.Win.HAlign.Right; + // } + // } + // } + // } + // } + + //} + + private string GetSubscriptionNextDate(DataRow drSub) + { + string GetSubscriptionNextDateRet = default(string); + + GetSubscriptionNextDateRet = ""; + + try + { + switch (drSub["RunFrequent"].ToString() ?? "") + { + case "OnlyOnce": // 執行一次 + { + GetSubscriptionNextDateRet = drSub["RunYear"].ToString() + "/" + drSub["RunMonth"].ToString() + "/" + drSub["RunDay"].ToString() + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + break; + } + + case "EveryDay": // 每日的 + { + DateTime datTemp; + if (DateTime.Now.Hour > Conversions.ToInteger(drSub["RunHour"])) // 小時超過隔天再執行 + { + datTemp = DateTime.Now.AddDays(1d); + GetSubscriptionNextDateRet = datTemp.Year + "/" + datTemp.Month + "/" + datTemp.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + } + + else if (DateTime.Now.Hour == Conversions.ToInteger(drSub["RunHour"]) && DateTime.Now.Minute >= Conversions.ToInteger(drSub["RunMin"])) // 分鐘超過隔天再執行 + { + datTemp = DateTime.Now.AddDays(1d); + GetSubscriptionNextDateRet = datTemp.Year + "/" + datTemp.Month + "/" + datTemp.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + } + + else // 當天執行 + { + GetSubscriptionNextDateRet = DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + + } + + break; + } + case "EveryWeek": // 每週的 + { + var intDayOfWeek = default(int); + var datTemp = default(DateTime); + switch (drSub["RunWeek"].ToString() ?? "") + { + case "Sunday": + { + intDayOfWeek = 0; + break; + } + case "Monday": + { + intDayOfWeek = 1; + break; + } + case "Tuesday": + { + intDayOfWeek = 2; + break; + } + case "Wednesday": + { + intDayOfWeek = 3; + break; + } + case "Thursday": + { + intDayOfWeek = 4; + break; + } + case "Friday": + { + intDayOfWeek = 5; + break; + } + case "Saturday": + { + intDayOfWeek = 6; + break; + } + } + + if ((int)DateTime.Now.DayOfWeek == intDayOfWeek) // 建立日期與下次執行日是同一天 + { + if (DateTime.Now.Hour > Conversions.ToInteger(drSub["RunHour"])) // 小時超過下週再執行 + { + datTemp = DateTime.Now.AddDays(7d); + } + else if (DateTime.Now.Hour == Conversions.ToInteger(drSub["RunHour"]) && DateTime.Now.Minute >= Conversions.ToInteger(drSub["RunMin"])) // 分鐘超過下週再執行 + { + datTemp = DateTime.Now.AddDays(7d); + } + else + { + datTemp = DateTime.Now; + } // 當天執行 + } + + else if ((int)DateTime.Now.DayOfWeek > intDayOfWeek) + { + datTemp = DateTime.Now.AddDays(intDayOfWeek + (7 - (int)DateTime.Now.DayOfWeek)); + } + else if ((int)DateTime.Now.DayOfWeek < intDayOfWeek) + { + datTemp = DateTime.Now.AddDays(intDayOfWeek - (int)DateTime.Now.DayOfWeek); + } + + GetSubscriptionNextDateRet = datTemp.Year + "/" + datTemp.Month + "/" + datTemp.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + break; + } + + case "EveryMonth": // 每月的 + { + var datTemp = default(DateTime); + bool blnEndDay = false; + string strRunDay; + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSub["RunDay"], "EndDay", false))) + { + strRunDay = DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.AddMonths(1).Day).Day.ToString(); + blnEndDay = true; + } + else + { + strRunDay = Conversions.ToString(drSub["RunDay"]); + } + if (DateTime.Now.Day == Conversions.ToDouble(strRunDay)) // 建立日期與下次執行日是同一天 + { + if (DateTime.Now.Hour > Conversions.ToInteger(drSub["RunHour"])) // 小時超過下月再執行 + { + datTemp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1); + if (!(datTemp.AddMonths(1).AddDays(-1).Day >= Conversions.ToInteger(strRunDay))) + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, datTemp.AddMonths(1).AddDays(-1).Day); + } + else + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, Conversions.ToInteger(strRunDay)); + } + } + else if (DateTime.Now.Hour == Conversions.ToInteger(drSub["RunHour"]) && DateTime.Now.Minute >= Conversions.ToInteger(drSub["RunMin"])) // 分鐘超過下月再執行 + { + datTemp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1); + if (!(datTemp.AddMonths(1).AddDays(-1).Day >= Conversions.ToInteger(strRunDay))) + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, datTemp.AddMonths(1).AddDays(-1).Day); + } + else + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, Conversions.ToInteger(strRunDay)); + } + } + else + { + datTemp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); + } // 當天執行 + } + else if (DateTime.Now.Day > Conversions.ToInteger(strRunDay)) // 下月再執行 + { + datTemp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1); + if (!(datTemp.AddMonths(1).AddDays(-1).Day >= Conversions.ToInteger(strRunDay))) + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, datTemp.AddMonths(1).AddDays(-1).Day); + } + else + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, Conversions.ToInteger(strRunDay)); + } + } + else if (DateTime.Now.Day < Conversions.ToInteger(strRunDay)) // 當月執行 + { + datTemp = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); + if (!(datTemp.AddMonths(1).AddDays(-1).Day >= Conversions.ToInteger(strRunDay))) + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, datTemp.AddMonths(1).AddDays(-1).Day); + } + else + { + datTemp = new DateTime(datTemp.Year, datTemp.Month, Conversions.ToInteger(strRunDay)); + } + } + + GetSubscriptionNextDateRet = datTemp.Year + "/" + datTemp.Month + "/" + datTemp.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + break; + } + + case "EveryYear": // 每年的 + { + var datTemp = default(DateTime); + if (DateTime.Now.Month == Conversions.ToInteger(drSub["RunMonth"]) && DateTime.Now.Day == Conversions.ToInteger(drSub["RunDay"])) // 建立日期與下次執行日是同一天 + { + if (DateTime.Now.Hour > Conversions.ToInteger(drSub["RunHour"])) // 小時超過明年再執行 + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])).AddYears(1); + } + else if (DateTime.Now.Hour == Conversions.ToInteger(drSub["RunHour"]) && DateTime.Now.Minute >= Conversions.ToInteger(drSub["RunMin"])) // 分鐘超過明年再執行 + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])).AddYears(1); + } + else + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])); + } // 當天執行 + } + else if (DateTime.Now.Month == Conversions.ToInteger(drSub["RunMonth"]) && DateTime.Now.Day > Conversions.ToInteger(drSub["RunDay"])) // 明年再執行 + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])).AddYears(1); + } + else if (DateTime.Now.Month == Conversions.ToInteger(drSub["RunMonth"]) && DateTime.Now.Day < Conversions.ToInteger(drSub["RunDay"])) + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])); + } + else if (DateTime.Now.Month > Conversions.ToInteger(drSub["RunMonth"])) // 明年再執行 + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])).AddYears(1); + } + else if (DateTime.Now.Month < Conversions.ToInteger(drSub["RunMonth"])) // 當年執行 + { + datTemp = new DateTime(DateTime.Now.Year, Conversions.ToInteger(drSub["RunMonth"]), Conversions.ToInteger(drSub["RunDay"])); + } + + GetSubscriptionNextDateRet = datTemp.Year + "/" + datTemp.Month + "/" + datTemp.Day + " " + drSub["RunHour"].ToString() + ":" + drSub["RunMin"].ToString() + ":00"; + break; + } + // ===2021/07/12 0090110: [拓緯] 描述語言報表無法設定每小時寄信 + case "EveryHour": + { + var datTemp = DateTime.Now; + if (DateTime.Now.Minute > Conversions.ToInteger(drSub["RunMin"].ToString())) // 分鐘超過小時再執行 + { + datTemp = DateTime.Now.AddHours(1d); + } + // === + GetSubscriptionNextDateRet = DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + " " + datTemp.Hour + ":" + drSub["RunMin"].ToString() + ":00"; + break; + } + + default: + { + break; + } + + } + } + + catch (Exception ex) + { + GetSubscriptionNextDateRet = ""; + } + + return GetSubscriptionNextDateRet; + + } + + # region MESChart + private byte[] DrawLineChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + + if (chartAdvenceSetting["YAxisLabeled0"] == "Yes") + withBlock.Scale = false; + + // .AxisLine.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting("YAxisThickness")) + if (chartAdvenceSetting["YAxisInterval"] == "") + { + } + else + withBlock.Interval = Convert.ToInt32(chartAdvenceSetting["YAxisInterval"]); + } + pchart.Axis_Y.Add(yAxis); + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + pchart.ToolTip.Formatter = "{c}"; + } + else + pchart.ToolTip.Show = false; + + List XAxisvalue = chartColumnSetting["XAxis"]; + List YAxisvalue = chartColumnSetting["YAxis"]; + + List SubYAxisvalue = null; + List Groupvalue = null; + if (chartColumnSetting.ContainsKey("SubYAxis")) + SubYAxisvalue = chartColumnSetting["SubYAxis"]; + if (chartColumnSetting.ContainsKey("GroupField")) + Groupvalue = chartColumnSetting["GroupField"]; + + DataTable dt = new DataTable(); + dt.Columns.Add(XAxisvalue[0]); + + if (chartColumnSetting.ContainsKey("SubYAxis")) + dt.Columns.Add(SubYAxisvalue[0]); + if (chartColumnSetting.ContainsKey("GroupField")) + dt.Columns.Add(Groupvalue[0]); + + foreach (var item in YAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Decimal")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + } + dt.Rows.Add(newRow); + } + + DataTable dtX = dt.DefaultView.ToTable(true, XAxisvalue[0]); + + List xColumns = new List(); + foreach (DataRow dr in dtX.Rows) + xColumns.Add(dr[XAxisvalue[0]].ToString()); + // mesChart.Axis_X.Add(New Axis()) + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.category; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + foreach (string item in xColumns) + xAxis.Data.Add(new iMESChart.Option.AxisData() { Value = item }); + } + pchart.Axis_X.Add(xAxis); + + ICollection colorValues = chartColorSetting.Values; + + + var cNumber = 0; + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + // line.Name = YAxisvalue(0) & " " & dr(Groupvalue(0)).ToString() + line.Name = dr[Groupvalue[0]].ToString(); + line.AxisIndex_Y = 0; + line.connectNulls = true; + + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // // pchart.ToolTip.AxisPointer.Type = [Option].AxisPointerType.line + // line.LabelLine.Show = true; + + line.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["YAxisThickness"]); + if (chartAdvenceSetting["ShowYAxisAverage"] == "Yes") + { + iMESChart.Option.MarkLineData mark = new iMESChart.Option.MarkLineData(); + mark.Start.Type = iMESChart.Option.MarkLinePointType.average; + mark.End.Type = iMESChart.Option.MarkLinePointType.average; + line.MarkLine.Data.Add(mark); + } + + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + line.Label.Show = true; + line.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + line.LineStyle.Color = Color.FromArgb(r, g, b); + line.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + cNumber = cNumber + 1; + + + line.MarkLine.LineStyle.Color = Color.FromArgb(0, 0, 255); + + + foreach (string item in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}'", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item)); // EQP1 指定x軸 的資料 + if (drSel2.Length > 0) + line.Data.Add(new iMESChart.Option.LineData() { Value = string.Format("{0:N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"]) + "}", Convert.ToDouble(drSel2[0][YAxisvalue[0]])) }); + else + line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + } + pchart.Charts.Add(line); + } + } + else + { + HashSet uniqueValues = new HashSet(); + List rowsToRemove = new List(); + + // 遍歷 dt 中的每一行 + foreach (DataRow row in dt.Rows) + { + object value = row[XAxisvalue[0]]; + if (!uniqueValues.Add(value)) + // 如果此值已經存在於 uniqueValues 中,則將該行添加到 rowsToRemove 中 + rowsToRemove.Add(row); + } + + // 從 dt 中刪除所有在 rowsToRemove 中的行 + foreach (DataRow row in rowsToRemove) + dt.Rows.Remove(row); + + foreach (var item in YAxisvalue) + { + + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + + // 新增Line Chart + line.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["YAxisThickness"]); + { + var withBlock = line; + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + line.Data.Add(new iMESChart.Option.LineData() { Value = Convert.ToDouble(drSel2[0][YAxisvalue[cNumber]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"]).ToString()) }); + else + line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + } + + withBlock.Name = item; // 設定名稱,供圖例控制(legend)讀取 + // .DataSource = dt '設定資料來源,如果設定Data則會依Data的資訊為主 + // .Field_Item = XAxisvalue(0) '設定類別資料的欄位 + // .Field_Value = item '設定數值資料的欄位 + withBlock.AxisIndex_Y = 0; + + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // line.LabelLine.Show = true; + + if (chartAdvenceSetting["ShowYAxisAverage"] == "Yes") + { + iMESChart.Option.MarkLineData mark = new iMESChart.Option.MarkLineData(); + mark.Start.Type = iMESChart.Option.MarkLinePointType.average; + mark.End.Type = iMESChart.Option.MarkLinePointType.average; + withBlock.MarkLine.Data.Add(mark); + } + + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.LineStyle.Color = Color.FromArgb(r, g, b); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + cNumber = cNumber + 1; + } + pchart.Charts.Add(line); + } + } + + if (chartColumnSetting.ContainsKey("SubYAxis")) + { + iMESChart.Option.Axis yAxis2 = new iMESChart.Option.Axis(); + { + var withBlock = yAxis2; + // .Name = "Hold Qty" + // .Data.Add(New [Option].AxisData With {.Value = "5"}) + withBlock.Position = iMESChart.Option.AxisPosition.top; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + withBlock.AxisLabel.Show = true; // 不是true則不序列化 + if (chartAdvenceSetting["YAxisLabeled0"] == "Yes") + withBlock.Scale = false; + withBlock.AxisLine.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["YAxisThickness"]); + if (chartAdvenceSetting["YAxisInterval"] == "") + { + } + else + withBlock.Interval = Convert.ToInt32(chartAdvenceSetting["YAxisInterval"]); + } + pchart.Axis_Y.Add(yAxis2); + + if (Convert.ToInt32(chartAdvenceSetting["SubChartType"]) == 0) + { + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + { + var withBlock = line; + line.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["YAxisThickness"]); + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + line.Data.Add(new iMESChart.Option.LineData() { Value = Convert.ToDecimal(drSel2[0][SubYAxisvalue[0]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"]).ToString()) }); + else + line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + } + + withBlock.Name = SubYAxisvalue[0]; // 設定名稱,供圖例控制(legend)讀取 + // .DataSource = dt '設定資料來源,如果設定Data則會依Data的資訊為主 + // .Field_Item = XAxisvalue(0) '設定類別資料的欄位 + // .Field_Value = SubYAxisvalue(0) '設定數值資料的欄位 + withBlock.AxisIndex_Y = 1; + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.LineStyle.Color = Color.FromArgb(r, g, b); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + pchart.Charts.Add(line); + } + + if (Convert.ToInt32(chartAdvenceSetting["SubChartType"]) == 1) + { + iMESChart.Option.BarChart bar = new iMESChart.Option.BarChart(); + { + var withBlock = bar; + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + bar.Data.Add(new iMESChart.Option.BarData() { Value = Convert.ToDouble(drSel2[0][SubYAxisvalue[0]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"])) }); + else + bar.Data.Add(new iMESChart.Option.BarData() { Value = "-" }); + } + withBlock.Name = SubYAxisvalue[0]; // 設定名稱,供圖例控制(legend)讀取 + // .DataSource = dt '設定資料來源,如果設定Data則會依Data的資訊為主 + // .Field_Item = XAxisvalue(0) '設定類別資料的欄位 + // .Field_Value = SubYAxisvalue(0) '設定數值資料的欄位 + withBlock.AxisIndex_Y = 1; + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + pchart.Charts.Add(bar); + } + } + + var titleName = chartParameter["TitleName"]; + + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawTimeLineChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + + if (chartAdvenceSetting["YAxisLabeled0"] == "Yes") + withBlock.Scale = false; + + if (chartAdvenceSetting["YAxisInterval"] == "") + { + } + else + withBlock.Interval = Convert.ToInt32(chartAdvenceSetting["YAxisInterval"]); + } + pchart.Axis_Y.Add(yAxis); + + // pchart.series.markline需加入 + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + pchart.ToolTip.Formatter = "{c}"; + } + else + pchart.ToolTip.Show = false; + + List XAxisvalue = chartColumnSetting["XAxis"]; + List YAxisvalue = chartColumnSetting["YAxis"]; + List Groupvalue = null; + + if (chartColumnSetting.ContainsKey("GroupField")) + Groupvalue = chartColumnSetting["GroupField"]; + + DataTable dt = new DataTable(); + dt.Columns.Add(XAxisvalue[0], Type.GetType("System.DateTime")); + + if (chartColumnSetting.ContainsKey("GroupField")) + dt.Columns.Add(Groupvalue[0]); + + foreach (var item in YAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Decimal")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + } + dt.Rows.Add(newRow); + } + + DataTable dtX = dt.DefaultView.ToTable(true, XAxisvalue[0]); + + List xColumns = new List(); + foreach (DataRow dr in dtX.Rows) + { + if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 0) + xColumns.Add(String.Format(Convert.ToString(dr[XAxisvalue[0]]), "yyyy/MM/dd")); + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 1) + xColumns.Add(String.Format(Convert.ToString(dr[XAxisvalue[0]]), "yyyy/MM/dd HH")); + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 2) + xColumns.Add(String.Format(Convert.ToString(dr[XAxisvalue[0]]), "yyyy/MM/dd HH:mm")); + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 3) + xColumns.Add(String.Format(Convert.ToString(dr[XAxisvalue[0]]), "yyyy/MM/dd HH:mm:ss")); + } + + List xColumns2 = new List(); + foreach (DataRow dr in dtX.Rows) + xColumns2.Add(Convert.ToDateTime(dr[XAxisvalue[0]].ToString())); + + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.time; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + + //foreach (string item in xColumns) + // xAxis.Data.Add(new iMESChart.Option.AxisData() { Value = item }); + } + pchart.Axis_X.Add(xAxis); + + ICollection colorValues = chartColorSetting.Values; + + var cNumber = 0; + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + line.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["TimelineThickness"]); + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + line.Label.Show = true; + line.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + // line.Name = YAxisvalue(0) & " " & dr(Groupvalue(0)).ToString() + line.Name = dr[Groupvalue[0]].ToString(); + line.AxisIndex_Y = 0; + line.connectNulls = true; + if (chartAdvenceSetting["ShowYAxisAverage"] == "Yes") + { + iMESChart.Option.MarkLineData mark = new iMESChart.Option.MarkLineData(); + mark.Start.Type = iMESChart.Option.MarkLinePointType.average; + mark.End.Type = iMESChart.Option.MarkLinePointType.average; + line.MarkLine.Data.Add(mark); + } + + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // line.LabelLine.Show = true; + + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + line.LineStyle.Color = Color.FromArgb(r, g, b); + line.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + cNumber = cNumber + 1; + + Dictionary dic = new Dictionary(); + foreach (DateTime item in xColumns2) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}'", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item)); // EQP1 指定x軸 的資料 + + if (drSel2.Length > 0) + //line.Data.Add(new iMESChart.Option.LineData() { Value = Convert.ToDouble(drSel2[0][YAxisvalue[0]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"])) }); + dic.Add(item, Convert.ToDouble(drSel2[0][YAxisvalue[0]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"]))); + else + //line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + dic.Add(item, "'"); + } + foreach (DateTime item in dic.Keys) + { + iMESChart.Option.LineData_Time lineData = new iMESChart.Option.LineData_Time(); + if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 0) + { + lineData.TimeFormat = "yyyy/MM/dd"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 1) + { + lineData.TimeFormat = "yyyy/MM/dd HH"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 2) + { + lineData.TimeFormat = "yyyy/MM/dd HH:mm"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 3) + { + lineData.TimeFormat = "yyyy/MM/dd HH:mm:ss"; + } + lineData.Value = dic[item].ToString(); + lineData.Time = item; + line.Data.Add(lineData); + } + pchart.Charts.Add(line); + } + } + else + { + HashSet uniqueValues = new HashSet(); + List rowsToRemove = new List(); + + // 遍歷 dt 中的每一行 + foreach (DataRow row in dt.Rows) + { + object value = row[XAxisvalue[0]]; + if (!uniqueValues.Add(value)) + // 如果此值已經存在於 uniqueValues 中,則將該行添加到 rowsToRemove 中 + rowsToRemove.Add(row); + } + + // 從 dt 中刪除所有在 rowsToRemove 中的行 + foreach (DataRow row in rowsToRemove) + dt.Rows.Remove(row); + foreach (var item in YAxisvalue) + { + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + // 新增Line Chart + + { + var withBlock = line; + if (chartAdvenceSetting["ShowYAxisAverage"] == "Yes") + { + iMESChart.Option.MarkLineData mark = new iMESChart.Option.MarkLineData(); + mark.Start.Type = iMESChart.Option.MarkLinePointType.average; + mark.End.Type = iMESChart.Option.MarkLinePointType.average; + withBlock.MarkLine.Data.Add(mark); + } + + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // line.LabelLine.Show = true; + + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + Dictionary dic = new Dictionary(); + foreach (DateTime item2 in xColumns2) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + //line.Data.Add(new iMESChart.Option.LineData() { Value = Convert.ToDouble(drSel2[0][YAxisvalue[cNumber]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"])) }); + dic.Add(item2, Convert.ToDouble(drSel2[0][YAxisvalue[cNumber]]).ToString("N" + Convert.ToInt32(chartAdvenceSetting["YAxisDecimalPoint"]))); + else + //line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + dic.Add(item2, "'"); + } + + withBlock.Name = item; // 設定名稱,供圖例控制(legend)讀取 + withBlock.LineStyle.Width = Convert.ToInt32(chartAdvenceSetting["TimelineThickness"]); + withBlock.AxisIndex_Y = 0; + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.LineStyle.Color = Color.FromArgb(r, g, b); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + cNumber = cNumber + 1; + + foreach (DateTime item3 in dic.Keys) + { + iMESChart.Option.LineData_Time lineData = new iMESChart.Option.LineData_Time(); + if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 0) + { + lineData.TimeFormat = "yyyy/MM/dd"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 1) + { + lineData.TimeFormat = "yyyy/MM/dd HH"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 2) + { + lineData.TimeFormat = "yyyy/MM/dd HH:mm"; + } + else if (Convert.ToInt32(chartAdvenceSetting["XAxisScale"]) == 3) + { + lineData.TimeFormat = "yyyy/MM/dd HH:mm:ss"; + } + lineData.Value = dic[item3].ToString(); + lineData.Time = item3; + line.Data.Add(lineData); + } + } + + pchart.Charts.Add(line); + } + } + + var titleName = chartParameter["TitleName"]; + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawBarChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, string chartType, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + pchart.Legend.Bottom = 20; + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + + if (chartAdvenceSetting["YAxisLabeled0"] == "Yes") + withBlock.Scale = false; + + if (chartAdvenceSetting["YAxisInterval"] == "") + { + } + else + withBlock.Interval = Convert.ToInt32(chartAdvenceSetting["YAxisInterval"]); + } + pchart.Axis_Y.Add(yAxis); + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + pchart.ToolTip.Formatter = "{c}"; + } + else + pchart.ToolTip.Show = false; + + List XAxisvalue = chartColumnSetting["XAxis"]; + List YAxisvalue = chartColumnSetting["YAxis"]; + + List SubYAxisvalue = null; + List Groupvalue = null; + if (chartColumnSetting.ContainsKey("SubYAxis")) + SubYAxisvalue = chartColumnSetting["SubYAxis"]; + if (chartColumnSetting.ContainsKey("GroupField")) + Groupvalue = chartColumnSetting["GroupField"]; + + DataTable dt = new DataTable(); + dt.Columns.Add(XAxisvalue[0]); + + if (chartColumnSetting.ContainsKey("SubYAxis")) + dt.Columns.Add(SubYAxisvalue[0]); + if (chartColumnSetting.ContainsKey("GroupField")) + dt.Columns.Add(Groupvalue[0]); + + foreach (var item in YAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Decimal")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + } + dt.Rows.Add(newRow); + } + + DataTable dtX = dt.DefaultView.ToTable(true, XAxisvalue[0]); + + List xColumns = new List(); + foreach (DataRow dr in dtX.Rows) + xColumns.Add(dr[XAxisvalue[0]].ToString()); + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.category; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + foreach (string item in xColumns) + xAxis.Data.Add(new iMESChart.Option.AxisData() { Value = item }); + } + pchart.Axis_X.Add(xAxis); + + ICollection colorValues = chartColorSetting.Values; + + var cNumber = 0; + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + + iMESChart.Option.BarChart bar = new iMESChart.Option.BarChart(); + // line.Name = YAxisvalue(0) & " " & dr(Groupvalue(0)).ToString() + bar.Name = dr[Groupvalue[0]].ToString(); + bar.AxisIndex_Y = 0; + + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // bar.LabelLine.Show = true; + + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + bar.Label.Show = true; + bar.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + if (Convert.ToInt32(chartType) == 3) + bar.Stack = "Stack"; + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + bar.ItemStyle.Color = Color.FromArgb(r, g, b); + } + + } + } + cNumber = cNumber + 1; + + // bar.MarkLine.LineStyle.Color = Color.FromArgb(0, 0, 255) + // bar.MarkLine.Data.Add(mark) + + foreach (string item in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}'", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item)); // EQP1 指定x軸 的資料 + + if (drSel2.Length > 0) + bar.Data.Add(new iMESChart.Option.BarData() { Value = drSel2[0][YAxisvalue[0]].ToString() }); + else + bar.Data.Add(new iMESChart.Option.BarData() { Value = "-" }); + } + pchart.Charts.Add(bar); + } + } + else + { + HashSet uniqueValues = new HashSet(); + List rowsToRemove = new List(); + + // 遍歷 dt 中的每一行 + foreach (DataRow row in dt.Rows) + { + object value = row[XAxisvalue[0]]; + if (!uniqueValues.Add(value)) + // 如果此值已經存在於 uniqueValues 中,則將該行添加到 rowsToRemove 中 + rowsToRemove.Add(row); + } + + // 從 dt 中刪除所有在 rowsToRemove 中的行 + foreach (DataRow row in rowsToRemove) + dt.Rows.Remove(row); + + foreach (var item in YAxisvalue) + { + iMESChart.Option.BarChart bar = new iMESChart.Option.BarChart(); + // 新增Line Chart + // mark.End.Name = "average line" + + { + var withBlock = bar; + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // bar.LabelLine.Show = true; + + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + bar.Data.Add(new iMESChart.Option.BarData() { Value = Convert.ToString(drSel2[0][YAxisvalue[cNumber]]) }); + else + bar.Data.Add(new iMESChart.Option.BarData() { Value = "-" }); + } + withBlock.Name = item; // 設定名稱,供圖例控制(legend)讀取 + withBlock.AxisIndex_Y = 0; + if (Convert.ToInt32(chartType) == 3) + withBlock.Stack = "Stack"; + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + // .LineStyle.Color = Color.FromArgb(r, g, b) + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + cNumber = cNumber + 1; + } + pchart.Charts.Add(bar); + } + } + + if (chartColumnSetting.ContainsKey("SubYAxis")) + { + iMESChart.Option.Axis yAxis2 = new iMESChart.Option.Axis(); + { + var withBlock = yAxis2; + // .Name = "Hold Qty" + // .Data.Add(New [Option].AxisData With {.Value = "5"}) + withBlock.Position = iMESChart.Option.AxisPosition.top; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + withBlock.AxisLabel.Show = true; // 不是true則不序列化 + if (chartAdvenceSetting["YAxisLabeled0"] == "Yes") + withBlock.Scale = false; + if (chartAdvenceSetting["YAxisInterval"] == "") + { + } + else + withBlock.Interval = Convert.ToInt32(chartAdvenceSetting["YAxisInterval"]); + } + pchart.Axis_Y.Add(yAxis2); + + if (Convert.ToInt32(chartAdvenceSetting["SubChartType"]) == 0) + { + iMESChart.Option.LineChart line = new iMESChart.Option.LineChart(); + { + var withBlock = line; + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + line.Data.Add(new iMESChart.Option.LineData() { Value = Convert.ToString(drSel2[0][SubYAxisvalue[0]]) }); + else + line.Data.Add(new iMESChart.Option.LineData() { Value = "-" }); + } + withBlock.Name = SubYAxisvalue[0]; // 設定名稱,供圖例控制(legend)讀取 + // .DataSource = dt '設定資料來源,如果設定Data則會依Data的資訊為主 + // .Field_Item = XAxisvalue(0) '設定類別資料的欄位 + withBlock.Field_Value = SubYAxisvalue[0]; // 設定數值資料的欄位 + withBlock.AxisIndex_Y = 1; + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.LineStyle.Color = Color.FromArgb(r, g, b); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + pchart.Charts.Add(line); + } + + if (Convert.ToInt32(chartAdvenceSetting["SubChartType"]) == 1) + { + iMESChart.Option.BarChart bar = new iMESChart.Option.BarChart(); + { + var withBlock = bar; + if (chartAdvenceSetting["ShowYAxisValues"] == "Yes") + { + withBlock.Label.Show = true; + withBlock.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}'", XAxisvalue[0], item2)); // 指定x軸 的資料 + if (drSel2.Length > 0) + bar.Data.Add(new iMESChart.Option.BarData() { Value = Convert.ToString(drSel2[0][SubYAxisvalue[0]]) }); + else + bar.Data.Add(new iMESChart.Option.BarData() { Value = "-" }); + } + withBlock.Name = SubYAxisvalue[0]; // 設定名稱,供圖例控制(legend)讀取 + withBlock.AxisIndex_Y = 1; + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + pchart.Charts.Add(bar); + } + } + + var titleName = chartParameter["TitleName"]; + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawPieChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + + // 建構iMESChart.MESChart控制項 + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + // If chartAdvenceSetting("ShowDataAxisLeaderLine") = "Yes" Then + // pchart.ToolTip.AxisPointer.Type = [Option].AxisPointerType.cross + // End If + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + pchart.ToolTip.Formatter = "{b}: {c} ({d}%)"; + } + else + pchart.ToolTip.Show = false; + + List DataAxisvalue = chartColumnSetting["DataAxis"]; + List Groupvalue = null; + if (chartColumnSetting.ContainsKey("GroupField")) + Groupvalue = chartColumnSetting["GroupField"]; + + DataTable dt = new DataTable(); + + if (chartColumnSetting.ContainsKey("GroupField")) + dt.Columns.Add(Groupvalue[0]); + + foreach (var item in DataAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Int32")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + } + dt.Rows.Add(newRow); + } + + if (Convert.ToInt32(chartAdvenceSetting["PieChartOrder"]) == 0) + dt.DefaultView.Sort = DataAxisvalue[0] + " DESC"; + else if (Convert.ToInt32(chartAdvenceSetting["PieChartOrder"]) == 1) + dt.DefaultView.Sort = Groupvalue[0] + " ASC"; + + ICollection colorValues = chartColorSetting.Values; + + var cNumber = 0; + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + iMESChart.Option.PieChart pie = new iMESChart.Option.PieChart(); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + + // pie.Name = dr(Groupvalue(0)).ToString() + + if (chartAdvenceSetting["ShowDataAxisLeaderLine"] == "Yes") + pie.LabelLine.Show = true; + else + pie.LabelLine.Show = false; + if (chartAdvenceSetting["ShowDataAxis"] == "Yes") + { + pie.Label.Show = true; + pie.Label.Position = iMESChart.Option.LabelPosition.outside; + pie.Label.Formatter = "{c}"; + } + else + pie.Label.Show = false; + + iMESChart.Option.ItemStyle pieColor = new iMESChart.Option.ItemStyle(); + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + // pie.ItemStyle.Color = Color.FromArgb(r, g, b) + pieColor.Color = Color.FromArgb(r, g, b); + } + } + } + + cNumber = cNumber + 1; + foreach (DataRow dr2 in drSel) + pie.Data.Add(new iMESChart.Option.PieData() { Value = dr2[DataAxisvalue[0]].ToString(), Name = dr[Groupvalue[0]].ToString(), ItemStyle = pieColor }); + pie.AvoidLabelOverlap = true; + + if (chartAdvenceSetting["ShowSectorStyle"] == "Yes") + pie.RoseType = iMESChart.Option.RoseType.radius; + pie.RadiusOuter = Convert.ToInt32(chartAdvenceSetting["ChartSize"]); + } + pchart.Charts.Add(pie); + } + else + { + } + + var titleName = chartParameter["TitleName"]; + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawScatterChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + } + pchart.Axis_Y.Add(yAxis); + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + pchart.ToolTip.Formatter = "{c}"; + } + + List XAxisvalue = chartColumnSetting["XAxis"]; + List YAxisvalue = chartColumnSetting["YAxis"]; + + List MarkFieldvalue = null; + List Groupvalue = null; + + DataTable dt = new DataTable(); + dt.Columns.Add(XAxisvalue[0]); + + if (chartColumnSetting.ContainsKey("MarkField")) + { + MarkFieldvalue = chartColumnSetting["MarkField"]; + dt.Columns.Add(MarkFieldvalue[0]); + + } + if (chartColumnSetting.ContainsKey("GroupField")) + { + Groupvalue = chartColumnSetting["GroupField"]; + dt.Columns.Add(Groupvalue[0]); + } + + foreach (var item in YAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Decimal")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + + } + dt.Rows.Add(newRow); + } + + DataTable dtX = dt.DefaultView.ToTable(false, XAxisvalue[0]); + + List xColumns = new List(); + foreach (DataRow dr in dtX.Rows) + xColumns.Add(dr[XAxisvalue[0]].ToString()); + + DataTable dtY = dt.DefaultView.ToTable(false, YAxisvalue[0]); + + List yColumns = new List(); + foreach (DataRow dr in dtY.Rows) + yColumns.Add(dr[YAxisvalue[0]].ToString()); + + + // mesChart.Axis_X.Add(New Axis()) + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + foreach (string item in xColumns) + { + } + } + pchart.Axis_X.Add(xAxis); + + ICollection colorValues = chartColorSetting.Values; + + + var cNumber = 0; + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + if (chartColumnSetting.ContainsKey("MarkField")) + { + // Dim drSel() As DataRow = dt.Select(String.Format("{0}='{1}' And NOT({2} IS NULL)", Groupvalue(0), dr(Groupvalue(0)).ToString(), MarkFieldvalue(0))) + // Dim drSel2() As DataRow = dt.Select(String.Format("{0}='{1}' And ({2} IS NULL)", Groupvalue(0), dr(Groupvalue(0)).ToString(), MarkFieldvalue(0))) + + + iMESChart.Option.ScatterChart scatter = new iMESChart.Option.ScatterChart(); + iMESChart.Option.EffectScatterChart escatter = new iMESChart.Option.EffectScatterChart(); + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + //{ + // scatter.LabelLine.Show = true; + // escatter.LabelLine.Show = true; + //} + // line.Name = YAxisvalue(0) & " " & dr(Groupvalue(0)).ToString() + scatter.Name = dr[Groupvalue[0]].ToString(); + scatter.AxisIndex_Y = 0; + scatter.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + escatter.Name = dr[Groupvalue[0]].ToString(); + escatter.AxisIndex_Y = 0; + escatter.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + + if (chartAdvenceSetting["ShowDataValue"] == "Yes") + { + scatter.Label.Show = true; + scatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + escatter.Label.Show = true; + escatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + // pie.ItemStyle.Color = Color.FromArgb(r, g, b) + scatter.ItemStyle.Color = Color.FromArgb(r, g, b); + escatter.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + + } + cNumber = cNumber + 1; + + foreach (string item in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}' And ({4} IS NULL)", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item, MarkFieldvalue[0])); // EQP1 指定x軸 的資料 + DataRow[] drSel3 = dt.Select(string.Format("{0}='{1}' And {2}='{3}' And NOT({4} IS NULL)", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item, MarkFieldvalue[0])); + + if (drSel2.Length > 0) + { + iMESChart.Option.ScatterData scaNum = new iMESChart.Option.ScatterData(); + // scaNum.Value = New PointF(3, 2) + scaNum.Value = new PointF(float.Parse(Convert.ToString(drSel2[0][YAxisvalue[0]])), float.Parse(item)); + scatter.Data.Add(scaNum); + } + + if (drSel3.Length > 0) + { + iMESChart.Option.EffectScatterData scaNum2 = new iMESChart.Option.EffectScatterData(); + // scaNum.Value = New PointF(3, 2) + scaNum2.Value = new PointF(float.Parse(Convert.ToString(drSel3[0][YAxisvalue[0]])), float.Parse(item)); + escatter.Data.Add(scaNum2); + } + } + pchart.Charts.Add(scatter); + pchart.Charts.Add(escatter); + } + else + { + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + + iMESChart.Option.ScatterChart scatter = new iMESChart.Option.ScatterChart(); + // line.Name = YAxisvalue(0) & " " & dr(Groupvalue(0)).ToString() + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // scatter.LabelLine.Show = true; + scatter.Name = dr[Groupvalue[0]].ToString(); + scatter.AxisIndex_Y = 0; + scatter.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + + if (chartAdvenceSetting["ShowDataValue"] == "Yes") + { + scatter.Label.Show = true; + scatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + else + { + } + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + // pie.ItemStyle.Color = Color.FromArgb(r, g, b) + scatter.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + } + cNumber = cNumber + 1; + + foreach (string item in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}'", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item)); // EQP1 指定x軸 的資料 + + if (drSel2.Length > 0) + { + iMESChart.Option.ScatterData scaNum = new iMESChart.Option.ScatterData(); + // scaNum.Value = New PointF(3, 2) + scaNum.Value = new PointF(float.Parse(Convert.ToString(drSel2[0][YAxisvalue[0]])), float.Parse(item)); + scatter.Data.Add(scaNum); + } + else + { + } + } + pchart.Charts.Add(scatter); + } + } + } + else + foreach (var item in YAxisvalue) + { + if (chartColumnSetting.ContainsKey("MarkField")) + { + iMESChart.Option.ScatterChart scatter = new iMESChart.Option.ScatterChart(); + iMESChart.Option.EffectScatterChart escatter = new iMESChart.Option.EffectScatterChart(); + if (chartAdvenceSetting["ShowDataValue"] == "Yes") + { + scatter.Label.Show = true; + scatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + escatter.Label.Show = true; + escatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + //{ + // scatter.LabelLine.Show = true; + // escatter.LabelLine.Show = true; + //} + var scaCount = 0; + foreach (string item2 in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}={1} And {2}={3} And ({4} IS NULL)", YAxisvalue[0], Convert.ToDouble(yColumns[scaCount]), XAxisvalue[0], item2, MarkFieldvalue[0])); // EQP1 指定x軸 的資料 + DataRow[] drSel3 = dt.Select(string.Format("{0}={1} And {2}={3} And NOT({4} IS NULL)", YAxisvalue[0], Convert.ToDouble(yColumns[scaCount]), XAxisvalue[0], item2, MarkFieldvalue[0])); // EQP1 指定x軸 的資料 + if (drSel2.Length > 0) + { + iMESChart.Option.ScatterData scaNum = new iMESChart.Option.ScatterData(); + scaNum.Value = new PointF(float.Parse(item2), float.Parse(yColumns[scaCount])); + scatter.Data.Add(scaNum); + scatter.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + scaCount = scaCount + 1; + } + else if (drSel3.Length > 0) + { + iMESChart.Option.EffectScatterData escaNum = new iMESChart.Option.EffectScatterData(); + escaNum.Value = new PointF(float.Parse(item2), float.Parse(yColumns[scaCount])); + escatter.Data.Add(escaNum); + escatter.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + scaCount = scaCount + 1; + } + } + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + scatter.ItemStyle.Color = Color.FromArgb(r, g, b); + escatter.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + cNumber = cNumber + 1; + + pchart.Charts.Add(scatter); + pchart.Charts.Add(escatter); + } + else + { + iMESChart.Option.ScatterChart scatter = new iMESChart.Option.ScatterChart(); + // Dim scatter As New iMESChart.Option.chart + { + var withBlock = scatter; + var scaCount = 0; + if (chartAdvenceSetting["ShowDataValue"] == "Yes") + { + scatter.Label.Show = true; + scatter.Label.Position = iMESChart.Option.LabelPosition_V2.top; + } + //if (chartAdvenceSetting["ShowYAxisLeaderLine"] == "Yes") + // scatter.LabelLine.Show = true; + foreach (string item2 in xColumns) + { + iMESChart.Option.ScatterData scaNum = new iMESChart.Option.ScatterData(); + scaNum.Value = new PointF(float.Parse(item2), float.Parse(yColumns[scaCount])); + withBlock.Data.Add(scaNum); + withBlock.SymbolSize = new SizeF(Convert.ToInt32(chartAdvenceSetting["DataPointSize"]), Convert.ToInt32(chartAdvenceSetting["DataPointSize"])); + scaCount = scaCount + 1; + } + withBlock.AxisIndex_Y = 0; + + + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.ItemStyle.Color = Color.FromArgb(r, g, b); + } + } + cNumber = cNumber + 1; + } + pchart.Charts.Add(scatter); + } + } + + var titleName = chartParameter["TitleName"]; + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawBoxplotChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + iMESChart.Option.Title title2 = new iMESChart.Option.Title(); + title2.Text = @"upper: Q3 + 1.5 * IQR \nlower: Q1 - 1.5 * IQR"; + title2.Left = 10; + title2.Bottom = 5; + title2.BorderWidth = 1; + title2.TextStyle.FontSize = 12; + title2.TextStyle.LineHeight = 16; + title2.TextStyle.FontWeight = 200; + + title2.Show = true; + + pchart.Title.MultiTitle.Add(title2); + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + } + + + if (chartAdvenceSetting["ShowDataPoint"] == "Yes") + { + pchart.ToolTip.Show = true; + pchart.ToolTip.AxisPointer.Type = iMESChart.Option.AxisPointerType.line; + pchart.ToolTip.Trigger = iMESChart.Option.ToolTipTrigger.item; + } + else + pchart.ToolTip.Show = false; + + List XAxisvalue = chartColumnSetting["XAxis"]; + List YAxisvalue = chartColumnSetting["YAxis"]; + List Groupvalue = null; + if (chartColumnSetting.ContainsKey("GroupField")) + Groupvalue = chartColumnSetting["GroupField"]; + + DataTable dt = new DataTable(); + dt.Columns.Add(XAxisvalue[0]); + + if (chartColumnSetting.ContainsKey("GroupField")) + dt.Columns.Add(Groupvalue[0]); + + foreach (var item in YAxisvalue) + dt.Columns.Add(item, Type.GetType("System.Decimal")); + + foreach (DataRow rowA in dtResultSave.Rows) + { + DataRow newRow = dt.NewRow(); + foreach (DataColumn columnA in dtResultSave.Columns) + { + if (dt.Columns.Contains(columnA.ColumnName)) + newRow[columnA.ColumnName] = rowA[columnA.ColumnName]; + } + dt.Rows.Add(newRow); + } + + Dictionary>> dict2 = new Dictionary>>(); + for (int i = 0; i <= dt.Rows.Count - 1; i++) + { + DataRow row = dt.Rows[i]; + string xValue = row[XAxisvalue[0]].ToString(); + + for (int yIndex = 0; yIndex <= YAxisvalue.Count - 1; yIndex++) + { + string yValue = YAxisvalue[yIndex]; + if (!dict2.ContainsKey(yValue)) + dict2.Add(yValue, new Dictionary>()); + + if (!dict2[yValue].ContainsKey(xValue)) + dict2[yValue].Add(xValue, new List()); + + dict2[yValue][xValue].Add(Convert.ToDecimal(row[yValue])); + } + } + + DataTable dtX = dt.DefaultView.ToTable(true, XAxisvalue[0]); + + List xColumns = new List(); + foreach (DataRow dr in dtX.Rows) + xColumns.Add(dr[XAxisvalue[0]].ToString()); + // mesChart.Axis_X.Add(New Axis()) + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.category; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + foreach (string item in xColumns) + xAxis.Data.Add(new iMESChart.Option.AxisData() { Value = item }); + } + pchart.Axis_X.Add(xAxis); + + ICollection colorValues = chartColorSetting.Values; + + var cNumber = 0; + + Dictionary dic = new Dictionary(); + // dic("serialname_dataindex") = New BoxValue() + + var seriesIndex = 0; + double minNum = 0; + // Dim scatter As New iMESChart.Option.ScatterChart + if (chartColumnSetting.ContainsKey("GroupField")) + { + DataTable dtTmp = dt.DefaultView.ToTable(true, Groupvalue[0]); + foreach (DataRow dr in dtTmp.Rows) // EQP1 , EQP2 + { + var dataIndex = 0; + iMESChart.Option.BoxplotChart boxplot = new iMESChart.Option.BoxplotChart(); + DataRow[] drSel = dt.Select(string.Format("{0}='{1}'", Groupvalue[0], dr[Groupvalue[0]].ToString())); // EQP1所有資料 + foreach (string item in xColumns) + { + DataRow[] drSel2 = dt.Select(string.Format("{0}='{1}' And {2}='{3}'", Groupvalue[0], dr[Groupvalue[0]].ToString(), XAxisvalue[0], item)); // EQP1 指定x軸 的資料 + if (drSel2.Length > 0) + { + List GroupdecimalList = new List(); + foreach (DataRow row in drSel2) + GroupdecimalList.Add(Convert.ToDecimal(row[YAxisvalue[0]])); + { + var withBlock = boxplot; + withBlock.Name = dr[Groupvalue[0]].ToString(); // 設定名稱,供圖例控制(legend)讀取 + withBlock.AxisIndex_Y = 0; + + iMESChart.Option.BoxplotData boxNum = new iMESChart.Option.BoxplotData(); + boxNum.Max = Convert.ToDouble(GroupdecimalList.Max()); + boxNum.Min = Convert.ToDouble(GroupdecimalList.Min()); + boxNum.Q2 = Convert.ToDouble(Median(GroupdecimalList)); + boxNum.Q3 = Convert.ToDouble(Percentile(GroupdecimalList, 75)); + boxNum.Q1 = Convert.ToDouble(Percentile(GroupdecimalList, 25)); + withBlock.Data.Add(boxNum); + + BoxValue itemBox = new BoxValue(); + itemBox.Max = Convert.ToDouble(GroupdecimalList.Max()); + itemBox.Min = Convert.ToDouble(GroupdecimalList.Min()); + itemBox.Q2 = Convert.ToDouble(Median(GroupdecimalList)); + itemBox.Q3 = Convert.ToDouble(Percentile(GroupdecimalList, 75)); + itemBox.Q1 = Convert.ToDouble(Percentile(GroupdecimalList, 25)); + + if (minNum > itemBox.Min) + minNum = itemBox.Min; + + List outMaxList = new List(); + List outMinList = new List(); + + + foreach (var outNumber in GroupdecimalList) + { + if (Convert.ToDouble(outNumber) > Convert.ToDouble(Percentile(GroupdecimalList, 75)) + 1.5 * Convert.ToDouble((Percentile(GroupdecimalList, 75) - Percentile(GroupdecimalList, 25)))) + outMaxList.Add(outNumber); + else if (Convert.ToDouble(outNumber) < Convert.ToDouble(Percentile(GroupdecimalList, 25)) - 1.5 * Convert.ToDouble((Percentile(GroupdecimalList, 75) - Percentile(GroupdecimalList, 25)))) + { + outMinList.Add(outNumber); + if (minNum > Convert.ToDouble(outNumber)) + minNum = Convert.ToDouble(outNumber); + } + } + + itemBox.OutMax = outMaxList; + itemBox.OutMin = outMinList; + + dic["B" + dataIndex + "_" + seriesIndex] = itemBox; + + if (chartColorSetting.Count > 0) + { + string colorStr; + if (chartColorSetting.ContainsKey(dr[Groupvalue[0]].ToString())) + { + colorStr = chartColorSetting[dr[Groupvalue[0]].ToString()]; + if (colorStr != "") + { + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + // pie.ItemStyle.Color = Color.FromArgb(r, g, b) + withBlock.ItemStyle.BorderColor = Color.FromArgb(r, g, b); + } + } + } + + dataIndex = dataIndex + 1; + cNumber = cNumber + 1; + } + } + else + { + iMESChart.Option.BoxplotData boxNum = new iMESChart.Option.BoxplotData(); + boxNum.Max = defDouble; + boxNum.Min = defDouble; + boxNum.Q2 = defDouble; + boxNum.Q3 = defDouble; + boxNum.Q1 = defDouble; + boxplot.Data.Add(boxNum); + + dataIndex = dataIndex + 1; + } + } + pchart.Charts.Add(boxplot); + seriesIndex = seriesIndex + 1; + } + yAxis.Min = minNum - 2; + } + else + foreach (var item in YAxisvalue) // YAxisvalue + { + var dataIndex = 0; + var i = 0; + iMESChart.Option.BoxplotChart boxplot = new iMESChart.Option.BoxplotChart(); + foreach (string itemx in xColumns) // YAxisvalue + { + List yValues = dict2[item][itemx]; + { + var withBlock = boxplot; + withBlock.Name = item; // 設定名稱,供圖例控制(legend)讀取 + withBlock.AxisIndex_Y = 0; + + iMESChart.Option.BoxplotData boxNum = new iMESChart.Option.BoxplotData(); + boxNum.Max = Convert.ToDouble(yValues.Max()); + boxNum.Min = Convert.ToDouble(yValues.Min()); + boxNum.Q2 = Convert.ToDouble(Median(yValues)); + boxNum.Q3 = Convert.ToDouble(Percentile(yValues, 75)); + boxNum.Q1 = Convert.ToDouble(Percentile(yValues, 25)); + withBlock.Data.Add(boxNum); + + BoxValue itemBox = new BoxValue(); + itemBox.Max = Convert.ToDouble(yValues.Max()); + itemBox.Min = Convert.ToDouble(yValues.Min()); + itemBox.Q2 = Convert.ToDouble(Median(yValues)); + itemBox.Q3 = Convert.ToDouble(Percentile(yValues, 75)); + itemBox.Q1 = Convert.ToDouble(Percentile(yValues, 25)); + + List outMaxList = new List(); + List outMinList = new List(); + + foreach (var outNumber in yValues) + { + if (Convert.ToDouble(outNumber) > Convert.ToDouble(Percentile(yValues, 75)) + 1.5 * Convert.ToDouble((Percentile(yValues, 75) - Percentile(yValues, 25)))) + outMaxList.Add(outNumber); + else if (Convert.ToDouble(outNumber) < Convert.ToDouble(Percentile(yValues, 25)) - 1.5 * Convert.ToDouble((Percentile(yValues, 75) - Percentile(yValues, 25)))) + outMinList.Add(outNumber); + } + + itemBox.OutMax = outMaxList; + itemBox.OutMin = outMinList; + + dic["B" + dataIndex + "_" + seriesIndex] = itemBox; + + if (chartColorSetting.Count > 0) + { + if (!string.IsNullOrEmpty(colorValues.ToList()[cNumber])) + { + string colorStr = colorValues.ToList()[cNumber]; + string[] colorRGB = colorStr.Split(','); + int r = int.Parse(colorRGB[0]); + int g = int.Parse(colorRGB[1]); + int b = int.Parse(colorRGB[2]); + withBlock.ItemStyle.BorderColor = Color.FromArgb(r, g, b); + } + } + dataIndex = dataIndex + 1; + } + } + pchart.Charts.Add(boxplot); + cNumber = cNumber + 1; + seriesIndex = seriesIndex + 1; + } + + string js = "var par={"; + foreach (string item in dic.Keys) + js += $"{item}:{{max:{dic[item].Max},min:{dic[item].Min},q1:{dic[item].Q1},q2:{dic[item].Q2},q3:{dic[item].Q3},outmax:[{string.Join(",", dic[item].OutMax)}],outmin:[{string.Join(",", dic[item].OutMin)}]}},"; + js = js.TrimEnd(','); + js += "};"; + + pchart.Js = js; + pchart.ToolTip.Formatter = "function(obj) { var result = ''; var key = 'B' + obj.dataIndex + '_' + obj.seriesIndex; if (par[key] != undefined) { var item = par[key]; result += 'Max: ' + item.max + ', '; result += 'Min: ' + item.min + ', '; result += 'Q1: ' + item.q1 + ', '; result += 'Q2: ' + item.q2 + ', '; result += 'Q3: ' + item.q3 + ', '; result += 'U_Outliers: '; for (var i = 0; i < item.outmax.length; i++) { result += item.outmax[i] + ' '; } result += ', '; result += 'L_Outliers: '; for (var i = 0; i < item.outmin.length; i++) { result += item.outmin[i] + ' '; } } return result; }"; + // pchart.ToolTip.Formatter = "function(obj){ var result = ''; var key = 'B'+obj.dataIndex + '_' + obj.seriesIndex; if (par[key] != undefined) { var item = par[key]; result += 'MAX: ' + item.max + ', '; result += 'MIN: ' + item.min + ', '; result += 'Q1: ' + item.q1 + ', '; result += 'Q2: ' + item.q2 + ', '; result += 'Q3: ' + item.q3 + ', ';} return result; }" + + pchart.Axis_Y.Add(yAxis); + + var titleName = chartParameter["TitleName"]; + + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawWrongChart(Dictionary> chartColumnSetting, Dictionary chartParameter, Dictionary chartAdvenceSetting, Dictionary chartColorSetting, string chartID, DataTable dtResultSave, DataTable dtChartSettingResult) + { + iMESChart.MESChart pchart = new iMESChart.MESChart(); + + // 建構iMESChart.MESChart控制項 + + // 開啟圖例控制功能 + pchart.Legend.Show = true; + pchart.Title.Show = true; + pchart.Legend.Type = iMESChart.Option.LegendType.scroll; + + // 標題名稱 + pchart.Title.Text = chartParameter["TitleName"]; + // 標題字體大小 + pchart.Title.TextStyle.FontSize = Convert.ToInt32(chartParameter["TitleFontSize"]); + // 標題位置 + if (Convert.ToInt32(chartParameter["TitlePosition"]) == 0) + pchart.Title.LeftType = iMESChart.Option.LeftType.left; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 1) + pchart.Title.LeftType = iMESChart.Option.LeftType.center; + else if (Convert.ToInt32(chartParameter["TitlePosition"]) == 2) + pchart.Title.LeftType = iMESChart.Option.LeftType.right; + + // 圖例大小 + pchart.Legend.ItemWidth = Convert.ToInt32(chartParameter["LegendSize"]); + // 圖例方向 + if (Convert.ToInt32(chartParameter["LegendDirection"]) == 0) + pchart.Legend.Orient = iMESChart.Option.Orient.horizontal; + else + pchart.Legend.Orient = iMESChart.Option.Orient.vertical; + + // 圖例位置 + if (Convert.ToInt32(chartParameter["LegendPosition"]) == 0) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.left; + } + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 1) + pchart.Legend.TopType = iMESChart.Option.TopType.top; + else if (Convert.ToInt32(chartParameter["LegendPosition"]) == 2) + { + pchart.Legend.TopType = iMESChart.Option.TopType.top; + pchart.Legend.LeftType = iMESChart.Option.LeftType.right; + } + + // Y軸定義 + iMESChart.Option.Axis yAxis = new iMESChart.Option.Axis(); + { + var withBlock = yAxis; + withBlock.Type = iMESChart.Option.AxisType.value; + withBlock.AlignTicks = true; + } + pchart.Axis_Y.Add(yAxis); + + // X軸定義 + iMESChart.Option.Axis xAxis = new iMESChart.Option.Axis(); + { + var withBlock = xAxis; + withBlock.Type = iMESChart.Option.AxisType.category; + withBlock.AxisTick.AlignWithLabel = true; + withBlock.AxisLabel.Show = true; + withBlock.AxisLabel.FontSize = 9; + withBlock.AxisLabel.Margin = 13; + } + pchart.Axis_X.Add(xAxis); + + + var titleName = chartParameter["TitleName"]; + return DrawRefresh(pchart, chartID, titleName); + } + + private byte[] DrawChart(DataTable dtResultSave, DataTable dtChartSettingResult) + { + List> fileList = new List>(); + byte[] CompressedData = null; + + if (dtChartSettingResult != null) + { + foreach (DataRow row in dtChartSettingResult.Rows) + { + byte[] Databyte = null; + Dictionary> chartColumnSetting = new Dictionary>(); + Dictionary chartParameter = new Dictionary(); + Dictionary chartAdvenceSetting = new Dictionary(); + Dictionary chartColorSetting = new Dictionary(); + + string chartType = row["CHARTTYPE"].ToString(); + string configDetail = row["CONFIGDETAIL"].ToString(); + string chartID = row["CHARTID"].ToString(); + + XmlDocument xDoc = new XmlDocument(); + xDoc.LoadXml(configDetail); + + foreach (XmlNode columnSettingNode in xDoc.SelectNodes("/imes_echart/ChartColumnSetting/item")) + { + string key = columnSettingNode.Attributes["name"].Value; + string value = columnSettingNode.Attributes["value"].Value; + if (chartColumnSetting.ContainsKey(key)) + chartColumnSetting[key].Add(value); + else + chartColumnSetting[key] = new List() { value }; + } + + foreach (XmlNode parameterNode in xDoc.SelectNodes("/imes_echart/ChartParameter/item")) + { + chartParameter.Add(parameterNode.Attributes["name"].Value, parameterNode.Attributes["value"].Value); + } + string titleName = chartParameter["TitleName"]; + + foreach (XmlNode advenceSettingNode in xDoc.SelectNodes("/imes_echart/ChartAdvenceSetting/item")) + { + chartAdvenceSetting.Add(advenceSettingNode.Attributes["name"].Value, advenceSettingNode.Attributes["value"].Value); + } + + foreach (XmlNode colorSettingNode in xDoc.SelectNodes("/imes_echart/ChartAdvenceSetting/colorsetting/yaxis/item")) + { + chartColorSetting.Add(colorSettingNode.Attributes["name"].Value, colorSettingNode.Attributes["value"].Value); + } + + foreach (XmlNode colorSettingNode in xDoc.SelectNodes("/imes_echart/ChartAdvenceSetting/colorsetting/group/item")) + { + chartColorSetting.Add(colorSettingNode.Attributes["name"].Value, colorSettingNode.Attributes["value"].Value); + } + + foreach (XmlNode colorSettingNode in xDoc.SelectNodes("/imes_echart/ChartAdvenceSetting/colorsetting/subyaxis/item")) + { + chartColorSetting.Add(colorSettingNode.Attributes["name"].Value, colorSettingNode.Attributes["value"].Value); + } + + // 將每一個欄位名稱轉換為小寫,以便進行比較 + List columnNames = dtResultSave.Columns.Cast().Select(x => x.ColumnName.ToLower()).ToList(); + + foreach (string settingKey in chartColumnSetting.Keys) + { + if (new List { "XAxis", "YAxis" }.Contains(settingKey)) + { + foreach (string columnName in chartColumnSetting[settingKey]) + { + string lowerColumnName = columnName.ToLower(); + if (!columnNames.Contains(lowerColumnName)) + { + Databyte = DrawWrongChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + //return; + } + } + } + else if (new List { "DataAxis" }.Contains(settingKey)) + { + foreach (string columnName in chartColumnSetting[settingKey]) + { + // 將查詢欄位名稱轉換為小寫,以便進行比較 + string lowerColumnName = columnName.ToLower(); + // 檢查是否存在該欄位名稱 + if (!columnNames.Contains(lowerColumnName)) + { + + Databyte = DrawWrongChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + //return; + } + } + } + } + + + if (Convert.ToInt32(chartType) == 0) + Databyte = DrawLineChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 1) + Databyte = DrawTimeLineChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 2) + Databyte = DrawBarChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, chartType, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 3) + Databyte = DrawBarChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, chartType, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 4) + Databyte = DrawPieChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 5) + Databyte = DrawScatterChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + + if (Convert.ToInt32(chartType) == 6) + Databyte = DrawBoxplotChart(chartColumnSetting, chartParameter, chartAdvenceSetting, chartColorSetting, chartID, dtResultSave, dtChartSettingResult); + + fileList.Add(new Tuple(titleName + ".Html", Databyte)); + } + } + + try + { + using (ZipFile zip = new ZipFile(Encoding.UTF8)) + { + foreach (var file in fileList) + { + zip.AddEntry(file.Item1, file.Item2); + } + using (MemoryStream ms = new MemoryStream()) + { + zip.Save(ms); + CompressedData = ms.ToArray(); + } + + } + } + catch (Exception) + { + throw; + } + + return CompressedData; + + } + + private byte[] DrawRefresh(iMESChart.MESChart pchart, string chartID, string titleName) + { + + pchart.ChartRefresh(); + byte[] testbyte = pchart.GetHtmlFileBytes(); + + return testbyte; + } + + // 計算中位數 + private decimal Median(List lst) + { + var sortedList = lst.OrderBy(d => d).ToList(); + var count = sortedList.Count(); + + if (count % 2 == 0) + { + var middle = count / 2; + return (sortedList[middle - 1] + sortedList[middle]) / 2; + } + else + return sortedList[count / 2]; + } + + // 計算四分位數 + private decimal Percentile(List lst, int quartile) + { + var sortedList = lst.OrderBy(d => d).ToList(); + int n = sortedList.Count(); + int k = (int)Math.Ceiling(n / 4.0); + if (quartile == 25) + { + decimal d = (quartile * (n - 1) / 100.0m) - (k - 1); + return sortedList[k - 1] + d * (sortedList[k] - sortedList[k - 1]); + } + else if (quartile == 75) + { + if (Math.Ceiling(n * 3 / 4.0) >= n) + { + k = Convert.ToInt32(Math.Ceiling(n * 3 / 4.0) - 1); + } + else + { + k = (int)Math.Ceiling(n * 3 / 4.0); + } + decimal d = (quartile * (n - 1) / 100.0m) - (k - 1); + return sortedList[k - 1] + d * (sortedList[k] - sortedList[k - 1]); + } + else + { + return 0; + } + + } + + private class BoxValue + { + public double Max { get; set; } + public double Min { get; set; } + public double Q1 { get; set; } + public double Q2 { get; set; } + public double Q3 { get; set; } + public List OutMax { get; set; } + public List OutMin { get; set; } + } + private DataTable LoadReportChartSetting(String ReportID) + { + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema, tblRPTMesChartSetting; + StringReader tmpStringReader; + DataSet dsDefine = new DataSet(); + DataTable dtChartSettingResult = new DataTable(); + + // 先判斷是否dataset中已有datatable,若有,需先remove否則會有錯誤 + //if (!IsNothing(dsDefine.Tables(tblRPTMesChartSetting))) + // dsDefine.Tables.Remove(tblRPTMesChartSetting); + + // 組InXml的字串 + string gUserNo = "AUTORUN"; + string SendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, gUserNo, SendTime); + + + strParameter = CombineXMLParameter("reportid", "ReportId", "String", ReportID, ""); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // 2016 YF, OutXml = wsRPT.LoadReportBasis(InXml) + OutXml = modAutoRunLibrary.InvokeSrv("wsRPT.LoadReportChartSetting", InXml); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + tblRPTMesChartSetting = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadreportchartsetting").Item(0).SelectNodes("name").Item(0).InnerXml; + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadreportchartsetting").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (XmlSchema != "") + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new System.IO.StringReader(XmlSchema); + dsDefine.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadreportchartsetting").Item(0).SelectNodes("value").Item(0).InnerXml; + if (XmlData != "") + { + tmpStringReader = new System.IO.StringReader(XmlData); + dsDefine.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + + // Sort + dsDefine.Tables[tblRPTMesChartSetting].DefaultView.Sort = "REPORTID"; + dtChartSettingResult = dsDefine.Tables[tblRPTMesChartSetting]; + dtChartSettingResult.DefaultView.Sort = "CHARTORDER"; + dtChartSettingResult = dtChartSettingResult.DefaultView.ToTable(); + } + else + { + + + } + + XmlDoc = null; + + } + catch (Exception) + { } + return dtChartSettingResult; + + dtChartSettingResult.Dispose(); + dsDefine.Dispose(); + } + #endregion + + #endregion + + #region TableSpace Automatic Expansion + + private string funAutomaticExpansion(Collection colParameters = null) + { + string funAutomaticExpansionRet = default(string); + + var dsData = new DataSet(); + var drSel = default(DataRow[]); + string strTableSpaceInfo = "TableSpaceInfo"; + string strTableSpaceFile = "TableSpaceFileName"; + var aryFilename = new ArrayList(); + var strFileName = default(string); + string strMaxCode; // 最大碼 + string strFilePath = ""; // 目錄路徑 + + string strTableSpace = "MESDATA_D1,MESIDX_D1,MESDATA_L1,MESIDX_L1,MESDATA_S1,MESIDX_S1"; // 要檢查的TableSpace + int intUsedRatio = 90; // TableSpace使用比率界限,預設為90% + string strUserPath = ""; // 產生DataFile放置的目錄,預設為DataFile當前目錄 + int intFileSize = 500; // 產生DataFile初始大小,預設為500 MB + int intGrowthSize = 100; // 產生DataFile自動成長大小,預設為100 MB + int intFileMaxSize = 4096; // 產生DataFile最大檔案大小,預設為4096 MB + + do + { + try + { + // ParameterXX參數說明 + // 01 要檢查的TableSpace + // 02 TableSpace使用比率界限 + // 03 產生DataFile放置的目錄 + // 04 產生DataFile初始大小 + // 05 產生DataFile自動成長大小 + // 06 產生DataFile最大檔案大小 + + // Parameter01為傳入參數,作為要檢查的TableSpace + if (colParameters["Parameter01"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strTableSpace = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])); + // 檢查TableSpace是否存在 + if (CheckTableSpaceExist(strTableSpace) == false) + { + funAutomaticExpansionRet = "TableSpace is not Exist!!!(Parameter 01)"; + break; + } + } + // Parameter02為傳入參數,作為TableSpace使用比率界限 + if (colParameters["Parameter02"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + if (Information.IsNumeric(colParameters["Parameter02"])) + { + intUsedRatio = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter02"]))); + } + else + { + funAutomaticExpansionRet = "TableSpace Used Ratio is not Numeric!!!(Parameter 02)"; + break; + } + } + // Parameter03為傳入參數,產生DataFile放置的目錄 + if (colParameters["Parameter03"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + if (Path.IsPathRooted(Conversions.ToString(colParameters["Parameter03"]))) + { + strUserPath = Strings.Trim(Conversions.ToString(colParameters["Parameter03"])); + } + else + { + funAutomaticExpansionRet = "DataFile Directory is not the Path format!!!(Parameter 03)"; + break; + } + } + // Parameter04為傳入參數,產生DataFile初始大小 + if (colParameters["Parameter04"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + if (Information.IsNumeric(colParameters["Parameter04"])) + { + intFileSize = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter04"]))); + } + else + { + funAutomaticExpansionRet = "DataFile initial Size is not Numeric!!!(Parameter 04)"; + break; + } + } + // Parameter05為傳入參數,產生DataFile自動成長大小 + if (colParameters["Parameter05"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter05"])))) + { + if (Information.IsNumeric(colParameters["Parameter05"])) + { + intGrowthSize = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter05"]))); + } + else + { + funAutomaticExpansionRet = "DataFile Growth Size is not Numeric!!!(Parameter 05)"; + break; + } + } + // Parameter06為傳入參數,產生DataFile最大檔案大小 + if (colParameters["Parameter06"] == null == false && !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter06"])))) + { + if (Information.IsNumeric(colParameters["Parameter06"])) + { + intFileMaxSize = Conversions.ToInteger(Strings.Trim(Conversions.ToString(colParameters["Parameter06"]))); + } + else + { + funAutomaticExpansionRet = "DataFile Max Size is not Numeric!!!(Parameter 06)"; + break; + } + } + + + var dtTableSpaceInfo = LoadTableSpaceInfo(strTableSpaceInfo, strTableSpace); + + if (dtTableSpaceInfo == null) + { + funAutomaticExpansionRet = "success"; // mssql 有無限制maxsize 因此不需產生DataFile + break; + } + + // 讀入TableSpace資訊 + dsData.Tables.Add(dtTableSpaceInfo); + dsData.Tables.Add(LoadTableSpaceFileName(strTableSpaceFile, strTableSpace)); + + foreach (DataRow dr in dsData.Tables[strTableSpaceInfo].Rows) + { + + if (!Information.IsNumeric(dr["Used Of Max"])) + { + throw new Exception("Used Of Max[%MUST BE NUMERIC%]"); + } + + // 判斷超過最大使用比率的TableSpace + if (Conversions.ToInteger(dr["Used Of Max"].ToString()) > intUsedRatio) + { + + // 取得 超過最大使用比率的TableSpace/Schema FileName + if (strDataBaseType == "oracle") + { + drSel = dsData.Tables[strTableSpaceFile].Select(Conversions.ToString(Operators.AddObject(Operators.AddObject("TableSpace_name='", dr[0]), "'"))); + } + else if (strDataBaseType == "mssql") + { + drSel = dsData.Tables[strTableSpaceFile].Select(); + } + + if (drSel.Length > 0) + { + // 使用前先清空 + aryFilename.Clear(); + strFilePath = ""; + + // 取得目錄路徑 + if (drSel[0][1].ToString().IndexOf(@"\") != -1) // Windows Path + { + + // 判斷是否為使用者自訂目錄位置 + if (string.IsNullOrEmpty(strUserPath)) + { + strFilePath = Path.GetDirectoryName(Conversions.ToString(drSel[0][1])) + @"\"; + } + else + { + strFilePath = strUserPath.Replace("/", @"\"); + if (strFilePath.LastIndexOf(@"\") != strFilePath.Length - 1) + { + strFilePath += @"\"; + } + } + } + + else if (drSel[0][1].ToString().IndexOf("/") != -1) // Linux Path + { + + // 判斷是否為使用者自訂目錄位置 + if (string.IsNullOrEmpty(strUserPath)) + { + strFilePath = Path.GetDirectoryName(Conversions.ToString(drSel[0][1])) + "/"; + strFilePath = strFilePath.Replace(@"\", "/"); + } + else + { + strFilePath = strUserPath.Replace(@"\", "/"); + if (strFilePath.LastIndexOf("/") != strFilePath.Length - 1) + { + strFilePath += "/"; + } + } + } + + + // 取得檔名 + foreach (DataRow drSub in drSel) + { + strFileName = Path.GetFileName(Conversions.ToString(drSub[1])); + aryFilename.Add(strFileName); + } + + // strWriteName + // oracle: TableSpace Name + // mssql : Schema Name + string strWriteName = Conversions.ToString(drSel[0][0]); // TableSpace Name + + if (strDataBaseType == "mssql") + { + string[] strTemp = strConnectionString.Split(';'); + foreach (string sstr in strTemp) + { + if (sstr.IndexOf("Initial Catalog") == 0) + { + strTemp = sstr.Split('='); + strWriteName = strTemp[1].Trim(); // Schema Name + break; + } + } + } + + // 計算最大碼 + strMaxCode = CalculateMaxCode(strWriteName, aryFilename); + + // 組合路徑 + if (strDataBaseType == "oracle") + { + strFileName = strFilePath + strWriteName + "_" + strMaxCode + ".DBF"; + } + else if (strDataBaseType == "mssql") + { + strFileName = strFilePath + strWriteName + "_" + strMaxCode + ".NDF"; + } + + // 產生DataFile + CreateDataFile(strWriteName, strFileName, intFileSize.ToString(), intGrowthSize.ToString(), intFileMaxSize.ToString()); + + } + } + } + + funAutomaticExpansionRet = "success"; + } + + catch (Exception ex) + { + funAutomaticExpansionRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funAutomaticExpansionRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + } + while (false); + return funAutomaticExpansionRet; + + } + + // 檢查TableSpace是否存在 + private bool CheckTableSpaceExist(object strTableSpace) + { + // 只檢查Oracle, 若傳入的TableSpace有任一不存在則回傳false + // mssql直接回傳true + + var cnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + string strSQL; + var dtTemp = new DataTable(); + DataRow[] drSel; + + try + { + cnTemp = CreateConnection(strConnectionString); + + if (strDataBaseType == "oracle") + { + + strSQL = "Select Tablespace_name From Dba_tablespaces"; + + //cmmTemp = new IDbCommand(strSQL, cnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dtTemp); + ExecuteSQLQuery_Adapter(strSQL, dtTemp, cnTemp); + + // 取出要檢查的TableSpaceName + string[] strArrayTS = strTableSpace.ToString().Split(','); + foreach (string tablespace in strArrayTS) + { + drSel = dtTemp.Select("tablespace_name='" + tablespace.Trim() + "'"); + if (drSel.Length == 0) + { + return false; + } + } + return true; + } + + else if (strDataBaseType == "mssql") + { + return true; + } + } + + catch (Exception ex) + { + throw; + } + finally + { + CloseConnection(cnTemp); + //if (daTemp != null) + // daTemp.Dispose(); + } + + return default(Boolean); + + } + + // 讀取Table Space Info + private DataTable LoadTableSpaceInfo(string strTableName, string strTableSpace) + { + // oracle: 讀取TableSpace + // mssql: 檢查是否有無限制的maxsize + + var cnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var drTemp = default(DbDataReader); + var strSQL = default(string); + var dtResult = new DataTable(strTableName); + + do + { + try + { + cnTemp = CreateConnection(strConnectionString); + + if (strDataBaseType == "oracle") + { + + strSQL = "Select A.Tablespace_name, " + " To_char(Round((A.Bytes-B.Bytes)/(1024*1024),0),'999,999') \"Used(MB)\"," + " To_char(Round((A.Maxbytes)/(1024*1024),0),'999,999,999') \"Max(MB)\"," + " Round((A.Bytes-B.Bytes)/A.Maxbytes*100,2) \"Used of Max\"" + " From (Select Tablespace_name, Sum(Bytes) \"BYTES\", Sum(Maxbytes) \"MAXBYTES\" From Dba_data_files Group By Tablespace_name) A," + " (Select Tablespace_name, Sum(Bytes) \"BYTES\" From Dba_free_space Group By Tablespace_name) B " + " Where A.Tablespace_name=B.Tablespace_name And ("; + + // 取出要讀取的TableSpaceName + string[] strArrayTS = strTableSpace.Split(','); + foreach (string tablespace in strArrayTS) + strSQL += " A.TableSpace_name = '" + tablespace.Trim() + "' Or"; + + // 移除最後一個Or + strSQL = strSQL.Substring(0, Strings.Len(strSQL) - 2); + + strSQL += " ) Order By Tablespace_name"; + } + + else if (strDataBaseType == "mssql") + { + + strSQL = "Select Max_Size From Sys.Database_files Where type = 0"; + //cmmTemp = new IDbCommand(strSQL, cnTemp); + if (cnTemp.State == ConnectionState.Closed) + cnTemp.Open(); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnTemp); + bool exitTry = false; + while (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp[0], -1, false))) // Max Size = -1 --> Unlimited + { + exitTry = true; + break; + } + } + + if (exitTry) + { + break; + } + + strSQL = "Select Type, " + " Round(Cast(Sum(Size) As Float)*8192/1024/1024, 2) 'Used(MB)'," + " Round(Cast(Sum(Max_Size) As Float)*8192/1024/1024, 2) 'Max(MB)' ," + " Round(Cast(Sum(Size) As Float)/Cast(Sum(Max_Size) As Float)*100, 0) 'Used Of Max'" + " From Sys.Database_Files" + " Where Type = 0" + " Group By Type"; + + } + + //cmmTemp = new IDbCommand(strSQL, cnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dtResult); + ExecuteSQLQuery_Adapter(strSQL, dtResult, cnTemp); + + return dtResult; + } + + catch (Exception ex) + { + throw; + } + finally + { + CloseConnection(cnTemp); + if (drTemp != null) + drTemp.Close(); + //if (daTemp != null) + // daTemp.Dispose(); + } + } + while (false); + return default(DataTable); + + } + + // 讀取Table Space FileName + private DataTable LoadTableSpaceFileName(string strTableName, string strTableSpace) + { + + var cnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var strSQL = default(string); + var dtResult = new DataTable(strTableName); + + try + { + cnTemp = CreateConnection(strConnectionString); + + if (strDataBaseType == "oracle") + { + strSQL = "Select Tablespace_name, File_name From Dba_data_files Where ("; + + // 取出要檢查的TableSpaceName + string[] strArrayTS = strTableSpace.Split(','); + foreach (string tablespace in strArrayTS) + strSQL += " TableSpace_name = '" + tablespace.Trim() + "' Or"; + + // 移除最後一個Or + strSQL = strSQL.Substring(0, Strings.Len(strSQL) - 2); + + strSQL += " ) Order By Tablespace_name, File_name"; + } + + else if (strDataBaseType == "mssql") + { + + strSQL = "Select Name, Physical_Name From Sys.Database_Files Where type = 0"; + + } + + //cmmTemp = new IDbCommand(strSQL, cnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dtResult); + ExecuteSQLQuery_Adapter(strSQL, dtResult, cnTemp); + + return dtResult; + } + + catch (Exception ex) + { + throw; + } + finally + { + CloseConnection(cnTemp); + //if (daTemp != null) + // daTemp.Dispose(); + } + + } + + // 計算最大碼 + private string CalculateMaxCode(string strTableSpaceName, ArrayList aryFileName) + { + + int intMaxNumber = 0; + + foreach (string strTemp in aryFileName) + { + if ((strTemp.ToUpper() ?? "") != (strTableSpaceName.ToUpper() ?? "") && strTemp.ToUpper().IndexOf(strTableSpaceName.ToUpper()) == 0) + { + string[] strArray = strTemp.Substring(strTableSpaceName.Length + 1, strTemp.Length - strTableSpaceName.Length - 1).Split('.'); + + // 判斷為3位數才須計算 且 是否可成功轉為數值 且 大於MaxNumber 即將MaxNumber替換為新值 + if (strArray[0].Length == 3 && Information.IsNumeric(strArray[0]) && Conversions.ToInteger(strArray[0].ToString()) > intMaxNumber) + { + intMaxNumber = Conversions.ToInteger(strArray[0].ToString()); + } + } + } + + intMaxNumber += 1; + + // 補0至三位數 + string result = intMaxNumber.ToString().PadLeft(3, '0'); + + return result; + + } + + // 產生DataFile + private void CreateDataFile(string strTableSpaceName, string strFilePathName, string strFileSize, string strGrowthSize, string strFileMaxSize) + { + + var cnTemp = default(IDbConnection); + var cmmTemp = default(IDbCommand); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var strSQL = default(string); + + try + { + + cnTemp = CreateConnection(strConnectionString); + if (cnTemp.State == ConnectionState.Closed) + cnTemp.Open(); + + cmmTemp = CreateCommand(); + cmmTemp.Connection = cnTemp; + + if (strDataBaseType == "oracle") + { + //strSQL = "ALTER TABLESPACE " + strTableSpaceName + " ADD DATAFILE '" + strFilePathName + "'" + " SIZE " + strFileSize + "M" + " AUTOEXTEND ON" + " NEXT " + strGrowthSize + "M" + " MAXSIZE " + strFileMaxSize + "M"; + + strSQL = "ALTER TABLESPACE " + strTableSpaceName + " ADD DATAFILE '" + strFilePathName + "'" + " SIZE " + strFileSize + "M" + " AUTOEXTEND ON" + " NEXT " + strGrowthSize + "M" + " MAXSIZE " + " UNLIMITED"; + } + + else if (strDataBaseType == "mssql") + { + + // mssql 須寫入邏輯名稱, 取得檔名填入 + string strFileName = Path.GetFileNameWithoutExtension(strFilePathName); + + strSQL = "ALTER DATABASE " + strTableSpaceName + " ADD File (" + " NAME = " + strFileName + "," + " FILENAME = '" + strFilePathName + "'," + " SIZE = " + strFileSize + "MB," + " MAXSIZE = " + strFileMaxSize + "MB," + " FILEGROWTH = " + strGrowthSize + "MB)"; + } + + cmmTemp.CommandText = strSQL; + cmmTemp.ExecuteNonQuery(); + } + + catch (Exception ex) + { + throw; + } + finally + { + CloseConnection(cnTemp); + //if (daTemp != null) + // daTemp.Dispose(); + } + + } + + #endregion + + #endregion + + #region 客製JobName + + + #endregion + + #region 測試用JobName + + // Add by Martin 2009/03/03 for testing the Url get by using gMESWebServiceHost and GetAppSettings mathod. + // Private Function funTestFuncton(Optional ByVal colParameters As Collection = Nothing) As String + // Dim cnnTemp As OleDb.OleDbConnection + // Dim drTemp As OleDb.OleDbDataReader + // Dim wsSPC As New wsSPC.wsSPC + // wsSPC.Url = LocalizeWebService(wsSPC.Url.ToString) + // wsSPC.EnableDecompression = True + + // strIdentity = CombineXMLIdentity("Autorun", "Autorun", Now) + // InXml = CombineXMLRequest(strIdentity, strParameter) + + // Try + // '開始執行 + // OutXml = wsSPC.LoadOQCForm(InXml) + // 'MsgBox(OutXml, , "Test Function Response!") '2012/08/21,Even,由於該msgbox造成錯誤(程式不允許auto 回復為msgbox形式) + + // funTestFuncton = "success" + + // Catch e1 As Exception + // funTestFuncton = "fail;" & e1.Message + // '發生錯誤時丟回本身的Function Name及系統錯誤訊息 + // 'Throw New Exception("clsAutoRunLibary.funTestFuncton: " & e1.Message) + + // '2013/02/05, Hank, Send Email + // colParameters.Add(funTestFuncton, "EmailBody") + // SendJobFailEmail(colParameters) + + // Finally + // Call objSetting.CloseConnection(cnnTemp) + // If Not wsSPC Is Nothing Then wsSPC.Dispose() + // End Try + + // End Function + + #endregion + + #region ---T100 整合項目--- + + #region 共用 + + /// + /// 生成EAI的request XML + /// + /// + /// + /// + /// + private string GenerateRequestXML(ERPName erp, string cdata, string servicename) + { + + var XmlDoc = new XmlDocument(); + string strRequest = ""; + DataRowView row; + string input = ""; + string key = ""; + + try + { + + // 取出ERP整合設定資料 + if (dtERPSetting == null) + { + return default(string); + } + + dtERPSetting.DefaultView.RowFilter = "ERP_Name = '" + erp.ToString() + "'"; + + if (dtERPSetting.DefaultView.Count == 0) + { + // Throw New iMESException.MESException("0000-200003", erp.ToString & " [%ERPSETTING%]") + throw new Exception(erp.ToString() + " [%ERPSETTING%]"); + } + + row = dtERPSetting.DefaultView[0]; + + // 建立request節點 + var nodeRequest = XmlDoc.CreateElement("request"); + XmlDoc.AppendChild(nodeRequest); + + // 建立host節點 + var nodeHost = XmlDoc.CreateElement("host"); + nodeHost.SetAttribute("prod", row["MESProductName"].ToString()); + nodeHost.SetAttribute("ver", row["MESProductVer"].ToString()); + nodeHost.SetAttribute("ip", row["MESIP"].ToString()); + nodeHost.SetAttribute("id", row["MESID"].ToString()); + nodeHost.SetAttribute("lang", row["ERP_LANG"].ToString()); + nodeHost.SetAttribute("timestamp", Strings.Format(DateTime.Now, "yyyyMMddHHmmssfff")); + nodeHost.SetAttribute("acct", row["ERP_USER"].ToString()); + nodeRequest.AppendChild(nodeHost); + + // 建立service節點 + var nodeService = XmlDoc.CreateElement("service"); + nodeService.SetAttribute("prod", row["CalledProductName"].ToString()); + nodeService.SetAttribute("name", servicename); + nodeService.SetAttribute("ip", Conversions.ToString(row["CalledIP"])); + nodeService.SetAttribute("id", Conversions.ToString(row["CalledID"])); + nodeService.SetAttribute("srvver", row["CalledSrvver"].ToString()); // 2016-03-22, Joe, 改取ERPSetting + nodeRequest.AppendChild(nodeService); + + // 產生request Key, MD5編碼, key=MD5(M+K), M="", K="28682266" (鼎新統一編號) + input = nodeHost.OuterXml + nodeService.OuterXml; + key = modAutoRunLibrary.GetRequestKey(input); + nodeRequest.SetAttribute("type", "sync"); + nodeRequest.SetAttribute("key", key); + + // 建立datakey節點 + var nodeDataKey = XmlDoc.CreateElement("datakey"); + nodeDataKey.AppendChild(GenerateKeyNode(ref XmlDoc, "EntId", row["ERP_ENTID"].ToString())); + nodeDataKey.AppendChild(GenerateKeyNode(ref XmlDoc, "CompanyId", row["ERP_ORG"].ToString())); + nodeRequest.AppendChild(nodeDataKey); + + // 建立payload節點 + var nodePayload = XmlDoc.CreateElement("payload"); + nodeRequest.AppendChild(nodePayload); + + // 建立param節點 + var nodeParam = XmlDoc.CreateElement("param"); + nodeParam.SetAttribute("key", "data"); + nodeParam.SetAttribute("type", "XML"); + nodePayload.AppendChild(nodeParam); + + // CDATA Section + var cs = XmlDoc.CreateCDataSection(cdata); + nodeParam.AppendChild(cs); + + strRequest = XmlDoc.InnerXml; + } + + catch (Exception ex) + { + throw; + } + finally + { + XmlDoc = null; + } + + return strRequest; + + } + + /// + /// 生成Key節點 + /// + /// + /// + private XmlNode GenerateKeyNode(ref XmlDocument XmlDoc, string name, string value) + { + + XmlElement nodeKey; + + try + { + + nodeKey = XmlDoc.CreateElement("key"); + nodeKey.SetAttribute("name", name); + nodeKey.InnerText = value; + } + + catch (Exception ex) + { + throw; + } + + return nodeKey; + + } + + /// + /// 查核ERP response XML的Execution Status, 若有錯誤直接拋出例外訊息 + /// + /// + /// + public bool CheckExecutionStatus_T100(XmlDocument xmlDoc) + { + + bool blnResult = false; + XmlNode node; + + try + { + + node = xmlDoc.GetElementsByTagName("Execution").Item(0).SelectNodes("Status").Item(0); + + if (node.Attributes["code"].Value != "0") + { + throw new Exception("ERP Message: " + node.Attributes["description"].Value); + } + + blnResult = true; + } + + catch (Exception ex) + { + throw; + } + + return blnResult; + + } + + public string CheckResponseContent_T100(XmlDocument xmlDoc) + { + string CheckResponseContent_T100Ret = default(string); + string strCode; + + do + { + try + { + + // 取出CDATA內的request節點 + XmlNode node; + node = GetRequestNode(xmlDoc); + + if (node == null) + { + break; + } + + xmlDoc.LoadXml(node.InnerText); + + // 取得錯誤訊息 + var nodeCode = xmlDoc.DocumentElement.SelectNodes("Execution").Item(0).SelectNodes("Status").Item(0); + strCode = ((XmlElement)nodeCode).GetAttribute("code"); + if (!strCode.StartsWith("0")) + { + throw new Exception("EAI Message: " + ((XmlElement)nodeCode).GetAttribute("description")); + } + + // 取得回傳值 + var nodeResult = xmlDoc.DocumentElement.SelectNodes("ResponseContent").Item(0).SelectNodes("Parameter").Item(0).SelectNodes("Record").Item(0).SelectNodes("Field[@name='result']"); + string strResult = ((XmlElement)nodeResult.Item(0)).GetAttribute("value"); + + CheckResponseContent_T100Ret = strResult; + } + + catch (Exception ex) + { + throw; + } + } + while (false); + return CheckResponseContent_T100Ret; + + } + + public XmlNode GetRequestNode(XmlDocument xmlDoc) + { + + XmlNode node = null; + XmlNodeList xmlList; + + try + { + + // 檢查 payload 節點的CDATA Section + foreach (XmlNode n in xmlDoc.GetElementsByTagName("payload").Item(0).ChildNodes) + { + + if (n.NodeType == XmlNodeType.CDATA) + { + node = n; + break; + } + + } + + // 檢查 payload \ param 節點的CDATA Section + if (node == null) + { + + xmlList = xmlDoc.GetElementsByTagName("payload").Item(0).SelectNodes("param"); + + foreach (XmlNode n in xmlList) + { + + if (n.FirstChild != null && n.FirstChild.NodeType == XmlNodeType.CDATA) + { + node = n; + break; + } + + } + + } + } + + catch (Exception ex) + { + throw; + } + + return node; + + } + + // Public Function getERP_WSURL(ByVal erp As ERPName) As String + + // Dim row As DataRowView + + // Try + // ' 取出ERP整合設定資料 + // If (dtERPSetting Is Nothing) Then + // Exit Function + // End If + + // dtERPSetting.DefaultView.RowFilter = "ERP_Name = '" & erp.ToString & "'" + + // If (dtERPSetting.DefaultView.Count = 0) Then + // Throw New Exception(erp.ToString & " [%ERPSETTING%]") + // End If + + // row = dtERPSetting.DefaultView(0) + + // getERP_WSURL = row("ERP_WSURL").ToString + + // Catch ex As Exception + // Throw + // Finally + // row = Nothing + // End Try + + // End Function + + // Public Function getERP_Site() As String + + // Dim cnTemp As OleDb.OleDbConnection + // Dim cmmTemp As OleDb.OleDbCommand + // Dim drTemp As OleDb.OleDbDataReader + // Dim strSQL As String + // Dim strSiteNo As String = "" + + // Try + // cnTemp = CreateConnection(strConnectionString) + + // strSQL = " Select ParameterValue From tblSYSParameter Where ParameterType = 'SysInfo' And ParameterNo = 'SiteNo' " + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnTemp) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + // strSiteNo = drTemp("ParameterValue") + // End If + // drTemp.Close() + + // Return strSiteNo + + // Catch ex As Exception + // Throw + // Finally + // If cnTemp IsNot Nothing Then cnTemp.Close() + // If cmmTemp IsNot Nothing Then cmmTemp.Dispose() + // End Try + + // End Function + + private int Update_T100_IfTable(ref Collection colSQL_T100, ref Collection colSQL_T100_Rows, ref ArrayList aryErrMessage, string IfTableName, string IfWhereCondition_PK, string MES_RESULT, DateTime MES_TIME, string MES_MESSAGE = "") + { + int Update_T100_IfTableRet = default(int); + Update_T100_IfTableRet = -1; // Return -1:fail,0:Success + + string strSQL; + + do + { + try + { + // IfTableName:中介表名稱 + // IfWhereCondition_PK:中介表PK條件,請確實組好後傳入變數,必須Where開頭. + // MES_MESSAGE:當MES_RESULT="9"fail才須傳入. + + // 當MES_RESULT="9",必須傳入MES_MESSAGE. + if (MES_RESULT == "9" && (MES_MESSAGE ?? "") == defString) + { + aryErrMessage.Add("MES處理結果:9,必須寫入處理失敗原因!!"); + break; + } + + // ----------------------------------------------------------- + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // MES_RESULT ,MES處理結果,預設值為空值,該筆資料處理成功回寫1,失敗回寫9. + // MES_MESSAGE,MES處理失敗的原因,失敗時將EXCEPTION回寫(EXCEPTION 或 MES判定不合理資料). + // MES_TIME ,MES處理時間,不論成功或失敗將時間回填(使用標準格式:yyyy/MM/dd HH:mm:ss). + // ----------------------------------------------------------- + // Update + strSQL = "Update " + IfTableName + " Set " + " MES_RESULT = '" + MES_RESULT + "'"; + + // MES_MESSAGE + if (!string.IsNullOrEmpty(MES_MESSAGE)) + strSQL += ",MES_MESSAGE = '" + ChkSingleQuation(MES_MESSAGE) + "'"; + + strSQL += ",MES_TIME = '" + Strings.Format(MES_TIME, "yyyy/MM/dd HH:mm:ss") + "'"; + + // Where + strSQL += IfWhereCondition_PK; + + colSQL_T100.Add(strSQL); + colSQL_T100_Rows.Add(1); + + + // //return 0 : Success + Update_T100_IfTableRet = 0; + } + + catch (Exception ex) + { + aryErrMessage.Add(ex.Message); + throw; + } + finally + { + } + } + + while (false); + return Update_T100_IfTableRet; + + } + + private int ERP2MES_MailNoticeChk(ref IDbConnection cnnTemp, ref ArrayList aryErrorMessage, string strGroupNo) + { + int ERP2MES_MailNoticeChkRet = default(int); + ERP2MES_MailNoticeChkRet = -1; + + var drTemp = default(DbDataReader); + string strSQL; + + // 1.檢查寄送群組及郵件清單是否存在. + try + { + // 1-1.Check User By GroupNo + strSQL = "Select UserNo From tblUSRUserGroup " + " Where GroupNo = '" + strGroupNo + "'" + " And GroupType = 0"; // fallow SendMultiEmail(),取GroupType=0條件 + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.HasRows) + { + + string strUserList = ""; + while (drTemp.Read()) + strUserList = Conversions.ToString(strUserList + "Or UserNo='" + drTemp["UserNo"] + "'"); + + if (!string.IsNullOrEmpty(strUserList)) + { + drTemp.Close(); + //cmmTemp.Dispose(); + + // 1-2.Check EmailAddress Is Null By User + strSQL = "Select UserNo,EmailAddress From tblUSRUserBasis " + " Where (" + Strings.Mid(strUserList, 4) + ")" + " And EmailAddress Is Null"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + + strUserList = ""; // reset + while (drTemp.Read()) + strUserList = Conversions.ToString(strUserList + "," + drTemp["UserNo"]); + + if (!string.IsNullOrEmpty(strUserList)) + { + aryErrorMessage.Add("群組主檔:" + strGroupNo + " 的使用者主檔未設定電子郵寄地址" + '\n' + "員工編號:" + Strings.Mid(strUserList, 2)); + return ERP2MES_MailNoticeChkRet; + } + else + { + ERP2MES_MailNoticeChkRet = 0; + } + + } + + drTemp.Close(); + //cmmTemp.Dispose(); + } + + else + { + aryErrorMessage.Add("群組主檔:" + strGroupNo + " 的使用者主檔未設定!!"); + return ERP2MES_MailNoticeChkRet; + } + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + } + // Throw + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return ERP2MES_MailNoticeChkRet; + + } + private int ERP2MES_MailNotice(ref IDbConnection cnnTemp, ref ArrayList aryErrorMessage, string strSubject, string strGroupNo, string strBody) + { + int ERP2MES_MailNoticeRet = default(int); + ERP2MES_MailNoticeRet = -1; + + // 寄送通知 + string strResult = ""; + try + { + string argFileName = "N/A"; + string argEmailBody = CInput(strBody); + strResult = modAutoRunLibrary.SendMultiEmail(ref argFileName, ref strSubject, argEmailBody, strGroupNo); + if (strResult == "success") + { + ERP2MES_MailNoticeRet = 0; + } + else + { + // 2015/05/22,runtime測試,溝通外部主機有timeout問題,SendMultiEmail只會回傳success or fail. + aryErrorMessage.Add("Mail通知 群組編號:" + strGroupNo + " " + strResult + "!!"); + return ERP2MES_MailNoticeRet; + } + } + + catch (Exception ex) + { + + aryErrorMessage.Add(ex.Message + ";寄件處理失敗 群組編號:" + strGroupNo + ""); + // Throw + } + + return ERP2MES_MailNoticeRet; + + } + + private string ArrayList2String(ref ArrayList aryReturnMessage) + { + string ArrayList2StringRet = default(string); + ArrayList2StringRet = defString; + + try + { + string strReturnMessage = ""; + + foreach (string strErr in aryReturnMessage) + strReturnMessage += strErr + '\n'; + + // Return + ArrayList2StringRet = strReturnMessage; + } + + catch (Exception ex) + { + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryReturnMessage.Add("ArrayList2String:" + ex.Message); + } + + return ArrayList2StringRet; + + } + + #endregion + + #region t100舊整合(不使用用) + + #region MES InterFaceTable 轉入 MES正式區(產品、物料) + + // 功 能: MES InterFaceTable 轉入 MES正式區(產品。物料) + // 傳回值: success(成功), fail(失敗) + private string ProductIntegration(Collection colParameters = null) + { + string ProductIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_PRD = 0; // PRD拋轉失敗筆數 + int intFailCount_MTL = 0; // MTL拋轉失敗筆數 + + // ' 每筆中介交易記錄 + // Dim strMES_MESSAGE As String '錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + // Dim aryMES_Message As New ArrayList 'Catch Error Message (Exception及MES判定錯誤訊息)。 + + // =========================================================== + // 宣告 MESSERIES_T100中介表 變數 + // =========================================================== + // Dim strIfTableName As String = "mes_imaa_t" '統一小寫 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + ProductIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return ProductIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.料件 MES_IMAA_T:(必須優先) + // Loop 2.料件據點製造檔 MES_IMAE_T + // Loop 3.料件多語言檔 MES_IMAE_T + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_IMAA_T_1Main = "MES_IMAA_T"; + string MES_IMAE_T_2 = "MES_IMAE_T"; + string MES_IMAAL_T_3 = "MES_IMAAL_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.料件 MES_IMAA_T + // -------------------------------------------------- + strSQL = "Select T1.*, T1.imaa004 As imaa004_Upper " + " From " + MES_IMAA_T_1Main + " T1" + " Where T1.MES_Result Is Null" + " And T1.imaaent ='" + ERP_EntID + "' "; + ////cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_IMAA_T_1Main); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_IMAA_T_1Main, cnnERP); + + if (dsTemp.Tables[MES_IMAA_T_1Main].Rows.Count > 0) + { + + // 中介表資料來源說明: + // 產品跟物料皆在此TABLE,以imaa004做區分 + // 1.當imaa004 = 'A'時,此料件為產品(A.組合/加工品) + + drSel_IF = dsTemp.Tables[MES_IMAA_T_1Main].Select("imaa004_Upper = 'A'", "tran_Time,imaa001,imaa002"); + if (drSel_IF.Length > 0) + { + // intFailCount_PRD + if (ProductIntegration_1PRD_Trans_MES(ref cnnMES, ref aryReturnMessage, ref intFailCount_PRD, MES_IMAA_T_1Main, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_IMAA_T_1Main + ", 料件類別(imaa004):A, 組合/加工品資料, 拋轉執行失敗!!"); + } + } + } + + // 2.當imaa004 = 'M'時,此料件為物料(M.材料/零件/商品) + + drSel_IF = dsTemp.Tables[MES_IMAA_T_1Main].Select("imaa004_Upper = 'M'", "tran_Time,imaa001"); + if (drSel_IF.Length > 0) + { + // intFailCount_MTL + if (ProductIntegration_1MTL_Trans_MES(ref cnnMES, ref aryReturnMessage, ref intFailCount_MTL, MES_IMAA_T_1Main, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_IMAA_T_1Main + ", 料件類別(imaa004):M, 材料/零件/商品資料, 拋轉執行失敗!!"); + } + } + } + + string strIfWhereCond_PK; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + + // 3.當imaa004 料件類別不正確, 資料報錯. + drSel_IF = dsTemp.Tables[MES_IMAA_T_1Main].Select("imaa004_Upper <> 'A' And imaa004_Upper <> 'M'", "tran_Time,imaa001"); + foreach (DataRow drIF in drSel_IF) + { + + datNow = DateTime.Now; // Now + strMES_MESSAGE = Conversions.ToString("料件類別(imaa004):" + drIF["imaa004"] + ", 不正確!!"); + + // ----------------------------------------------------------- + // 正常程序 + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + strIfWhereCond_PK = Conversions.ToString(" Where imaa001 = '" + + drIF["imaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And imaaent ='" + ERP_EntID + "' "); + + + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryReturnMessage, MES_IMAA_T_1Main, strIfWhereCond_PK, "9", datNow, strMES_MESSAGE) < 0) + { + + aryReturnMessage.Add("中介表:" + MES_IMAA_T_1Main + "(料件), " + strMES_MESSAGE); + } + // Try + // Catch ex As Exception + // End Try + + // 不管成功或失敗,繼續下一筆。 + + } + + } + + // -------------------------------------------------- + // Loop 2.料件據點製造檔 MES_IMAE_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_IMAE_T_2 + " T1" + " Where T1.MES_Result Is Null " + " And T1.imaesite = '" + ERP_Site + "' " + " And T1.imaeent ='" + ERP_EntID + "' "; + ////cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_IMAE_T_2); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_IMAE_T_2, cnnERP); + + if (dsTemp.Tables[MES_IMAE_T_2].Rows.Count > 0) + { + + // 中介表資料來源說明: + /// 產品跟物料皆在此TABLE,以imaa004做區分 + /// 1.當imaa004 = 'A'時,此料件為產品(A.組合/加工品) + /// 2.當imaa004 = 'M'時,此料件為物料(M.材料/零件/商品) + drSel_IF = dsTemp.Tables[MES_IMAE_T_2].Select("", "tran_Time,imae001,imae016"); + + if (ProductIntegration_2Unit_Trans_MES(ref cnnMES, ref aryReturnMessage, ref intFailCount_PRD, MES_IMAE_T_2, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_IMAE_T_2 + "(料件據點製造檔), 拋轉執行失敗!!"); + } + } + } + + // -------------------------------------------------- + // Loop 3.料件多語言檔 MES_IMAE_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_IMAAL_T_3 + " T1" + " Where T1.MES_Result Is Null" + " And T1.imaal002 = '" + strLanguage_T100 + "'" + " And T1.imaalent ='" + ERP_EntID + "' "; + ////cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_IMAAL_T_3); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_IMAAL_T_3, cnnERP); + + if (dsTemp.Tables[MES_IMAAL_T_3].Rows.Count > 0) + { + + // 中介表資料來源說明: + /// 產品跟物料皆在此TABLE,以imaa004做區分 + /// 1.當imaa004 = 'A'時,此料件為產品(A.組合/加工品) + /// 2.當imaa004 = 'M'時,此料件為物料(M.材料/零件/商品) + drSel_IF = dsTemp.Tables[MES_IMAAL_T_3].Select("", "tran_Time,imaal001,imaal002"); + + if (ProductIntegration_3Res_Trans_MES(ref cnnMES, ref aryReturnMessage, ref intFailCount_PRD, MES_IMAAL_T_3, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_IMAAL_T_3 + "(料件多語言檔), 拋轉執行失敗!!"); + } + } + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + ProductIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + ProductIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(產品、物料) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (ProductIntegrationRet.Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + ProductIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return ProductIntegrationRet; + // --------------------------------------------------# + + } + + private int ProductIntegration_1PRD_Trans_MES(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ProductIntegration_1PRD_Trans_MESRet = default(int); + ProductIntegration_1PRD_Trans_MESRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_IMAA_T, 拋轉 MES 產品主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件imaa004料件類別=A(組合/加工品). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增產品:UnitNo,UnitType,ProductName一律填入"N/A", 後續由 mes_imae_t料件據點製造檔(單位) 更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + do + { + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_ProductNo, strERP_status; + string strERP_ProductVersion = "1"; // 未傳入時預設為1。 + + // 預設值 + var strProductType = default(string); // 給予預設值"PRODUCT",若不存在則自動新增產品類別. + + int intIssueState = 0; + int intCurVersion = 0; + string strSpecNo = "N/A"; + + // If strProductType <> String.Empty Then '2021/03/10 Elvis 0088864: ERP 整合 MES 資料 + // strProductType = strProductType + // End If + + // ----------------------------------------------------------- + // 固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (AddProductType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strProductType, strERPCreator, datNow, "AutoRun建立") < 0) + break; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_ProductNo = drIF["imaa001"].ToString().Trim().ToUpper(); + // If Not IsDBNull(drIF("imaa002")) OrElse drIF("imaa002").ToString.Trim <> "" Then strERP_ProductVersion = drIF("imaa002").ToString.Trim.ToUpper + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + + // 檢查是否有此產品設定 + strSQL = "Select ProductNo,IssueState From tblPRDProductBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + strProductType = "PRODUCT"; // 給予預設值"PRODUCT",若不存在則自動新增產品類別. + // ----------------------------------------------------------- + // 產品編號合理性檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_ProductNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (strProductType.Equals("PRODUCT") != true) + { + strProductType = strProductType; + } + // ----------------------------------------------------------- + // 新增MES產品設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblPRDProductBasis " + "(ProductNo,ProductVersion,ProductName,ProductType," + " UnitNo,UnitType,ItemSpec,Description," + " IssueState,CurVersion,Creator,CreateDate)"; + strSQL += " Values('" + strERP_ProductNo + "','" + strERP_ProductVersion + "','N/A','" + strProductType + "'," + "'N/A','N/A','" + strSpecNo + "','AutoRun建立'," + intIssueState + "," + intCurVersion + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // 修改產品,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + if (!string.IsNullOrEmpty(strProductType)) // 2021/03/10 Elvis 0088864: ERP 整合 MES 資料 + { + strProductType = strProductType; + } + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblPRDProductBasis Set " + " IssueState = 0" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " IssueState=-1" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("產品編號(imaa001):" + strERP_ProductNo + ", 產品版本(imaa002):" + strERP_ProductVersion + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("ProductIntegration_1PRD_Trans_MES:EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where imaa001 = '" + + drIF["imaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And imaaent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", imaa001:" + drIF["imaa001"] + ", imaa004:" + drIF["imaa004"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + ProductIntegration_1PRD_Trans_MESRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add("ProductIntegration_1PRD_Trans_MES,Finally:" + ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + return ProductIntegration_1PRD_Trans_MESRet; + + } + private object ProductIntegration_ChkExist_ProductNo() + { + return default(Object); + + // Dim strSQL As String + + // Try + + // '//return 0 : Success + // ProductIntegration_ChkValid_ProductNo = 0 + + // Catch ex As Exception + // aryMES_Message.Add(ex.Message) + // Throw + // Finally + + // End Try + + } + private int ProductIntegration_ChkValid_ProductNo(ref IDbConnection cnnMES, ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_ProductNo, string strERP_ProductVersion) + { + int ProductIntegration_ChkValid_ProductNoRet = default(int); + ProductIntegration_ChkValid_ProductNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + + // ----------------------------------------------------------- + // 產品編號合理性檢查 + // ----------------------------------------------------------- + // (1)檢查ProductNo是否已存在於tblPRDType(因與ProductType共用Property故編號不可一樣). + strSQL = "Select ProductType From tblPRDType Where ProductType='" + strERP_ProductNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("產品編號(imaa001):" + strERP_ProductNo + ", 已存在於MES產品類別主檔, 產品編號與產品類別不允許相同!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // (2)檢查ProductNo是否已存在於tblPRDModuleBasis(因與ModuleNo共用部份Table,故號不可一樣) + strSQL = "Select ModuleNo From tblPRDModuleBasis Where ModuleNo='" + strERP_ProductNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("產品編號(imaa001):" + strERP_ProductNo + ", 已存在於MES模組主檔, 產品編號與模組編號不允許相同!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 91561: 系統參數for ERP整合料件時使用 : ProductMaterialcoexist (產品物料同時並存) + strSQL = "SELECT * FROM TBLSYSPARAMETER WHERE PARAMETERNO = 'ProductMaterialcoexist'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + // 如果ProductMaterialcoexist設定為1,跳過檢查 + if (drTemp["PARAMETERVALUE"].ToString() == "0") + { + // (3)檢查物料主檔: + // 因產品可能是半成品,會當成料來使用, + // 在BOM表(tblPRDBOM)、用料清單(tblOEMOMaterialList)及kcWIP.clsLot的處理邏輯上都沒有加上MaterialLevel. + // 故ProductNo不可與MaterialNo一樣. + strSQL = "Select MaterialNo From tblMTLMaterialBasis Where MaterialNo ='" + strERP_ProductNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("產品編號(imaa001):" + strERP_ProductNo + ", 已存在於MES物料主檔, 物料編號與產品編號不允許相同!! 半成品可會當成料來使用!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // //return 0 : Success + ProductIntegration_ChkValid_ProductNoRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ProductIntegration_ChkValid_ProductNoRet; + + } + private int ProductIntegration_DelProduct(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_ProductNo, string strERP_ProductVersion) + { + int ProductIntegration_DelProductRet = default(int); + ProductIntegration_DelProductRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1.tblPRDProductProperty + strSQL = "Delete From tblPRDProductProperty " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2.tblPRDProductProcess + strSQL = "Delete From tblPRDProductProcess " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3.tblPRDOPAttrib + // Parameter:Item + strSQL = "Delete From tblPRDOPAttrib " + " Where SerialNo In (Select SerialNo From tblPRDOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 4.tblPRDOPRule + // Parameter:Rule + strSQL = "Delete From tblPRDOPRule " + " Where SerialNo In (Select SerialNo From tblPRDOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 5.tblPRDOPEQPRecipe + // Parameter:EQPRecipe + strSQL = "Delete From tblPRDOPEQPRecipe " + " Where SerialNo In (Select SerialNo From tblPRDOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 6.tblPRDOpQCItemParameter + // 2008/06/02,sammi.取消產品參數QCItem的參數設定功能,由SPC線上管制要因來變更抽樣計畫功能處理. + // 暫時先不移處,因FK會造成無法刪除. + // Parameter:QCItem Parameter + strSQL = "Delete From tblPRDOpQCItemParameter " + " Where SerialNo In (Select SerialNo From tblPRDOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 7.tblPRDOP + strSQL = "Delete From tblPRDOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 8.tblPRDBOM + strSQL = "Delete From tblPRDBOM " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 9.tblPRDOPBusinessRuleRelation + strSQL = "Delete From tblPRDOPBusinessRuleRelation " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 10.tblPRDOPRuleXml_CLOB + // 2006/05/11,sammi.處理DataGuard not support Long Type probleam. + if (!objDBcom.DBSupportLongType) + { + strSQL = "Delete From tblPRDOPRuleXml_CLOB " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + + // 11.tblPRDOPBusinessRule + strSQL = "Delete From tblPRDOPBusinessRule " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 12.tblPRDOPDescription + strSQL = "Delete From tblPRDOPDescription " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 13.tblPRDOPArea + strSQL = "Delete From tblPRDOPArea " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 14.tblPRDAccessory + strSQL = "Delete From tblPRDAccessory" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 15.tblPRDOPSubOP + // 用 途:刪除產品作業站中子工序,因晶發專案客製於標準版中 + // 撰寫人員:Sam.Hsu + // 建立日期:2008/06/13 + strSQL = "Delete From tblPRDOPSubOP " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 16.tblPRDRecipe + strSQL = "Delete From tblPRDRecipe " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 17.tblPRDQCItem + strSQL = "Delete From tblPRDQCItem " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 18.tblPRDProductSerialRuleBasis + strSQL = "Delete From tblPRDProductSerialRuleBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 19.tblPRDProductSerialRuleDetail + strSQL = "Delete From tblPRDProductSerialRuleDetail " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 20.tblPRDPackingAccessory + strSQL = "Delete From tblPRDPackingAccessory " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 21.tblPRDProductLabelRuleBasis + strSQL = "Delete From tblPRDProductLabelRuleBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 22.tblPRDProductLabelRuleDetail + strSQL = "Delete From tblPRDProductLabelRuleDetail " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 22.tblPRDProductLabelRuleDetail_M + strSQL = "Delete From tblPRDProductLabelRuleDetail_M " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 23.tblPRDRunTimeSetup + strSQL = "Delete From tblPRDRunTimeSetup " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // ----------------------------------------------------------- + // 刪除MES產品設定 + // ----------------------------------------------------------- + strSQL = "Delete From tblPRDProductBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + ProductIntegration_DelProductRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return ProductIntegration_DelProductRet; + + } + + private int ProductIntegration_1MTL_Trans_MES(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ProductIntegration_1MTL_Trans_MESRet = default(int); + ProductIntegration_1MTL_Trans_MESRet = -1; // Return -1:fail,0:Success + // 未好 + // -------------------------------------------------- + // MES_IMAA_T 中介表 拋轉 MES 產品主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件imaa004料件類別=M(材料/零件/商品). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增物料:UnitNo,UnitType,一律填入"N/A", 後續由 mes_imae_t料件據點製造檔(單位) 更新. + // 新增物料:UnitNo,UnitType一律填入"N/A", 後續由 mes_imae_t料件據點製造檔(單位) 更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + // Dim drTemp As OleDb.OleDbDataReader + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + do + { + try + { + // 宣告拋轉中介表資料使用變數 + string strERP_MaterialNo, strERP_status; + DataRow drChk; + + // 預設值 + string strMaterialType = "MATERIL"; // 給予預設值"MATERIL",若不存在則自動新增物料類別. + int intPutInPlace = 3; // 投料點:預設為3(工單). + int intCountWay = 1; // 計量方法:預設為1(實際用量). + int intCheckLotNo = 1; // 物料批號檢查:預設為0(不檢查批號). + int intIssueState = 0; + string strSpecNo = "N/A"; + + // ----------------------------------------------------------- + // 固定檢查MaterialType='MATERIL'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (AddMaterialType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strMaterialType, strERPCreator, datNow, "AutoRun建立") < 0) + break; + + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_MaterialNo = drIF["imaa001"].ToString().Trim().ToUpper(); + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + break; // GoTo lblExitTry_2_NextRow 'fail + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (drChk["MaterialNo"] is DBNull) + { + // ----------------------------------------------------------- + // 物料編號合理性檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_MaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + + + // ----------------------------------------------------------- + // 新增MES物料設定 + // MaterialName,MaterialSpec 必要欄位填"N/A". + // ----------------------------------------------------------- + strSQL = "Insert Into tblMTLMaterialBasis " + "(MaterialNo, MaterialName, MaterialSpec, MaterialType," + " PutInPlace, CountWay, CheckLotNo, UnitType, UnitNo, Description," + " IssueState, Creator, CreateDate)"; + strSQL += " Values('" + strERP_MaterialNo + "','N/A','N/A','" + strMaterialType + "'," + intPutInPlace + "," + intCountWay + "," + intCheckLotNo + ",'N/A','N/A','AutoRun建立'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 已存在MES, 不允許新增!!") + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES物料設定 + // ----------------------------------------------------------- + // 修改物料,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此物料在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], -1, false))) + { + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState = 2" + " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + + break; + } + + case "D": // D:刪除 + { + + + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + if (!(drChk["MaterialNo"] is DBNull)) + { + // ----------------------------------------------------------- + // 物料編號使用狀況檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkforDelMaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], 0, false))) + { + + // ----------------------------------------------------------- + // 刪除MES物料相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState=-1" + " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + else + { + aryMES_Message.Add("物料編號(imaa001):" + strERP_MaterialNo + ", 不存在MES, 不允許修改!!"); + } + + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("ProductIntegration_1MTL_Trans_MES:EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where imaa001 = '" + + drIF["imaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And imaaent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", imaa001:" + drIF["imaa001"] + ", imaa004:" + drIF["imaa004"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + // //return 0 : Success + ProductIntegration_1MTL_Trans_MESRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add("ProductIntegration_1MTL_Trans_MES,Finally:" + ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + } + } + // If Not drTemp Is Nothing Then drTemp.Close() + while (false); + return ProductIntegration_1MTL_Trans_MESRet; + + } + private int ProductIntegration_ChkValid_MaterialNo(ref IDbConnection cnnMES, ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strMaterialNo) + { + int ProductIntegration_ChkValid_MaterialNoRet = default(int); + ProductIntegration_ChkValid_MaterialNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + + // ----------------------------------------------------------- + // 物料編號合理性檢查 + // ----------------------------------------------------------- + // (1)檢查MaterialNo是否已存在於tblMTLMaterialType(因與MaterialType共用Property故編號不可一樣) + strSQL = "Select MaterialType From tblMTLMaterialType Where MaterialType='" + strMaterialNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("物料編號(imaa001):" + strMaterialNo + ", 已存在於MES物料類別主檔, 物料編號與物料類別不允許相同!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 91561: 系統參數for ERP整合料件時使用 : ProductMaterialcoexist (產品物料同時並存) + strSQL = "SELECT * FROM TBLSYSPARAMETER WHERE PARAMETERNO = 'ProductMaterialcoexist'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + // 如果ProductMaterialcoexist設定為1,跳過檢查 + if (drTemp["PARAMETERVALUE"].ToString() == "0") + { + // (2)檢查產品主檔: + // 因產品可能是半成品,會當成料來使用, + // 在BOM表(tblPRDBOM)、用料清單(tblOEMOMaterialList)及kcWIP.clsLot的處理邏輯上都沒有加上MaterialLevel. + // 故MaterialNo不可與ProductNo一樣. + strSQL = "Select ProductNo From tblPRDProductBasis Where ProductNo ='" + strMaterialNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("物料編號(imaa001):" + strMaterialNo + ", 已存在於MES產品主檔, 物料編號與產品編號不允許相同!! 半成品可會當成料來使用!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // //return 0 : Success + ProductIntegration_ChkValid_MaterialNoRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ProductIntegration_ChkValid_MaterialNoRet; + + } + private int ProductIntegration_ChkforDelMaterialNo(ref IDbConnection cnnMES, ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strMaterialNo) + { + int ProductIntegration_ChkforDelMaterialNoRet = default(int); + ProductIntegration_ChkforDelMaterialNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + /// ----------------------------------------------------------- + /// 物料編號合理性檢查 + /// ----------------------------------------------------------- + + // ----------------------------------------------------------- + // 檢查MES物料相關設定. + // 參考自kcMTL.clsMTLBasis.DelMaterialBasis(). + // ----------------------------------------------------------- + + // (1)檢查MaterialNo是否已存在於MaterialList. + strSQL = "Select MONo From tblOEMOMaterialList" + " Where MaterialLevel=0" + " And MaterialNo='" + strMaterialNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("物料編號(imaa001):" + strMaterialNo + ", 存在於MES工單物料清單(工單編號:" + drTemp["MONo"] + ")!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // (2)檢查MaterialNo是否已存在於BOM. + strSQL = "Select ProductNo,ProductVersion From tblPRDBOM " + " Where NodeType=0 " + " And NodeNo='" + strMaterialNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + aryMES_Message.Add("物料編號(imaa001):" + strMaterialNo + ", 存在於MES產品BOM表(產品編號:" + + drTemp["ProductNo"] + ",產品版本:" + drTemp["ProductVersion"] + ")!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // PS.還有很多相關Table都未檢查,也未設FK.(kcMTL.clsMTLBasis註解) + // -----------------------------------------------------------# + + // //return 0 : Success + ProductIntegration_ChkforDelMaterialNoRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ProductIntegration_ChkforDelMaterialNoRet; + + } + private int ProductIntegration_DelMaterial(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strMaterialNo) + { + int ProductIntegration_DelMaterialRet = default(int); + ProductIntegration_DelMaterialRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // ----------------------------------------------------------- + // 先刪除MES物料相關設定 + // ----------------------------------------------------------- + // 1.tblMTLMaterialProperty + strSQL = "Delete From tblMTLMaterialProperty " + " Where Material='" + strMaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2.tblMTLMaterialVendorMap + strSQL = "Delete From tblMTLMaterialVendorMap " + " Where MaterialNo='" + strMaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3.tblMTLMaterialGroupDetail + strSQL = "Delete From tblMTLMaterialGroupDetail " + " Where MaterialNo='" + strMaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // ----------------------------------------------------------- + // 刪除MES物料設定 + // ----------------------------------------------------------- + strSQL = "Delete From tblMTLMaterialBasis " + " Where MaterialNo='" + strMaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + // //return 0 : Success + ProductIntegration_DelMaterialRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return ProductIntegration_DelMaterialRet; + + } + + private int ProductIntegration_2Unit_Trans_MES(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ProductIntegration_2Unit_Trans_MESRet = default(int); + ProductIntegration_2Unit_Trans_MESRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // mes_imae_t 中介表 拋轉 MES 產品/MTL主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件imaa004料件類別=A(組合/加工品). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // mes_imae_t 料件據點製造檔(單位) 更新產品:UnitNo,UnitType. + // status:針對產品做 Update,若拋D視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_PRDMTLNo, strERP_PRDMTLVer, strERP_UnitNo; + DataRow drChkPRD = default(DataRow), drChkMTL; + var colRecUnitInfo = new Collection(); // 收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + bool continueFor = false; + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_PRDMTLNo = drIF["imae001"].ToString().Trim().ToUpper(); + // 轉小寫 + strERP_UnitNo = drIF["imae016"].ToString().Trim().ToLower(); // ToLower + + // ERPws標準功能不論IssueState為何皆允許修改(產品主檔或物料主檔). + + // 1.檢查是否存在MES + int intNo_ChkType = -1; // 檢查是否存在MES,物料找到(填0),產品找到(填1), Default -1 . + string strReturnUnitType; + + // 1-1.檢查是否有此物料設定 + drChkMTL = GetMaterialBasis(strERP_PRDMTLNo, cnnMES, aryMES_Message); + if (drChkMTL == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkMTL["MaterialNo"] is DBNull)) + { + intNo_ChkType = 0; // Material + } + else + { + // 1-2.檢查是否有此產品設定 + drChkPRD = GetProduct(strERP_PRDMTLNo, cnnMES, aryMES_Message); + if (drChkPRD == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkPRD["ProductNo"] is DBNull)) + { + intNo_ChkType = 1; // Product + } + } + + if (intNo_ChkType == -1) + { + // imae001,不存在MES的產品主檔或物料主檔. + // aryMES_Message.Add("產品編號(imae001):" & strERP_PRDMTLNo & ", 不存在MES的產品主檔或物料主檔, 不允許執行!!") + // Exit Try 'GoTo lblExitTry_2_NextRow + // 2017-02-07, Joe, 調整t100基本資料整合:如查不到產品/物料mes主檔資訊則離開不做任何處理 + continueFor = true; + break; + } + else + { + // ----------------------------------------------------------- + // 2.檢查單位資料,若不存在則自動新增。 + // ----------------------------------------------------------- + strReturnUnitType = ""; + if (!colRecUnitInfo.Contains(strERP_UnitNo)) + { + + if (AddUnitBasis(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_UnitNo, strERPCreator, datNow, "AutoRun建立", strReturnUnitType) == 0) + { + + colRecUnitInfo.Add(strReturnUnitType, strERP_UnitNo); // 記錄UnitType,UnitNo + } + else if (aryMES_Message.Count > 0) + break; + } + else + { + strReturnUnitType = Conversions.ToString(colRecUnitInfo[strERP_UnitNo]); + } + // -----------------------------------------------------------# + } + + + if (intNo_ChkType == 0) // 0:Material + { + + // ----------------------------------------------------------- + // 3-1.修改MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " UnitNo='" + strERP_UnitNo + "'" + ",UnitType='" + strReturnUnitType + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkMTL["IssueState"], -1, false))) + strSQL += ",IssueState = 2"; + + strSQL += " Where MaterialNo='" + strERP_PRDMTLNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else if (intNo_ChkType == 1) // 1:Product + { + + // ----------------------------------------------------------- + // 3-2.修改MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " UnitNo='" + strERP_UnitNo + "'" + ",UnitType='" + strReturnUnitType + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkPRD["IssueState"], -1, false))) + strSQL += ",IssueState = 0"; + + // ProductVersion預設1 + strSQL += " Where ProductNo='" + strERP_PRDMTLNo + "' And ProductVersion = '1' "; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("ProductIntegration_2Unit_Trans_MES:EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where imae001 = '" + + drIF["imae001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And imae016 = '" + drIF["imae016"] + "'" + " And imaesite = '" + + ERP_Site + "' " + " And imaeent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + try + { + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + } + catch (Exception ex) + { + string strErrSQL = ""; + foreach (string s in colSQL_T100) + strErrSQL += s + ";"; + aryMES_Message.Add("ProductIntegration_2Unit_Trans_MES,colSQL_T100:" + strErrSQL); + throw; + } + } + } + + if (continueFor) + { + continue; + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", imae001:" + drIF["imae001"] + ", imae016:" + drIF["imae016"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + ProductIntegration_2Unit_Trans_MESRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add("ProductIntegration_2Unit_Trans_MES,Finally:" + ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ProductIntegration_2Unit_Trans_MESRet; + + } + + private int ProductIntegration_3Res_Trans_MES(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ProductIntegration_3Res_Trans_MESRet = default(int); + ProductIntegration_3Res_Trans_MESRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // mes_imae_t 中介表 拋轉 MES 產品/MTL主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件imaa004料件類別=A(組合/加工品). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // mes_imae_t 料件據點製造檔(單位) 更新產品:UnitNo,UnitType. + // status:針對產品做 Update,若拋D視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_PRDMTLNo, strERP_PRDMTLName, strERP_PRDMTLSpec; + DataRow drChkPRD = default(DataRow), drChkMTL; + // Dim colRecUnitInfo As New Collection '收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + bool continueFor = false; + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_PRDMTLNo = drIF["imaal001"].ToString().Trim().ToUpper(); + // 品名 + strERP_PRDMTLName = drIF["imaal003"].ToString().Trim(); + if (string.IsNullOrEmpty(strERP_PRDMTLName)) + strERP_PRDMTLName = "N/A"; + // 規格 + strERP_PRDMTLSpec = drIF["imaal004"].ToString().Trim(); + if (string.IsNullOrEmpty(strERP_PRDMTLSpec)) + strERP_PRDMTLSpec = "N/A"; + + // ERPws標準功能不論IssueState為何皆允許修改(產品主檔或物料主檔). + + // 1.檢查是否存在MES + int intNo_ChkType = -1; // 檢查是否存在MES,物料找到(填0),產品找到(填1), Default -1 . + string strReturnUnitType; + + // 1-1.檢查是否有此物料設定 + drChkMTL = GetMaterialBasis(strERP_PRDMTLNo, cnnMES, aryMES_Message); + if (drChkMTL == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkMTL["MaterialNo"] is DBNull)) + { + intNo_ChkType = 0; // Material + } + else + { + // 1-2.檢查是否有此產品設定 + drChkPRD = GetProduct(strERP_PRDMTLNo, cnnMES, aryMES_Message); + if (drChkPRD == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkPRD["ProductNo"] is DBNull)) + { + intNo_ChkType = 1; // Product + } + } + + if (intNo_ChkType == -1) + { + // imae001,不存在MES的產品主檔或物料主檔. + // aryMES_Message.Add("產品編號(imae001):" & strERP_PRDMTLNo & ", 不存在MES的產品主檔或物料主檔, 不允許執行!!") + // Exit Try 'GoTo lblExitTry_2_NextRow + // 2017-02-07, Joe, 調整t100基本資料整合:如查不到產品/物料mes主檔資訊則離開不做任何處理 + continueFor = true; + break; + } + else + { + // ----------------------------------------------------------- + // 2.檢查單位資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // strReturnUnitType = "" + // If Not colRecUnitInfo.Contains(strERP_UnitNo) Then + + // If AddUnitBasis(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strERP_UnitNo, _ + // strERPCreator, datNow, "AutoRun建立", strReturnUnitType) = 0 Then + + // colRecUnitInfo.Add(strReturnUnitType, strERP_UnitNo) '記錄UnitType,UnitNo + // Else + // If aryMES_Message.Count > 0 Then Exit Try + // End If + // Else + // strReturnUnitType = colRecUnitInfo(strERP_UnitNo) + // End If + // -----------------------------------------------------------# + } + + + if (intNo_ChkType == 0) // 0:Material + { + + // ----------------------------------------------------------- + // 3-1.修改MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " MaterialName='" + modWIN.GetSubString(strERP_PRDMTLName, 50) + "'" + ",MaterialSpec='" + modWIN.GetSubString(strERP_PRDMTLSpec, 100) + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkMTL["IssueState"], -1, false))) + strSQL += ",IssueState = 2"; + + strSQL += " Where MaterialNo='" + strERP_PRDMTLNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else if (intNo_ChkType == 1) // 1:Product + { + + // ----------------------------------------------------------- + // 3-2.修改MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " ProductName='" + strERP_PRDMTLName + "'" + ",SpecNo='" + modWIN.GetSubString(strERP_PRDMTLSpec, 20) + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkPRD["IssueState"], -1, false))) + strSQL += ",IssueState = 0"; + + // ProductVersion預設1 + strSQL += " Where ProductNo='" + strERP_PRDMTLNo + "' And ProductVersion = '1' "; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("ProductIntegration_3Res_Trans_MES:EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where imaal001 = '" + + drIF["imaal001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And imaal002 = '" + drIF["imaal002"] + "'" + " And imaalent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + + if (continueFor) + { + continue; + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", imaal001:" + drIF["imaal001"] + ", imaal002:" + drIF["imaal002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + ProductIntegration_3Res_Trans_MESRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add("ProductIntegration_3Res_Trans_MES,Finally:" + ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ProductIntegration_3Res_Trans_MESRet; + + } + + private DataRow GetMaterialBasis(string MaterialNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, int IssueState = defInteger, string strAdditional = "") + { + DataRow GetMaterialBasisRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((MaterialNo ?? "") != defString) + { + strCondition += " And MaterialNo = '" + MaterialNo + "'"; + } + + if (IssueState != defInteger) + { + strCondition += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblMTLMaterialBasis Where 1=1 " + strCondition; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "MTLMaterialBasis"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "MTLMaterialBasis", cnnTemp); + + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetMaterialBasisRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetMaterialBasisRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetMaterialBasisRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetMaterialBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetMaterialBasisRet; + + } + + private DataRow GetProduct(string ProductNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, string ProductVersion = defString, int IssueState = defInteger, int CurVersion = 1, string strAdditional = "") + { + DataRow GetProductRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((ProductNo ?? "") != defString) + { + strSQL += " And ProductNo = '" + ProductNo + "'"; + } + + if ((ProductVersion ?? "") != defString) + { + strSQL += " And ProductVersion='" + ProductVersion + "'"; + } + + // CurVersion: + // 0.只查詢 Old Version 的 Product + // 1.只查詢Current Version 的 Product + // Else 全部查詢 + if (CurVersion == 0 || CurVersion == 1) + { + strSQL += " And CurVersion = " + CurVersion; + } + if (IssueState != defInteger) + { + strSQL += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblPRDProductBasis " + strCondition; + + // --以下fallow kcPRD作法--. + + // 將較大的Version 置前 + strSQL += " Order by ProductNo, ProductVersion Desc"; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "PRDProductBasis"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PRDProductBasis", cnnTemp); + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetProductRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetProductRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetProductRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetProductBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetProductRet; + + } + + private int AddUnitBasis(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strUnitNo, string strCreator, DateTime datCreateDate, string strDescription = "", string strReturnUnitType = defString) + { + int AddUnitBasisRet = default(int); + AddUnitBasisRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select UnitType From tblSysUnitBasis" + " Where UnitNo='" + strUnitNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strReturnUnitType = Conversions.ToString(drTemp["UnitType"]); + } + else + { + // 新增單位主檔 + strSQL = "Insert Into tblSysUnitBasis " + "(UnitNo, UnitType, SystemUnit, TransferRate, IssueState, Description, Creator, CreateDate) " + " Values('" + strUnitNo + "','" + strUnitNo + "','" + strUnitNo + "',1,2,'" + strDescription + "','" + strCreator + "', To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // UnitType,直接給UnitNo。 + strReturnUnitType = strUnitNo; + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddUnitBasisRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddUnitBasisRet; + + } + private int AddProductType(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strProductType, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddProductTypeRet = default(int); + AddProductTypeRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select ProductType From tblPRDType" + " Where ProductType='" + strProductType + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增ProductType主檔 + strSQL = "Insert Into tblPRDType " + "(ProductType, Description, IssueState, Creator, CreateDate) " + " Values('" + strProductType + "','" + strDescription + "',2,'" + strCreator + "', To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddProductTypeRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddProductTypeRet; + + } + + private int AddMaterialType(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strMaterialType, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddMaterialTypeRet = default(int); + AddMaterialTypeRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select MaterialType From tblMTLMaterialType" + " Where MaterialType='" + strMaterialType + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增MaterialType主檔 + strSQL = "Insert Into tblMTLMaterialType " + "(MaterialType, Description, IssueState, Creator, CreateDate) " + " Values('" + strMaterialType + "','" + strDescription + "',2,'" + strCreator + "', To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddMaterialTypeRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddMaterialTypeRet; + + } + + // Private Function ProductIntegration_MES_IMAA_T_Transfer_PRD(ByRef cnnMES As OleDb.OleDbConnection, _ + // ByRef cnnT100 As OleDb.OleDbConnection, _ + // ByRef aryReturnMessage As ArrayList, _ + // ByVal EventTime As DateTime, _ + // ByVal drvIF As DataRowView) As Integer + // ProductIntegration_MES_IMAA_T_Transfer_PRD = -1 'Return -1:fail,0:Success + + // '-------------------------------------------------- + // 'MES_IMAA_T 中介表 拋轉 MES 產品主檔. + // '-------------------------------------------------- + // '固定處理條件 ,imaa004料件類別=A(組合/加工品). + // 'aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + // 'EventTime ,請傳入執行時間. + + // Dim drTemp As OleDb.OleDbDataReader + // Dim daTemp As OleDb.OleDbDataAdapter + // Dim dsTemp As New DataSet + + // Dim colSQL_T100, colSQL_T100_Rows As New Collection 'T100中介DB(MES回填處理記錄). + // Dim colSQL_2MES, colSQL_2MES_Rows As New Collection 'MES正式異動資料(主要). + // Dim strSQL As String + + // ' 每筆中介交易記錄 + // Dim strMES_MESSAGE As String '錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + // Dim aryMES_Message As New ArrayList 'Catch Error Message (Exception及MES判定錯誤訊息)。 + + // '=========================================================== + // ' 宣告 其他 變數 + // '=========================================================== + // Dim datNow As DateTime + + // Try + // '宣告拋轉中介表名稱(固定) + // Dim strIfTableName As String = "MES_IMAA_T" + + // '宣告拋轉中介表資料使用變數 + // Dim strERP_ProductNo, strERP_ProductName, strERP_UnitNo, strERP_status As String + // Dim strERP_ProductVersion As String = "1" '未傳入時預設為1。 + + // 'MES資料使用變數 + // Dim strReturnUnitType As String + + // '預設值 + // Dim strProductType As String = "PRODUCT" '給予預設值"PRODUCT",若不存在則自動新增產品類別. + // Dim intIssueState As Integer = 0 + // Dim intCurVersion As Integer = 0 + // Dim strSpecNo As String = "N/A" + + // '----------------------------------------------------------- + // '固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // '----------------------------------------------------------- + // If AddProductType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strProductType, _ + // strERPCreator, EventTime, "AutoRun建立") < 0 Then Exit Try + + // 'MES_Result為空白代表未拋轉。 + // strSQL = "Select * From " & strIfTableName & _ + // " Where MES_Result Is Null" + // cmmTempERP = New OleDb.OleDbCommand(strSQL, cnnERP) + // daTemp = New OleDb.OleDbDataAdapter(cmmTempERP) + // daTemp.Fill(dsTemp, "mes_imaa_t") + // cmmTempERP.Dispose() + + // 'If dsTemp.Tables("mes_imaa_t").Rows.Count > 0 Then + + // ' Dim strERP_imaa001, strERP_imaa004, strERP_tran_time As String + // ' Dim strMES_Result As String + // ' Dim colRecUnitInfo As New Collection '收集所有UnitNo,以判斷是否需Insert資料. + + // ' '-------------------------------------------------- + // ' '必須以tran_Time順序,逐筆處理中介交易記錄。 + // ' '每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // ' ' (同包Transaction, 處理完畢後再一起commit) + // ' '當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // ' '-------------------------------------------------- + + // ' 'Sort + // ' dsTemp.Tables("mes_imaa_t").DefaultView.Sort = "tran_Time,imaa001" + + // ' For Each drvIF As DataRowView In dsTemp.Tables("mes_imaa_t").DefaultView + + // ' 'reset + // ' datNow = Now 'Now + // ' strMES_Result = "9" '預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + // ' strMES_MESSAGE = "" '錯誤訊息 + // ' aryMES_Message.Clear() + + // ' colSQL_2MES.Clear() + // ' colSQL_2MES_Rows.Clear() + // ' colSQL_T100.Clear() + // ' colSQL_T100_Rows.Clear() + + // ' Try + + // '----------------------------------------------------------- + // '取出各欄位資料 + // '----------------------------------------------------------- + // '轉大寫 + // strERP_ProductNo = drvIF("imaa001").ToString.Trim.ToUpper + // strERP_ProductVersion = drvIF("imaa002").ToString.Trim.ToUpper + // strERP_ProductName = drvIF("imaal003").ToString.Trim + // strERP_status = drvIF("status").ToString.Trim.ToUpper + + // '轉小寫 + // strERP_UnitNo = drvIF("imae016").ToString.Trim.ToLower 'ToLower + + // Select Case strERP_status + // Case "A" 'A:新增 + + + // '檢查是否有此產品設定 + // strSQL = "Select ProductNo From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If Not drTemp.Read Then + + // '----------------------------------------------------------- + // '產品編號合理性檢查 + // '----------------------------------------------------------- + // '(1)檢查ProductNo是否已存在於tblPRDType(因與ProductType共用Property故編號不可一樣). + // strSQL = "Select ProductType From tblPRDType Where ProductType='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES產品類別主檔, 產品編號與產品類別不允許相同!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '(2)檢查ProductNo是否已存在於tblPRDModuleBasis(因與ModuleNo共用部份Table,故號不可一樣) + // strSQL = "Select ModuleNo From tblPRDModuleBasis Where ModuleNo='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES模組主檔, 產品編號與模組編號不允許相同!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '(3)檢查物料主檔: + // '因產品可能是半成品,會當成料來使用, + // '在BOM表(tblPRDBOM)、用料清單(tblOEMOMaterialList)及kcWIP.clsLot的處理邏輯上都沒有加上MaterialLevel. + // '故ProductNo不可與MaterialNo一樣. + // strSQL = "Select MaterialNo From tblMTLMaterialBasis Where MaterialNo ='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES物料主檔, 物料編號與產品編號不允許相同!! 半成品可會當成料來使用!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + + // '----------------------------------------------------------- + // '新增MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Insert Into tblPRDProductBasis " & _ + // "(ProductNo,ProductVersion,ProductName,ProductType," & _ + // " UnitNo,UnitType,SpecNo,Description," & _ + // " IssueState,CurVersion,Creator,CreateDate)" + // strSQL += " Values('" & strERP_ProductNo & "','" & strERP_ProductVersion & "','" & strERP_ProductName & "','" & strProductType & "','" & _ + // strERP_UnitNo & "','" & strReturnUnitType & "','" & strSpecNo & "','AutoRun建立'," & _ + // intIssueState & "," & intCurVersion & ",'" & strERPCreator & "'," & _ + // "To_Date('" & Format(EventTime, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 已存在MES, 不允許新增!!") + + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + + // Case "U" 'U:修改 + + // '檢查是否有此產品設定 + // strSQL = "Select IssueState From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // 'ERPws標準功能不論IssueState為何皆允許修改. + + // '----------------------------------------------------------- + // '修改MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Update tblPRDProductBasis Set " & _ + // " UnitNo='" & strERP_UnitNo & "'" & _ + // ",UnitType='" & strReturnUnitType & "'" & _ + // ",ProductName='" & strERP_ProductName & "'" + + // '注意事項:產品與物料,當IssueState=-1的更新方式不同. + // 'MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // If drTemp("IssueState") = -1 Then strSQL += ",IssueState = 0" + + // strSQL += " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 不存在MES, 不允許修改!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case "D" 'D:刪除 + + // '檢查是否有此產品設定 + // strSQL = "Select IssueState From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // If drTemp("IssueState") = 0 Then + + // '----------------------------------------------------------- + // '先刪除MES產品相關設定 + // '----------------------------------------------------------- + // '1.tblPRDProductProperty + // strSQL = "Delete From tblPRDProductProperty " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '2.tblPRDProductProcess + // strSQL = "Delete From tblPRDProductProcess " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '3.tblPRDOPAttrib + // 'Parameter:Item + // strSQL = "Delete From tblPRDOPAttrib " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '4.tblPRDOPRule + // 'Parameter:Rule + // strSQL = "Delete From tblPRDOPRule " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '5.tblPRDOPEQPRecipe + // 'Parameter:EQPRecipe + // strSQL = "Delete From tblPRDOPEQPRecipe " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '6.tblPRDOpQCItemParameter + // '2008/06/02,sammi.取消產品參數QCItem的參數設定功能,由SPC線上管制要因來變更抽樣計畫功能處理. + // '暫時先不移處,因FK會造成無法刪除. + // 'Parameter:QCItem Parameter + // strSQL = "Delete From tblPRDOpQCItemParameter " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '7.tblPRDOP + // strSQL = "Delete From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '8.tblPRDBOM + // strSQL = "Delete From tblPRDBOM " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '9.tblPRDOPBusinessRuleRelation + // strSQL = "Delete From tblPRDOPBusinessRuleRelation " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '10.tblPRDOPRuleXml_CLOB + // '2006/05/11,sammi.處理DataGuard not support Long Type probleam. + // If Not objDBcom.DBSupportLongType Then + // strSQL = "Delete From tblPRDOPRuleXml_CLOB " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + // End If + + // '11.tblPRDOPBusinessRule + // strSQL = "Delete From tblPRDOPBusinessRule " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '12.tblPRDOPDescription + // strSQL = "Delete From tblPRDOPDescription " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '13.tblPRDOPArea + // strSQL = "Delete From tblPRDOPArea " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '14.tblPRDAccessory + // strSQL = "Delete From tblPRDAccessory" & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '15.tblPRDOPSubOP + // ' 用 途:刪除產品作業站中子工序,因晶發專案客製於標準版中 + // ' 撰寫人員:Sam.Hsu + // ' 建立日期:2008/06/13 + // strSQL = "Delete From tblPRDOPSubOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '16.tblPRDRecipe + // strSQL = "Delete From tblPRDRecipe " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '17.tblPRDQCItem + // strSQL = "Delete From tblPRDQCItem " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '18.tblPRDProductSerialRuleBasis + // strSQL = "Delete From tblPRDProductSerialRuleBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '19.tblPRDProductSerialRuleDetail + // strSQL = "Delete From tblPRDProductSerialRuleDetail " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '20.tblPRDPackingAccessory + // strSQL = "Delete From tblPRDPackingAccessory " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '21.tblPRDProductLabelRuleBasis + // strSQL = "Delete From tblPRDProductLabelRuleBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '22.tblPRDProductLabelRuleDetail + // strSQL = "Delete From tblPRDProductLabelRuleDetail " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '22.tblPRDProductLabelRuleDetail_M + // strSQL = "Delete From tblPRDProductLabelRuleDetail_M " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '23.tblPRDRunTimeSetup + // strSQL = "Delete From tblPRDRunTimeSetup " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '----------------------------------------------------------- + // '刪除MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Delete From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + + // Else + // '----------------------------------------------------------- + // '作廢MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Update tblPRDProductBasis Set " & _ + // " IssueState=-1" & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // End If + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 不存在MES, 不允許刪除!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case Else + // aryMES_Message.Add("ERP資料狀態(Status):" & strERP_status & "無效, 不允許執行!!") + // End Select + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // ' '=============================================================================== + // ' '(正常程序)(MES處理結果, 成功回寫1, 失敗回寫9). + // ' '=============================================================================== + + // ' If aryMES_Message.Count = 0 Then + // ' strMES_Result = "1" + // ' Else + // ' '組合執行錯誤字串: Chr(10)分隔 + // ' strMES_MESSAGE = ArrayList2String(aryMES_Message) + // ' If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // ' GoTo lblExitTry_2_NextRow '--兩層 Try Catch 易混沌,不用 Exit Try 用 GoTo. + // ' End If + + + // ' 'MES_Message長度4000限制, 截取0-3996碼加"...". + // ' If strMES_MESSAGE.Length > 4000 Then strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) & "..." + + // ' '---取消前面異動SQL--- + // ' colSQL_2MES.Clear() + // ' colSQL_2MES_Rows.Clear() + // ' End If + + // ' '----------------------------------------------------------- + // ' '回填中介表資訊,(注意)各個資料表的PK不同。 + // ' '----------------------------------------------------------- + // ' 'MES_RESULT ,MES處理結果,預設值為空值,該筆資料處理成功回寫1,失敗回寫9. + // ' 'MES_MESSAGE,MES處理失敗的原因,失敗時將EXCEPTION回寫(EXCEPTION 或 MES判定不合理資料). + // ' 'MES_TIME ,MES處理時間,不論成功或失敗將時間回填(使用標準格式:yyyy/MM/dd HH:mm:ss). + // ' '----------------------------------------------------------- + // ' 'Update + // ' strSQL = "Update " & strIfTableName & " Set " & _ + // ' " MES_RESULT = '" & strMES_Result & "'" + + // ' 'MES_MESSAGE + // ' If strMES_MESSAGE <> "" Then strSQL += ",MES_MESSAGE = '" & ChkSingleQuation(strMES_MESSAGE) & "'" + + // ' strSQL += ",MES_TIME = '" & Format(datNow, "yyyy/MM/dd HH:mm:ss") & "'" + + // ' 'Where + // ' strSQL += " Where Upper(Trim(imaa001)) = '" & strERP_imaa001 & "'" & _ + // ' " And Upper(Trim(tran_time)) = '" & strERP_tran_time & "'" + // ' colSQL_T100.Add(strSQL) + // ' colSQL_T100_Rows.Add(1) + + // ' '-------------------------------------------------- + // ' '四、MES資料庫異動 + // ' '-------------------------------------------------- + // ' If colSQL_2MES.Count > 0 Then + // ' Call ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows) + // ' End If + + // ' '-------------------------------------------------- + // ' '五、T100中介資料庫異動 + // ' '-------------------------------------------------- + // ' Call ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows) + + // 'Catch EX_drvIF As Exception + + // ' aryMES_Message.Add("EX_drvIF.Exception" & Chr(10) & EX_drvIF.Message.ToString) + + // ' '組合執行錯誤字串: Chr(10)分隔 + // ' strMES_MESSAGE = ArrayList2String(aryMES_Message) + + // ' '2016/01/13, 直接異動中介表-------------------------- + // ' ''If strMES_MESSAGE = defString Then + // ' '' '當錯誤字串組合失敗,在Finally後會記錄PK. + // ' '' GoTo lblExitTry_2_NextRow '--兩層 Try Catch 易混沌,不用 Exit Try 用 GoTo. + // ' ''End If + // ' '--------------------------------------------------# + + // ' 'MES_Message長度4000限制, 截取0-3996碼加"...". + // ' If strMES_MESSAGE.Length > 4000 Then strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) & "..." + + // ' '---取消前面收集SQL--- + // ' colSQL_2MES.Clear() + // ' colSQL_2MES_Rows.Clear() + + // ' colSQL_T100.Clear() '若T100中介資料庫異動fail。 + // ' colSQL_T100_Rows.Clear() + + // ' '----------------------------------------------------------- + // ' '(EX_drvIF.Exception) + // ' '回填中介表資訊,(注意)各個資料表的PK不同。 + // ' '----------------------------------------------------------- + // ' 'MES_RESULT ,MES處理結果,預設值為空值,該筆資料處理成功回寫1,失敗回寫9. + // ' 'MES_MESSAGE,MES處理失敗的原因,失敗時將EXCEPTION回寫(EXCEPTION 或 MES判定不合理資料). + // ' 'MES_TIME ,MES處理時間,不論成功或失敗將時間回填(使用標準格式:yyyy/MM/dd H:mm:ss). + // ' '----------------------------------------------------------- + // ' strSQL = "Update " & strIfTableName & " Set " & _ + // ' " MES_RESULT = '9'" & _ + // ' ",MES_MESSAGE = '" & ChkSingleQuation(strMES_MESSAGE) & "'" & _ + // ' ",MES_TIME = To_Date('" & Format(datNow, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " & _ + // ' " Where Upper(Trim(imaa001)) = '" & strERP_imaa001 & "'" & _ + // ' " And Upper(Trim(tran_time)) = '" & strERP_tran_time & "'" + // ' colSQL_T100.Add(strSQL) + // ' colSQL_T100_Rows.Add(1) + + // ' '-------------------------------------------------- + // ' '六、T100中介資料庫異動(EX_drvIF) + // ' '-------------------------------------------------- + // ' Call ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows) + + // 'End Try + + // 'lblExitTry_2_NextRow: + + // ' '當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + // ' If aryMES_Message.Count > 0 Then + + // ' '''匯整記錄中介表的PK資訊. + + // ' '因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // ' '故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // ' '(1) + // ' aryReturnMessage.Add("tran_time:" & strERP_tran_time & ", imaa001:" & strERP_imaa001 & ", imaa004:" & strERP_imaa004) + + // ' '(2) + // ' For Each strErr As String In aryMES_Message + // ' aryReturnMessage.Add(strErr) + // ' Next strErr + // ' End If + + // ' '計算失敗筆數 + // ' If strMES_Result = "9" Then + // ' If strERP_imaa004 = "A" Then + // ' intFailCount_PRD += 1 + // ' Else + // ' intFailCount_MTL += 1 + // ' End If + // ' End If + + // ' '不管成功或失敗,繼續下一筆。 + + // ' Next drvIF + + // 'End If + + // 'Return + // ProductIntegration_2MES_PRD = 0 + + // Catch ex As Exception + // aryMES_Message.Add(ex.Message.ToString) + // Throw + // Finally + // If Not drTemp Is Nothing Then drTemp.Close() + // End Try + + // End Function + + + // Private Function ProductIntegration_2MES_PRD(ByRef cnnMES As OleDb.OleDbConnection, _ + // ByRef colSQL As Collection, ByRef colSQL_Rows As Collection, _ + // ByRef aryMES_Message As ArrayList, _ + // ByRef colRecUnitInfo As Collection, _ + // ByVal EventTime As DateTime, _ + // ByVal drvIF As DataRowView) As Integer + // ProductIntegration_2MES_PRD = -1 'Return -1:fail,0:Success + + // '固定處理條件 ,imaa004料件類別=A(組合/加工品). + // 'aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + // 'colRecUnitInfo ,必須傳入單位資料,以判斷是否需Insert資料. + // 'EventTime ,請傳入執行時間. + // 'drvIF ,傳入單筆資料列,此Function進行檢查及sqlcommand收集. + + // Dim drTemp As OleDb.OleDbDataReader + // Dim strSQL As String + + // Try + + // '宣告拋轉中介表資料使用變數 + // Dim strERP_ProductNo, strERP_ProductName, strERP_UnitNo, strERP_status As String + // Dim strERP_ProductVersion As String = "1" '未傳入時預設為1。 + + // 'MES資料使用變數 + // Dim strReturnUnitType As String + + // '預設值 + // Dim strProductType As String = "PRODUCT" '給予預設值"PRODUCT",若不存在則自動新增產品類別. + // Dim intIssueState As Integer = 0 + // Dim intCurVersion As Integer = 0 + // Dim strSpecNo As String = "N/A" + + // '----------------------------------------------------------- + // '固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // '----------------------------------------------------------- + // If AddProductType(cnnMES, colSQL, colSQL_Rows, aryMES_Message, strProductType, _ + // strERPCreator, EventTime, "AutoRun建立") < 0 Then Exit Try + + // '----------------------------------------------------------- + // '取出各欄位資料 + // '----------------------------------------------------------- + // '轉大寫 + // strERP_ProductNo = drvIF("imaa001").ToString.Trim.ToUpper + // strERP_ProductVersion = drvIF("imaa002").ToString.Trim.ToUpper + // strERP_ProductName = drvIF("imaal003").ToString.Trim + // strERP_status = drvIF("status").ToString.Trim.ToUpper + + // '轉小寫 + // strERP_UnitNo = drvIF("imae016").ToString.Trim.ToLower 'ToLower + + // '----------------------------------------------------------- + // '產品編號合理性檢查 + // '----------------------------------------------------------- + // '(1)檢查ProductNo是否已存在於tblPRDType(因與ProductType共用Property故編號不可一樣). + // strSQL = "Select ProductType From tblPRDType Where ProductType='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES產品類別主檔, 產品編號與產品類別不允許相同!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '(2)檢查ProductNo是否已存在於tblPRDModuleBasis(因與ModuleNo共用部份Table,故號不可一樣) + // strSQL = "Select ModuleNo From tblPRDModuleBasis Where ModuleNo='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES模組主檔, 產品編號與模組編號不允許相同!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '(3)檢查物料主檔: + // '因產品可能是半成品,會當成料來使用, + // '在BOM表(tblPRDBOM)、用料清單(tblOEMOMaterialList)及kcWIP.clsLot的處理邏輯上都沒有加上MaterialLevel. + // '故ProductNo不可與MaterialNo一樣. + // strSQL = "Select MaterialNo From tblMTLMaterialBasis Where MaterialNo ='" & strERP_ProductNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 已存在於MES物料主檔, 物料編號與產品編號不允許相同!! 半成品可會當成料來使用!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '----------------------------------------------------------- + // '檢查單位資料,若不存在則自動新增。 + // '----------------------------------------------------------- + // strReturnUnitType = "" + // If Not colRecUnitInfo.Contains(strERP_UnitNo) Then + + // If AddUnitBasis(cnnMES, colSQL, colSQL_Rows, aryMES_Message, strERP_UnitNo, _ + // strERPCreator, EventTime, "AutoRun建立", strReturnUnitType) = 0 Then + // colRecUnitInfo.Add(strReturnUnitType, strERP_UnitNo) '記錄UnitType,UnitNo + // Else + // If aryMES_Message.Count > 0 Then Exit Try + // End If + // Else + // strReturnUnitType = colRecUnitInfo(strERP_UnitNo) + // End If + // '-----------------------------------------------------------# + + // Select Case strERP_status + // Case "A" 'A:新增 + + // '檢查是否有此產品設定 + // strSQL = "Select ProductNo From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If Not drTemp.Read Then + // '----------------------------------------------------------- + // '新增MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Insert Into tblPRDProductBasis " & _ + // "(ProductNo,ProductVersion,ProductName,ProductType," & _ + // " UnitNo,UnitType,SpecNo,Description," & _ + // " IssueState,CurVersion,Creator,CreateDate)" + // strSQL += " Values('" & strERP_ProductNo & "','" & strERP_ProductVersion & "','" & strERP_ProductName & "','" & strProductType & "','" & _ + // strERP_UnitNo & "','" & strReturnUnitType & "','" & strSpecNo & "','AutoRun建立'," & _ + // intIssueState & "," & intCurVersion & ",'" & strERPCreator & "'," & _ + // "To_Date('" & Format(EventTime, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 已存在MES, 不允許新增!!") + + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + + // Case "U" 'U:修改 + + // '檢查是否有此產品設定 + // strSQL = "Select IssueState From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // 'ERPws標準功能不論IssueState為何皆允許修改. + + // '----------------------------------------------------------- + // '修改MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Update tblPRDProductBasis Set " & _ + // " UnitNo='" & strERP_UnitNo & "'" & _ + // ",UnitType='" & strReturnUnitType & "'" & _ + // ",ProductName='" & strERP_ProductName & "'" + + // '注意事項:產品與物料,當IssueState=-1的更新方式不同. + // 'MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // If drTemp("IssueState") = -1 Then strSQL += ",IssueState = 0" + + // strSQL += " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 不存在MES, 不允許修改!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case "D" 'D:刪除 + + // '檢查是否有此產品設定 + // strSQL = "Select IssueState From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // If drTemp("IssueState") = 0 Then + + // '----------------------------------------------------------- + // '先刪除MES產品相關設定 + // '----------------------------------------------------------- + // '1.tblPRDProductProperty + // strSQL = "Delete From tblPRDProductProperty " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '2.tblPRDProductProcess + // strSQL = "Delete From tblPRDProductProcess " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '3.tblPRDOPAttrib + // 'Parameter:Item + // strSQL = "Delete From tblPRDOPAttrib " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '4.tblPRDOPRule + // 'Parameter:Rule + // strSQL = "Delete From tblPRDOPRule " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '5.tblPRDOPEQPRecipe + // 'Parameter:EQPRecipe + // strSQL = "Delete From tblPRDOPEQPRecipe " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '6.tblPRDOpQCItemParameter + // '2008/06/02,sammi.取消產品參數QCItem的參數設定功能,由SPC線上管制要因來變更抽樣計畫功能處理. + // '暫時先不移處,因FK會造成無法刪除. + // 'Parameter:QCItem Parameter + // strSQL = "Delete From tblPRDOpQCItemParameter " & _ + // " Where SerialNo In (Select SerialNo From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '7.tblPRDOP + // strSQL = "Delete From tblPRDOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '8.tblPRDBOM + // strSQL = "Delete From tblPRDBOM " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '9.tblPRDOPBusinessRuleRelation + // strSQL = "Delete From tblPRDOPBusinessRuleRelation " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '10.tblPRDOPRuleXml_CLOB + // '2006/05/11,sammi.處理DataGuard not support Long Type probleam. + // If Not objDBcom.DBSupportLongType Then + // strSQL = "Delete From tblPRDOPRuleXml_CLOB " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + // End If + + // '11.tblPRDOPBusinessRule + // strSQL = "Delete From tblPRDOPBusinessRule " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '12.tblPRDOPDescription + // strSQL = "Delete From tblPRDOPDescription " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '13.tblPRDOPArea + // strSQL = "Delete From tblPRDOPArea " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '14.tblPRDAccessory + // strSQL = "Delete From tblPRDAccessory" & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '15.tblPRDOPSubOP + // ' 用 途:刪除產品作業站中子工序,因晶發專案客製於標準版中 + // ' 撰寫人員:Sam.Hsu + // ' 建立日期:2008/06/13 + // strSQL = "Delete From tblPRDOPSubOP " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '16.tblPRDRecipe + // strSQL = "Delete From tblPRDRecipe " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '17.tblPRDQCItem + // strSQL = "Delete From tblPRDQCItem " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '18.tblPRDProductSerialRuleBasis + // strSQL = "Delete From tblPRDProductSerialRuleBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '19.tblPRDProductSerialRuleDetail + // strSQL = "Delete From tblPRDProductSerialRuleDetail " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '20.tblPRDPackingAccessory + // strSQL = "Delete From tblPRDPackingAccessory " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '21.tblPRDProductLabelRuleBasis + // strSQL = "Delete From tblPRDProductLabelRuleBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '22.tblPRDProductLabelRuleDetail + // strSQL = "Delete From tblPRDProductLabelRuleDetail " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '22.tblPRDProductLabelRuleDetail_M + // strSQL = "Delete From tblPRDProductLabelRuleDetail_M " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '23.tblPRDRunTimeSetup + // strSQL = "Delete From tblPRDRunTimeSetup " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '----------------------------------------------------------- + // '刪除MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Delete From tblPRDProductBasis " & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + + // Else + // '----------------------------------------------------------- + // '作廢MES產品設定 + // '----------------------------------------------------------- + // strSQL = "Update tblPRDProductBasis Set " & _ + // " IssueState=-1" & _ + // " Where ProductNo='" & strERP_ProductNo & "'" & _ + // " And ProductVersion='" & strERP_ProductVersion & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // End If + // Else + // aryMES_Message.Add("產品編號(imaa001):" & strERP_ProductNo & ", 產品版本(imaa002):" & strERP_ProductVersion & ", 不存在MES, 不允許刪除!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case Else + // aryMES_Message.Add("ERP資料狀態(Status):" & strERP_status & "無效, 不允許執行!!") + // End Select + + // If aryMES_Message.Count > 0 Then Exit Try + + // 'Return + // ProductIntegration_2MES_PRD = 0 + + // Catch ex As Exception + // aryMES_Message.Add(ex.Message.ToString) + // Throw + // Finally + // If Not drTemp Is Nothing Then drTemp.Close() + // End Try + + // End Function + + // Private Function ProductIntegration_2MES_MTL(ByRef cnnMES As OleDb.OleDbConnection, _ + // ByRef colSQL As Collection, ByRef colSQL_Rows As Collection, _ + // ByRef aryMES_Message As ArrayList, _ + // ByRef colRecUnitInfo As Collection, _ + // ByVal EventTime As DateTime, _ + // ByVal drvIF As DataRowView) As Integer + // ProductIntegration_2MES_MTL = -1 'Return -1:fail,0:Success + + // '固定處理條件 ,imaa004料件類別=M(材料/零件/商品). + // 'aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + // 'colRecUnitInfo ,必須傳入單位資料,以判斷是否需Insert資料. + // 'EventTime ,請傳入執行時間. + // 'drvIF ,傳入單筆資料列,此Function進行檢查及sqlcommand收集. + + // Dim cmmTemp2 As OleDb.OleDbCommand + // Dim drTemp, drTemp2 As OleDb.OleDbDataReader + // Dim strSQL As String + + // Try + + // '宣告拋轉中介表資料使用變數 + // Dim strERP_MaterialNo, strERP_MaterialName, strERP_MaterialSpec, strERP_UnitNo, strERP_status As String + + // 'MES資料使用變數 + // Dim strReturnUnitType As String + + // '預設值 + // Dim strMaterialType As String = "MATERIL" '給予預設值"MATERIL",若不存在則自動新增物料類別. + // Dim intPutInPlace As Integer = 3 '投料點:預設為3(工單). + // Dim intCountWay As Integer = 1 '計量方法:預設為1(實際用量). + // Dim intCheckLotNo As Integer = 1 '物料批號檢查:預設為0(不檢查批號). + // Dim intIssueState As Integer = 0 + // Dim strSpecNo As String = "N/A" + + // '----------------------------------------------------------- + // '固定檢查MaterialType='MATERIL'資料,若不存在則自動新增。 + // '----------------------------------------------------------- + // If AddMaterialType(cnnMES, colSQL, colSQL_Rows, aryMES_Message, strMaterialType, _ + // strERPCreator, EventTime, "AutoRun建立") < 0 Then Exit Try + + // '----------------------------------------------------------- + // '取出各欄位資料 + // '----------------------------------------------------------- + // '轉大寫 + // strERP_MaterialNo = drvIF("imaa001").ToString.Trim.ToUpper + // strERP_MaterialName = drvIF("imaal003").ToString.Trim.ToUpper + // strERP_MaterialSpec = drvIF("imaal004").ToString.Trim.ToUpper + // strERP_status = drvIF("status").ToString.Trim.ToUpper + + // '轉小寫 + // strERP_UnitNo = drvIF("imae016").ToString.Trim.ToLower 'ToLower + + + // '----------------------------------------------------------- + // '物料編號合理性檢查 + // '----------------------------------------------------------- + // '(1)檢查MaterialNo是否已存在於tblMTLMaterialType(因與MaterialType共用Property故編號不可一樣) + // strSQL = "Select MaterialType From tblMTLMaterialType Where MaterialType='" & strERP_MaterialNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 已存在於MES物料類別主檔, 物料編號與物料類別不允許相同!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '(2)檢查產品主檔: + // '因產品可能是半成品,會當成料來使用, + // '在BOM表(tblPRDBOM)、用料清單(tblOEMOMaterialList)及kcWIP.clsLot的處理邏輯上都沒有加上MaterialLevel. + // '故MaterialNo不可與ProductNo一樣. + // strSQL = "Select ProductNo From tblPRDProductBasis Where ProductNo ='" & strERP_MaterialNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader() + // If drTemp.Read Then + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 已存在於MES產品主檔, 物料編號與產品編號不允許相同!! 半成品可會當成料來使用!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // '----------------------------------------------------------- + // '檢查單位資料,若不存在則自動新增。 + // '----------------------------------------------------------- + // strReturnUnitType = "" + // If Not colRecUnitInfo.Contains(strERP_UnitNo) Then + + // If AddUnitBasis(cnnMES, colSQL, colSQL_Rows, aryMES_Message, strERP_UnitNo, _ + // strERPCreator, EventTime, "AutoRun建立", strReturnUnitType) = 0 Then + // colRecUnitInfo.Add(strReturnUnitType, strERP_UnitNo) '記錄UnitType,UnitNo + // Else + // If aryMES_Message.Count > 0 Then Exit Try + // End If + // Else + // strReturnUnitType = colRecUnitInfo(strERP_UnitNo) + // End If + // '-----------------------------------------------------------# + + // Select Case strERP_status + // Case "A" 'A:新增 + + // '檢查是否有此物料設定 + // strSQL = "Select MaterialNo From tblMTLMaterialBasis " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If Not drTemp.Read Then + // '----------------------------------------------------------- + // '新增MES物料設定 + // 'MaterialName,MaterialSpec 必要欄位. + // '----------------------------------------------------------- + // strSQL = "Insert Into tblMTLMaterialBasis " & _ + // "(MaterialNo, MaterialName, MaterialSpec, MaterialType," & _ + // " PutInPlace, CountWay, CheckLotNo, UnitType, UnitNo, Description," & _ + // " IssueState, Creator, CreateDate)" + // strSQL += " Values('" & strERP_MaterialNo & "','" & strERP_MaterialName & "','" & strERP_MaterialSpec & "','" & strMaterialType & "'," & _ + // intPutInPlace & "," & intCountWay & "," & intCheckLotNo & ",'" & strReturnUnitType & "','" & strERP_UnitNo & "','AutoRun建立'," & _ + // intIssueState & ",'" & strERPCreator & "'," & _ + // "To_Date('" & Format(EventTime, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 已存在MES, 不允許新增!!") + + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + + // Case "U" 'U:修改 + + // '檢查是否有此物料設定 + // strSQL = "Select IssueState From tblMTLMaterialBasis " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // 'ERPws標準功能不論IssueState為何皆允許修改. + + // '----------------------------------------------------------- + // '修改MES物料設定 + // '----------------------------------------------------------- + // strSQL = "Update tblMTLMaterialBasis Set " & _ + // " UnitNo='" & strERP_UnitNo & "'" & _ + // ",UnitType='" & strReturnUnitType & "'" + + // '注意事項:產品與物料,當IssueState=-1的更新方式不同. + // 'MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + // If drTemp("IssueState") = -1 Then strSQL += ",IssueState = 2" + + // strSQL += " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 不存在MES, 不允許修改!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case "D" 'D:刪除 + + // '檢查是否有此物料設定 + // strSQL = "Select IssueState From tblMTLMaterialBasis " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // '----------------------------------------------------------- + // '檢查MES產品相關設定. + // '參考自kcMTL.clsMTLBasis.DelMaterialBasis(). + // '----------------------------------------------------------- + + // '(1)檢查MaterialNo是否已存在於MaterialList. + // strSQL = "Select MONo From tblOEMOMaterialList" & _ + // " Where MaterialLevel=0" & _ + // " And MaterialNo='" & strERP_MaterialNo & "'" + // cmmTemp2 = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp2 = cmmTemp2.ExecuteReader() + // If drTemp2.Read Then + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 存在於MES工單物料清單(工單編號:" & drTemp2("MONo") & ")!!") + // End If + // drTemp2.Close() + // cmmTemp2.Dispose() + + // '(2)檢查MaterialNo是否已存在於BOM. + // strSQL = "Select ProductNo,ProductVersion From tblPRDBOM " & _ + // " Where NodeType=0 " & _ + // " And NodeNo='" & strERP_MaterialNo & "'" + // cmmTemp2 = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp2 = cmmTemp2.ExecuteReader() + // If drTemp2.Read Then + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 存在於MES產品BOM表(產品編號:" & drTemp2("ProductNo") & ",產品版本:" & drTemp2("ProductVersion") & ")!!") + // End If + // drTemp2.Close() + // cmmTemp2.Dispose() + + // 'PS.還有很多相關Table都未檢查,也未設FK.(kcMTL.clsMTLBasis註解) + // '-----------------------------------------------------------# + + + // If drTemp("IssueState") = 0 Then + + // '----------------------------------------------------------- + // '先刪除MES物料相關設定 + // '----------------------------------------------------------- + // '1.tblMTLMaterialProperty + // strSQL = "Delete From tblMTLMaterialProperty " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '2.tblMTLMaterialVendorMap + // strSQL = "Delete From tblMTLMaterialVendorMap " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '3.tblMTLMaterialGroupDetail + // strSQL = "Delete From tblMTLMaterialGroupDetail " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(-1) + + // '----------------------------------------------------------- + // '刪除MES物料設定 + // '----------------------------------------------------------- + // strSQL = "Delete From tblMTLMaterialBasis " & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // '----------------------------------------------------------- + // '作廢MES物料設定 + // '----------------------------------------------------------- + // strSQL = "Update tblMTLMaterialBasis Set " & _ + // " IssueState=-1" & _ + // " Where MaterialNo='" & strERP_MaterialNo & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + // End If + + // Else + // aryMES_Message.Add("物料編號(imaa001):" & strERP_MaterialNo & ", 不存在MES, 不允許刪除!!") + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // Case Else + // aryMES_Message.Add("ERP資料狀態(Status):" & strERP_status & "無效, 不允許執行!!") + // End Select + + // If aryMES_Message.Count > 0 Then Exit Try + + // 'Return + // ProductIntegration_2MES_MTL = 0 + + // Catch ex As Exception + // aryMES_Message.Add(ex.Message.ToString) + // Throw + // Finally + // If Not cmmTemp2 Is Nothing Then cmmTemp2.Dispose() + // If Not drTemp Is Nothing Then drTemp.Close() + // If Not drTemp2 Is Nothing Then drTemp2.Close() + // End Try + + // End Function + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(客戶、物料供應商) + + // 功 能: MES InterFaceTable 轉入 MES正式區(客戶、物料供應商) + // 傳回值: success(成功), fail(失敗) + private string CustVendorIntegration(Collection colParameters = null) + { + string CustVendorIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_Vendor = 0; // Vendor拋轉失敗筆數 + int intFailCount_Customer = 0; // Customer拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + CustVendorIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return CustVendorIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.交易對象主檔 MES_PMMA_T:(必須優先) + // Loop 2.交易對象主檔多語言檔 MES_PMAAL_T + // Loop 3.交易對象料號對應檔 MES_PMAO_T + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_PMMA_T_1 = "MES_PMAA_T"; + string MES_PMAAL_T_2 = "MES_PMAAL_T"; + string MES_PMAO_T_3 = "MES_PMAO_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.交易對象主檔 MES_PMMA_T + // -------------------------------------------------- + strSQL = "Select T1.*, T1.pmaa002 As pmaa002_Upper " + " From " + MES_PMMA_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.pmaaent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_PMMA_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_PMMA_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_PMMA_T_1].Rows.Count > 0) + { + + // 中介表資料來源說明: + // 客戶及物料供應商皆在此TABLE,以pmaa002做區分 + // 1.當pmaa002 = '1'時,此交易對象為供應商 + + drSel_IF = dsTemp.Tables[MES_PMMA_T_1].Select("pmaa002_Upper = '1'", "tran_Time,pmaa001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_Vendor + if (CustVendorIntegration_ERP2MES_Vendor(ref cnnMES, ref aryReturnMessage, ref intFailCount_Vendor, MES_PMMA_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_PMMA_T_1 + ", 交易對象(pmaa002):1, 供應商, 拋轉執行失敗!!"); + } + } + } + + // 2.當pmaa002 = '2'時,此交易對象為客戶 + + drSel_IF = dsTemp.Tables[MES_PMMA_T_1].Select("pmaa002_Upper = '2'", "tran_Time,pmaa001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_Customer + if (CustVendorIntegration_ERP2MES_Customer(ref cnnMES, ref aryReturnMessage, ref intFailCount_Customer, MES_PMMA_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_PMMA_T_1 + ", 交易對象(pmaa002):2, 客戶, 拋轉執行失敗!!"); + } + } + } + + string strIfWhereCond_PK; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + + // 3.當pmaa002 交易對象不正確, 資料報錯. + drSel_IF = dsTemp.Tables[MES_PMMA_T_1].Select("pmaa002_Upper <> '1' And pmaa002_Upper <> '2'", "tran_Time,pmaa002"); + foreach (DataRow drIF in drSel_IF) + { + + datNow = DateTime.Now; // Now + strMES_MESSAGE = Conversions.ToString("交易對象(pmaa002):" + drIF["pmaa002"] + ", 不正確!!"); + + // ----------------------------------------------------------- + // 正常程序 + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + strIfWhereCond_PK = Conversions.ToString(" Where pmaa001 = '" + + drIF["pmaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And pmaaent ='" + ERP_EntID + "' "); + + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryReturnMessage, MES_PMMA_T_1, strIfWhereCond_PK, "9", datNow, strMES_MESSAGE) < 0) + { + + aryReturnMessage.Add("中介表:" + MES_PMMA_T_1 + "(交易對象), " + strMES_MESSAGE); + } + + } + + } + + // -------------------------------------------------- + // Loop 2.交易對象主檔多語言檔 MES_PMAAL_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_PMAAL_T_2 + " T1" + " Where T1.MES_Result Is Null" + " And T1.pmaal002 = '" + strLanguage_T100 + "'" + " And T1.pmaalent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_PMAAL_T_2); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_PMAAL_T_2, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_PMAAL_T_2].Rows.Count > 0) + { + + // 中介表資料來源說明: + /// 供應商及客戶皆在此TABLE,以pmaa002做區分 + /// 1.當pmaa002 = '1'時,此交易對象為供應商 + /// 2.當pmaa002 = '2'時,此交易對象為客戶 + drSel_IF = dsTemp.Tables[MES_PMAAL_T_2].Select("", "tran_Time,pmaal001"); + + if (CustVendorIntegration_ERP2MES_Resource(ref cnnMES, ref aryReturnMessage, ref intFailCount_Vendor, MES_PMAAL_T_2, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_PMAAL_T_2 + "(料件多語言檔), 拋轉執行失敗!!"); + } + } + } + + // -------------------------------------------------- + // Loop 3.交易對象料號對應檔 MES_PMAO_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_PMAO_T_3 + " T1" + " Where T1.MES_Result Is Null" + " And T1.pmaoent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_PMAO_T_3); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_PMAO_T_3, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_PMAO_T_3].Rows.Count > 0) + { + + // 中介表資料來源說明: + /// 供應商及客戶皆在此TABLE,以pmaa002做區分 + /// 1.當pmaa002 = '1'時,此交易對象為供應商 + /// 2.當pmaa002 = '2'時,此交易對象為客戶 + drSel_IF = dsTemp.Tables[MES_PMAO_T_3].Select("", "tran_Time,pmao001"); + + if (CustVendorIntegration_ERP2MES_MTLVendorMap(ref cnnMES, ref aryReturnMessage, ref intFailCount_Vendor, MES_PMAO_T_3, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_PMAO_T_3 + "(交易對象料號對應檔), 拋轉執行失敗!!"); + } + } + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + CustVendorIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + CustVendorIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(供應商、客戶) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + CustVendorIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return CustVendorIntegrationRet; + // --------------------------------------------------# + + } + + private int CustVendorIntegration_ERP2MES_Vendor(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int CustVendorIntegration_ERP2MES_VendorRet = default(int); + CustVendorIntegration_ERP2MES_VendorRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_PMMA_T, 拋轉 MES 供應商主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件pmaa002料件類別=1(供應商). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增供應商:VendorName一律填入"N/A", 後續由 mes_pmaal_t交易對象主檔多語言檔更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_VendorNo, strERP_status; + + // 預設值 + int intIssueState = 2; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_VendorNo = drIF["pmaa001"].ToString().Trim().ToUpper(); + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 檢查是否有此供應商設定 + strSQL = "Select VendorNo,IssueState From tblMTLMaterialVendor " + " Where VendorNo='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblMTLMaterialVendor " + "(VendorNo,VendorName,IssueState," + " Description,Creator,CreateDate)"; + strSQL += " Values('" + strERP_VendorNo + "','N/A'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("供應商編號(pmaa001):" & strERP_VendorNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES供應商設定 + // ----------------------------------------------------------- + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblMTLMaterialVendor Set " + " IssueState = " + intIssueState + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除ME供應商相關設定 + // ----------------------------------------------------------- + if (CustVendorIntegration_DelVendor(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_VendorNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialVendor Set " + " IssueState=-1" + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("供應商編號(pmaa001):" + strERP_VendorNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where pmaa001 = '" + + drIF["pmaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And pmaaent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", pmaa001:" + drIF["pmaa001"] + ", pmaa002:" + drIF["pmaa002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + CustVendorIntegration_ERP2MES_VendorRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return CustVendorIntegration_ERP2MES_VendorRet; + + } + private int CustVendorIntegration_DelVendor(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_VendorNo) + { + int CustVendorIntegration_DelVendorRet = default(int); + CustVendorIntegration_DelVendorRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1. 刪除Contactor + strSQL = "Delete From tblMTLMaterialVendorContactor " + "Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2. 刪除MaterialVendorMap + strSQL = "Delete From tblMTLMaterialVendorMap " + "Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3. 刪除主檔 + strSQL = "Delete From tblMTLMaterialVendor " + " Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + CustVendorIntegration_DelVendorRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return CustVendorIntegration_DelVendorRet; + + } + + private int CustVendorIntegration_ERP2MES_Customer(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int CustVendorIntegration_ERP2MES_CustomerRet = default(int); + CustVendorIntegration_ERP2MES_CustomerRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_PMMA_T, 拋轉 MES 客戶主檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件pmaa002料件類別=2(客戶). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增供應商:CustomerName,CustomerSName一律填入"N/A", 後續由 mes_pmaal_t交易對象主檔多語言檔更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_CustomerNo, strERP_status; + + // 預設值 + int intIssueState = 2; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_CustomerNo = drIF["pmaa001"].ToString().Trim().ToUpper(); + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 檢查是否有此供應商設定 + strSQL = "Select CustomerNo,IssueState From tblENTCustomerBasis " + " Where CustomerNo='" + strERP_CustomerNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES客戶設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblENTCustomerBasis " + "(CustomerNo,CustomerName,CustomerSName,IssueState," + " Creator,CreateDate)"; + strSQL += " Values('" + strERP_CustomerNo + "','N/A','N/A'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("客戶編號(pmaa001):" & strERP_CustomerNo & ", 已存在MES, 不允許新增!!") + + // ----------------------------------------------------------- + // 修改MES客戶設定 + // ----------------------------------------------------------- + // 修改客戶,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + + strSQL = "Update tblENTCustomerBasis Set " + " IssueState = " + intIssueState + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES客戶相關設定 + // ----------------------------------------------------------- + if (CustVendorIntegration_DelCustomer(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_CustomerNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES客戶設定 + // ----------------------------------------------------------- + strSQL = "Update tblENTCustomerBasis Set " + " IssueState=-1" + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("客戶編號(pmaa001):" + strERP_CustomerNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where pmaa001 = '" + + drIF["pmaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And pmaaent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", pmaa001:" + drIF["pmaa001"] + ", pmaa002:" + drIF["pmaa002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + CustVendorIntegration_ERP2MES_CustomerRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return CustVendorIntegration_ERP2MES_CustomerRet; + + } + private int CustVendorIntegration_DelCustomer(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_CustomerNo) + { + int CustVendorIntegration_DelCustomerRet = default(int); + CustVendorIntegration_DelCustomerRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // Del detail + strSQL = "Delete From tblENTCustomerShipAddr " + "Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + strSQL = "Delete From tblENTCustomerContactor " + "Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // Del basis + strSQL = "Delete From tblENTCustomerBasis " + "Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + CustVendorIntegration_DelCustomerRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return CustVendorIntegration_DelCustomerRet; + + } + + private int CustVendorIntegration_ERP2MES_Resource(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int CustVendorIntegration_ERP2MES_ResourceRet = default(int); + CustVendorIntegration_ERP2MES_ResourceRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // mes_pmaal_t 中介表 拋轉 MES 供應商/客戶主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // mes_pmaa_t 交易對象主檔更新 + // status:針對產品做 Update,若拋D視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_CustVendorNo, strERP_CustVendorName, strERP_CustVendorSName; + DataRow drChkCustomer, drChkVendor; + // Dim colRecUnitInfo As New Collection '收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 編號 + strERP_CustVendorNo = drIF["pmaal001"].ToString().Trim().ToUpper(); + // 全名 + strERP_CustVendorName = drIF["pmaal003"].ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_CustVendorName)) + strERP_CustVendorName = "N/A"; + // 簡名 + strERP_CustVendorSName = drIF["pmaal004"].ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_CustVendorSName)) + strERP_CustVendorSName = modWIN.GetSubString(strERP_CustVendorName, 20); + + // ERPws標準功能不論IssueState為何皆允許修改(產品主檔或物料主檔). + + // 1.檢查是否存在MES + int intNo_ChkType = -1; // 檢查是否存在MES,物料找到(填0),產品找到(填1), Default -1 . + string strReturnUnitType; + + // 1-1.檢查是否有此客戶設定 + drChkCustomer = GetCustomerBasis(strERP_CustVendorNo, cnnMES, aryMES_Message); + if (drChkCustomer == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkCustomer["CustomerNo"] is DBNull)) + { + intNo_ChkType = 1; // Customer + + // ----------------------------------------------------------- + // 3-2.修改MES客戶設定 + // ----------------------------------------------------------- + strSQL = "Update tblENTCustomerBasis Set " + " CustomerName='" + modWIN.GetSubString(strERP_CustVendorName, 50) + "'" + ",CustomerSName='" + modWIN.GetSubString(strERP_CustVendorSName, 50) + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkCustomer["IssueState"], -1, false))) + strSQL += ",IssueState = 0"; + + // ProductVersion預設1 + strSQL += " Where CustomerNo='" + strERP_CustVendorNo + "' "; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + } + + // 1-2.檢查是否有此供應商設定 + drChkVendor = GetVendorBasis(strERP_CustVendorNo, cnnMES, aryMES_Message); + if (drChkVendor == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (!(drChkVendor["VendorNo"] is DBNull)) + { + intNo_ChkType = 0; // Vendor + + // ----------------------------------------------------------- + // 3-1.修改MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialVendor Set " + " VendorName='" + modWIN.GetSubString(strERP_CustVendorName, 50) + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkVendor["IssueState"], -1, false))) + strSQL += ",IssueState = 2"; + + strSQL += " Where VendorNo='" + strERP_CustVendorNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + } + + if (intNo_ChkType == -1) + { + // pmaa001,不存在MES的供應商主檔或客戶主檔. + aryMES_Message.Add("交易對象編號(pmaa001):" + strERP_CustVendorNo + ", 不存在MES的供應商主檔或客戶主檔, 不允許執行!!"); + // GoTo lblExitTry_2_NextRow + break; + } + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where pmaal001 = '" + + drIF["pmaal001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And pmaal002 = '" + drIF["pmaal002"] + "'" + " And pmaalent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", pmaal001:" + drIF["pmaal001"] + ", pmaal002:" + drIF["pmaal002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + CustVendorIntegration_ERP2MES_ResourceRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return CustVendorIntegration_ERP2MES_ResourceRet; + + } + private DataRow GetVendorBasis(string VendorNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, int IssueState = defInteger, string strAdditional = "") + { + DataRow GetVendorBasisRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((VendorNo ?? "") != defString) + { + strCondition += " And VendorNo = '" + VendorNo + "'"; + } + + if (IssueState != defInteger) + { + strCondition += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblMTLMaterialVendor Where 1=1 " + strCondition; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "MTLMaterialVendor"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "MTLMaterialVendor", cnnTemp); + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetVendorBasisRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetVendorBasisRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetVendorBasisRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetVendorBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetVendorBasisRet; + + } + private DataRow GetCustomerBasis(string CustomerNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, int IssueState = defInteger, string strAdditional = "") + { + DataRow GetCustomerBasisRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((CustomerNo ?? "") != defString) + { + strCondition += " And CustomerNo = '" + CustomerNo + "'"; + } + + if (IssueState != defInteger) + { + strCondition += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblENTCustomerBasis Where 1=1" + strCondition; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "ENTCustomerBasis"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ENTCustomerBasis", cnnTemp); + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetCustomerBasisRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetCustomerBasisRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetCustomerBasisRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetCustomerBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetCustomerBasisRet; + + } + + private int CustVendorIntegration_ERP2MES_MTLVendorMap(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int CustVendorIntegration_ERP2MES_MTLVendorMapRet = default(int); + CustVendorIntegration_ERP2MES_MTLVendorMapRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // mes_pmao_t 中介表 拋轉 MES 物料供應商對應檔. + // -------------------------------------------------- + // drSel_IF ,固定處理條件pmaa002料件類別=1(供應商). + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // status:針對產品做 Insert/Delete,若拋U視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_VendorNo, strERP_MTLNo, strERP_Description, strERP_status; + DataRow drChkVendor, drChkMTL; + var colRecUnitInfo = new Collection(); // 收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + // 此Table一率先刪除再處理邏輯 + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 供應商編號 + strERP_VendorNo = drIF["pmao001"].ToString().Trim().ToUpper(); + // 物料編號 + strERP_MTLNo = drIF["pmao002"].ToString().Trim().ToUpper(); + // 說明 + strERP_Description = drIF["pmao005"].ToString().Trim().ToUpper(); + // ERP狀態 + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // ERPws標準功能不論IssueState為何皆允許修改. + + // 1.檢查是否存在MES + // Dim intNo_ChkType As Integer = -1 '檢查是否存在MES,物料找到(填0),產品找到(填1), Default -1 . + // Dim strReturnUnitType As String + + // 1-1.檢查是否有此物料設定 + drChkMTL = GetMaterialBasis(strERP_MTLNo, cnnMES, aryMES_Message); + if (drChkMTL == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (drChkMTL["MaterialNo"] is DBNull) + { + // pmao002,不存在MES的物料主檔. + aryMES_Message.Add("物料編號(pmao002):" + strERP_MTLNo + ", 不存在MES的物料主檔, 不允許執行!!"); + // GoTo lblExitTry_2_NextRow + break; + } + // 1-2.檢查是否有此供應商設定 + drChkVendor = GetVendorBasis(strERP_VendorNo, cnnMES, aryMES_Message); + if (drChkVendor == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (drChkVendor["VendorNo"] is DBNull) + { + // pmao001,不存在MES的供應商主檔. + aryMES_Message.Add("供應商編號(pmao001):" + strERP_MTLNo + ", 不存在MES的供應商主檔, 不允許執行!!"); + // GoTo lblExitTry_2_NextRow + break; + } + + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Delete tblMTLMaterialVendorMap " + " Where VendorNo='" + strERP_VendorNo + "'" + " And MaterialNo='" + strERP_MTLNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + // ----------------------------------------------------------- + // 新增MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblMTLMaterialVendorMap " + "(VendorNo,MaterialNo,Description)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_MTLNo + "','" + strERP_Description + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + break; + } + + case "D": // D:刪除 + { + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where pmao001 = '" + + drIF["pmao001"] + "'" + " And pmao002 = '" + drIF["pmao002"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And pmaoent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", pmao001:" + drIF["pmao001"] + ", pmao002:" + drIF["pmao002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + CustVendorIntegration_ERP2MES_MTLVendorMapRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return CustVendorIntegration_ERP2MES_MTLVendorMapRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(作業站) + + // 功 能: MES InterFaceTable 轉入 MES正式區(作業站) + // 傳回值: success(成功), fail(失敗) + private string OPIntegration(Collection colParameters = null) + { + string OPIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_OP = 0; // OP拋轉失敗筆數 + + // ' 每筆中介交易記錄 + // Dim strMES_MESSAGE As String '錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + // Dim aryMES_Message As New ArrayList 'Catch Error Message (Exception及MES判定錯誤訊息)。 + + // =========================================================== + // 宣告 MESSERIES_T100中介表 變數 + // =========================================================== + // Dim strIfTableName As String = "mes_imaa_t" '統一小寫 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + OPIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return OPIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.作業站主檔 MES_OOCQ_T:(必須優先) + // Loop 2.作業站主檔多語言檔 MES_OOCQL_T + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_OOCQ_T_1 = "MES_OOCQ_T"; + string MES_OOCQL_T_2 = "MES_OOCQL_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.作業站主檔 MES_OOCQ_T + // -------------------------------------------------- + strSQL = "Select T1.*, T1.oocq002 As oocq002_Upper " + " From " + MES_OOCQ_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.oocq001= 221" + " And T1.oocqent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_OOCQ_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_OOCQ_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_OOCQ_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_OOCQ_T_1].Select("", "tran_Time,oocq002"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_OP + if (OPIntegration_ERP2MES_OP(ref cnnMES, ref aryReturnMessage, ref intFailCount_OP, MES_OOCQ_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_OOCQ_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + string strIfWhereCond_PK; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + + } + + // -------------------------------------------------- + // Loop 2.作業站主檔多語言檔 MES_OOCQL_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_OOCQL_T_2 + " T1" + " Where T1.MES_Result Is Null" + " And T1.oocql003 = '" + strLanguage_T100 + "'" + " And T1.oocqlent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_OOCQL_T_2); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_OOCQL_T_2, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_OOCQL_T_2].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_OOCQL_T_2].Select("", "tran_Time,oocql002"); + + if (OPIntegration_ERP2MES_Resource(ref cnnMES, ref aryReturnMessage, ref intFailCount_OP, MES_OOCQL_T_2, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_OOCQL_T_2 + "(料件多語言檔), 拋轉執行失敗!!"); + } + } + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + OPIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + OPIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(作業站) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Convert.ToInt32(strTemp + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length) < 4000) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + OPIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return OPIntegrationRet; + // --------------------------------------------------# + + } + + private int OPIntegration_ERP2MES_OP(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int OPIntegration_ERP2MES_OPRet = default(int); + OPIntegration_ERP2MES_OPRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_OOCQ_T, 拋轉 MES 供應商主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增供應商:OPName一律填入"N/A", 後續由 mes_oocql_t作業站主檔多語言檔更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_OPNo, strERP_status, strERP_OPType; + + // 預設值 + int intIssueState = 0; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_OPNo = drIF["oocq002"].ToString().Trim().ToUpper(); + strERP_OPType = "OP"; + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + + // ----------------------------------------------------------- + // 固定檢查OPType資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (AddOPType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_OPType, strERPCreator, datNow, "AutoRun建立") < 0) + break; + + + // 檢查是否有此作業站設定 + strSQL = "Select OPNo,IssueState From tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPBasis " + "(OPType,OPNo,OPName,OPClass,OPShortName," + "OPOrder,STDUnitRunTime,CountOPUnitQty,STDQueueTime," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_OPType + "','" + strERP_OPNo + "','N/A',0,'N/A'," + " 0,0,1,0," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("作業站編號(oocq002):" & strERP_OPNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES作業站設定 + // ----------------------------------------------------------- + // 修改作業站,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + + strSQL = "Update tblOPBasis Set " + " IssueState = " + intIssueState + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (OPIntegration_DelOP(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_OPNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblOPBasis Set " + " IssueState=-1" + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("作業站編號(oocq002):" + strERP_OPNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where oocq002 = '" + + drIF["oocq002"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And oocqent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", oocq002:" + drIF["oocq002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + OPIntegration_ERP2MES_OPRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return OPIntegration_ERP2MES_OPRet; + + } + private int AddOPType(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strOPType, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddOPTypeRet = default(int); + AddOPTypeRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select OPType From tblOPType" + " Where OPType='" + strOPType + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增OPType主檔 + strSQL = "Insert Into tblOPType " + "(OPType, Description, IssueState, Creator, CreateDate) " + " Values('" + strOPType + "','" + strDescription + "',2,'" + strCreator + "', To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddOPTypeRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddOPTypeRet; + + } + private int OPIntegration_DelOP(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_OPNo) + { + int OPIntegration_DelOPRet = default(int); + OPIntegration_DelOPRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1. 刪除Abnormal + strSQL = "Delete From tblOPAbnormal Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 1. 刪除Error + strSQL = "Delete From tblOPError Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 1. 刪除Property + strSQL = "Delete From tblOPProperty Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2. 刪除Business Rule Relation + strSQL = "Delete From tblOPBusinessRuleRelation Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3. 刪除Resource Area + strSQL = "Delete From tblOPArea Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 4. 刪除Resource EQPType + strSQL = "Delete From tblOPEquipmentType Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 5. 刪除Attrib + strSQL = "Delete From tblOPAttrib Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 6. 刪除Rule + strSQL = "Delete From tblOPRule Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 7. 刪除EQP Recipe + strSQL = "Delete From tblOPEQPRecipe Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 8. 刪除QCItem + strSQL = "Delete From tblOPQCItem Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2006/05/08,sammi.處理DataGuard not support Long Type probleam. + if (!objDBcom.DBSupportLongType) + { + strSQL = "Delete From tblOPRuleXml_CLOB Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + + // 用 途:刪除作業站中子工序,因晶發專案客製於標準版中 + // 撰寫人員:Sam.Hsu + // 建立日期:2008/06/13 + // OP SubOP + strSQL = "Delete From tblOPSubOPBasis Where OPNo = '" + strERP_OPNo + "' "; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 10. 刪除主檔 + strSQL = "Delete From tblOPBasis Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + OPIntegration_DelOPRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return OPIntegration_DelOPRet; + + } + + private int OPIntegration_ERP2MES_Resource(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int OPIntegration_ERP2MES_ResourceRet = default(int); + OPIntegration_ERP2MES_ResourceRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // mes_oocql_t 中介表 拋轉 MES 作業站主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // mes_oocq_t 作業站主檔更新 + // status:針對產品做 Update,若拋D視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_OPNo, strERP_OPName, strERP_OPSName; + DataRow drChkOP; + // Dim colRecUnitInfo As New Collection '收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 編號 + strERP_OPNo = drIF["oocql002"].ToString().Trim().ToUpper(); + // 全名 + strERP_OPName = modWIN.GetSubString(drIF["oocql004"].ToString().Trim().ToUpper(), 50); + if (string.IsNullOrEmpty(strERP_OPName)) + strERP_OPName = "N/A"; + strERP_OPSName = modWIN.GetSubString(strERP_OPName, 20); + + // ERPws標準功能不論IssueState為何皆允許修改(產品主檔或物料主檔). + + // 1.檢查是否存在MES + int intNo_ChkType = -1; // 檢查是否存在MES,物料找到(填0),產品找到(填1), Default -1 . + string strReturnUnitType; + + // 1-1.檢查是否有此作業站設定 + drChkOP = GetOPBasis(strERP_OPNo, cnnMES, aryMES_Message); + if (drChkOP == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (drChkOP["OPNo"] is DBNull) + { + // oocql002,不存在MES的作業站主檔. + aryMES_Message.Add("作業站編號(oocql002):" + strERP_OPNo + ", 不存在MES的作業站主檔, 不允許執行!!"); + // GoTo lblExitTry_2_NextRow + break; + } + + + // ----------------------------------------------------------- + // 3-1.修改MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Update tblOPBasis Set " + " OPName='" + strERP_OPName + "'" + " ,OPShortName='" + strERP_OPSName + "'"; + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"2". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkOP["IssueState"], -1, false))) + strSQL += ",IssueState = 2"; + + strSQL += " Where OPNo='" + strERP_OPNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where oocql002 = '" + + drIF["oocql002"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And oocql003 = '" + drIF["oocql003"] + "'" + " And oocqlent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", oocql002:" + drIF["oocql002"] + ", oocql003:" + drIF["oocql003"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + OPIntegration_ERP2MES_ResourceRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return OPIntegration_ERP2MES_ResourceRet; + + } + private DataRow GetOPBasis(string OPNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, int IssueState = defInteger, string strAdditional = "") + { + DataRow GetOPBasisRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((OPNo ?? "") != defString) + { + strCondition += " And OPNo = '" + OPNo + "'"; + } + + if (IssueState != defInteger) + { + strCondition += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblOPBasis Where 1=1" + strCondition; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "OPBasis"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "OPBasis", cnnTemp); + + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetOPBasisRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetOPBasisRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetOPBasisRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetOPBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetOPBasisRet; + + } + + private int AddOPProductionSegment(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string PSNo, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddOPProductionSegmentRet = default(int); + AddOPProductionSegmentRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select PSNo From tblPRSProductionSegment" + " Where PSNo='" + PSNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增一筆區段主檔資料 + strSQL = "Insert Into tblPRSProductionSegment " + "(PSNo, PSName, PSOrder, Creator, CreateDate, Description, IssueState) " + " Values('" + PSNo + "','N/A' , 2, '" + strCreator + "'," + " To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + "'" + strDescription + "', 2 )"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddOPProductionSegmentRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddOPProductionSegmentRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(庫房) + + // 功 能: MES InterFaceTable 轉入 MES正式區(庫房) + // 傳回值: success(成功), fail(失敗) + private string InventoryIntegration(Collection colParameters = null) + { + string InventoryIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_INV = 0; // Inventory拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + InventoryIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return InventoryIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.庫房主檔 MES_INAA_T:(必須優先) + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_INAA_T_1 = "MES_INAA_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.庫房主檔 MES_INAA_T + // -------------------------------------------------- + + strSQL = "Select T1.*, T1.inaa001 As inaa001_Upper " + " From " + MES_INAA_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.inaasite = '" + ERP_Site + "' " + " And T1.inaaent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_INAA_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_INAA_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_INAA_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_INAA_T_1].Select("", "tran_Time,inaa001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_INV + if (InventoryIntegration_ERP2MES_INV(ref cnnMES, ref aryReturnMessage, ref intFailCount_INV, MES_INAA_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_INAA_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + InventoryIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + InventoryIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(庫房) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + InventoryIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return InventoryIntegrationRet; + // --------------------------------------------------# + + } + + private int InventoryIntegration_ERP2MES_INV(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int InventoryIntegration_ERP2MES_INVRet = default(int); + InventoryIntegration_ERP2MES_INVRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_OOCQ_T, 拋轉 MES 供應商主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增供應商:OPName一律填入"N/A", 後續由 mes_oocql_t作業站主檔多語言檔更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_INVNo, strERP_INVName, strERP_FactoryNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_FactoryNo = drIF["inaasite"].ToString().Trim().ToUpper(); + strERP_INVNo = drIF["inaa001"].ToString().Trim().ToUpper(); + strERP_INVName = drIF["inaa002"].ToString().Trim().ToUpper(); + if (strERP_INVName == null || string.IsNullOrEmpty(strERP_INVName.Trim())) + strERP_INVName = "N/A"; + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + + // 檢查是否有此作業站設定 + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES庫房設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblINVInventoryBasis " + "(InventoryNo,InventoryName,InventoryType,InventoryClass,FactoryNo," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_INVNo + "','" + strERP_INVName + "',0,0,'" + strERP_FactoryNo + "'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // aryMES_Message.Add("庫房編號(inaa001):" & strERP_INVNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES庫房設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVInventoryBasis Set " + " FactoryNo = '" + strERP_FactoryNo + "'" + " ,InventoryName = '" + strERP_INVName + "'"; + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + strSQL += " ,IssueState = " + intIssueState; + } + + strSQL += " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES庫房相關設定 + // ----------------------------------------------------------- + if (InventoryIntegration_DelInventory(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("庫房編號(inaa001):" + strERP_INVNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where inaa001 = '" + + drIF["inaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And inaasite = '" + ERP_Site + "' " + " And inaaent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // GoTo lblExitTry_2_NextRow + // Exit Try + + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", inaa001:" + drIF["inaa001"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + InventoryIntegration_ERP2MES_INVRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return InventoryIntegration_ERP2MES_INVRet; + + } + private int InventoryIntegration_DelInventory(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_INVNo) + { + int InventoryIntegration_DelInventoryRet = default(int); + InventoryIntegration_DelInventoryRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1. 刪除庫房基本資料 + strSQL = "Delete From tblINVInventoryBasis " + "Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2. 刪除庫房屬性 + strSQL = "Delete From tblINVInventoryProperty Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3. 刪除儲位 + strSQL = "Delete From tblINVLocatorBasis Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + InventoryIntegration_DelInventoryRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return InventoryIntegration_DelInventoryRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(儲位) + + // 功 能: MES InterFaceTable 轉入 MES正式區(儲位) + // 傳回值: success(成功), fail(失敗) + private string LocatorIntegration(Collection colParameters = null) + { + string LocatorIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_Locator = 0; // Locator拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + LocatorIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return LocatorIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.庫房主檔 MES_INAB_T:(必須優先) + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_INAB_T_1 = "MES_INAB_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.庫房主檔 MES_INAA_T + // -------------------------------------------------- + + strSQL = "Select T1.*, T1.inab001 As inab001_Upper, T1.inab002 As inab002_Upper " + " From " + MES_INAB_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.inabsite = '" + ERP_Site + "' " + " And T1.inabent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_INAB_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_INAB_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_INAB_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_INAB_T_1].Select("", "tran_Time,inab001,inab002"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_Locator + if (LocatorIntegration_ERP2MES_Locator(ref cnnMES, ref aryReturnMessage, ref intFailCount_Locator, MES_INAB_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_INAB_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + LocatorIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + LocatorIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(儲位) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + LocatorIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return LocatorIntegrationRet; + // --------------------------------------------------# + + } + + private int LocatorIntegration_ERP2MES_Locator(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int LocatorIntegration_ERP2MES_LocatorRet = default(int); + LocatorIntegration_ERP2MES_LocatorRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_OOCQ_T, 拋轉 MES 供應商主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // 新增供應商:OPName一律填入"N/A", 後續由 mes_oocql_t作業站主檔多語言檔更新. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_INVNo, strERP_Locator, strERP_status, strERP_FactoryNo; + + // 預設值 + int intIssueState = 2; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_FactoryNo = drIF["inabsite"].ToString().Trim().ToUpper(); + strERP_INVNo = drIF["inab001"].ToString().Trim().ToUpper(); + strERP_Locator = drIF["inab002"].ToString().ToUpper(); + if (string.IsNullOrEmpty(strERP_Locator.Trim())) + strERP_Locator = "N/A"; + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (!drTemp.Read()) + { + strSQL = "Insert Into tblINVInventoryBasis " + "(InventoryNo,InventoryName,InventoryType,InventoryClass,FactoryNo," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_INVNo + "','N/A',0,0,'" + strERP_FactoryNo + "',0,'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 檢查是否有此儲位設定 + strSQL = "Select InventoryNo,IssueState From tblINVLocatorBasis " + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblINVLocatorBasis " + "(LocatorNo,InventoryNo," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_Locator + "','" + strERP_INVNo + "'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + // aryMES_Message.Add("庫房編號(inab001):" & strERP_INVNo & ",儲位編號(inab002):" & strERP_Locator & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // 修改產品,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + + // 注意事項:產品與物料,當IssueState=-1的更新方式不同. + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = " + intIssueState + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (LocatorIntegration_DelLocator(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo, strERP_Locator) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("庫房編號(inab001):" + strERP_INVNo + ",儲位編號(inab002):" + strERP_Locator + ", 不存在MES, 不允許刪除!!"); + } + + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where inab001 = '" + + drIF["inab001"] + "'" + " And inab002 = '" + drIF["inab002"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And inabsite = '" + + ERP_Site + "' " + " And inabent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // GoTo lblExitTry_2_NextRow + // Exit Try + + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", inab001:" + drIF["inab001"] + ", inab002:" + drIF["inab002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + LocatorIntegration_ERP2MES_LocatorRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return LocatorIntegration_ERP2MES_LocatorRet; + + } + private int LocatorIntegration_DelLocator(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_INVNo, string strERP_LocatorNo) + { + int LocatorIntegration_DelLocatorRet = default(int); + LocatorIntegration_DelLocatorRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1. 刪除儲位 + strSQL = "Delete From tblINVLocatorBasis Where InventoryNo='" + strERP_INVNo + "' And LocatorNo = '" + strERP_LocatorNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + LocatorIntegration_DelLocatorRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return LocatorIntegration_DelLocatorRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(資源) + + // 功 能: MES InterFaceTable 轉入 MES正式區(資源) + // 傳回值: success(成功), fail(失敗) + private string ResourcesIntegration(Collection colParameters = null) + { + string ResourcesIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_EQP = 0; // EQP拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + ResourcesIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return ResourcesIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.庫房主檔 MES_INAB_T:(必須優先) + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_MRBA_T_1 = "MES_MRBA_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1. 設備主檔 MES_MRBA_T + // -------------------------------------------------- + + strSQL = "Select T1.*, T1.mrba001 As mrba001_Upper " + " From " + MES_MRBA_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.mrba000 in ('0','1')" + " And T1.mrbasite = '" + ERP_Site + "' " + " And T1.mrbaent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_MRBA_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_MRBA_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_MRBA_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_MRBA_T_1].Select("", "tran_Time,mrba001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_EQP + if (ResourcesIntegration_ERP2MES_Equipment(ref cnnMES, ref aryReturnMessage, ref intFailCount_EQP, MES_MRBA_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_MRBA_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + ResourcesIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + ResourcesIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(設備) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + ResourcesIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return ResourcesIntegrationRet; + // --------------------------------------------------# + + } + + private int ResourcesIntegration_ERP2MES_Equipment(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ResourcesIntegration_ERP2MES_EquipmentRet = default(int); + ResourcesIntegration_ERP2MES_EquipmentRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_MRBA_T, 拋轉 MES 供應商主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + do + { + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_EQPNo, strERP_AssetNo, strERP_Description, strERP_status; + string strEQP_EQPType = "EQPTYPE"; + + + // ----------------------------------------------------------- + // 固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (AddEquipmentType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strEQP_EQPType, strERPCreator, datNow, "AutoRun建立") < 0) + break; + + + // 預設值 + int intIssueState = 0; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_EQPNo = drIF["mrba001"].ToString().Trim().ToUpper(); + strERP_AssetNo = drIF["mrba002"].ToString().Trim().ToUpper(); + strERP_Description = drIF["mrba101"].ToString().Trim(); + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 檢查是否有此作業站設定 + strSQL = "Select EquipmentNo,IssueState From tblEQPEquipmentBasis " + " Where EquipmentNo='" + strERP_EQPNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblEQPEquipmentBasis " + "(EquipmentNo,EquipmentType,Capacity,VendorNo," + "Description,EngineerGroupNo,AssetNo,LoadPort," + "AutoFlag,Eacontroller,EQPRecipe," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_EQPNo + "','" + strEQP_EQPType + "',-1,'N/A','" + strERP_Description + "','N/A','" + strERP_AssetNo + "',0," + "0,'N/A',0," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // aryMES_Message.Add("設備編號(mrba001):" & strERP_EQPNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES設備設定 + // ----------------------------------------------------------- + strSQL = "Update tblEQPEquipmentBasis Set " + " AssetNo = '" + strERP_AssetNo + "'" + " ,Description='" + strERP_Description + "'"; + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + strSQL += " IssueState = 0"; + } + + strSQL += " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ResourcesIntegration_DelEquipment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblEQPEquipmentBasis Set " + " IssueState = -1" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("設備編號(mrba001):" + strERP_EQPNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where mrba001 = '" + + drIF["mrba001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And mrbasite = '" + ERP_Site + "' " + " And mrbaent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", mrba001:" + drIF["mrba001"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + ResourcesIntegration_ERP2MES_EquipmentRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + return ResourcesIntegration_ERP2MES_EquipmentRet; + + } + private int ResourcesIntegration_DelEquipment(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_EQPNo) + { + int ResourcesIntegration_DelEquipmentRet = default(int); + ResourcesIntegration_DelEquipmentRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 1. 刪除機台特性 + strSQL = "Delete From tblEQPEquipmentProperty " + "Where Equipment='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2. 刪除主檔 + strSQL = "Delete From tblEQPEquipmentBasis " + "Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 3.刪除設備狀態 + strSQL = "Delete From tblEMSEquipmentState Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + ResourcesIntegration_DelEquipmentRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return ResourcesIntegration_DelEquipmentRet; + + } + private int AddEquipmentType(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strEQPType, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddEquipmentTypeRet = default(int); + AddEquipmentTypeRet = -1; // Return -1:fail,0:Success + + // IssueState固定寫2 + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + strSQL = "Select EquipmentType From tblEQPEquipmentType" + " Where EquipmentType='" + strEQPType + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增ProductType主檔 + strSQL = "Insert Into tblEQPEquipmentType " + "(EquipmentType, Description, IssueState, Creator, CreateDate) " + " Values('" + strEQPType + "','" + strDescription + "',2,'" + strCreator + "', To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddEquipmentTypeRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddEquipmentTypeRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(作業站群組) + + // 功 能: MES InterFaceTable 轉入 MES正式區(作業站群組) + // 傳回值: success(成功), fail(失敗) + private string OPGroupIntegration(Collection colParameters = null) + { + string OPGroupIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_OPGroup = 0; // OPGroup拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + OPGroupIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return OPGroupIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.作業站群組主檔 MES_ECAA_T:(必須優先) + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_ECAA_T_1 = "MES_ECAA_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1. 作業站群組主檔 MES_ECAA_T + // -------------------------------------------------- + strSQL = "Select T1.*, T1.ecaa001 As ecaa001_Upper " + " From " + MES_ECAA_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.ecaaent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_ECAA_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_ECAA_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_ECAA_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_ECAA_T_1].Select("", "tran_Time,ecaa001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_OPGroup + if (OPGroupIntegration_ERP2MES_OPGroup(ref cnnMES, ref aryReturnMessage, ref intFailCount_OPGroup, MES_ECAA_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_ECAA_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + OPGroupIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + OPGroupIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(作業站群組) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + OPGroupIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return OPGroupIntegrationRet; + // --------------------------------------------------# + + } + + private int OPGroupIntegration_ERP2MES_OPGroup(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int OPGroupIntegration_ERP2MES_OPGroupRet = default(int); + OPGroupIntegration_ERP2MES_OPGroupRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_ECAA_T, 拋轉 MES 作業站群組主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_OPGroupNo, strERP_OPGroupName, strERP_status, strPRSNo; + + // 預設值 + int intIssueState = 0; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_OPGroupNo = drIF["ecaa001"].ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(drIF["ecaa002"].ToString().Trim())) + { + strERP_OPGroupName = strERP_OPGroupNo; + } + else + { + strERP_OPGroupName = drIF["ecaa002"].ToString().Trim().ToUpper(); + } + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 取得區段 + strSQL = "Select PSNo From tblPRSProductionSegment " + " Where IssueState= 2 "; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (!drTemp.Read()) + { + strPRSNo = "N/A"; + } + else + { + strPRSNo = Conversions.ToString(drTemp["PSNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 檢查是否有此作業站設定 + strSQL = "Select OPGroupNo From tblOPGroupBasis " + " Where OPGroupNo='" + strERP_OPGroupNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES作業站群組設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPGroupBasis " + "(OPGroupNo,OPGroupName, PSNo," + "Creator,CreateDate)"; + strSQL += " Values('" + strERP_OPGroupNo + "','" + strERP_OPGroupName + "','" + strPRSNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // aryMES_Message.Add("作業站群組編號(ecaa001):" & strERP_OPGroupNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES設備設定 + // ----------------------------------------------------------- + strSQL = "Update tblOPGroupBasis Set " + " OPGroupName = '" + strERP_OPGroupName + "'" + " Where OPGroupNo='" + strERP_OPGroupNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + // ----------------------------------------------------------- + // 刪除MES作業站群組設定 + // ----------------------------------------------------------- + if (OPGroupIntegration_DelOPGroup(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_OPGroupNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + aryMES_Message.Add("作業站群組編號(ecaa001):" + strERP_OPGroupNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where ecaa001 = '" + + drIF["ecaa001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And ecaasite = '" + ERP_Site + "' " + " And ecaaent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", ecaa001:" + drIF["ecaa001"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + OPGroupIntegration_ERP2MES_OPGroupRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return OPGroupIntegration_ERP2MES_OPGroupRet; + + } + private int OPGroupIntegration_DelOPGroup(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_OPGroupNo) + { + int OPGroupIntegration_DelOPGroupRet = default(int); + OPGroupIntegration_DelOPGroupRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 刪除明細檔 + strSQL = "Delete From tblOPGroupDetail " + " Where OPGroupNo='" + strERP_OPGroupNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 刪除主檔 + strSQL = "Delete From tblOPGroupBasis " + "Where OPGroupNo='" + strERP_OPGroupNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + OPGroupIntegration_DelOPGroupRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return OPGroupIntegration_DelOPGroupRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(部門) + + // 功 能: MES InterFaceTable 轉入 MES正式區(部門) + // 傳回值: success(成功), fail(失敗) + private string DepartmentIntegration(Collection colParameters = null) + { + string DepartmentIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_Dept = 0; // Department拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + DepartmentIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return DepartmentIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.部門主檔 MES_OOEF_T:(必須優先) + // Loop 2.部門主檔多語言檔 MES_OOEFL_T + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_OOEF_T_1 = "MES_OOEF_T"; + string MES_OOEFL_T_2 = "MES_OOEFL_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1.部門主檔 MES_OOEF_T + // -------------------------------------------------- + strSQL = "Select T1.*, T1.ooef001 As ooef001_Upper " + " From " + MES_OOEF_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.ooefent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_OOEF_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_OOEF_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_OOEF_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_OOEF_T_1].Select("", "tran_Time,ooef001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_Dept + if (DepartmentIntegration_ERP2MES_Department(ref cnnMES, ref aryReturnMessage, ref intFailCount_Dept, MES_OOEF_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_OOEF_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + string strIfWhereCond_PK; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + + } + + // -------------------------------------------------- + // Loop 2.部門主檔多語言檔 MES_OOEFL_T + // -------------------------------------------------- + strSQL = "Select T1.*" + " From " + MES_OOEFL_T_2 + " T1" + " Where T1.MES_Result Is Null" + " And T1.ooefl002 = '" + strLanguage_T100 + "'" + " And T1.ooeflent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_OOEFL_T_2); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_OOEFL_T_2, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_OOEFL_T_2].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_OOEFL_T_2].Select("", "tran_Time,ooefl001"); + + if (DepartmentIntegration_ERP2MES_Resource(ref cnnMES, ref aryReturnMessage, ref intFailCount_Dept, MES_OOEFL_T_2, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_OOEFL_T_2 + "(料件多語言檔), 拋轉執行失敗!!"); + } + } + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + DepartmentIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + DepartmentIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(部門) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + DepartmentIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return DepartmentIntegrationRet; + // --------------------------------------------------# + + } + + private int DepartmentIntegration_ERP2MES_Department(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int DepartmentIntegration_ERP2MES_DepartmentRet = default(int); + DepartmentIntegration_ERP2MES_DepartmentRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_OOEF_T, 拋轉 MES 部門主檔. + // -------------------------------------------------- + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_DepartmentNo, strERP_status; + + // 預設值 + int intIssueState = 2; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_DepartmentNo = drIF["ooef001"].ToString().Trim().ToUpper(); + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + + // 檢查是否有此作業站設定 + strSQL = "Select DepartmentNo,IssueState From tblUSRDepartmentBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES部門設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblUSRDepartmentBasis " + "(DepartmentNo,DepartmentName,DepartmentSName," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_DepartmentNo + "','N/A','N/A'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + // aryMES_Message.Add("部門編號(ooef001):" & strERP_DepartmentNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES部門設定 + // ----------------------------------------------------------- + // 修改部門,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState = " + intIssueState + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES部門相關設定 + // ----------------------------------------------------------- + if (DepartmentIntegration_DelDepartment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES部門設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState=-1" + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + aryMES_Message.Add("部門編號(ooef001):" + strERP_DepartmentNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + if (exitTry) + { + break; + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where ooef001 = '" + + drIF["ooef001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And ooefent ='" + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", ooef001:" + drIF["ooef001"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + DepartmentIntegration_ERP2MES_DepartmentRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return DepartmentIntegration_ERP2MES_DepartmentRet; + + } + private int DepartmentIntegration_DelDepartment(ref Collection colSQL_2MES, ref Collection colSQL_2MES_Rows, ref ArrayList aryMES_Message, string strERP_Department) + { + int DepartmentIntegration_DelDepartmentRet = default(int); + DepartmentIntegration_DelDepartmentRet = -1; // Return -1:fail,0:Success + + string strSQL; + + try + { + + // 刪除班別檔 + strSQL = "Delete From tblUSRShiftBasis " + "Where DepartmentNo='" + strERP_Department + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 刪除主檔 + strSQL = "Delete From tblUSRDepartmentBasis " + "Where DepartmentNo='" + strERP_Department + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // //return 0 : Success + DepartmentIntegration_DelDepartmentRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message.ToString()); + throw; + } + + return DepartmentIntegration_DelDepartmentRet; + + } + + private int DepartmentIntegration_ERP2MES_Resource(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int DepartmentIntegration_ERP2MES_ResourceRet = default(int); + DepartmentIntegration_ERP2MES_ResourceRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // MES_OOEFL_T 中介表 拋轉 MES 部門主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // MES_OOEF_T 部門主檔更新 + // status:針對產品做 Update,若拋D視為不合理的ERP資料狀態。 + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_DepartmentNo, strERP_DepartmentName, strERP_DepartmentSName; + DataRow drChkDept; + // Dim colRecUnitInfo As New Collection '收集所有UnitNo,以判斷是否需Insert資料. + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 編號 + strERP_DepartmentNo = drIF["ooefl001"].ToString().Trim().ToUpper(); + // 全名 + strERP_DepartmentName = modWIN.GetSubString(drIF["ooefl004"].ToString().Trim().ToUpper(), 50); + if (string.IsNullOrEmpty(strERP_DepartmentName)) + strERP_DepartmentName = "N/A"; + // 簡名 + if (string.IsNullOrEmpty(drIF["ooefl003"].ToString().Trim())) + { + strERP_DepartmentSName = modWIN.GetSubString(strERP_DepartmentName, 20); + } + else + { + strERP_DepartmentSName = modWIN.GetSubString(drIF["ooefl003"].ToString().Trim().ToUpper(), 20); + } + + if (strERP_DepartmentSName == null || string.IsNullOrEmpty(strERP_DepartmentSName)) + strERP_DepartmentSName = strERP_DepartmentName; + + // ERPws標準功能不論IssueState為何皆允許修改(產品主檔或物料主檔). + + // 1.檢查是否存在MES + string strReturnUnitType; + + // 1-1.檢查是否有此部門設定 + drChkDept = GetDepartmentBasis(strERP_DepartmentNo, cnnMES, aryMES_Message); + if (drChkDept == null) + break; // GoTo lblExitTry_2_NextRow 'fail + if (drChkDept["DepartmentNo"] is DBNull) + { + aryMES_Message.Add("部門編號(ooefl001):" + strERP_DepartmentName + ", 不存在MES的部門主檔, 不允許執行!!"); + // GoTo lblExitTry_2_NextRow + break; + } + + + // ----------------------------------------------------------- + // 3-1.修改MES部門設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRDepartmentBasis Set " + " DepartmentName='" + modWIN.GetSubString(strERP_DepartmentName, 50) + "'" + " ,DepartmentSName='" + modWIN.GetSubString(strERP_DepartmentSName, 20) + "'"; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChkDept["IssueState"], -1, false))) + strSQL += ",IssueState = 2"; + + strSQL += " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where ooefl001 = '" + + drIF["ooefl001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And ooefl002 = '" + drIF["ooefl002"] + "'" + " And ooeflent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", ooefl001:" + drIF["ooefl001"] + ", ooefl002:" + drIF["ooefl002"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + DepartmentIntegration_ERP2MES_ResourceRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return DepartmentIntegration_ERP2MES_ResourceRet; + + } + private DataRow GetDepartmentBasis(string DepartmentNo, IDbConnection cnnTemp = null, ArrayList aryErrMessage = null, int IssueState = defInteger, string strAdditional = "") + { + DataRow GetDepartmentBasisRet = default(DataRow); + + // 此 Function 將資料以 DataRow 方式取出 + // 傳回值: DataRow(成功), Nothing(失敗) + + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var dsTemp = default(DataSet); + var cnnLocal = default(IDbConnection); + string strCondition = default(string), strSQL = default(string); + + try + { + if (cnnTemp == null) + { + // //Create connection + string argstrDataBaseType = "Null"; + string strDataBaseTypeTmp = objSetting.GetConnectionString(strDataBaseType: argstrDataBaseType); + cnnLocal = CreateConnection(strDataBaseTypeTmp); + } + else + { + cnnLocal = cnnTemp; + } + + // //查詢條件 + if ((DepartmentNo ?? "") != defString) + { + strCondition += " And DepartmentNo = '" + DepartmentNo + "'"; + } + + if (IssueState != defInteger) + { + strCondition += " And IssueState = " + IssueState; + } + + // Additional + if (!string.IsNullOrEmpty(strAdditional)) + { + strSQL += strAdditional; + } + + // //主SQL + strSQL = "Select * From tblUSRDepartmentBasis Where 1=1" + strCondition; + + // //Select data + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "USRDepartmentBasis"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "USRDepartmentBasis", cnnTemp); + + // //Return data + if (dsTemp.Tables[0].Rows.Count > 0) + { + GetDepartmentBasisRet = dsTemp.Tables[0].Rows[0]; + } + else + { + GetDepartmentBasisRet = dsTemp.Tables[0].NewRow(); + } + } + + catch (Exception ex) + { + GetDepartmentBasisRet = null; + + // 此Function發生異常較難由訊息看出,加上FunctionName. + aryErrMessage.Add("GetDepartmentBasis:" + ex.Message); + + throw; + } + + finally + { + if (cnnTemp == null) + CloseConnection(cnnLocal); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return GetDepartmentBasisRet; + + } + + #endregion + + #region MES InterFaceTable 轉入 MES正式區(班別) + + // 功 能: MES InterFaceTable 轉入 MES正式區(班別) + // 傳回值: success(成功), fail(失敗) + private string ShiftIntegration(Collection colParameters = null) + { + string ShiftIntegrationRet = default(string); + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var cnnERP = default(IDbConnection); // T100中介DB使用(ERP) + var cnnMES = default(IDbConnection); // MESDB使用 + var drTemp = default(DbDataReader); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + int intFailCount_Shift = 0; // Shift拋轉失敗筆數 + + // =========================================================== + // 宣告 其他 變數 + // =========================================================== + DateTime datNow; + + do + { + try + { + // -------------------------------------------------- + // 一、取得參數 + // -------------------------------------------------- + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (colParameters.Contains("Parameter01")) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + // If strParameter01 = "" Then + // ProductIntegration = "fail;使用者群?未?定!!(tblMESAutorunJob.Parameter01)" + // Exit Function '離開 Function。 + // End If + + // -------------------------------------------------- + // 二、連線 DB + // -------------------------------------------------- + // T100中介DB + cnnERP = CreateConnection(strERPconnectionString); + + // MES DB + cnnMES = CreateConnection(strConnectionString); + + // 取得ERPSetting + if (!GetERPSetting(ref dtERPSetting, "T100")) + { + break; + } + + + // -------------------------------------------------- + // 檢查參數一 Mail通知群組 是否已設定. + // -------------------------------------------------- + if (!string.IsNullOrEmpty(strParameter01) && ERP2MES_MailNoticeChk(ref cnnMES, ref aryReturnMessage, strParameter01) < 0) + { + ShiftIntegrationRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return ShiftIntegrationRet; // 離開 Function。 + } + if (aryReturnMessage.Count > 0) + break; // Exit Try + + /// 取出 MESSERIES_T100.中介表資料. + + // -------------------------------------------------- + // 二、MESSERIES_T100.中介表資料,請依序處理: + // Loop 1.班別主檔 MES_ECAA_T:(必須優先) + + // 每筆交易明細: + // MES_Result為空白代表未拋轉。 + // 取出後立即異動DB,無論成功或失敗(不跳離),都繼續執行下一筆。 + // -------------------------------------------------- + string MES_OOGD_T_1 = "MES_OOGD_T"; + DataRow[] drSel_IF; + + // -------------------------------------------------- + // Loop 1. 班別主檔 MES_OOGD_T + // -------------------------------------------------- + + strSQL = "Select T1.*, T1.oogd001 As oogd001_Upper " + " From " + MES_OOGD_T_1 + " T1" + " Where T1.MES_Result Is Null" + " And T1.oogdsite = '" + ERP_Site + "' " + " And T1.oogdent ='" + ERP_EntID + "' "; + //cmmTempERP = new IDbCommand(strSQL, cnnERP); + //daTemp.SelectCommand = cmmTempERP; + //daTemp.Fill(dsTemp, MES_OOGD_T_1); + //cmmTempERP.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, MES_OOGD_T_1, cnnERP); + + if (!(dsTemp == null) && dsTemp.Tables[MES_OOGD_T_1].Rows.Count > 0) + { + + drSel_IF = dsTemp.Tables[MES_OOGD_T_1].Select("", "tran_Time,oogd001"); + if (!(drSel_IF == null) && drSel_IF.Length > 0) + { + // intFailCount_Shift + if (ShiftIntegration_ERP2MES_Shift(ref cnnMES, ref aryReturnMessage, ref intFailCount_Shift, MES_OOGD_T_1, drSel_IF) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add("中介表:" + MES_OOGD_T_1 + ", 拋轉執行失敗!!"); + } + } + } + + } + } + + + catch (Exception EX_AUT) + { + + if (cnnERP == null) + { + aryReturnMessage.Add("T100中介DB(ERP) 連線失敗!!"); + } + else if (cnnMES == null) + { + aryReturnMessage.Add("MES DB 連線失敗!!"); + } + else + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + } + } + + // 回傳結果 ReturnMessage,已一併在Finally處理。 + + finally + { + + // -------------------------------------------------- + // 七、回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + ShiftIntegrationRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // If Not dsTemp.Tables(strIfTableName) Is Nothing Then + + // '整理中介表交易筆數 + // Dim drSel As DataRow() + // Dim strBody_Head As String = "" + + // strBody_Head = "T100中介表:" & strIfTableName & "匯入至MES正式區" & Chr(10) + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='A'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:A, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_PRD & ")" + // End If + + // drSel = dsTemp.Tables(strIfTableName).Select("imaa004='M'") + // If drSel.Length > 0 Then + // strBody_Head += "料件類別:M, 總筆數(" & drSel.Length & "),失敗筆數(" & intFailCount_MTL & ")" + // End If + + // '重組 strReturnMessage = 中介表交易筆數 & strReturnMessage + // strReturnMessage = strBody_Head & Chr(10) & Chr(10) & strReturnMessage + + // 'Remove Table + // dsTemp.Tables.Remove(strIfTableName) + // dsTemp.AcceptChanges() + // End If + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // //fail; + ShiftIntegrationRet = "fail;" + strTemp; + + } + + + if (cnnERP != null) + CloseConnection(cnnERP); + if (cnnMES != null) + CloseConnection(cnnMES); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + + while (false); + + + // -------------------------------------------------- + // 八、當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + if (aryReturnMessage.Count > 0 && !string.IsNullOrEmpty(strParameter01)) + { + + // strSubject = "[AUT]接收T100中介表:" & strIfTableName & "(產品、物料) 失敗 " + strSubject = "[AUT]接收T100中介表:" + "(班別) 失敗 "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + if (ERP2MES_MailNotice(ref cnnMES, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (this.ProductIntegration().Length < 4000) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + ShiftIntegrationRet = "fail;" + strTemp; + } + + } + + } + + return ShiftIntegrationRet; + // --------------------------------------------------# + + } + + private int ShiftIntegration_ERP2MES_Shift(ref IDbConnection cnnMES, ref ArrayList aryReturnMessage, ref int intReturnFailCount, string IfTableName, DataRow[] drSel_IF) + { + int ShiftIntegration_ERP2MES_ShiftRet = default(int); + ShiftIntegration_ERP2MES_ShiftRet = -1; // Return -1:fail,0:Success + + // -------------------------------------------------- + // 中介表 MES_OOGD_T, 拋轉 MES 班別主檔. + // -------------------------------------------------- + // aryMES_Message ,收集單筆中介交易記錄的錯誤記錄. + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + + Collection colSQL_T100 = new Collection(), colSQL_T100_Rows = new Collection(); // T100中介DB(MES回填處理記錄). + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + + // 宣告拋轉中介表資料使用變數 + string strERP_ShiftNo, strERP_ShiftName, strERP_status; + + // 預設值 + int intIssueState = 0; + + // -------------------------------------------------- + // 必須以tran_Time順序,逐筆處理中介交易記錄。 + // 每一筆交易記錄處理完成,立即變更 MESDB 及 MESSERIES_T100.中介表的MES處理記錄,綁在同一個交易裡. + // (同包Transaction, 處理完畢後再一起commit) + // 當某筆交易記錄處理失敗,立即變更 MESSERIES_T100.中介表的MES處理記錄,再接著處理下一筆記錄. + // -------------------------------------------------- + + foreach (DataRow drIF in drSel_IF) + { + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + colSQL_T100.Clear(); + colSQL_T100_Rows.Clear(); + + do + { + try + { + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + // 轉大寫 + strERP_ShiftNo = drIF["oogd001"].ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(drIF["oogd002"].ToString().Trim())) + { + strERP_ShiftName = strERP_ShiftNo; + } + else + { + strERP_ShiftName = drIF["oogd002"].ToString().Trim().ToUpper(); + } + strERP_status = drIF["tran_status"].ToString().Trim().ToUpper(); + + // 檢查是否有此班別設定 + strSQL = "Select ShiftNo,IssueState From tblUSRShiftBasis " + " Where ShiftNo='" + strERP_ShiftNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES班別設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblUSRShiftBasis " + "(DepartmentNo,ShiftNo,ShiftName," + "IssueState,FromTime,ToTime," + "Creator,CreateDate)"; + strSQL += " Values('*','" + strERP_ShiftNo + "','" + strERP_ShiftName + "',0," + "To_Date('2000/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS')," + "To_Date('2000/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS'),'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // aryMES_Message.Add("班別編號(oogd001):" & strERP_ShiftNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES設備設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRShiftBasis Set " + " ShiftName = '" + strERP_ShiftName + "'" + " Where ShiftNo='" + strERP_ShiftNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES班別設定 + // ----------------------------------------------------------- + strSQL = "Delete tblUSRShiftBasis " + " Where DepartmentNo='*'" + " And ShiftNo='" + strERP_ShiftNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRShiftBasis Set " + " IssueState = -1" + " Where DepartmentNo='*'" + " And ShiftNo='" + strERP_ShiftNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + + else + { + aryMES_Message.Add("班別編號(oogd001):" + strERP_ShiftNo + ", 不存在MES, 不允許刪除!!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add("ERP資料狀態(Status):" + strERP_status + "無效, 不允許執行!!"); + break; + } + } + + // If aryMES_Message.Count > 0 Then GoTo lblExitTry_2_NextRow + + + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // 四、MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + else + { + break; + } + } + + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // 2016/01/13, 直接異動中介表-------------------------- + // 'If strMES_MESSAGE = defString Then + // ' '當錯誤字串組合失敗,在Finally後會記錄PK. + // 'End If + // --------------------------------------------------# + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + colSQL_T100.Clear(); // 若T100中介資料庫異動fail。(若MES_MESSAGE問題,下面會不會一樣fail?) + colSQL_T100_Rows.Clear(); + + // ----------------------------------------------------------- + // (EX_drIF.Exception) + // 回填中介表資訊,(注意)各個資料表的PK不同。 + // ----------------------------------------------------------- + // mssql,無trim用法,不串變數值,直接檢查原欄位值. + strIfWhereCond_PK = Conversions.ToString(" Where oogd001 = '" + + drIF["oogd001"] + "'" + " And tran_time = '" + drIF["tran_time"] + "'" + " And oogdsite = '" + ERP_Site + "' " + " And oogdent ='" + + ERP_EntID + "' "); + if (Update_T100_IfTable(ref colSQL_T100, ref colSQL_T100_Rows, ref aryMES_Message, IfTableName, strIfWhereCond_PK, strMES_Result, datNow, strMES_MESSAGE) >= 0) + { + // -------------------------------------------------- + // 六、T100中介資料庫異動(EX_drIF) + // -------------------------------------------------- + ExecuteSQLNoneQuery_ChkRowCount(strERPDataBaseType, strERPconnectionString, colSQL_T100, colSQL_T100_Rows); + + } + } + } + + while (false); + + // lblExitTry_2_NextRow: + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + + /// 匯整記錄中介表的PK資訊. + // 因從錯誤訊息不一定看的出哪一筆中介表交易記錄fail. + // 故失敗訊息連同中介表的必要資訊一併匯整. (Email要放詳細資訊) + // (1) + aryReturnMessage.Add("tran_time:" + drIF["tran_time"] + ", oogd001:" + drIF["oogd001"]); + + // (2) + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + + // 計算失敗筆數 + if (strMES_Result == "9") + intReturnFailCount += 1; + + // 不管成功或失敗,繼續下一筆。 + + } + + + // //return 0 : Success + ShiftIntegration_ERP2MES_ShiftRet = 0; + } + + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + } + + return ShiftIntegration_ERP2MES_ShiftRet; + + } + + #endregion + + #endregion + + #region 生產報工_EAI + + // 2019/12/27,Ning,此Function應為T100使用 + private object funCreateWOWorkReportData_EAI(Collection colParameters = null) + { + object funCreateWOWorkReportData_EAIRet = default(object); + + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + string strSQL; + var XmlDoc = new XmlDocument(); + //System.Data.OleDb.OleDbDataAdapter daTemp; + + + var CollectionSQL = new Collection(); + var arriveTime = DateTime.Now; + + string strSheetType = string.Empty; // 報工單別 + string strGroupNo = string.Empty; // 異常處理群組 + + string strProductionDateFrom = string.Empty; // 生產日期起(如無指定則帶昨天) + string strProductionDateEnd = string.Empty; // 生產日期迄(如無指定則帶今天) + + string auto = "N"; // Request... Y: 建立入庫單後自動確認+過帳, N:建立入庫單後不自動確認過帳 + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + string VirtualEQP = ""; // Request... 整合成本中心時,沒有機台編號的人工作業站帶入的ERP虛擬機台編號 + string WorkReportNos = ""; + string RequestKey = ""; + string strShiftNo = ""; + var datEventTime = DateTime.Now; + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + var strMONo = default(string); + + // 2020/09/25 Grace 調整報工單拋轉的source_no, 修改編碼為yyMMddHHmmssff-序號, 避免超出20碼(T100欄位僅開20碼) + // 2019/12/27,Ning, WorkReportID + string strWorkReportID = Strings.Format(datEventTime, "yyMMddHHmmssff"); + var colSQL_T3 = new Collection(); + + // 2020/11/17,Ning, 允許tblWIPLotLog_Report.EndTime Is Null, 若GoodQty, FailQty, UnitNo為Null時改取自tblWIPLotLog + decimal decLogGoodQty, decLogFailQty; + string strLogUnitNo; + decimal decGoodQty; + + do + { + try + { + // ParameterXX參數說明 + // 01 報工單單別 + // 02 使用者群組 + // 03 生產日期[yyyy/MM/dd](如無指定則用昨天) + // 04 ERP自動確認(如無指定則用N) + // 05 整合成本中心 Y:表示整合成本中心;N:表示未整合成本中心;未設定預設值為N + // 06 整合成本中心時,純人工作業站沒有機台,回報人時需所指定ERP虛擬機台編號,如果未設定,ERP將抓取ERP工單上的成本中心欄位作為歸屬機台。 + + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200002", "SheetType not found!!!(Parameter 01)"); + break; + } + else + { + strSheetType = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])); + } + + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200002", "User GroupNo not found!!!(Parameter 02)"); + break; + } + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (colParameters["Parameter03"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strProductionDateFrom = Strings.Format(DateTime.Now.AddDays(-1), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Now, "yyyy/MM/dd"); + } + else + { + do + { + try + { + strProductionDateFrom = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Parse(colParameters["Parameter03"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd"); + } + catch (Exception ex) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200012", "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 03)"); + break; + } + } + while (false); + } + + // Parameter04為傳入參數,作為自動確認,若無此值則用N + if (colParameters["Parameter04"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + auto = "N"; + } + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "Y", false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter04"].ToString().ToUpper(), "N", false))) + { + auto = colParameters["Parameter04"].ToString().ToUpper(); + } + else + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200015", "Parameter 04 not Y or N"); + break; + } + + // Parameter06為傳入參數,作為defVirtualEQP + if (colParameters["Parameter06"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter06"])))) + { + VirtualEQP = ""; + } + else + { + VirtualEQP = colParameters["Parameter06"].ToString().Trim().ToUpper(); + } + + // ------------------Joe,測試用資訊-------------------- + // strConnectionString = "Provider=OraOleDB.Oracle;User ID=MESSERIES_TEST;Data Source=IMES_HC;Password=sa" + // cnnTemp = CreateConnection(strConnectionString) + // strProductionDateFrom = Format(Now.AddDays(-365), "yyyy/MM/dd") + // strProductionDateEnd = Format(Now, "yyyy/MM/dd") + // strDataBaseType = "oracle" + // ------------------Joe,測試用資訊-------------------- + cnnTemp = CreateConnection(strConnectionString); + + // 取得班別第1筆資料 + strSQL = "Select * From tblUSRShiftBasis "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strShiftNo = drTemp["ShiftNo"].ToString(); + // 2017-04-25, Joe, 用ERP原始的編號回傳 + if (!string.IsNullOrEmpty(drTemp["ERPNo"].ToString())) + strShiftNo = drTemp["ERPNo"].ToString(); + } + drTemp.Close(); + + if (string.IsNullOrEmpty(strShiftNo) || string.IsNullOrEmpty(strShiftNo)) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200003", "ShiftNo not found!!!"); + break; + } + + // 2017/12/27,sammi.MEStoERP生產報工抛轉資料,1:平攤(tblWIPCont_Resource_Share),2:原始(未平攤,tblWIPCont_Resource) + string tblCont_Resource = "tblWIPCont_Resource_Share "; + bool blnReCalResource = true; + bool blnShare = true; + + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWORKREPORTDATA' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "2") + { + tblCont_Resource = "tblWIPCont_Resource"; + blnReCalResource = false; + blnShare = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/07/19 Lena, 增加系統參數,判定是否需要重匯機時、人時, 0:No、1:Yes. + // 當為平攤時, 必須再參考系統參數中是否有設定要重匯機時 + if (blnReCalResource) + { + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWorkReportReCalResource' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "0") + { + blnReCalResource = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (blnReCalResource) + { + // 機時,人時 + var colParameters_Resource = new Collection(); + colParameters_Resource.Add(strProductionDateFrom, "Parameter01"); + // funCreateWOWorkReportData_T100,TP,WF,call funShareEQPTime/funShareEMPTime,發Mail通知,統一由主funciton發出. + // colParameters_Resource.Add(strGroupNo, "Parameter02") + colParameters_Resource.Add("", "Parameter02"); + + string strResult_EQP; + strResult_EQP = Conversions.ToString(funShareEQPTime(colParameters_Resource)); + if (strResult_EQP != "success") + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200091", "funShareEQPTime:" + strResult_EQP); + break; + } + + string strResult_EMP; + strResult_EMP = Conversions.ToString(funShareEMPTime(colParameters_Resource)); + if (strResult_EMP != "success") + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200091", "funShareEMPTime:" + strResult_EMP); + break; + } + } + + // 2020/05/17 Grace Mantis 71922 MSSQL查詢語法修改 + // 2017-04-19, Joe, 人時、機時改為秒 + // 報工單號,項次,單據日期,報工人員,報工班別(非必要),工單單號,作業編號,作業序(非必要),工作站(非必要),機器編號,作業人數,完成日期,完成時間,工時,機時,單位,良品數量,報廢數量,備註(非必要) + if (strDataBaseType != "oracle") + { + strSQL = " SELECT A.EVENTTIME, ISNULL(ec.EquipmentNo,'" + VirtualEQP + "') EQUIPMENTNO, A.MONO, ISNULL(ea.ERPNo,'" + VirtualEQP + "') OPGroupNo, (eb.ERPNo) as OPNo,c.endtime, c.GoodQty, C.FAILQTY, "; + strSQL += " ISNULL(e.PropertyValue,c.GoodUnitNo) UnitNo, count(userno) as ExcUserCount, "; + strSQL += "SUM(ISNULL(B.RESVALUE,0)) * 60 EQP, "; + // strSQL += " (SUM(ISNULL(A.RESVALUE,0)) / Case When (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0 then 1 else (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) end ) EMP " + strSQL += " (SUM(ISNULL(A.RESVALUE,0)) / Case When (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) = 0 then 1 else (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) end ) EMP "; + strSQL += " ,A.LOGGROUPSERIAL, F.FactoryNo, g.WorkPriceType, g.WorkPrice "; + strSQL += " FROM ( "; + // strSQL += " SELECT CONVERT(CHAR(10), EVENTTIME, 111) AS EVENTTIME, A.MONO, A.OPNo, A.LOGGROUPSERIAL, SUM(A.RESVALUE) * 60 RESVALUE " + // strSQL += " FROM TBLWIPCONT_RESOURCE A " + strSQL += " SELECT A.EVENTTIME, A.MONO, A.OPNo, A.LOGGROUPSERIAL, SUM(A.RESVALUE) * 60 RESVALUE "; + strSQL += " FROM " + tblCont_Resource + " A "; + strSQL += " WHERE A.RESCLASS = 0 AND A.EVENTTIME >= '" + strProductionDateFrom + "' AND A.EVENTTIME < '" + strProductionDateEnd + "' "; + strSQL += " GROUP BY A.EVENTTIME, A.MONO, A.MONO, A.OPNo, A.LOGGROUPSERIAL) A "; + // strSQL += " LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + strSQL += " LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += " left join tblWIPLotLog_Report c on a.LogGroupSerial = c.LogGroupSerial "; + strSQL += " left join tblOPGroupDetail d on A.OPNO = d.OPNo "; + strSQL += " left join tblOEMOProperty e on a.mono = e.mono and e.PropertyNO = '" + strERPUnitNo + "' "; + strSQL += " left join tblOEMOBasis f on C.mono = f.mono "; + strSQL += " left join tblOPGroupBasis ea on ea.OPGroupNo = d.OPGroupNo "; + strSQL += " left join tblOPBasis eb on eb.OPNo = a.OPNo "; + strSQL += " left join tblEQPEquipmentBasis ec on ec.EquipmentNo = b.RESItem "; + strSQL += " Left Join TBLPRDRUNTIMESETUP g on g.ProductNo = c.ProductNo and g.ProductVersion = c.ProductVersion and g.OPNo = b.OPNo and g.EquipmentNo = b.ResItem "; + // 2019/12/27,Ning, 因tblWIPCont_Resource_Share沒有ResType欄位, 故取消, 已有g.EquipmentNo = b.ResItem條件已足夠 + // strSQL += " Left Join TBLPRDRUNTIMESETUP g on g.ProductNo = c.ProductNo and g.ProductVersion = c.ProductVersion and g.OPNo = b.OPNo and g.EquipmentType = b.ResType and g.EquipmentNo = b.ResItem " + strSQL += "where c.ERPNo is null "; + // strSQL += "and c.EndTime is not null " + strSQL += "GROUP BY A.EVENTTIME, ec.EquipmentNo, A.MONO ,ea.ERPNo, eb.ERPNo,c.endtime, c.GoodQty, c.FAILQTY, ISNULL(e.PropertyValue,c.GoodUnitNo),A.LOGGROUPSERIAL, F.FactoryNo, g.WorkPriceType, g.WorkPrice "; + } + else + { + strSQL = " SELECT A.EVENTTIME, NVL(ec.EquipmentNo, '" + VirtualEQP + "') AS EQUIPMENTNO, A.MONO, NVL(ea.ERPNo,'" + VirtualEQP + "') as OPGroupNo, (eb.ERPNo) as OPNo,c.endtime, c.GoodQty, C.FAILQTY, "; + strSQL += "NVL(e.PropertyValue,c.GoodUnitNo) as UnitNo, count(userno) as ExcUserCount, "; + strSQL += "SUM(NVL(B.RESVALUE,0)) * 60 EQP, "; + // strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 " + // strSQL += "THEN A.RESVALUE / (SELECT COUNT(*) FROM TBLWIPCONT_RESOURCE C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) " + strSQL += "ROUND(SUM(CASE WHEN (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) > 1 "; + strSQL += "THEN A.RESVALUE / (SELECT COUNT(*) FROM " + tblCont_Resource + " C WHERE C.LOGGROUPSERIAL = A.LOGGROUPSERIAL AND C.RESCLASS = 1) "; + strSQL += "Else A.RESVALUE "; + strSQL += "END),2) AS EMP "; + strSQL += " ,A.LOGGROUPSERIAL, F.FactoryNo, g.WorkPriceType, g.WorkPrice "; + strSQL += "FROM ( "; + // strSQL += "SELECT TO_CHAR(A.EVENTTIME,'YYYY/MM/DD') EVENTTIME, A.MONO, A.OPNo, A.LOGGROUPSERIAL, SUM(A.RESVALUE) * 60 RESVALUE " + // strSQL += "FROM TBLWIPCONT_RESOURCE A " + strSQL += "SELECT A.EVENTTIME, A.MONO, A.OPNo, A.LOGGROUPSERIAL, SUM(A.RESVALUE) * 60 RESVALUE "; + strSQL += "FROM " + tblCont_Resource + " A "; + strSQL += "WHERE A.RESCLASS = 0 AND A.EVENTTIME >= TO_DATE( '" + strProductionDateFrom + "','YYYY/MM/DD') AND A.EVENTTIME < TO_DATE('" + strProductionDateEnd + "','YYYY/MM/DD') "; + strSQL += "GROUP BY A.EVENTTIME, A.MONO, A.MONO, A.OPNo, A.LOGGROUPSERIAL) A "; + // strSQL += "GROUP BY TO_CHAR(A.EVENTTIME,'YYYY/MM/DD'), A.MONO, A.MONO, A.OPNo, A.LOGGROUPSERIAL) A " + // strSQL += "LEFT JOIN TBLWIPCONT_RESOURCE B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 " + strSQL += "LEFT JOIN " + tblCont_Resource + " B ON A.LOGGROUPSERIAL = B.LOGGROUPSERIAL AND B.RESCLASS = 1 "; + strSQL += "left join tblWIPLotLog_Report c on a.LogGroupSerial = c.LogGroupSerial "; + strSQL += "left join tblOPGroupDetail d on A.OPNO = d.OPNo and rownum = 1 "; + strSQL += "left join tblOEMOProperty e on a.mono = e.mono and e.PropertyNO = '" + strERPUnitNo + "' "; + strSQL += "left join tblOEMOBasis f on C.mono = f.mono "; + strSQL += " left join tblOPGroupBasis ea on ea.OPGroupNo = d.OPGroupNo "; + strSQL += " left join tblOPBasis eb on eb.OPNo = a.OPNo "; + strSQL += " left join tblEQPEquipmentBasis ec on ec.EquipmentNo = b.RESItem "; + strSQL += " Left Join TBLPRDRUNTIMESETUP g on g.ProductNo = c.ProductNo and g.ProductVersion = c.ProductVersion and g.OPNo = b.OPNo and g.EquipmentNo = b.ResItem "; + // 2019/12/27,Ning, 因tblWIPCont_Resource_Share沒有ResType欄位, 故取消, 已有g.EquipmentNo = b.ResItem條件已足夠 + // strSQL += " Left Join TBLPRDRUNTIMESETUP g on g.ProductNo = c.ProductNo and g.ProductVersion = c.ProductVersion and g.OPNo = b.OPNo and g.EquipmentType = b.ResType and g.EquipmentNo = b.ResItem " + strSQL += "where c.ERPNo is null "; + // strSQL += "and c.EndTime is not null " + strSQL += "GROUP BY A.EVENTTIME, ec.EquipmentNo, A.MONO ,ea.ERPNo, eb.ERPNo,c.endtime, c.GoodQty, c.FAILQTY, NVL(e.PropertyValue,c.GoodUnitNo),A.LOGGROUPSERIAL, F.FactoryNo, g.WorkPriceType, g.WorkPrice "; + } + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + var dsTemp = new DataSet(); + //daTemp.Fill(dsTemp, "costCenter"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "costCenter", cnnTemp); + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200091", "Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + if (dsTemp.Tables["costCenter"].Rows.Count > 0) + { + + int iCount = 0; + // 一筆資料一張xml拋erp + bool exitTry = false; + foreach (DataRow dr in dsTemp.Tables["costCenter"].Rows) + { + strMONo = dr["MONO"].ToString(); // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + + iCount += 1; + // test + // If dr("MONo").ToString.StartsWith("C") = False Then Continue For + + CollectionSQL.Clear(); + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_wo_work_report_data_create(); + var objDetail = new List(); + var objD = new iMESCIO.SCI.ERP.Request.SCI_detail_wo_work_report(); + + + // ==========單頭 + // 報工單號 + objMaster.doc_type_no = strSheetType; + // 單據日期 + objMaster.create_date = Strings.Format(datEventTime, "yyyyMMddHHmmss"); + // 工作站 + objMaster.workstation_no = dr["OPGroupNo"].ToString(); + // 工廠 + objMaster.factory_no = dr["FactoryNo"].ToString(); + // 班別 + objMaster.shift_no = strShiftNo; + + // 2020/09/25 Grace 調整報工單拋轉的source_no, 修改編碼為yyMMddHHmmssff-序號, 避免超出20碼(T100欄位僅開20碼) + // 2020/05/22 Grace Mantis 72259 MES產生報工單號後,將單號後面加上"-" & 流水碼回給ERP(source_no),避免ERP收到的單號重複,也避免異動到取消報工的架構 + // MES單據 '2020/02/14 Grace 新增傳遞source_no, source_no不可為空, T100會報錯 + objMaster.source_no = strWorkReportID + "-" + iCount.ToString(); + // 備註(沒有) + + // ==========單身 + // 2020/11/17,Ning,當tblWIPLotLog_Report.GoodQty為Null時, 去tblWIPLotLog取 + decLogGoodQty = 0m; + decLogFailQty = 0m; + strLogUnitNo = "N/A"; + if (string.IsNullOrEmpty(dr["GoodQty"].ToString()) || string.IsNullOrEmpty(dr["FailQty"].ToString()) || string.IsNullOrEmpty(dr["UnitNo"].ToString())) + { + strSQL = "Select GoodQty,Nvl(ScrapQty,0) As ScrapQty,Nvl(UnitNo,'N/A') As UnitNo " + " From tblWIPLotLog Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'" + " And GoodQty is not Null " + " Order by LotSerial Desc"; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + decLogGoodQty = Conversions.ToDecimal(drTemp["GoodQty"]); + decLogFailQty = Conversions.ToDecimal(drTemp["ScrapQty"]); + strLogUnitNo = Conversions.ToString(drTemp["UnitNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + // 序號 + objD.seq = 1.ToString(); + // 工單單號 + objD.wo_no = dr["MONo"].ToString(); + // 報廢數量 + // 2017-02-08, Joe, 取消報廢數 + // objD.scrap_qty = dr("FailQty") + // 良品數量 + if (string.IsNullOrEmpty(dr["GoodQty"].ToString())) + { + objD.qty = decLogGoodQty.ToString(); + } + else + { + objD.qty = dr["GoodQty"].ToString(); + } + // 工時 + objD.labor_hours = dr["EMP"].ToString(); + // 機時 + objD.machine_hours = dr["EQP"].ToString(); + // 機器編號 + objD.machine_no = dr["EquipmentNo"].ToString(); + // 製程順序(沒有) + // 作業編號 + objD.op_no = dr["OPNo"].ToString(); + // 單位 20180427 0046049 KevinChang,ERP回覆單位須傳入大寫 + if (string.IsNullOrEmpty(dr["UnitNo"].ToString())) + { + objD.unit_no = strLogUnitNo.ToUpper(); + } + else + { + objD.unit_no = dr["UnitNo"].ToString().ToUpper(); + } + // 報工人員(沒有) + // 報工時間(迄) + // 2017-05-23, Joe, 此欄位改為string只傳HH:mm + // 2020/11/17,Ning, 報工日期應EventTime + // objD.report_datetime_e = Format(dr("EndTime"), "HH:mm") + objD.report_datetime_e = Strings.Format(dr["EventTime"], "HH:mm"); + // 作業人數 + objD.number_of_operators = Conversions.ToString(dr["ExcUserCount"]); + // 完成日期 + // 2017-05-23, Joe, 此欄傳yyyyMMdd,2017-07-04 KevinChang ERP討論結果此欄傳yyyyMMddHHmmss + // 2020/11/17,Ning, 報工日期應EventTime + // objD.complete_date = Format(dr("EndTime"), "yyyyMMddHHmmss") + objD.complete_date = Strings.Format(dr["EventTime"], "yyyyMMddHHmmss"); + // 備註(沒有) + // 2017-05-03, Joe, Add 計價類型、計件單價、每小時工資 + objD.return_type = dr["WorkPriceType"].ToString(); + objD.price = 0.ToString(); + objD.wages = 0.ToString(); + if (objD.return_type == "1") + { + if (!(dr["WorkPrice"] is DBNull)) + objD.price = Conversions.ToString(dr["WorkPrice"]); + } + else if (objD.return_type == "2") + { + if (!(dr["WorkPrice"] is DBNull)) + objD.wages = Conversions.ToString(dr["WorkPrice"]); + } + objDetail.Add(objD); + objMaster.report_detail = objDetail; + object argSCI_Object = objMaster; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "wo.work.report.data.create", pRequestKey: RequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_wo_work_report_data_create)argSCI_Object; + + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + + // ---------------Joe,測試用--------------------- + // Dim strFile As String = "C:\Users\Joe\Desktop\Project\RD\ERP整合\xml\response.wo.work.report.data.create.xml" + // XmlDoc.Load(strFile) + // OutXml = XmlDoc.InnerXml + // ---------------Joe,測試用--------------------- + + // 將ERP拋回的資料轉成物件 + var objReponse = new iMESCIO.SCI.ERP.Response.SCI_Response_wo_work_report_data_create(); + // Dim ERPResult As String = "fail" + code = "fail"; + do + { + try + { + objReponse.ParseXmlToObject(OutXml); + } + + catch (Exception ex) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200015", "Response XML Format Error!"); + // 紀錄TransactionLog() + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", Environment.MachineName, "AutoRun", datEventTime.ToString("yyyy/MM/dd HH:mm:ss"), code, dr["MONo"].ToString(), "CreateWOWorkReportData", ErrorCode: "0000-200015", LogClass: "AutoRun", strException: argstrException1); + break; + } + } + while (false); + // 檢核ERP回傳結果 + if (objReponse.code == "0") + { + code = "success"; + } + else + { + if (objReponse.description == null) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200015", OutXml); + } + else + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-200015", objReponse.description); + } + exitTry = true; + break; + } + + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", My.Computer.Name, + // "AutoRun", datEventTime.ToString("yyyy/MM/dd HH:mm:ss"), code, dr("MONo").ToString, "CreateWOWorkReportData") + + // ----- 將UNDO鎖住 ----- + strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_EAI' " + " Where LotSerial In (Select LotSerial From tblWIPLotLog Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "' )"; + CollectionSQL.Add(strSQL); + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, objReponse.report_no, "CreateWOWorkReportData", strException: argstrException); + // ----- 將報工單號回填LotLog_Report ----- + strSQL = " Update tblWIPLotLog_Report Set ERPNo='" + objReponse.report_no + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "' "; + CollectionSQL.Add(strSQL); + + RequestKey= funGetRequestKey(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "wo.work.report.data.create", pRequestKey: RequestKey); + + + // ----- 將報工單據回寫MES----- + strSQL = "insert into tblSYSERPDocumentLog (TransID ,MESNo ,ERPNo ,DocumentType,CreateDate) " + " Values ('" + RequestKey + "','" + dr["LogGroupSerial"].ToString() + "','" + objReponse.report_no + "',3" + ", To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + CollectionSQL.Add(strSQL); + // ----- 執行SQL ----- + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + + + if (string.IsNullOrEmpty(dr["GoodQty"].ToString())) + { + decGoodQty = decLogGoodQty; + } + else + { + decGoodQty = Convert.ToDecimal(dr["GoodQty"].ToString()); + } + // 2019/12/27, Ning, 紀錄報工單拋轉明細資料(T3_EAI) + // 2020/02/14 Grace 增加ERPNo欄位, 紀錄ERP回傳的報工單號, 避免執行重拋後報工單畫面查詢明細時對應到多筆資料 + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail_EAI (WorkReportID, LogGroupSerial, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, GoodQty, ERPNo)" + " Values ('" + strWorkReportID + "','" + dr["LogGroupSerial"].ToString() + "','" + dr["EquipmentNo"].ToString() + "','" + dr["MONo"].ToString() + "'," + + dr["EQP"] + "," + dr["EMP"] + "," + decGoodQty + ", '" + objReponse.report_no + "')"); + colSQL_T3.Add(strSQL); + // 平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + if (blnShare) + { + strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'"; + colSQL_T3.Add(strSQL); + + strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'"; + colSQL_T3.Add(strSQL); + } + + // ----- 將所有單號保留,後續寄mail會用到 ----- + WorkReportNos += objReponse.report_no + ","; + + objMaster = null; + objDetail = null; + objD = null; + } + + if (exitTry) + { + break; + } + + } + dsTemp.Dispose(); + + // tblCont_Resource壓上ERPFlag與WorkReportID + strSQL = "Update " + tblCont_Resource + " Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "'" + " Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + SQLCommandTuning(strDataBaseType, ref strSQL); + colSQL_T3.Add(strSQL); + + // 報工單拋轉彙整資料表(T1) + strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" + " Values('" + strWorkReportID + "', To_Date('" + strProductionDateFrom + "','YYYY/MM/DD'), To_Date('" + strProductionDateEnd + "','YYYY/MM/DD'), 1)"; + SQLCommandTuning(strDataBaseType, ref strSQL); + colSQL_T3.Add(strSQL); + + // ----- 執行SQL ----- + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_T3); + + // //Return success + funCreateWOWorkReportData_EAIRet = "success;" + WorkReportNos + ";"; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_EAIRet = CombineFailMsg("0000-999999", ex.Message); + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "MONo", "CreateWOWorkReportData", ErrorCode: "0000-999999", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funCreateWOWorkReportData_EAIRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + try + { + CloseConnection(cnnTemp); + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + var dsResult = new DataTable("dsResult"); + // 拋轉日期、報工日期、工單編號、失敗原因 + // strProductionDateFrom 報工日期CreateConnection + // drResource("MONo").ToString 工單編號 + // funCreateWOWorkReportData_WF 失敗原因CreateConnection + dsResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dsResult.Columns.Add("ProductionDate", Type.GetType("System.String")); // 報工日期 + dsResult.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dsResult.Columns.Add("FailReason", Type.GetType("System.String")); // 失敗原因 + string strFillType = "XLS"; + dsResult.Rows.Add(strProductionDateEnd, strProductionDateFrom, strMONo, funCreateWOWorkReportData_EAIRet); + + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + // Dim iugTemp As New iMESUltraGrid.iMESUltraGridControl + // AddHandler iugTemp.iMESUltraGrid_InitializeLayOut, AddressOf iMESUltraGrid_InitializeLayOut + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + //var memStream = new MemoryStream(); + //讓最後一列style生效,新增空列 + DataRow drEnd = dsResult.NewRow(); + dsResult.Rows.Add(drEnd); + var dtResult = new DataSet(); + dtResult.Tables.Add(dsResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult.Tables[0]; + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dtResult, ExcelMode, strLanguageMode, strResourceDir); + //var memStream = new MemoryStream(membyte); + //memStream.Seek(0L, SeekOrigin.Begin); + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // //ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + //} + //foreach (DataRow drResource in dsResult.Rows) + //{ + // switch (strFillType.ToString().ToUpper() ?? "") + // { + // // Case "XLSX" + // // '匯出Excel再轉Stream + // // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel2007) + // // workbook.Save(memStream) + // // memStream.Seek(0, SeekOrigin.Begin) + // case "XLS": + // { + // // 匯出Excel再轉Stream + // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid); // iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003 + // workbook.Save(memStream); + // memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + // } + //} + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + try + { + dtResult.Dispose(); + } + catch (Exception ex) + { + } + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 END + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "WO Work Report Data [" + strProductionDateFrom + "]"; + string argEmailBody = Conversions.ToString(funCreateWOWorkReportData_EAIRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funCreateWOWorkReportData_EAIRet = argEmailBody; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_EAIRet = "fail_Finally;" + ex.Message; + } + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "MONo", "CreateWOWorkReportData", LogClass: "AutoRun", strException: argstrException); + } + } + while (false); + return funCreateWOWorkReportData_EAIRet; + + } + + + #endregion + + #endregion + + #region ---共用的Function(2015新加)--- + + // Private Function UpdERPIntegration(ByRef cnnTemp As OleDb.OleDbConnection, _ + // ByRef colSQL As Collection, ByRef colSQL_Rows As Collection, _ + // ByRef aryErrorMessage As ArrayList, _ + // ByVal EventTime As DateTime, _ + // ByVal TableName As String, _ + // Optional ByVal Tran_Time As String = defString) As Integer + // UpdERPIntegration = -1 'Return -1:fail,0:Success + + // '參數: + // 'EventTime,請傳入執行時間. + // 'Tran_Time,若tblERPIntegration已存在,請傳入原始Tran_Time. (時間戳格式, "yyyyMMddHHmmssfff") + + // Dim drTemp As OleDb.OleDbDataReader + // Dim strSQL As String + + // Try + // '1.回填整合資訊 + // strSQL = "Select tablename From tblERPIntegration" & _ + // " Where Lower(Trim(tablename)) = '" & TableName.ToLower & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnTemp) + // drTemp = ExecuteSQLQuery_Reader + // If drTemp.Read Then + + // '----------------------------------------------------------- + // '更新tblERPIntegration 回填資料建立時間(時間截). + // 'ps.在此不擋時間,時間不符也不能異動. + // '----------------------------------------------------------- + // strSQL = "Update tblERPIntegration Set " & _ + // "tran_time = '" & Format(EventTime, "yyyyMMddHHmmssfff") & "'" & _ + // " Where Lower(Trim(tablename)) = '" & TableName.ToLower & "'" & _ + // " And Trim(tran_time) = '" & Tran_Time & "'" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // Else + // '----------------------------------------------------------- + // '新增tblERPIntegration中介表拋轉資訊. + // '----------------------------------------------------------- + // strSQL = "Insert Into tblERPIntegration " & _ + // "(tablename, tran_time) " & _ + // " Values('" & TableName.ToLower & "','" & Format(EventTime, "yyyyMMddHHmmssfff") & "')" + // colSQL.Add(strSQL) + // colSQL_Rows.Add(1) + + // End If + // drTemp.Close() + // cmmTemp.Dispose() + + // 'Return + // UpdERPIntegration = 0 + + // Catch ex As Exception + // aryErrorMessage.Add(ex.Message.ToString) + // Throw + // Finally + // If Not drTemp Is Nothing Then drTemp.Dispose() + // End Try + + // End Function + + #endregion + + #region ---OEE報表--- + + private string funOEESummary(Collection colParameters = null) + { + string funOEESummaryRet = default(string); + + var cnnTemp = default(IDbConnection); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + var colSQL = new Collection(); + var colSQL_Rows = new Collection(); + string strSQL; + + const string strSeparateTime = " 00:00:00"; + + var datStartTime = defDateTime; + var datEndTime = defDateTime; + + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + + try + { + // 1.取出AutoRun設定參數. + // Parameter01:彙整資料時間起(如:2016/01/15),未設定則預設為執行日之前一日. + // Parameter02:彙整資料時間迄(如:2016/01/18),未設定則預設為執行日之前一日. + string strTemp = ""; + + // Parameter01:時間起 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + } + else + { + strTemp = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])).ToUpper(); + if (Information.IsDate(strTemp)) + { + datStartTime = Conversions.ToDate(strTemp); + } + else + { + throw new Exception("Parameter01(StartTime) is not valid DateTime data!"); + } + } + + // Parameter02:時間訖 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + } + else + { + strTemp = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])).ToUpper(); + if (Information.IsDate(strTemp)) + { + datEndTime = Conversions.ToDate(strTemp); + } + else + { + throw new Exception("Parameter02(EndTime) is not valid DateTime data!"); + } + } + + // //建立Connection + cnnTemp = CreateConnection(strConnectionString); + + if (datStartTime == defDateTime || datEndTime == defDateTime) + { + // 未傳入開始時間/結束時間,固定取前一天00:00到今天00:00. + var datCurrDate = DateTime.Now; + datStartTime = Conversions.ToDate(datCurrDate.AddDays(-1).ToString("yyyy/MM/dd") + strSeparateTime); + datEndTime = Conversions.ToDate(datCurrDate.ToString("yyyy/MM/dd") + strSeparateTime); + } + + // 2.取出系統參數-一日工時,除外時間 + decimal decOEEWorkTime, decOEEExceptTime; + + // 一日工時(分鐘) + strSQL = "Select ParameterValue From tblSYSParameter " + " Where Upper(ParameterNo)='OEEWORKTIME'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strTemp = Conversions.ToString(drTemp["ParameterValue"]); + } + else + { + throw new Exception("ParameterNo:OEEWorkTime,is not exist in tblSYSParameter,please setup first!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strTemp.Trim())) + { + throw new Exception("ParameterNo:OEEWorkTime,Parameter Value is empty!"); + } + else if (Information.IsNumeric(strTemp)) + { + decOEEWorkTime = Conversions.ToDecimal(strTemp); + if (decOEEWorkTime <= 0m || decOEEWorkTime > 1440m) + { + throw new Exception("ParameterNo:OEEWorkTime,Parameter Value must between in 1~1440!"); + } + } + else + { + throw new Exception("ParameterNo:OEEWorkTime,Parameter Value must be Numeric and between in 1~1440!"); + } + + // 除外時間(分鐘) + strSQL = "Select ParameterValue From tblSYSParameter " + " Where Upper(ParameterNo)='OEEEXCEPTTIME'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strTemp = Conversions.ToString(drTemp["ParameterValue"]); + } + else + { + throw new Exception("ParameterNo:OEEExceptTime,is not exist in tblSYSParameter,please setup first!"); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + if (string.IsNullOrEmpty(strTemp.Trim())) + { + throw new Exception("ParameterNo:OEEExceptTime,Parameter Value is empty!"); + } + else if (Information.IsNumeric(strTemp)) + { + decOEEExceptTime = Conversions.ToDecimal(strTemp); + if (decOEEExceptTime < 0m || decOEEExceptTime >= 1440m) + { + throw new Exception("ParameterNo:OEEExceptTime,Parameter Value must >=0 and < 1440!"); + } + if (decOEEExceptTime >= decOEEWorkTime) + { + throw new Exception("ParameterNo:OEEExceptTime can not greater than OEEWorkTime!"); + } + } + else + { + throw new Exception("ParameterNo:OEEExceptTime,Parameter Value must be Numeric and >=0 and < 1440!"); + } + + // 每日計畫工作時間(分鐘) + decimal decOEEDaiyWorkTime; + decOEEDaiyWorkTime = decOEEWorkTime - decOEEExceptTime; + + // 3.取出區域設備對應資料 + strSQL = "Select ContainAreaNo,ObjectNo as EquipmentNo " + " From tblSMDAreaRelation " + " Where ObjectType=2 " + " Union " + " Select A.ContainAreaNo,B.EquipmentNo " + " From tblSMDAreaRelation A,tblEQPGroupDetail B " + " Where A.ObjectType=4 " + " And A.ObjectNo=B.EquipmentGroup"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblEQPArea"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblEQPArea", cnnTemp); + + // 4.暫存Table + var dtEQPType = new DataTable("tblOEESummary"); + dtEQPType.Columns.Add("EquipmentType"); + dtEQPType.Columns.Add("EQPSTDOutput", Type.GetType("System.Decimal")); // 一小時之標準產出數 + + var dtSummary = new DataTable("tblOEESummary"); + dtSummary.Columns.Add("BelongDate", Type.GetType("System.DateTime")); + dtSummary.Columns.Add("BelongDateStart", Type.GetType("System.DateTime")); + dtSummary.Columns.Add("BelongDateEnd", Type.GetType("System.DateTime")); + dtSummary.Columns.Add("AreaNo"); + dtSummary.Columns.Add("EquipmentType"); + dtSummary.Columns.Add("EquipmentNo"); + dtSummary.Columns.Add("AvailRate", Type.GetType("System.Decimal")); // 稼動率 + dtSummary.Columns.Add("PerforRate", Type.GetType("System.Decimal")); // 產能效率 + dtSummary.Columns.Add("Yield", Type.GetType("System.Decimal")); // 良率 + dtSummary.Columns.Add("OEE", Type.GetType("System.Decimal")); // 整體設備效率 + dtSummary.Columns.Add("EQPAvailableTime", Type.GetType("System.Decimal")); // 稼動時間(分鐘) + dtSummary.Columns.Add("EQPOffTime", Type.GetType("System.Decimal")); // 非稼動時間(分鐘) + dtSummary.Columns.Add("EQPSTDOutput", Type.GetType("System.Decimal")); // 單位小時之標準產出數 + dtSummary.Columns.Add("EQPRealOutput", Type.GetType("System.Decimal")); // 單位小時之實際產出數 + dtSummary.Columns.Add("EQPTotalInput", Type.GetType("System.Decimal")); // 總投入數 + dtSummary.Columns.Add("EQPTotalOutput", Type.GetType("System.Decimal")); // 總產出數 + dtSummary.Columns.Add("CompleteData", Type.GetType("System.Boolean")); // 完整資料,False:否,True:是 + + var dtSummaryLot = new DataTable("tblOEELot"); + dtSummaryLot.Columns.Add("BelongDate", Type.GetType("System.DateTime")); + dtSummaryLot.Columns.Add("EquipmentNo"); + dtSummaryLot.Columns.Add("LogGroupSerial"); + + // 取得DBServer時間. + var datEventTime = default(DateTime); + + if (strDataBaseType == "oracle") + { + strSQL = "Select SysDate as EventTime From Dual"; + } + else + { + strSQL = "Select getdate() As EventTime "; + } + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + datEventTime = Conversions.ToDate(Strings.Format(drTemp["EventTime"], "yyyy/MM/dd HH:mm:ss")); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 4.計算稼動 + var tmp = dsTemp.Tables; + var argdtEQPArea = tmp["tblEQPArea"]; + string strSpeparteTimeTmp = strSeparateTime; + fuOEEAvailRate(ref strSpeparteTimeTmp, ref cnnTemp, ref dtSummary, ref argdtEQPArea, ref dtEQPType, datStartTime, datEndTime); + + // 5.計算產能效、良率、OEE + // 刪除已彙整資料 + foreach (DataRow drBelongDate in dtSummary.DefaultView.ToTable(true, "BelongDate").Rows) + { + strSQL = "Delete From tblRPTEQPOEESummary " + " Where BelongDate=To_Date('" + Strings.Format(drBelongDate["BelongDate"], "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + strSQL = "Delete From tblRPTEQPOEELot " + " Where BelongDate=To_Date('" + Strings.Format(drBelongDate["BelongDate"], "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + string strSeparateTimeTmp = strSeparateTime; + fuOEEPerforRate(ref colSQL, ref colSQL_Rows, ref strSeparateTimeTmp, ref cnnTemp, ref dtSummary, ref dtSummaryLot, decOEEDaiyWorkTime, datEventTime, datStartTime, datEndTime); + + // 6.回存至DB + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + + + catch (Exception ex) + { + // 錯誤訊息: 截取錯誤訊息+換行符號 + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + + finally + { + if (cnnTemp != null) + CloseConnection(cnnTemp); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funOEESummaryRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funOEESummaryRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funOEESummaryRet; + + } + + private string fuOEEAvailRate(ref string strSeparateTime, ref IDbConnection cnnTemp, ref DataTable dtSummary, ref DataTable dtEQPArea, ref DataTable dtEQPType, DateTime datStartTime, DateTime datEndTime) + { + string fuOEEAvailRateRet = default(string); + + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + string strSQL; + + try + { + // 1.Log + if (strDataBaseType == "oracle") + { + strSQL = "Select 1 as DataType,A.EquipmentType,A.EquipmentNo,A.EquipmentState," + " Greatest(A.StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')) StartTime, " + " Least(A.EndTime,To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')) EndTime, " + " B.StateName,Nvl(B.UtilizationType,1) as UtilizationType " + " From tblEMSEquipmentStateLog A,tblEQPStateBasis B " + " Where A.StartTime < To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " And A.EndTime >= To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " And A.EquipmentState=B.EquipmentState "; + } + else + { + // 2019/06/14 Edison 修正 + strSQL = "Select 1 as DataType, A.EquipmentType,A.EquipmentNo,A.EquipmentState," + " (Case" + " When A.StartTime > '" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "' Then A.StartTime" + " Else '" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "'" + " End) StartTime," + " (Case" + " When A.EndTime < '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "' Then A.EndTime" + " Else '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "'" + " End) EndTime," + " B.StateName,Nvl(B.UtilizationType,1) as UtilizationType " + " From tblEMSEquipmentStateLog A,tblEQPStateBasis B " + " Where A.StartTime < '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "'" + " And A.EndTime >= '" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "'" + " And A.EquipmentState=B.EquipmentState "; + } + + // 2019/06/14 Edison 修正 + SQLCommandTuning(strDataBaseType, ref strSQL); + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblEMSLog_State"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblEMSLog_State", cnnTemp); + + // 2.State + if (strDataBaseType == "oracle") + { + strSQL = "Select 2 as DataType,A.EquipmentType,A.EquipmentNo,A.EquipmentState," + " Greatest(A.StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')) StartTime, " + " Least(SysDate,To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')) EndTime, " + " B.StateName,Nvl(B.UtilizationType,1) as UtilizationType " + " From tblEMSEquipmentState A,tblEQPStateBasis B " + " Where A.StartTime < To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " And A.EquipmentState=B.EquipmentState "; + } + else + { + // 2019/06/14 Edison 修正 + strSQL = "Select 2 as DataType, A.EquipmentType,A.EquipmentNo,A.EquipmentState," + " (Case" + " When A.StartTime > '" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "' Then A.StartTime" + " Else '" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd HH:mm:ss") + "'" + " End) StartTime," + " (Case" + " When GetDate() < '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "' Then GetDate() " + " Else '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "'" + " End) EndTime," + " B.StateName,Nvl(B.UtilizationType,1) as UtilizationType " + " From tblEMSEquipmentState A,tblEQPStateBasis B " + " Where A.StartTime < '" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd HH:mm:ss") + "'" + " And A.EquipmentState=B.EquipmentState "; + } + // 2019/06/14 Edison 修正 + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblEMSLog_State"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblEMSLog_State", cnnTemp); + + // 3.依每日+設備編號區分資料 + DataRow[] drSel_Summary, drSel_Area, drSel_EQPType; + DataRow drAdd; + string strTmpAreaNo; + DateTime datTmpStart, datTmpEnd; + DateTime datTmpBelongDate, datTmpBelongDateEndTime; + decimal decTmpEQPSTDOutput; + + foreach (DataRow drLog in dsTemp.Tables["tblEMSLog_State"].Rows) + { + // 起始時間 + datTmpStart = Conversions.ToDate(drLog["StartTime"]); + + while (DateAndTime.DateDiff(DateInterval.Second, datTmpStart, Conversions.ToDate(drLog["EndTime"])) > 0L) + { + // 資料歸屬日 + datTmpBelongDate = fuOEEBelongDate(ref strSeparateTime, datTmpStart); + // 歸屬日之EndTime + datTmpBelongDateEndTime = fuOEEBelongDateEndTime(ref strSeparateTime, datTmpBelongDate); + // 本歸屬日此State之EndTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drLog["EndTime"]), datTmpBelongDateEndTime) > 0L) + { + // EndTime與datTmpStart同一歸屬日 + datTmpEnd = Conversions.ToDate(drLog["EndTime"]); + } + else + { + // EndTime與datTmpStart不同歸屬日,本日此State之EndTime計算到datTmpBelongDateEndTime. + datTmpEnd = datTmpBelongDateEndTime; + } + + drSel_Summary = dtSummary.Select(Conversions.ToString("BelongDate=#" + Strings.Format(Conversions.ToDate(datTmpBelongDate), "yyyy/MM/dd") + "#" + " And EquipmentNo='" + + drLog["EquipmentNo"] + "'")); + if (drSel_Summary.Length == 0) + { + // 取出AreaNo + drSel_Area = dtEQPArea.Select(Conversions.ToString("EquipmentNo='" + drLog["EquipmentNo"] + "'")); + if (drSel_Area.Length == 0) + { + strTmpAreaNo = "N/A"; + } + else + { + strTmpAreaNo = Conversions.ToString(drSel_Area[0]["ContainAreaNo"]); + } + + // 取出標準產能(Hour) + drSel_EQPType = dtEQPType.Select(Conversions.ToString("EquipmentType='" + drLog["EquipmentType"] + "'")); + if (drSel_EQPType.Length == 0) + { + strSQL = Conversions.ToString("Select StdUnitEQPTime,CountEQPUnitQty From tblEQPEquipmentType " + " Where EquipmentType='" + + drLog["EquipmentType"] + "'"); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["StdUnitEQPTime"], 0, false))) + { + // 無法計算產能效率 + decTmpEQPSTDOutput = 0m; + } + else + { + // 一小時之標準產出數 + decTmpEQPSTDOutput = Conversions.ToDecimal(Operators.MultiplyObject(Operators.DivideObject(drTemp["CountEQPUnitQty"], drTemp["StdUnitEQPTime"]), 60)); + } + + drAdd = dtEQPType.NewRow(); + drAdd["EquipmentType"] = drLog["EquipmentType"]; + drAdd["EQPSTDOutput"] = decTmpEQPSTDOutput; + dtEQPType.Rows.Add(drAdd); + } + else + { + throw new Exception(Conversions.ToString("EquipmentType:" + + drLog["EquipmentType"] + ",is not exist in tblEQPEquipmentType!")); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + else + { + decTmpEQPSTDOutput = Conversions.ToDecimal(drSel_EQPType[0]["EQPSTDOutput"]); + } + + drAdd = dtSummary.NewRow(); + drAdd["BelongDate"] = Strings.Format(Conversions.ToDate(datTmpBelongDate), "yyyy/MM/dd"); + drAdd["BelongDateStart"] = Strings.Format(datTmpBelongDate, "yyyy/MM/dd") + strSeparateTime; + drAdd["BelongDateEnd"] = datTmpBelongDateEndTime; + drAdd["AreaNo"] = strTmpAreaNo; + drAdd["EquipmentType"] = drLog["EquipmentType"]; + // EquipmentType單位小時之標準產出數. + if (decTmpEQPSTDOutput == 0m) + { + drAdd["EQPSTDOutput"] = DBNull.Value; + } + else + { + drAdd["EQPSTDOutput"] = decTmpEQPSTDOutput; + } + drAdd["EquipmentNo"] = drLog["EquipmentNo"]; + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drLog["UtilizationType"], 0, false))) // 非稼動 + { + drAdd["EQPAvailableTime"] = 0; + drAdd["EQPOffTime"] = DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d; + } + else // 稼動 + { + drAdd["EQPAvailableTime"] = DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d; + drAdd["EQPOffTime"] = 0; + } + // 是否為完整資料,0:否,1:是. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drLog["DataType"], 1, false))) // Log + { + drAdd["CompleteData"] = 1; + } + else + { + // State + // -可能未生產完成或其他,fuOEEPerforRate若無對應生產中之Lot,再變更回1. + drAdd["CompleteData"] = 0; + } + + dtSummary.Rows.Add(drAdd); + } + + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drLog["UtilizationType"], 0, false))) // 非稼動 + { + if (drSel_Summary[0]["EQPOffTime"] is DBNull) + { + drSel_Summary[0]["EQPOffTime"] = DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d; + } + else + { + drSel_Summary[0]["EQPOffTime"] = Convert.ToDouble(drSel_Summary[0]["EQPOffTime"]) + (DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d); + } + } + else if (drSel_Summary[0]["EQPAvailableTime"] is DBNull) // 稼動 + { + drSel_Summary[0]["EQPAvailableTime"] = DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d; + } + else + { + drSel_Summary[0]["EQPAvailableTime"] = Convert.ToDouble(drSel_Summary[0]["EQPAvailableTime"]) + (DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d); + } + + // 更新datTmpStart為本歸屬日之EndTime + datTmpStart = datTmpBelongDateEndTime; + } + } + + fuOEEAvailRateRet = "success"; + } + + catch (Exception e1) + { + fuOEEAvailRateRet = "fail"; + throw; + } + finally + { + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return fuOEEAvailRateRet; + + } + + private string fuOEEPerforRate(ref Collection colSQL, ref Collection colSQL_Rows, ref string strSeparateTime, ref IDbConnection cnnTemp, ref DataTable dtSummary, ref DataTable dtSummaryLot, decimal decOEEDaiyWorkTime, DateTime datEventTime, DateTime datStartTime, DateTime datEndTime) + { + string fuOEEPerforRateRet = default(string); + + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + string strSQL, strSQL_F, strSQL_V; + + try + { + // 1.取出datStartTime~datEndTime完成之歷程資料. + // -因B.RESItem為NotNull,故使用B.RESItem做為EquipmentNo. + strSQL = "Select A.LogGroupSerial,A.LotNo,Nvl(A.InputQty,B.InputQty) as InputQty,C.OUTPUTQTY as GoodQty," + + " B.RESItem as EquipmentNo,C.InputQty as EQPInputQty," + + " C.StartTime,C.EndTime " + + " From tblWIPLotLog_Report A,tblWIPCont_Resource B,tblWIPCont_Equipment C" + + " Where A.Status=1 " + + " And A.EndTime >= To_Date('" + Strings.Format(datStartTime, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + + " And A.EndTime < To_Date('" + Strings.Format(datEndTime, "yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + + " And B.RESClass=1 " + " And A.LogGroupSerial=B.LogGroupSerial " + " And B.LogGroupSerial=C.LogGroupSerial " + + " And B.RESItem=C.EquipmentNo "; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblLog_Cont"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblLog_Cont", cnnTemp); + + DataRow[] drSel_Summary, drSel_SummaryLot; + DataRow drAdd; + decimal decEQPInput, decEQPOutput, decEQPRunTime, decStartEndDiff; + DateTime datTmpStart, datTmpEnd; + DateTime datTmpBelongDate, datTmpBelongDateEndTime; + + // 各天投入及產出依機時所佔比率計算: + // -假設L1的加工時間是:2016/01/13 22:00 ~ 2016/01/14 08:00,總機時10,總產出是500. + // --1/13產出數=500*2/10=100 ---> 1/14結算1/13的資料時,不會取得此筆紀錄,會於1/15日結算1/14的資料時才被結算到,系統會將1/13的產能回溯. + // --1/14產出數=500*8/10=400 + foreach (DataRow drLog in dsTemp.Tables["tblLog_Cont"].Rows) + { + if (drLog["InputQty"] is DBNull) + { + throw new Exception(Conversions.ToString("LogGroupSerial:" + drLog["LogGroupSerial"] + ",InputQty is Null(tblWIPLotLog_Report) !")); + } + if (drLog["GoodQty"] is DBNull) + { + throw new Exception(Conversions.ToString("LogGroupSerial:" + drLog["LogGroupSerial"] + ",GoodQty is Null(tblWIPLotLog_Report)!")); + } + if (drLog["StartTime"] is DBNull) + { + throw new Exception(Conversions.ToString("LogGroupSerial:" + + drLog["LogGroupSerial"] + ",EquipmentNo:" + drLog["EquipmentNo"] + ",StartTime is Null(tblWIPCont_Equipment)!")); + } + if (drLog["EndTime"] is DBNull) + { + throw new Exception(Conversions.ToString("LogGroupSerial:" + + drLog["LogGroupSerial"] + ",EquipmentNo:" + drLog["EquipmentNo"] + ",EndTime is Null(tblWIPCont_Equipment)!")); + } + + // 使用EQPInputQty,因EQPInputQty已考慮多機台共同生產之狀況. + decEQPInput = Conversions.ToDecimal(drLog["EQPInputQty"]); + // 依投入數所佔比率推算產出. + // decEQPOutput = (drLog("GoodQty") * (drLog("EQPInputQty") / drLog("InputQty"))) + // 2021/12/22,Ning,Mantis 104580: 【江苏中科】OEE报表(RT416)菜单精度调整 + // 中科情境, drLog("EQPInputQty") = 233094, drLog("InputQty")=12, 造成數值失真, 改為不*比率, 以實際產出數為EQPOutput + decEQPOutput = Conversions.ToDecimal(drLog["GoodQty"]); + + // 總機時(分鐘) + decEQPRunTime = (decimal)(DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drLog["StartTime"]), Conversions.ToDate(drLog["EndTime"])) / 60d); + + // 起始時間 + datTmpStart = Conversions.ToDate(drLog["StartTime"]); + + while (DateAndTime.DateDiff(DateInterval.Second, datTmpStart, Conversions.ToDate(drLog["EndTime"])) > 0L) + { + // 資料歸屬日 + datTmpBelongDate = fuOEEBelongDate(ref strSeparateTime, datTmpStart); + // 歸屬日之EndTime + datTmpBelongDateEndTime = fuOEEBelongDateEndTime(ref strSeparateTime, datTmpBelongDate); + // 本歸屬日此State之EndTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drLog["EndTime"]), datTmpBelongDateEndTime) > 0L) + { + // EndTime與datTmpStart同一歸屬日 + datTmpEnd = Conversions.ToDate(drLog["EndTime"]); + } + else + { + // EndTime與datTmpStart不同歸屬日,本日此State之EndTime計算到datTmpBelongDateEndTime. + datTmpEnd = datTmpBelongDateEndTime; + } + + // 計算本歸屬日所佔之投入及產出 + decStartEndDiff = (decimal)(DateAndTime.DateDiff(DateInterval.Second, datTmpStart, datTmpEnd) / 60d); + + decEQPInput = decEQPInput * (decStartEndDiff / decEQPRunTime); + decEQPOutput = decEQPOutput * (decStartEndDiff / decEQPRunTime); + + drSel_Summary = dtSummary.Select(Conversions.ToString("BelongDate=#" + Strings.Format(Conversions.ToDate(datTmpBelongDate), "yyyy/MM/dd") + "#" + " And EquipmentNo='" + + drLog["EquipmentNo"] + "'")); + if (drSel_Summary.Length == 0) + { + } + // 目前執行日前的資料,回溯. + // 需考慮回溯資料再次執行時如何刪除,及Summary要如何扣減? + else + { + // EQPTotalInput + if (drSel_Summary[0]["EQPTotalInput"] is DBNull) + { + drSel_Summary[0]["EQPTotalInput"] = decEQPInput; + } + else + { + drSel_Summary[0]["EQPTotalInput"] = Convert.ToDecimal(drSel_Summary[0]["EQPTotalInput"]) + decEQPInput; + } + // EQPTotalOutput + if (drSel_Summary[0]["EQPTotalOutput"] is DBNull) + { + drSel_Summary[0]["EQPTotalOutput"] = decEQPOutput; + } + else + { + drSel_Summary[0]["EQPTotalOutput"] = Convert.ToDecimal(drSel_Summary[0]["EQPTotalOutput"]) + decEQPOutput; + } + + // tblRPTEQPOEELot + drSel_SummaryLot = dtSummaryLot.Select(Conversions.ToString("BelongDate=#" + Strings.Format(Conversions.ToDate(datTmpBelongDate), "yyyy/MM/dd") + "#" + " And EquipmentNo='" + + drLog["EquipmentNo"] + "'" + " And LogGroupSerial='" + drLog["LogGroupSerial"] + "'")); + if (drSel_SummaryLot.Length == 0) + { + strSQL = Conversions.ToString("Insert into tblRPTEQPOEELot " + " (BelongDate,EquipmentNo,LogGroupSerial,LotNo,CollectionDate) " + " Values(To_Date('" + Strings.Format(datTmpBelongDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + + drLog["EquipmentNo"] + "','" + drLog["LogGroupSerial"] + "','" + drLog["LotNo"] + "'," + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS'))"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 先忽略同一站同一設備使用多次的狀況. + drAdd = dtSummaryLot.NewRow(); + drAdd["BelongDate"] = Strings.Format(Conversions.ToDate(datTmpBelongDate), "yyyy/MM/dd"); + drAdd["EquipmentNo"] = drLog["EquipmentNo"]; + drAdd["LogGroupSerial"] = drLog["LogGroupSerial"]; + dtSummaryLot.Rows.Add(drAdd); + } + } + + // 更新datTmpStart為本歸屬日之EndTime + datTmpStart = datTmpBelongDateEndTime; + + } + } + + // 2.彙整 + decimal decAvailRate, decPerforRate, decYield; + + foreach (DataRow drSummary in dtSummary.Rows) + { + // 若稼動+非稼動<每日計畫工作時間 + // -將差額歸至非稼動 + // -如:設備2014/5/20 15:00:00購入並開始生產,00:00:00~15:00:00不會有歷程,將該段時間歸入至非稼動. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(Operators.AddObject(drSummary["EQPAvailableTime"], drSummary["EQPOffTime"]), decOEEDaiyWorkTime, false))) + { + drSummary["EQPOffTime"] = Convert.ToDecimal(drSummary["EQPOffTime"]) + (decOEEDaiyWorkTime - (decimal)drSummary["EQPAvailableTime"] - (decimal)drSummary["EQPOffTime"]); + } + + // 格式化至小數二位. + drSummary["EQPAvailableTime"] = Strings.Format(drSummary["EQPAvailableTime"], "0.##"); + drSummary["EQPOffTime"] = Strings.Format(drSummary["EQPOffTime"], "0.##"); + + // 實際運轉時間/每日計畫工作時間 + // -實際運轉時間(分鐘)=每日計畫工作時間(分鐘)-非稼動時間(分鐘). + // 2019/12/20,Ning,Mantis 0065736 若 decOEEDaiyWorkTime - drSummary("EQPOffTime")<=0 將decAvailRate設為0 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLessEqual(Operators.SubtractObject(decOEEDaiyWorkTime, drSummary["EQPOffTime"]), 0, false))) + { + decAvailRate = 0m; + } + else + { + decAvailRate = Conversions.ToDecimal(Operators.DivideObject(Operators.SubtractObject(decOEEDaiyWorkTime, drSummary["EQPOffTime"]), decOEEDaiyWorkTime)); + } + drSummary["AvailRate"] = Strings.Format(decAvailRate, "0.####"); + + // 實際產能(個/小時) + // -總產出數/(實際運轉時間(分鐘)/60) + if (drSummary["EQPTotalOutput"] is DBNull) + { + // 無法計算以空值呈現. + drSummary["EQPRealOutput"] = DBNull.Value; + } + else + { + drSummary["EQPTotalOutput"] = Strings.Format(drSummary["EQPTotalOutput"], "0.##"); + // 2019/12/20,Ning,Mantis 0065736 若(decOEEDaiyWorkTime - drSummary("EQPOffTime"))<=0 ,將EQPRealOutput設為0 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLessEqual(Operators.SubtractObject(decOEEDaiyWorkTime, drSummary["EQPOffTime"]), 0, false))) + { + drSummary["EQPRealOutput"] = 0; + } + else + { + drSummary["EQPRealOutput"] = Operators.DivideObject(drSummary["EQPTotalOutput"], Operators.DivideObject(Operators.SubtractObject(decOEEDaiyWorkTime, drSummary["EQPOffTime"]), 60)); + } + } + + // 產能效率=實際產能/標準產能 + if (drSummary["EQPRealOutput"] is DBNull || drSummary["EQPSTDOutput"] is DBNull) + { + // 設備類別未設定標準產出,故無法計算產能效率 + // 以1表示,OEE各項相乘時才會有值. + decPerforRate = 1m; + // 無法計算以空值呈現. + drSummary["PerforRate"] = DBNull.Value; + } + else + { + drSummary["EQPSTDOutput"] = Strings.Format(drSummary["EQPSTDOutput"], "0.##"); + decPerforRate = Conversions.ToDecimal(Operators.DivideObject(drSummary["EQPRealOutput"], drSummary["EQPSTDOutput"])); + drSummary["PerforRate"] = Strings.Format(decPerforRate, "0.####"); + } + + // 良率=產出/投入 + if (drSummary["EQPTotalInput"] is DBNull || drSummary["EQPTotalOutput"] is DBNull) + { + // 未生產,無良率. + // 以1表示,OEE各項相乘時才會有值. + decYield = 1m; + // 無法計算以空值呈現. + drSummary["Yield"] = DBNull.Value; + } + else + { + drSummary["EQPTotalInput"] = Strings.Format(drSummary["EQPTotalInput"], "0.##"); + // '0107427: 东莞精旺:自动排程 OEE summary 12月16日抛转报尝试除以0,该问题之前已经反馈下修,但是最近还是有报错,请帮忙核查 + if (Operators.ConditionalCompareObjectEqual(drSummary["EQPTotalInput"], 0, false)) + { + decYield = 0m; + } + else + { + decYield = Conversions.ToDecimal(Operators.DivideObject(drSummary["EQPTotalOutput"], drSummary["EQPTotalInput"])); + drSummary["Yield"] = Strings.Format(decYield, "0.####"); + } + } + + // OEE=稼働率×產能效率×良率 + drSummary["OEE"] = Strings.Format(decAvailRate * decPerforRate * decYield, "0.####"); + + // tblRPTEQPOEESummary + strSQL_F = "Insert into tblRPTEQPOEESummary " + " (BelongDate,BelongDateStart,BelongDateEnd,CollectionDate, " + " AreaNo,EquipmentType,EquipmentNo," + " AvailRate,OEE,EQPAvailableTime,EQPOffTime "; + strSQL_V = Conversions.ToString(" Values(To_Date('" + Strings.Format(drSummary["BelongDate"], "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(drSummary["BelongDateStart"], "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(drSummary["BelongDateEnd"], "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + + drSummary["AreaNo"] + "','" + drSummary["EquipmentType"] + "','" + drSummary["EquipmentNo"] + "'," + drSummary["AvailRate"] + "," + drSummary["OEE"] + + "," + drSummary["EQPAvailableTime"] + "," + drSummary["EQPOffTime"]); + + if (!(drSummary["PerforRate"] is DBNull)) + { + strSQL_F += ",PerforRate"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["PerforRate"]); + } + if (!(drSummary["Yield"] is DBNull)) + { + strSQL_F += ",Yield"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["Yield"]); + } + if (!(drSummary["EQPTotalInput"] is DBNull)) + { + strSQL_F += ",EQPTotalInput"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["EQPTotalInput"]); + } + if (!(drSummary["EQPTotalOutput"] is DBNull)) + { + strSQL_F += ",EQPTotalOutput"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["EQPTotalOutput"]); + } + if (!(drSummary["EQPSTDOutput"] is DBNull)) + { + strSQL_F += ",EQPSTDOutput"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["EQPSTDOutput"]); + } + if (!(drSummary["EQPRealOutput"] is DBNull)) + { + strSQL_F += ",EQPRealOutput"; + strSQL_V = Conversions.ToString(strSQL_V + "," + drSummary["EQPRealOutput"]); + } + // 是否為完整資料,0:否,1:是. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSummary["CompleteData"], 1, false))) // Log + { + strSQL_F += ",CompleteData"; + strSQL_V += ",1"; + } + else + { + // State + // -可能未生產完成或其他狀態,fuOEEPerforRate若無對應生產中之Lot,再變更回1. + strSQL = Conversions.ToString("Select LotNo From tblWIPTemp_Equipment " + " Where EquipmentNo='" + drSummary["EquipmentNo"] + "'"); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strSQL_F += ",CompleteData"; + strSQL_V += ",0"; + } + else + { + strSQL_F += ",CompleteData"; + strSQL_V += ",1"; + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + colSQL.Add(strSQL_F + ")" + strSQL_V + ")"); + colSQL_Rows.Add(1); + } + + fuOEEPerforRateRet = "success"; + } + + catch (Exception e1) + { + fuOEEPerforRateRet = "fail"; + throw; + } + finally + { + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + } + + return fuOEEPerforRateRet; + + } + + private DateTime fuOEEBelongDate(ref string strSeparateTime, DateTime datEventTime) + { + DateTime fuOEEBelongDateRet = default(DateTime); + + // 取得歸屬日 + DateTime datBelongDate; + + try + { + // 歸屬日的區分時間為strSeparateTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(Strings.Format(datEventTime, "yyyy/MM/dd") + " 00:00:00"), datEventTime) > 0L && DateAndTime.DateDiff(DateInterval.Second, datEventTime, Conversions.ToDate(Strings.Format(datEventTime, "yyyy/MM/dd") + " " + strSeparateTime)) > 0L) + { + // 已過00:00:00 + datBelongDate = Conversions.ToDate(Strings.Format(DateAndTime.DateAdd(DateInterval.Day, -1, datEventTime), "yyyy/MM/dd")); + } + else + { + datBelongDate = Conversions.ToDate(Strings.Format(datEventTime, "yyyy/MM/dd")); + } + + // Return + fuOEEBelongDateRet = datBelongDate; + } + + catch (Exception e1) + { + throw; + } + + return fuOEEBelongDateRet; + + } + + private DateTime fuOEEBelongDateEndTime(ref string strSeparateTime, DateTime datBelongDate) + { + DateTime fuOEEBelongDateEndTimeRet = default(DateTime); + + // 取得歸屬日 + DateTime datBelongDateEndTime; + + try + { + datBelongDateEndTime = Conversions.ToDate(Strings.Format(DateAndTime.DateAdd(DateInterval.Day, 1d, datBelongDate), "yyyy/MM/dd") + " " + strSeparateTime); + + // Return + fuOEEBelongDateEndTimeRet = datBelongDateEndTime; + } + + catch (Exception e1) + { + throw; + } + + return fuOEEBelongDateEndTimeRet; + + } + + + #endregion + + #region ---ERP to MES 基本資料整合(MES call ERP Webservice)--- + + + private string LoadXmlFileForTest(string ServiceName) + { + string LoadXmlFileForTestRet = default(string); + + LoadXmlFileForTestRet = string.Empty; + + try + { + + string strAppBase = AppDomain.CurrentDomain.BaseDirectory; + + if (Directory.Exists(strAppBase + "xml")) + { + var pReasXml = new XmlDocument(); + pReasXml.Load(strAppBase + @"xml\" + ServiceName + ".xml"); + LoadXmlFileForTestRet = pReasXml.InnerXml; + pReasXml = null; + } + } + + catch (Exception ex) + { + + } + + return LoadXmlFileForTestRet; + + } + + + // ======================================================================================================================== + // 程式名稱:funCreateWOWorkReportData_E10ICD + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:報工單整合 + // 撰寫人員:Elvis + // 撰寫日期:2021/03/24 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funCreateWOWorkReportData_E10ICD(Collection colParameters = null) + { + object funCreateWOWorkReportData_E10ICDRet = default(DateTime); + string str = ""; + string str2 = ""; + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + string strSQL; + var XmlDoc = new XmlDocument(); + //System.Data.OleDb.OleDbDataAdapter daTemp; + + + var CollectionSQL = new Collection(); + var arriveTime = DateTime.Now; + + string strSheetType = string.Empty; // 報工單別 + string strGroupNo = string.Empty; // 異常處理群組 + + string strProductionDateFrom = string.Empty; // 生產日期起(如無指定則帶昨天) + string strProductionDateEnd = string.Empty; // 生產日期迄(如無指定則帶今天) + string strWorkOrderType = ""; // 報工單單別 + + string auto = "N"; // Request... Y: 建立入庫單後自動確認+過帳, N:建立入庫單後不自動確認過帳 + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + string VirtualEQP = ""; // Request... 整合成本中心時,沒有機台編號的人工作業站帶入的ERP虛擬機台編號 + string WorkReportNos = ""; + string RequestKey = ""; + string strShiftNo = ""; + var datEventTime = DateTime.Now; + + // 2020/09/25 Grace 調整報工單拋轉的source_no, 修改編碼為yyMMddHHmmssff-序號, 避免超出20碼(T100欄位僅開20碼) + // 2019/12/27,Ning, WorkReportID + string strWorkReportID = Strings.Format(datEventTime, "yyMMddHHmmssff"); + var colSQL_T3 = new Collection(); + + var colSQL_T2 = new Collection(); + var colSQL_T1 = new Collection(); + + // 2020/11/17,Ning, 允許tblWIPLotLog_Report.EndTime Is Null, 若GoodQty, FailQty, UnitNo為Null時改取自tblWIPLotLog + decimal decLogGoodQty, decLogFailQty; + string strLogUnitNo; + + // 2021/03/25,Elvis,單身回報報工者 + string strRepoter; + var datNow = DateTime.Now; + var dsTemp = new DataSet(); + + bool blnException = false; + + do + { + try + { + // ParameterXX參數說明 + // 01:生產日期[yyyy/MM/dd](如無指定則用昨天) + // 02:使用者群組 + // 03:報工單單別 + + // Parameter01為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strProductionDateFrom = Strings.Format(datNow.AddDays(-1), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(datNow, "yyyy/MM/dd"); + } + else + { + do + { + try + { + strProductionDateFrom = Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd"); + } + catch (Exception ex) + { + funCreateWOWorkReportData_E10ICDRet = "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 01)"; + break; + } + } + while (false); + } + + // 2017/10/06 YF, 沒有Group則不發送MAIL + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + strGroupNo = ""; + } + // funCreateWOWorkReportData_E10ICD = "User GroupNo not found!!!(Parameter 02)" + // Exit Try + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + // Parameter03為傳入參數,作為報工單單別,若無此值及超過四個字則不進行下面的程式 + if (colParameters["Parameter03"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + } + // funCreateWOWorkReportData_E10ICD = "Work Order not found!!!(Parameter 03)" + // Exit Try + else + { + // strWorkOrderType = Trim(colParameters("Parameter03")) + } + if (colParameters["Parameter03"].ToString().Length > 4) + { + // funCreateWOWorkReportData_E10ICD = "Work Order more than four words(Parameter 03)" + // Exit Try + } + + cnnTemp = CreateConnection(strConnectionString); + + str2 += "Z" + Constants.vbCrLf; + + + // 2017/12/27,sammi.MEStoERP生產報工抛轉資料,1:平攤(tblWIPCont_Resource_Share),2:原始(未平攤,tblWIPCont_Resource) + string tblCont_Resource = "tblWIPCont_Resource_Share "; + bool blnReCalResource = true; + + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWORKREPORTDATA' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "2") + { + tblCont_Resource = "tblWIPCont_Resource"; + blnReCalResource = false; + str2 += "tblCont_Resource:" + tblCont_Resource + Constants.vbCrLf; + str2 += "ERPWOWORKREPORTDATA " + drTemp["ParameterValue"].ToString() + Constants.vbCrLf; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/07/19 Lena, 增加系統參數,判定是否需要重匯機時、人時, 0:No、1:Yes. + // 當為平攤時, 必須再參考系統參數中是否有設定要重匯機時 + if (blnReCalResource) + { + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWorkReportReCalResource' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + str2 += "ERPWOWorkReportReCalResource " + drTemp["ParameterValue"].ToString() + Constants.vbCrLf; + + if (drTemp["ParameterValue"].ToString() == "0") + { + blnReCalResource = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (blnReCalResource) + { + // 機時,人時 + var colParameters_Resource = new Collection(); + colParameters_Resource.Add(strProductionDateFrom, "Parameter01"); + // funCreateWOWorkReportData_T100,TP,E10ICD,call funShareEQPTime/funShareEMPTime,發Mail通知,統一由主funciton發出. + // colParameters_Resource.Add(strGroupNo, "Parameter02") + colParameters_Resource.Add("", "Parameter02"); + + string strResult_EQP; + strResult_EQP = Conversions.ToString(funShareEQPTime(colParameters_Resource)); + if (strResult_EQP != "success") + { + funCreateWOWorkReportData_E10ICDRet = "funShareEQPTime:" + strResult_EQP; + break; + } + + string strResult_EMP; + strResult_EMP = Conversions.ToString(funShareEMPTime(colParameters_Resource)); + if (strResult_EMP != "success") + { + funCreateWOWorkReportData_E10ICDRet = "funShareEMPTime:" + strResult_EMP; + break; + } + } + + // 彙整暫存表. + var dtERP = new DataTable("tblERP"); + + // ------------------------------------------------------------------------------------------- + dtERP.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dtERP.Columns.Add("OPGroupNo", Type.GetType("System.String")); // 生產線別 + dtERP.Columns.Add("MOTypeNo", Type.GetType("System.String")); // 工單單別 + // 20180122 KevinChang 新增欄位製程代號(OPNo)、機台代號(EquipmentNo)、型態(1:正常 2:報廢) + dtERP.Columns.Add("EquipmentNo", Type.GetType("System.String")); // 機台代號 + dtERP.Columns.Add("OPNo", Type.GetType("System.String")); // 製程代號 + dtERP.Columns.Add("Type", Type.GetType("System.String")); // 型態 + // ------------------------------------------------------------------------------------------- + dtERP.Columns.Add("InputQty", Type.GetType("System.Decimal")); // 移轉數量 + dtERP.Columns.Add("EQP", Type.GetType("System.Decimal")); // 機時 (秒) + dtERP.Columns.Add("EMP", Type.GetType("System.Decimal")); // 人時 (秒) + dtERP.Columns.Add("ProductNo", Type.GetType("System.String")); // 產品品號 + dtERP.Columns.Add("ProductName", Type.GetType("System.String")); // 產品品名 + dtERP.Columns.Add("SpecNo", Type.GetType("System.String")); // 產品規格 + dtERP.Columns.Add("UnitNo", Type.GetType("System.String")); // 單位 + // 2021/1/15,Ning,新增LogGroupSerial + dtERP.Columns.Add("LogGroupSerial", Type.GetType("System.String")); // LogGroupSerial + dtERP.Columns.Add("USERNO", Type.GetType("System.Decimal")); // AS REPORTER 報工者 + dtERP.Columns.Add("GOODQTY", Type.GetType("System.Decimal")); // 良品數 + dtERP.Columns.Add("FactoryNo", Type.GetType("System.Decimal")); // 工廠 + dtERP.Columns.Add("RESItem", Type.GetType("System.Decimal")); + // dtERP.Columns.Add("WorkPriceType", System.Type.GetType("System.String")) + // dtERP.Columns.Add("WorkPrice", System.Type.GetType("System.Decimal")) + dtERP.Columns.Add("ExcUserCount", Type.GetType("System.Decimal")); + dtERP.Columns.Add("MOUNITNO", Type.GetType("System.String")); + dtERP.Columns.Add("HAVECOMPONENT", Type.GetType("System.String")); + + // 2021/1/15, Ning, 加上ERPFlag=0的條件 + if (strDataBaseType.ToLower() == "oracle") // 增加InputQTY名稱 + { + strSQL = "Select A.LogGroupSerial,A.OPGroupNo,A.EventTime,B.ResItem as EquipmentNo,A.MOTypeNo,A.MONo,A.OPNo,sum(A.InputQty) InputQty,ROUND(Sum(NVL(B.ResValue,0)*60)) EQP , " + "ROUND((Sum(NVL(A.ResValue,0)*60)) / " + "case when (Select Count(*) From " + tblCont_Resource + " C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1)= 0 then 1 else (Select Count(*) From " + tblCont_Resource + " C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1) End " + ") EMP,B.USERNO,C.GOODQTY,D.FactoryNo,B.RESItem,ROUND((SELECT count(userno) FROM " + tblCont_Resource + ")) ExcUserCount,D.MOUNITNO, H.HAVECOMPONENT " + "From ( " + " Select A.EventTime,c.MOTypeNo,A.MONo,A.OPNo,B.GoodQty as InputQty,A.LogGroupSerial,Sum(A.ResValue) ResValue," + " (Case B.OPGroupNo When 'N/A' Then OPGroup.OPGroupNo Else B.OPGroupNo end) OPGroupNo " + " From " + tblCont_Resource + " A " + " Join tblWIPLotLog_Report B on A.LogGroupSerial=B.LogGroupSerial " + " Left Join tblOPGroupDetail OPGroup On B.OPNO=OPGroup.OPNO " + " Join tblOEMOBasis C on A.MONo = C.MONo " + " Where A.ResClass=0 " + " And A.EventTime>= to_date('" + strProductionDateFrom + "','YYYY/MM/DD HH24:MI:SS') " + " And A.EventTime='" + strProductionDateFrom + "'" + " And A.EventTime<'" + strProductionDateEnd + "'" + " And IsNull(A.ERPFlag,0) = 0 " + " And A.LogGroupSerial=B.LogGroupSerial " + " And A.Mono=C.Mono " + " Group By (Case B.OPGroupNo When 'N/A' Then OPGroup.OPGroupNo Else B.OPGroupNo end),EventTime,c.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial, B.GoodQty "; + strSQL += " ) A "; + strSQL += " Left Join " + tblCont_Resource + " B ON A.LogGroupSerial = B.LogGroupSerial And B.ResClass=1 "; + strSQL += " Left Join tblWIPLotLog_Report C ON A.LogGroupSerial = C.LogGroupSerial "; + strSQL += " Left join tblOEMOBasis D on C.mono = D.mono "; + strSQL += " Left Join TBLPRDRUNTIMESETUP g on g.OPNo = b.OPNo "; + strSQL += "Left Join tblOEMOPROCESS H on H.MONO = A.MONO"; + strSQL += " Group By A.OPGroupNo,A.EventTime,B.ResItem,A.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial,C.GOODQTY,B.USERNO,C.GOODQTY,B.RESItem,D.FactoryNo,D.MOUNITNO,H.HAVECOMPONENT"; + } + // 2017/10/11 KunYuan:多人加工拋wf之移轉數量會變n倍,調整為直接取tblWIPLotLog_Report之GoodQty↑ + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "costCenter"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "costCenter", cnnTemp); + + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnTemp) + // daTemp = New OleDb.OleDbDataAdapter(cmmTemp) + + // daTemp.Fill(dsTemp, "costCenter") + // daTemp.Dispose() + // cmmTemp.Dispose() + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + funCreateWOWorkReportData_E10ICDRet = "Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"; + break; + } + + str2 += "A" + Constants.vbCrLf; + str2 += "彙整時間 strProductionDateFrom:" + strProductionDateFrom.ToString() + Constants.vbCrLf; + str2 += "彙整時間 strProductionDateEnd:" + strProductionDateEnd.ToString() + Constants.vbCrLf; + str2 += "資料筆數:" + dsTemp.Tables["costCenter"].Rows.Count.ToString() + Constants.vbCrLf; + str2 += "SQL:" + strSQL.ToString() + Constants.vbCrLf; + + if (dsTemp.Tables["costCenter"].Rows.Count > 0) + { + + int iCount = 0; + // 一筆資料一張xml拋erp + bool exitTry = false; + foreach (DataRow dr in dsTemp.Tables["costCenter"].Rows) + { + iCount += 1; + // test + // If dr("MONo").ToString.StartsWith("C") = False Then Continue For + + CollectionSQL.Clear(); + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_wo_work_report_data_create(); + var objDetail = new List(); + var objD = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_detail_wo_work_report(); + + str2 += "B: 單頭" + Constants.vbCrLf; + // ==========單頭 + // 報工單號 + objMaster.doc_type_no = strSheetType; + // 單據日期 + objMaster.create_date = Strings.Format(datEventTime, "yyyyMMddHHmmss"); + // 工作站 + objMaster.workstation_no = dr["OPGROUPNO"].ToString(); + // 工廠 + objMaster.factory_no = dr["FactoryNo"].ToString(); // ' + // 班別 + objMaster.shift_no = strShiftNo; + + // 2020/09/25 Grace 調整報工單拋轉的source_no, 修改編碼為yyMMddHHmmssff-序號, 避免超出20碼(T100欄位僅開20碼) + // 2020/05/22 Grace Mantis 72259 MES產生報工單號後,將單號後面加上"-" & 流水碼回給ERP(source_no),避免ERP收到的單號重複,也避免異動到取消報工的架構 + // MES單據 '2020/02/14 Grace 新增傳遞source_no, source_no不可為空, T100會報錯 + objMaster.source_no = strWorkReportID + "-" + iCount.ToString(); + // 備註(沒有) + str2 += "C: 單身" + Constants.vbCrLf; + // ==========單身 + // 2020/11/17,Ning,當tblWIPLotLog_Report.GoodQty為Null時, 去tblWIPLotLog取 + decLogGoodQty = 0m; + decLogFailQty = 0m; + strRepoter = dr["USERNO"].ToString(); + strLogUnitNo = "N/A"; + + if (string.IsNullOrEmpty(dr["GOODQTY"].ToString()) || string.IsNullOrEmpty(dr["MOUNITNO"].ToString())) + { + strSQL = "Select GOODQTY,Nvl(ScrapQty,0) As ScrapQty,Nvl(UnitNo,'N/A') As UnitNo " + " From tblWIPLotLog Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'" + " And GOODQTY is not Null " + " Order by LotSerial Desc"; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + decLogGoodQty = Conversions.ToDecimal(drTemp["GoodQty"]); + decLogFailQty = Conversions.ToDecimal(drTemp["ScrapQty"]); + strLogUnitNo = Conversions.ToString(drTemp["UnitNo"]); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (dr["HAVECOMPONENT"].ToString() == "1") + { + strSQL = "Select OUT_GOODQTY,Nvl(UnitNo,'N/A') As UnitNo " + " From tblWipCont_Component Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'" + " And OUT_GOODQTY is not Null " + " Order by LotSerial Desc"; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + var dsTemp1 = new DataSet(); + //daTemp.Fill(dsTemp1, "plus"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp1, "plus", cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + int qty = 0; + foreach (DataRow dr1 in dsTemp1.Tables["plus"].Rows) + qty = qty + Convert.ToInt32(drTemp["OUT_GOODQTY"]); + decLogGoodQty = qty; + strLogUnitNo = Conversions.ToString(drTemp["UnitNo"]); + } + //daTemp.Dispose(); + drTemp.Close(); + //cmmTemp.Dispose(); + } + + // 序號 + objD.seq = 1.ToString(); + // 工單單號 + objD.wo_no = dr["MONo"].ToString(); + // 報廢數量 + // 2017-02-08, Joe, 取消報廢數 + // objD.scrap_qty = dr("FailQty") + // 良品數量 + if (string.IsNullOrEmpty(dr["GOODQTY"].ToString())) + { + objD.qty = decLogGoodQty.ToString(); + } + else + { + objD.qty = dr["GOODQTY"].ToString(); + } + // 人時 + objD.labor_hours = dr["EMP"].ToString(); + // objD.labor_hours = dr("RESVALUE").ToString + // 機時 + objD.machine_hours = dr["EQP"].ToString(); + // objD.machine_hours = dr("RESVALUE").ToString + // 實際加工機台 + objD.machine_no = dr["ResItem"].ToString(); // ' + // 製程順序(沒有) + // 作業編號 + objD.op_no = dr["OPNo"].ToString(); + // 單位 20180427 0046049 KevinChang,ERP回覆單位須傳入大寫 + if (string.IsNullOrEmpty(dr["MOUNITNO"].ToString())) + { + objD.unit_no = strLogUnitNo.ToUpper(); + } + else + { + objD.unit_no = dr["MOUNITNO"].ToString().ToUpper(); + } + // 報工人員 2021/03/25 Elvis + objD.reporter = dr["USERNO"].ToString(); + // 報工時間(迄) + // 2017-05-23, Joe, 此欄位改為string只傳HH:mm + // 2020/11/17,Ning, 報工日期應EventTime + // objD.report_datetime_e = Format(dr("EndTime"), "HH:mm") + objD.report_datetime_e = Strings.Format(dr["EventTime"], "HH:mm"); + // 作業人數 + objD.number_of_operators = Conversions.ToString(dr["ExcUserCount"]); + // 完成日期 + // 2017-05-23, Joe, 此欄傳yyyyMMdd,2017-07-04 KevinChang ERP討論結果此欄傳yyyyMMddHHmmss + // 2020/11/17,Ning, 報工日期應EventTime + // objD.complete_date = Format(dr("EndTime"), "yyyyMMddHHmmss") + objD.complete_date = Strings.Format(dr["EventTime"], "yyyyMMddHHmmss"); + // 備註(沒有) + // 2017-05-03, Joe, Add 計價類型、計件單價、每小時工資 + // objD.return_type = dr("WorkPriceType").ToString + // If dr("WorkPriceType").ToString = "" Then objD.return_type = 1 + objD.return_type = "1"; // 2021/4/26 Steven Mantis: 0091759 WorkPriceType與WorkPrice兩個欄位預計從60513版中下架 + + objD.price = 0.ToString(); // 單價(price), 預先填 0  ===== 0091619: [605][CP+FT] E10ICD整合問題_報工拋轉調整 + objD.wages = 0.ToString(); + // If objD.return_type = "1" Then 'return_type = "1" 計件 + // If Not IsDBNull(dr("WorkPrice")) Then objD.price = dr("WorkPrice") + // ElseIf objD.return_type = "2" Then 'return_type = "2" 計時 + // If Not IsDBNull(dr("WorkPrice")) Then objD.wages = dr("WorkPrice") + // End If + objDetail.Add(objD); + objMaster.report_detail = objDetail; + object argSCI_Object = objMaster; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "wo.work.report.data.create", pRequestKey: RequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_wo_work_report_data_create)argSCI_Object; + + str2 += "D: ERP資料" + Constants.vbCrLf; + str2 += "ERP_URL:" + ERP_URL + Constants.vbCrLf; + str2 += "InXml:" + InXml + Constants.vbCrLf; + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + + // ---------------Joe,測試用--------------------- + // Dim strFile As String = "C:\Users\Joe\Desktop\Project\RD\ERP整合\xml\response.wo.work.report.data.create.xml" + // XmlDoc.Load(strFile) + // OutXml = XmlDoc.InnerXml + // ---------------Joe,測試用--------------------- + + // 將ERP拋回的資料轉成物件 + var objReponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_wo_work_report_data_create(); + // Dim ERPResult As String = "fail" + code = "fail"; + blnException = false; + do + { + try + { + str2 += "OutXml:" + OutXml + Constants.vbCrLf; + objReponse.ParseXmlToObject(OutXml); + } + + catch (Exception ex) + { + funCreateWOWorkReportData_E10ICDRet = "Response XML Format Error!"; + // 紀錄TransactionLog() + string argstrException2 = null; + blnException = true; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_E10ICD", Environment.MachineName, "AutoRun", datEventTime.ToString("yyyy/MM/dd HH:mm:ss"), code, dr["MONo"].ToString() + "," + dr["OPGroupNo"].ToString(), "CreateWOWorkReportData", ErrorCode: "0000-999999", LogClass: "E10ICD", strException: argstrException2); + break; + } + } + while (false); + // 紀錄TransactionLog() + string argstrException = null; + str2 += "objReponse.code :" + objReponse.code + Constants.vbCrLf; + // 檢核ERP回傳結果 + if (objReponse.code == "0") + { + code = "success"; + } + if (blnException == false) //Exception時已記錄TransactionLog + { + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_E10ICD", Environment.MachineName, "AutoRun", datEventTime.ToString("yyyy/MM/dd HH:mm:ss"), code, dr["MONo"].ToString() + "," + dr["OPGroupNo"].ToString(), "CreateWOWorkReportData", strException: argstrException); + } + // =====tblERPWorkRPT_EQPSummary + // strSQL = "Insert Into tblERPWorkRPT_EQPSummary (WorkReportID, EquipmentNo, EQP_ResValue, EMP_ResValue, ERPFlag, ERPNo)" & + // " Values('" & strWorkReportID & "','" & dr("EquipmentNo").ToString & "'," & dr("EQP") & "," & dr("EMP") & ",1,'" & objReponse.report_no & "')" + // colSQL_T3.Add(strSQL) + // ===== + else + { + if (objReponse.description == null) + { + funCreateWOWorkReportData_E10ICDRet = OutXml; + } + else + { + funCreateWOWorkReportData_E10ICDRet = objReponse.description; + } + exitTry = true; + break; + } + + // 紀錄TransactionLog() + // addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_EAI", My.Computer.Name, + // "AutoRun", datEventTime.ToString("yyyy/MM/dd HH:mm:ss"), code, dr("MONo").ToString, "CreateWOWorkReportData") + + str2 += "E : 開始組SQL" + Constants.vbCrLf; + // ----- 將UNDO鎖住 ----- + strSQL = " Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_E10ICD' " + " Where LotSerial In (Select LotSerial From tblWIPLotLog_Report Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "' )"; + CollectionSQL.Add(strSQL); + str2 += "F : testffff " + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + //string argstrException1 = null; + //modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, objReponse.report_no, "CreateWOWorkReportData", strException: argstrException1); + // ----- 將報工單號回填LotLog_Report ----- + strSQL = " Update tblWIPLotLog_Report Set ERPNo='" + objReponse.report_no + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "' "; + CollectionSQL.Add(strSQL); + str2 += "G :" + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + + RequestKey = funGetRequestKey(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "wo.work.report.data.create", pRequestKey: RequestKey); + + + // ----- 將報工單據回寫MES----- + strSQL = "insert into tblSYSERPDocumentLog (TransID ,MESNo ,ERPNo ,DocumentType,CreateDate) " + " Values ('" + RequestKey + "','" + dr["LogGroupSerial"].ToString() + "','" + objReponse.report_no + "',3" + ", To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + CollectionSQL.Add(strSQL); + str2 += "H :" + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + + + foreach (string s in CollectionSQL) + str2 += s + ";" + Constants.vbCrLf; + + + + + + // ----- 執行SQL ----- + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + + // 2019/12/27, Ning, 紀錄報工單拋轉明細資料(T3_E10ICD) + // 2020/02/14 Grace 增加ERPNo欄位, 紀錄ERP回傳的報工單號, 避免執行重拋後報工單畫面查詢明細時對應到多筆資料 + bool blnShare = true; + strSQL = Conversions.ToString("Insert Into tblERPWorkRPT_Detail_E10ICD (WorkReportID, OPGROUPNO, EquipmentNo, MONo, EQP_ResValue, EMP_ResValue, GoodQty, ERPNo)" + " Values ('" + strWorkReportID + "','" + dr["OPGROUPNO"].ToString() + "','" + dr["EquipmentNo"].ToString() + "','" + dr["MONo"].ToString() + "'," + + dr["EQP"] + "," + dr["EMP"] + "," + dr["GoodQty"] + ", '" + objReponse.report_no + "')"); + colSQL_T3.Add(strSQL); + str2 += "I :" + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + + // '平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + if (blnShare) + { + strSQL = "Update tblWIPCont_Equipment Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'"; + colSQL_T3.Add(strSQL); + str2 += "J :" + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + + strSQL = "Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "' Where LogGroupSerial = '" + dr["LogGroupSerial"].ToString() + "'"; + colSQL_T3.Add(strSQL); + str2 += "K :" + Constants.vbCrLf; + str2 += "" + strSQL + Constants.vbCrLf; + } + + + // ----- 將所有單號保留,後續寄mail會用到 ----- + WorkReportNos += objReponse.report_no + ","; + + objMaster = null; + objDetail = null; + objD = null; + } + + if (exitTry) + { + break; + } + + } + dsTemp.Dispose(); + + + + + // tblCont_Resource壓上ERPFlag與WorkReportID + strSQL = "Update " + tblCont_Resource + " Set ERPFlag = 1, WorkReportID = '" + strWorkReportID + "'" + " Where EventTime >= To_Date('" + strProductionDateFrom + "','YYYY/MM/DD') AND EventTime < To_Date('" + strProductionDateEnd + "','YYYY/MM/DD') "; + SQLCommandTuning(strDataBaseType, ref strSQL); + colSQL_T3.Add(strSQL); + + // 報工單拋轉彙整資料表(T1) + strSQL = "Insert Into tblERPWorkRPT_Summary (WorkReportID, DataStartTime, DataEndTime, ERPFlag)" + " Values('" + strWorkReportID + "', To_Date('" + strProductionDateFrom + "','YYYY/MM/DD'), To_Date('" + strProductionDateEnd + "','YYYY/MM/DD'), 1)"; + SQLCommandTuning(strDataBaseType, ref strSQL); + colSQL_T3.Add(strSQL); + + + + foreach (string s in colSQL_T3) + str += s + ";" + Constants.vbCrLf; + + + // ----- 執行SQL ----- + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_T3); + + // //Return success + funCreateWOWorkReportData_E10ICDRet = "success;" + WorkReportNos + ";"; + results = "success"; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_E10ICDRet = CombineFailMsg("0000-999999", ex.Message); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + //string argstrException = null; + //modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "MONo", "CreateWOWorkReportData", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funCreateWOWorkReportData_E10ICDRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + try + { + CloseConnection(cnnTemp); + // 寄送Mail + string argFileName = "N/A"; + string argEmailSubject = "WO Work Report Data [" + strProductionDateFrom + "]"; + string argEmailBody = Conversions.ToString(funCreateWOWorkReportData_E10ICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + funCreateWOWorkReportData_E10ICDRet = argEmailBody; + } + + catch (Exception ex) + { + funCreateWOWorkReportData_E10ICDRet = "fail_Finally;" + ex.Message; + } + // + if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Log")) + { + Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Log"); + } + + var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"\Log\AutoRunWS_Log_" + Strings.Format(DateTime.Now, "yyyyMMdd") + "_SQL_A.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); + var w = new StreamWriter(fs); + w.BaseStream.Seek(0L, SeekOrigin.End); + w.WriteLine(Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + " " + str2); + w.Close(); + fs.Close(); + + if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Log")) + { + Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Log"); + } + + var fs2 = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"\Log\AutoRunWS_Log_" + Strings.Format(DateTime.Now, "yyyyMMdd") + "_SQL_B.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); + var w2 = new StreamWriter(fs2); + w2.BaseStream.Seek(0L, SeekOrigin.End); + w2.WriteLine(Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + " " + str); + w2.Close(); + fs2.Close(); + //// ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + //// 執行ERP交易完畢寫入Log + //string argstrException = null; + //modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WorkReportData_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "MONo", "CreateWOWorkReportData", strException: argstrException); + } + } + // === + while (false); + return funCreateWOWorkReportData_E10ICDRet; + + } + + + + // ======================================================================================================================== + // 程式名稱:funCreateWOWorkReportData_WF + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:報工單整合 + // 撰寫人員:KevinChang + // 撰寫日期:2017/01/06 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funCreateWOWorkReportData_WF(Collection colParameters = null) + { + object funCreateWOWorkReportData_WFRet = default(object); + + var cnnTemp = default(IDbConnection); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + var colSQL = new Collection(); + string strSQL; + + var datArriveTime = DateTime.Now; + + string strProductionDateFrom = string.Empty; // 生產日期起(如無指定則帶昨天) + string strProductionDateEnd = string.Empty; // 生產日期迄(如無指定則帶今天) + string strGroupNo = ""; // 使用者群組 + string strWorkOrderType = ""; // 報工單單別 + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + var strMONo = default(string); + + string strSQL_Field, strSQL_Value; + + var datNow = DateTime.Now; + + do + { + try + { + // ParameterXX參數說明 + // 01:生產日期[yyyy/MM/dd](如無指定則用昨天) + // 02:使用者群組 + // 03:報工單單別 + + // Parameter01為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strProductionDateFrom = Strings.Format(datNow.AddDays(-1), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(datNow, "yyyy/MM/dd"); + } + else + { + do + { + try + { + strProductionDateFrom = Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()), "yyyy/MM/dd"); + strProductionDateEnd = Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd"); + } + catch (Exception ex) + { + funCreateWOWorkReportData_WFRet = "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 01)"; + break; + } + } + while (false); + } + + // 2017/10/06 YF, 沒有Group則不發送MAIL + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + strGroupNo = ""; + } + // funCreateWOWorkReportData_WF = "User GroupNo not found!!!(Parameter 02)" + // Exit Try + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + // Parameter03為傳入參數,作為報工單單別,若無此值及超過四個字則不進行下面的程式 + if (colParameters["Parameter03"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + funCreateWOWorkReportData_WFRet = "Work Order not found!!!(Parameter 03)"; + break; + } + else + { + strWorkOrderType = Strings.Trim(Conversions.ToString(colParameters["Parameter03"])); + } + if (colParameters["Parameter03"].ToString().Length > 4) + { + funCreateWOWorkReportData_WFRet = "Work Order more than four words(Parameter 03)"; + break; + } + + cnnTemp = CreateConnection(strConnectionString); + + + + // 2017/12/27,sammi.MEStoERP生產報工抛轉資料,1:平攤(tblWIPCont_Resource_Share),2:原始(未平攤,tblWIPCont_Resource) + string tblCont_Resource = "tblWIPCont_Resource_Share "; + bool blnReCalResource = true; + + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWORKREPORTDATA' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "2") + { + tblCont_Resource = "tblWIPCont_Resource"; + blnReCalResource = false; + + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/07/19 Lena, 增加系統參數,判定是否需要重匯機時、人時, 0:No、1:Yes. + // 當為平攤時, 必須再參考系統參數中是否有設定要重匯機時 + if (blnReCalResource) + { + strSQL = "Select ParameterValue From tblSYSParameter " + " Where ParameterType='SysInfo' " + " And ParameterNo='ERPWOWorkReportReCalResource' "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ParameterValue"].ToString() == "0") + { + blnReCalResource = false; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (blnReCalResource) + { + // 機時,人時 + var colParameters_Resource = new Collection(); + colParameters_Resource.Add(strProductionDateFrom, "Parameter01"); + // funCreateWOWorkReportData_T100,TP,WF,call funShareEQPTime/funShareEMPTime,發Mail通知,統一由主funciton發出. + // colParameters_Resource.Add(strGroupNo, "Parameter02") + colParameters_Resource.Add("", "Parameter02"); + + string strResult_EQP; + strResult_EQP = Conversions.ToString(funShareEQPTime(colParameters_Resource)); + if (strResult_EQP != "success") + { + funCreateWOWorkReportData_WFRet = "funShareEQPTime:" + strResult_EQP; + break; + } + + string strResult_EMP; + strResult_EMP = Conversions.ToString(funShareEMPTime(colParameters_Resource)); + if (strResult_EMP != "success") + { + funCreateWOWorkReportData_WFRet = "funShareEMPTime:" + strResult_EMP; + break; + } + } + + // 彙整暫存表. + var dtERP = new DataTable("tblERP"); + + // ------------------------------------------------------------------------------------------- + dtERP.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dtERP.Columns.Add("OPGroupNo", Type.GetType("System.String")); // 生產線別 + dtERP.Columns.Add("MOTypeNo", Type.GetType("System.String")); // 工單單別 + // 20180122 KevinChang 新增欄位製程代號(OPNo)、機台代號(EquipmentNo)、型態(1:正常 2:報廢) + dtERP.Columns.Add("EquipmentNo", Type.GetType("System.String")); // 機台代號 + dtERP.Columns.Add("OPNo", Type.GetType("System.String")); // 製程代號 + dtERP.Columns.Add("Type", Type.GetType("System.String")); // 型態 + // ------------------------------------------------------------------------------------------- + dtERP.Columns.Add("InputQty", Type.GetType("System.Decimal")); // 移轉數量 + dtERP.Columns.Add("EQP", Type.GetType("System.Decimal")); // 機時 (Minutes) + dtERP.Columns.Add("EMP", Type.GetType("System.Decimal")); // 人時 (Minutes) + dtERP.Columns.Add("ProductNo", Type.GetType("System.String")); // 產品品號 + dtERP.Columns.Add("ProductName", Type.GetType("System.String")); // 產品品名 + dtERP.Columns.Add("SpecNo", Type.GetType("System.String")); // 產品規格 + dtERP.Columns.Add("UnitNo", Type.GetType("System.String")); // 單位 + // 2021/1/15,Ning,新增LogGroupSerial + dtERP.Columns.Add("LogGroupSerial", Type.GetType("System.String")); // LogGroupSerial + + // 2017/10/11 KunYuan:多人加工拋wf之移轉數量會變n倍,調整為直接取tblWIPLotLog_Report之GoodQty↓ + // If strDataBaseType.ToLower = "oracle" Then '增加InputQTY名稱 + // strSQL = "Select A.LogGroupSerial,A.OPGroupNo,A.EventTime,B.ResItem as EquipmentNo,A.MOTypeNo,A.MONo,A.OPNo,sum(A.InputQty) InputQty,Sum(NVL(B.ResValue,0)) EQP , " & + // "(Sum(NVL(A.ResValue,0)) / " & + // "case when (Select Count(*) From tblWIPCont_Resource C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1)= 0 then 1 else (Select Count(*) From tblWIPCont_Resource C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1) End " & + // ") EMP " & + // "From ( " & + // " Select to_char(EventTime,'yyyy/mm/dd') as EventTime,c.MOTypeNo,A.MONo,A.OPNo,Sum(A.InputQty) as InputQty,A.LogGroupSerial,Sum(A.ResValue) ResValue,B.OPGroupNo " & + // " From tblWIPCont_Resource A " & + // " Join tblWIPLotLog_Report B on A.LogGroupSerial=B.LogGroupSerial " & + // " Join tblOEMOBasis C on A.MONo = C.MONo " & + // " Where A.ResClass=0 " & + // " And A.EventTime>= to_date('" & strProductionDateFrom & "','YYYY/MM/DD HH24:MI:SS') " & + // " And A.EventTime='" & strProductionDateFrom & "'" & + // " And A.EventTime<'" & strProductionDateEnd & "'" & + // " And A.LogGroupSerial=B.LogGroupSerial " & + // " And A.Mono=C.Mono " & + // " Group By B.OPGroupNo,Convert(varchar(10),EventTime,112),c.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial " + // strSQL += " ) A " + // strSQL += " Left Join tblWIPCont_Resource B ON A.LogGroupSerial = B.LogGroupSerial And B.ResClass=1 " + // strSQL += " Group By A.OPGroupNo,A.EventTime,B.ResItem,A.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial " + // End If + + // 2021/1/15, Ning, 加上ERPFlag=0的條件 + if (strDataBaseType.ToLower() == "oracle") // 增加InputQTY名稱 + { + strSQL = "Select A.LogGroupSerial,A.OPGroupNo,A.EventTime,B.ResItem as EquipmentNo,A.MOTypeNo,A.MONo,A.OPNo,sum(A.InputQty) InputQty,Sum(NVL(B.ResValue,0)) EQP , " + "(Sum(NVL(A.ResValue,0)) / " + "case when (Select Count(*) From " + tblCont_Resource + " C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1)= 0 then 1 else (Select Count(*) From " + tblCont_Resource + " C Where C.LogGroupSerial=A.LogGroupSerial And C.ResClass = 1) End " + ") EMP " + "From ( " + " Select to_char(EventTime,'yyyy/mm/dd') as EventTime,c.MOTypeNo,A.MONo,A.OPNo,B.GoodQty as InputQty,A.LogGroupSerial,Sum(A.ResValue) ResValue," + " (Case B.OPGroupNo When 'N/A' Then OPGroup.OPGroupNo Else B.OPGroupNo end) OPGroupNo " + " From " + tblCont_Resource + " A " + " Join tblWIPLotLog_Report B on A.LogGroupSerial=B.LogGroupSerial " + " Left Join tblOPGroupDetail OPGroup On B.OPNO=OPGroup.OPNO " + " Join tblOEMOBasis C on A.MONo = C.MONo " + " Where A.ResClass=0 " + " And A.EventTime>= to_date('" + strProductionDateFrom + "','YYYY/MM/DD HH24:MI:SS') " + " And A.EventTime='" + strProductionDateFrom + "'" + " And A.EventTime<'" + strProductionDateEnd + "'" + " And IsNull(A.ERPFlag,0) = 0 " + " And A.LogGroupSerial=B.LogGroupSerial " + " And A.Mono=C.Mono " + " Group By (Case B.OPGroupNo When 'N/A' Then OPGroup.OPGroupNo Else B.OPGroupNo end),EventTime,c.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial, B.GoodQty "; + strSQL += " ) A "; + strSQL += " Left Join " + tblCont_Resource + " B ON A.LogGroupSerial = B.LogGroupSerial And B.ResClass=1 "; + strSQL += " Group By A.OPGroupNo,A.EventTime,B.ResItem,A.MOTypeNo,A.MONo,A.OPNo,A.LogGroupSerial "; + } + // 2017/10/11 KunYuan:多人加工拋wf之移轉數量會變n倍,調整為直接取tblWIPLotLog_Report之GoodQty↑ + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblResource"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblResource", cnnTemp); + + + + DataRow drAdd; + decimal decEQP, decEMP, decInputQty; + string strProductNo, strProductName, strSpecNo, strUnitNo; + + bool exitTry = false; + foreach (DataRow drResource in dsTemp.Tables["tblResource"].Rows) + { + strMONo = drResource["MONO"].ToString(); + if (drResource["InputQty"] is DBNull) + { + decInputQty = 0m; + } + else + { + decInputQty = Conversions.ToDecimal(drResource["InputQty"]); + } + + // 取得工單對應之產品資料 + strSQL = "Select A.ProductNo, B.PRODUCTVERSION, B.PRODUCTNAME, B.SPECNO, B.UNITNO, C.PROPERTYNO, C.DEFAULTVALUE ,B.ERPNo From tblOEMOBasis A" + " LEFT JOIN tblPRDproductBasis B ON A.PRODUCTNO = B.PRODUCTNO" + " LEFT JOIN tblPRDProductproperty C ON A.PRODUCTNO = C.PRODUCTNO and A.PRODUCTVERSION = C.PRODUCTVERSION and C.PROPERTYNO='" + strERPUnitNo + "'" + " Where MONo='" + drResource["MONo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + + if (drTemp.Read()) + { + + if (string.IsNullOrEmpty(drTemp["ERPNo"].ToString())) + { + strProductNo = drTemp["ProductNo"].ToString(); + } + else + { + strProductNo = drTemp["ERPNo"].ToString(); + } + strProductName = drTemp["ProductName"].ToString(); + strSpecNo = drTemp["SpecNo"].ToString(); + // 以ERPUnitNo去搜尋單位,若找不到就用產品主檔設定的單位 + if (string.IsNullOrEmpty(drTemp["DefaultValue"].ToString())) + { + strUnitNo = drTemp["UnitNo"].ToString(); + } + else + { + strUnitNo = drTemp["DefaultValue"].ToString(); + } + } + else + { + funCreateWOWorkReportData_WFRet = " Warning!!! MONo:" + drResource["MONo"].ToString() + " at tblOEMOBasis,not exist!!!"; + exitTry = true; + break; + } + drTemp.Close(); + //cmmTemp.Dispose(); + + + // 2019/11/22 Grace Mantis 62203, 因WF ERP拋轉的製程性質可能有託外, 報工時須將託外資料排除 + strSQL = "Select OPNO From TBLOPBASIS Where OSOption = '1' And OPNo = '" + drResource["OPNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + + // 將撈出來的資料塞進DataTable + drAdd = dtERP.NewRow(); + if (string.IsNullOrEmpty(drResource["OPGroupNo"].ToString())) + { + drAdd["OPGroupNo"] = "N/A"; + } + else + { + drAdd["OPGroupNo"] = drResource["OPGroupNo"].ToString(); + } + drAdd["MOTypeNo"] = drResource["MOTypeNo"].ToString(); + drAdd["MONo"] = drResource["MONo"].ToString(); + drAdd["InputQty"] = decInputQty; + drAdd["EMP"] = drResource["EMP"]; + drAdd["EQP"] = drResource["EQP"]; + drAdd["ProductNo"] = strProductNo; + drAdd["ProductName"] = strProductName; + drAdd["SpecNo"] = strSpecNo; + drAdd["UnitNo"] = strUnitNo; + // 20180122 KevinChang 新增欄位製程代號(OPNo)、機台代號(EquipmentNo)、型態(1:正常 2:報廢) + drAdd["OPNo"] = drResource["OPNo"].ToString(); + drAdd["EquipmentNo"] = drResource["EquipmentNo"].ToString(); + drAdd["Type"] = "1"; + // 2021/1/15,Ning, 新增LogGroupSerial + drAdd["LogGroupSerial"] = drResource["LogGroupSerial"]; + + dtERP.Rows.Add(drAdd); + + strProductNo = ""; + strProductName = ""; + strSpecNo = ""; + strUnitNo = ""; + } + + drTemp.Close(); + //cmmTemp.Dispose(); + } + + if (exitTry) + { + break; + } + + + if (dtERP.Rows.Count > 0) + { + // 以OPGroupNo作Sorting,一個Group傳送一份XML + string strResult = default(string); + string strCode = default(string); + string strSysMsg = default(string); + string strMesMsg = default(string); + string strStack = default(string); + string strERPNo = default(string); + bool exitTry1 = false; + foreach (DataRow drERPHead in dtERP.DefaultView.ToTable(true, "OPGroupNo").Rows) + { + var colSQL_Log = new Collection(); + int intItemNo = 1; + + datNow = DateTime.Now; + + string strTDRecordList = ""; + string strTDTempField = ""; + string strTERecordList = ""; + string strTETempField = ""; + + // SFCTD下要組的資訊 + strTDTempField = cbXMLField_WF("TD001", strWorkOrderType); // 報工單別 + strTDTempField += cbXMLField_WF("TD003", strProductionDateFrom.Replace("/", "")); // 生產當日,YYYYMMDD + strTDTempField += cbXMLField_WF("TD004", drERPHead["OPGroupNo"].ToString()); // MES作業站群組(生產線別) + strTDRecordList = cbXMLRecordList_WF(strTDTempField); + // 20180122 調整為依照工單+生產線別+機台+製程代號+型態去匯整 + // For Each drERPBody As DataRow In dtERP.Select("MONo='" & drERPHead("MONo").ToString & "' And OPGroupNo='" & drERPHead("OPGroupNo").ToString & "' and OPNo='" & drERPHead("OPNo").ToString & "' + // And EquipmentNo='" & drERPHead("EquipmentNo").ToString & "' and OPNo='" & drERPHead("OPNo").ToString & "' and Type='" & drERPHead("Type").ToString & "'") + foreach (DataRow drERPBody in dtERP.Select("OPGroupNo='" + drERPHead["OPGroupNo"].ToString() + "'")) + { + // 2017-04-26, Joe, 工單單別傳(-)前,單號傳(-)後 + string[] aryMO = drERPBody["MONo"].ToString().Split('-'); + + // 2017/10/24 KunYuan:加判若非合法工單格式則不拋轉 + if (aryMO.Length < 2) + continue; + + // SFCTE下要組的資訊 + // 20180122 KevinChang 新增傳回機台代號(TE005)、製程代號(TE009)、型態(TE010) + string ProductNameTmp = drERPBody["ProductName"].ToString(); + string SpecNoTmp = drERPBody["SpecNo"].ToString(); + + strTETempField = cbXMLField_WF("TE005", drERPBody["EquipmentNo"].ToString()); // 機台代號 + strTETempField += cbXMLField_WF("TE006", aryMO[0]); // 工單單別 + strTETempField += cbXMLField_WF("TE007", aryMO[1]); // 工單單號 + strTETempField += cbXMLField_WF("TE009", drERPBody["OPNo"].ToString()); // 製程代號 + strTETempField += cbXMLField_WF("TE010", drERPBody["Type"].ToString()); // 型態(1:正常 2:報廢) + strTETempField += cbXMLField_WF("TE011", Conversions.ToString(drERPBody["InputQty"])); // 移轉數量 + strTETempField += cbXMLField_WF("TE012", Conversions.ToString(Operators.MultiplyObject(drERPBody["EMP"], 60))); // 使用人時,單位(秒) + strTETempField += cbXMLField_WF("TE013", Conversions.ToString(Operators.MultiplyObject(drERPBody["EQP"], 60))); // 使用機時,單位(秒) + strTETempField += cbXMLField_WF("TE017", drERPBody["ProductNo"].ToString()); // 產品品號 + strTETempField += cbXMLField_WF("TE018", modWIN.CInputWithXMLStandard(ref ProductNameTmp)); // 產品品名 20170605 Add By KevinChang 加入Cinput轉換特殊字原 + strTETempField += cbXMLField_WF("TE019", modWIN.CInputWithXMLStandard(ref SpecNoTmp)); // 產品規格 20170605 Add By KevinChang 加入Cinput轉換特殊字原 + strTETempField += cbXMLField_WF("TE020", drERPBody["UnitNo"].ToString()); // 單位 + strTERecordList += cbXMLRecordList_WF(strTETempField); + + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReportDetail_WF + strSQL_Field = "Insert into tblERPWorkReportDetail_WF " + " (SequenceNo, ItemNo, TE006, TE007, TE011, TE012, TE013, TE017, TE018, TE019, TE020 "; + strSQL_Value = Conversions.ToString(" Values ('" + Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "'," + intItemNo + ",'" + aryMO[0] + "','" + aryMO[1] + "'," + + drERPBody["InputQty"] + "," + Operators.MultiplyObject(drERPBody["EMP"], 60) + "," + Operators.MultiplyObject(drERPBody["EQP"], 60) + + ",'" + drERPBody["ProductNo"].ToString() + "','" + ChkSingleQuation(drERPBody["ProductName"].ToString()) + "','" + ChkSingleQuation(drERPBody["SpecNo"].ToString()) + + "','" + drERPBody["UnitNo"].ToString() + "'"); + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 2021/1/15,Ning,更新ERPFlag + strSQL = Conversions.ToString("Update " + tblCont_Resource + " Set ERPFlag = 1 Where LogGroupSerial = '" + + drERPBody["LogGroupSerial"] + "'"); + colSQL_Log.Add(strSQL); + + // 平攤的計算方式才需要回填tblWIPCont_Equipment與tblWIPCont_Employee_MultiUser + if (tblCont_Resource == "tblWIPCont_Resource_Share ") + { + strSQL = Conversions.ToString("Update tblWIPCont_Equipment Set ERPFlag = 1 Where LogGroupSerial = '" + + drERPBody["LogGroupSerial"] + "'"); + colSQL_Log.Add(strSQL); + + strSQL = Conversions.ToString("Update tblWIPCont_Employee_MultiUser Set ERPFlag = 1 Where LogGroupSerial = '" + + drERPBody["LogGroupSerial"] + "'"); + colSQL_Log.Add(strSQL); + } + + // 鎖住Undo + strSQL = Conversions.ToString(" Update tblWIPReverseHistory Set CommitState=1, CommitDesc='AutoRun CreateWOWorkReportData_WF' Where LotSerial In " + " (Select LotSerial From tblWIPLotLog Where LogGroupSerial = '" + + drERPBody["LogGroupSerial"] + "')"); + colSQL_Log.Add(strSQL); + + intItemNo += 1; + } + + // ---- InXml ----- + string strAccess = ""; + string strParameter = ""; + + // cbXMLAccess_WF + // - + // - + strAccess = cbXMLAccess_WF(); + + // cbXMLParameter_WF + // 7 + // 1 + string strReferenceCase = "1"; // 1.重複不做 2.重複覆蓋 3.補資料 + string strReferenceType = "7"; // MES整合匯入WF(DoAction=7) + strParameter = cbXMLParameter_WF(strReferenceType, strReferenceCase); + + // ERP端的TABLE NAME(SFCTD) + string strFormHead = ""; + strFormHead = cbXMLFormHead_WF("SFCTD", strTDRecordList); + + // ERP端的TABLE NAME(SFCTE) + string strFormBody = ""; + strFormBody = cbXMLFormBody_WF("SFCTE", strTERecordList); + + InXml = cbXMLRequest_WF(strAccess, strParameter, cbXMLData_WF(strFormHead, strFormBody)); + + // 取得WorkFlow的ERP設定值 + // funGetERPSetting("Workflow") 2019/05/15 Edison Marked 已於cbXMLAccess_WF取得,不需重複取得 + + var XmlDoc = new XmlDocument(); + + using (var ws = new wsERP_WorkFlow.WFMESService()) + { + ws.Url = gERPWSURL; + OutXml = ws.XMLAdapter(InXml); + } + + + // ----- 取得ERP執行結果----- + XmlDoc.LoadXml(OutXml); + + chkResponseGetException_WF(XmlDoc, ref strResult, ref strCode, ref strSysMsg, ref strMesMsg, ref strStack); + + // 2021/1/27,Ning,86220: [萬達光電] AUTORUN報工需回寫WF報工單號 + // ----- 取得ERP入庫單號 ----- + chkResponseContent_WF(XmlDoc, ref strERPNo); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, datArriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funCreateWOWorkReportData_WF", Environment.MachineName, modWIN.gUserNo, datArriveTime.ToString("yyyy/MM/dd HH:mm:ss"), strResult, "ERP", "CreateWOWorkReportData", strException: argstrException); + if (strResult.ToLower() == "fail") + { + funCreateWOWorkReportData_WFRet = "fail;ERP Return Message:" + strCode + "," + strSysMsg + "," + strMesMsg; + exitTry1 = true; + break; + } + else + { + // 2017/12/29,sammi.紀錄抛轉資料. + // tblERPWorkReport_WF + strSQL_Field = "Insert into tblERPWorkReport_WF " + " (SequenceNo,TD001,TD003,TD004,ERPNo,CreateDate,StartDate,EndDate "; + strSQL_Value = " Values ('" + Strings.Format(datNow, "yyyyMMddHHmmssffffff") + "','" + strWorkOrderType + "','" + strProductionDateFrom.Replace("/", "") + "','" + drERPHead["OPGroupNo"].ToString() + "'," + "'" + strERPNo + "', To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') ," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(Conversions.ToDate(strProductionDateEnd), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + colSQL_Log.Add(strSQL); + + // 以一次抛轉為單位,直接先寫入. + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_Log); + } + } + + if (exitTry1) + { + break; + } + + } + + // //Return success + funCreateWOWorkReportData_WFRet = "success"; + } + + + catch (Exception ex) + { + funCreateWOWorkReportData_WFRet = CombineFailMsg("0000-999999", ex.Message); + try + { + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, datArriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funCreateWOWorkReportData_WF", Environment.MachineName, modWIN.gUserNo, datArriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "ERP", "XMLAdapter", ErrorCode: "0000-999999", LogClass: "AutoRun", strException: argstrException); + } + catch (Exception ex2) + { + } + } + finally + { + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, datArriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funCreateWOWorkReportData_WF", Environment.MachineName, modWIN.gUserNo, datArriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "ERP", "XMLAdapter", strException: argstrException); + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + try + { + CloseConnection(cnnTemp); + + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 STAR + var dsResult = new DataTable("dsResult"); + // 拋轉日期、報工日期、工單編號、失敗原因 + // strProductionDateFrom 報工日期CreateConnection + // drResource("MONo").ToString 工單編號 + // funCreateWOWorkReportData_WF 失敗原因CreateConnection + dsResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dsResult.Columns.Add("ProductionDate", Type.GetType("System.String")); // 報工日期 + dsResult.Columns.Add("MONo", Type.GetType("System.String")); // 工單單號 + dsResult.Columns.Add("FailReason", Type.GetType("System.String")); // 失敗原因 + string strFillType = "XLS"; + dsResult.Rows.Add(strProductionDateEnd, strProductionDateFrom, strMONo, funCreateWOWorkReportData_WFRet); + + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + // Dim iugTemp As New iMESUltraGrid.iMESUltraGridControl + // AddHandler iugTemp.iMESUltraGrid_InitializeLayOut, AddressOf iMESUltraGrid_InitializeLayOut + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + //var memStream = new MemoryStream(); + //讓最後一列style生效,新增空列 + DataRow drEnd = dsResult.NewRow(); + dsResult.Rows.Add(drEnd); + var dtResult = new DataSet(); + dtResult.Tables.Add(dsResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult.Tables[0]; + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dtResult, ExcelMode, strLanguageMode, strResourceDir); + //var memStream = new MemoryStream(membyte); + //memStream.Seek(0L, SeekOrigin.Begin); + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // //ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + //} + //foreach (DataRow drResource in dsResult.Rows) + //{ + // switch (strFillType.ToString().ToUpper() ?? "") + // { + // // Case "XLSX" + // // '匯出Excel再轉Stream + // // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel2007) + // // workbook.Save(memStream) + // // memStream.Seek(0, SeekOrigin.Begin) + // case "XLS": + // { + // // 匯出Excel再轉Stream + // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid); // iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003 + // workbook.Save(memStream); + // memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + // } + //} + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + try + { + dtResult.Dispose(); + } + catch (Exception ex) + { + } + // =================================2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 END + // 寄送Mail + if (!string.IsNullOrEmpty(strGroupNo)) + { + string argFileName = "ErrorList.xls"; + string argEmailSubject = "WO Work Report Data [" + strProductionDateFrom + "]"; + string argEmailBody = Conversions.ToString(funCreateWOWorkReportData_WFRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funCreateWOWorkReportData_WFRet = argEmailBody; + } + } + + catch (Exception ex) + { + funCreateWOWorkReportData_WFRet = CombineFailMsg("0000-999999", ex.Message); + } + } + } + while (false); + return funCreateWOWorkReportData_WFRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPPRDMTLBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:整合服務-產品、物料主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPPRDMTLBasis(Collection colParameters = null) + { + object funMESCallERPPRDMTLBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "item.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_item_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_item_get(); + objMaster.data_time = strDate; + objMaster.key_condition = ""; + objMaster.page_size = strPageSize; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_item_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add by KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + // 先確認是否有測試檔案,有的話就讀取出xml + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_item_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + objMaster.page_size = strPageSize; + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_item_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteProductOrMaterailBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("item_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPPRDMTLBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + // UpdateLogTableErrorInfo(nodeID.InnerText, strTemp) + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPPRDMTLBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPPRDMTLBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPPRDMTLBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPPRDMTLBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPMaterialVendorBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:整合服務-物料供應商主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPVendorBasis(Collection colParameters = null) + { + object funMESCallERPVendorBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "supplier.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_supplier_get(); + // Dim colResponseXML As New Collection + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_supplier_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_supplier_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_supplier_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_supplier_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus == true) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteVendorBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("supplier_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPVendorBasisRet = "success"; + results = "fail"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPVendorBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件供應商-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPVendorBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPVendorBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPVendorBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPMaterialVendorMAPBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:整合服務-物料供應商主檔對應 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPMaterialVendorMAPBasis(Collection colParameters = null) + { + object funMESCallERPMaterialVendorMAPBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "item.supplier.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]!", strLanguageMode, strResourceDir)); + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_item_supplier_get(); + // Dim colResponseXML As New Collection + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_item_supplier_get(); + objMaster.data_time = strDate; + objMaster.key_condition = ""; + objMaster.page_size = strPageSize; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_item_supplier_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPMaterialVendorMAPBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_item_supplier_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + objMaster.page_size = strPageSize; + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_item_supplier_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus == true) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteMaterialVendorMapBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("item_supplier_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPMaterialVendorMAPBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPMaterialVendorMAPBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPMaterialVendorMAPBasisRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPMaterialVendorMAPBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件供應商主檔對應抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPMaterialVendorMAPBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPMaterialVendorMAPBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPMaterialVendorMAPBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPEquipmentBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:整合服務-設備主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPEquipmentBasis(Collection colParameters = null) + { + object funMESCallERPEquipmentBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "machine.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_machine_get(); + // Dim colResponseXML As New Collection + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_machine_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_machine_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_machine_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_machine_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus == true) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteEquipmentBasis(ref objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("machine_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPEquipmentBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPEquipmentBasisRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]設備-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPEquipmentBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPEquipmentBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPEquipmentBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPCustomerBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:客戶主檔整合 + // 撰寫人員:LiJyun + // 撰寫日期:2017/02/02 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funMESCallERPCustomerBasis(Collection colParameters = null) + { + object funMESCallERPCustomerBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "customer.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found ERP ERP Setting Info (ERP_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_customer_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_customer_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_customer_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("customer.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_customer_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + objRequest.page_size = strPageSize; + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_customer_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESCustomerBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 客戶主檔拋轉執行失敗!!"); + } + } + } + } + } + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPCustomerBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPCustomerBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]客戶主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPCustomerBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPCustomerBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPCustomerBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPInventoryBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:客戶主檔整合 + // 撰寫人員:LiJyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funMESCallERPInventoryBasis(Collection colParameters = null) + { + object funMESCallERPInventoryBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "warehouse.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_warehouse_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_warehouse_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_warehouse_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("warehouse.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_warehouse_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_warehouse_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESInventoryBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 庫房主檔拋轉執行失敗!!"); + } + } + } + } + } + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPInventoryBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPInventoryBasisRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]庫房主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPInventoryBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPInventoryBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPInventoryBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPLocatorBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:客戶主檔整合 + // 撰寫人員:LiJyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funMESCallERPLocatorBasis(Collection colParameters = null) + { + object funMESCallERPLocatorBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "storage.spaces.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_storage_spaces_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_storage_spaces_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_storage_spaces_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("storage.space.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_storage_spaces_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_storage_spaces_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESLocatorBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 儲位主檔拋轉執行失敗!!"); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPLocatorBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPLocatorBasisRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]儲位主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPLocatorBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPLocatorBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPLocatorBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPDepartmentBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:客戶主檔整合 + // 撰寫人員:LiJyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + + // 為做測試所以Function先改為Public,測試完畢必須改回private + private object funMESCallERPDepartmentBasis(Collection colParameters = null) + { + object funMESCallERPDepartmentBasisRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "department.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_department_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_department_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_department_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("department.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request.SCI_Request_department_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request.SCI_Request_department_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESDepartmentBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 部門主檔拋轉執行失敗!!"); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPDepartmentBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPDepartmentBasisRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]部門主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPDepartmentBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPDepartmentBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPDepartmentBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPShiftBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:班別主檔整合 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPShiftBasis(Collection colParameters = null) + { + object funMESCallERPShiftBasisRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "shift.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]!", strLanguageMode, strResourceDir)); + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_shift_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_shift_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "shift.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_shift_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("shift.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPShiftBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_shift_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "shift.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_shift_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteShiftBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("shift_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + + // CollectionSQL = Nothing + // XmlDoc = Nothing + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPShiftBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", strServiceName, LogClass: "AutoRun", strException: argstrException); + + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPShiftBasisRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPShiftBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPShiftBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPShiftBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]班別-基本資料拋轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPShiftBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPShiftBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPShiftBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPOPBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:作業站主檔整合 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPOPBasis(Collection colParameters = null) + { + object funMESCallERPOPBasisRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "op.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_op_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_op_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "op.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_op_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("op.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPOPBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_op_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "op.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_op_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteOPBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("op_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + // CollectionSQL = Nothing + // XmlDoc = Nothing + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "", "CreateMESCallERPOPBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPOPBasisRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPOPBasisRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPOPBasisRet = "fail;" + strTemp; + + } + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "", "CreateMESCallERPOPBasis", strException: argstrException); + + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]作業站-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPOPBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPOPBasisRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPOPBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPOPGroupBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:工作站主檔整合 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPOPGroupBasis(Collection colParameters = null) + { + object funMESCallERPOPGroupBasisRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "workstation.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為E-mail,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_workstation_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_workstation_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "workstation.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_workstation_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("workstation.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPOPGroupBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_workstation_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "workstation.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_workstation_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteOPGroupBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("workstation_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + + // CollectionSQL = Nothing + // XmlDoc = Nothing + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPGroupBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPGroupBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPOPGroupBasisRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPOPGroupBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPOPGroupBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPGroupBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPGroupBasis", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]工作站-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPOPGroupBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPOPGroupBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPOPGroupBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPEquipmentProductivity + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:資源行事曆-基本資料拋轉 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/23 + // ======================================================================================================================== + private object funMESCallERPEquipmentProductivity(Collection colParameters = null) + { + object funMESCallERPEquipmentProductivityRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "resource.calendar.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + do + { + try + { + // Parameter01為傳入參數,作為E-mail,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]!", strLanguageMode, strResourceDir)); + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_resource_calendar_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_resource_calendar_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "resource.calendar.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_resource_calendar_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("resource.calendar.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentProductivity", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_resource_calendar_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "resource.calendar.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_resource_calendar_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteEquipmentProductivity(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("resource.calendar.get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + + // CollectionSQL = Nothing + // XmlDoc = Nothing + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "funMESCallERPEquipmentProductivity", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPEquipmentProductivity", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPEquipmentProductivityRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPEquipmentProductivityRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPEquipmentProductivityRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "funMESCallERPEquipmentProductivity", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPEquipmentProductivity", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]資源行事曆-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPEquipmentProductivityRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPEquipmentProductivityRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPEquipmentProductivityRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPAccessoryBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:模治具-基本資料抛轉 + // 撰寫人員:敬翔 + // 撰寫日期:2017/03/21 + // ======================================================================================================================== + private object funMESCallERPAccessoryBasis(Collection colParameters = null) + { + object funMESCallERPAccessoryBasisRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "mold.fixture.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]!", strLanguageMode, strResourceDir)); + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_mold_fixture_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_mold_fixture_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "mold.fixture.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_mold_fixture_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("mold.fixture.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPAccessoryBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_mold_fixture_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "mold.fixture.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_mold_fixture_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteAccessoryBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("accessory_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + // CollectionSQL = Nothing + // XmlDoc = Nothing + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "funMESCallERPAccessoryBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPAccessoryBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPAccessoryBasisRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPAccessoryBasisRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPAccessoryBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "funMESCallERPAccessoryBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPAccessoryBasis", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]模治具-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPAccessoryBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPAccessoryBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPAccessoryBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPUserBasis + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:使用者主檔整合 + // 撰寫人員:KunYuan + // 撰寫日期:2017/06/01 + // ======================================================================================================================== + private object funMESCallERPUserBasis(Collection colParameters = null) + { + object funMESCallERPUserBasisRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "user.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_user_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_user_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "user.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_user_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPUserBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request.SCI_Request_user_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "user.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request.SCI_Request_user_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteUserBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("user_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPUserBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "", "CreateMESCallERPUserBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPUserBasisRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPUserBasisRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPUserBasisRet = CombineFailMsg("0000-999999", strTemp); + + } + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPUserBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "", "CreateMESCallERPUserBasis", strException: argstrException); + + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]使用者-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPUserBasisRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPUserBasisRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + + return funMESCallERPUserBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:funMESCallERPDeleteLogData + // 傳入參數:colParameters + // 傳回參數:success(成功), fail(失敗) + // 用 途:刪除拋轉資料 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private object funMESCallERPDeleteLogData(Collection colParameters = null) + { + object funMESCallERPDeleteLogDataRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + var arriveTime = DateTime.Now; + + string strDay = ""; // 刪除天數 + string strDate = ""; // 刪除日期 + string strDeleteDay = ""; // 刪除此參數日期前的資料 + + string strParameter01 = ""; + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + var colResponseXML = new Collection(); + + do + { + try + { + // Parameter01為傳入參數,作為E-mail,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]!", strLanguageMode, strResourceDir)); + break; + } + // Parameter05為傳入參數,作為刪除日期 + if (!(colParameters["Parameter05"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter05"])))) + { + // yyyyMd + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().Length, 6, false))) + { + strDate = Conversions.ToString(colParameters["Parameter05"].ToString().Substring(0, 4) + + "/0" + colParameters["Parameter05"].ToString().Substring(4, 1) + "/0" + colParameters["Parameter05"].ToString().Substring(5, 1)); + } + // yyyyMMdd + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().Length, 8, false))) + { + strDate = Conversions.ToString(colParameters["Parameter05"].ToString().Substring(0, 4) + + "/" + colParameters["Parameter05"].ToString().Substring(4, 2) + "/" + colParameters["Parameter05"].ToString().Substring(6, 2)); + } + // yyyy/MM/dd + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(colParameters["Parameter05"].ToString().Length, 10, false))) + { + strDate = colParameters["Parameter05"].ToString().Trim(); + } + } + else + { + // 沒輸入則取當前日期 + strDate = DateTime.Now.ToString("yyyy/MM/dd"); + } + + // Parameter04為傳入參數,作為刪除天數 + if (!Information.IsNumeric(colParameters["Parameter04"])) + { + // 預設取30天 30天前全刪 + strDay = 30.ToString(); + } + else if (!(colParameters["Parameter04"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"]))) & Conversions.ToDouble(Strings.Trim(Conversions.ToString(colParameters["Parameter04"]))) > 0d) + { + strDay = colParameters["Parameter04"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Parameter 04, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + break; + } + + + strDate = Strings.FormatDateTime(Conversions.ToDate(strDate), Microsoft.VisualBasic.DateFormat.ShortDate); + strDeleteDay = DateAndTime.DateAdd("D", -Convert.ToInt32(strDay), strDate).ToString("yyyy/MM/dd"); + // 刪除LogTable + strSQL = "delete TBLERPTRANSACTIONXMLLOG_BASIS where to_char(CreateDate,'yyyy/MM/dd') < '" + strDeleteDay + "'"; + ExecuteSQLNoneQuery(strDataBaseType, strConnectionString, ref strSQL); + } + catch (Exception ex) + { + funMESCallERPDeleteLogDataRet = "fail;" + ex.Message; + OutXml = ex.Message; + aryReturnMessage.Add(OutXml); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPDeleteLogData", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPDeleteLogData", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPShiftBasis(), "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPDeleteLogDataRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + // UpdateLogTableErrorInfo(colResponseXML, "", strTemp) + + // //fail; + funMESCallERPDeleteLogDataRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPDeleteLogData", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPDeleteLogData", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]刪除拋轉資料-抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPDeleteLogDataRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPDeleteLogDataRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + + return funMESCallERPDeleteLogDataRet; + + } + + // ======================================================================================================================== + // 程式名稱:GetReTransData + // 傳入參數:serviceName:服務名稱 colResponseXML:ResponseXML容器 Collection + // 用 途:置TBLERPTRANSACTIONXMLLOG_BASIS取得重拋資料 + // 撰寫人員:崑源 + // 撰寫日期:2017/03/16 + // ======================================================================================================================== + private void GetReTransData(string serviceName, ref Collection colResponseXML) + { + string strSQL = ""; + var cn = default(IDbConnection); + + try + { + strSQL = "SELECT ERP2MESXML FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE STATUS = '0' AND SERVICENAME = '" + serviceName + "' ORDER BY ERPTRANSACTIONDATE "; + string argstrConnectionString = Conversions.ToString(ConnectionString); + cn = CreateConnection(argstrConnectionString); + //cmd = CreateCommand("", cn); + string argDataBaseType = Conversions.ToString(DataBaseType); + //cmd.CommandText = SQLCommandTuning(argDataBaseType, ref strSQL); + using (var dr = ExecuteSQLQuery_Reader(SQLCommandTuning(argDataBaseType, ref strSQL), cn)) + { + while (dr.Read()) + colResponseXML.Add(Strings.Replace(dr["ERP2MESXML"].ToString(), "'", "''")); + } + } + catch (Exception ex) + { + throw; + } + finally + { + CloseConnection(cn); + } + } + #endregion + + #region ---ERP to MES 處理Function--- + + // ======================================================================================================================== + // 程式名稱:WriteProductOrMaterailBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入產品或物料主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteProductOrMaterailBasis(iMESCIO.SCI.ERP.Response.SCI_Response_item_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteProductOrMaterailBasisRet = default(int); + // 2017-06-05, Joe, ERP拋過來的料件資訊全部都寫入物料主檔中,如料件是屬產品的(A)則另外寫入產品主檔 + WriteProductOrMaterailBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strSQLCol; + string strSQLVal; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_ProductNo, strERP_MaterialNo, strERP_ProductVersion, strERP_status, strERP_UnitNo, strERP_ItemName, strErpNo, strERP_SpecNo, strERP_LotManage = default(string); + DataRow drChk; + string strERP_ProductNo_MaterialNo; //item_sort值為空值時,item_no 暫存, 19245 + + // 預設值 + string strProductType = "PRODUCT"; // 給予預設值"PRODUCT",若不存在則自動新增產品類別. + int intIssueState = 0; + int intCurVersion = 0; + // Dim strSpecNo As String = "N/A" + string strMaterialType = "MATERIL"; // 給予預設值"MATERIL",若不存在則自動新增物料類別. + int intPutInPlace = 3; // 投料點:預設為3(工單). + int intCountWay = 1; // 計量方法:預設為1(實際用量). + int intCheckLotNo = 1; // 物料批號檢查:預設為0(不檢查批號). + var aryProductType = new ArrayList(); // 記錄產品類別是否新增 + var aryMaterialType = new ArrayList(); // 記錄物料類別是否新增 + var aryUnitNo = new ArrayList(); // 記錄單位主檔是否新增 + do + { + try + { + bool exitTry2 = false; + for (int intRow = 0, loopTo = objResponse.item_get.Count - 1; intRow <= loopTo; intRow++) + { + + if (string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_sort)) + { + // 0129695, item_sort值為空值時, tran_status="D" 不回報錯誤,且同步刪除物料主檔及產品主檔中該物料編號, 19245, 2023/08/29 + int intchkMaterial_Product = 0; + // 取出欄位資料 + strERP_ProductNo_MaterialNo = objResponse.item_get[intRow].item_no.Trim().ToUpper(); + strERP_status = objResponse.item_get[intRow].tran_status.Trim().ToUpper(); + if (strERP_status == "D") + { + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_ProductNo_MaterialNo, cnnMES, aryMES_Message); + if (drChk != null) + { + if (!(drChk["MaterialNo"] is DBNull)) + { + // ----------------------------------------------------------- + // 物料編號使用狀況檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkforDelMaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo_MaterialNo) < 0) + { + exitTry2 = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], 0, false))) + { + + // ----------------------------------------------------------- + // 刪除MES物料相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo_MaterialNo) < 0) + { + exitTry2 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState=-1" + " Where MaterialNo='" + strERP_ProductNo_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + // aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " & strERP_ProductNo_MaterialNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else + intchkMaterial_Product = ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo_MaterialNo); + + } + else + intchkMaterial_Product = -1; //沒有物料編號 + + + // 檢查是否有此產品設定 + if (string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_ver)) //判斷version是否為空 + { + strERP_ProductVersion = Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_ver), "1", objResponse.item_get[intRow].item_ver).ToString().Trim(); + strSQL = "Select ProductNo,IssueState From tblPRDProductBasis " + " Where ProductNo ='" + strERP_ProductNo_MaterialNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo_MaterialNo, strERP_ProductVersion) < 0) + { + exitTry2 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " IssueState=-1" + " Where ProductNo='" + strERP_ProductNo_MaterialNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " & strERP_ProductNo_MaterialNo & ", [%PRODUCTVERSION%](item_ver): " & strERP_ProductVersion & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else + intchkMaterial_Product = ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo_MaterialNo, strERP_ProductVersion); + + drTemp.Close(); + //cmmTemp.Dispose(); + } + else + intchkMaterial_Product = -1; //沒有產品 + + if (intchkMaterial_Product != 0) + { + exitTry2 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + else + { + aryMES_Message.Add(TranslateMsg("item_sort" + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + break; + } + + if (objResponse.item_get[intRow].item_sort.Equals("A")) // 處理產品類型 + { + // ----------------------------------------------------------- + // 固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddProductType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryProductType.IndexOf(strProductType) == -1) + { + if (AddProductType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryProductType.Add(strProductType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_ProductNo = objResponse.item_get[intRow].item_no.Trim().ToUpper(); + strErpNo = objResponse.item_get[intRow].item_no.Trim(); // 記錄原始之ERP編號 + strERP_ProductVersion = Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_ver), "1", objResponse.item_get[intRow].item_ver).ToString().Trim(); + + strERP_status = objResponse.item_get[intRow].tran_status.Trim().ToUpper(); + if (string.IsNullOrEmpty(objResponse.item_get[intRow].production_unit_no)) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = objResponse.item_get[intRow].production_unit_no.Trim(); + strERP_UnitNo = objResponse.item_get[intRow].production_unit_no.Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_name), "N/A", objResponse.item_get[intRow].item_name)); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_spec), "N/A", objResponse.item_get[intRow].item_spec)); + + // 檢查是否有此產品設定 + strSQL = "Select ProductNo,IssueState From tblPRDProductBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 產品編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_ProductNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES產品設定 + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblPRDProductBasis " + "(ProductNo,ProductVersion,ProductName,ProductType," + " UnitNo,UnitType,ItemSpec,Description," + " IssueState,CurVersion,Creator,CreateDate,ERPNo,QCCategory"; + strSQLVal = ") Values('" + strERP_ProductNo + "','" + strERP_ProductVersion + "','" + strERP_ItemName + "','" + strProductType + "','" + strERP_UnitNo + "','" + strERP_UnitNo + "','" + strERP_SpecNo + "','AutoRun建立'," + intIssueState + "," + intCurVersion + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQLCol += ",User_Defined01"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQLCol += ",User_Defined02"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQLCol += ",User_Defined03"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQLCol += ",User_Defined04"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQLCol += ",User_Defined05"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQLCol += ",User_Defined06"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQLCol += ",User_Defined07"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQLCol += ",User_Defined08"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQLCol += ",User_Defined09"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQLCol += ",User_Defined10"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQLCol += ",User_Defined11"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQLCol += ",User_Defined12"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQLCol += ",User_Defined13"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQLCol += ",User_Defined14"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQLCol += ",User_Defined15"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQLCol += ",User_Defined16"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQLCol += ",User_Defined17"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQLCol += ",User_Defined18"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQLCol += ",User_Defined19"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQLCol += ",User_Defined20"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQLCol += ",User_Defined21"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQLCol += ",User_Defined22"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQLCol += ",User_Defined23"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQLCol += ",User_Defined24"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQLCol += ",User_Defined25"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQLCol += ",User_Defined26"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQLCol += ",User_Defined27"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQLCol += ",User_Defined28"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQLCol += ",User_Defined29"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQLCol += ",User_Defined30"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQLCol += ",User_Defined31"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQLCol += ",User_Defined32"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQLCol += ",User_Defined33"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQLCol += ",User_Defined34"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined34) + ""; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQLCol += ",GraphNo"; + strSQLVal += ",'" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + // 2017-06-08, Joe, 修改為異動CurVersion + strSQL = "Update tblPRDProductBasis Set " + " IssueState = " + intIssueState + " , ProductName = '" + strERP_ItemName + "', UnitNo = '" + strERP_UnitNo + "', UnitType = '" + strERP_UnitNo + "' " + " ,ProductType = '" + strProductType + "', ItemSpec = '" + strERP_SpecNo + "', ERPNo = '" + strErpNo + "' "; + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQL += ",User_Defined01='" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQL += ",User_Defined02='" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQL += ",User_Defined03='" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQL += ",User_Defined04='" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQL += ",User_Defined05='" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQL += ",User_Defined06='" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQL += ",User_Defined07='" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQL += ",User_Defined08='" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQL += ",User_Defined09='" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQL += ",User_Defined10='" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQL += ",User_Defined11=" + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQL += ",User_Defined12=" + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQL += ",User_Defined13=" + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQL += ",User_Defined14=" + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQL += ",User_Defined15=" + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQL += ",User_Defined16=" + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQL += ",User_Defined17=" + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQL += ",User_Defined18=" + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQL += ",User_Defined19=" + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQL += ",User_Defined20=" + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQL += ",User_Defined21=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQL += ",User_Defined22=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQL += ",User_Defined23=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQL += ",User_Defined24=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQL += ",User_Defined25=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQL += ",User_Defined26=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQL += ",User_Defined27=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQL += ",User_Defined28=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQL += ",User_Defined29=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQL += ",User_Defined30=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQL += ",User_Defined31='" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQL += ",User_Defined32='" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQL += ",User_Defined33=" + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQL += ",User_Defined34=" + double.Parse(objResponse.item_get[intRow].user_defined34) + " "; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQL += ",GraphNo='" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + + strSQL += " Where ProductNo='" + strERP_ProductNo + "' And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " IssueState=-1" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " & strERP_ProductNo & ", [%PRODUCTVERSION%](item_ver): " & strERP_ProductVersion & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " + strERP_ProductNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + // ElseIf objResponse.item_get(intRow).item_sort.Equals("M") Then '處理物料類型 + // ----------------------------------------------------------- + // 固定檢查MaterialType='MATERIL'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddMaterialType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + //****************产品物料系统参数判断开始****************** + //如果item_sort是A的情况且产品物料同时并存的系统参数设定为0时,type为A只写入产品的资料,其他只写入物料 + //prdOrMaterial值为1-只写入产品资料,无需写入物料;0-系统参数设定为1,同时写入(保持原有逻辑); + int prdOrMaterial = GetProductOrMaterailByParameter(objResponse.item_get[intRow].item_sort); + if (prdOrMaterial == 1) + { + WriteProductOrMaterailBasisRet = 0; + continue; + } + //****************产品物料系统参数判断结束****************** + if (aryMaterialType.IndexOf(strMaterialType) == -1) + { + if (AddMaterialType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryMaterialType.Add(strMaterialType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_MaterialNo = objResponse.item_get[intRow].item_no.Trim().ToUpper(); + strERP_status = objResponse.item_get[intRow].tran_status.Trim().ToUpper(); + strErpNo = objResponse.item_get[intRow].item_no.Trim(); // 記錄原始之ERP編號 + if (string.IsNullOrEmpty(objResponse.item_get[intRow].unit_no)) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = objResponse.item_get[intRow].production_unit_no.Trim(); + strERP_UnitNo = objResponse.item_get[intRow].unit_no.Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrEmpty(objResponse.item_get[intRow].item_name), "N/A", objResponse.item_get[intRow].item_name)); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_spec), "N/A", objResponse.item_get[intRow].item_spec)); + + // 2019/07/08 Eric Mantis:59382 Lot_manage 欄位 批號管理 目前 T100 會拋轉 1,2,3 ,但是 MES 目前只有0/1 拋轉時並未轉換 + // 0(False):不管控物料批號,系統將視物料批號為N/A。 + // 1(True):管控物料批號,所有之進料、退料、扣料動作都必須輸入物料批號。 + if (!string.IsNullOrWhiteSpace(objResponse.item_get[intRow].lot_manage)) + { + // 91087: [605][CP+FT] E10ICD整合問題_E10ICD拋轉批號查核(lot_manage)欄位值調整,MES須同步對應"是否檢查批號(CheckLotNo)"欄位 + if (objResponse.item_get[intRow].lot_manage.Equals("Y") | objResponse.item_get[intRow].lot_manage.Equals("N")) + { + if (objResponse.item_get[intRow].lot_manage.Equals("Y") == true) + { + strERP_LotManage = "1"; + } + else if (objResponse.item_get[intRow].lot_manage.Equals("N") == true) + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + // If Not String.IsNullOrWhiteSpace(objResponse.item_get(intRow).lot_manage) Then + // If objResponse.item_get(intRow).lot_manage.Equals("Y") Or objResponse.item_get(intRow).lot_manage.Equals("N") Then + // strERP_LotManage = IIf(objResponse.item_get(intRow).lot_manage.Equals("N"), "0", "1") + // Else + // strERP_LotManage = objResponse.item_get(intRow).lot_manage + // End If + // Else + // strERP_LotManage = "0" + // End If + + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + bool exitTry1 = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (drChk["MaterialNo"] is DBNull) + { + // 2019/10/25 Eric Mantis:60113 調整成物料自動核准 + intIssueState = 2; + // ----------------------------------------------------------- + // 物料編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_MaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES物料設定 + // MaterialName,MaterialSpec 必要欄位填"N/A". + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblMTLMaterialBasis " + "(MaterialNo, MaterialName, MaterialSpec, MaterialType," + " PutInPlace, CountWay, CheckLotNo, UnitType, UnitNo, Description," + " IssueState, Creator, CreateDate, ERPNo, QCCategory"; + strSQLVal = ") Values('" + strERP_MaterialNo + "','" + strERP_ItemName + "','" + strERP_SpecNo + "','" + strMaterialType + "'," + intPutInPlace + "," + intCountWay + "," + strERP_LotManage + ",'" + strERP_UnitNo + "','" + strERP_UnitNo + "','AutoRun建立'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQLCol += ",User_Defined01"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQLCol += ",User_Defined02"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQLCol += ",User_Defined03"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQLCol += ",User_Defined04"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQLCol += ",User_Defined05"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQLCol += ",User_Defined06"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQLCol += ",User_Defined07"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQLCol += ",User_Defined08"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQLCol += ",User_Defined09"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQLCol += ",User_Defined10"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQLCol += ",User_Defined11"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQLCol += ",User_Defined12"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQLCol += ",User_Defined13"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQLCol += ",User_Defined14"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQLCol += ",User_Defined15"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQLCol += ",User_Defined16"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQLCol += ",User_Defined17"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQLCol += ",User_Defined18"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQLCol += ",User_Defined19"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQLCol += ",User_Defined20"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQLCol += ",User_Defined21"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQLCol += ",User_Defined22"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQLCol += ",User_Defined23"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQLCol += ",User_Defined24"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQLCol += ",User_Defined25"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQLCol += ",User_Defined26"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQLCol += ",User_Defined27"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQLCol += ",User_Defined28"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQLCol += ",User_Defined29"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQLCol += ",User_Defined30"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQLCol += ",User_Defined31"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQLCol += ",User_Defined32"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQLCol += ",User_Defined33"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQLCol += ",User_Defined34"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined34) + ""; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQLCol += ",GraphNo"; + strSQLVal += ",'" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES物料設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drChk["IssueState"]); + } + + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState = " + intIssueState + " , MaterialName = '" + strERP_ItemName + "', UnitType = '" + strERP_UnitNo + "', UnitNo = '" + strERP_UnitNo + "'" + ",CHECKLOTNO='" + strERP_LotManage + "',ERPNo='" + strErpNo + "' "; + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQL += ",User_Defined01='" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQL += ",User_Defined02='" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQL += ",User_Defined03='" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQL += ",User_Defined04='" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQL += ",User_Defined05='" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQL += ",User_Defined06='" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQL += ",User_Defined07='" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQL += ",User_Defined08='" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQL += ",User_Defined09='" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQL += ",User_Defined10='" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQL += ",User_Defined11=" + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQL += ",User_Defined12=" + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQL += ",User_Defined13=" + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQL += ",User_Defined14=" + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQL += ",User_Defined15=" + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQL += ",User_Defined16=" + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQL += ",User_Defined17=" + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQL += ",User_Defined18=" + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQL += ",User_Defined19=" + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQL += ",User_Defined20=" + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQL += ",User_Defined21=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQL += ",User_Defined22=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQL += ",User_Defined23=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQL += ",User_Defined24=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQL += ",User_Defined25=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQL += ",User_Defined26=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQL += ",User_Defined27=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQL += ",User_Defined28=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQL += ",User_Defined29=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQL += ",User_Defined30=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQL += ",User_Defined31='" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQL += ",User_Defined32='" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQL += ",User_Defined33=" + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQL += ",User_Defined34=" + double.Parse(objResponse.item_get[intRow].user_defined34) + " "; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQL += ",GraphNo='" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL += " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + break; + } + + case "D": // D:刪除 + { + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = exitTry1 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + if (!(drChk["MaterialNo"] is DBNull)) + { + // ----------------------------------------------------------- + // 物料編號使用狀況檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkforDelMaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], 0, false))) + { + + // ----------------------------------------------------------- + // 刪除MES物料相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState=-1" + " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + // aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " & strERP_MaterialNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + + + } + + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " + strERP_MaterialNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry1) + { + break; + } + } + + if (exitTry2) + { + break; + // End If + } + } + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("WriteProductOrMaterailBasis.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteProductOrMaterailBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add("WriteProductOrMaterailBasis,Finally:" + ex.Message); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + CloseConnection(cnnMES); + } + + return WriteProductOrMaterailBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteMaterialVendorBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入物料供應商主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteVendorBasis(iMESCIO.SCI.ERP.Response.SCI_Response_supplier_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteVendorBasisRet = default(int); + WriteVendorBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + var colSQL_2MES = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_VendorNo, strERP_VendorName, strERP_status, strErpNo; + + // 預設值 + int intIssueState = 0; + + try + { + + for (int intRow = 0, loopTo = objResponse.supplier_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_VendorNo = objResponse.supplier_get[intRow].supplier_no.Trim().ToUpper(); + strERP_status = objResponse.supplier_get[intRow].tran_status.Trim().ToUpper(); + strErpNo = objResponse.supplier_get[intRow].supplier_no.Trim(); // 記錄原始之ERP編號 + strERP_VendorName = objResponse.supplier_get[intRow].supplier_name.Trim(); + strERP_VendorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(strERP_VendorName), "N/A", strERP_VendorName)); + + // 一、檢查是否有此物料供應商設定 + strSQL = "Select VendorNo,IssueState From tblMTLMaterialVendor " + " Where VendorNo='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + // 新增物料供應商 + strSQL = "Insert Into tblMTLMaterialVendor (VendorNo,VendorName,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLMTLMATERIALVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES物料供應商設定 + strSQL = "Update tblMTLMaterialVendor Set IssueState = " + intIssueState + ", VendorName = '" + strERP_VendorName + "', ERPNo = '" + strErpNo + "' " + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLMTLMATERIALVENDORCONTACTOR WHERE VendorNo='" + strERP_VendorNo + "'"); + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLMTLMATERIALVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES物料供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLMTLMATERIALVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除物料供應商主檔 + strSQL = "Delete From TBLMTLMATERIALVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLMTLMATERIALVENDOR Set IssueState=-1 Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // 刪除MES物料供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLMTLMATERIALVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除物料供應商主檔 + strSQL = "Delete From TBLMTLMATERIALVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 二、檢查是否有此設備供應商設定 + strSQL = "Select VendorNo,IssueState From TBLEQPVENDOR Where VendorNo='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + // 新增設備供應商 + strSQL = "Insert Into TBLEQPVENDOR (VendorNo,VendorName,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLEQPVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES設備供應商設定 + strSQL = "Update TBLEQPVENDOR Set IssueState = " + intIssueState + ", VendorName = '" + strERP_VendorName + "' " + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLEQPVENDORCONTACTOR WHERE VendorNo='" + strERP_VendorNo + "'"); + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLEQPVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + case "D": + { + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES設備供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLEQPVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除設備供應商主檔 + strSQL = "Delete From TBLEQPVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLEQPVENDOR Set IssueState=-1 Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // 刪除MES設備供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLEQPVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除設備供應商主檔 + strSQL = "Delete From TBLEQPVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 三、檢查是否有此外包商設定 + strSQL = "Select SUBCONTRACTORNO,IssueState From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + // 新增外包商 + strSQL = "Insert Into TBLENTSUBCONTRACTOR (SUBCONTRACTORNO,SUBCONTRACTORNAME,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLENTSUBCONTRACTORCONT (SUBCONTRACTORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES外包商設定 + strSQL = "Update TBLENTSUBCONTRACTOR Set IssueState = " + intIssueState + ", SUBCONTRACTORNAME = '" + strERP_VendorName + "' " + " Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLENTSUBCONTRACTORCONT WHERE SUBCONTRACTORNO='" + strERP_VendorNo + "'"); + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLENTSUBCONTRACTORCONT (SUBCONTRACTORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + case "D": + { + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES外包商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLENTSUBCONTRACTORCONT Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除外包商主檔 + strSQL = "Delete From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLENTSUBCONTRACTOR Set IssueState=-1 Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 刪除MES外包商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLENTSUBCONTRACTORCONT Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除外包商主檔 + strSQL = "Delete From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + + drTemp.Close(); + //cmmTemp.Dispose(); + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_2MES); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteVendorBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteVendorBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteMaterialVendorMapBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入物料供應商主檔對應 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteMaterialVendorMapBasis(iMESCIO.SCI.ERP.Response.SCI_Response_item_supplier_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteMaterialVendorMapBasisRet = default(int); + WriteMaterialVendorMapBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + IDbConnection cnnMES = null; + var colSQL_2MES = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + // 宣告拋轉資料使用變數 + string strERP_VendorNo, strERP_Description, strERP_MTLNo, strERP_status; + DataRow drChkMTL, drChkVendor; + + cnnMES = CreateConnection(strConnectionString); + + do + { + try + { + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.item_supplier_get.Count - 1; intRow <= loopTo; intRow++) + { + if (string.IsNullOrWhiteSpace(objResponse.item_supplier_get[intRow].item_sort)) + { + aryMES_Message.Add(TranslateMsg("item_sort" + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + break; + } + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_VendorNo = objResponse.item_supplier_get[intRow].supplier_no.Trim().ToUpper(); + strERP_status = objResponse.item_supplier_get[intRow].tran_status.Trim().ToUpper(); + strERP_MTLNo = objResponse.item_supplier_get[intRow].item_no.Trim().ToUpper(); + strERP_Description = objResponse.item_supplier_get[intRow].remark; + // 2017-06-13, Joe, 因料件所有資料都會寫入物料主檔,所以這裡不用卡M的全部都收 + // If objResponse.item_supplier_get(intRow).item_sort.Equals("M") Then '處理物料類型 + + // 1-1.檢查是否有此物料設定 + drChkMTL = GetMaterialBasis(strERP_MTLNo, cnnMES, aryMES_Message); + if (drChkMTL == null) + { + exitTry = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + if (drChkMTL["MaterialNo"] is DBNull) + { + aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]" + strERP_MTLNo + ",[%IS NOT EXIST%] [%MATERIALBASIS%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + exitTry = true; + break; + } + // 1-2.檢查是否有此供應商設定 + drChkVendor = GetVendorBasis(strERP_VendorNo, cnnMES, aryMES_Message); + if (drChkVendor == null) + { + exitTry = true; + break; + } + if (drChkVendor["VendorNo"] is DBNull) + { + aryMES_Message.Add(TranslateMsg("[%VENDORNO%]" + strERP_VendorNo + ",[%IS NOT EXIST%] [%SUPPLIERBASIS%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + exitTry = true; + break; + } + + switch (strERP_status ?? "") + { + case "AU": + { + // ----------------------------------------------------------- + // 新增MES物料供應商對應設定 (一律先刪除再新增) + // ----------------------------------------------------------- + strSQL = "DELETE FROM tblMTLMaterialVendorMap WHERE VendorNo = '" + strERP_VendorNo + "' AND MaterialNo = '" + strERP_MTLNo + "'"; + colSQL_2MES.Add(strSQL); + + strSQL = "Insert Into tblMTLMaterialVendorMap " + "(VendorNo,MaterialNo,Description)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_MTLNo + "','" + strERP_Description + "')"; + colSQL_2MES.Add(strSQL); + break; + } + + case "D": // D:刪除 + { + // ----------------------------------------------------------- + // 先刪除ME供應商對應相關設定 + // ----------------------------------------------------------- + strSQL = "Delete From tblMTLMaterialVendorMap " + "Where VendorNo='" + strERP_VendorNo + "'AND MaterialNo = '" + strERP_MTLNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES.Add(strSQL); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%VENDORNO%](supplier_no): " + strERP_VendorNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + // End If + + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_2MES); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteMaterialVendorMapBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + CloseConnection(cnnMES); + } + + return WriteMaterialVendorMapBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteEquipmentBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入設備主檔 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteEquipmentBasis(ref iMESCIO.SCI.ERP.Response.SCI_Response_machine_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteEquipmentBasisRet = default(int); + WriteEquipmentBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var aryEquipmentType = new ArrayList(); // 記錄是否已新增過 + + try + { + // 宣告拋轉資料使用變數 + string strERP_EQPNo, strERP_EQPType, strERP_ResType, strERP_AssetNo, strERP_Description, strERP_status, strERP_MaxTime, strErpNo, strErp_EquipmentName, strErp_SupplierNo; + + // 預設值 + int intIssueState = 0; + + cnnMES = CreateConnection(strConnectionString); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.machine_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_EQPNo = objResponse.machine_get[intRow].machine_no.Trim().ToUpper(); + strErpNo = objResponse.machine_get[intRow].machine_no.Trim(); // 記錄原始之ERP編號 + + // 2017.03.01 崑源,設備類型依舊有整合方式,寫死為"EQPTYPE"且判斷ERP傳來的資源類型若為0、1或未傳時再處理 + // 20170324 edit lijyun↓ + // strERP_ResType = objResponse.machine_get(intRow).resource_type.Trim + if (objResponse.machine_get[intRow].resource_type == null) + { + strERP_ResType = ""; + } + else + { + strERP_ResType = objResponse.machine_get[intRow].resource_type.Trim(); + } + // 20170324 edit lijyun↑ + strERP_EQPType = "EQPTYPE"; + if (!string.IsNullOrWhiteSpace(strERP_ResType)) + { + if (!(strERP_ResType.Equals("0") | strERP_ResType.Equals("1"))) + { + continue; + } + } + // 20170324 edit lijyun↓ + // strERP_AssetNo = objResponse.machine_get(intRow).belongings_no.Trim.ToUpper + if (objResponse.machine_get[intRow].belongings_no == null) + { + strERP_AssetNo = ""; + } + else + { + strERP_AssetNo = objResponse.machine_get[intRow].belongings_no.Trim().ToUpper(); + } + // 20170324 edit lijyun↑ + + strERP_status = objResponse.machine_get[intRow].tran_status.Trim().ToUpper(); + strERP_Description = objResponse.machine_get[intRow].remark.Trim(); + + // 20170316 edit lijyun↓ + if (objResponse.machine_get[intRow].machine_capacity == null) + { + strERP_MaxTime = ""; + } + else + { + strERP_MaxTime = objResponse.machine_get[intRow].machine_capacity.Trim(); + double tmpValue; + + if (double.TryParse(strERP_MaxTime, out tmpValue)) + { + if (tmpValue < 1.0d | tmpValue > 24.0d) + { + strERP_MaxTime = "1"; + } + } + + } + // 20170316 edit lijyun↑ + + // 2017/02/22 modi KY:新增『設備名稱』及『設備供應商』欄位 + strErp_EquipmentName = objResponse.machine_get[intRow].machine_name.Trim(); + if (objResponse.machine_get[intRow].supplier_no == null) + { + strErp_SupplierNo = "N/A"; + } + else if (string.IsNullOrEmpty(objResponse.machine_get[intRow].supplier_no.Trim())) + { + strErp_SupplierNo = "N/A"; + } + else + { + strErp_SupplierNo = objResponse.machine_get[intRow].supplier_no.Trim().ToUpper(); + } + + + // ----------------------------------------------------------- + // 固定檢查EquipmnetTyp資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // 20170314 edit lijyun↓ + // If AddEquipmentType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strERP_EQPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryEquipmentType.IndexOf(strERP_EQPType) == -1) + { + if (AddEquipmentType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry1 = true; + break; + } + else + { + aryEquipmentType.Add(strERP_EQPType); + } + } + // 20170314 edit lijyun↑ + + // 檢查是否有此作業站設定 + strSQL = "Select EquipmentNo,IssueState From tblEQPEquipmentBasis " + " Where EquipmentNo='" + strERP_EQPNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + + // ----------------------------------------------------------- + // 新增MES設備主檔設定 + // ----------------------------------------------------------- + // 2017-05-31, Add EquipmentClass預設為GENERAL + // 2017-06-02, Joe, LoadPort預設為-1 + strSQL = "Insert Into tblEQPEquipmentBasis " + "(EquipmentNo,EquipmentType,Capacity," + "EngineerGroupNo,LoadPort," + "AutoFlag,Eacontroller,EQPRecipe," + "IssueState,Creator,CreateDate,ERPNo,EquipmentName," + "EquipmentClass "; + if (!string.IsNullOrEmpty(strERP_AssetNo)) + { + strSQL += ",AssetNo"; + } + if (!string.IsNullOrEmpty(strERP_Description)) + { + strSQL += ",Description"; + } + if (!string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL += ",MaxTime"; + } + if (!string.IsNullOrEmpty(strErp_SupplierNo)) + { + strSQL += ",VendorNo"; + } + strSQL += ")"; + strSQL += " Values('" + strERP_EQPNo + "','" + strERP_EQPType + "',-1," + "'N/A',-1,0,'N/A',0," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', '" + strErp_EquipmentName + "' " + ",'GENERAL' "; + if (!string.IsNullOrEmpty(strERP_AssetNo)) + { + strSQL += ",'" + strERP_AssetNo + "'"; + } + if (!string.IsNullOrEmpty(strERP_Description)) + { + strSQL += ",'" + strERP_Description + "'"; + } + if (!string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL += ",'" + strERP_MaxTime + "'"; + } + if (!string.IsNullOrEmpty(strErp_SupplierNo)) + { + strSQL += ",'" + strErp_SupplierNo + "'"; + } + strSQL += ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES設備設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 2019/07/22 Eric 當ERP未傳入machine_capacity,不更新欄位MaxTime + if (string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL = "Update tblEQPEquipmentBasis Set IssueState = " + intIssueState + ",EquipmentType = '" + strERP_EQPType + "',AssetNo = '" + strERP_AssetNo + "'" + ",Description='" + strERP_Description + "', EquipmentName ='" + strErp_EquipmentName + "' " + ",ERPNo = '" + strErpNo + "'" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + strSQL = "Update tblEQPEquipmentBasis Set IssueState = " + intIssueState + ",EquipmentType = '" + strERP_EQPType + "',AssetNo = '" + strERP_AssetNo + "'" + ",Description='" + strERP_Description + "', MaxTime = '" + strERP_MaxTime + "', EquipmentName ='" + strErp_EquipmentName + "' " + ",ERPNo = '" + strErpNo + "'" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ResourcesIntegration_DelEquipment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPNo) < 0) + { + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblEQPEquipmentBasis Set " + " IssueState = -1" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%EQUIPMENTNO%](machine_no): " & strERP_EQPNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + else if (ResourcesIntegration_DelEquipment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPNo) < 0) + { + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%EQUIPMENTNO%](machine_no): " + strERP_EQPNo + ", [%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // MES資料庫異動 + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteEquipmentBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteEquipmentBasisRet; + } + + // ======================================================================================================================== + // 程式名稱:WriteToMESCustomerBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入客戶主檔 + // 撰寫人員:Lijyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteToMESCustomerBasis(iMESCIO.SCI.ERP.Response.SCI_Response_customer_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESCustomerBasisRet = default(int); + WriteToMESCustomerBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + // 宣告拋轉資料使用變數 + string strERP_CustomerNo, strERP_CustomerName, strERP_CustomerSName, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + cnnMES = CreateConnection(strConnectionString); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.customer_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_CustomerNo = objResponse.customer_get[intRow].customer_no.ToString().Trim().ToUpper(); + strERP_status = objResponse.customer_get[intRow].tran_status.ToString().Trim().ToUpper(); + strERP_CustomerName = objResponse.customer_get[intRow].customer_name.Trim().ToUpper(); + if (strERP_CustomerName == null || string.IsNullOrEmpty(strERP_CustomerName.Trim())) + strERP_CustomerName = "N/A"; + strERP_CustomerSName = objResponse.customer_get[intRow].customer_shortname; + if (strERP_CustomerSName == null || string.IsNullOrEmpty(strERP_CustomerSName.Trim())) + strERP_CustomerSName = strERP_CustomerName; + str_ERPNo = objResponse.customer_get[intRow].customer_no.ToString().Trim(); + + // 檢查是否有此供應商設定 + strSQL = "Select CustomerNo,IssueState From tblENTCustomerBasis " + " Where CustomerNo='" + strERP_CustomerNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES客戶設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_CustomerNo)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + " [%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_CustomerName)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",[%CustomerName%](customer_name),[%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_CustomerSName)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",[%CustomerSName%](customer_shortname),[%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblENTCustomerBasis " + "(CustomerNo,CustomerName,CustomerSName,IssueState,ERPNo," + " Creator,CreateDate)"; + strSQL += " Values('" + strERP_CustomerNo + "','" + strERP_CustomerName + "','" + strERP_CustomerSName + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + else + { + // aryMES_Message.Add("客戶編號(customer_no):" & objReponse.customer_no & ", 已存在MES, 不允許新增!!") + + // ----------------------------------------------------------- + // 修改MES客戶設定 + // ----------------------------------------------------------- + + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblENTCustomerBasis Set " + " IssueState = " + intIssueState + ",CUSTOMERNAME = '" + strERP_CustomerName + "',CUSTOMERSNAME = '" + strERP_CustomerSName + "',ERPNo = '" + str_ERPNo + "'" + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES客戶相關設定 + // ----------------------------------------------------------- + // Del detail + if (CustVendorIntegration_DelCustomer(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_CustomerNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES客戶設定 + // ----------------------------------------------------------- + strSQL = "Update tblENTCustomerBasis Set " + " IssueState=-1" + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + // aryMES_Message.Add(TranslateMsg("[%CustomerNo%] : " & strERP_CustomerNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES客戶相關設定 + // ----------------------------------------------------------- + else if (CustVendorIntegration_DelCustomer(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_CustomerNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESCustomerBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESCustomerBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteToMESInventoryBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入庫房主檔 + // 撰寫人員:Lijyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteToMESInventoryBasis(iMESCIO.SCI.ERP.Response.SCI_Response_warehouse_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESInventoryBasisRet = default(int); + WriteToMESInventoryBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + System.Data.OleDb.OleDbDataAdapter daSMD; + DataSet dsSMD; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + var aryFactoryNo = new ArrayList(); // 記錄是否新增過工廠編號 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_INVNo, strERP_INVName, strERP_FactoryNo, strERP_WarehouseType, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + strERP_WarehouseType = ""; // 預設為空 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.warehouse_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_INVNo = objResponse.warehouse_get[intRow].warehouse_no.ToString().Trim().ToUpper(); + strERP_FactoryNo = objResponse.warehouse_get[intRow].factory_no.ToString().Trim().ToUpper(); + + if (objResponse.warehouse_get[intRow].warehouse_name == null || string.IsNullOrEmpty(objResponse.warehouse_get[intRow].warehouse_name.ToString().Trim())) + { + strERP_INVName = "N/A"; + } + else + { + strERP_INVName = objResponse.warehouse_get[intRow].warehouse_name.ToString().Trim().ToUpper(); + } + + strERP_status = objResponse.warehouse_get[intRow].tran_status.ToString().Trim().ToUpper(); + + if (string.IsNullOrEmpty(objResponse.warehouse_get[intRow].warehouse_type) || string.IsNullOrEmpty(strERP_WarehouseType.ToString().Trim())) + { + strERP_WarehouseType = 1.ToString(); + } + else + { + strERP_WarehouseType = objResponse.warehouse_get[intRow].warehouse_type.ToString().Trim().ToUpper(); + } + str_ERPNo = objResponse.warehouse_get[intRow].warehouse_no.ToString().Trim(); + // 20170313 edit lijyun↓ + // 檢查是否有此工廠編號 + // strSQL = "Select * From tblSMDFactoryBasis Where FactoryNo Is Not Null " & + // " And FactoryNo = '" & objResponse.warehouse_get(intRow).factory_no & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + + // If String.IsNullOrEmpty(strERP_FactoryNo) Then + // aryMES_Message.Add(TranslateMsg("ERP[%FactoryNo%](factory_no):" & strERP_FactoryNo & " [%Is Empty%]!")) + // Exit For + // Else + // If Not drTemp.Read Then + // strSQL = "Insert Into tblSMDFactoryBasis " & + // "(FactoryNo,Description,FabCode," & + // "IssueState,Creator,CreateDate)" + // strSQL += " Values('" & objResponse.warehouse_get(intRow).factory_no & "','','',2,'" & strERPCreator & "'," & + // "To_Date('" & Format(datNow, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // Call ExecuteSQLNoneQuery(strDataBaseType, strConnectionString, strSQL) + // End If + // drTemp.Close() + // cmmTemp.Dispose() + // End If + // ----------------------------------------------------------- + // 固定檢查FactoryBasis資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryFactoryNo.IndexOf(strERP_FactoryNo) == -1) + { + if (AddFactoryNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_FactoryNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry1 = true; + break; + } + else + { + aryFactoryNo.Add(strERP_FactoryNo); + } + } + // 20170313 edit lijyun↑ + + // 檢查是否有此庫房設定 + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES庫房設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_INVNo)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_INVName)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",[%InventoryName%](warehouse_name):" + strERP_INVName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_FactoryNo)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",ERP[%FactoryNo%](factory_no):" + strERP_FactoryNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblINVInventoryBasis " + "(InventoryNo,InventoryName,InventoryType,InventoryClass,FactoryNo," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_INVNo + "','" + strERP_INVName + "','" + strERP_WarehouseType + "',0,'" + strERP_FactoryNo + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + else + { + // aryMES_Message.Add("庫房編號(inaa001):" & strERP_INVNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES庫房設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = " + intIssueState + " ,INVENTORYNAME = '" + strERP_INVName + "'" + " ,FACTORYNO = '" + strERP_FactoryNo + "'" + " ,ERPNo = '" + str_ERPNo + "'"; + // 2017/05/22 KunYuan:倉庫類型修改時暫不處理 + // If strERP_WarehouseType <> "" Then + // strSQL += " ,INVENTORYTYPE = " & strERP_WarehouseType + // End If + strSQL += " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES庫房相關設定 + // ----------------------------------------------------------- + if (InventoryIntegration_DelInventory(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%InventoryNo%] : " & strERP_INVNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES庫房相關設定 + // ----------------------------------------------------------- + else if (InventoryIntegration_DelInventory(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESInventoryBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESInventoryBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteToMESLocatorBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入儲位主檔 + // 撰寫人員:Lijyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteToMESLocatorBasis(iMESCIO.SCI.ERP.Response.SCI_Response_storage_spaces_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESLocatorBasisRet = default(int); + WriteToMESLocatorBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_INVNo, strERP_Locator, strERP_FactoryNo, strERP_status, str_ERPNo; + string strERP_LocatorName; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.storage_spaces_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_INVNo = objResponse.storage_spaces_get[intRow].warehouse_no.ToString().Trim().ToUpper(); + strERP_Locator = objResponse.storage_spaces_get[intRow].storage_spaces_no.ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_Locator.Trim())) + strERP_Locator = "N/A"; + strERP_LocatorName = objResponse.storage_spaces_get[intRow].storage_spaces_name.ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_LocatorName.Trim())) + strERP_LocatorName = "N/A"; + strERP_status = objResponse.storage_spaces_get[intRow].tran_status.ToString().Trim().ToUpper(); + str_ERPNo = objResponse.storage_spaces_get[intRow].storage_spaces_no.ToString().Trim(); + + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (!drTemp.Read()) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Not Exist%]!", strLanguageMode, strResourceDir)); + drTemp.Close(); + //cmmTemp.Dispose(); + exitTry1 = true; + break; + } + + + // 檢查是否有此儲位設定 + strSQL = "Select InventoryNo,IssueState From tblINVLocatorBasis " + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES儲位設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_INVNo)) + { + aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" + strERP_Locator + ",[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_Locator)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",[%LocatorNo%](storage_spaces_no):" + strERP_Locator + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (strERP_LocatorName != "N/A") + { + strSQL = "Insert Into tblINVLocatorBasis " + "(LocatorNo,LocatorName,InventoryNo," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_Locator + "','" + strERP_LocatorName + "','" + strERP_INVNo + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + } + else + { + strSQL = "Insert Into tblINVLocatorBasis " + "(LocatorNo,InventoryNo," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_Locator + "','" + strERP_INVNo + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + } + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // aryMES_Message.Add("庫房編號(inab001):" & strERP_INVNo & ",儲位編號(inab002):" & strERP_Locator & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblINVLocatorBasis Set " + " IssueState = " + intIssueState + " ,ERPNo ='" + str_ERPNo + "'" + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + if (strERP_LocatorName != "N/A") + { + strSQL += "And LocatorName='" + strERP_LocatorName + "'"; + } + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (LocatorIntegration_DelLocator(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo, strERP_Locator) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVLocatorBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + if (strERP_LocatorName != "N/A") + { + strSQL += "And LocatorName='" + strERP_LocatorName + "'"; + } + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" & strERP_Locator & "[%IS NOT EXIST%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + else if (LocatorIntegration_DelLocator(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo, strERP_Locator) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" + strERP_Locator + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESLocatorBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESLocatorBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteToMESDepartmentBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入部門主檔 + // 撰寫人員:Lijyun + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteToMESDepartmentBasis(iMESCIO.SCI.ERP.Response.SCI_Response_department_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESDepartmentBasisRet = default(int); + WriteToMESDepartmentBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_DepartmentNo, strERP_DepartmentName, strERP_DepartmentSName, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.department_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_DepartmentNo = objResponse.department_get[intRow].department_no.ToString().Trim().ToUpper(); + strERP_status = objResponse.department_get[intRow].tran_status.ToString().Trim().ToUpper(); + strERP_DepartmentName = objResponse.department_get[intRow].department_name.ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_DepartmentName)) + strERP_DepartmentName = strERP_DepartmentNo; + // 20170324 edit lijyun↓ + // strERP_DepartmentSName = objResponse.department_get(intRow).department_shortname.ToString.Trim.ToUpper + // If IsNothing(objResponse.department_get(intRow).department_shortname) Then + // strERP_DepartmentSName = "" + // End If + if (string.IsNullOrWhiteSpace(objResponse.department_get[intRow].department_shortname)) + { + if (string.IsNullOrWhiteSpace(strERP_DepartmentName)) + { + strERP_DepartmentSName = "N/A"; + } + else + { + strERP_DepartmentSName = strERP_DepartmentName; + } + } + else + { + strERP_DepartmentSName = objResponse.department_get[intRow].department_shortname.ToString().Trim(); + } + // 20170324 edit lijyun↑ + + str_ERPNo = objResponse.department_get[intRow].department_no.ToString().Trim(); + + // 檢查是否有此作業站設定 + strSQL = "Select DepartmentNo,IssueState From tblUSRDepartmentBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES部門設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_DepartmentNo)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_DepartmentName)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",[%DepartmentName%](department_name):" + strERP_DepartmentName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_DepartmentSName)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",[%DepartmentSName%](department_shortname):" + strERP_DepartmentSName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblUSRDepartmentBasis " + "(DepartmentNo,DepartmentName,DepartmentSName," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_DepartmentNo + "','" + strERP_DepartmentName + "','" + strERP_DepartmentSName + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + else + { + // aryMES_Message.Add("部門編號(ooef001):" & strERP_DepartmentNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES部門設定 + // ----------------------------------------------------------- + // 修改部門,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState = " + intIssueState + " ,DEPARTMENTNAME = '" + strERP_DepartmentName + "'" + " ,DEPARTMENTSNAME = '" + strERP_DepartmentSName + "'" + " ,ERPNo = '" + str_ERPNo + "'" + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES部門相關設定 + // ----------------------------------------------------------- + if (DepartmentIntegration_DelDepartment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES部門設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState=-1" + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%DepartmentNo%] : " & strERP_DepartmentNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES部門相關設定 + // ----------------------------------------------------------- + else if (DepartmentIntegration_DelDepartment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESDepartmentBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESDepartmentBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteShiftBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入班別主檔 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteShiftBasis(iMESCIO.SCI.ERP.Response.SCI_Response_shift_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteShiftBasisRet = default(int); + WriteShiftBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + var aryDepartmentNo = new ArrayList(); // 記錄是否新增過部門編號 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_ShiftNo, strERP_DepartmentNo, strDepartmentNo, strERP_ShiftName, strERP_CreateDate, strERP_Creator, strERP_Description, strERP_FromTime = default(string), strERP_FromTime2, strERP_ToTime, strERP_ToTime2, strERP_ERPNo; + + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + do + { + try + { + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.shift_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_ShiftNo = objResponse.shift_get[intRow].shift_no.Trim().ToUpper(); + // strERP_DepartmentNo = objResponse.shift_get(intRow).department_no.Trim.ToUpper + // 20170313 edit liyun↓ + // 20170316, Joe, Modify 應先判斷如ERP無傳值給*,有傳值才塞入變數中 + if (objResponse.shift_get[intRow].department_no == null) + { + strERP_DepartmentNo = "*"; + } + else if (string.IsNullOrEmpty(objResponse.shift_get[intRow].department_no)) + { + strERP_DepartmentNo = "*"; + } + else + { + strERP_DepartmentNo = objResponse.shift_get[intRow].department_no.Trim(); + } + + strERP_ShiftName = objResponse.shift_get[intRow].shift_name.Trim().ToUpper(); + // 20170316, Joe, Modify 改用IsNullOrEmpty + if (string.IsNullOrEmpty(strERP_ShiftName)) + strERP_ShiftName = strERP_ShiftNo; + // 20170313 edit liyun↑ + strERP_Description = objResponse.description; + + // 20170324 edit lijyun↓ + if (objResponse.shift_get[intRow].date_s == null) + { + strERP_FromTime2 = "2000/01/01 00:00:00"; + } + else + { + strERP_FromTime = DateTime.Now.ToString("yyyyMMdd") + objResponse.shift_get[intRow].date_s; + strERP_FromTime2 = Strings.Left(strERP_FromTime, 4) + "/" + Strings.Mid(strERP_FromTime, 5, 2) + "/" + Strings.Mid(strERP_FromTime, 7, 2) + " " + DateTimeConversion(objResponse.shift_get[intRow].date_s); + } + + // 結束時間小於開始時間代表 日期為隔日 + if (objResponse.shift_get[intRow].date_e == null) + { + strERP_ToTime2 = "2000/01/01 00:00:00"; + } + else + { + if (Operators.CompareString(objResponse.shift_get[intRow].date_e, strERP_FromTime, false) < 0) + { + strERP_ToTime = Conversions.ToDouble(DateTime.Now.ToString("yyyyMMdd")) + 1d + objResponse.shift_get[intRow].date_e; + } + else + { + strERP_ToTime = DateTime.Now.ToString("yyyyMMdd") + objResponse.shift_get[intRow].date_e; + } + strERP_ToTime2 = Strings.Left(strERP_ToTime, 4) + "/" + Strings.Mid(strERP_ToTime, 5, 2) + "/" + Strings.Mid(strERP_ToTime, 7, 2) + " " + DateTimeConversion(objResponse.shift_get[intRow].date_e); + } + // 20170324 edit lijyun↑ + + strERP_ERPNo = objResponse.shift_get[intRow].shift_no; + strERP_Status = objResponse.shift_get[intRow].tran_status.Trim().ToUpper(); + + // 20170315 edit lijyun↓ + if (strERP_DepartmentNo != "*") + { + // ----------------------------------------------------------- + // 固定檢查DepartmentNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryDepartmentNo.IndexOf(strERP_DepartmentNo) == -1) + { + if (AddDepartmentNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryDepartmentNo.Add(strERP_DepartmentNo); + } + } + } + // 20170315 edit lijyun↑ + + // 檢查是否有此班別設定 + strSQL = "Select DepartmentNo,ShiftNo,IssueState From tblUSRShiftBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'" + " And ShiftNo='" + strERP_ShiftNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES班別設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblUSRShiftBasis " + "(DepartmentNo,ShiftNo,ShiftName," + " Description,Creator,IssueState,ERPNo,FromTime,ToTime,CreateDate)"; + strSQL += " Values('" + strERP_DepartmentNo + "','" + strERP_ShiftNo + "','" + strERP_ShiftName + "', 'AutoRun建立' ,'" + strERPCreator + "', '" + intIssueState + "','" + strERP_ERPNo + "'," + "To_Date('" + strERP_FromTime2 + "','YYYY/MM/DD HH24:MI:SS') ," + "To_Date('" + strERP_ToTime2 + "','YYYY/MM/DD HH24:MI:SS') ," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES班別設定 + // ----------------------------------------------------------- + // If drTemp("IssueState") <> 2 Then + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblUSRShiftBasis Set " + " IssueState = " + intIssueState + " ,ShiftName = '" + strERP_ShiftName + "',FromTime = " + " To_Date('" + strERP_FromTime2 + "','YYYY/MM/DD HH24:MI:SS') ,ToTime = " + " To_Date('" + strERP_ToTime2 + "','YYYY/MM/DD HH24:MI:SS') ,CreateDate = " + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " ,ERPNo = '" + strERP_ERPNo + "'" + " Where ShiftNo='" + strERP_ShiftNo + "' And DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + // End If + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES班別設定 + // ----------------------------------------------------------- + strSQL = "Delete tblUSRShiftBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'" + " And ShiftNo='" + strERP_ShiftNo + "' And DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES班別設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRShiftBasis Set " + " IssueState = -1" + " Where DepartmentNo='" + strERP_DepartmentNo + "'" + " And ShiftNo='" + strERP_ShiftNo + "' And DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + else + { + // aryMES_Message.Add(TranslateMsg("[%shiftno%](shift_no): " & strERP_ShiftNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 刪除MES班別設定 + // ----------------------------------------------------------- + strSQL = "Delete tblUSRShiftBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'" + " And ShiftNo='" + strERP_ShiftNo + "' And DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%shiftno%](shift_no): " + strERP_ShiftNo + " ,ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteShiftBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteShiftBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteOPBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入作業站主檔 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteOPBasis(iMESCIO.SCI.ERP.Response.SCI_Response_op_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteOPBasisRet = default(int); + WriteOPBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var aryOPType = new ArrayList(); // 記錄是否已新增過作業站類別 + + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_OPNo, strERP_OPName, strERP_CreateDate, strERP_Description, strERP_ERPNo, str_OPType, strERP_OSOption; + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + do + { + try + { + + // 2019/07/02 Shih Kai, Mantis:0059229, 因作業站區段固定寫入N/A, + // 在新增作業站資料時,檢查是否有N/A的區段,若沒有則同時新增一筆N/A的區段資料 + if (AddOPProductionSegment(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, "N/A", strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + break; + } + + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.op_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_OPNo = objResponse.op_get[intRow].op_no.Trim().ToUpper(); + strERP_OPName = objResponse.op_get[intRow].op_name.Trim().ToUpper(); + strERP_OPName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(strERP_OPName), strERP_OPNo, strERP_OPName)); + strERP_Description = objResponse.description; + strERP_ERPNo = objResponse.op_get[intRow].op_no; + strERP_Status = objResponse.op_get[intRow].tran_status.Trim().ToUpper(); + strERP_OSOption = Conversions.ToString(Interaction.IIf(objResponse.op_get[intRow].outsourcing_type == "Y", "1", "0")); // ERP回傳是否委外為Y/N,MES DB為1/0,Add By KevinChang 20170426 + str_OPType = "OP"; + + // ----------------------------------------------------------- + // 固定檢查OPGroup資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryOPType.IndexOf(str_OPType) == -1) + { + if (AddOPType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, str_OPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryOPType.Add(str_OPType); + } + } + + // 檢查是否有此作業站設定 + strSQL = "Select OPNo,IssueState From tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + + // ----------------------------------------------------------- + // 新增MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPBasis " + "(OPNo,OPName,OPShortName,OPType,OPClass,PSNo,StdunitRunTime,CountOPUnitQTY,STDQueueTime," + " Description,Creator,IssueState,ERPNo,CreateDate,PrintOutOnRunCard,OSOption)"; + // 91094: [605][CP+FT] E10ICD整合問題_作業站主檔拋轉時,寫入生產區段資料比照TipTop/WorkFlow方式取得區段編號資料 + strSQL += " Values('" + strERP_OPNo + "','" + strERP_OPName + "','" + strERP_OPName + "','" + str_OPType + "',0, '" + objSetting["defPSNo"] + "',1,1,1, 'AutoRun建立' ,'" + strERPCreator + "', '" + intIssueState + "','" + strERP_ERPNo + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),1," + strERP_OSOption + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES作業站設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblOPBasis Set " + " IssueState = " + intIssueState + ", OPName = '" + strERP_OPName + "' , OSOption = " + strERP_OSOption + ", ERPNo = '" + strERP_ERPNo + "' Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + // strSQL = "Update tblWIPEquipmentProductivity Set " & + // " NormalOperation = '" & strERP_NormalOperation & "', WarrantyNo = '" & strERP_WarrantyNo & "' ,Description = 'AutoRun建立',Status = '" & strERP_Status & "',StartTime = " & + // "To_Date('" & strERP_FromTime & "','YYYY/MM/DD HH24:MI:SS') ,EndTime = " & + // "To_Date('" & strERP_ToTime & "','YYYY/MM/DD HH24:MI:SS')" + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Update tblOPBasis Set " + " IssueState=-1" + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + } + } + else + { + // aryMES_Message.Add(TranslateMsg("[%OPno%](op_no): " & strERP_OPNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 刪除MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%OPno%](op_no): " + strERP_OPNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteOPBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteOPBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteOPGroupBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入工作站主檔 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteOPGroupBasis(iMESCIO.SCI.ERP.Response.SCI_Response_workstation_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteOPGroupBasisRet = default(int); + WriteOPGroupBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_WorkStationNo, strERP_WorkStationName, strERP_CreateDate, strERP_Description, strERP_ERPNo; + + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + try + { + for (int intRow = 0, loopTo = objResponse.workstation_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_WorkStationNo = objResponse.workstation_get[intRow].workstation_no.Trim().ToUpper(); + strERP_WorkStationName = objResponse.workstation_get[intRow].workstation_name.Trim().ToUpper(); + if (strERP_WorkStationName == null || string.IsNullOrEmpty(strERP_WorkStationName)) + { + strERP_WorkStationName = strERP_WorkStationNo; + } + strERP_Description = objResponse.description; + strERP_ERPNo = objResponse.workstation_get[intRow].workstation_no; + strERP_Status = objResponse.workstation_get[intRow].tran_status.Trim().ToUpper(); + + // 檢查是否有此作業站設定 + strSQL = "Select OPGroupNo From tblOPGroupBasis " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPGroupBasis " + "(OPGroupNo,OPGroupName," + " Description,Creator,ERPNo,CreateDate)"; + strSQL += " Values('" + strERP_WorkStationNo + "','" + strERP_WorkStationName + "', 'AutoRun建立' ,'" + strERPCreator + "','" + strERP_ERPNo + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES作業站設定() + // ----------------------------------------------------------- + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblOPGroupBasis Set " + " OPGroupName = '" + strERP_WorkStationName + "'" + ",ERPNo = '" + strERP_ERPNo + "'" + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + + // If drTemp.Read Then + + // ----------------------------------------------------------- + // 刪除MES作業站群組設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPGroupBasis " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2017-06-02, Joe, 要一併刪除Detail資訊 + strSQL = "Delete tblOPGroupDetail " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + // Else + // aryMES_Message.Add(TranslateMsg("[%opgroupno%](workstation_no): " & strERP_WorkStationNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // End If + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%opgroupno%](workstation_no): " + strERP_WorkStationNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteOPGroupBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteOPGroupBasisRet; + + } + + // ======================================================================================================================== + // 程式名稱:WriteEquipmentProductivity(資源行事曆) + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入機台產能資料表 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/23 + // ======================================================================================================================== + private int WriteEquipmentProductivity(iMESCIO.SCI.ERP.Response.SCI_Response_resource_calendar_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteEquipmentProductivityRet = default(int); + WriteEquipmentProductivityRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + var aryResourceNo = new ArrayList(); // 記錄是否新增過設備主檔 + var aryWorkStationNo = new ArrayList(); // 記錄是否新增過作業站群組 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_ResourceNo, strERP_Date, strERP_FromTime, strERP_FromTime2, strERP_ToTime, strERP_ToTime2, strERP_NormalOperation, strERP_WorkStationNo, strERP_WarrantyNo, strERP_Remark, strERP_Status, strERP_CreateDate, strERP_Creator, strERP_ERPNo, str_WorkStationNo, strERP_TranStatus; + // 預設值 目前機台產能資料表無IssueState欄位 + // Dim intIssueState As Integer = 0 + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.resource_calendar_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_ResourceNo = objResponse.resource_calendar_get[intRow].resource_no.Trim().ToUpper(); + strERP_Date = objResponse.resource_calendar_get[intRow].date.Trim().ToUpper(); + strERP_FromTime = strERP_Date + objResponse.resource_calendar_get[intRow].datetime_s; + strERP_FromTime2 = Strings.Left(strERP_FromTime, 4) + "/" + Strings.Mid(strERP_FromTime, 5, 2) + "/" + Strings.Mid(strERP_FromTime, 7, 2) + " " + DateTimeConversion(objResponse.resource_calendar_get[intRow].datetime_s); + if (Operators.CompareString(objResponse.resource_calendar_get[intRow].datetime_e, objResponse.resource_calendar_get[intRow].datetime_s, false) < 0) + { + strERP_ToTime2 = Conversions.ToString(DateAndTime.DateAdd("d", +1, strERP_FromTime2)) + objResponse.resource_calendar_get[intRow].datetime_e + DateTimeConversion(objResponse.resource_calendar_get[intRow].datetime_e); + } + else + { + strERP_ToTime = strERP_Date + objResponse.resource_calendar_get[intRow].datetime_e; + strERP_ToTime2 = Strings.Left(strERP_ToTime, 4) + "/" + Strings.Mid(strERP_ToTime, 5, 2) + "/" + Strings.Mid(strERP_ToTime, 7, 2) + " " + DateTimeConversion(objResponse.resource_calendar_get[intRow].datetime_e); + } + + strERP_NormalOperation = objResponse.resource_calendar_get[intRow].normal_operation; + strERP_WorkStationNo = objResponse.resource_calendar_get[intRow].workstation_no.Trim().ToUpper(); + strERP_WarrantyNo = objResponse.resource_calendar_get[intRow].warranty_no.Trim().ToUpper(); + strERP_Remark = objResponse.resource_calendar_get[intRow].remark.Trim().ToUpper(); + strERP_Status = objResponse.resource_calendar_get[intRow].status.Trim().ToUpper(); + strERP_ERPNo = objResponse.resource_calendar_get[intRow].resource_no; + strERP_TranStatus = objResponse.resource_calendar_get[intRow].tran_status.Trim().ToUpper(); + + str_WorkStationNo = objResponse.resource_calendar_get[intRow].workstation_no.Trim(); + + // '檢查是否有此作業站群組 + // strSQL = "Select OPGroupNo From tblOPGroupBasis " & + // " Where OPGroupNo='" & strERP_WorkStationNo & "'" + + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + // If Not drTemp.Read Then + // '無此作業站群組 執行新增 + // strSQL = "Insert Into tblOPGroupBasis " & + // "(OPGroupNo,OPGroupName," & " Description,Creator,ERPNo,CreateDate)" + // strSQL += " Values('" & strERP_WorkStationNo & "','N/A', 'AutoRun建立' ,'" & strERPCreator & "','" & strERP_WorkStationNo & "'," & + // "To_Date('" & Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // colSQL_2MES.Add(strSQL) + // colSQL_2MES_Rows.Add(1) + // End If + // ----------------------------------------------------------- + // 固定檢查Equipment資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryResourceNo.IndexOf(strERP_ResourceNo) == -1) + { + if (AddOPGroup(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ResourceNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryResourceNo.Add(strERP_ResourceNo); + } + } + // ----------------------------------------------------------- + // 固定檢查OPGroup資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryWorkStationNo.IndexOf(str_WorkStationNo) == -1) + { + if (AddOPGroup(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, str_WorkStationNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryWorkStationNo.Add(str_WorkStationNo); + } + } + + // 檢查是否有此機台產能設定 + strSQL = "Select EquipmentNo From tblWIPEquipmentProductivity " + " Where EquipmentNo='" + strERP_ResourceNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_TranStatus ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES機台產能設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblWIPEquipmentProductivity " + "(EquipmentNo," + " NormalOperation,OPGroupNo,WarrantyNo,Description,Status,Creator,ERPNo,StartTime,EndTime,CreateDate)"; + strSQL += " Values('" + strERP_ResourceNo + "','" + strERP_NormalOperation + "','" + strERP_WorkStationNo + "','" + strERP_WarrantyNo + "', 'AutoRun建立' ,'" + strERP_Status + "','" + strERPCreator + "','" + strERP_ERPNo + "'," + "To_Date('" + strERP_FromTime2 + "','YYYY/MM/DD HH24:MI:SS') ," + "To_Date('" + strERP_ToTime2 + "','YYYY/MM/DD HH24:MI:SS') ," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES機台產能設定 + // -------------- + // MES已存在之資料,ERP資料再次拋轉時,更新資料 + strSQL = "Update tblWIPEquipmentProductivity Set " + " NormalOperation = '" + strERP_NormalOperation + "', WarrantyNo = '" + strERP_WarrantyNo + "' ,Description = 'AutoRun建立',Status = '" + strERP_Status + "',StartTime = " + "To_Date('" + strERP_FromTime2 + "','YYYY/MM/DD HH24:MI:SS') ,EndTime = " + "To_Date('" + strERP_ToTime2 + "','YYYY/MM/DD HH24:MI:SS')" + ",ERPNo = '" + strERP_ERPNo + "'"; + strSQL += " Where EquipmentNo ='" + strERP_ResourceNo + "'"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + // If drTemp.Read Then + + strSQL = "Delete tblWIPEquipmentProductivity " + " Where EquipmentNo ='" + strERP_ResourceNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + // Else + // aryMES_Message.Add(TranslateMsg("[%resourceno%](resource_no): " & strERP_ResourceNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // End If + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%resourceno%](resource_no): " + strERP_ResourceNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteEquipmentProductivityRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteEquipmentProductivityRet; + } + + // ======================================================================================================================== + // 程式名稱:WriteAccessoryBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入工作站主檔 + // 撰寫人員:敬翔 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private int WriteAccessoryBasis(iMESCIO.SCI.ERP.Response.SCI_Response_mold_fixture_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteAccessoryBasisRet = default(int); + WriteAccessoryBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + ArrayList aryVendorNo = new ArrayList(), aryAccessoryType = new ArrayList(), aryAccessoryCategory = new ArrayList(); // 記錄是否已新增 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_AccessoryNo, strERP_SupplierNo, strERP_Asset, strERP_ModelNo, strERP_CreateDate, strERP_Description, strERP_ERPNo; + string strERP_AccessoryType = "ACC"; + string strERP_AccessoryCategory = "ACCCAT"; + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + do + { + try + { + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.details.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_AccessoryNo = objResponse.details[intRow].mold_fixture_no.Trim().ToUpper(); + // 2017-05-04, Joe, ERP沒傳供應商給N/A + strERP_SupplierNo = objResponse.details[intRow].supplier_no.Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_SupplierNo)) + strERP_SupplierNo = "N/A"; + strERP_Description = objResponse.details[intRow].remark.Trim().ToUpper(); + strERP_Asset = objResponse.details[intRow].belongings_no.Trim().ToUpper(); + strERP_Status = objResponse.details[intRow].tran_status.Trim().ToUpper(); + strERP_Description = objResponse.description; + strERP_ERPNo = objResponse.details[intRow].mold_fixture_no; + + strERP_ModelNo = ""; + if (!string.IsNullOrWhiteSpace(objResponse.details[intRow].model_no)) + { + strERP_ModelNo = objResponse.details[intRow].model_no.Trim().ToUpper(); + } + + // ----------------------------------------------------------- + // 固定檢查AccessoryCategory資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryAccessoryCategory.IndexOf(strERP_AccessoryCategory) == -1) + { + if (AddAccessoryCategory(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_AccessoryCategory, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryAccessoryCategory.Add(strERP_AccessoryCategory); + } + } + // ----------------------------------------------------------- + // 固定檢查AccessoryType資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryAccessoryType.IndexOf(strERP_AccessoryType) == -1) + { + if (AddAccessoryType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_AccessoryType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryAccessoryType.Add(strERP_AccessoryType); + } + } + // ----------------------------------------------------------- + // 固定檢查Vendor資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (strERP_SupplierNo != "N/A" && aryVendorNo.IndexOf(strERP_SupplierNo) == -1) + { + if (AddVendorNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_SupplierNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryVendorNo.Add(strERP_SupplierNo); + } + } + + // 檢查是否有此模治具設定 + strSQL = "Select AccessoryNo From tblEQPAccessoryBasis " + " Where AccessoryNo='" + strERP_AccessoryNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + + // ----------------------------------------------------------- + // 新增MES模治具設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblEQPAccessoryBasis " + "(AccessoryNo,AccessoryType,AccessoryCategory,VendorNo,ModelNo," + " Description,Creator,CreateDate, " + "IssueState,AssetNo, " + " AccessoryVersion,CurVersion,ERPNo)"; + strSQL += " Values('" + strERP_AccessoryNo + "','" + strERP_AccessoryType + "','" + strERP_AccessoryCategory + "','" + strERP_SupplierNo + "', '" + strERP_ModelNo + "', " + "'AutoRun建立' ,'" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), " + " '" + intIssueState + "','" + strERP_Asset + "','01','0','" + strERP_ERPNo + "')"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES模治具設定() + // ----------------------------------------------------------- + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblEQPAccessoryBasis Set " + " IssueState = " + intIssueState + " ,ERPNo = '" + strERP_ERPNo + "'" + " Where AccessoryNo='" + strERP_AccessoryNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // 刪除MES模治具設定 + strSQL = "Delete tblEQPAccessoryBasis " + " Where AccessoryNo='" + strERP_AccessoryNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + else + { + // 作廢MES模治具設定 + strSQL = "Update tblEQPAccessoryBasis Set " + " IssueState = -1" + " Where AccessoryNo='" + strERP_AccessoryNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + } + else + { + strSQL = "Delete tblEQPAccessoryBasis " + " Where AccessoryNo='" + strERP_AccessoryNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%opgroupno%](Accessory_No): " + strERP_AccessoryNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteAccessoryBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteAccessoryBasisRet; + + } + + private int AddOPGroup(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strWorkStationNo, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddOPGroupRet = default(int); + AddOPGroupRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + string strERP_WorkStationNo; + + try + { + strERP_WorkStationNo = strWorkStationNo.ToUpper(); + + strSQL = "Select OPGroupNo From tblOPGroupBasis " + " Where OPGroupNo Is Not Null And OPGroupNo='" + strERP_WorkStationNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增OPGroupBasis主檔 + strSQL = "Insert Into tblOPGroupBasis " + "(OPGroupNo,OPGroupName,Description,Creator,ERPNo,CreateDate)"; + strSQL += " Values('" + strERP_WorkStationNo + "','N/A', 'AutoRun建立' ,'" + strERPCreator + "','" + strWorkStationNo + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddOPGroupRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddOPGroupRet; + + } + + private int addEquipment(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strEquipmentNo, string strCreator, DateTime dateCreateDate, string strDescription = "") + { + int addEquipmentRet = default(int); + addEquipmentRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + var strERP_EquipmentNo = default(string); + int intIssueState = 0; + try + { + strERP_EquipmentNo = strERP_EquipmentNo.ToUpper(); + + strSQL = "Select EquipmentNo From tblEQPEquipmentBasis " + " Where EquipmentNo Is Not Null And EquipmentNo='" + strERP_EquipmentNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 新增Equipment主檔 + strSQL = "Insert Into tblEQPEquipmentBasis " + "(EquipmentNo,EquipmentName,EquipmentType,Capacity,EquipmentClass,VendorNo," + "Description,EngineerGroupNo,AssetNo,LoadPort," + "AutoFlag,Eacontroller,EQPRecipe," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_EquipmentNo + "','N/A','N/A',-1,'GENERAL','N/A','AutoRun建立','N/A','',-1," + "1,'N/A',0," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(dateCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + addEquipmentRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return addEquipmentRet; + + } + + private int AddFactoryNo(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strFactoryNo, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddFactoryNoRet = default(int); + AddFactoryNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + string strERP_FactoryNo; + + do + { + try + { + strERP_FactoryNo = strFactoryNo.ToUpper(); + + // 檢查是否有此工廠編號 + strSQL = "Select * From tblSMDFactoryBasis Where FactoryNo Is Not Null " + " And FactoryNo = '" + strERP_FactoryNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (string.IsNullOrEmpty(strERP_FactoryNo)) + { + aryErrorMessage.Add(TranslateMsg("ERP[%FactoryNo%](factory_no):" + strERP_FactoryNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + break; + } + else + { + if (!drTemp.Read()) + { + // 新增SMDFactoryBasis主檔 + strSQL = "Insert Into tblSMDFactoryBasis " + "(FactoryNo,Description,FabCode,IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strERP_FactoryNo + "','','',2,'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + // Return + AddFactoryNoRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + } + while (false); + return AddFactoryNoRet; + + } + + private int AddDepartmentNo(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strDepartmentNo, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddDepartmentNoRet = default(int); + AddDepartmentNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + string strERP_DepartmentNo; + + try + { + strERP_DepartmentNo = strDepartmentNo.ToUpper(); + + // 檢查部門編號是否存在 + strSQL = "Select DepartmentNo From tblUSRDepartmentBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 無此部門編號 執行新增 + strSQL = "Insert Into tblUSRDepartmentBasis " + "(DepartmentNo,DepartmentName,DepartmentSName," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_DepartmentNo + "','" + strERP_DepartmentNo + "','N/A',2,'" + strDepartmentNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddDepartmentNoRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddDepartmentNoRet; + + } + + private int AddUnitNo(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strUnitNo, string strCreator, DateTime dateCreateDate, string strDescription = "") + { + int AddUnitNoRet = default(int); + AddUnitNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + string strERP_UnitNo; + + try + { + strERP_UnitNo = strUnitNo.ToLower(); + + // 檢查單位設定是否存在 + strSQL = "Select UnitType From tblSYSUnitBasis " + " Where UnitNo='" + strERP_UnitNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 無此單位編號 執行新增 + // 2017-09-01, Joe, 將ERP原始UnitNo記錄到單位主檔中 + strSQL = "Insert Into tblSysUnitBasis " + "(UnitNo, UnitType, SystemUnit, TransferRate, IssueState, Description, Creator, CreateDate,ERPNo) " + " Values('" + strERP_UnitNo + "','" + strERP_UnitNo + "','" + strERP_UnitNo + "',1,0,'AutoRun建立','" + strCreator + "', To_Date('" + Strings.Format(dateCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + ",'" + strUnitNo + "')"; + + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddUnitNoRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddUnitNoRet; + + } + + private int AddVendorNo(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strVendorNo, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddVendorNoRet = default(int); + AddVendorNoRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + + // 檢查部門編號是否存在 + strSQL = "Select VendorNo From tblEQPVendor " + " Where VendorNo='" + strVendorNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 無此供應商編號 執行新增 + strSQL = "Insert Into tblEQPVendor " + "(VendorNo,VendorName,Description," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strVendorNo.ToUpper() + "','N/A','AutoRun建立',0,'" + strVendorNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddVendorNoRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddVendorNoRet; + + } + + private int AddAccessoryCategory(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strAccessoryCategory, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddAccessoryCategoryRet = default(int); + AddAccessoryCategoryRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + + // 檢查部門編號是否存在 + strSQL = "Select AccessoryCategory From tblEQPAccessoryCategory " + " Where AccessoryCategory='" + strAccessoryCategory + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 無此模治具類種類 執行新增 + strSQL = "Insert Into tblEQPAccessoryCategory " + "(AccessoryCategory,Description," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strAccessoryCategory.ToUpper() + "','AutoRun建立',0,'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddAccessoryCategoryRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddAccessoryCategoryRet; + + } + + private int AddAccessoryType(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref ArrayList aryErrorMessage, string strAccessoryType, string strCreator, DateTime datCreateDate, string strDescription = "") + { + int AddAccessoryTypeRet = default(int); + AddAccessoryTypeRet = -1; // Return -1:fail,0:Success + + var drTemp = default(DbDataReader); + string strSQL; + + try + { + + // 檢查模治具類別是否存在 + strSQL = "Select AccessoryType From tblEQPAccessoryType " + " Where AccessoryType='" + strAccessoryType + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (!drTemp.Read()) + { + // 無此模治具類別 執行新增 + strSQL = "Insert Into tblEQPAccessoryType " + "(AccessoryType,Description," + "IssueState,Creator,CreateDate)"; + strSQL += " Values('" + strAccessoryType.ToUpper() + "','AutoRun建立',0,'" + strERPCreator + "'," + "To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // Return + AddAccessoryTypeRet = 0; + } + + catch (Exception ex) + { + aryErrorMessage.Add(ex.Message.ToString()); + throw; + } + finally + { + if (drTemp != null) + drTemp.Dispose(); + } + + return AddAccessoryTypeRet; + + } + + // ======================================================================================================================== + // 程式名稱:DateTimeConversion + // 傳入參數:時分/時分秒 + // 傳回參數:時分/時分秒 + // 用 途:Ex: 24:00:00 => 23:59:59 + // Ex: 24:00 => 23:59 + // Ex: 00:01 => 00:00 + // Ex: 00:00:01 => 00:00:00 + // 撰寫人員:06475 lijyun + // 撰寫日期:2017/03/22 + // ======================================================================================================================== + private string DateTimeConversion(string strDateTime) + { + string DateTimeConversionRet = default(string); + string strDateTimeTemp; + strDateTimeTemp = strDateTime; + try + { + if (strDateTime.Length == 8) // hhmmss + { + if (Strings.Left(strDateTime, 2) == "24") + { + strDateTimeTemp = "23:59:59"; + // ElseIf strDateTime = "00:00:01" Then + // strDateTimeTemp = "00:00:00" + } + } + else if (strDateTime.Length == 5) // hhmm + { + if (Strings.Left(strDateTime, 2) == "24") + { + strDateTimeTemp = "23:59"; + // ElseIf strDateTime = "00:01" Then + // strDateTimeTemp = "00:00" + } + } + + DateTimeConversionRet = strDateTimeTemp; + } + + catch (Exception ex) + { + + throw; + } + finally + { + + } + + return DateTimeConversionRet; + } + + // ======================================================================================================================== + // 程式名稱:WriteUserBasis + // 傳入參數:objResponse(response CDO物件)、aryReturnMessage(回傳訊息參考) + // 傳回參數:-1:fail,0:Success + // 用 途:寫入使用者主檔 + // 撰寫人員:KunYuan + // 撰寫日期:2017/06/01 + // ======================================================================================================================== + private int WriteUserBasis(iMESCIO.SCI.ERP.Response.SCI_Response_user_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteUserBasisRet = default(int); + WriteUserBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL = new Collection(), colSQL_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_EmployeeNo, strERP_EmployeeName, strERP_DepartNo, strERP_Email, strERP_Remark, strERP_Status, strPassword, strErpNo; + // 預設值 + int intIssueState = 0; + string strUserLevel = "2"; // 使用者等級預設『End User』 + + // reset + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL.Clear(); + colSQL_Rows.Clear(); + + try + { + for (int intRow = 0, loopTo = objResponse.user_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_EmployeeNo = objResponse.user_get[intRow].employee_no.Trim().ToUpper(); + strERP_EmployeeName = objResponse.user_get[intRow].employee_name.Trim(); + strERP_Status = objResponse.user_get[intRow].tran_status.Trim(); + strErpNo = objResponse.user_get[intRow].employee_no.Trim(); + + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].department_no)) + { + strERP_DepartNo = objResponse.user_get[intRow].department_no.Trim().ToUpper(); + } + else + { + strERP_DepartNo = ""; + } + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].email)) + { + strERP_Email = objResponse.user_get[intRow].email.Trim(); + } + else + { + strERP_Email = ""; + } + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].remark)) + { + strERP_Remark = objResponse.user_get[intRow].remark.Trim(); + } + else + { + strERP_Remark = ""; + } + + // 密碼:預設同使用者編號 + strPassword = Strings.StrReverse(Convert.ToBase64String(Encoding.ASCII.GetBytes(Strings.StrReverse(modWIN.PasswordEncoding(ref strERP_EmployeeNo))))); + + // 檢查是否有此使用者 + strSQL = "Select UserNo, IssueState From tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + strSQL = "INSERT INTO TBLUSRUSERBASIS (USERNO, USERNAME, USERLEVEL, PASSWORD, CREATOR," + "CREATEDATE, DESCRIPTION, ISSUESTATE, USERTYPE, DEPARTMENTNO," + "EMAILADDRESS, CHANGEDATE, RESETPASSWORD, ERPNO) "; + strSQL += " Values ('" + strERP_EmployeeNo + "','" + strERP_EmployeeName + "','" + strUserLevel + "','" + strPassword + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + strERP_Remark + "'," + intIssueState + ",0, '" + strERP_DepartNo + "'," + "'" + strERP_Email + "', To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),0, '" + strErpNo + "')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "UPDATE TBLUSRUSERBASIS SET ISSUESTATE = " + intIssueState + " ,USERNAME = '" + strERP_EmployeeName + "' , DESCRIPTION = '" + strERP_Remark + "'" + ", DEPARTMENTNO = '" + strERP_DepartNo + "', EMAILADDRESS = '" + strERP_Email + "', ERPNo='" + strErpNo + "' WHERE USERNO ='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // 刪除MES作業站設定 + strSQL = "Delete tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + else + { + // 作廢MES作業站設定 + strSQL = "Update tblOPBasis Set IssueState=-1 Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit + strSQL = "Delete tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%USERNO%](employee_no): " + strERP_EmployeeNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL.Clear(); + colSQL_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteUserBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + CloseConnection(cnnMES); + } + + return WriteUserBasisRet; + } + #endregion + + #region ---E10ICD iMES與E10整合--- + private object funMESCallERPCustomerBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPCustomerBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "customer.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found ERP ERP Setting Info (ERP_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_customer_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_customer_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_customer_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("customer.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_customer_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + objRequest.page_size = strPageSize; + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_customer_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESCustomerBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 客戶主檔拋轉執行失敗!!"); + } + } + } + } + } + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPCustomerBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPCustomerBasis_E10ICDRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPCustomerBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]客戶主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPCustomerBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPCustomerBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPCustomerBasis_E10ICDRet; + } + + + + private object funMESCallERPVendorBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPVendorBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "supplier.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + // ===== + string strException = ""; // Exception XML字串 + string strMessage = ""; // Message XML字串 + + var arrException = new List(); // Exception XML字串 + var arrMessage = new List(); // Message XML字串 + // ===== + + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_supplier_get(); + // Dim colResponseXML As New Collection + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_supplier_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_supplier_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + // OutXml = ex.Message + // =====Elvis ,0091128: [605][CP+FT] E10ICD整合問題_AutoRun主檔拋轉的ERP交易紀錄exception時紀錄不正確 + modAutoRunLibrary.combineException(ref arrException, sysmsg: ex.Message, mesmsg: "[%CallERPVendorFail%]", stack: ex.StackTrace); + string argReturnValue = ""; + string argResult = "fail"; + ExceptionXML = modAutoRunLibrary.CombineXMLResponse(strIdentity, argReturnValue, arrException, argResult, arrMessage); + // ===== + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_supplier_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_supplier_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus == true) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteVendorBasis(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("supplier_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + // OutXml = EX_AUT.Message.ToString + // '執行ERP交易完畢寫入Log + // addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis_E10ICD", + // My.Computer.Name, gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "ERP", strServiceName) + + // =====Elvis ,0091128: [605][CP+FT] E10ICD整合問題_AutoRun主檔拋轉的ERP交易紀錄exception時紀錄不正確 + modAutoRunLibrary.combineException(ref arrException, sysmsg: EX_AUT.Message.ToString(), mesmsg: "[%CallERPVendorFail%]", stack: EX_AUT.StackTrace.ToString()); + string argReturnValue = ""; + string argResult = "fail"; + strException = modAutoRunLibrary.CombineXMLResponse(strIdentity, argReturnValue, arrException, argResult, arrMessage); + + // 執行ERP交易完畢寫入Log + results = "fail"; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException, LogClass: "AutoRun"); + } + // ===== + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPVendorBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPVendorBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPVendorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException); + } + } + // === + + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件供應商-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPVendorBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPVendorBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPVendorBasis_E10ICDRet; + } + + private object funMESCallERPEquipmentBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPEquipmentBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "machine.get"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + do + { + try + { + + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_machine_get(); + // Dim colResponseXML As New Collection + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_machine_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_machine_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_machine_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_machine_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus == true) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteEquipmentBasis_E10ICD(ref objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("machine_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPEquipmentBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPEquipmentBasis_E10ICDRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPEquipmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]設備-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPEquipmentBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPEquipmentBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPEquipmentBasis_E10ICDRet; + } + + private object funMESCallERPInventoryBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPInventoryBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "warehouse.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_warehouse_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_warehouse_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_warehouse_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息 + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("warehouse.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_warehouse_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_warehouse_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESInventoryBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 庫房主檔拋轉執行失敗!!"); + } + } + } + } + } + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPInventoryBasis_E10ICDRet = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPInventoryBasis_E10ICDRet = "fail;" + strTemp; + + } + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPInventoryBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "fail", "ERP", strServiceName, strException: argstrException); + + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]庫房主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPInventoryBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPInventoryBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPInventoryBasis_E10ICDRet; + } + + private object funMESCallERPLocatorBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPLocatorBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "storage.spaces.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_storage_spaces_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_storage_spaces_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_storage_spaces_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("storage.space.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_storage_spaces_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_storage_spaces_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESLocatorBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 儲位主檔拋轉執行失敗!!"); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + // 執行ERP交易完畢寫入Log + results = "fail"; + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPLocatorBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPLocatorBasis_E10ICDRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPLocatorBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]儲位主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPLocatorBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPLocatorBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPLocatorBasis_E10ICDRet; + } + + private object funMESCallERPPRDMTLBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPPRDMTLBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "item.get.e10icd"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_item_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_item_get(); + objMaster.data_time = strDate; + objMaster.key_condition = ""; + objMaster.page_size = strPageSize; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_item_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add by KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + // 先確認是否有測試檔案,有的話就讀取出xml + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + // 2021/4/6 Steven 替換 ' + OutXml = OutXml.Replace("'", "''"); + + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + + + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_item_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後待入從ERP收到之keyCondition + objMaster.page_size = strPageSize; + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_item_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable_E10ICD(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteProductOrMaterailBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("item_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPPRDMTLBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + // UpdateLogTableErrorInfo(nodeID.InnerText, strTemp) + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPPRDMTLBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPPRDMTLBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPPRDMTLBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPPRDMTLBasis_E10ICDRet; + } + + private object funMESCallERPOPBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPOPBasis_E10ICDRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "op.get.e10icd"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_op_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_op_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "op.get.e10icd", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_op_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("op.get.e10icd"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPOPBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_op_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "op.get.e10icd", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_op_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable_E10ICD(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteOPBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("op_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + // CollectionSQL = Nothing + // XmlDoc = Nothing + + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPBasis_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPOPBasis_E10ICDRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPOPBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPOPBasis_E10ICDRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPBasis_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPBasis", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]作業站-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPOPBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPOPBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPOPBasis_E10ICDRet; + + } + + private object funMESCallERPOPGroupBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPOPGroupBasis_E10ICDRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "workstation.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為E-mail,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_workstation_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_workstation_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "workstation.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_workstation_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("workstation.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPOPGroupBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_workstation_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "workstation.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_workstation_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteOPGroupBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("workstation_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + + // CollectionSQL = Nothing + // XmlDoc = Nothing + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPGroupBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPGroupBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPOPGroupBasis_E10ICDRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPOPGroupBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPOPGroupBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPOPGroupBasis", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPOPGroupBasis", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]工作站-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPOPGroupBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPOPGroupBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPOPGroupBasis_E10ICDRet; + + } + + private object funMESCallERPDepartmentBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPDepartmentBasis_E10ICDRet = default(object); + var XmlDoc = new XmlDocument(); + var drTemp = default(DbDataReader); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + var CollectionSQL = new Collection(); + string strSQL; + + string strServiceName = "department.get"; + string strGroupNo = ""; // 使用者群組 + string strPageSize = "500"; // 分包筆數 + string strDate = string.Empty; // 日期迄(如無指定則帶今天) + var arriveTime = DateTime.Now; + string strCustomerNo, strERP_CustomerNo, strERP_status; + string strSubject, strBody; // 寄送通知資訊 + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + + do + { + try + { + // ParameterXX參數說明 + // 01:Mail通知群組(GroupNo) + // 02:分包筆數 + // 03:手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + + // Parameter01為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為手動重收時填上時間,若無此值則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add("Can not found EAI ERP Setting Info (EAI_TYPE = 1)!"); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_department_get(); + XmlNode xmlNodeCnt; + string strCnt; + string strTTcnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_department_get(); + objRequest.page_size = strPageSize; + objRequest.data_time = strDate; + objRequest.key_condition = ""; + // ---- InXml ----- + object argSCI_Object = objRequest; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_department_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest("department.get"); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objRequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_department_get(); + objRequest.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objRequest.page_size = strPageSize; + objRequest.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objRequest; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", strServiceName, pRequestKey: argpRequestKey1); + objRequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_department_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入log table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteToMESDepartmentBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(strServiceName + ", 部門主檔拋轉執行失敗!!"); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPDepartmentBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPDepartmentBasis_E10ICDRet = "fail;" + strTemp; + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPDepartmentBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]部門主檔-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strGroupNo, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPDepartmentBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPDepartmentBasis_E10ICDRet = "fail;" + strTemp; + } + } + } + + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPDepartmentBasis_E10ICDRet; + } + + private object funMESCallERPUserBasis_E10ICD(Collection colParameters = null) + { + object funMESCallERPUserBasis_E10ICDRet = default(object); + var drTemp = default(DbDataReader); + string strSQL; + var XmlDoc = new XmlDocument(); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var CollectionSQL = new Collection(); + var colResponseXML = new Collection(); + var arriveTime = DateTime.Now; + string strServiceName = "user.get"; + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + string strDate; // 參數三,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + string strSubject, strBody; // 寄送通知資訊 + + XmlNode node = null; + string strReqid = ""; + string strCnt = defString; + string strTTcnt = ""; + var datArriveTime = DateTime.Now; + + do + { + try + { + // Parameter01為傳入參數,作為SheetType,若無此值則不進行下面的程式 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // 分包筆數必須為數值型態,Add by KevinChang + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為傳入參數,作為ProductionDate,若無此值則用昨天當日期 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strDate = GetDate(Conversions.ToString(colParameters["Parameter03"]), "Parameter03"); + } + else + { + // 20170316 edit liyujn + strDate = GetERPTransactionDate(strServiceName); + } + + // 取得erp資訊 + if (!GetERPSetting(ref dtERPSetting, pEAIType: 1)) + { + aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!", strLanguageMode, strResourceDir)); + break; + } + + var objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_user_get(); + XmlNode xmlNodeCnt; + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + var objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_user_get(); + objMaster.data_time = strDate; + objMaster.page_size = strPageSize; + objMaster.key_condition = ""; + object argSCI_Object = objMaster; + string argpRequestKey = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "user.get", pRequestKey: argpRequestKey); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_user_get)argSCI_Object; + + int intloopTimes = 0; + do + { + // 迴圈執行超過5次直接跳出迴圈並回傳錯誤訊息,Add By KevinChang + if (intloopTimes >= 5) + { + throw new Exception("[%THE NUMBER OF SUBCONTRACTS IS SET TOO LITTLE TO CAUSE THE LOOP TO EXECUTE MORE THAN FIVE TIMES%]"); + break; + } + + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPUserBasis_E10ICD", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + + // 將ERP拋回的資料轉成物件 + objResponse.ParseXmlToObject(OutXml); + + if (objResponse.srvcode == null == false && objResponse.srvcode.Equals("000") && objResponse.code == null == false && objResponse.code.Equals("0")) + { + objMaster = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_user_get(); + objMaster.data_time = objResponse.data_time; // 第二次後請求需為回傳之最後拋轉時間 + objMaster.page_size = strPageSize; + objMaster.key_condition = Strings.Replace(objResponse.key_condition, "''", "'"); // 第二次後代入從ERP收到之keyCondition + object argSCI_Object1 = objMaster; + string argpRequestKey1 = "Null"; + InXml = CombineRequestXMLbyCDO(ref argSCI_Object1, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "user.get", pRequestKey: argpRequestKey1); + objMaster = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_user_get)argSCI_Object1; + + xmlNodeCnt = XmlDoc.SelectSingleNode("/response/payload/param/data_response/datainfo/parameter/data"); + strCnt = xmlNodeCnt.Attributes.GetNamedItem("cnt").Value; + strTTcnt = xmlNodeCnt.Attributes.GetNamedItem("tt_cnt").Value; + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + + while ((strCnt ?? "") != (strTTcnt ?? "")); + + // 寫入Log Table + TreatWriteLogTable(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + objResponse.ParseXmlToObject(strOutXML); + + if (WriteUserBasis_E10ICD(objResponse, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("user_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPUserBasis_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPUserBasis", LogClass: "AutoRun", strException: argstrException); + // 2013/02/05, Hank, Send Email + colParameters.Add(funMESCallERPUserBasis_E10ICDRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPUserBasis_E10ICDRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPUserBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + + } + // ----- 執行ERP交易完畢紀錄TransactionLog ----- + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "MESCallERPUserBasis_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), results, "", "CreateMESCallERPUserBasis", strException: argstrException); + // === + //if (daTemp != null) + // daTemp.Dispose(); + if (drTemp != null) + drTemp.Close(); + } + } + while (false); + + + // 當執行失敗 寄送 Email 必須有設定參數一 + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]使用者-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + argcnnTemp = CreateConnection(strConnectionString); + // 寄送 Email + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, Conversions.ToString(colParameters["Parameter01"]), CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPUserBasis_E10ICDRet.ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPUserBasis_E10ICDRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPUserBasis_E10ICDRet; + + } + #endregion + + #region ---E10ICD to MES 處理Function--- + private int WriteToMESCustomerBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_customer_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESCustomerBasis_E10ICDRet = default(int); + WriteToMESCustomerBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_CustomerNo, strERP_CustomerName, strERP_CustomerSName, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.customer_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_CustomerNo = objResponse.customer_get[intRow].customer_no.ToString().Trim().ToUpper(); + strERP_status = objResponse.customer_get[intRow].tran_status.ToString().Trim().ToUpper(); + strERP_CustomerName = objResponse.customer_get[intRow].customer_name.Trim().ToUpper(); + if (strERP_CustomerName == null || string.IsNullOrEmpty(strERP_CustomerName.Trim())) + strERP_CustomerName = "N/A"; + strERP_CustomerSName = objResponse.customer_get[intRow].customer_shortname; + if (strERP_CustomerSName == null || string.IsNullOrEmpty(strERP_CustomerSName.Trim())) + strERP_CustomerSName = strERP_CustomerName; + str_ERPNo = objResponse.customer_get[intRow].customer_no.ToString().Trim(); + + // 檢查是否有此供應商設定 + strSQL = "Select CustomerNo,IssueState From tblENTCustomerBasis " + " Where CustomerNo='" + strERP_CustomerNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES客戶設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_CustomerNo)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + " [%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_CustomerName)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",[%CustomerName%](customer_name),[%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_CustomerSName)) + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",[%CustomerSName%](customer_shortname),[%Is Empty%]! ", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblENTCustomerBasis " + "(CustomerNo,CustomerName,CustomerSName,IssueState,ERPNo," + " Creator,CreateDate)"; + strSQL += " Values('" + strERP_CustomerNo + "','" + strERP_CustomerName + "','" + strERP_CustomerSName + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + else + { + // aryMES_Message.Add("客戶編號(customer_no):" & objReponse.customer_no & ", 已存在MES, 不允許新增!!") + + // ----------------------------------------------------------- + // 修改MES客戶設定 + // ----------------------------------------------------------- + + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblENTCustomerBasis Set " + " IssueState = " + intIssueState + ",CUSTOMERNAME = '" + strERP_CustomerName + "',CUSTOMERSNAME = '" + strERP_CustomerSName + "',ERPNo = '" + str_ERPNo + "'" + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES客戶相關設定 + // ----------------------------------------------------------- + // Del detail + if (CustVendorIntegration_DelCustomer(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_CustomerNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES客戶設定 + // ----------------------------------------------------------- + strSQL = "Update tblENTCustomerBasis Set " + " IssueState=-1" + " Where CustomerNo='" + strERP_CustomerNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + // aryMES_Message.Add(TranslateMsg("[%CustomerNo%] : " & strERP_CustomerNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES客戶相關設定 + // ----------------------------------------------------------- + else if (CustVendorIntegration_DelCustomer(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_CustomerNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%CustomerNo%](customer_no):" + strERP_CustomerNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESCustomerBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESCustomerBasis_E10ICDRet; + + } + + private int WriteVendorBasis(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_supplier_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteVendorBasisRet = default(int); + WriteVendorBasisRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + var colSQL_2MES = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_VendorNo, strERP_VendorName, strERP_status, strErpNo; + + // 預設值 + int intIssueState = 0; + + try + { + for (int intRow = 0, loopTo = objResponse.supplier_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_VendorNo = objResponse.supplier_get[intRow].supplier_no.Trim().ToUpper(); + strERP_status = objResponse.supplier_get[intRow].tran_status.Trim().ToUpper(); + strErpNo = objResponse.supplier_get[intRow].supplier_no.Trim(); // 記錄原始之ERP編號 + strERP_VendorName = objResponse.supplier_get[intRow].supplier_name.Trim(); + strERP_VendorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(strERP_VendorName), "N/A", strERP_VendorName)); + + // 一、檢查是否有此物料供應商設定 + strSQL = "Select VendorNo,IssueState From tblMTLMaterialVendor " + " Where VendorNo='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + // 新增物料供應商 + strSQL = "Insert Into tblMTLMaterialVendor (VendorNo,VendorName,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLMTLMATERIALVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES物料供應商設定 + strSQL = "Update tblMTLMaterialVendor Set IssueState = " + intIssueState + ", VendorName = '" + strERP_VendorName + "', ERPNo = '" + strErpNo + "' " + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLMTLMATERIALVENDORCONTACTOR WHERE VendorNo='" + strERP_VendorNo + "'"); + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLMTLMATERIALVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES物料供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLMTLMATERIALVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除物料供應商主檔 + strSQL = "Delete From TBLMTLMATERIALVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLMTLMATERIALVENDOR Set IssueState=-1 Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // 刪除MES物料供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLMTLMATERIALVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除物料供應商主檔 + strSQL = "Delete From TBLMTLMATERIALVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 二、檢查是否有此設備供應商設定 + strSQL = "Select VendorNo,IssueState From TBLEQPVENDOR Where VendorNo='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + // 新增設備供應商 + strSQL = "Insert Into TBLEQPVENDOR (VendorNo,VendorName,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLEQPVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES設備供應商設定 + strSQL = "Update TBLEQPVENDOR Set IssueState = " + intIssueState + ", VendorName = '" + strERP_VendorName + "' " + " Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLEQPVENDORCONTACTOR WHERE VendorNo='" + strERP_VendorNo + "'"); + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLEQPVENDORCONTACTOR (VENDORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + case "D": + { + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES設備供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLEQPVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除設備供應商主檔 + strSQL = "Delete From TBLEQPVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLEQPVENDOR Set IssueState=-1 Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // 刪除MES設備供應商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLEQPVENDORCONTACTOR Where VendorNo='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除設備供應商主檔 + strSQL = "Delete From TBLEQPVENDOR Where VendorNo ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 三、檢查是否有此外包商設定 + strSQL = "Select SUBCONTRACTORNO,IssueState From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + // 新增外包商 + strSQL = "Insert Into TBLENTSUBCONTRACTOR (SUBCONTRACTORNO,SUBCONTRACTORNAME,IssueState,Description,Creator,CreateDate,ERPNo)"; + strSQL += " Values('" + strERP_VendorNo + "','" + strERP_VendorName + "'," + intIssueState + ",'AutoRun建立','" + strERPCreator + "',To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "')"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLENTSUBCONTRACTORCONT (SUBCONTRACTORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 修改MES外包商設定 + strSQL = "Update TBLENTSUBCONTRACTOR Set IssueState = " + intIssueState + ", SUBCONTRACTORNAME = '" + strERP_VendorName + "' " + " Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 聯絡人資訊一律重新新增 + colSQL_2MES.Add("DELETE FROM TBLENTSUBCONTRACTORCONT WHERE SUBCONTRACTORNO='" + strERP_VendorNo + "'"); + // 聯絡人資訊 + var supplirLists = objResponse.supplier_get[intRow].supplier_detail; + if (supplirLists != null) + { + foreach (iMESCIO.SCI.ERP.Response_E10ICD.SCI_supplier_detail detail in supplirLists) + { + string strContractorName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(detail.contractor_name), "N/A", detail.contractor_name)); + strSQL = "INSERT INTO TBLENTSUBCONTRACTORCONT (SUBCONTRACTORNO, CONTACTORNAME, TELNO, FAXNO, TITLE, ADDRESS, EMAIL, DESCRIPTION) VALUES "; + strSQL += "('" + strERP_VendorNo + "', '" + strContractorName + "','" + detail.telephone_number + "','" + detail.fax_no + "','" + detail.title + "','" + detail.address + "','" + detail.email + "','" + detail.remark + "')"; + colSQL_2MES.Add(strSQL); + } + } + } + + break; + } + case "D": + { + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES外包商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLENTSUBCONTRACTORCONT Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除外包商主檔 + strSQL = "Delete From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES供應商設定 + // ----------------------------------------------------------- + strSQL = "Update TBLENTSUBCONTRACTOR Set IssueState=-1 Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 刪除MES外包商相關設定 + // ----------------------------------------------------------- + // 1. 刪除Contactor + strSQL = "Delete From TBLENTSUBCONTRACTORCONT Where SUBCONTRACTORNO='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + + // 2. 刪除外包商主檔 + strSQL = "Delete From TBLENTSUBCONTRACTOR Where SUBCONTRACTORNO ='" + strERP_VendorNo + "'"; + colSQL_2MES.Add(strSQL); + } + + break; + } + } + + drTemp.Close(); + //cmmTemp.Dispose(); + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_2MES); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteVendorBasisRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteVendorBasisRet; + + } + private int WriteEquipmentBasis_E10ICD(ref iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_machine_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteEquipmentBasis_E10ICDRet = default(int); + WriteEquipmentBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var aryEquipmentType = new ArrayList(); // 記錄是否已新增過 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_EQPNo, strERP_EQPType, strERP_ResType, strERP_AssetNo, strERP_Description, strERP_status, strERP_MaxTime, strErpNo, strErp_EquipmentName, strErp_SupplierNo; + + // 預設值 + int intIssueState = 0; + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.machine_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_EQPNo = objResponse.machine_get[intRow].machine_no.Trim().ToUpper(); + strErpNo = objResponse.machine_get[intRow].machine_no.Trim(); // 記錄原始之ERP編號 + + // 2017.03.01 崑源,設備類型依舊有整合方式,寫死為"EQPTYPE"且判斷ERP傳來的資源類型若為0、1或未傳時再處理 + // 20170324 edit lijyun↓ + // strERP_ResType = objResponse.machine_get(intRow).resource_type.Trim + if (objResponse.machine_get[intRow].resource_type == null) + { + strERP_ResType = ""; + } + else + { + strERP_ResType = objResponse.machine_get[intRow].resource_type.Trim(); + } + // 20170324 edit lijyun↑ + strERP_EQPType = "EQPTYPE"; + if (!string.IsNullOrWhiteSpace(strERP_ResType)) + { + if (!(strERP_ResType.Equals("0") | strERP_ResType.Equals("1"))) + { + continue; + } + } + // 20170324 edit lijyun↓ + // strERP_AssetNo = objResponse.machine_get(intRow).belongings_no.Trim.ToUpper + if (objResponse.machine_get[intRow].belongings_no == null) + { + strERP_AssetNo = ""; + } + else + { + strERP_AssetNo = objResponse.machine_get[intRow].belongings_no.Trim().ToUpper(); + } + // 20170324 edit lijyun↑ + + strERP_status = objResponse.machine_get[intRow].tran_status.Trim().ToUpper(); + strERP_Description = objResponse.machine_get[intRow].remark.Trim(); + + // 20170316 edit lijyun↓ + if (objResponse.machine_get[intRow].machine_capacity == null) + { + strERP_MaxTime = ""; + } + else + { + strERP_MaxTime = objResponse.machine_get[intRow].machine_capacity.Trim(); + double tmpValue; + + tmpValue = double.Parse(strERP_MaxTime); + + if (tmpValue < 1.0d | tmpValue > 24.0d) + { + strERP_MaxTime = "1"; + } + + } + // 20170316 edit lijyun↑ + + // 2017/02/22 modi KY:新增『設備名稱』及『設備供應商』欄位 + strErp_EquipmentName = objResponse.machine_get[intRow].machine_name.Trim(); + if (objResponse.machine_get[intRow].supplier_no == null) + { + strErp_SupplierNo = "N/A"; + } + else if (string.IsNullOrEmpty(objResponse.machine_get[intRow].supplier_no.Trim())) + { + strErp_SupplierNo = "N/A"; + } + else + { + strErp_SupplierNo = objResponse.machine_get[intRow].supplier_no.Trim().ToUpper(); + } + + + // ----------------------------------------------------------- + // 固定檢查EquipmnetTyp資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // 20170314 edit lijyun↓ + // If AddEquipmentType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strERP_EQPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryEquipmentType.IndexOf(strERP_EQPType) == -1) + { + if (AddEquipmentType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry1 = true; + break; + } + else + { + aryEquipmentType.Add(strERP_EQPType); + } + } + // 20170314 edit lijyun↑ + + // 檢查是否有此作業站設定 + strSQL = "Select EquipmentNo,IssueState From tblEQPEquipmentBasis " + " Where EquipmentNo='" + strERP_EQPNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + + // ----------------------------------------------------------- + // 新增MES設備主檔設定 + // ----------------------------------------------------------- + // 2017-05-31, Add EquipmentClass預設為GENERAL + // 2017-06-02, Joe, LoadPort預設為-1 + strSQL = "Insert Into tblEQPEquipmentBasis " + "(EquipmentNo,EquipmentType,Capacity," + "EngineerGroupNo,LoadPort," + "AutoFlag,Eacontroller,EQPRecipe," + "IssueState,Creator,CreateDate,ERPNo,EquipmentName," + "EquipmentClass "; + if (!string.IsNullOrEmpty(strERP_AssetNo)) + { + strSQL += ",AssetNo"; + } + if (!string.IsNullOrEmpty(strERP_Description)) + { + strSQL += ",Description"; + } + if (!string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL += ",MaxTime"; + } + if (!string.IsNullOrEmpty(strErp_SupplierNo)) + { + strSQL += ",VendorNo"; + } + strSQL += ")"; + strSQL += " Values('" + strERP_EQPNo + "','" + strERP_EQPType + "',-1," + "'N/A',-1,0,'N/A',0," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', '" + strErp_EquipmentName + "' " + ",'GENERAL' "; + if (!string.IsNullOrEmpty(strERP_AssetNo)) + { + strSQL += ",'" + strERP_AssetNo + "'"; + } + if (!string.IsNullOrEmpty(strERP_Description)) + { + strSQL += ",'" + strERP_Description + "'"; + } + if (!string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL += ",'" + strERP_MaxTime + "'"; + } + if (!string.IsNullOrEmpty(strErp_SupplierNo)) + { + strSQL += ",'" + strErp_SupplierNo + "'"; + } + strSQL += ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES設備設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // 2019/07/22 Eric 當ERP未傳入machine_capacity,不更新欄位MaxTime + if (string.IsNullOrEmpty(strERP_MaxTime)) + { + strSQL = "Update tblEQPEquipmentBasis Set IssueState = " + intIssueState + ",EquipmentType = '" + strERP_EQPType + "',AssetNo = '" + strERP_AssetNo + "'" + ",Description='" + strERP_Description + "', EquipmentName ='" + strErp_EquipmentName + "' " + ",ERPNo = '" + strErpNo + "'" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + strSQL = "Update tblEQPEquipmentBasis Set IssueState = " + intIssueState + ",EquipmentType = '" + strERP_EQPType + "',AssetNo = '" + strERP_AssetNo + "'" + ",Description='" + strERP_Description + "', MaxTime = '" + strERP_MaxTime + "', EquipmentName ='" + strErp_EquipmentName + "' " + ",ERPNo = '" + strErpNo + "'" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ResourcesIntegration_DelEquipment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPNo) < 0) + { + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblEQPEquipmentBasis Set " + " IssueState = -1" + " Where EquipmentNo='" + strERP_EQPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%EQUIPMENTNO%](machine_no): " & strERP_EQPNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + else if (ResourcesIntegration_DelEquipment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_EQPNo) < 0) + { + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%EQUIPMENTNO%](machine_no): " + strERP_EQPNo + ", [%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // MES資料庫異動 + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteEquipmentBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteEquipmentBasis_E10ICDRet; + } + + private int WriteToMESInventoryBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_warehouse_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESInventoryBasis_E10ICDRet = default(int); + WriteToMESInventoryBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + //System.Data.OleDb.OleDbDataAdapter daSMD; + DataSet dsSMD; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + var aryFactoryNo = new ArrayList(); // 記錄是否新增過工廠編號 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_INVNo, strERP_INVName, strERP_FactoryNo, strERP_WarehouseType, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + strERP_WarehouseType = ""; // 預設為空 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.warehouse_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_INVNo = objResponse.warehouse_get[intRow].warehouse_no.ToString().Trim().ToUpper(); + strERP_FactoryNo = objResponse.warehouse_get[intRow].factory_no.ToString().Trim().ToUpper(); + + if (objResponse.warehouse_get[intRow].warehouse_name == null || string.IsNullOrEmpty(objResponse.warehouse_get[intRow].warehouse_name.ToString().Trim())) + { + strERP_INVName = "N/A"; + } + else + { + strERP_INVName = objResponse.warehouse_get[intRow].warehouse_name.ToString().Trim().ToUpper(); + } + + strERP_status = objResponse.warehouse_get[intRow].tran_status.ToString().Trim().ToUpper(); + + if (string.IsNullOrEmpty(objResponse.warehouse_get[intRow].warehouse_type) || string.IsNullOrEmpty(strERP_WarehouseType.ToString().Trim())) + { + strERP_WarehouseType = 1.ToString(); + } + else + { + strERP_WarehouseType = objResponse.warehouse_get[intRow].warehouse_type.ToString().Trim().ToUpper(); + } + str_ERPNo = objResponse.warehouse_get[intRow].warehouse_no.ToString().Trim(); + // 20170313 edit lijyun↓ + // 檢查是否有此工廠編號 + // strSQL = "Select * From tblSMDFactoryBasis Where FactoryNo Is Not Null " & + // " And FactoryNo = '" & objResponse.warehouse_get(intRow).factory_no & "'" + // cmmTemp = New OleDb.OleDbCommand(strSQL, cnnMES) + // drTemp = ExecuteSQLQuery_Reader + + // If String.IsNullOrEmpty(strERP_FactoryNo) Then + // aryMES_Message.Add(TranslateMsg("ERP[%FactoryNo%](factory_no):" & strERP_FactoryNo & " [%Is Empty%]!")) + // Exit For + // Else + // If Not drTemp.Read Then + // strSQL = "Insert Into tblSMDFactoryBasis " & + // "(FactoryNo,Description,FabCode," & + // "IssueState,Creator,CreateDate)" + // strSQL += " Values('" & objResponse.warehouse_get(intRow).factory_no & "','','',2,'" & strERPCreator & "'," & + // "To_Date('" & Format(datNow, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS'))" + // Call ExecuteSQLNoneQuery(strDataBaseType, strConnectionString, strSQL) + // End If + // drTemp.Close() + // cmmTemp.Dispose() + // End If + // ----------------------------------------------------------- + // 固定檢查FactoryBasis資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryFactoryNo.IndexOf(strERP_FactoryNo) == -1) + { + if (AddFactoryNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_FactoryNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry1 = true; + break; + } + else + { + aryFactoryNo.Add(strERP_FactoryNo); + } + } + // 20170313 edit lijyun↑ + + // 檢查是否有此庫房設定 + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES庫房設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_INVNo)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_INVName)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",[%InventoryName%](warehouse_name):" + strERP_INVName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_FactoryNo)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",ERP[%FactoryNo%](factory_no):" + strERP_FactoryNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblINVInventoryBasis " + "(InventoryNo,InventoryName,InventoryType,InventoryClass,FactoryNo," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_INVNo + "','" + strERP_INVName + "','" + strERP_WarehouseType + "',0,'" + strERP_FactoryNo + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + else + { + // aryMES_Message.Add("庫房編號(inaa001):" & strERP_INVNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES庫房設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = " + intIssueState + " ,INVENTORYNAME = '" + strERP_INVName + "'" + " ,FACTORYNO = '" + strERP_FactoryNo + "'" + " ,ERPNo = '" + str_ERPNo + "'"; + // 2017/05/22 KunYuan:倉庫類型修改時暫不處理 + // If strERP_WarehouseType <> "" Then + // strSQL += " ,INVENTORYTYPE = " & strERP_WarehouseType + // End If + strSQL += " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES庫房相關設定 + // ----------------------------------------------------------- + if (InventoryIntegration_DelInventory(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVInventoryBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%InventoryNo%] : " & strERP_INVNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES庫房相關設定 + // ----------------------------------------------------------- + else if (InventoryIntegration_DelInventory(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESInventoryBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESInventoryBasis_E10ICDRet; + + } + + private int WriteToMESLocatorBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_storage_spaces_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESLocatorBasis_E10ICDRet = default(int); + WriteToMESLocatorBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_INVNo, strERP_Locator, strERP_FactoryNo, strERP_status, str_ERPNo; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.storage_spaces_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_INVNo = objResponse.storage_spaces_get[intRow].warehouse_no.ToString().Trim().ToUpper(); + strERP_Locator = objResponse.storage_spaces_get[intRow].storage_spaces_no.ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_Locator.Trim())) + strERP_Locator = "N/A"; + strERP_status = objResponse.storage_spaces_get[intRow].tran_status.ToString().Trim().ToUpper(); + str_ERPNo = objResponse.storage_spaces_get[intRow].storage_spaces_no.ToString().Trim(); + + strSQL = "Select InventoryNo,IssueState From tblINVInventoryBasis " + " Where InventoryNo='" + strERP_INVNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + if (!drTemp.Read()) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Not Exist%]!", strLanguageMode, strResourceDir)); + drTemp.Close(); + //cmmTemp.Dispose(); + exitTry1 = true; + break; + } + + + // 檢查是否有此儲位設定 + strSQL = "Select InventoryNo,IssueState From tblINVLocatorBasis " + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES儲位設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_INVNo)) + { + aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" + strERP_Locator + ",[%InventoryNo%](warehouse_no):" + strERP_INVNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_Locator)) + { + aryMES_Message.Add(TranslateMsg("[%InventoryNo%](warehouse_no):" + strERP_INVNo + ",[%LocatorNo%](storage_spaces_no):" + strERP_Locator + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblINVLocatorBasis " + "(LocatorNo,InventoryNo," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_Locator + "','" + strERP_INVNo + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + } + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // aryMES_Message.Add("庫房編號(inab001):" & strERP_INVNo & ",儲位編號(inab002):" & strERP_Locator & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblINVLocatorBasis Set " + " IssueState = " + intIssueState + " ,ERPNo ='" + str_ERPNo + "'" + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (LocatorIntegration_DelLocator(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo, strERP_Locator) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblINVLocatorBasis Set " + " IssueState = -1" + " Where InventoryNo='" + strERP_INVNo + "'" + " And LocatorNo='" + strERP_Locator + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" & strERP_Locator & "[%IS NOT EXIST%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + else if (LocatorIntegration_DelLocator(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_INVNo, strERP_Locator) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%LocatorNo%](storage_spaces_no):" + strERP_Locator + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESLocatorBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESLocatorBasis_E10ICDRet; + + } + + private int WriteOPBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_op_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteOPBasis_E10ICDRet = default(int); + WriteOPBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var aryOPType = new ArrayList(); // 記錄是否已新增過作業站類別 + + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_OPNo, strERP_OPName, strERP_CreateDate, strERP_Description, strERP_ERPNo, str_OPType, strERP_OSOption; + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + do + { + try + { + + // 2019/07/02 Shih Kai, Mantis:0059229, 因作業站區段固定寫入N/A, + // 在新增作業站資料時,檢查是否有N/A的區段,若沒有則同時新增一筆N/A的區段資料 + if (AddOPProductionSegment(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, "N/A", strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + break; + } + + bool exitTry = false; + for (int intRow = 0, loopTo = objResponse.op_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_OPNo = objResponse.op_get[intRow].op_no.Trim().ToUpper(); + strERP_OPName = objResponse.op_get[intRow].op_name.Trim().ToUpper(); + strERP_OPName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(strERP_OPName), strERP_OPNo, strERP_OPName)); + strERP_Description = objResponse.description; + strERP_ERPNo = objResponse.op_get[intRow].op_no; + strERP_Status = objResponse.op_get[intRow].tran_status.Trim().ToUpper(); + strERP_OSOption = Conversions.ToString(Interaction.IIf(objResponse.op_get[intRow].outsourcing_type == "Y", "1", "0")); // ERP回傳是否委外為Y/N,MES DB為1/0,Add By KevinChang 20170426 + str_OPType = "OP"; + + // ----------------------------------------------------------- + // 固定檢查OPGroup資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryOPType.IndexOf(str_OPType) == -1) + { + if (AddOPType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, str_OPType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry = true; + break; + } + else + { + aryOPType.Add(str_OPType); + } + } + + // 檢查是否有此作業站設定 + strSQL = "Select OPNo,IssueState From tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + + // ----------------------------------------------------------- + // 新增MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPBasis " + "(OPNo,OPName,OPShortName,OPType,OPClass,PSNo,StdunitRunTime,CountOPUnitQTY,STDQueueTime," + " Description,Creator,IssueState,ERPNo,CreateDate,PrintOutOnRunCard,OSOption)"; + // 91094: [605][CP+FT] E10ICD整合問題_作業站主檔拋轉時,寫入生產區段資料比照TipTop/WorkFlow方式取得區段編號資料 + strSQL += " Values('" + strERP_OPNo + "','" + strERP_OPName + "','" + strERP_OPName + "','" + str_OPType + "',0, '" + objSetting["defPSNo"] + "',1,1,1, 'AutoRun建立' ,'" + strERPCreator + "', '" + intIssueState + "','" + strERP_ERPNo + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),1," + strERP_OSOption + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES作業站設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblOPBasis Set " + " IssueState = " + intIssueState + ", OPName = '" + strERP_OPName + "' , OSOption = " + strERP_OSOption + ", ERPNo = '" + strERP_ERPNo + "' Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + // strSQL = "Update tblWIPEquipmentProductivity Set " & + // " NormalOperation = '" & strERP_NormalOperation & "', WarrantyNo = '" & strERP_WarrantyNo & "' ,Description = 'AutoRun建立',Status = '" & strERP_Status & "',StartTime = " & + // "To_Date('" & strERP_FromTime & "','YYYY/MM/DD HH24:MI:SS') ,EndTime = " & + // "To_Date('" & strERP_ToTime & "','YYYY/MM/DD HH24:MI:SS')" + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 刪除MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + + else + { + // ----------------------------------------------------------- + // 作廢MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Update tblOPBasis Set " + " IssueState=-1" + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + } + } + else + { + // aryMES_Message.Add(TranslateMsg("[%OPno%](op_no): " & strERP_OPNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 刪除MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPBasis " + " Where OPNo='" + strERP_OPNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%OPno%](op_no): " + strERP_OPNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + + if (exitTry) + { + break; + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteOPBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteOPBasis_E10ICDRet; + + } + + private int WriteOPGroupBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_workstation_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteOPGroupBasis_E10ICDRet = default(int); + WriteOPGroupBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_Status, strERP_WorkStationNo, strERP_WorkStationName, strERP_CreateDate, strERP_Description, strERP_ERPNo; + + // 預設值 + int intIssueState = 0; + + // reset + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + + try + { + for (int intRow = 0, loopTo = objResponse.workstation_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_WorkStationNo = objResponse.workstation_get[intRow].workstation_no.Trim().ToUpper(); + strERP_WorkStationName = objResponse.workstation_get[intRow].workstation_name.Trim().ToUpper(); + if (strERP_WorkStationName == null || string.IsNullOrEmpty(strERP_WorkStationName)) + { + strERP_WorkStationName = strERP_WorkStationNo; + } + strERP_Description = objResponse.description; + strERP_ERPNo = objResponse.workstation_get[intRow].workstation_no; + strERP_Status = objResponse.workstation_get[intRow].tran_status.Trim().ToUpper(); + + // 檢查是否有此作業站設定 + strSQL = "Select OPGroupNo From tblOPGroupBasis " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + + // ----------------------------------------------------------- + // 新增MES作業站設定 + // ----------------------------------------------------------- + strSQL = "Insert Into tblOPGroupBasis " + "(OPGroupNo,OPGroupName," + " Description,Creator,ERPNo,CreateDate)"; + strSQL += " Values('" + strERP_WorkStationNo + "','" + strERP_WorkStationName + "', 'AutoRun建立' ,'" + strERPCreator + "','" + strERP_ERPNo + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + else + { + // ----------------------------------------------------------- + // 修改MES作業站設定() + // ----------------------------------------------------------- + + // MES已存在之資料IssueState如果是-1,ERP資料再次拋轉時,IssueState則更新為"0". + strSQL = "Update tblOPGroupBasis Set " + " OPGroupName = '" + strERP_WorkStationName + "'" + ",ERPNo = '" + strERP_ERPNo + "'" + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + + // If drTemp.Read Then + + // ----------------------------------------------------------- + // 刪除MES作業站群組設定 + // ----------------------------------------------------------- + strSQL = "Delete tblOPGroupBasis " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + + // 2017-06-02, Joe, 要一併刪除Detail資訊 + strSQL = "Delete tblOPGroupDetail " + " Where OPGroupNo='" + strERP_WorkStationNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + // Else + // aryMES_Message.Add(TranslateMsg("[%opgroupno%](workstation_no): " & strERP_WorkStationNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // End If + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%opgroupno%](workstation_no): " + strERP_WorkStationNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteOPGroupBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + // If Not drTemp Is Nothing Then drTemp.Close() + CloseConnection(cnnMES); + } + + return WriteOPGroupBasis_E10ICDRet; + + } + + private int WriteToMESDepartmentBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_department_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteToMESDepartmentBasis_E10ICDRet = default(int); + WriteToMESDepartmentBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + var datNow = DateTime.Now; // Now + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_DepartmentNo, strERP_DepartmentName, strERP_DepartmentSName, str_ERPNo, strERP_status; + + // 預設值 + int intIssueState = 0; + + // reset + datNow = DateTime.Now; // Now + strIfWhereCond_PK = ""; + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + do + { + try + { + bool exitTry1 = false; + for (int intRow = 0, loopTo = objResponse.department_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + + strERP_DepartmentNo = objResponse.department_get[intRow].department_no.ToString().Trim().ToUpper(); + strERP_status = objResponse.department_get[intRow].tran_status.ToString().Trim().ToUpper(); + strERP_DepartmentName = objResponse.department_get[intRow].department_name.ToString().Trim().ToUpper(); + if (string.IsNullOrEmpty(strERP_DepartmentName)) + strERP_DepartmentName = strERP_DepartmentNo; + // 20170324 edit lijyun↓ + // strERP_DepartmentSName = objResponse.department_get(intRow).department_shortname.ToString.Trim.ToUpper + // If IsNothing(objResponse.department_get(intRow).department_shortname) Then + // strERP_DepartmentSName = "" + // End If + if (string.IsNullOrWhiteSpace(objResponse.department_get[intRow].department_shortname)) + { + if (string.IsNullOrWhiteSpace(strERP_DepartmentName)) + { + strERP_DepartmentSName = "N/A"; + } + else + { + strERP_DepartmentSName = strERP_DepartmentName; + } + } + else + { + strERP_DepartmentSName = objResponse.department_get[intRow].department_shortname.ToString().Trim(); + } + // 20170324 edit lijyun↑ + + str_ERPNo = objResponse.department_get[intRow].department_no.ToString().Trim(); + + // 檢查是否有此作業站設定 + strSQL = "Select DepartmentNo,IssueState From tblUSRDepartmentBasis " + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 新增MES部門設定 + // ----------------------------------------------------------- + if (string.IsNullOrEmpty(strERP_DepartmentNo)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_DepartmentName)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",[%DepartmentName%](department_name):" + strERP_DepartmentName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else if (string.IsNullOrEmpty(strERP_DepartmentSName)) + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",[%DepartmentSName%](department_shortname):" + strERP_DepartmentSName + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + } + else + { + strSQL = "Insert Into tblUSRDepartmentBasis " + "(DepartmentNo,DepartmentName,DepartmentSName," + "IssueState,ERPNO,Creator,CreateDate)"; + strSQL += " Values('" + strERP_DepartmentNo + "','" + strERP_DepartmentName + "','" + strERP_DepartmentSName + "'," + intIssueState + ",'" + str_ERPNo + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(datNow, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'))"; + + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + else + { + // aryMES_Message.Add("部門編號(ooef001):" & strERP_DepartmentNo & ", 已存在MES, 不允許新增!!") + + // ERPws標準功能不論IssueState為何皆允許修改. + + // ----------------------------------------------------------- + // 修改MES部門設定 + // ----------------------------------------------------------- + // 修改部門,因目前中介表定義欄位沒有需修改的,僅針對交易記錄判斷此產品在MES簽核狀態檢查是否需作變更。 + + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState = " + intIssueState + " ,DEPARTMENTNAME = '" + strERP_DepartmentName + "'" + " ,DEPARTMENTSNAME = '" + strERP_DepartmentSName + "'" + " ,ERPNo = '" + str_ERPNo + "'" + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES部門相關設定 + // ----------------------------------------------------------- + if (DepartmentIntegration_DelDepartment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES部門設定 + // ----------------------------------------------------------- + strSQL = "Update tblUSRDepartmentBasis Set " + " IssueState=-1" + " Where DepartmentNo='" + strERP_DepartmentNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%DepartmentNo%] : " & strERP_DepartmentNo & " [%IS NOT EXIST%]!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + // ----------------------------------------------------------- + // 先刪除MES部門相關設定 + // ----------------------------------------------------------- + else if (DepartmentIntegration_DelDepartment(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_DepartmentNo) < 0) + { + // GoTo lblExitTry_2_NextRow + exitTry1 = exitTry = true; + break; + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%DepartmentNo%](department_no):" + strERP_DepartmentNo + ",ERP [%Status%] : " + strERP_status + " [%INVALID%],[%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + if (exitTry1) + { + break; + + + + } + } + catch (Exception EX_drIF) + { + strMES_Result = "9"; + aryMES_Message.Add("EX_drIF.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteToMESDepartmentBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteToMESDepartmentBasis_E10ICDRet; + + } + + private int WriteUserBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_user_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteUserBasis_E10ICDRet = default(int); + WriteUserBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + DbDataReader drTemp; + IDbConnection cnnMES = null; + Collection colSQL = new Collection(), colSQL_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strERPCreator = "ERP"; + + // 每筆中介交易記錄 + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_EmployeeNo, strERP_EmployeeName, strERP_DepartNo, strERP_Email, strERP_Remark, strERP_Status, strPassword, strErpNo; + // 預設值 + int intIssueState = 0; + string strUserLevel = "2"; // 使用者等級預設『End User』 + + // reset + strMES_Result = "9"; // 預設值 9 (MES處理結果, 成功回寫1, 失敗回寫9). + strMES_MESSAGE = ""; // 錯誤訊息 + aryMES_Message.Clear(); + + colSQL.Clear(); + colSQL_Rows.Clear(); + + try + { + for (int intRow = 0, loopTo = objResponse.user_get.Count - 1; intRow <= loopTo; intRow++) + { + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_EmployeeNo = objResponse.user_get[intRow].employee_no.Trim().ToUpper(); + strERP_EmployeeName = objResponse.user_get[intRow].employee_name.Trim(); + strERP_Status = objResponse.user_get[intRow].tran_status.Trim(); + strErpNo = objResponse.user_get[intRow].employee_no.Trim(); + + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].department_no)) + { + strERP_DepartNo = objResponse.user_get[intRow].department_no.Trim().ToUpper(); + } + else + { + strERP_DepartNo = ""; + } + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].email)) + { + strERP_Email = objResponse.user_get[intRow].email.Trim(); + } + else + { + strERP_Email = ""; + } + if (!string.IsNullOrWhiteSpace(objResponse.user_get[intRow].remark)) + { + strERP_Remark = objResponse.user_get[intRow].remark.Trim(); + } + else + { + strERP_Remark = ""; + } + + // 密碼:預設同使用者編號 + strPassword = Strings.StrReverse(Convert.ToBase64String(Encoding.ASCII.GetBytes(Strings.StrReverse(modWIN.PasswordEncoding(ref strERP_EmployeeNo))))); + + // 檢查是否有此使用者 + strSQL = "Select UserNo, IssueState From tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + switch (strERP_Status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (!drTemp.Read()) + { + intIssueState = 0; + + strSQL = "INSERT INTO TBLUSRUSERBASIS (USERNO, USERNAME, USERLEVEL, PASSWORD, CREATOR," + "CREATEDATE, DESCRIPTION, ISSUESTATE, USERTYPE, DEPARTMENTNO," + "EMAILADDRESS, CHANGEDATE, RESETPASSWORD, ERPNO) "; + strSQL += " Values ('" + strERP_EmployeeNo + "','" + strERP_EmployeeName + "','" + strUserLevel + "','" + strPassword + "','" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'" + strERP_Remark + "'," + intIssueState + ",0, '" + strERP_DepartNo + "'," + "'" + strERP_Email + "', To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),0, '" + strErpNo + "')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + else + { + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + + strSQL = "UPDATE TBLUSRUSERBASIS SET ISSUESTATE = " + intIssueState + " ,USERNAME = '" + strERP_EmployeeName + "' , DESCRIPTION = '" + strERP_Remark + "'" + ", DEPARTMENTNO = '" + strERP_DepartNo + "', EMAILADDRESS = '" + strERP_Email + "', ERPNo='" + strErpNo + "' WHERE USERNO ='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + case "D": // D:刪除 + { + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // 刪除MES作業站設定 + strSQL = "Delete tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + else + { + // 作廢MES作業站設定 + strSQL = "Update tblOPBasis Set IssueState=-1 Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + } + else + { + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit + strSQL = "Delete tblUSRUserBasis Where UserNo='" + strERP_EmployeeNo + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + drTemp.Close(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%USERNO%](employee_no): " + strERP_EmployeeNo + ",ERP [%Status%] : " + strERP_Status + " [%INVALID%], [%IS NOT ALLOWED TO EXECUTE%]!", strLanguageMode, strResourceDir)); + break; + } + } + } + } + catch (Exception ex) + { + strMES_Result = "9"; + aryMES_Message.Add("Exception" + '\n' + ex.Message); + } + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL.Clear(); + colSQL_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + + // //return 0 : Success + WriteUserBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add(ex.Message); + + // 當該筆中介交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + CloseConnection(cnnMES); + } + + return WriteUserBasis_E10ICDRet; + } + + private int WriteProductOrMaterailBasis_E10ICD(iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_item_get objResponse, ref ArrayList aryReturnMessage) + { + int WriteProductOrMaterailBasis_E10ICDRet = default(int); + // 2017-06-05, Joe, ERP拋過來的料件資訊全部都寫入物料主檔中,如料件是屬產品的(A)則另外寫入產品主檔 + WriteProductOrMaterailBasis_E10ICDRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strSQLCol; + string strSQLVal; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_ProductNo, strERP_MaterialNo, strERP_ProductVersion, strERP_status, strERP_UnitNo, strERP_ItemName, strErpNo, strERP_SpecNo, strERP_LotManage = default(string); + DataRow drChk; + + // 預設值 + string strProductType = "PRODUCT"; // 給予預設值"PRODUCT",若不存在則自動新增產品類別. + int intIssueState = 0; + int intCurVersion = 0; + // Dim strSpecNo As String = "N/A" + string strMaterialType = "MATERIL"; // 給予預設值"MATERIL",若不存在則自動新增物料類別. + int intPutInPlace = 3; // 投料點:預設為3(工單). + int intCountWay = 1; // 計量方法:預設為1(實際用量). + int intCheckLotNo = 1; // 物料批號檢查:預設為0(不檢查批號). + var aryProductType = new ArrayList(); // 記錄產品類別是否新增 + var aryMaterialType = new ArrayList(); // 記錄物料類別是否新增 + var aryUnitNo = new ArrayList(); // 記錄單位主檔是否新增 + + do + { + try + { + bool exitTry2 = false; + for (int intRow = 0, loopTo = objResponse.item_get.Count - 1; intRow <= loopTo; intRow++) + { + + if (string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_sort)) + { + aryMES_Message.Add(TranslateMsg("item_sort" + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + break; + } + + // ----- MO Property ----- '2021/3/18 Steven 0089390: [605]iMES與E10整合_第一階段_ICD行業_物料設定/ 產品設定 + DataRow drData; + + var dtPRDProperty = new DataTable("PRDProperty"); + dtPRDProperty.Columns.Add("ProductNo", Type.GetType("System.String")); + dtPRDProperty.Columns.Add("PropertyNo", Type.GetType("System.String")); + dtPRDProperty.Columns.Add("DefaultValue", Type.GetType("System.String")); + dtPRDProperty.Columns.Add("ProductVersion", Type.GetType("System.String")); + + var dtMTLProperty = new DataTable("MTLProperty"); + dtMTLProperty.Columns.Add("PropertyNo", Type.GetType("System.String")); + dtMTLProperty.Columns.Add("DefaultValue", Type.GetType("System.String")); + + if (objResponse.item_get[intRow].item_sort.Equals("A")) // 處理產品類型 + { + // ----------------------------------------------------------- + // 固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddProductType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryProductType.IndexOf(strProductType) == -1) + { + if (AddProductType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryProductType.Add(strProductType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_ProductNo = objResponse.item_get[intRow].item_no.Trim().ToUpper(); + strErpNo = objResponse.item_get[intRow].item_no.Trim(); // 記錄原始之ERP編號 + strERP_ProductVersion = Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_ver), "1", objResponse.item_get[intRow].item_ver).ToString().Trim(); + + strERP_status = objResponse.item_get[intRow].tran_status.Trim().ToUpper(); + if (string.IsNullOrEmpty(objResponse.item_get[intRow].production_unit_no)) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = objResponse.item_get[intRow].production_unit_no.Trim(); + strERP_UnitNo = objResponse.item_get[intRow].production_unit_no.Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_name), "N/A", objResponse.item_get[intRow].item_name)); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_spec), "N/A", objResponse.item_get[intRow].item_spec)); + + // 檢查是否有此產品設定 + strSQL = "Select ProductNo,IssueState From tblPRDProductBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 產品編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_ProductNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES產品設定 + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblPRDProductBasis " + "(ProductNo,ProductVersion,ProductName,ProductType," + " UnitNo,UnitType,ItemSpec,Description," + " IssueState,CurVersion,Creator,CreateDate,ERPNo,QCCategory"; + strSQLVal = ") Values('" + strERP_ProductNo + "','" + strERP_ProductVersion + "','" + strERP_ItemName + "','" + strProductType + "','" + strERP_UnitNo + "','" + strERP_UnitNo + "','" + strERP_SpecNo + "','AutoRun建立'," + intIssueState + "," + intCurVersion + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQLCol += ",User_Defined01"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQLCol += ",User_Defined02"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQLCol += ",User_Defined03"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQLCol += ",User_Defined04"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQLCol += ",User_Defined05"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQLCol += ",User_Defined06"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQLCol += ",User_Defined07"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQLCol += ",User_Defined08"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQLCol += ",User_Defined09"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQLCol += ",User_Defined10"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQLCol += ",User_Defined11"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQLCol += ",User_Defined12"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQLCol += ",User_Defined13"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQLCol += ",User_Defined14"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQLCol += ",User_Defined15"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQLCol += ",User_Defined16"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQLCol += ",User_Defined17"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQLCol += ",User_Defined18"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQLCol += ",User_Defined19"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQLCol += ",User_Defined20"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQLCol += ",User_Defined21"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQLCol += ",User_Defined22"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQLCol += ",User_Defined23"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQLCol += ",User_Defined24"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQLCol += ",User_Defined25"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQLCol += ",User_Defined26"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQLCol += ",User_Defined27"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQLCol += ",User_Defined28"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQLCol += ",User_Defined29"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQLCol += ",User_Defined30"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQLCol += ",User_Defined31"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQLCol += ",User_Defined32"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQLCol += ",User_Defined33"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQLCol += ",User_Defined34"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined34) + ""; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQLCol += ",GraphNo"; + strSQLVal += ",'" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + // add MO Property'2021/03/18 0089390: [605]iMES與E10整合_第一階段_ICD行業_物料設定/ 產品設定 + if (!(objResponse.item_get[intRow].item_property_detail == null)) + { + foreach (SCI_prd_property_detail objProperty in objResponse.item_get[intRow].item_property_detail) + { + if (!string.IsNullOrEmpty(objProperty.property_no.ToString()) && !string.IsNullOrEmpty(objProperty.property_value.ToString())) + { + drData = dtPRDProperty.NewRow(); + drData["ProductNo"] = strERP_ProductNo.ToUpper(); + drData["ProductVersion"] = strERP_ProductVersion; + drData["PropertyNo"] = objProperty.property_no; + drData["DefaultValue"] = objProperty.property_value; + dtPRDProperty.Rows.Add(drData); + } + } + } + if (dtPRDProperty.Rows.Count > 0) + { + foreach (DataRow drP in dtPRDProperty.Rows) + { + strSQL = Conversions.ToString("insert into tblprdproductproperty(productno,productversion,propertyno,defaultvalue,issuestate) values('" + strERP_ProductNo.ToUpper() + "','" + strERP_ProductVersion + "','" + + drP["PropertyNo"] + "','" + drP["DefaultValue"] + "',2)"); + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + } + else + { + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + // 2017-06-08, Joe, 修改為異動CurVersion + strSQL = "Update tblPRDProductBasis Set " + " IssueState = " + intIssueState + " , ProductName = '" + strERP_ItemName + "', UnitNo = '" + strERP_UnitNo + "', UnitType = '" + strERP_UnitNo + "' " + " ,ProductType = '" + strProductType + "', ItemSpec = '" + strERP_SpecNo + "', ERPNo = '" + strErpNo + "' "; + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQL += ",User_Defined01='" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQL += ",User_Defined02='" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQL += ",User_Defined03='" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQL += ",User_Defined04='" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQL += ",User_Defined05='" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQL += ",User_Defined06='" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQL += ",User_Defined07='" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQL += ",User_Defined08='" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQL += ",User_Defined09='" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQL += ",User_Defined10='" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQL += ",User_Defined11=" + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQL += ",User_Defined12=" + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQL += ",User_Defined13=" + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQL += ",User_Defined14=" + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQL += ",User_Defined15=" + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQL += ",User_Defined16=" + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQL += ",User_Defined17=" + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQL += ",User_Defined18=" + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQL += ",User_Defined19=" + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQL += ",User_Defined20=" + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQL += ",User_Defined21=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQL += ",User_Defined22=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQL += ",User_Defined23=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQL += ",User_Defined24=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQL += ",User_Defined25=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQL += ",User_Defined26=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQL += ",User_Defined27=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQL += ",User_Defined28=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQL += ",User_Defined29=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQL += ",User_Defined30=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQL += ",User_Defined31='" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQL += ",User_Defined32='" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQL += ",User_Defined33=" + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQL += ",User_Defined34=" + double.Parse(objResponse.item_get[intRow].user_defined34) + " "; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQL += ",GraphNo='" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + + strSQL += " Where ProductNo='" + strERP_ProductNo + "' And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + // add MO Property'2021/03/18 0089390: [605]iMES與E10整合_第一階段_ICD行業_物料設定/ 產品設定 + if (!(objResponse.item_get[intRow].item_property_detail == null)) + { + foreach (SCI_prd_property_detail objProperty in objResponse.item_get[intRow].item_property_detail) + { + if (!string.IsNullOrEmpty(objProperty.property_no.ToString()) && !string.IsNullOrEmpty(objProperty.property_value.ToString())) + { + drData = dtPRDProperty.NewRow(); + drData["ProductNo"] = strERP_ProductNo.ToUpper(); + drData["ProductVersion"] = strERP_ProductVersion; + drData["PropertyNo"] = objProperty.property_no; + drData["DefaultValue"] = objProperty.property_value; + dtPRDProperty.Rows.Add(drData); + } + } + } + // 2021/3/18 Steven 0089390: [605]iMES與E10整合_第一階段_ICD行業_物料設定/ 產品設定 + if (dtPRDProperty.Rows.Count > 0) + { + foreach (DataRow drP in dtPRDProperty.Rows) + { + strSQL = Conversions.ToString("delete from tblprdproductproperty where productno ='" + + drP["ProductNo"] + "'and productversion = '" + drP["ProductVersion"] + "' and propertyno = '" + drP["PropertyNo"] + + "'"); + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); //2023/11/3,Ning,149604: 汇涌进项目:正式区,产品工单同步接口问题, 因產品屬性未必原有存在這筆資料, 故Rows不可限制為1 + strSQL = Conversions.ToString("insert into tblprdproductproperty(productno,productversion,propertyno,defaultvalue,issuestate) values('" + + drP["ProductNo"] + "','" + drP["ProductVersion"] + "','" + drP["PropertyNo"] + "','" + drP["DefaultValue"] + "',2)"); + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " IssueState=-1" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " & strERP_ProductNo & ", [%PRODUCTVERSION%](item_ver): " & strERP_ProductVersion & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " + strERP_ProductNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + // ElseIf objResponse.item_get(intRow).item_sort.Equals("M") Then '處理物料類型 + // ----------------------------------------------------------- + // 固定檢查MaterialType='MATERIL'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddMaterialType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + //****************产品物料系统参数判断开始****************** + //如果item_sort是A的情况且产品物料同时并存的系统参数设定为0时,type为A只写入产品的资料,其他只写入物料 + //prdOrMaterial值为1-只写入产品资料,无需写入物料;0-系统参数设定为1,同时写入(保持原有逻辑); + int prdOrMaterial = GetProductOrMaterailByParameter(objResponse.item_get[intRow].item_sort); + if (prdOrMaterial == 1) + { + WriteProductOrMaterailBasis_E10ICDRet = 0; + continue; + } + //****************产品物料系统参数判断结束****************** + + if (aryMaterialType.IndexOf(strMaterialType) == -1) + { + if (AddMaterialType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryMaterialType.Add(strMaterialType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_MaterialNo = objResponse.item_get[intRow].item_no.Trim().ToUpper(); + strERP_status = objResponse.item_get[intRow].tran_status.Trim().ToUpper(); + strErpNo = objResponse.item_get[intRow].item_no.Trim(); // 記錄原始之ERP編號 + if (string.IsNullOrEmpty(objResponse.item_get[intRow].unit_no)) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = objResponse.item_get[intRow].production_unit_no.Trim(); + strERP_UnitNo = objResponse.item_get[intRow].unit_no.Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrEmpty(objResponse.item_get[intRow].item_name), "N/A", objResponse.item_get[intRow].item_name)); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(objResponse.item_get[intRow].item_spec), "N/A", objResponse.item_get[intRow].item_spec)); + + // 2019/07/08 Eric Mantis:59382 Lot_manage 欄位 批號管理 目前 T100 會拋轉 1,2,3 ,但是 MES 目前只有0/1 拋轉時並未轉換 + // 0(False):不管控物料批號,系統將視物料批號為N/A。 + // 1(True):管控物料批號,所有之進料、退料、扣料動作都必須輸入物料批號。 + if (!string.IsNullOrWhiteSpace(objResponse.item_get[intRow].lot_manage)) + { + // 91087: [605][CP+FT] E10ICD整合問題_E10ICD拋轉批號查核(lot_manage)欄位值調整,MES須同步對應"是否檢查批號(CheckLotNo)"欄位 + if (objResponse.item_get[intRow].lot_manage.Equals("Y") | objResponse.item_get[intRow].lot_manage.Equals("N")) + { + if (objResponse.item_get[intRow].lot_manage.Equals("Y") == true) + { + strERP_LotManage = "1"; + } + else if (objResponse.item_get[intRow].lot_manage.Equals("N") == true) + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + // If Not String.IsNullOrWhiteSpace(objResponse.item_get(intRow).lot_manage) Then + // If objResponse.item_get(intRow).lot_manage.Equals("Y") Or objResponse.item_get(intRow).lot_manage.Equals("N") Then + // strERP_LotManage = IIf(objResponse.item_get(intRow).lot_manage.Equals("N"), "0", "1") + // Else + // strERP_LotManage = objResponse.item_get(intRow).lot_manage + // End If + // Else + // strERP_LotManage = "0" + // End If + + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + bool exitTry1 = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (drChk["MaterialNo"] is DBNull) + { + // 2019/10/25 Eric Mantis:60113 調整成物料自動核准 + intIssueState = 2; + // ----------------------------------------------------------- + // 物料編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_MaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES物料設定 + // MaterialName,MaterialSpec 必要欄位填"N/A". + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblMTLMaterialBasis " + "(MaterialNo, MaterialName, MaterialSpec, MaterialType," + " PutInPlace, CountWay, CheckLotNo, UnitType, UnitNo, Description," + " IssueState, Creator, CreateDate, ERPNo, QCCategory"; + strSQLVal = ") Values('" + strERP_MaterialNo + "','" + strERP_ItemName + "','" + strERP_SpecNo + "','" + strMaterialType + "'," + intPutInPlace + "," + intCountWay + "," + strERP_LotManage + ",'" + strERP_UnitNo + "','" + strERP_UnitNo + "','AutoRun建立'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQLCol += ",User_Defined01"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQLCol += ",User_Defined02"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQLCol += ",User_Defined03"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQLCol += ",User_Defined04"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQLCol += ",User_Defined05"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQLCol += ",User_Defined06"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQLCol += ",User_Defined07"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQLCol += ",User_Defined08"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQLCol += ",User_Defined09"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQLCol += ",User_Defined10"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQLCol += ",User_Defined11"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQLCol += ",User_Defined12"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQLCol += ",User_Defined13"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQLCol += ",User_Defined14"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQLCol += ",User_Defined15"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQLCol += ",User_Defined16"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQLCol += ",User_Defined17"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQLCol += ",User_Defined18"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQLCol += ",User_Defined19"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQLCol += ",User_Defined20"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQLCol += ",User_Defined21"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQLCol += ",User_Defined22"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQLCol += ",User_Defined23"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQLCol += ",User_Defined24"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQLCol += ",User_Defined25"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQLCol += ",User_Defined26"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQLCol += ",User_Defined27"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQLCol += ",User_Defined28"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQLCol += ",User_Defined29"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQLCol += ",User_Defined30"; + strSQLVal += ",To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQLCol += ",User_Defined31"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQLCol += ",User_Defined32"; + strSQLVal += ",'" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQLCol += ",User_Defined33"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQLCol += ",User_Defined34"; + strSQLVal += "," + double.Parse(objResponse.item_get[intRow].user_defined34) + ""; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQLCol += ",GraphNo"; + strSQLVal += ",'" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + // 2023/11/9,Ning,149996: [607.3] E10 AutoRun funMESCallERPPRDMTLBasis_E10ICD + if (!(objResponse.item_get[intRow].item_property_detail == null)) + { + foreach (SCI_prd_property_detail objProperty in objResponse.item_get[intRow].item_property_detail) + { + if (!string.IsNullOrEmpty(objProperty.property_no.ToString()) && !string.IsNullOrEmpty(objProperty.property_value.ToString())) + { + drData = dtMTLProperty.NewRow(); + drData["PropertyNo"] = objProperty.property_no; + drData["DefaultValue"] = objProperty.property_value; + dtMTLProperty.Rows.Add(drData); + } + } + } + if (dtMTLProperty.Rows.Count > 0) + { + foreach (DataRow drP in dtMTLProperty.Rows) + { + strSQL = "Insert into tblMTLMaterialProperty(Material,PropertyNo,DefaultValue,IssueState) values('" + strERP_MaterialNo + "','" + drP["PropertyNo"] + "','" + drP["DefaultValue"] + "',2)"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + } + + else + { + // ----------------------------------------------------------- + // 修改MES物料設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drChk["IssueState"]); + } + + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState = " + intIssueState + " , MaterialName = '" + strERP_ItemName + "', UnitType = '" + strERP_UnitNo + "', UnitNo = '" + strERP_UnitNo + "'" + ",CHECKLOTNO='" + strERP_LotManage + "',ERPNo='" + strErpNo + "' "; + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined01)) + { + strSQL += ",User_Defined01='" + objResponse.item_get[intRow].user_defined01.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined02)) + { + strSQL += ",User_Defined02='" + objResponse.item_get[intRow].user_defined02.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined03)) + { + strSQL += ",User_Defined03='" + objResponse.item_get[intRow].user_defined03.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined04)) + { + strSQL += ",User_Defined04='" + objResponse.item_get[intRow].user_defined04.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined05)) + { + strSQL += ",User_Defined05='" + objResponse.item_get[intRow].user_defined05.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined06)) + { + strSQL += ",User_Defined06='" + objResponse.item_get[intRow].user_defined06.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined07)) + { + strSQL += ",User_Defined07='" + objResponse.item_get[intRow].user_defined07.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined08)) + { + strSQL += ",User_Defined08='" + objResponse.item_get[intRow].user_defined08.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined09)) + { + strSQL += ",User_Defined09='" + objResponse.item_get[intRow].user_defined09.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined10)) + { + strSQL += ",User_Defined10='" + objResponse.item_get[intRow].user_defined10.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined11)) + { + strSQL += ",User_Defined11=" + double.Parse(objResponse.item_get[intRow].user_defined11) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined12)) + { + strSQL += ",User_Defined12=" + double.Parse(objResponse.item_get[intRow].user_defined12) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined13)) + { + strSQL += ",User_Defined13=" + double.Parse(objResponse.item_get[intRow].user_defined13) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined14)) + { + strSQL += ",User_Defined14=" + double.Parse(objResponse.item_get[intRow].user_defined14) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined15)) + { + strSQL += ",User_Defined15=" + double.Parse(objResponse.item_get[intRow].user_defined15) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined16)) + { + strSQL += ",User_Defined16=" + double.Parse(objResponse.item_get[intRow].user_defined16) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined17)) + { + strSQL += ",User_Defined17=" + double.Parse(objResponse.item_get[intRow].user_defined17) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined18)) + { + strSQL += ",User_Defined18=" + double.Parse(objResponse.item_get[intRow].user_defined18) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined19)) + { + strSQL += ",User_Defined19=" + double.Parse(objResponse.item_get[intRow].user_defined19) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined20)) + { + strSQL += ",User_Defined20=" + double.Parse(objResponse.item_get[intRow].user_defined20) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined21)) + { + strSQL += ",User_Defined21=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined21).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined22)) + { + strSQL += ",User_Defined22=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined22).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined23)) + { + strSQL += ",User_Defined23=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined23).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined24)) + { + strSQL += ",User_Defined24=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined24).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined25)) + { + strSQL += ",User_Defined25=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined25).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined26)) + { + strSQL += ",User_Defined26=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined26).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined27)) + { + strSQL += ",User_Defined27=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined27).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined28)) + { + strSQL += ",User_Defined28=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined28).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined29)) + { + strSQL += ",User_Defined29=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined29).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined30)) + { + strSQL += ",User_Defined30=To_Date('" + CDate_EAI(objResponse.item_get[intRow].user_defined30).ToString("yyyy/MM/dd HH:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined31)) + { + strSQL += ",User_Defined31='" + objResponse.item_get[intRow].user_defined31.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined32)) + { + strSQL += ",User_Defined32='" + objResponse.item_get[intRow].user_defined32.Trim() + "'"; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined33)) + { + strSQL += ",User_Defined33=" + double.Parse(objResponse.item_get[intRow].user_defined33) + ""; + } + + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].user_defined34)) + { + strSQL += ",User_Defined34=" + double.Parse(objResponse.item_get[intRow].user_defined34) + " "; + } + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(objResponse.item_get[intRow].graph_no)) + { + strSQL += ",GraphNo='" + objResponse.item_get[intRow].graph_no.Trim() + "'"; + } + + strSQL += " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + // 2023/11/9,Ning,149996: [607.3] E10 AutoRun funMESCallERPPRDMTLBasis_E10ICD + if (!(objResponse.item_get[intRow].item_property_detail == null)) + { + foreach (SCI_prd_property_detail objProperty in objResponse.item_get[intRow].item_property_detail) + { + if (!string.IsNullOrEmpty(objProperty.property_no.ToString()) && !string.IsNullOrEmpty(objProperty.property_value.ToString())) + { + drData = dtMTLProperty.NewRow(); + drData["PropertyNo"] = objProperty.property_no; + drData["DefaultValue"] = objProperty.property_value; + dtMTLProperty.Rows.Add(drData); + } + } + } + + if (dtMTLProperty.Rows.Count > 0) + { + foreach (DataRow drP in dtMTLProperty.Rows) + { + strSQL = "delete from tblMTLMaterialProperty where Material = '" + strERP_MaterialNo + "' and propertyno = '" + drP["PropertyNo"] + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(-1); + strSQL = "Insert into tblMTLMaterialProperty(Material,PropertyNo,DefaultValue,IssueState) values('" + strERP_MaterialNo + "','" + drP["PropertyNo"] + "','" + drP["DefaultValue"] + "',2)"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + } + + break; + } + + case "D": // D:刪除 + { + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = exitTry1 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + if (!(drChk["MaterialNo"] is DBNull)) + { + // ----------------------------------------------------------- + // 物料編號使用狀況檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkforDelMaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], 0, false))) + { + + // ----------------------------------------------------------- + // 刪除MES物料相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState=-1" + " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + // aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " & strERP_MaterialNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + + + } + + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " + strERP_MaterialNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry1) + { + break; + } + } + + if (exitTry2) + { + break; + // End If + } + } + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("WriteProductOrMaterailBasis_E10ICD.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteProductOrMaterailBasis_E10ICDRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add("WriteProductOrMaterailBasis_E10ICD,Finally:" + ex.Message); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteProductOrMaterailBasis_E10ICDRet; + + } + #endregion + + #region 新增产品物料系统参数判断共用function + //根据系统参数value判断写入产品或物料 + public int GetProductOrMaterailByParameter(string type) + { + int GetProductOrMaterailByParameterRet = default(int); + DbDataReader drTemp = null; + IDbConnection cnnTemp = null; + try + { + cnnTemp = CreateConnection(strConnectionString); + string ParameterNo = "ProductMaterialcoexist"; + string parametervalue = "0"; + string strSQL = "Select ParameterValue From tblSYSParameter Where Upper(ParameterNo) = '" + ParameterNo.ToUpper() + "'"; + // //Select data + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + parametervalue = Conversions.ToString(drTemp["ParameterValue"]); + } + drTemp.Close(); + if (type == "A") + { + if (parametervalue == "1") + { + //如果产品物料同时并存的系统参数设为1走原有逻辑不动 + GetProductOrMaterailByParameterRet = 0; + } + else + { + //如果item_sort是A的情况且产品物料同时并存的系统参数设定为0时,type为A只写入产品的资料,其他只写入物料 + GetProductOrMaterailByParameterRet = 1; + } + } + } + catch (Exception e1) + { + GetProductOrMaterailByParameterRet = -1; + throw; + } + finally + { + CloseConnection(cnnTemp); + + } + return GetProductOrMaterailByParameterRet; + } + #endregion + + #region -- 清除過期 MES交易記錄 --- + + private string funClearMESTransactionLog(Collection colParameters = null) + { + string funClearMESTransactionLogRet = default(string); + + var CollectionSQL = new Collection(); + string strSQL = string.Empty; + ushort intExpriredDays = 7; // 預設過期日7天 + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + var datEventTime = DateTime.Now; + + try + { + // 1.取出AutoRun設定參數. + // Parameter01: MES交易記錄過期天數 + string strTemp = ""; + // Parameter01:MES交易記錄過期天數 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + } + else + { + strTemp = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])).ToUpper(); + if (modAutoRunLibrary.funChkNumericIsValid(pSourceText: strTemp, AllowMinus: false, AllowZeroValue: false, AllowFloat: false, AllowContainsDot: false)) + { + intExpriredDays = Convert.ToUInt16(strTemp); + } + else + { + throw new Exception("Parameter01(KeepDays) is not valid Nnumeric data!"); + } + } + + strSQL = "DELETE FROM tblERPTransactionXmlLog" + " WHERE ID IN (SELECT ID FROM tblERPTransactionLog" + " WHERE CreateDate < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss'))"; + CollectionSQL.Add(strSQL); + + strSQL = "DELETE FROM tblERPTransactionLog" + " WHERE CreateDate < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss')"; + CollectionSQL.Add(strSQL); + + // //2020/06/16 Elvis 0073467: [605]AutoRun 清除過期ERP交易紀錄增加刪除tblERPTransactionXMLlog_Basis + strSQL = "DELETE FROM tblERPTransactionXMLlog_Basis" + " WHERE CreateDate < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss')"; + CollectionSQL.Add(strSQL); + + // 2022/05/12 17046 0133203: [6.0.7]出货时默认将各行业包标准BR对应的效能监控 + strSQL = "DELETE FROM TBLSYSERRORLOG" + " WHERE RECORDDATE < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss')"; + CollectionSQL.Add(strSQL); + + strSQL = "DELETE FROM TBLSYSEVENTLOG" + " WHERE RECORDDATE < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss')"; + CollectionSQL.Add(strSQL); + + strSQL = "DELETE FROM TBLSYSTRANSACTIONLOG" + " WHERE STARTTIME < to_date(" + " '" + datEventTime.AddDays(0 - intExpriredDays).ToString("yyyy/MM/dd HH:mm:ss") + "'" + " , 'yyyy/mm/dd hh24:mi:ss')"; + CollectionSQL.Add(strSQL); + + // 更新資料庫 + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + + catch (Exception ex) + { + // 錯誤訊息: 截取錯誤訊息+換行符號 + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funClearMESTransactionLogRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funClearMESTransactionLogRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funClearMESTransactionLogRet; + + } + + #endregion + + #region ---寫入log table共用Function--- + // ======================================================================================================================== + // 程式名稱:ComposeERPTransactionXMLLog + // 傳入參數:對應table之column變數 + // 傳回參數:組合後之SQL + // 用 途:組合ERP交易記錄log之SQL + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private string ComposeERPTransactionXMLLog(string Id, string BatchId, string ServiceName, string Erp2MesXML = defString, string ERPTransactionDate = defString, int Status = defInteger, string ProcessResult = defString, ArrayList arySQL = null, ArrayList aryParameter = null, int Mode = 0) + { + string ComposeERPTransactionXMLLogRet = default(string); + string strSQLAddField, strSQLAddValue; + IDataParameter param; + var CollectionParameter = new Collection(); + + strSQLAddField = "Insert into tblERPTransactionXMLLog_Basis (ID, BatchID, ServiceName "; + strSQLAddValue = " Values ('" + Id + "', '" + BatchId + "', '" + ServiceName + "'"; + + if ((ERPTransactionDate ?? "") != defString && !string.IsNullOrEmpty(ERPTransactionDate)) + { + + var strErpDate = default(string); + if (Mode == 0) + { + if (ERPTransactionDate.Length == 8) // ERP傳回的拋轉最後日期格式為『YYYYMMDD』,需轉換標準日期格式 + { + strErpDate = Strings.Left(ERPTransactionDate, 4) + "/" + Strings.Mid(ERPTransactionDate, 5, 2) + "/" + Strings.Mid(ERPTransactionDate, 7, 2); + } + else if (ERPTransactionDate.Length >= 14) // ERP傳回的拋轉最後日期格式為『YYYYMMDDHHMMSS』,需轉換標準日期格式 + { + strErpDate = Strings.Left(ERPTransactionDate, 4) + "/" + Strings.Mid(ERPTransactionDate, 5, 2) + "/" + Strings.Mid(ERPTransactionDate, 7, 2) + " " + Strings.Mid(ERPTransactionDate, 9, 2) + ":" + Strings.Mid(ERPTransactionDate, 11, 2) + ":" + Strings.Mid(ERPTransactionDate, 13, 2); + } + } + else + { + strErpDate = ERPTransactionDate; + } + + strSQLAddField = strSQLAddField + ", ERPTransactionDate"; + strSQLAddValue = strSQLAddValue + ", To_Date('" + strErpDate + "','YYYY/MM/DD HH24:MI:SS')"; + } + if (Status != defInteger) + { + strSQLAddField = strSQLAddField + ", Status "; + strSQLAddValue = strSQLAddValue + "," + Status; + } + if ((ProcessResult ?? "") != defString) + { + strSQLAddField = strSQLAddField + ", ProcessResult"; + strSQLAddValue = strSQLAddValue + ",'" + ProcessResult + "'"; + } + + // 創建日期統一為目前時間 + strSQLAddField = strSQLAddField + ",CreateDate"; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + if (!(Erp2MesXML == null) & (Erp2MesXML ?? "") != defString) + { + strSQLAddField = strSQLAddField + ", ERP2MESXML"; + if (strDataBaseType == "oracle") + { + strSQLAddValue += ", :P "; + } + else if (strDataBaseType == "mssql") + { + strSQLAddValue += ", @P "; + } + + if (strDataBaseType == "oracle") + { + param = new OracleParameter(":P", OracleDbType.Clob, Erp2MesXML.Length, ((int)ParameterDirection.Input).ToString()); + param.Value = Erp2MesXML; + CollectionParameter.Add(param); + param = null; + } + + else if (strDataBaseType == "mssql") + { + + param = new SqlParameter("@P", SqlDbType.NText, -1, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, Erp2MesXML); + CollectionParameter.Add(param); + param = null; + } + + } + + // //Return + arySQL.Add(strSQLAddField + ")" + strSQLAddValue + ")"); + aryParameter.Add(CollectionParameter); + ComposeERPTransactionXMLLogRet = ""; + return ComposeERPTransactionXMLLogRet; + } + + // ======================================================================================================================== + // 程式名稱:TreatWriteLogTable + // 傳入參數:(1) colResponseXML:所有ResponseXML之集合 + // (2) strType:服務名稱 + // 傳回參數:無 + // 用 途:處理寫入log table + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private void TreatWriteLogTable(Collection colResponseXML, string strType) + { + Collection colLogSQL = new Collection(), colLogSQL_Rows = new Collection(); + string lastID = default(string), KeepLog; // 最終請求完成之id + ArrayList idList = new ArrayList(), arySQL = new ArrayList(), arySQLParameter = new ArrayList(); + var CreateDate = new DateTime(); + + + iMESCIO.SCI.ERP.ERPResponseBase objResponse = null; + foreach (string strOutXML in colResponseXML) + { + switch (strType ?? "") + { + case "item.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_item_get(); + break; + } + case "supplier.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_supplier_get(); + break; + } + case "item.supplier.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_item_supplier_get(); + break; + } + case "customer.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_customer_get(); + break; + } + case "warehouse.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_warehouse_get(); + break; + } + case "storage.spaces.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_storage_spaces_get(); + break; + } + case "department.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_department_get(); + break; + } + case "machine.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_machine_get(); + break; + } + case "shift.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_shift_get(); + break; + } + case "op.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_op_get(); + break; + } + case "workstation.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_workstation_get(); + break; + } + case "resource.calendar.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_resource_calendar_get(); + break; + } + case "mold.fixture.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_mold_fixture_get(); + break; + } + case "user.get": + { + objResponse = new iMESCIO.SCI.ERP.Response.SCI_Response_user_get(); + break; + } + } + + XmlDoc.LoadXml(strOutXML); + objResponse.ParseXmlToObject(strOutXML); + + var nodeID = XmlDoc.SelectSingleNode("/response/reqid"); + + // 20221007,13871,註解此,0119552: [6.0.5]KeepLog 日誌刪除相關式程式碼註解 + // KeepLog = AppSettings("keepLog") + + // If (KeepLog <> "") AndAlso (IsNumeric(KeepLog)) Then + // '----- 清除小於保留天數的 TransactionBasis Log ----- + // CreateDate = DateAdd(DateInterval.Day, -1 * KeepLog, DateTime.Now) + // colLogSQL.Add("delete from TBLERPTRANSACTIONXMLLOG_BASIS where createdate < To_Date('" & Format(CreateDate, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')") + // colLogSQL_Rows.Add(-1) + // End If + + // 判斷當有LOG資料時,先刪除再新增 + if (HaveLogData(nodeID.InnerText)) + { + colLogSQL.Add("DELETE FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE ID = '" + nodeID.InnerText + "'"); + colLogSQL_Rows.Add(-1); + } + + string pData_Time = string.Empty; + Type t = objResponse.GetType(); + System.Reflection.PropertyInfo pi = t.GetProperty("data_time"); + if (pi != null) + { + pData_Time = pi.GetValue(objResponse).ToString(); + } + + int pStatus = -1; + + if (objResponse.srvcode != null && objResponse.srvcode.Equals("000") && objResponse != null && objResponse.code.Equals("0")) + pStatus = 1; + else + pStatus = -1; + + ComposeERPTransactionXMLLog(nodeID.InnerText, nodeID.InnerText, strType, strOutXML, pData_Time, pStatus, objResponse.description, arySQL, arySQLParameter); + // Dim strLogSQL As String = ComposeERPTransactionXMLLog(nodeID.InnerText, nodeID.InnerText, strType, strOutXML, pData_Time, pStatus, objResponse.description) + + // colLogSQL.Add(strLogSQL) + // colLogSQL_Rows.Add(1) + + lastID = nodeID.InnerText; + idList.Add(nodeID.InnerText); + } + + // 將所有請求之BatchID設成最終請求完成之id + foreach (string strID in idList) + { + if ((strID ?? "") != (lastID ?? "")) + { + colLogSQL.Add("UPDATE TBLERPTRANSACTIONXMLLOG_BASIS SET BATCHID = '" + lastID + "' WHERE ID = '" + strID + "'"); + colLogSQL_Rows.Add(1); + } + } + + // 正式寫入log table + if (colLogSQL.Count > 0 || arySQL.Count > 0) + { + // Call ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colLogSQL, colLogSQL_Rows) + + string argstrDatabaseType = Conversions.ToString(DataBaseType); + Collection argCollectionSQL_Rows = null; + ExecuteSQLNoneQuery_CLOB_Multi(argstrDatabaseType, strConnectionString, colLogSQL, arySQL, arySQLParameter, CollectionSQL_Rows: argCollectionSQL_Rows); + + } + } + // ======================================================================================================================== + // 程式名稱:UpdateLogTableErrorInfo + // 傳入參數:(1) strId:reqid + // (2) strErrorInfo:錯誤訊息 + // 傳回參數:無 + // 用 途:更新錯誤訊息 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/03/13 + // ======================================================================================================================== + private void UpdateLogTableErrorInfo(Collection colResponseXML, string strType, string strErrorInfo) + { + + Collection colLogSQL = new Collection(), colLogSQL_Rows = new Collection(); + string strSQL; + ArrayList arySQL = new ArrayList(), arySQLParameter = new ArrayList(); + XmlNode nodeID; + string id = string.Empty; + string pData_Time = string.Empty; + pData_Time = DateTime.Now.ToString("yyyyMMddHHmmss"); + + foreach (string strOutXML in colResponseXML) + { + arySQL.Clear(); + arySQLParameter.Clear(); + colLogSQL.Clear(); + colLogSQL_Rows.Clear(); + + // If colResponseXML.Count > 0 Then + // strOutXML = colResponseXML.Item(colResponseXML.Count).ToString + try + { + XmlDoc.LoadXml(strOutXML); + nodeID = XmlDoc.SelectSingleNode("/response/reqid"); + } + catch (Exception ex) + { + nodeID = null; + } + // End If + + if (nodeID == null) + { + id = Guid.NewGuid().ToString(); + } + else + { + id = nodeID.InnerText; + } + + if (HaveLogData(id) == false) // 沒有TBLERPTRANSACTIONXMLLOG_BASIS資料直接寫入錯誤訊息 + { + + // strOutXML = CInput(Microsoft.VisualBasic.Left(strOutXML, 1000)) + string argstrInput = Strings.Left(strErrorInfo, 1000); + strErrorInfo = CInput(argstrInput); + + string strLogSQL = ComposeERPTransactionXMLLog(id, id, strType, strOutXML, pData_Time, Conversions.ToInteger("-1"), strErrorInfo, arySQL, arySQLParameter); + } + // colLogSQL.Add(strLogSQL) + // colLogSQL_Rows.Add(1) + else + { + strSQL = "UPDATE TBLERPTRANSACTIONXMLLOG_BASIS SET STATUS = -1, PROCESSRESULT = '" + ChkSingleQuation(strErrorInfo) + "' WHERE ID = '" + id + "'"; + colLogSQL.Add(strSQL); + colLogSQL_Rows.Add(1); + } + + // 正式寫入log table + if (colLogSQL.Count > 0 || arySQL.Count > 0) + { + // Call ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colLogSQL, colLogSQL_Rows) + + string argstrDatabaseType = Conversions.ToString(DataBaseType); + Collection argCollectionSQL_Rows = null; + ExecuteSQLNoneQuery_CLOB_Multi(argstrDatabaseType, strConnectionString, colLogSQL, arySQL, arySQLParameter, CollectionSQL_Rows: argCollectionSQL_Rows); + + } + // Call ExecuteSQLNoneQuery(strDataBaseType, strConnectionString, strSQL) + } + } + + // ======================================================================================================================== + // 程式名稱:SplitInParts + // 傳入參數:(1) s:欲處理字串 + // (2) partLength:指定裁切長度 + // 傳回參數:無 + // 用 途:將字串切成指定長度之陣列 + // 撰寫人員:05876 崑源 + // 撰寫日期:2017/02/08 + // ======================================================================================================================== + private IEnumerable SplitInParts(string s, int partLength) + { + return Enumerable.Range(0, (int)Math.Round(Math.Ceiling(s.Length / (double)partLength))).Select(i => s.Substring(i * partLength, s.Length - i * partLength >= partLength ? partLength : Math.Abs(s.Length - i * partLength))); + } + + /// + /// 判斷是否存在相同交易id資料 + /// + /// req id + /// 是否存在相同交易id資料(True / False) + /// 2017/3/13 Add by KunYuan + public bool HaveLogData(string strID) + { + bool result = false; + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + try + { + cnnTemp = CreateConnection(strConnectionString); + string strSQL = "SELECT COUNT(1) AS CNT FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE ID ='" + strID + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + if (Conversions.ToBoolean(!Operators.ConditionalCompareObjectEqual(drTemp["CNT"], "0", false))) + result = true; + } + drTemp.Close(); + } + catch (Exception ex) + { + result = false; + } + finally + { + CloseConnection(cnnTemp); + } + return result; + } + + // ======================================================================================================================== + // 程式名稱:GetERPTransactionDate + // 傳入參數:ServiceName:服務名稱 + // 傳回參數:無 + // 用 途:取得log tableERP拋回的最後執行時間 + // 撰寫人員:06475 lijyun + // 撰寫日期:2017/03/16 + // ======================================================================================================================== + private string GetERPTransactionDate(string ServiceName) + { + string strSQL; + string strERPDate = defString; + DbDataReader drTemp = null; + IDbConnection cnnMES = null; + + try + { + cnnMES = CreateConnection(strConnectionString); + + strSQL = "SELECT MAX(ERPTRANSACTIONDATE) as ERPTRANSACTIONDATE FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE SERVICENAME = '" + ServiceName + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + + if (drTemp.Read()) + { + if (drTemp["ERPTRANSACTIONDATE"] is DBNull) + { + strERPDate = Strings.Format(DateTime.Now.AddDays(-1), "yyyyMMddHHmmssfff"); + } + else + { + strERPDate = Strings.Format(drTemp["ERPTRANSACTIONDATE"], "yyyyMMddHHmmssfff"); + } + } + drTemp.Close(); + } + catch (Exception) + { + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + + //cmmTemp.Dispose(); + return strERPDate; + } + + private string GetDate(string pValue, string pParameterName) + { + string GetDateRet = default(string); + string strDate = ""; + + try + { + if (Information.IsDate(pValue)) + { + strDate = Strings.Format(Conversions.ToDate(pValue), "yyyyMMddHHmmssfff"); + } + else + { + throw new Exception(pParameterName + " value is " + pValue + " DateTime Format is Error!(The format string like: yyyy-MM-dd HH:mm:ss.fff)"); + } + GetDateRet = strDate; + } + catch (Exception ex) + { + throw; + } + + return GetDateRet; + + } + // 2021/3/30 Steven E10ICD 紀錄LOG資料 + private void TreatWriteLogTable_E10ICD(Collection colResponseXML, string strType) + { + Collection colLogSQL = new Collection(), colLogSQL_Rows = new Collection(); + string lastID = default(string), KeepLog; // 最終請求完成之id + ArrayList idList = new ArrayList(), arySQL = new ArrayList(), arySQLParameter = new ArrayList(); + var CreateDate = new DateTime(); + + + iMESCIO.SCI.ERP.ERPResponseBase objResponse = null; + foreach (string strOutXML in colResponseXML) + { + switch (strType ?? "") + { + case "item.get.e10icd": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_item_get(); + break; + } + case "supplier.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_supplier_get(); + break; + } + case "item.supplier.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_item_supplier_get(); + break; + } + case "customer.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_customer_get(); + break; + } + case "warehouse.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_warehouse_get(); + break; + } + case "storage.spaces.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_storage_spaces_get(); + break; + } + case "department.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_department_get(); + break; + } + case "machine.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_machine_get(); + break; + } + case "shift.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_shift_get(); + break; + } + case "op.get.e10icd": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_op_get(); + break; + } + case "workstation.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_workstation_get(); + break; + } + case "resource.calendar.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_resource_calendar_get(); + break; + } + case "mold.fixture.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_mold_fixture_get(); + break; + } + case "user.get": + { + objResponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_user_get(); + break; + } + } + + XmlDoc.LoadXml(strOutXML); + objResponse.ParseXmlToObject(strOutXML); + + var nodeID = XmlDoc.SelectSingleNode("/response/reqid"); + + // 20221007,13871,註解此,0119552: [6.0.5]KeepLog 日誌刪除相關式程式碼註解 + // KeepLog = AppSettings("keepLog") + + // If (KeepLog <> "") AndAlso (IsNumeric(KeepLog)) Then + // '----- 清除小於保留天數的 TransactionBasis Log ----- + // CreateDate = DateAdd(DateInterval.Day, -1 * KeepLog, DateTime.Now) + // colLogSQL.Add("delete from TBLERPTRANSACTIONXMLLOG_BASIS where createdate < To_Date('" & Format(CreateDate, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')") + // colLogSQL_Rows.Add(-1) + // End If + + // 判斷當有LOG資料時,先刪除再新增 + if (HaveLogData(nodeID.InnerText)) + { + colLogSQL.Add("DELETE FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE ID = '" + nodeID.InnerText + "'"); + colLogSQL_Rows.Add(-1); + } + + string pData_Time = string.Empty; + Type t = objResponse.GetType(); + System.Reflection.PropertyInfo pi = t.GetProperty("data_time"); + if (pi != null) + { + pData_Time = pi.GetValue(objResponse).ToString(); + } + + int pStatus = -1; + + if (objResponse.srvcode != null && objResponse.srvcode.Equals("000") && objResponse != null && objResponse.code.Equals("0")) + pStatus = 1; + else + pStatus = -1; + + ComposeERPTransactionXMLLog(nodeID.InnerText, nodeID.InnerText, strType, strOutXML, pData_Time, pStatus, objResponse.description, arySQL, arySQLParameter); + // Dim strLogSQL As String = ComposeERPTransactionXMLLog(nodeID.InnerText, nodeID.InnerText, strType, strOutXML, pData_Time, pStatus, objResponse.description) + + // colLogSQL.Add(strLogSQL) + // colLogSQL_Rows.Add(1) + + lastID = nodeID.InnerText; + idList.Add(nodeID.InnerText); + } + + // 將所有請求之BatchID設成最終請求完成之id + foreach (string strID in idList) + { + if ((strID ?? "") != (lastID ?? "")) + { + colLogSQL.Add("UPDATE TBLERPTRANSACTIONXMLLOG_BASIS SET BATCHID = '" + lastID + "' WHERE ID = '" + strID + "'"); + colLogSQL_Rows.Add(1); + } + } + + // 正式寫入log table + if (colLogSQL.Count > 0 || arySQL.Count > 0) + { + // Call ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colLogSQL, colLogSQL_Rows) + + string argstrDatabaseType = Conversions.ToString(DataBaseType); + Collection argCollectionSQL_Rows = null; + ExecuteSQLNoneQuery_CLOB_Multi(argstrDatabaseType, strConnectionString, colLogSQL, arySQL, arySQLParameter, CollectionSQL_Rows: argCollectionSQL_Rows); + + } + } + #endregion + + #region 須使用COM_ERP之Function + + #region get ERP Setting data + /// + /// 向資料庫取得使用Workflow時的ERP整合設定資訊。 + /// + /// + /// + public object GetERPSetting_WF(Collection colParameter = null) + { + object GetERPSetting_WFRet = default(object); + // Gary Lu 20120614:ERP整合設定統一由此函數取得 + StringReader tmpStringReader; // 將字串轉換成可讀入DataSet的物件 + string strERPSettingTableName; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; // 呼叫WS的字串參數 + var XmlDoc = new XmlDocument(); + try + { + var dsERPSetting_WF = new DataSet(); + + // 組InXml + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + + // 2019/05/15 Edison WorkFlow修正為Workflow 修正取不到ERP SETTING的問題 + string argvalue_name = "erpname"; + string argname = "ERPName"; + string argtype = "String"; + string argvalue = "Workflow"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + // 呼叫Web服務執行 + // Using wsSYS As New wsSYS.wsSYS + // wsSYS.Url = LocalizeWebService(wsSYS.Url.ToString) + // wsSYS.EnableDecompression = True + // OutXml = wsSYS.LoadERPSetting(InXml) + // End Using + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.LoadERPSetting", InXml); + + // 解讀Web服務的執行結果 + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 讀取取出資料表的名稱 + strERPSettingTableName = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loaderpsetting").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsERPSetting_WF.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsERPSetting_WF.ReadXml(tmpStringReader, XmlReadMode.InferSchema); + tmpStringReader.Close(); + } + if (dsERPSetting_WF.Tables[strERPSettingTableName].Rows.Count > 0) + { + gERPUser = dsERPSetting_WF.Tables[strERPSettingTableName].Rows[0]["ERP_USER"].ToString(); + gERPPassword = dsERPSetting_WF.Tables[strERPSettingTableName].Rows[0]["ERP_PWD"].ToString(); + gERPWSURL = dsERPSetting_WF.Tables[strERPSettingTableName].Rows[0]["ERP_WSURL"].ToString(); + gERPOraganization = dsERPSetting_WF.Tables[strERPSettingTableName].Rows[0]["ERP_ORG"].ToString(); + gERPLanguage = dsERPSetting_WF.Tables[strERPSettingTableName].Rows[0]["ERP_LANG"].ToString(); + } + else + { + throw new Exception("funGetERPSetting_WF Fail!"); + } + } + else + { + throw new Exception("funGetERPSetting_WF Fail!"); + } + } + catch (Exception Ex) + { + // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 + GetERPSetting_WFRet = "fail;" + Ex.Message; + + } + + // 發送EMAIL + if (colParameter != null) + colParameter.Add(GetERPSetting_WFRet, "EmailBody"); + return GetERPSetting_WFRet; + + } + /// + /// 向資料庫取得使用Workflow時的ERP整合設定資訊。 + /// + /// + /// E10 2021/03/24 Elvis + public object GetERPSetting_E10ICD(Collection colParameter = null) + { + object GetERPSetting_E10ICDRet = default(object); + // Gary Lu 20120614:ERP整合設定統一由此函數取得 + StringReader tmpStringReader; // 將字串轉換成可讀入DataSet的物件 + string strERPSettingTableName; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; // 呼叫WS的字串參數 + var XmlDoc = new XmlDocument(); + try + { + var dsERPSetting_E10ICD = new DataSet(); + + // 組InXml + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + + // 2019/05/15 Edison WorkFlow修正為Workflow 修正取不到ERP SETTING的問題 + string argvalue_name = "erpname"; + string argname = "ERPName"; + string argtype = "String"; + string argvalue = "E10ICD"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + // 呼叫Web服務執行 + // Using wsSYS As New wsSYS.wsSYS + // wsSYS.Url = LocalizeWebService(wsSYS.Url.ToString) + // wsSYS.EnableDecompression = True + // OutXml = wsSYS.LoadERPSetting(InXml) + // End Using + OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.LoadERPSetting", InXml); + + // 解讀Web服務的執行結果 + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + + // 讀取取出資料表的名稱 + strERPSettingTableName = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loaderpsetting").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + dsERPSetting_E10ICD.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loaderpsetting").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + dsERPSetting_E10ICD.ReadXml(tmpStringReader, XmlReadMode.InferSchema); + tmpStringReader.Close(); + } + if (dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows.Count > 0) + { + gERPUser = dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows[0]["ERP_USER"].ToString(); + gERPPassword = dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows[0]["ERP_PWD"].ToString(); + gERPWSURL = dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows[0]["ERP_WSURL"].ToString(); + gERPOraganization = dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows[0]["ERP_ORG"].ToString(); + gERPLanguage = dsERPSetting_E10ICD.Tables[strERPSettingTableName].Rows[0]["ERP_LANG"].ToString(); + } + else + { + throw new Exception("funGetERPSetting_E10ICD Fail!"); + } + } + else + { + throw new Exception("funGetERPSetting_E10ICD Fail!"); + } + } + catch (Exception Ex) + { + // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 + GetERPSetting_E10ICDRet = "fail;" + Ex.Message; + + } + + // 發送EMAIL + if (colParameter != null) + colParameter.Add(GetERPSetting_E10ICDRet, "EmailBody"); + return GetERPSetting_E10ICDRet; + + } + #endregion + + #endregion + + #region --- WF ERP Request --- + + public string cbXMLAccess_WF(string User = null, string Password = null, string ApplicationName = null, string Source = null, string Oraganization = null, string Language = null) + { + string cbXMLAccess_WFRet = default(string); + + GetERPSetting_WF(); + + try + { + // Gary Lu 20120607:ERPSignIn改由來自資料庫的ERP Setting表 + + if (User == null) + User = gERPUser; + if (Password == null) + Password = gERPPassword; + if (ApplicationName == null) + ApplicationName = "MES"; + if (Source == null) + Source = modWIN.gComputerName; + if (Oraganization == null) + Oraganization = gERPOraganization; + if (Language == null) + Language = gERPLanguage; + } + + // MessageBox.Show("get app ERPSignIn " & vbCrLf & GetAppSettings("ERPSignIn")) + // Authentication User; Password; Connection Application; Source; Organization Name; Local Language + // Dim ary As Array = Split(GetAppSettings("ERPSignIn"), ";") + // If String.IsNullOrEmpty(ary(0)) = False Then User = ary(0) + // If String.IsNullOrEmpty(ary(1)) = False Then Password = ary(1) + // If String.IsNullOrEmpty(ary(2)) = False Then ApplicationName = ary(2) + // If String.IsNullOrEmpty(ary(3)) = False Then Source = ary(3) + // If String.IsNullOrEmpty(ary(4)) = False Then Oraganization = ary(4) + // If String.IsNullOrEmpty(ary(5)) = False Then Language = ary(5) + catch (Exception ex) + { + cbXMLAccess_WFRet = "cbXMLAccess_WF fail;" + ex.Message; + } + + // Dim heserver As Net.IPHostEntry = System.Net.Dns.Resolve(SystemInformation.ComputerName) + // Dim curAdd As Net.IPAddress + // For Each curAdd In heserver.AddressList + // Source = curAdd.ToString + // Next + + cbXMLAccess_WFRet = "" + Oraganization + "" + '\n'; + cbXMLAccess_WFRet += "" + User + "" + '\n'; + return cbXMLAccess_WFRet; + + } + + public string cbXMLParameter_WF(string ReferenceType, string ReferenceCase) + { + string cbXMLParameter_WFRet = default(string); + + cbXMLParameter_WFRet = "" + ReferenceType + "" + '\n'; + cbXMLParameter_WFRet += "" + ReferenceCase + "" + '\n'; + return cbXMLParameter_WFRet; + + } + + public string cbXMLField_WF(string name, string value) + { + string cbXMLField_WFRet = default(string); + + cbXMLField_WFRet = "<" + name + ">" + value + "" + '\n'; + return cbXMLField_WFRet; + + } + + public string cbXMLFormHead_WF(string strTableName, string strRecordList) + { + string cbXMLFormHead_WFRet = default(string); + + cbXMLFormHead_WFRet = "" + '\n'; + cbXMLFormHead_WFRet += "" + strTableName + "" + '\n'; + cbXMLFormHead_WFRet += strRecordList; + cbXMLFormHead_WFRet += "" + '\n'; + return cbXMLFormHead_WFRet; + + } + + public string cbXMLFormBody_WF(string strTableName, string strRecordList) + { + string cbXMLFormBody_WFRet = default(string); + + cbXMLFormBody_WFRet = "" + '\n'; + cbXMLFormBody_WFRet += "" + strTableName + "" + '\n'; + cbXMLFormBody_WFRet += strRecordList; + cbXMLFormBody_WFRet += "" + '\n'; + return cbXMLFormBody_WFRet; + + } + + public string cbXMLRecordList_WF(string strTempField) + { + string cbXMLRecordList_WFRet = default(string); + + cbXMLRecordList_WFRet = "" + '\n' + strTempField + "" + '\n'; + return cbXMLRecordList_WFRet; + + } + + public string cbXMLData_WF(string head, string body) + { + string cbXMLData_WFRet = default(string); + + cbXMLData_WFRet = "" + '\n'; + cbXMLData_WFRet += head; + cbXMLData_WFRet += body; + cbXMLData_WFRet += "" + '\n'; + return cbXMLData_WFRet; + + } + + public string cbXMLRequest_WF(string strAccess, string strParameter, string strData) + { + string cbXMLRequest_WFRet = default(string); + + cbXMLRequest_WFRet = "" + '\n'; + cbXMLRequest_WFRet += strAccess; + cbXMLRequest_WFRet += strParameter; + cbXMLRequest_WFRet += strData; + cbXMLRequest_WFRet += ""; + return cbXMLRequest_WFRet; + + } + + + #region --- E10ICD ERP Request --- + + public string cbXMLAccess_E10ICD(string User = null, string Password = null, string ApplicationName = null, string Source = null, string Oraganization = null, string Language = null) + { + string cbXMLAccess_E10ICDRet = default(string); + + GetERPSetting_E10ICD(); + + try + { + // Gary Lu 20120607:ERPSignIn改由來自資料庫的ERP Setting表 + + if (User == null) + User = gERPUser; + if (Password == null) + Password = gERPPassword; + if (ApplicationName == null) + ApplicationName = "MES"; + if (Source == null) + Source = modWIN.gComputerName; + if (Oraganization == null) + Oraganization = gERPOraganization; + if (Language == null) + Language = gERPLanguage; + } + + // MessageBox.Show("get app ERPSignIn " & vbCrLf & GetAppSettings("ERPSignIn")) + // Authentication User; Password; Connection Application; Source; Organization Name; Local Language + // Dim ary As Array = Split(GetAppSettings("ERPSignIn"), ";") + // If String.IsNullOrEmpty(ary(0)) = False Then User = ary(0) + // If String.IsNullOrEmpty(ary(1)) = False Then Password = ary(1) + // If String.IsNullOrEmpty(ary(2)) = False Then ApplicationName = ary(2) + // If String.IsNullOrEmpty(ary(3)) = False Then Source = ary(3) + // If String.IsNullOrEmpty(ary(4)) = False Then Oraganization = ary(4) + // If String.IsNullOrEmpty(ary(5)) = False Then Language = ary(5) + catch (Exception ex) + { + cbXMLAccess_E10ICDRet = "cbXMLAccess_E10ICD fail;" + ex.Message; + } + + // Dim heserver As Net.IPHostEntry = System.Net.Dns.Resolve(SystemInformation.ComputerName) + // Dim curAdd As Net.IPAddress + // For Each curAdd In heserver.AddressList + // Source = curAdd.ToString + // Next + + cbXMLAccess_E10ICDRet = "" + Oraganization + "" + '\n'; + cbXMLAccess_E10ICDRet += "" + User + "" + '\n'; + return cbXMLAccess_E10ICDRet; + + } + + public string cbXMLParameter_E10ICD(string ReferenceType, string ReferenceCase) + { + string cbXMLParameter_E10ICDRet = default(string); + + cbXMLParameter_E10ICDRet = "" + ReferenceType + "" + '\n'; + cbXMLParameter_E10ICDRet += "" + ReferenceCase + "" + '\n'; + return cbXMLParameter_E10ICDRet; + + } + + public string cbXMLField_E10ICD(string name, string value) + { + string cbXMLField_E10ICDRet = default(string); + + cbXMLField_E10ICDRet = "<" + name + ">" + value + "" + '\n'; + return cbXMLField_E10ICDRet; + + } + + public string cbXMLFormHead_E10ICD(string strTableName, string strRecordList) + { + string cbXMLFormHead_E10ICDRet = default(string); + + cbXMLFormHead_E10ICDRet = "" + '\n'; + cbXMLFormHead_E10ICDRet += "" + strTableName + "" + '\n'; + cbXMLFormHead_E10ICDRet += strRecordList; + cbXMLFormHead_E10ICDRet += "" + '\n'; + return cbXMLFormHead_E10ICDRet; + + } + + public string cbXMLFormBody_E10ICD(string strTableName, string strRecordList) + { + string cbXMLFormBody_E10ICDRet = default(string); + + cbXMLFormBody_E10ICDRet = "" + '\n'; + cbXMLFormBody_E10ICDRet += "" + strTableName + "" + '\n'; + cbXMLFormBody_E10ICDRet += strRecordList; + cbXMLFormBody_E10ICDRet += "" + '\n'; + return cbXMLFormBody_E10ICDRet; + + } + + public string cbXMLRecordList_E10ICD(string strTempField) + { + string cbXMLRecordList_E10ICDRet = default(string); + + cbXMLRecordList_E10ICDRet = "" + '\n' + strTempField + "" + '\n'; + return cbXMLRecordList_E10ICDRet; + + } + + public string cbXMLData_E10ICD(string head, string body) + { + string cbXMLData_E10ICDRet = default(string); + + cbXMLData_E10ICDRet = "" + '\n'; + cbXMLData_E10ICDRet += head; + cbXMLData_E10ICDRet += body; + cbXMLData_E10ICDRet += "" + '\n'; + return cbXMLData_E10ICDRet; + + } + + public string cbXMLRequest_E10ICD(string strAccess, string strParameter, string strData) + { + string cbXMLRequest_E10ICDRet = default(string); + + cbXMLRequest_E10ICDRet = "" + '\n'; + cbXMLRequest_E10ICDRet += strAccess; + cbXMLRequest_E10ICDRet += strParameter; + cbXMLRequest_E10ICDRet += strData; + cbXMLRequest_E10ICDRet += ""; + return cbXMLRequest_E10ICDRet; + + } + + #endregion + + + #endregion + + #region --- WF ERP Response --- + + /// + /// 檢查ERP處理後結果: ERP執行狀態 + /// + /// + /// + /// + public bool chkResponseGetException_WF(XmlDocument Xmldoc, ref string result, ref string code, ref string sysmsg, ref string mesmsg, ref string stack) + { + bool chkResponseGetException_WFRet = default(bool); + + chkResponseGetException_WFRet = false; + + do + { + try + { + + result = Xmldoc.DocumentElement["result"].InnerText; + if (result == "success") + { + chkResponseGetException_WFRet = true; + break; + } + + var de = Xmldoc.DocumentElement["exception"]; + if (de == null == true) + { + break; + } + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes[i].Name == "code") + { + code = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "sysmsg") + { + sysmsg = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "mesmsg") + { + mesmsg = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "stack") + { + stack = de.ChildNodes.Item(i).InnerText; + } + } + } + + catch (Exception ex) + { + throw; + } + } + while (false); + return chkResponseGetException_WFRet; + + } + + public bool chkResponseContent_WF(XmlDocument Xmldoc, ref string responseValue) + { + bool chkResponseContent_WFRet = default(bool); + + try + { + chkResponseContent_WFRet = false; + + var de = Xmldoc.DocumentElement["Data"]; + if (de == null == true) + return chkResponseContent_WFRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "RecordList") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "TD002") + { + responseValue = de.ChildNodes.Item(i).ChildNodes[j].InnerText; + } + } + } + } + chkResponseContent_WFRet = true; + } + catch (Exception ex) + { + chkResponseContent_WFRet = false; + } + + return chkResponseContent_WFRet; + } + + + #region --- E10ICD ERP Response --- + + /// + /// 檢查ERP處理後結果: ERP執行狀態 + /// + /// + /// + /// + public bool chkResponseGetException_E10ICD(XmlDocument Xmldoc, ref string result, ref string code, ref string sysmsg, ref string mesmsg, ref string stack) + { + bool chkResponseGetException_E10ICDRet = default(bool); + + chkResponseGetException_E10ICDRet = false; + + do + { + try + { + + result = Xmldoc.DocumentElement["result"].InnerText; + if (result == "success") + { + chkResponseGetException_E10ICDRet = true; + break; + } + + var de = Xmldoc.DocumentElement["exception"]; + if (de == null == true) + { + break; + } + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes[i].Name == "code") + { + code = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "sysmsg") + { + sysmsg = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "mesmsg") + { + mesmsg = de.ChildNodes.Item(i).InnerText; + } + if (de.ChildNodes[i].Name == "stack") + { + stack = de.ChildNodes.Item(i).InnerText; + } + } + } + + catch (Exception ex) + { + throw; + } + } + while (false); + return chkResponseGetException_E10ICDRet; + + } + + public bool chkResponseContent_E10ICD(XmlDocument Xmldoc, ref string responseValue) + { + bool chkResponseContent_E10ICDRet = default(bool); + + try + { + chkResponseContent_E10ICDRet = false; + + var de = Xmldoc.DocumentElement["Data"]; + if (de == null == true) + return chkResponseContent_E10ICDRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "RecordList") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "TD002") + { + responseValue = de.ChildNodes.Item(i).ChildNodes[j].InnerText; + } + } + } + } + chkResponseContent_E10ICDRet = true; + } + catch (Exception ex) + { + chkResponseContent_E10ICDRet = false; + } + + return chkResponseContent_E10ICDRet; + } + + #endregion + + + + #endregion + + + #region EAI標準日期格式轉換String to DateTime + + #endregion + + #region MES發料(倒扣料)批次拋轉ERP + + private object funStartSyncing(Collection colParameters = null) + { + var obj = new EAIMessageSynchronizer(); + string ReturnMessage = "fail"; + + try + { + obj.StartSyncing(colParameters); + ReturnMessage = "success"; + results = "success"; + } + catch (Exception ex) + { + if (ex.InnerException == null == false && !string.IsNullOrEmpty(ex.InnerException.Message)) + { + ReturnMessage = TranslateMsg(ex.InnerException.Message, strLanguageMode, strResourceDir); + } + else + { + ReturnMessage = TranslateMsg(ex.Message, strLanguageMode, strResourceDir); + } + // 紀錄TransactionLog + results = "fail"; + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode("", ReturnMessage, DateTime.Now.ToString("yyyyMMddHHmmssss"), "MES", "StartSyncing", Environment.MachineName, "AutoRun", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, ReturnMessage, "issue.wo.item.process", LogClass: "AutoRun", strException: argstrException); + if (!string.IsNullOrEmpty(colParameters["Parameter01"].ToString().Trim())) + { + // 寄送Mail + string argFileName = "N/A"; + string argEmailSubject = "AutuRunJob : StartSyncing Fail![issue.wo.item.process]"; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, ReturnMessage, colParameters["Parameter01"].ToString().Trim()); + } + } + finally + { + obj = null; + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 紀錄TransactionLog + string argstrException = null; + modAutoRunLibrary.addTransactionLog("", ReturnMessage, DateTime.Now.ToString("yyyyMMddHHmmssss"), "MES", "StartSyncing", Environment.MachineName, "AutoRun", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, ReturnMessage, "issue.wo.item.process", strException: argstrException); + // === + } + + return ReturnMessage; + + } + + #endregion + + #region --- 工時與機時分攤 --- + + private object funShareEQPTime(Collection colParameters = null) + { + object funShareEQPTimeRet = default(object); + + var cnnTemp = default(IDbConnection); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + string strSQL, strSQL_Field, strSQL_Value; + + var datArriveTime = DateTime.Now; + + var datProductionDateFrom = default(DateTime); + var datProductionDateEnd = default(DateTime); + string strGroupNo = ""; // 使用者群組 + + // 2019/12/5,Ning,要更新Cont_Equipment.SummaryFlag的SQL,需全部收集後再更新, 否則第二筆要平攤的就會取不到第一筆的資料了 + var colSQL_EQP = new Collection(); + + try + { + // ParameterXX參數說明 + // 01:彙整日期[yyyy/MM/dd](如無指定則用昨天) + // 02:使用者群組 + + // Parameter01為傳入參數,作為彙整日期,若無此值則用昨天當日期 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + datProductionDateFrom = Conversions.ToDate(Strings.Format(DateTime.Now.AddDays(-1), "yyyy/MM/dd")); + datProductionDateEnd = Conversions.ToDate(Strings.Format(DateTime.Now, "yyyy/MM/dd")); + } + else + { + do + { + try + { + datProductionDateFrom = Conversions.ToDate(Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()), "yyyy/MM/dd")); + datProductionDateEnd = Conversions.ToDate(Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd")); + } + catch (Exception ex) + { + funShareEQPTimeRet = "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 01)"; + break; + } + } + while (false); + } + + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + } + // funCreateWOWorkReportData_T100,TP,WF,會當成SubFunction呼叫,發Mail通知,統一由主funciton發出. + // funShareEQPTime = "User GroupNo not found!!!(Parameter 02)" + // Exit Try + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + cnnTemp = CreateConnection(strConnectionString); + + // 1.取出結算資料 + // -對Lot來看,使用EventTime來重新結算資料,不使用EndTime. + // 2019/6/13,Ning,加上SummaryFlag=0的條件 + // 2021/06/10 Edison加上ChamerFlag=0的條件(0:主設備,1:子設備) + strSQL = "Select A.EquipmentNo,A.StartTime,A.EndTime,A.InputQty,A.OutputQty,A.EventTime, " + " B.LogGroupSerial,B.LotNo,B.MONo,B.OPNo,B.ProductNo,B.ProductVersion " + " From tblWIPCont_Equipment A,tblWIPLotLog_Report B " + " Where A.EventTime>=To_Date('" + Strings.Format(Conversions.ToDate(datProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And A.EventTimeSplit,沒有tblWIPCont_Employee資料. + if (string.IsNullOrEmpty(strUserNo)) + { + strUserNo = "N/A"; + } + + DataRow[] drSel_EQP; + drSel_EQP = dsTemp.Tables["tblCont_EQP"].Select(Conversions.ToString("LogGroupSerial='" + drLogGroup["LogGroupSerial"] + "'")); + + foreach (DataRow drEQP in drSel_EQP) + { + var colParameter = new Collection(); + IDataParameter objParam; + + // 平攤各設備的時間,以各設備的StartTime做為起始. + strMemo = ""; + decEQPValue = fuShareEQPTime_OverLap(ref cnnTemp, ref colSQL, ref colSQL_Rows, ref strMemo, Conversions.ToString(drEQP["LotNo"]), drEQP["EquipmentNo"].ToString(), Conversions.ToDate(drEQP["StartTime"]), Conversions.ToDate(drEQP["EndTime"])); + + if (drEQP["InputQty"] is DBNull || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQP["InputQty"], 0, false))) + { + decInputQty = 0m; + } + else + { + decInputQty = Conversions.ToDecimal(drEQP["InputQty"]); + } + + // 標準機時(用Output來算). + decEQPValue_Std = 0m; + + if (drEQP["OutputQty"] is DBNull) + { + decOutputQty = 0m; + } + else + { + decOutputQty = Conversions.ToDecimal(drEQP["OutputQty"]); + + strSQL = Conversions.ToString("Select StdUnitEQPTime,CountEQPUnitQty From tblPRDRunTimeSetup " + " Where ProductNo='" + + drEQP["ProductNo"] + "' And ProductVersion='" + drEQP["ProductVersion"] + "'" + " And OPNo='" + drEQP["OPNo"] + "' And EquipmentNo='" + + drEQP["EquipmentNo"].ToString() + "'" + " And CountEQPUnitQty<>0"); // 分母為0,無法計算,一律存0. + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + decEQPValue_Std = Conversions.ToDecimal(Strings.Format(Operators.DivideObject(Operators.MultiplyObject(decOutputQty, drTemp["StdUnitEQPTime"]), drTemp["CountEQPUnitQty"]), "0.00")); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + // tblWIPCont_Resource_Share + strSQL_Field = "Insert into tblWIPCont_Resource_Share " + " (LotNo,MONo,LogGroupSerial,OPNo," + " RESClass,RESItem,RESValue,StdValue,InputQty,OutputQty,UserNo,EventTime,CreateDate,ItemNo "; + strSQL_Value = " Values ('" + drEQP["LotNo"] + "','" + drEQP["MONo"].ToString() + "','" + drEQP["LogGroupSerial"].ToString() + "','" + drEQP["OPNo"] + "', 1,'" + drEQP["EquipmentNo"].ToString() + "'," + + decEQPValue + "," + decEQPValue_Std + "," + decInputQty + "," + decOutputQty + ",'" + strUserNo + + "', To_Date('" + Strings.Format(Interaction.IIf(drEQP["EventTime"] is DBNull, drEQP["EndTime"], drEQP["EventTime"]), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + + " To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + intItemNo; + // 以CLOB方式儲存. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(DataBaseType, "oracle", false))) + { + strSQL_Field = strSQL_Field + ",Memo"; + strSQL_Value = strSQL_Value + ",:P"; + + objParam = new OracleParameter(":P", OracleDbType.Clob); + objParam.Value = strMemo; + colParameter.Add(objParam); + objParam = null; + } + + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(DataBaseType, "mssql", false))) + { + strSQL_Field = strSQL_Field + ",Memo"; + strSQL_Value = strSQL_Value + ",@P"; + + objParam = new SqlParameter("@P", SqlDbType.NVarChar); + objParam.Value = strMemo; + colParameter.Add(objParam); + objParam = null; + + } + + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + arrParameter_SQL.Add(strSQL); + arrParameter_CLOB.Add(colParameter); + + intItemNo = (short)(intItemNo + 1); + + // 2019/6/13,Ning,更新SummaryFlag + strSQL = "Update tblWIPCont_Equipment Set SummaryFlag = 1" + " Where LogGroupSerial = '" + drEQP["LogGroupSerial"].ToString() + "' And EquipmentNo = '" + drEQP["EquipmentNo"].ToString() + "'" + " And StartTime = To_Date('" + Strings.Format(drEQP["StartTime"], "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + colSQL_EQP.Add(strSQL); + } + + if (arrParameter_SQL.Count > 0) + { + // 2019/6/11,Ning,不做先刪除, 以便後續重拋時串資料 + // 2020/2/14, Ning, 因取消報工單時SummaryFlag會被設為Null, 故資料會重覆滾算, 應先刪後增 + // 若結算資料已存在,則先刪除,再存入. + strSQL = Conversions.ToString("Delete From tblWIPCont_Resource_Share Where LogGroupSerial='" + + drLogGroup["LogGroupSerial"] + "'" + " And RESClass=1"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + ExecuteSQLNoneQuery_CLOB_Multi(strDataBaseType, strConnectionString, colSQL, arrParameter_SQL, arrParameter_CLOB, colSQL_Rows); + } + + } + + // 更新tblWIPCont_Equipment.SummaryFlag + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_EQP); + + // //Return success + funShareEQPTimeRet = "success"; + } + + catch (Exception ex) + { + funShareEQPTimeRet = CombineFailMsg("0000-999999", ex.Message); + } + + finally + { + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + try + { + CloseConnection(cnnTemp); + // 寄送Mail + if (!string.IsNullOrEmpty(strGroupNo)) + { + string argFileName = "N/A"; + string argEmailSubject = "Share EQP Time [" + Strings.Format(Conversions.ToDate(datProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datProductionDateEnd), "yyyy/MM/dd H:mm:ss") + "]"; + string argEmailBody = Conversions.ToString(funShareEQPTimeRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + funShareEQPTimeRet = argEmailBody; + } + } + catch (Exception ex) + { + funShareEQPTimeRet = "fail_Finally;" + ex.Message; + } + } + + return funShareEQPTimeRet; + + } + + private decimal fuShareEQPTime_OverLap(ref IDbConnection cnnTemp, ref Collection colSQL, ref Collection colSQL_Rows, ref string strR_Memo, string strLotNo, string strEquipmentNo, DateTime datStartTime, DateTime datEndTime) + { + decimal fuShareEQPTime_OverLapRet = default(decimal); + + // 計算機時 + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + DbDataReader drTemp; + string strSQL; + + string strEQPMemo = ""; + string strStart, strEnd; + + + // L計算起迄 : S----------------------------------------------------------------------------E(設備下機點)----------C(結算點) + // L Hold_1st : 3----4 + // L Hold_2nd : 8-----9 + // L1 : |----------------------- 6 + // L1 Hold_1st : |----1 + // L1 Hold_2nd : 3----4 + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + // L4 : 11--------------------------------| + // L4 Hold_1st : 12----------------| + // L5 : 13------------------------| + // L6 : |------------------------------------------------------------------------------------------------|(未下機) + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + // L7 : |------------------------------------------------------------------------------------------------|已下機 + // L8 : 11-------------------------------------|已下機 + try + { + strEQPMemo = "Cal Time:" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + + strStart = "To_Date('" + Strings.Format(datStartTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + strEnd = "To_Date('" + Strings.Format(datEndTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + // 1.取出Overlap的時間段 + // 2.StartTime要在範圍內(StartTimestrStart)才有計算的意義,否則會取出多餘的資料. + // 2017/10/22,sammi.排除舊資料A.StartTime<>A.EndTime,不可以加此條件,因A.EndTime null的會被排除掉. + // 2019/6/13,Ning,加上SummaryFlag=0的條件 + + // Case1: + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + strSQL = ""; + strSQL += "Select A.StartTime,A.EndTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Equipment A,tblWIPLotLog_Report B " + " Where A.EquipmentNo='" + strEquipmentNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.StartTime is not Null " + " And A.StartTime <= " + strStart + " And A.EndTime > " + strStart + " And A.EndTime <= " + strEnd; + // Case2: + // L計算起迄 : S---------------------------------------------------------------------E + // L3 : 2---------------------------7 + strSQL += " Union "; + strSQL += "Select A.StartTime,A.EndTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Equipment A,tblWIPLotLog_Report B " + " Where A.EquipmentNo='" + strEquipmentNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.StartTime is not Null " + " And A.StartTime >= " + strStart + " And A.EndTime <= " + strEnd; + // Case3: + // L計算起迄 : S---------------------------------------------------------------------E + // L4 : 11------------------------|(未下機) + // L8 : 11---------------------已下機 + strSQL += " Union "; + strSQL += "Select A.StartTime,A.EndTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Equipment A,tblWIPLotLog_Report B " + " Where A.EquipmentNo='" + strEquipmentNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.StartTime is not Null " + " And A.StartTime >= " + strStart + " And A.StartTime < " + strEnd + " And (A.EndTime is null or A.EndTime >= " + strEnd + ")"; + // Case4: + // L計算起迄 : S---------------------------------------------------------------------E + // L6 : |------------------------------------------------------------------------------------------------|(未下機) + // L7 : |--------------------------------------------------------------------------------已下機 + strSQL += " Union "; + strSQL += "Select A.StartTime,A.EndTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Equipment A,tblWIPLotLog_Report B " + " Where A.EquipmentNo='" + strEquipmentNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.StartTime is not Null " + " And A.StartTime < " + strStart + " And (A.EndTime is null or A.EndTime >= " + strEnd + ")"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblEQP"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblEQP", cnnTemp); + + // 2.取得所有切割點 + var dtSplitTime = new DataTable("tblSplitTime"); + dtSplitTime.Columns.Add("SplitTime", Type.GetType("System.DateTime")); + + DataRow drAdd; + foreach (DataRow drEQP in dsTemp.Tables["tblEQP"].Rows) + { + // 2.1 修正各段起迄 + // StartTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEQP["StartTime"]), datStartTime) > 0L) + { + // 調整StartTime,同StartTime,不需加入切割點. + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + drEQP["StartTime"] = datStartTime; + } + else if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEQP["StartTime"]), datStartTime) == 0L) + { + } + // 起始點,不需加入dtSplitTime. + // 切割點 + // L計算起迄 : S---------------------------------------------------------------------E + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + // L4 : 11------------------------| + else if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drEQP["StartTime"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drEQP["StartTime"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // EndTime + if (drEQP["EndTime"] is DBNull || DateAndTime.DateDiff(DateInterval.Second, datEndTime, Conversions.ToDate(drEQP["EndTime"])) > 0L) + { + // 調整EndTime,同EndTime,不需加入切割點. + // L計算起迄 : S---------------------------------------------------------------------E + // L4 : 11------------------------| + drEQP["EndTime"] = datEndTime; + } + // 切割點 + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + else if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drEQP["EndTime"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drEQP["EndTime"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // ----- 將UNDO鎖住 ----- + strSQL = "Select distinct LotSerial "; + strSQL += "From tblWIPLotLog "; + strSQL += "Where LogGroupSerial='" + drEQP["LogGroupSerial"].ToString() + "'"; + + strSQL = " Update tblWIPReverseHistory Set CommitState=1,CommitDesc='AutoRun,funShareEQPTime' Where LotSerial In (" + strSQL + ")"; + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + } + + // 結束點,需加入dtSplitTime. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 3.依切割點依序平攤機時. + DataRow[] drSel; + DateTime datCal_Start; + DateTime datCal_End; + decimal decEQPValue = 0m; + decimal decSplitValue = 0m; + string strSplitMemo; + short intSplit = 1; + + dtSplitTime.DefaultView.Sort = "SplitTime"; + + datCal_Start = datStartTime; + + foreach (DataRowView drvSplitTime in dtSplitTime.DefaultView) + { + datCal_End = Conversions.ToDate(drvSplitTime["SplitTime"]); + decSplitValue = 0m; + strSplitMemo = ""; + + short intLotCount = 0; // 平攤Lot數. + + // 找出平攤Lot數. + foreach (DataRow drEQP in dsTemp.Tables["tblEQP"].Rows) + { + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEQP["StartTime"]), datCal_Start) >= 0L && DateAndTime.DateDiff(DateInterval.Second, datCal_End, Conversions.ToDate(drEQP["EndTime"])) >= 0L) + { + // 加入分攤筆數. + intLotCount = (short)(intLotCount + 1); + // 網狀製程 + // -Lot會分佈在不同站,紀錄LogGroupSerial,分母是以OP來區分,相同Lot不同OP,視為多筆. + strSplitMemo += ControlChars.CrLf + drEQP["LogGroupSerial"].ToString(); + } + else + { + // 排除,不需列入分攤筆數. + } + } + + if (intLotCount == 0) + { + // 2017/10/22,Sammi,不發出Error,讓CO可過帳,發生此Error的原因是Running的舊資料. + // Throw New iMESException.MESException("0000-200015", "[%LotNo%]:" & RefLotNo & ControlChars.CrLf & _ + // "#" & intSplit & ":" & Format(CDate(datCal_Start), "yyyy/MM/dd H:mm:ss") & "~" & Format(CDate(datCal_End), "yyyy/MM/dd H:mm:ss") & "," & _ + // "[%Overlap%] [%LotCount%]=0!") + + // 2017/10/22,Sammi,不需平攤,用*註記,用以釐清是否為舊資料批. + strSplitMemo += ControlChars.CrLf + "*"; + // 單位秒. + decSplitValue = DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End); + } + else + { + // 單位秒. + decSplitValue = (decimal)(DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) / (double)intLotCount); + } + + // 總機時 + decEQPValue += decSplitValue; + + strEQPMemo += ControlChars.CrLf + "#" + intSplit + ":" + Strings.Format(Conversions.ToDate(datCal_Start), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datCal_End), "yyyy/MM/dd H:mm:ss"); + + if (decSplitValue == 0m) + { + strEQPMemo += ControlChars.CrLf + "EQP=" + decSplitValue; + } + else if (intLotCount == 0) + { + // strEQPMemo += ControlChars.CrLf & "EQP=" & decSplitValue + strEQPMemo += ControlChars.CrLf + "EQP=" + Strings.Format(decSplitValue / 60m, "0.00") + "," + DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) + "/60"; + } + else + { + strEQPMemo += ControlChars.CrLf + "EQP=" + Strings.Format(decSplitValue / 60m, "0.00") + "," + DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) + "/" + intLotCount + "/60"; + } + + strEQPMemo += strSplitMemo; + + datCal_Start = datCal_End; + intSplit = (short)(intSplit + 1); + + } + + // 機時分攤說明 + strR_Memo = strEQPMemo; + + // 單位分,到小數二位. + fuShareEQPTime_OverLapRet = Conversions.ToDecimal(Strings.Format(decEQPValue / 60m, "0.00")); + } + + catch (Exception e1) + { + throw; + } + finally + { + if (dsTemp != null) + dsTemp.Dispose(); + //if (daTemp != null) + // daTemp.Dispose(); + + } + + return fuShareEQPTime_OverLapRet; + + } + + + private object funShareEMPTime(Collection colParameters = null) + { + object funShareEMPTimeRet = default(object); + + var cnnTemp = default(IDbConnection); + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + DbDataReader drTemp; + string strSQL, strSQL_Field, strSQL_Value; + + var datArriveTime = DateTime.Now; + + var datProductionDateFrom = default(DateTime); + var datProductionDateEnd = default(DateTime); + string strGroupNo = ""; // 使用者群組 + string strCond = ""; // 條件式 + + // 2019/12/5,Ning,要更新Cont_Employee_MultiUser.SummaryFlag的SQL,需全部收集後再更新, 否則第二筆要平攤的就會取不到第一筆的資料了 + var colSQL_EMP = new Collection(); + + try + { + // ParameterXX參數說明 + // 01:彙整日期[yyyy/MM/dd](如無指定則用昨天) + // 02:使用者群組 + + // Parameter01為傳入參數,作為彙整日期,若無此值則用昨天當日期 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + datProductionDateFrom = Conversions.ToDate(Strings.Format(DateTime.Now.AddDays(-1), "yyyy/MM/dd")); + datProductionDateEnd = Conversions.ToDate(Strings.Format(DateTime.Now, "yyyy/MM/dd")); + } + else + { + do + { + try + { + datProductionDateFrom = Conversions.ToDate(Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()), "yyyy/MM/dd")); + datProductionDateEnd = Conversions.ToDate(Strings.Format(DateTime.Parse(colParameters["Parameter01"].ToString().Trim()).AddDays(1d), "yyyy/MM/dd")); + } + catch (Exception ex) + { + funShareEMPTimeRet = "Parse ProductionDate fail(yyyy/MM/dd)!!!(Parameter 01)"; + break; + } + } + while (false); + } + + // Parameter02為傳入參數,作為GroupNo,若無此值則不進行下面的程式 + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + } + // funCreateWOWorkReportData_T100,TP,WF,會當成SubFunction呼叫,發Mail通知,統一由主funciton發出. + // funShareEMPTime = "User GroupNo not found!!!(Parameter 02)" + // Exit Try + else + { + strGroupNo = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])); + } + + cnnTemp = CreateConnection(strConnectionString); + + // 1.取出結算資料 + // -對Lot來看,使用EventTime來重新結算資料,不使用CheckOutTime. + // -排除Duration=0:整段都是wait. + // 2019/6/13,Ning,加上SummaryFlag=0的條件 + strSQL = "Select 0 as DelFlag,A.UserNo,A.CheckInTime,A.CheckOutTime,A.Qty,A.EventTime,A.MultiOperatorMode,A.LoginPlaceNo, " + " B.LogGroupSerial,B.LotNo,B.MONo,B.OPNo,B.ProductNo,B.ProductVersion " + " From tblWIPCont_Employee_MultiUser A,tblWIPLotLog_Report B " + " Where A.EventTime>=To_Date('" + Strings.Format(Conversions.ToDate(datProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And A.EventTime 0 "; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblCont_EMP"); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblCont_EMP", cnnTemp); + + var dtLogGroup = new DataTable(); + dtLogGroup = dsTemp.Tables["tblCont_EMP"].DefaultView.ToTable(true, "LogGroupSerial"); + + // 2.計算平攤值 + // -以一個站一個站的資料計算及commit,若結算資料已存在,則先刪除,再存入. + var datCreateDate = DateTime.Now; + decimal decEMPValue = 0m; // 計算,單位minute,到小數二位. + decimal decEMPValue_Std = 0m; // 計算,單位minute,到小數二位. + decimal decQty; + string strMemo = ""; + short intItemNo = 1; + + funWriteShareEMPLog("funShareEMPTime Start. Date: " + Strings.Format(datProductionDateFrom, "yyyy/MM/dd") + ". dtLogGroup.Rows.Count: " + dtLogGroup.Rows.Count); + + foreach (DataRow drLogGroup in dtLogGroup.Rows) + { + var colSQL = new Collection(); + var colSQL_Rows = new Collection(); + var arrParameter_SQL = new ArrayList(); + var arrParameter_CLOB = new ArrayList(); + + intItemNo = 1; + + DataRow[] drSel_EMP; + // CheckInTime,Sort很重要,不可變更. + drSel_EMP = dsTemp.Tables["tblCont_EMP"].Select(Conversions.ToString("LogGroupSerial='" + + drLogGroup["LogGroupSerial"] + "'"), "UserNo,CheckInTime"); + + // 同一人員同一Lot+OP,可能登錄多台設備或上工時間Overlap(應不可能),將此類資料視為一筆,註記重覆或調整起迄. + if (drSel_EMP.Length > 0) + { + // MultiOperatorMode-0:OP,1:Area,2:EQP + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[0]["MultiOperatorMode"], 2, false))) + { + short intUpperBound; + intUpperBound = (short)(drSel_EMP.Length - 1); + for (short i = 0, loopTo = intUpperBound; i <= loopTo; i++) + { + // 第一筆預設要使用,不需要比對. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[i]["DelFlag"], 0, false))) + { + for (short j = (short)(i + 1), loopTo1 = intUpperBound; j <= loopTo1; j++) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[j]["DelFlag"], 0, false)) && Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[i]["UserNo"], drSel_EMP[j]["UserNo"], false))) + { + // CheckInTime,CheckOutTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drSel_EMP[i]["CheckOutTime"]), Conversions.ToDate(drSel_EMP[j]["CheckInTime"])) > 0L) + { + } + // 完全沒有重疊,分開計算. + else + { + // 調整CheckOutTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drSel_EMP[i]["CheckOutTime"]), Conversions.ToDate(drSel_EMP[j]["CheckOutTime"])) > 0L) + { + drSel_EMP[i]["CheckOutTime"] = drSel_EMP[j]["CheckOutTime"]; + } + // 數量累加 + drSel_EMP[i]["Qty"] = Convert.ToInt32(drSel_EMP[i]["Qty"]) + Convert.ToInt32(drSel_EMP[j]["Qty"]); + // Remove + drSel_EMP[j]["DelFlag"] = 1; + } + } + } + } + } + } + } + + foreach (DataRow drEMP in drSel_EMP) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEMP["DelFlag"], 0, false))) + { + var colParameter = new Collection(); + IDataParameter objParam; + + funWriteShareEMPLog(Conversions.ToString("funShareEMPTime_OverLap Start. LotNo: " + + drEMP["LotNo"] + ", UserNo: " + drEMP["UserNo"] + ", CheckInTime: " + Strings.Format(drEMP["CheckInTime"], "yyyy/MM/dd H:mm:ss") + + ", CheckOutTime: " + Strings.Format(drEMP["CheckOutTime"], "yyyy/MM/dd H:mm:ss"))); + + // 平攤各人員的時間. + strMemo = ""; + decEMPValue = fuShareEMPTime_OverLap(ref cnnTemp, ref strMemo, Conversions.ToString(drEMP["LotNo"]), drEMP["UserNo"].ToString(), Conversions.ToDate(drEMP["CheckInTime"]), Conversions.ToDate(drEMP["CheckOutTime"])); + + funWriteShareEMPLog(Conversions.ToString("funShareEMPTime_OverLap End. LotNo: " + + drEMP["LotNo"] + ", UserNo: " + drEMP["UserNo"] + ", CheckInTime: " + Strings.Format(drEMP["CheckInTime"], "yyyy/MM/dd H:mm:ss") + + ", CheckOutTime: " + Strings.Format(drEMP["CheckOutTime"], "yyyy/MM/dd H:mm:ss"))); + + // 標準人時. + decEMPValue_Std = 0m; + + if (drEMP["Qty"] is DBNull || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEMP["Qty"], 0, false))) + { + decQty = 0m; + decEMPValue_Std = 0m; + } + else + { + decQty = Conversions.ToDecimal(drEMP["Qty"]); + + strSQL = Conversions.ToString("Select StdUnitEMPTime,CountEQPUnitQty From tblPRDRunTimeSetup " + " Where ProductNo='" + + drEMP["ProductNo"] + "' And ProductVersion='" + drEMP["ProductVersion"] + "'" + " And OPNo='" + drEMP["OPNo"] + "'" + " And EquipmentNo In(Select EquipmentNo From tblWIPCont_Equipment Where LogGroupSerial='" + + drLogGroup["LogGroupSerial"] + "')" + " And CountEQPUnitQty<>0"); // 分母為0,無法計算,一律存0. + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + decEMPValue_Std = Conversions.ToDecimal(Strings.Format(Operators.DivideObject(Operators.MultiplyObject(decQty, drTemp["StdUnitEMPTime"]), drTemp["CountEQPUnitQty"]), "0.00")); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + + // 紀錄. + // -RESClass,0:EMP、1:EQP. + strSQL_Field = "Insert into tblWIPCont_Resource_Share " + " (LotNo,MONo,LogGroupSerial,OPNo," + " RESClass,RESItem,RESValue,StdValue,InputQty,OutputQty,UserNo,EventTime,CreateDate,ItemNo "; + strSQL_Value = Conversions.ToString(" Values ('" + + drEMP["LotNo"] + "','" + drEMP["MONo"].ToString() + "','" + drEMP["LogGroupSerial"].ToString() + "','" + drEMP["OPNo"] + "'," + " 0,'EMP'," + + decEMPValue + "," + decEMPValue_Std + "," + decQty + "," + decQty + ",'" + drEMP["UserNo"].ToString() + "'," + " To_Date('" + Strings.Format(Interaction.IIf(drEMP["EventTime"] is DBNull, drEMP["CheckOutTime"], drEMP["EventTime"]), "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS')," + " To_Date('" + Strings.Format(datCreateDate, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')," + + intItemNo); + // 以CLOB方式儲存. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(DataBaseType, "oracle", false))) + { + strSQL_Field = strSQL_Field + ",Memo"; + strSQL_Value = strSQL_Value + ",:P"; + + objParam = new OracleParameter(":P", OracleDbType.Clob); + objParam.Value = strMemo; + colParameter.Add(objParam); + objParam = null; + } + + else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(DataBaseType, "mssql", false))) + { + strSQL_Field = strSQL_Field + ",Memo"; + strSQL_Value = strSQL_Value + ",@P"; + + objParam = new SqlParameter("@P", SqlDbType.NVarChar); + objParam.Value = strMemo; + colParameter.Add(objParam); + objParam = null; + + } + + strSQL = strSQL_Field + ")" + strSQL_Value + ")"; + arrParameter_SQL.Add(strSQL); + arrParameter_CLOB.Add(colParameter); + + // 2018/01/15,Sammi.同一人同一站上、下工多次,結算時EventTime一樣,造成分攤時的錯誤調整(TBLWIPCONT_RESOURCE_SHARE PK重覆問題) + intItemNo = (short)(intItemNo + 1); + } + + // 2019/6/13,Ning, 更新 SummaryFlag + strSQL = "Update tblWIPCont_Employee_MultiUser Set SummaryFlag = 1" + " Where LogGroupSerial = '" + drEMP["LogGroupSerial"].ToString() + "' And UserNo = '" + drEMP["UserNo"].ToString() + "' And LogInPlaceNo = '" + drEMP["LogInPlaceNo"].ToString() + "'" + " And CheckInTime = To_Date('" + Strings.Format(drEMP["CheckInTime"], "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + colSQL_EMP.Add(strSQL); + } + + if (arrParameter_SQL.Count > 0) + { + // 2019/6/11,Ning,不做先刪除, 以便後續重拋時串資料 + // 2020/2/14, Ning, 因取消報工單時SummaryFlag會被設為Null, 故資料會重覆滾算, 應先刪後增 + // 若結算資料已存在,則先刪除,再存入. + strSQL = Conversions.ToString("Delete From tblWIPCont_Resource_Share Where LogGroupSerial='" + + drLogGroup["LogGroupSerial"] + "'" + " And RESClass=0"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + ExecuteSQLNoneQuery_CLOB_Multi(strDataBaseType, strConnectionString, colSQL, arrParameter_SQL, arrParameter_CLOB, colSQL_Rows); + } + + } + + // 更新tblWIPCont_Employee_MultiUser.SummaryFlag + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, colSQL_EMP); + + funWriteShareEMPLog("funShareEMPTime End. Date: " + Strings.Format(datProductionDateFrom, "yyyy/MM/dd") + ". dtLogGroup.Rows.Count: " + dtLogGroup.Rows.Count); + + // //Return success + funShareEMPTimeRet = "success"; + } + + catch (Exception ex) + { + funShareEMPTimeRet = CombineFailMsg("0000-999999", ex.Message); + + // 2013/02/05, Hank, Send Email + colParameters.Add(funShareEMPTimeRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + + finally + { + //if (daTemp != null) + // daTemp.Dispose(); + if (dsTemp != null) + dsTemp.Dispose(); + + try + { + CloseConnection(cnnTemp); + // 寄送Mail + if (!string.IsNullOrEmpty(strGroupNo)) + { + string argFileName = "N/A"; + string argEmailSubject = "Share EMP Time [" + Strings.Format(Conversions.ToDate(datProductionDateFrom), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datProductionDateEnd), "yyyy/MM/dd H:mm:ss") + "]"; + string argEmailBody = Conversions.ToString(funShareEMPTimeRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + funShareEMPTimeRet = argEmailBody; + } + } + catch (Exception ex) + { + funShareEMPTimeRet = "fail_Finally;" + ex.Message; + } + } + + return funShareEMPTimeRet; + + } + + private decimal fuShareEMPTime_OverLap(ref IDbConnection cnnTemp, ref string strR_Memo, string strLotNo, string strUserNo, DateTime datCheckInTime, DateTime datCheckOutTime) + { + decimal fuShareEMPTime_OverLapRet = default(decimal); + + // 計算人時 + //var daTemp = new System.Data.OleDb.OleDbDataAdapter(); + var dsTemp = new DataSet(); + + DbDataReader drTemp; + string strSQL; + + string strEMPMemo = ""; + string strStart, strEnd; + + try + { + strEMPMemo = "Cal Time:" + Strings.Format(Conversions.ToDate(datCheckInTime), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datCheckOutTime), "yyyy/MM/dd H:mm:ss"); + + strStart = "To_Date('" + Strings.Format(datCheckInTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + strEnd = "To_Date('" + Strings.Format(datCheckOutTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + // 1.取出Overlap的時間段 + // 2.CheckInTime要在範圍內(CheckInTimestrStart)才有計算的意義,否則會取出多餘的資料. + // 2017/10/22,sammi.排除舊資料A.CheckInTime<>A.CheckOutTime,不可以加此條件,因A.CheckOutTime null的會被排除掉. + // 2019/6/13,Ning,加上SummaryFlag=0的條件 + + // Case1: + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + strSQL = ""; + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Employee_MultiUser A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.CheckInTime is not Null " + " And A.CheckInTime <= " + strStart + " And A.CheckOutTime > " + strStart + " And A.CheckOutTime <= " + strEnd; + + // Case2: + // L計算起迄 : S---------------------------------------------------------------------E + // L3 : 2---------------------------7 + strSQL += " Union "; + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Employee_MultiUser A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.CheckInTime is not Null " + " And A.CheckInTime >= " + strStart + " And A.CheckOutTime <= " + strEnd; + // Case3-A: + // L計算起迄 : S---------------------------------------------------------------------E + // L4 : 11------------------------|(未下工) + strSQL += " Union "; + // 排除Garbage Data:上工時,會針對進站批自動產生tblWIPLotLoginState,Lot還原後,會變成Garbage Data,使用tblWIPLotLoginState時,一定要與tblWIPLotLog_Report一起看,才不會用到Garbage Data. + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,'' as FromLotNo,B.LotNo " + " From tblWIPLotLoginState A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And A.CheckInTime is not Null " + " And A.CheckInTime >= " + strStart + " And A.CheckInTime < " + strEnd + " And (A.CheckOutTime is null or A.CheckOutTime >= " + strEnd + ")"; + // Case3-B: + // L計算起迄 : S---------------------------------------------------------------------E + // L8 : 11---------------------已下工 + strSQL += " Union "; + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Employee_MultiUser A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.CheckInTime is not Null " + " And A.CheckInTime >= " + strStart + " And A.CheckInTime < " + strEnd + " And (A.CheckOutTime is null or A.CheckOutTime >= " + strEnd + ")"; + // Case4-A: + // L計算起迄 : S---------------------------------------------------------------------E + // L6 : |------------------------------------------------------------------------------------------------|(未下工) + strSQL += " Union "; + // 排除Garbage Data:上工時,會針對進站批自動產生tblWIPLotLoginState,Lot還原後,會變成Garbage Data,使用tblWIPLotLoginState時,一定要與tblWIPLotLog_Report一起看,才不會用到Garbage Data. + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,'' as FromLotNo,B.LotNo " + " From tblWIPLotLoginState A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And A.CheckInTime is not Null " + " And A.CheckInTime < " + strStart + " And (A.CheckOutTime is null or A.CheckOutTime >= " + strEnd + ")"; + // Case4-B: + // L計算起迄 : S---------------------------------------------------------------------E + // L7 : |--------------------------------------------------------------------------------已下工 + strSQL += " Union "; + strSQL += "Select A.CheckInTime,A.CheckOutTime,A.LogGroupSerial,A.FromLotNo,B.LotNo " + " From tblWIPCont_Employee_MultiUser A,tblWIPLotLog_Report B " + " Where A.UserNo='" + strUserNo + "'" + " And A.LogGroupSerial=B.LogGroupSerial " + " And Nvl(A.SummaryFlag,0) = 0 " + " And A.CheckInTime is not Null " + " And A.CheckInTime < " + strStart + " And (A.CheckOutTime is null or A.CheckOutTime >= " + strEnd + ")"; + // Sort + strSQL = "Select 0 as DelFlag,T1.* From (" + strSQL + ") T1 Order by LogGroupSerial,CheckInTime "; + + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp.SelectCommand = cmmTemp; + //daTemp.Fill(dsTemp, "tblEMP"); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "tblEMP", cnnTemp); + + var dtLogGroup = new DataTable(); + dtLogGroup = dsTemp.Tables["tblEMP"].DefaultView.ToTable(true, "LogGroupSerial"); + + foreach (DataRow drLogGroup in dtLogGroup.Rows) + { + + DataRow[] drSel_EMP; + // CheckInTime,Sort很重要,不可變更. + drSel_EMP = dsTemp.Tables["tblEMP"].Select(Conversions.ToString("LogGroupSerial='" + drLogGroup["LogGroupSerial"] + "'"), "CheckInTime"); + + // 同一人員同一Lot+OP,可能登錄多台設備或上工時間Overlap(應不可能),將此類資料視為一筆,註記重覆或調整起迄. + if (drSel_EMP.Length > 0) + { + // MultiOperatorMode-0:OP,1:Area,2:EQP + // If drSel_EMP(0)("MultiOperatorMode") = 2 Then + short intUpperBound; + intUpperBound = (short)(drSel_EMP.Length - 1); + for (short i = 0, loopTo = intUpperBound; i <= loopTo; i++) + { + // 第一筆預設要使用,不需要比對. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[i]["DelFlag"], 0, false))) + { + for (short j = (short)(i + 1), loopTo1 = intUpperBound; j <= loopTo1; j++) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drSel_EMP[j]["DelFlag"], 0, false))) + { + // CheckInTime,CheckOutTime + if (drSel_EMP[i]["CheckOutTime"] is DBNull) + { + } + // 不需處理. + else if (drSel_EMP[i]["CheckOutTime"] is DBNull && drSel_EMP[j]["CheckOutTime"] is DBNull) + { + // Remove + drSel_EMP[j]["DelFlag"] = 1; + } + else if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drSel_EMP[i]["CheckOutTime"]), Conversions.ToDate(drSel_EMP[j]["CheckInTime"])) > 0L) + { + } + // 完全沒有重疊,分開計算. + else + { + // 調整CheckOutTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drSel_EMP[i]["CheckOutTime"]), Conversions.ToDate(drSel_EMP[j]["CheckOutTime"])) > 0L) + { + drSel_EMP[i]["CheckOutTime"] = drSel_EMP[j]["CheckOutTime"]; + } + // '數量累加 + // drSel_EMP(i)("Qty") += drSel_EMP(j)("Qty") + // Remove + drSel_EMP[j]["DelFlag"] = 1; + } + } + } + } + } + } + // End If + } + + // Delete + for (int i = dsTemp.Tables["tblEMP"].Rows.Count - 1; i >= 0; i -= 1) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dsTemp.Tables["tblEMP"].Rows[i]["DelFlag"], 1, false))) + { + dsTemp.Tables["tblEMP"].Rows.Remove(dsTemp.Tables["tblEMP"].Rows[i]); + } + } + + // 2.取得所有切割點 + var dtSplitTime = new DataTable("tblSplitTime"); + dtSplitTime.Columns.Add("SplitTime", Type.GetType("System.DateTime")); + + var dtHoldWait = new DataTable("tblHoldWait"); + dtHoldWait.Columns.Add("LotNo", Type.GetType("System.String")); + dtHoldWait.Columns.Add("LogGroupSerial", Type.GetType("System.String")); + dtHoldWait.Columns.Add("StartTime", Type.GetType("System.DateTime")); + dtHoldWait.Columns.Add("EndTime", Type.GetType("System.DateTime")); + dtHoldWait.Columns.Add("DType", Type.GetType("System.String")); + dtHoldWait.Columns.Add("DTypeNo", Type.GetType("System.String")); + + DataRow drAdd; + foreach (DataRow drEMP in dsTemp.Tables["tblEMP"].Rows) + { + // 2.1 修正各段起迄 + // CheckInTime + if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEMP["CheckInTime"]), datCheckInTime) > 0L) + { + // 調整CheckInTime,同CheckInTime,不需加入切割點. + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + drEMP["CheckInTime"] = datCheckInTime; + } + else if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEMP["CheckInTime"]), datCheckInTime) == 0L) + { + } + // 起始點,不需加入dtSplitTime. + // 切割點 + // L計算起迄 : S---------------------------------------------------------------------E + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + // L4 : 11------------------------| + else if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drEMP["CheckInTime"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drEMP["CheckInTime"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // CheckOutTime + if (drEMP["CheckOutTime"] is DBNull || DateAndTime.DateDiff(DateInterval.Second, datCheckOutTime, Conversions.ToDate(drEMP["CheckOutTime"])) > 0L) + { + // 調整CheckOutTime,同CheckOutTime,不需加入切割點. + // L計算起迄 : S---------------------------------------------------------------------E + // L4 : 11------------------------| + drEMP["CheckOutTime"] = datCheckOutTime; + } + // 切割點 + // L計算起迄 : S---------------------------------------------------------------------E + // L1 : |----------------------- 6 + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + else if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drEMP["CheckOutTime"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drEMP["CheckOutTime"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 2.2 取出每段人時包含的Hold,Wait切割點及排除時間段. + + // Call funWriteShareEMPLog("fuShareEMPTime_HoldWait Start. LogGroupSerial: " & drEMP("LogGroupSerial")) + + fuShareEMPTime_HoldWait(ref cnnTemp, ref dtSplitTime, ref dtHoldWait, drEMP["LotNo"].ToString(), drEMP["LogGroupSerial"].ToString(), Conversions.ToDate(drEMP["CheckInTime"]), Conversions.ToDate(drEMP["CheckOutTime"]), drEMP["FromLotNo"].ToString()); + + // Call funWriteShareEMPLog("fuShareEMPTime_HoldWait End. LogGroupSerial: " & drEMP("LogGroupSerial")) + + } + + // 結束點,需加入dtSplitTime. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(datCheckOutTime), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(datCheckOutTime), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 3.依切割點依序平攤人時. + DataRow[] drSel; + DateTime datCal_Start; + DateTime datCal_End; + decimal decEMPValue = 0m; + decimal decSplitValue = 0m; + string strSplitMemo; + short intSplit = 1; + + funWriteShareEMPLog("fuShareEMPTime_OverLap, dtSplitTime.Rows.Count: " + dtSplitTime.Rows.Count); + + dtSplitTime.DefaultView.Sort = "SplitTime"; + + datCal_Start = datCheckInTime; + + foreach (DataRowView drvSplitTime in dtSplitTime.DefaultView) + { + datCal_End = Conversions.ToDate(drvSplitTime["SplitTime"]); + decSplitValue = 0m; + strSplitMemo = ""; + + short intLotCount = 0; // 平攤Lot數. + + // 檢查本身(LotNo)是否被排除 + drSel = dtHoldWait.Select("LotNo='" + strLotNo + "'" + "And StartTime<=#" + Strings.Format(Conversions.ToDate(datCal_Start), "yyyy/MM/dd H:mm:ss") + "#" + "And EndTime>=#" + Strings.Format(Conversions.ToDate(datCal_End), "yyyy/MM/dd H:mm:ss") + "#"); + if (drSel.Length > 0) + { + strSplitMemo += ControlChars.CrLf + strLotNo + "," + drSel[0]["DType"].ToString() + "(" + drSel[0]["DTypeNo"].ToString() + "),EMP=0."; + } + else + { + // 找出平攤Lot數. + foreach (DataRow drEMP in dsTemp.Tables["tblEMP"].Rows) + { + // 檢查是否被排除 + drSel = dtHoldWait.Select(Conversions.ToString("LotNo='" + + drEMP["LotNo"] + "'" + "And StartTime<=#" + Strings.Format(Conversions.ToDate(datCal_Start), "yyyy/MM/dd H:mm:ss") + "#" + "And EndTime>=#" + + Strings.Format(Conversions.ToDate(datCal_End), "yyyy/MM/dd H:mm:ss") + "#")); + if (drSel.Length > 0) + { + // 排除,不列入分攤筆數. + strSplitMemo = Conversions.ToString(strSplitMemo + ControlChars.CrLf + + drEMP["LotNo"] + "," + drSel[0]["DType"].ToString() + "(" + drSel[0]["DTypeNo"].ToString() + "),Ex."); + } + else if (DateAndTime.DateDiff(DateInterval.Second, Conversions.ToDate(drEMP["CheckInTime"]), datCal_Start) >= 0L && DateAndTime.DateDiff(DateInterval.Second, datCal_End, Conversions.ToDate(drEMP["CheckOutTime"])) >= 0L) + { + // 加入分攤筆數. + intLotCount = (short)(intLotCount + 1); + // 網狀製程 + // -Lot會分佈在不同站,紀錄LogGroupSerial,分母是以OP來區分,相同Lot不同OP,視為多筆. + // -同一人員同一Lot+OP,可能登錄多台設備或上工時間Overlap(應不可能),將此類資料視為一筆(已在前面處理). + strSplitMemo += ControlChars.CrLf + drEMP["LogGroupSerial"].ToString(); + } + else + { + // 排除,不需列入分攤筆數. + } + } + + if (intLotCount == 0) + { + // 2017/10/22,Sammi,不發出Error,讓CO可過帳,發生此Error的原因是Running的舊資料. + // Throw New iMESException.MESException("0000-200015", "[%LotNo%]:" & RefLotNo & ControlChars.CrLf & _ + // "#" & intSplit & ":" & Format(CDate(datCal_Start), "yyyy/MM/dd H:mm:ss") & "~" & Format(CDate(datCal_End), "yyyy/MM/dd H:mm:ss") & "," & _ + // "[%Overlap%] [%LotCount%]=0!") + + // 2017/10/22,Sammi,不需平攤,用*註記,用以釐清是否為舊資料批. + strSplitMemo += ControlChars.CrLf + "*"; + // 單位秒. + decSplitValue = DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End); + } + else + { + // 單位秒. + decSplitValue = (decimal)(DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) / (double)intLotCount); + } + + } + + // 總人時 + decEMPValue += decSplitValue; + + strEMPMemo += ControlChars.CrLf + "#" + intSplit + ":" + Strings.Format(Conversions.ToDate(datCal_Start), "yyyy/MM/dd H:mm:ss") + "~" + Strings.Format(Conversions.ToDate(datCal_End), "yyyy/MM/dd H:mm:ss"); + + if (decSplitValue == 0m) + { + strEMPMemo += ControlChars.CrLf + "EMP=" + decSplitValue; + } + else if (intLotCount == 0) + { + // strEMPMemo += ControlChars.CrLf & "EMP=" & decSplitValue + strEMPMemo += ControlChars.CrLf + "EMP=" + Strings.Format(decSplitValue / 60m, "0.00") + "," + DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) + "/60"; + } + else + { + strEMPMemo += ControlChars.CrLf + "EMP=" + Strings.Format(decSplitValue / 60m, "0.00") + "," + DateAndTime.DateDiff(DateInterval.Second, datCal_Start, datCal_End) + "/" + intLotCount + "/60"; + } + + strEMPMemo += strSplitMemo; + + datCal_Start = datCal_End; + intSplit = (short)(intSplit + 1); + + } + + // 人時分攤說明 + strR_Memo = strEMPMemo; + + // 單位分,到小數二位. + fuShareEMPTime_OverLapRet = Conversions.ToDecimal(Strings.Format(decEMPValue / 60m, "0.00")); + } + + catch (Exception e1) + { + throw; + } + finally + { + if (dsTemp != null) + dsTemp.Dispose(); + //if (daTemp != null) + // daTemp.Dispose(); + + } + + return fuShareEMPTime_OverLapRet; + + } + + private string fuShareEMPTime_HoldWait(ref IDbConnection cnnTemp, ref DataTable dtSplitTime, ref DataTable dtHoldWait, string strLotNo, string strLogGroupSerial, DateTime datStartTime, DateTime datEndTime, string strFromLotNo = "") + { + + // 1.取出每段人時包含的Hold,Wait切割點及排除時間段. + + DbDataReader drTemp; + string strSQL; + + // L計算起迄 : S---------------------------------------------------------------------E + // L Hold_1st : 3----4 + // L Hold_2nd : 8-----9 + // L1 : |----------------------- 6 + // L1 Hold_1st : |----1 + // L1 Hold_2nd : 3----4 + // L2 : 5-------------------------------10 + // L3 : 2---------------------------7 + // L4 : 11------------------------| + // L4 Hold_1st : 12---------| + // L6 : |---------------------------------------------------------------------------------------------------------| + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + try + { + DataRow[] drSel; + DataRow drAdd; + + // A:以LotNo找Hold&Wait紀錄. + + // 1.Hold + // E1:CreateDate早於datStartTime,ReleaseDate>datStartTime And ReleaseDate<=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L1 Hold_1st : |----1 + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strLotNo + "'" + " And CreateDateTo_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // E2:CreateDate>=datStartTime,ReleaseDate<=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L Hold_1st : 3----4 + // L Hold_2nd : 8-----9 + // L1 Hold_2nd : 3----4 + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // E3:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L4 Hold_1st : 12---------| + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And CreateDate=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate在外面,不需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // 2018/04/20,sammi.未排除整段時間落在Wait或Hold的. + // E4:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strLotNo + "'" + " And CreateDate<=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And (ReleaseDate>=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate在外面,不需加入. + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + + // 2.Wait + // W1:CreateDate早於datStartTime,ReleaseDate>datStartTime And ReleaseDate<=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strLotNo + "'" + " And CreateDateTo_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W2:CreateDate>=datStartTime,ReleaseDate<=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W3:CreateDate>=datStartTime And CreateDate=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And CreateDate=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate在外面,不需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W4:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strLotNo + "'" + " And CreateDate<=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And (ReleaseDate>=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate在外面,不需加入. + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // B:以FromLotNo找Hold&Wait紀錄. + if (!string.IsNullOrEmpty(strFromLotNo)) + { + // 1.Hold + // E1:CreateDate早於datStartTime,ReleaseDate>datStartTime And ReleaseDate<=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L1 Hold_1st : |----1 + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strFromLotNo + "'" + " And CreateDateTo_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // E2:CreateDate>=datStartTime,ReleaseDate<=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L Hold_1st : 3----4 + // L Hold_2nd : 8-----9 + // L1 Hold_2nd : 3----4 + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strFromLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // E3:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L4 Hold_1st : 12---------| + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strFromLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And CreateDate=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate在外面,不需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // E4:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + strSQL = "Select CreateDate,ReleaseDate,ERFNo From tblWIPERFBasis " + " Where ERFSource = 0 And LotNo='" + strFromLotNo + "'" + " And CreateDate<=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And (ReleaseDate>=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate在外面,不需加入. + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "H"; + drAdd["DTypeNo"] = drTemp["ERFNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + + // 2.Wait + // W1:CreateDate早於datStartTime,ReleaseDate>datStartTime And ReleaseDate<=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strFromLotNo + "'" + " And CreateDateTo_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W2:CreateDate>=datStartTime,ReleaseDate<=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strFromLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And ReleaseDate<=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(drTemp["ReleaseDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W3:CreateDate>=datStartTime And CreateDate=datEndTime. + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strFromLotNo + "'" + " And CreateDate>=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And CreateDate=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate需加入. + // -ReleaseDate在外面,不需加入. + if (dtSplitTime.Select("SplitTime=#" + Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss") + "#").Length == 0) + { + drAdd = dtSplitTime.NewRow(); + drAdd["SplitTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + dtSplitTime.Rows.Add(drAdd); + } + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(drTemp["CreateDate"]), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + + // W4:CreateDate>=datStartTime And CreateDate=datEndTime. + // L計算起迄 : S---------------------------------------------------------------------E + // L6 Wait_1st : |-------------------------------------------------------------------------------------------------------| + strSQL = "Select CreateDate,ReleaseDate,WaitNo From tblWIPWaitBasis " + " Where LotNo='" + strFromLotNo + "'" + " And CreateDate<=To_Date('" + Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') " + " And (ReleaseDate>=To_Date('" + Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') or ReleaseDate is null) " + " Order by ReleaseDate"; + SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 切割點 + // -CreateDate在外面,不需加入. + // -ReleaseDate在外面,不需加入. + + // 排除時間段 + drAdd = dtHoldWait.NewRow(); + drAdd["LotNo"] = strLotNo; + drAdd["LogGroupSerial"] = strLogGroupSerial; + drAdd["StartTime"] = Strings.Format(Conversions.ToDate(datStartTime), "yyyy/MM/dd H:mm:ss"); + drAdd["EndTime"] = Strings.Format(Conversions.ToDate(datEndTime), "yyyy/MM/dd H:mm:ss"); + drAdd["DType"] = "W"; + drAdd["DTypeNo"] = drTemp["WaitNo"]; + dtHoldWait.Rows.Add(drAdd); + } + drTemp.Close(); + //cmmTemp.Dispose(); + } + } + + catch + { + throw; + } + finally + { + + } + + return default(string); + + } + + private int funWriteShareEMPLog(string WriteTxt) + { + int funWriteShareEMPLogRet = default(int); + + funWriteShareEMPLogRet = -1; + + try + { + if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Log")) + { + Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Log"); + } + + var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"\Log\AutoRun_ShareEMPTime_Log_" + Strings.Format(DateTime.Now, "yyyyMMdd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); + var w = new StreamWriter(fs); + + w.BaseStream.Seek(0L, SeekOrigin.End); + w.WriteLine(Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + " " + WriteTxt); + w.Close(); + fs.Close(); + + funWriteShareEMPLogRet = 0; + } + + catch (Exception e1) + { + + } + + return funWriteShareEMPLogRet; + + } + + #endregion + + #region ---設備保養工單自動開立--- + + private string funPMWOAutoCreate_EQPTypeSOP(Collection colParameters = null) + { + string funPMWOAutoCreate_EQPTypeSOPRet = default(string); + + var cnnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var colSQL = new Collection(); + var colSQL_Rows = new Collection(); + var dsTemp = new DataSet(); + var dsChamber = new DataSet(); + DataRow[] drSel; + + string strSQL; + string strWONo; + DateTime datEventTime; + + int intWOItemNo = 0; + bool blnAutoCreateWO, blnLockEquipment, blnAutoEmail, blnCreateAndReleaseWO, blnChkEQPState; + DataRow drAdd; + var dtSendMail = BuildMailTable(); + string strSendMailMSG; + string EquipmentNoList = ""; + string strEQPSerialNo; + int intWOType = 0; // 預防保養工單 + + string strFailMsg = ""; + string ChamberManage = defString; + DbDataReader drTemp; + try + { + datEventTime = DateTime.Now; + + cnnTemp = CreateConnection(strConnectionString); + + //// 取出已到期的保養計劃(預估保養日PMEstDateTime <= Now) + //strSQL = " Select A.*,B.EquipmentNo,B.PMSerialNo,B.PMEstDateTime,B.SerialNo,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName As PMSOPName_Basis" + + // " From tblPMEQPTypeSOPBasis A Join tblPMEQPMaintenancePlan B On A.PMEQPSOPNo = B.PMEQPSOPNo" + " Join tblEQPEquipmentBasis C On B.EquipmentNo = C.EquipmentNo " + + // " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where B.PMEstDateTime <= To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') "; + //strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + ////cmmTemp = new IDbCommand(strSQL, cnnTemp); + ////daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + ////daTemp.Fill(dsTemp, "PMEQPMaintenancePlan"); + ////daTemp.Dispose(); + //ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQPMaintenancePlan", cnnTemp); + + //取出已到期的保養計劃(預估保養日PMEstDateTime-BeforehandDay <= Now), 若未設提前開單天數(BeforehandDay, 則BeforehandDay會是0) + strSQL = " Select A.*,B.EquipmentNo,B.PMSerialNo,B.PMEstDateTime,B.SerialNo,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName As PMSOPName_Basis" + + " From tblPMEQPTypeSOPBasis A Join tblPMEQPMaintenancePlan B On A.PMEQPSOPNo = B.PMEQPSOPNo" + " Join tblEQPEquipmentBasis C On B.EquipmentNo = C.EquipmentNo " + + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where (B.PMEstDateTime-Nvl(A.Beforehandday,0)) <= To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') "; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "PMEQPMaintenancePlan"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQPMaintenancePlan", cnnTemp); + + // 取出設備狀態互斥設定 + //cmmTemp.CommandText = "Select * From tblEMSViolateStatusChange"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "ViolateStatusChange"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSViolateStatusChange"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ViolateStatusChange", cnnTemp); + + // 組出應保養的設備List + foreach (DataRow row in dsTemp.Tables["PMEQPMaintenancePlan"].DefaultView.ToTable(true, "EquipmentNo").Rows) + EquipmentNoList = Conversions.ToString(EquipmentNoList + row["EquipmentNo"] + ","); + EquipmentNoList = EquipmentNoList.TrimEnd(','); + + // 取出各設備的EMSEquipmentState + //cmmTemp.CommandText = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "EMSEquipmentState"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "EMSEquipmentState", cnnTemp); + + // 2021/10/14 Mantis:0100751 當啟用系統參數:子設備管理,改變設備狀態時,需一併更新設備底下子設備的狀態 + strSQL = "Select PARAMETERVALUE from tblSYSParameter where PARAMETERNO = 'ChamberManage'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + ChamberManage = drTemp["PARAMETERVALUE"].ToString(); + } + drTemp.Dispose(); + + + // 依每筆設備保養標準作業程序來開立保養工單 + foreach (DataRow drEQPSOP in dsTemp.Tables["PMEQPMaintenancePlan"].DefaultView.ToTable(true, new[] { "PMEQPSOPNO", "AutoCreateWO", "CreateAndReleaseWO", "LockEquipment", "AutoEmail" }).Rows) + { + + colSQL.Clear(); + colSQL_Rows.Clear(); + + strWONo = "未開工單"; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPSOP["AutoCreateWO"], 1, false))) + { + blnAutoCreateWO = true; + } + else + { + blnAutoCreateWO = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPSOP["CreateAndReleaseWO"], 1, false))) + { + blnCreateAndReleaseWO = true; + } + else + { + blnCreateAndReleaseWO = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPSOP["LockEquipment"], 1, false))) // 變更機台狀態 + { + blnLockEquipment = true; + } + else + { + blnLockEquipment = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPSOP["AutoEmail"], 1, false))) // 是否要發送Mail + { + blnAutoEmail = true; + } + else + { + blnAutoEmail = false; + } + + foreach (DataRow drEQP in dsTemp.Tables["PMEQPMaintenancePlan"].Select(Conversions.ToString("PMEQPSOPNO = '" + drEQPSOP["PMEQPSOPNo"] + "'"))) + { + + if (string.IsNullOrEmpty(drEQP["PMSOPName_Basis"].ToString())) + { + if (!string.IsNullOrEmpty(strFailMsg)) + { + strFailMsg = Conversions.ToString(strFailMsg + Constants.vbCrLf + "[PMSOPBasis does not exist, PMSOPNo:" + + drEQP["PMSOPNo"] + "]"); + } + else + { + strFailMsg = Conversions.ToString("[PMSOPBasis does not exist, PMSOPNo:" + drEQP["PMSOPNo"] + "]"); + } + continue; + } + + // 設備狀態變更處理 + blnChkEQPState = true; //設備狀態檢核通過預設為通過, 只有要改變設備狀態且設備狀態互斥時才會被改為false + //沒有設提早開單且有要改變設備狀態的, 才做設備狀態變更 + if (Conversions.ToInteger(drEQP["BeforehandDay"]) == 0 && blnLockEquipment == true && !string.IsNullOrEmpty(drEQP["EquipmentState"].ToString())) + { + drSel = dsTemp.Tables["EMSEquipmentState"].Select(Conversions.ToString("EquipmentNo = '" + drEQP["EquipmentNo"] + "'")); + if (drSel.Length > 0) + { + // 狀態互斥則開工單但不下線 + if (dsTemp.Tables["ViolateStatusChange"].Select(Conversions.ToString("EquipmentState = " + + drSel[0]["EquipmentState"] + " And ViolativeState = " + drEQP["EquipmentState"])).Length > 0) + { + //continue; + blnChkEQPState = false; + } + + else + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drSel[0]["EquipmentState"], drEQP["EquipmentState"], false))) // 狀態不同才需改變設備狀態 + { + + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_EQPTypeSOPRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_EQPTypeSOPRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + drSel[0]["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') ," + + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + "UserNo = 'AutoRun'" + "Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + // 若開啟子設備管理,則須更新設備下子設備的設備狀態 + if (ChamberManage == "1") + { + strSQL = "Select EquipmentNo from tblEQPEquipmentBasis Where BELONGEQUIPMENTNO = '" + drEQP["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsChamber = new DataSet(); + //daTemp.Fill(dsChamber, "ChamberData"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsChamber, "ChamberData", cnnTemp); + foreach (DataRow dr in dsChamber.Tables["ChamberData"].Rows) + { + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo = '" + dr["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + // 設備狀態不同才變更 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drEQP["EquipmentState"], drTemp["EquipmentState"], false))) + { + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_EQPTypeSOPRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_EQPTypeSOPRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + + drTemp["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS') ," + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + + "UserNo = 'AutoRun'" + "Where EquipmentNo = '" + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + } + drTemp.Dispose(); + } + } + } + } + } + } + + // 2.保養工單開立處理 + if (blnAutoCreateWO == true) + { + + if (strWONo == "未開工單") + { + strWONo = InitPMWONo(); + intWOItemNo = 0; + strSQL = "Insert into tblPMWoBasis(WONo,WOType,IssueState,CreateDate,Creator,Description) " + + " Values ('" + strWONo + "'," + intWOType + ",2,To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'Auto Run','Auto Run Create')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + intWOItemNo += 1; + + // 保養工單開立及自動下線: 需為保養工單開立即下線且不為提前開單(BeforehandDay=0)的工單且設備狀態檢核通過才可直接下線 + if (blnCreateAndReleaseWO == true && Conversions.ToInteger(drEQP["BeforehandDay"]) == 0 && blnChkEQPState == true) + { + // 保養工單開立後直接下線, 狀態為2, ReleaseDate為目前時間 + strSQL = "Insert into tblPMWODetail(" + " WONo,WOItemNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,PMSOPNO,PMESTDATETIME,RELEASEDATE,WOStatus,SerialNo)" + " Values('" + + strWONo + "'," + intWOItemNo + "," + drEQP["PMSerialNo"] + ",'" + drEQP["EquipmentNo"] + "','" + drEQP["PMEQPSOPNo"] + "','" + drEQP["PMSOPNO"] + "'," + + " To_Date('" + Strings.Format(drEQP["PMESTDATETIME"], "yyyy/MM/dd") + "','YYYY/MM/DD')" + ", To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'), 2,'" + drEQP["SerialNo"] + "')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // ExecuteState=3表示已下線工單, WOReleaseDate為目前時間 + strSQL = "Insert into tblPMEQPMaintenancePlanLog(SerialNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,FrequencyNo,PMSOPNo,PMEstDateTime,Creator,CreateDate,Reviser,ReviseDate," + + "ExecuteState,PMWONo,PMWoItemNo,WOCreateDate,LogCreator,LogCreateDate,WOReleaseDate) " + + " Select SerialNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,FrequencyNo,PMSOPNo,PMEstDateTime,Creator,CreateDate," + " Reviser,ReviseDate,3,'" + strWONo + "'," + intWOItemNo + "," + + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'),'Auto Run'," + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'), " + + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') " + " From tblPMEQPMaintenancePlan " + " Where SerialNo='" + drEQP["SerialNo"] + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + else + { + // 保養工單開立後不直接下線, 狀態為1:待料, ReleaseDate為空 + strSQL = "Insert into tblPMWODetail(" + " WONo,WOItemNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,PMSOPNO,PMESTDATETIME,WOStatus,SerialNo)" + " Values('" + + strWONo + "'," + intWOItemNo + "," + drEQP["PMSerialNo"] + ",'" + drEQP["EquipmentNo"] + "','" + drEQP["PMEQPSOPNo"] + "','" + drEQP["PMSOPNO"] + "'," + + " To_Date('" + Strings.Format(drEQP["PMESTDATETIME"], "yyyy/MM/dd") + "','YYYY/MM/DD'),1,'" + drEQP["SerialNo"] + "')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // ExecuteState=2表示工單開立, WOReleaseDate為空 + strSQL = "Insert into tblPMEQPMaintenancePlanLog(SerialNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,FrequencyNo,PMSOPNo,PMEstDateTime,Creator,CreateDate,Reviser,ReviseDate," + + "ExecuteState,PMWONo,PMWoItemNo,WOCreateDate,LogCreator,LogCreateDate) " + + " Select SerialNo,PMSerialNo,EquipmentNo,PMEQPSOPNo,FrequencyNo,PMSOPNo,PMEstDateTime,Creator,CreateDate," + " Reviser,ReviseDate,2,'" + strWONo + "'," + intWOItemNo + "," + + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'),'Auto Run'," + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') " + + " From tblPMEQPMaintenancePlan " + " Where SerialNo='" + drEQP["SerialNo"] + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + // 清除PMEQPMaintancePlan資料 + strSQL = Conversions.ToString("Delete From tblPMEQPMaintenancePlan Where SerialNo='" + drEQP["SerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + // 3.Mail發送處理 + if (blnAutoEmail == true) + { + drAdd = dtSendMail.NewRow(); + drAdd["WONo"] = strWONo; + drAdd["EquipmentNo"] = drEQP["EquipmentNo"] + ""; + drAdd["EquipmentName"] = drEQP["EquipmentName"] + ""; + drAdd["FrequencyName"] = drEQP["FrequencyName"] + ""; + drAdd["PMSOPName"] = drEQP["PMSOPName"] + ""; + drAdd["EngineerGroupNo"] = drEQP["EngineerGroupNo"] + ""; + dtSendMail.Rows.Add(drAdd); + } + + // 4. 更新設備的PMEqupmentState + strSQL = Conversions.ToString("Update tblPMEquipmentState Set SincePMQty = 0, SincePMTimes = 0, LastPMDate = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + + dtSendMail = dtSendMail.DefaultView.ToTable(true, new[] { "WONo", "EquipmentNo", "FrequencyName", "PMSOPName", "EngineerGroupNo" }); + + foreach (DataRow rowGroupNo in dtSendMail.DefaultView.ToTable(true, "EngineerGroupNo").Rows) + { + strSendMailMSG = "

PM Work Order

"; + + foreach (DataRow row in dtSendMail.Select(Conversions.ToString("EngineerGroupNo = '" + rowGroupNo["EngineerGroupNo"] + "'"))) + { + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

WONo: " + row["WONo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

EquipemntNo: " + row["EquipmentNo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

PMSOPName: " + row["PMSOPName"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

FrequencyName: " + row["FrequencyName"] + "

"); + } + + if (!string.IsNullOrEmpty(strSendMailMSG)) + { + strSendMailMSG += ""; + string argFileName = "N/A"; + string argEmailSubject = "PM Work Order"; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, strSendMailMSG, Conversions.ToString(rowGroupNo["EngineerGroupNo"]), GroupType: (modAutoRunLibrary.GroupType)2); + } + } + + //當參數1「已開立工單逾保養日自動下線」的值為Y時,需查核透過 Auto Run 所自動開立的預防保養工單(tblPMWoBasis.Creator = Auto Run And tblPMWoBasis.WOType = 0), + //若已超過其預定保養日(PMEstDateTime),但該保養工單還未下線(包含這次所開立的保養工單及不排除提早開單的工單),則將該保養工單做下線, + //設備狀態則依該保養工單所對應的設備保養標準程序(PM201)中,所設定是否改變設備狀態,來決定要不要改變設備狀態,若設定要變更設備狀態,但設備狀態無法變更時,就不下線該保養工單。 + if (colParameters["Parameter01"].ToString() == "Y") + { + bool blnReleaseWO = true; + + datEventTime = DateTime.Now; + + //取出已到期的保養計劃(預估保養日PMEstDateTime <= Now) + strSQL = " Select A.*,B.EquipmentNo,B.SerialNo,C.LockEquipment, C.EquipmentState" + + " From tblPMWoDetail A Join tblPMWOBasis Basis On A.WONo = Basis.WONo" + + " Join tblPMEQPMaintenancePlanLog B On A.WONo = B.PMWONo" + + " Join tblPMEQPTypeSOPBasis C On B.PMEQPSOPNo = C.PMEQPSOPNo" + + " Where Basis.Creator = 'Auto Run' And A.WOStatus = 1 And B.PMEstDateTime < To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') "; + strSQL = SQLCommandTuning(strDataBaseType, ref strSQL); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "OverPMDate", cnnTemp); + + // 組出應保養的設備List + EquipmentNoList = ""; + foreach (DataRow row in dsTemp.Tables["OverPMDate"].DefaultView.ToTable(true, "EquipmentNo").Rows) + EquipmentNoList = Conversions.ToString(EquipmentNoList + row["EquipmentNo"] + ","); + EquipmentNoList = EquipmentNoList.TrimEnd(','); + + // 取出各設備的EMSEquipmentState + if (dsTemp.Tables["EMSEquipmentState"] != null) + { + dsTemp.Tables.Remove(dsTemp.Tables["EMSEquipmentState"]); + } + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "EMSEquipmentState", cnnTemp); + + foreach (DataRow row in dsTemp.Tables["OverPMDate"].Rows) + { + colSQL.Clear(); + colSQL_Rows.Clear(); + blnReleaseWO = true; + + if (row["LockEquipment"].ToString() == "1" && !string.IsNullOrEmpty(row["EquipmentState"].ToString())) //需改變設備狀態 + { + drSel = dsTemp.Tables["EMSEquipmentState"].Select("EquipmentNo = '" + row["EquipmentNo"] + "'"); + if (drSel.Length > 0) + { + // 設備狀態不相等且互斥則不可下線 + if (drSel[0]["EquipmentState"] != row["EquipmentState"] && dsTemp.Tables["ViolateStatusChange"].Select("EquipmentState = " + drSel[0]["EquipmentState"] + " And ViolativeState = " + row["EquipmentState"]).Length > 0) + { + blnReleaseWO = false; + } + } + } + + if (blnReleaseWO == true) + { + strSQL = "Update tblPMWODetail Set WOStatus = 2, ReleaseDate = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') Where WONo = '" + row["WONo"] + "' And WOItemNo = " + row["WOItemNo"]; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + strSQL = "Update tblPMEQPMaintenancePlanLog Set ExecuteState = 3, WOReleaseDate = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD') Where SerialNo = '" + row["SerialNo"] + "'"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + } + } + + if (!string.IsNullOrEmpty(strFailMsg)) + { + funPMWOAutoCreate_EQPTypeSOPRet = "fail;" + strFailMsg; + } + else + { + funPMWOAutoCreate_EQPTypeSOPRet = "success"; + } + } + + catch (Exception ex) + { + funPMWOAutoCreate_EQPTypeSOPRet = CombineFailMsg("0000-999999", ex.Message); + } + + finally + { + // //釋放資源 + if (dsTemp != null) + { + dsTemp.Dispose(); + dsTemp = null; + } + + //if (daTemp != null) + //{ + // daTemp.Dispose(); + // daTemp = null; + //} + + colSQL = null; + colSQL_Rows = null; + + // //Close Connection + CloseConnection(cnnTemp); + } + + return funPMWOAutoCreate_EQPTypeSOPRet; + + } + + private string funPMWOAutoCreate_FixedQty(Collection colParameters = null) + { + string funPMWOAutoCreate_FixedQtyRet = default(string); + + var cnnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var colSQL = new Collection(); + var colSQL_Rows = new Collection(); + var dsTemp = new DataSet(); + DataRow[] drSel; + + string strSQL; + string strWONo; + DateTime datEventTime; + + int intWOItemNo = 0; + bool blnAutoCreateWO, blnLockEquipment, blnAutoEmail; + DataRow drAdd; + var dtSendMail = BuildMailTable(); + string strSendMailMSG; + string EquipmentNoList = ""; + string strEQPSerialNo; + int intWOType = 2; // 定量保養工單 + + string strFailMsg = ""; + var dsChamber = new DataSet(); + string ChamberManage = defString; + DbDataReader drTemp; + try + { + datEventTime = DateTime.Now; + + cnnTemp = CreateConnection(strConnectionString); + + // 取出數量已到的設備(SincePMQty >= Quantity) + // 2019/12/5, Ning, 改用 Left Join tblPMSOPBasis + //2023/3/9,Ning,若有設定寬限數量(tblPMFixedQtyPMBasis.ToleranceQty<>0), 則改成取出已達寬限數量的設備(TypeCode:0 -> EquipmentNo ,1 -> EquipmentType) + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + " From tblPMFixedQtyPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + + " Where A.TypeCode = 0 And ((B.SincePMQty >= A.Quantity And A.ToleranceQty = 0) OR (B.SincePMQty >= A.ToleranceQty And A.ToleranceQty <> 0))"; + // strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " & + // " From tblPMFixedQtyPMBasis A,tblPMEquipmentState B,tblEQPEquipmentBasis C, tblPMSOPBasis D " & + // " Where A.TypeCode = 0 And A.EquipmentNo = B.EquipmentNo And B.EquipmentNo = C.EquipmentNo And A.PMSOPNo = D.PMSOPNo" & + // " And B.SincePMQty >= A.Quantity " + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "PMEQP"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQP", cnnTemp); + + // 取出設備狀態互斥設定 + //cmmTemp.CommandText = "Select * From tblEMSViolateStatusChange"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "ViolateStatusChange"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSViolateStatusChange"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ViolateStatusChange", cnnTemp); + + // 組出應保養的設備List + foreach (DataRow drEQP in dsTemp.Tables["PMEQP"].Rows) + EquipmentNoList = Conversions.ToString(EquipmentNoList + drEQP["EquipmentNo"] + ","); + EquipmentNoList = EquipmentNoList.TrimEnd(','); + + // 取出各設備的EMSEquipmentState + //cmmTemp.CommandText = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "EMSEquipmentState"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "EMSEquipmentState", cnnTemp); + + strSQL = "Select PARAMETERVALUE from tblSYSParameter where PARAMETERNO = 'ChamberManage'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + ChamberManage = drTemp["PARAMETERVALUE"].ToString(); + } + drTemp.Dispose(); + + // 依每筆設備的定量保養設定來開立保養工單(同一設備類別開一張保養工單) + foreach (DataRow drEQPType in dsTemp.Tables["PMEQP"].DefaultView.ToTable(true, new[] { "EquipmentType", "AutoCreateWO", "LockEquipment", "AutoEmail" }).Rows) + { + + colSQL.Clear(); + colSQL_Rows.Clear(); + + strWONo = "未開工單"; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["AutoCreateWO"], 1, false))) + { + blnAutoCreateWO = true; + } + else + { + blnAutoCreateWO = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["LockEquipment"], 1, false))) // 變更機台狀態 + { + blnLockEquipment = true; + } + else + { + blnLockEquipment = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["AutoEmail"], 1, false))) // 是否要發送Mail + { + blnAutoEmail = true; + } + else + { + blnAutoEmail = false; + } + + foreach (DataRow drEQP in dsTemp.Tables["PMEQP"].Select(Conversions.ToString("EquipmentType = '" + drEQPType["EquipmentType"] + "'"))) + { + + if (string.IsNullOrEmpty(drEQP["PMSOPName"].ToString())) + { + if (!string.IsNullOrEmpty(strFailMsg)) + { + strFailMsg = Conversions.ToString(strFailMsg + Constants.vbCrLf + "[PMSOPBasis does not exist, PMSOPNo:" + + drEQP["PMSOPNo"] + "]"); + } + else + { + strFailMsg = Conversions.ToString("[PMSOPBasis does not exist, PMSOPNo:" + drEQP["PMSOPNo"] + "]"); + } + continue; + } + + // 設備狀態變更處理 + if (blnLockEquipment == true && !string.IsNullOrEmpty(drEQP["EquipmentState"].ToString())) + { + + drSel = dsTemp.Tables["EMSEquipmentState"].Select(Conversions.ToString("EquipmentNo = '" + drEQP["EquipmentNo"] + "'")); + if (drSel.Length > 0) + { + // 狀態互斥則續下筆 + if (dsTemp.Tables["ViolateStatusChange"].Select(Conversions.ToString("EquipmentState = " + + drSel[0]["EquipmentState"] + " And ViolativeState = " + drEQP["EquipmentState"])).Length > 0) + { + continue; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drSel[0]["EquipmentState"], drEQP["EquipmentState"], false))) // 狀態不同才需改變設備狀態 + { + + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_FixedQtyRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_FixedQtyRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + drSel[0]["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState, 以EquipmentState做RowCount查核 + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') ," + + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + "UserNo = 'AutoRun'" + "Where EquipmentNo = '" + drEQP["EquipmentNo"] + + "' And EquipmentState = " + drSel[0]["EquipmentState"]); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + // 若開啟子設備管理,則須更新設備下子設備的設備狀態 + if (ChamberManage == "1") + { + strSQL = "Select EquipmentNo from tblEQPEquipmentBasis Where BELONGEQUIPMENTNO = '" + drEQP["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + dsChamber = new DataSet(); + //daTemp.Fill(dsChamber, "ChamberData"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsChamber, "ChamberData", cnnTemp); + foreach (DataRow dr in dsChamber.Tables["ChamberData"].Rows) + { + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo = '" + dr["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + // 設備狀態不同才變更 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drEQP["EquipmentState"], drTemp["EquipmentState"], false))) + { + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_FixedQtyRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_FixedQtyRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + + drTemp["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS') ," + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + "UserNo = 'AutoRun'" + + "Where EquipmentNo = '" + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + } + drTemp.Dispose(); + } + } + } + } + } + + // 2.保養工單開立處理 + if (blnAutoCreateWO == true) + { + + if (strWONo == "未開工單") + { + strWONo = InitPMWONo(); + intWOItemNo = 0; + strSQL = "Insert into tblPMWoBasis(WONo,WOType,IssueState,CreateDate,Creator,Description) " + " Values ('" + strWONo + "'," + intWOType + ",2,To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'Auto Run','Auto Run Create')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + intWOItemNo += 1; + + // 保養工單開立後直接下線, WOStatus = 2 + // 2020/4/29, Ning, 保養工單開立後不直接下線, 狀態為1:待料 + strSQL = "Insert into tblPMWODetail(WONo,WOItemNo,PMSerialNo,EquipmentNo,PMSOPNO,PMESTDATETIME,WOStatus) Values('" + + strWONo + "'," + intWOItemNo + "," + intWOItemNo + ",'" + drEQP["EquipmentNo"] + "','" + drEQP["PMSOPNO"] + "'," + + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'),1)"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + // 3.Mail發送處理 + if (blnAutoEmail == true) + { + drAdd = dtSendMail.NewRow(); + drAdd["WONo"] = strWONo; + drAdd["EquipmentNo"] = drEQP["EquipmentNo"] + ""; + drAdd["EquipmentName"] = drEQP["EquipmentName"] + ""; + drAdd["PMSOPName"] = drEQP["PMSOPName"] + ""; + drAdd["EngineerGroupNo"] = drEQP["EngineerGroupNo"] + ""; + dtSendMail.Rows.Add(drAdd); + } + + // 4. 更新設備的PMEqupmentState + strSQL = Conversions.ToString("Update tblPMEquipmentState Set SincePMQty = 0, SincePMTimes = 0, LastPMDate = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + + dtSendMail = dtSendMail.DefaultView.ToTable(true, new[] { "WONo", "EquipmentNo", "PMSOPName", "EngineerGroupNo" }); + + foreach (DataRow rowGroupNo in dtSendMail.DefaultView.ToTable(true, "EngineerGroupNo").Rows) + { + strSendMailMSG = "

Fixed Qty Work Order

"; + + foreach (DataRow row in dtSendMail.Select(Conversions.ToString("EngineerGroupNo = '" + rowGroupNo["EngineerGroupNo"] + "'"))) + { + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

WONo: " + row["WONo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

EquipemntNo: " + row["EquipmentNo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

PMSOPName: " + row["PMSOPName"] + "

"); + } + + if (!string.IsNullOrEmpty(strSendMailMSG)) + { + strSendMailMSG += ""; + string argFileName = "N/A"; + string argEmailSubject = "Fixed Qty Work Order"; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, strSendMailMSG, Conversions.ToString(rowGroupNo["EngineerGroupNo"]), GroupType: (modAutoRunLibrary.GroupType)2); + } + } + + if (!string.IsNullOrEmpty(strFailMsg)) + { + funPMWOAutoCreate_FixedQtyRet = "fail;" + strFailMsg; + } + else + { + funPMWOAutoCreate_FixedQtyRet = "success"; + } + } + + catch (Exception ex) + { + funPMWOAutoCreate_FixedQtyRet = CombineFailMsg("0000-999999", ex.Message + ",StackTrace:" + ex.StackTrace + "]"); + } + finally + { + // //釋放資源 + if (dsTemp != null) + { + dsTemp.Dispose(); + dsTemp = null; + } + + //if (daTemp != null) + //{ + // daTemp.Dispose(); + // daTemp = null; + //} + + colSQL = null; + colSQL_Rows = null; + + // //Close Connection + CloseConnection(cnnTemp); + } + + return funPMWOAutoCreate_FixedQtyRet; + + } + + private string funPMWOAutoCreate_FixedTimes(Collection colParameters = null) + { + string funPMWOAutoCreate_FixedTimesRet = default(string); + + var cnnTemp = default(IDbConnection); + //var daTemp = default(System.Data.OleDb.OleDbDataAdapter); + + var colSQL = new Collection(); + var colSQL_Rows = new Collection(); + var dsTemp = new DataSet(); + DataRow[] drSel; + var dsChamber = new DataSet(); + string strSQL; + string strWONo; + DateTime datEventTime; + + int intWOItemNo = 0; + bool blnAutoCreateWO, blnLockEquipment, blnAutoEmail; + DataRow drAdd; + var dtSendMail = BuildMailTable(); + string strSendMailMSG; + string EquipmentNoList = ""; + string strEQPSerialNo; + int intWOType = 3; // 定次定時保養工單 + + string strFailMsg = ""; + string ChamberManage = defString; + DbDataReader drTemp; + try + { + datEventTime = DateTime.Now; + + cnnTemp = CreateConnection(strConnectionString); + + // 取出定次(QtyType = 0)已到的設備(SincePMTimes >= Quantity) + // 2019/12/5, Ning, 改用 Left Join tblPMSOPBasis + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + " From tblPMFixedTimesPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + + " Where A.QtyType = 0 And A.TypeCode = 0 And ((B.SincePMTimes >= A.Quantity And A.ToleranceQty = 0) OR (B.SincePMTimes >= A.ToleranceQty And A.ToleranceQty <> 0))"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "PMEQP"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQP", cnnTemp); + + // 取出定時(QtyType = 1, Hours)已到的設備(上次保養至今 >= Quantity) + if (strDataBaseType == "oracle") + { + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + " From tblPMFixedTimesPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where A.QtyType = 1 And A.TypeCode = 0" + + " And ((B.LastPMDate Is Not Null And (To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') - LastPMDate) * 24 >= A.Quantity And A.ToleranceQty = 0) OR" + + " (B.LastPMDate Is Not Null And (To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') - LastPMDate) * 24 >= A.ToleranceQty And A.ToleranceQty <> 0))"; + } + else if (Conversions.ToBoolean(Operators.OrObject(strDataBaseType == "mssql", Operators.ConditionalCompareObjectEqual(DataBaseType, "msaccess", false)))) // SQL與Access語法相同 + { + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + + " From tblPMFixedTimesPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where A.QtyType = 1 And A.TypeCode = 0" + + " And ((B.LastPMDate Is Not Null And DateDiff(hh, LastPMDate, '" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "') >= A.Quantity And A.ToleranceQty = 0) OR" + + " (B.LastPMDate Is Not Null And DateDiff(hh, LastPMDate, '" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "') >= A.ToleranceQty And A.ToleranceQty <> 0))"; + } + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "PMEQP"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQP", cnnTemp); + + // 取出定時(QtyType = 2, Minutes)已到的設備(上次保養至今 >= Quantity) + if (strDataBaseType == "oracle") + { + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + " From tblPMFixedTimesPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where A.QtyType = 2 And A.TypeCode = 0" + + " And ((B.LastPMDate Is Not Null And (To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') - LastPMDate)*24*60 >= A.Quantity And A.ToleranceQty = 0) OR" + + " (B.LastPMDate Is Not Null And (To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') - LastPMDate)*24*60 >= A.ToleranceQty And A.ToleranceQty <> 0))"; + } + else if (Conversions.ToBoolean(Operators.OrObject(strDataBaseType == "mssql", Operators.ConditionalCompareObjectEqual(DataBaseType, "msaccess", false)))) // SQL與Access語法相同 + { + strSQL = " Select A.*,B.EquipmentNo,B.SincePMQty,C.EquipmentName,C.EngineerGroupNo,D.PMSOPName " + " From tblPMFixedTimesPMBasis A Join tblPMEquipmentState B On A.EquipmentNo = B.EquipmentNo" + + " Join tblEQPEquipmentBasis C On A.EquipmentNo = C.EquipmentNo" + " Left Join tblPMSOPBasis D On A.PMSOPNo = D.PMSOPNo" + " Where A.QtyType = 2 And A.TypeCode = 0" + + " And ((B.LastPMDate Is Not Null And DateDiff(mi, LastPMDate, '" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "') >= A.Quantity And A.ToleranceQty = 0) OR" + + " (B.LastPMDate Is Not Null And DateDiff(mi, LastPMDate, '" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "') >= A.ToleranceQty And A.ToleranceQty <> 0))"; + } + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "PMEQP"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "PMEQP", cnnTemp); + + // 取出設備狀態互斥設定 + //cmmTemp.CommandText = "Select * From tblEMSViolateStatusChange"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "ViolateStatusChange"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSViolateStatusChange"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ViolateStatusChange", cnnTemp); + + // 組出應保養的設備List + foreach (DataRow drEQP in dsTemp.Tables["PMEQP"].Rows) + EquipmentNoList = Conversions.ToString(EquipmentNoList + drEQP["EquipmentNo"] + ","); + EquipmentNoList = EquipmentNoList.TrimEnd(','); + + // 取出各設備的EMSEquipmentState + //cmmTemp.CommandText = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dsTemp, "EMSEquipmentState"); + //daTemp.Dispose(); + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo In ('" + Strings.Replace(EquipmentNoList, ",", "','") + "')"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "EMSEquipmentState", cnnTemp); + + // 2021/10/14 Mantis:0100751 當啟用系統參數:子設備管理,改變設備狀態時,需一併更新設備底下子設備的狀態 + strSQL = "Select PARAMETERVALUE from tblSYSParameter where PARAMETERNO = 'ChamberManage'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + ChamberManage = drTemp["PARAMETERVALUE"].ToString(); + } + drTemp.Dispose(); + + + // 依每筆設備的定量保養設定來開立保養工單(同一設備類別開一張保養工單) + foreach (DataRow drEQPType in dsTemp.Tables["PMEQP"].DefaultView.ToTable(true, new[] { "EquipmentType", "AutoCreateWO", "LockEquipment", "AutoEmail" }).Rows) + { + + colSQL.Clear(); + colSQL_Rows.Clear(); + + strWONo = "未開工單"; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["AutoCreateWO"], 1, false))) + { + blnAutoCreateWO = true; + } + else + { + blnAutoCreateWO = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["LockEquipment"], 1, false))) // 變更機台狀態 + { + blnLockEquipment = true; + } + else + { + blnLockEquipment = false; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drEQPType["AutoEmail"], 1, false))) // 是否要發送Mail + { + blnAutoEmail = true; + } + else + { + blnAutoEmail = false; + } + + foreach (DataRow drEQP in dsTemp.Tables["PMEQP"].Select(Conversions.ToString("EquipmentType = '" + drEQPType["EquipmentType"] + "'"))) + { + + if (string.IsNullOrEmpty(drEQP["PMSOPName"].ToString())) + { + if (!string.IsNullOrEmpty(strFailMsg)) + { + strFailMsg = Conversions.ToString(strFailMsg + Constants.vbCrLf + "[PMSOPBasis does not exist, PMSOPNo:" + + drEQP["PMSOPNo"] + "]"); + } + else + { + strFailMsg = Conversions.ToString("[PMSOPBasis does not exist, PMSOPNo:" + drEQP["PMSOPNo"] + "]"); + } + continue; + } + + // 設備狀態變更處理 + if (blnLockEquipment == true && !string.IsNullOrEmpty(drEQP["EquipmentState"].ToString())) + { + + drSel = dsTemp.Tables["EMSEquipmentState"].Select(Conversions.ToString("EquipmentNo = '" + drEQP["EquipmentNo"] + "'")); + if (drSel.Length > 0) + { + // 狀態互斥則續下筆 + if (dsTemp.Tables["ViolateStatusChange"].Select(Conversions.ToString("EquipmentState = " + + drSel[0]["EquipmentState"] + " And ViolativeState = " + drEQP["EquipmentState"])).Length > 0) + { + continue; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drSel[0]["EquipmentState"], drEQP["EquipmentState"], false))) // 狀態不同才需改變設備狀態 + { + + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_FixedTimesRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_FixedTimesRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + drSel[0]["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState, 以EquipmentState做RowCount查核 + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') ," + + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + "UserNo = 'AutoRun'" + "Where EquipmentNo = '" + drEQP["EquipmentNo"] + + "' And EquipmentState = " + drSel[0]["EquipmentState"]); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + // 若開啟子設備管理,則須更新設備下子設備的設備狀態 + if (ChamberManage == "1") + { + strSQL = "Select EquipmentNo from tblEQPEquipmentBasis Where BELONGEQUIPMENTNO = '" + drEQP["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //dsChamber = new DataSet(); + //daTemp.Fill(dsChamber, "ChamberData"); + //daTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dsChamber, "ChamberData", cnnTemp); + foreach (DataRow dr in dsChamber.Tables["ChamberData"].Rows) + { + strSQL = "Select * From tblEMSEquipmentState Where EquipmentNo = '" + dr["EquipmentNo"].ToString() + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + // 設備狀態不同才變更 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drEQP["EquipmentState"], drTemp["EquipmentState"], false))) + { + strEQPSerialNo = InitEQPSerialNo(); + + if (strEQPSerialNo == "fail") + { + funPMWOAutoCreate_FixedTimesRet = "fail;[Get InitEQPSerialNo fail]"; + return funPMWOAutoCreate_FixedTimesRet; + } + + // Del Same EQPSerialNo + strSQL = Conversions.ToString("Delete tblEMSEquipmentStateLog Where EQPSerialNo = '" + + drTemp["EQPSerialNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(-1); + + // Add EMSEquipmentStateLog + strSQL = Conversions.ToString(" Insert into tblEMSEquipmentStateLog (EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,EndTime,Description) " + " Select EQPSerialNo,EquipmentNo,EquipmentState,EquipmentType,UserNo,StartTime,To_Date('" + Strings.Format(Conversions.ToDate(datEventTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),Description " + " From tblEMSEquipmentState " + " Where EquipmentNo = '" + + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + // 更新EMSEquipmentState + strSQL = Conversions.ToString("Update tblEMSEquipmentState Set " + "EquipmentState = " + + drEQP["EquipmentState"] + "," + "StartTime = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + + "','YYYY/MM/DD HH24:MI:SS') ," + "EQPSerialNo = '" + strEQPSerialNo + "'," + "Description ='AutoRun'," + "UserNo = 'AutoRun'" + + "Where EquipmentNo = '" + drTemp["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + } + drTemp.Dispose(); + } + } + } + } + } + + // 2.保養工單開立處理 + if (blnAutoCreateWO == true) + { + + if (strWONo == "未開工單") + { + strWONo = InitPMWONo(); + intWOItemNo = 0; + strSQL = "Insert into tblPMWoBasis(WONo,WOType,IssueState,CreateDate,Creator,Description) " + " Values ('" + strWONo + "'," + intWOType + ",2,To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'),'Auto Run','Auto Run Create')"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + intWOItemNo += 1; + + // 保養工單開立後直接下線, WOStatus = 2 + // 2020/4/29, Ning, 保養工單開立後不直接下線, 狀態為1:待料 + strSQL = "Insert into tblPMWODetail(WONo,WOItemNo,PMSerialNo,EquipmentNo,PMSOPNO,PMESTDATETIME,WOStatus) Values('" + + strWONo + "'," + intWOItemNo + "," + intWOItemNo + ",'" + drEQP["EquipmentNo"] + "','" + drEQP["PMSOPNO"] + "'," + + " To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd") + "','YYYY/MM/DD'),1)"; + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + + } + + // 3.Mail發送處理 + if (blnAutoEmail == true) + { + drAdd = dtSendMail.NewRow(); + drAdd["WONo"] = strWONo; + drAdd["EquipmentNo"] = drEQP["EquipmentNo"] + ""; + drAdd["EquipmentName"] = drEQP["EquipmentName"] + ""; + drAdd["PMSOPName"] = drEQP["PMSOPName"] + ""; + drAdd["EngineerGroupNo"] = drEQP["EngineerGroupNo"] + ""; + dtSendMail.Rows.Add(drAdd); + } + + // 4. 更新設備的PMEqupmentState + strSQL = Conversions.ToString("Update tblPMEquipmentState Set SincePMQty = 0, SincePMTimes = 0, LastPMDate = To_Date('" + Strings.Format(datEventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')" + " Where EquipmentNo = '" + + drEQP["EquipmentNo"] + "'"); + colSQL.Add(strSQL); + colSQL_Rows.Add(1); + } + + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL, colSQL_Rows); + } + + dtSendMail = dtSendMail.DefaultView.ToTable(true, new[] { "WONo", "EquipmentNo", "PMSOPName", "EngineerGroupNo" }); + + foreach (DataRow rowGroupNo in dtSendMail.DefaultView.ToTable(true, "EngineerGroupNo").Rows) + { + strSendMailMSG = "

Fixed Times Work Order

"; + + foreach (DataRow row in dtSendMail.Select(Conversions.ToString("EngineerGroupNo = '" + rowGroupNo["EngineerGroupNo"] + "'"))) + { + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

WONo: " + row["WONo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

EquipemntNo: " + row["EquipmentNo"] + "

"); + strSendMailMSG = Conversions.ToString(strSendMailMSG + "

PMSOPName: " + row["PMSOPName"] + "

"); + } + + if (!string.IsNullOrEmpty(strSendMailMSG)) + { + strSendMailMSG += ""; + string argFileName = "N/A"; + string argEmailSubject = "Fixed Times Work Order"; + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, strSendMailMSG, Conversions.ToString(rowGroupNo["EngineerGroupNo"]), GroupType: (modAutoRunLibrary.GroupType)2); + } + } + + if (!string.IsNullOrEmpty(strFailMsg)) + { + funPMWOAutoCreate_FixedTimesRet = "fail;" + strFailMsg; + } + else + { + funPMWOAutoCreate_FixedTimesRet = "success"; + } + } + + catch (Exception ex) + { + funPMWOAutoCreate_FixedTimesRet = CombineFailMsg("0000-999999", ex.Message); + } + + finally + { + // //釋放資源 + if (dsTemp != null) + { + dsTemp.Dispose(); + dsTemp = null; + } + + //if (daTemp != null) + //{ + // daTemp.Dispose(); + // daTemp = null; + //} + + colSQL = null; + colSQL_Rows = null; + + // //Close Connection + CloseConnection(cnnTemp); + } + + return funPMWOAutoCreate_FixedTimesRet; + + } + + private DataTable BuildMailTable() + { + DataTable BuildMailTableRet = default(DataTable); + + var dtMail = new DataTable("SendMail"); + + dtMail.Columns.Add("WONo", typeof(string)); + dtMail.Columns.Add("EquipmentNo", typeof(string)); + dtMail.Columns.Add("EquipmentName", typeof(string)); + dtMail.Columns.Add("EngineerGroupNo", typeof(string)); + dtMail.Columns.Add("PMSOPName", typeof(string)); + + // SOPBasis + dtMail.Columns.Add("FrequencyName", typeof(string)); + + + BuildMailTableRet = dtMail; + return BuildMailTableRet; + + } + + private string InitPMWONo() + { + string InitPMWONoRet = default(string); + // 傳入值: 無 + // 傳回值: InitPMEQPSOPNo(成功),fail(失敗), + + object SerialNo; + var cnnTemp = default(IDbConnection); + var intSerial = default(int); + var strMaxNo = default(string); + string strSQL; + + + try + { + // //Create connection + cnnTemp = CreateConnection(strConnectionString); + + strSQL = "Select Max(WONo) From (select WONo from TBLPMWOBASIS union select WONo from TBLPMWOBASIS_HIS) A Where WONo like 'EW________'"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + SerialNo = ExecuteSQLQuery_Scalar(strSQL, cnnTemp); + if (SerialNo == null) + { + intSerial = 1; + } + else if (SerialNo is DBNull) + { + intSerial = 1; + } + else + { + strMaxNo = Conversions.ToString(SerialNo); + } + //cmmTemp.Dispose(); + + if (intSerial != 1) + { + // 取出序號 + intSerial = Conversions.ToInteger(Strings.Mid(strMaxNo, 7, 4)); + if (intSerial == 9999 || Conversions.ToInteger(Strings.Mid(strMaxNo, 5, 2)) != Thread.CurrentThread.CurrentCulture.Calendar.GetMonth(DateTime.Now)) + { + intSerial = 1; + } + else + { + intSerial = intSerial + 1; + } + } + + InitPMWONoRet = "EW" + Strings.Mid(Thread.CurrentThread.CurrentCulture.Calendar.GetYear(DateTime.Now).ToString(), 3, 2) + Strings.Format(Thread.CurrentThread.CurrentCulture.Calendar.GetMonth(DateTime.Now), "00") + Strings.Format(intSerial, "0000"); + } + + catch (Exception e1) + { + InitPMWONoRet = "fail"; + throw; + } // New Exception("kcPM.InitPMWONo: " & e1.Message) + + finally + { + CloseConnection(cnnTemp); + } + + return InitPMWONoRet; + + } + + public string InitEQPSerialNo() + { + string InitEQPSerialNoRet = default(string); + // 傳入值: 無 + // 傳回值: String(成功),fail(失敗) + // 2016-07-22, Joe, 調整原取EQPSerialNo的方式,改為日期+ThreadID + + // 2017/10/25 OwenLiu, 調整取EQPSerialNo的方式,改為日期+ThreadID+亂數 + // 編碼格式: [yyMMddHHmmssfff][ThreadId][nnn] + // yyMMddHHmmssfff : 取號當下的日期時間+3碼毫秒 + // ThreadId : 執行序Id(2碼數字),自動補0 + // nnn: 1~999 的隨機亂數(3碼數字),自動補0 + + string SerialNo; + short intUpperBound = 1; // 亂數的最小值 + short intLowerBound = 999; // 亂數的最大值 + short intRandomValue = 0; + var datEventTime = DateTime.Now; + + InitEQPSerialNoRet = defString; + + try + { + VBMath.Randomize(); + intRandomValue = Convert.ToInt16(Math.Floor((intUpperBound - intLowerBound + 1) * VBMath.Rnd()) + intLowerBound); + + // SerialNo = Format(Now, "yyMMddHHmmssfff") & Right(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString, 3).PadLeft(3, "0") & "01" + SerialNo = datEventTime.ToString("yyMMddHHmmssfff"); + SerialNo += Strings.Right(Thread.CurrentThread.ManagedThreadId.ToString(), 2).PadLeft(2, '0'); + SerialNo += intRandomValue.ToString("000"); + + InitEQPSerialNoRet = SerialNo; + } + catch (Exception e1) + { + InitEQPSerialNoRet = "fail"; + throw; + } + + finally + { + } + + return InitEQPSerialNoRet; + + } + + #endregion + + #region ---自動下工排程作業--- + + private string funAutoClockOut(Collection colParameters = null) + { + string funAutoClockOutRet = default(string); + + var CollectionSQL = new Collection(); + string strSQL = string.Empty; + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + IDbConnection cn = null; + int intShiftCount = 0; + string[] strShiftName = new string[] { }; + var strShiftSplit = default(string[]); + var strShiftInput = default(string); + var dbClockOutTime = default(double); + string argstrConnectionString = Conversions.ToString(ConnectionString); + try + { + cn = CreateConnection(argstrConnectionString); + + string strTemp = ""; + // Parameter01:班別 + // Parameter02:自動下工時間 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + } + else + { + strTemp = Strings.Trim(Conversions.ToString(colParameters["Parameter01"])).ToUpper(); + strShiftInput = Convert.ToString(strTemp); + } + + if (colParameters["Parameter02"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + } + else + { + strTemp = Strings.Trim(Conversions.ToString(colParameters["Parameter02"])).ToUpper(); + if (modAutoRunLibrary.funChkNumericIsValid(pSourceText: strTemp, AllowMinus: false, AllowZeroValue: false, AllowFloat: true, AllowContainsDot: true)) + { + if (Convert.ToDouble(strTemp) >= 0d) + { + dbClockOutTime = Convert.ToDouble(strTemp); + } + else + { + dbClockOutTime = 0.5d; + } + } + else + { + throw new Exception("Parameter02(ClockOutTime) is not valid Nnumeric data!"); + } + } + // ------------------------------------------------ + if (strShiftInput != "*") + { + strShiftSplit = strShiftInput.Split(','); + } + + strSQL = "Select DISTINCT A.ShiftNo From tblUSRShiftBasis A " + " Where(to_char(sysdate,'HH24:MI:SS') < to_char(fromtime,'HH24:MI:SS') Or to_char(sysdate,'HH24:MI:SS') > to_char(totime+" + dbClockOutTime.ToString() + "/24,'HH24:MI:SS') and to_char(totime,'HH24:MI:SS')> to_char(fromtime,'HH24:MI:SS') ) " + " Or (to_char(sysdate,'HH24:MI:SS') < to_char(fromtime,'HH24:MI:SS') And to_char(sysdate,'HH24:MI:SS') > to_char(totime+" + dbClockOutTime.ToString() + "/24,'HH24:MI:SS') and to_char(totime,'HH24:MI:SS')< to_char(fromtime,'HH24:MI:SS') ) "; + + + string argDataBaseType = Conversions.ToString(DataBaseType); + //cmd.CommandText = SQLCommandTuning(argDataBaseType, ref strSQL); + + using (var dr = ExecuteSQLQuery_Reader(SQLCommandTuning(argDataBaseType, ref strSQL), cn)) + { + if (strShiftInput != "*") + { + while (dr.Read()) + { + foreach (var objShiftNo in strShiftSplit) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(objShiftNo, dr["ShiftNo"].ToString(), false))) + { + Array.Resize(ref strShiftName, intShiftCount + 1); + strShiftName[intShiftCount] = dr["ShiftNo"].ToString(); + intShiftCount += 1; + } + } + } + } + else + { + while (dr.Read()) + { + Array.Resize(ref strShiftName, intShiftCount + 1); + strShiftName[intShiftCount] = dr["ShiftNo"].ToString(); + intShiftCount += 1; + } + } + } + + strSQL = " Select 1 As CheckFlag, A.* From tblWIPOperatorState A Where 1 = 1 "; + if (strShiftName.Length - 1 >= 0) + { + strSQL += " And A.ShiftNo = '" + strShiftName[0] + "' "; + intShiftCount += 1; + } + + if (strShiftName.Length - 1 > 0) + { + var loopTo = strShiftName.Length - 1; + for (intShiftCount = 1; intShiftCount <= loopTo; intShiftCount++) + strSQL += " Or A.ShiftNo = '" + strShiftName[intShiftCount] + "' "; + } + + + string argDataBaseType1 = Conversions.ToString(DataBaseType); + //cmd.CommandText = SQLCommandTuning(argDataBaseType1, ref strSQL); + using (var dr = ExecuteSQLQuery_Reader(SQLCommandTuning(argDataBaseType1, ref strSQL), cn)) + { + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + while (dr.Read()) + { + + string argvalue_name = "userno"; + string argname = "UserNo"; + string argtype = "String"; + string argvalue = CInput(dr["UserNo"].ToString()); + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, argvalue, argdesc); + // 2018/01/04 OwenLiu, 登出時間改用介面上的時間(員工登入時的AP Server時間) + string argvalue_name1 = "logoutdate"; + string argname1 = "LogoutDate"; + string argtype1 = "Date"; + string argvalue1 = Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss"); + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, argvalue1, argdesc1); + // strParameter += CombineXMLParameter("logoutdate", "LogoutDate", "Date", Format(Now, "yyyy/MM/dd HH:mm:ss"), "") + string argvalue_name2 = "loginplaceno"; + string argname2 = "LoginPlaceNo"; + string argtype2 = "String"; + string argvalue2 = CInput(dr["LoginPlaceNo"].ToString()); + string argdesc2 = ""; + strParameter += CombineXMLParameter(argvalue_name2, argname2, argtype2, argvalue2, argdesc2); + string argvalue_name3 = "multioperatormode"; + string argname3 = "MultiOperatorMode"; + string argtype3 = "Integer"; + var tmp = dr; + string argvalue3 = Conversions.ToString(tmp["MultiOperatorMode"]); + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, argvalue3, argdesc3); + + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRunLibrary.InvokeSrv("wsWIP_OperatorState.ExecuteClockOut", InXml); + + XmlDoc.LoadXml(OutXml); + } + } + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + + catch (Exception ex) + { + // 錯誤訊息: 截取錯誤訊息+換行符號 + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + finally + { + CloseConnection(cn); + } + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funAutoClockOutRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funAutoClockOutRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funAutoClockOutRet; + } + + #endregion + + #region GuardServer + + private string funGuardServerSync(Collection colParameters = null) + { + string funGuardServerSyncRet = default(string); + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + string path; + + try + { + path = modAutoRunLibrary.InvokeSrv_GuardServer(); + + var gsInfo = GuardServerProvider.Methods.GuardServerSchedule.ExecuteImplement(path); + + if (gsInfo.Status != GuardServerProvider.Class.LicenseCode.OK && gsInfo.Status != GuardServerProvider.Class.LicenseCode.NotUseGuardServer) + { + strReturnMessage += gsInfo.Message; + } + } + catch (Exception ex) + { + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funGuardServerSyncRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funGuardServerSyncRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funGuardServerSyncRet; + + } + + #endregion + + + #region SDD201222_01 設備點檢支援可設定頻率 + + // 預開設備點檢單 + // 1. 取出設備主檔(EP104)中已核准,且有設定點檢表的設備,依設備編號由小到大排序後,查核該設備當天是否需要預開點檢單。 + // 2. 設備在執行查核是否要預開單前,需先將該設備在tblWIPEQPQCTask(生產設備檢驗任務表)中,狀態為1:已驗及2:待補檢的設備點檢單(Status in (1,2) and QCTaskClass=1)做刪除,(排除BelongDate=CurrentDate的) + // 但待補檢的設備點檢單,需在設備線上點檢歷程(tblWIPEQPQCListLog),新增一筆該設備點檢單的記錄,檢驗結果填 -1(tblWIPEQPQCListLog.QCResult = -1)。 + // 3. 當該設備所設定的點檢頻率是,「每班檢」或「每日檢」時,才需要做預開單 + // 4. 若該設備當天的點檢單,都已預先開立完成(tblWIPEQPQCTask內已有當天該設備點檢頻率的點檢單),則當天就不需再開立,也就是每種點檢頻率,一天只需預開一張點檢單。 + // 5. 點檢頻率是「每班檢」時,依該設備所屬區域對應的部門,查出該部門的所有的班別,每一個班別就預開一張設備點檢單。 + // 6. 點檢頻率是「每日檢」時,依所設定每日檢的起始時間,預開一張設備點檢單。 + // 7. 預先開立的設備點檢單,檢驗任務編號,請比照取得 EQPSerialNo的方式(以 GUID 的方式)取得, + // 檢驗任務分類是設備點檢,狀態是未驗(Status=0),並需壓上預計執行時間,寫入tabletblWIPEQPQCTask(生產設備檢驗任務表)。 + // 8. 預開點檢單的預計執行時間,就是該點檢單的點檢頻率時間+當天的日期, + // 每班檢的點檢單預計執行時間,就以該點檢單是哪個班別(早班或午班或晚班)的點檢單,以那個班別的起始時間為預計執行時間, + // 而每日檢的點檢單預計執行時間,則是以該點檢單是,每日的哪個起始時間的點檢單,以該頻率的起始時間為預計執行時間 + // 9. 預開點檢單的歸屬日,填入開單當天的日期。 + // 10.不需將所有設備的預開單處理,都包在同一個交易一起寫入資料庫內,一台設備做完,就寫入資料庫內。 + // 11. 建議此 Job 基本是每天只執行一次,最好是在當天的 00:00 時開始執行,才符合預開設備點檢單的作用。 + private string funPreCreateEQPQCList(Collection colParameters = null) + { + string funPreCreateEQPQCListRet = default(string); + + var cnnTemp = default(IDbConnection); + DbDataReader drTemp; + string strSQL; + //System.Data.OleDb.OleDbDataAdapter daTemp; + + string strSQLAddField; + string strSQLAddValue; + var CollectionSQL = new Collection(); + var aryDeleteList = new ArrayList(); + + DataTable dtEQPQCListSetup = new DataTable(), dtQCTack = new DataTable(), dtShift = new DataTable(); + + var datCurrentDate = DateTime.Now; + DataRow[] drSel; + DataRow drAdd; + + string strQCTaskNo = ""; + string strPlanQCTime = ""; + + try + { + + cnnTemp = CreateConnection(strConnectionString); + + // 1. 取得各設備的設備點檢卡控設定資料 + strSQL = "SELECT A.*,B.QCListNo FROM tblEQPQCListSetup A " + " JOIN tblEQPEquipmentBasis B ON A.EquipmentNo = B.EquipmentNo " + " WHERE B.IssueState = 2 Order By A.EquipmentNo "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dtEQPQCListSetup); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dtEQPQCListSetup, cnnTemp); + + // 2.刪除歸屬日不是今天的資料,並備份其中待補檢的資料到Log表中 + foreach (DataRow rL in dtEQPQCListSetup.Rows) + { + + // 2.1 每次執行前都清空集合 + CollectionSQL.Clear(); + + // 2.2 取得各設備的設備點檢卡控設定資料 + strSQL = Conversions.ToString("SELECT * FROM tblWIPEQPQCTask " + " Where Status In (0,1,2) And InspType In (1,2) And QCTaskClass = 1 And EquipmentNo = '" + + rL["EquipmentNo"] + "' "); + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + if (!(dtQCTack == null)) + dtQCTack.Clear(); + //daTemp.Fill(dtQCTack); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dtQCTack, cnnTemp); + + foreach (DataRow rQT in dtQCTack.Rows) + { + + // 2.3 找出歸屬日不是當日的現況資料 + if ((Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(rQT["Status"], 1, false)) || Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(rQT["Status"], 2, false))) && (Strings.Format(Conversions.ToDate(rQT["BelongDate"]), "yyyy/MM/dd") ?? "") != (Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") ?? "")) + { + + // 2.3.1 將現況表上已驗與待補驗,並且BelongDate(歸屬日)不是當日的資料刪除 + if (!aryDeleteList.Contains(rL["EquipmentNo"])) // 避免多次執行同樣的SCRIPT + { + strSQL = Conversions.ToString(" Delete From tblWIPEQPQCTask Where BelongDate <> To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + "','yyyy/MM/dd') " + " And Status In (1,2) And InspType In (1,2) And QCTaskClass = 1 And EquipmentNo = '" + + rL["EquipmentNo"] + "' "); + CollectionSQL.Add(strSQL); + + aryDeleteList.Add(rL["EquipmentNo"]); + } + + // 2.3.2 將待補檢的檢驗單備份到Log表內,QCResult = -1,QCTaskStatus=2 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(rQT["Status"], 2, false))) + { + + strSQLAddField = " Insert Into tblWIPEQPQCListLog (QCTaskNo,QCListSerial,EquipmentNo,QCListNo,QCResult,QCTaskStatus "; + strSQLAddValue = Conversions.ToString(" Values ('" + + rQT["QCTaskNo"] + "','" + rQT["QCTaskNo"] + "','" + rL["EquipmentNo"] + "','" + rQT["QCNo"] + "',-1,2 "); + + if (!string.IsNullOrEmpty(rQT["InspType"].ToString())) + { + strSQLAddField = strSQLAddField + ",InspType"; + strSQLAddValue = Conversions.ToString(strSQLAddValue + "," + rQT["InspType"] + " "); + } + + if (!string.IsNullOrEmpty(rQT["ShiftNo"].ToString())) + { + strSQLAddField = strSQLAddField + ",ShiftNo"; + strSQLAddValue = Conversions.ToString(strSQLAddValue + ",'" + rQT["ShiftNo"] + "' "); + } + + if (!string.IsNullOrEmpty(rQT["LotNo"].ToString())) + { + strSQLAddField = strSQLAddField + ",LotNo"; + strSQLAddValue = Conversions.ToString(strSQLAddValue + ",'" + rQT["LotNo"] + "' "); + } + + if (!string.IsNullOrEmpty(rQT["InspStartTime"].ToString())) + { + strSQLAddField = strSQLAddField + ",InspStartTime "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(rQT["InspStartTime"]), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(rQT["BelongDate"], defDateTime, false))) + { + strSQLAddField = strSQLAddField + ",BelongDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(rQT["BelongDate"]), "yyyy/MM/dd") + "','YYYY/MM/DD')"; + } + + if (!string.IsNullOrEmpty(rQT["PlanQCTime"].ToString())) + { + strSQLAddField = strSQLAddField + ",PlanQCTime "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(rQT["PlanQCTime"]), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + } + + strSQLAddField = strSQLAddField + ",Creator "; + strSQLAddValue = strSQLAddValue + ",'AutoRun' "; + + strSQLAddField = strSQLAddField + ",CreateDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; + + CollectionSQL.Add(strSQL); + } + + } + + } + + + // 3. 「每班檢」或「每日檢」時,才需要做預開單(並且當天尚未存在檢驗單) + string InspTypeTmp = rL["InspType"].ToString(); + switch (InspTypeTmp) + { + + // 3.1 每班檢 + case "1": + { + + // 3.1.1 找出該設備的班別 + // 97012: 湖北台基设备做每班检找班别时,设备群组内的设备无法进行班别查找,请调整为可以支持设备群组内的设备做每班点检时可寻找到班别 + // Edison 2021/07/29調整找班別的語法,加入設備群組的班別 + strSQL = " Select * From tblUSRSHIFTBASIS Where IssueState = 2 And DEPARTMENTNO = ( " + + " Select DepartmentNo From tblSMDAreaBasis " + + " Where IssueState = 2 And AREANO = (Select ContainAreaNo From tblSMDAreaRelation Where ObjectNo = '" + + rL["EquipmentNo"] + "')) " + " UNION " + + " Select * From tblUSRSHIFTBASIS Where IssueState = 2 And DEPARTMENTNO = ( " + + " Select DepartmentNo From tblSMDAreaBasis " + + " Where IssueState = 2 And AREANO = (Select ContainAreaNo From tblSMDAreaRelation Where ObjectNo = " + + " (SELECT EQUIPMENTGROUP FROM TBLEQPGROUPDETAIL WHERE EQUIPMENTNO='" + rL["EquipmentNo"] + "' ) )) "; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + if (!(dtShift == null)) + dtShift.Clear(); + //daTemp.Fill(dtShift); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dtShift, cnnTemp); + + foreach (DataRow rS in dtShift.Rows) + { + + // 3.1.2 若現狀況表中該設備當天不存在此班別檢驗單,則新增一筆 + drSel = dtQCTack.Select(Conversions.ToString(" InspType = " + + rL["InspType"] + " And BelongDate = #" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + "# And ShiftNo = '" + + rS["ShiftNo"] + "' And Status = 0 ")); + if (drSel.Length == 0) + { + strQCTaskNo = InitEQPSerialNoByGuid(); + strSQLAddField = " Insert Into tblWIPEQPQCTask (QCTASKNO, EQUIPMENTNO, QCTASKCLASS, INSPTYPE, QCNO "; + strSQLAddValue = Conversions.ToString(" Values ('" + strQCTaskNo + "','" + + rL["EquipmentNo"] + "',1,1,'" + rL["QCListNo"] + "' "); + + strSQLAddField = strSQLAddField + ",ShiftNo"; + strSQLAddValue = Conversions.ToString(strSQLAddValue + ",'" + rS["ShiftNo"] + "' "); + + strSQLAddField = strSQLAddField + ",BelongDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + "','YYYY/MM/DD')"; + + strSQLAddField = strSQLAddField + ",CreateDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + strPlanQCTime = Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + " " + Strings.Format(Conversions.ToDate(rS["FromTime"]), "H:mm:ss"); + strSQLAddField = strSQLAddField + ",PlanQCTime "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(strPlanQCTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; + + CollectionSQL.Add(strSQL); + + } + + } + + break; + } + + + // 3.2 每日檢 + case "2": + { + // 3.2.2 若現狀況表中該設備當天不存在每日檢檢驗單,則新增一筆 + drSel = dtQCTack.Select(Conversions.ToString(" InspType = " + + rL["InspType"] + " And BelongDate = #" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + "# And Status = 0")); + if (drSel.Length == 0) + { + strQCTaskNo = InitEQPSerialNoByGuid(); + strSQLAddField = " Insert Into tblWIPEQPQCTask (QCTASKNO, EQUIPMENTNO, QCTASKCLASS, INSPTYPE, QCNO "; + strSQLAddValue = Conversions.ToString(" Values ('" + strQCTaskNo + "','" + + rL["EquipmentNo"] + "',1,2,'" + rL["QCListNo"] + "' "); + + strSQLAddField = strSQLAddField + ",InspStartTime"; + strSQLAddValue = Conversions.ToString(strSQLAddValue + ",'" + rL["InspStartTime"] + "' "); + + strSQLAddField = strSQLAddField + ",BelongDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + "','YYYY/MM/DD')"; + + strSQLAddField = strSQLAddField + ",CreateDate "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + strPlanQCTime = Conversions.ToString(Strings.Format(Conversions.ToDate(datCurrentDate), "yyyy/MM/dd") + " " + + rL["InspStartTime"]); + strSQLAddField = strSQLAddField + ",PlanQCTime "; + strSQLAddValue = strSQLAddValue + ", To_Date('" + Strings.Format(Conversions.ToDate(strPlanQCTime), "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; + + strSQL = strSQLAddField + ")" + strSQLAddValue + ")"; + + CollectionSQL.Add(strSQL); + + } + + break; + } + + } + + if (CollectionSQL.Count > 0) + { + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + + } + + funPreCreateEQPQCListRet = "success"; + } + + catch (Exception ex) + { + funPreCreateEQPQCListRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funPreCreateEQPQCListRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + + finally + { + if (!(dtEQPQCListSetup == null)) + dtEQPQCListSetup.Dispose(); + if (!(dtQCTack == null)) + dtQCTack.Dispose(); + if (!(dtShift == null)) + dtShift.Dispose(); + CloseConnection(cnnTemp); + } + + return funPreCreateEQPQCListRet; + + } + + // 待補檢設備點檢單通知 + // 1. 參數一,是設定補檢有效時間,單位為小時,可以設定小數;當目前時間-檢驗任務的預計執行時間< 補檢有效時間時,就視為需做通知,所以是在准許時間內的待補檢單才需通知。 + // 2. 取出生產設備檢驗任務表(tblWIPEQPQCTask)中,檢驗任務狀態為待補檢的設備點檢單(Status=2 and QCTaskClass=1), + // 並檢查每筆待補檢的檢驗任務,是否還在有效的補檢時間內,若是,則此筆的待補檢的檢驗任務需做 mail 通知該設備的工程管理群組人員 + // 3. 有效的待補檢檢驗任務的判別方式,是以目前時間減檢驗任務的預計執行時間後,相減後的時間小於參數一所設定的有效時間(小時) + // (目前時間-檢驗任務的預計執行時間(分鐘) < 補檢有效時間(分鐘) = 有效的待補檢點檢單),時間的計算都以分鐘來做計算及判定 + // 4. 若有有效的時間內的補檢設備點檢單,則依該點檢單的設備編號,找出所屬的工程管理群組,並mail給該管理群組內的人員。 + // 5. Mail 的發送以工程管理群組為主,把工程管理群組所要列管的設備下,所有的有效補檢的點檢單,彙整成一封mail 寄出。 + private string funAlertAfterEventEQPQCList(Collection colParameters = null) + { + string funAlertAfterEventEQPQCListRet = default(string); + + var cnnTemp = default(IDbConnection); + //System.Data.OleDb.OleDbDataAdapter daTemp; + string strSQL; + var CollectionSQL = new Collection(); + + DataTable dtQCTack = new DataTable(), dtMail = new DataTable(); + + var datCurrentDate = DateTime.Now; + DataRow[] drSel, drSelM; + + double dblEffectiveTime = 0d; + double dblMinDiff = 0d; + + string strMailBody = ""; + + System.Windows.Forms.SystemInformation WinFormInfo; + modWIN.gComputerName = System.Windows.Forms.SystemInformation.ComputerName; + + do + { + try + { + // ParameterXX參數說明 + // 01 補檢有效時間 + // Parameter01為傳入參數, 作為補檢有效時間, 若無此值則不進行下面的程式 + if (colParameters["Parameter01"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + funAlertAfterEventEQPQCListRet = CombineFailMsg("0000-200002", "After Event Effective Time not found!!!(Parameter 01)"); + break; + } + else if (Information.IsNumeric(colParameters["Parameter01"])) + { + dblEffectiveTime = Conversions.ToDouble(Strings.Trim(Conversions.ToString(colParameters["Parameter01"]))); + } + else + { + funAlertAfterEventEQPQCListRet = CombineFailMsg("0000-200011", "After Event Effective Time not Numeric!!!(Parameter 01)"); + break; + } + + cnnTemp = CreateConnection(strConnectionString); + + // 1. 取得各設備的設備點檢卡控設定資料 + strSQL = " SELECT A.*,B.EngineerGroupNo,B.EquipmentName,C.ShiftName FROM tblWIPEQPQCTask A " + " Join tblEQPEquipmentBasis B ON A.EquipmentNo = B.EquipmentNo " + " Left Join tblUSRShiftBasis C ON A.SHIFTNO = C.SHIFTNO " + " Where a.Status =2 And QCTaskClass=1 Order By InspType,PlanQCTime"; + //cmmTemp = new IDbCommand(strSQL, cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter(cmmTemp); + //daTemp.Fill(dtQCTack); + //daTemp.Dispose(); + //cmmTemp.Dispose(); + ExecuteSQLQuery_Adapter(strSQL, dtQCTack, cnnTemp); + + // 2. 查核每筆待補檢資料是否符合發送mail標準 (當目前時間-檢驗任務的預計執行時間< 補檢有效時間) + // 新增是否繼送Mail的查核欄位 + dtQCTack.Columns.Add("SendMail", Type.GetType("System.String")); + foreach (DataRow rQT in dtQCTack.Rows) + { + dblMinDiff = DateAndTime.DateDiff("n", Conversions.ToDate(rQT["PlanQCTime"]), Conversions.ToDate(datCurrentDate)); + if (dblMinDiff < dblEffectiveTime * 60d) + { + rQT["SendMail"] = "Y"; + } + else + { + rQT["SendMail"] = "N"; + } + } + + // 3.依據設備工成群組組成發送Mail內容Table + dtMail.Columns.Add("EngineerGroupNo", Type.GetType("System.String")); + dtMail.Columns.Add("MailBody", Type.GetType("System.String")); + dtMail.Columns.Add("EquipmentNo", Type.GetType("System.String")); + + string FileName = defString; + foreach (DataRow rM in dtQCTack.DefaultView.ToTable(true, "EngineerGroupNo").Rows) + { + + drSel = dtQCTack.Select(Conversions.ToString("EngineerGroupNo = '" + rM["EngineerGroupNo"] + "' And SendMail ='Y' ")); + if (drSel.Length > 0) + { + + foreach (DataRow rMB in drSel) + { + string InspTypeTmp = rMB["InspType"].ToString(); + switch (InspTypeTmp) + { + case "0": + { + strMailBody = Conversions.ToString(Constants.vbCrLf + "       - " + TranslateMsg("[%LOTINSPECTION%]", strLanguageMode, strResourceDir) + " : " + + rMB["LotNo"] + " / " + TranslateMsg("[%QCLISTNO%]", strLanguageMode, strResourceDir) + " : " + rMB["QCNo"]); + break; + } + case "1": + { + strMailBody = Conversions.ToString(Constants.vbCrLf + "       - " + TranslateMsg("[%SHIFTINSPECTION%]", strLanguageMode, strResourceDir) + " : " + + rMB["ShiftName"] + " / " + TranslateMsg("[%QCLISTNO%]", strLanguageMode, strResourceDir) + " : " + rMB["QCNo"]); + break; + } + case "2": + { + strMailBody = Conversions.ToString(Constants.vbCrLf + "       - " + TranslateMsg("[%DAILYINSPECTION%]", strLanguageMode, strResourceDir) + "   " + + rMB["InspStartTime"] + " / " + TranslateMsg("[%QCLISTNO%]", strLanguageMode, strResourceDir) + " : " + rMB["QCNo"]); + break; + } + } + drSelM = dtMail.Select(Conversions.ToString(" EquipmentNo = '" + rMB["EquipmentNo"] + "' ")); + if (drSelM.Length == 0) + { + var drAdd = dtMail.NewRow(); + drAdd["EngineerGroupNo"] = rMB["EngineerGroupNo"]; + drAdd["EquipmentNo"] = rMB["EquipmentNo"]; + drAdd["MailBody"] = Constants.vbCrLf + "    " + rMB["EquipmentNo"] + " / " + rMB["EquipmentName"] + strMailBody; + dtMail.Rows.Add(drAdd); + } + else + { + drSelM[0]["MailBody"] = drSelM[0]["MailBody"] + strMailBody; + } + } + } + + // 4. 發送Mail + drSelM = dtMail.Select(Conversions.ToString(" EngineerGroupNo = '" + rM["EngineerGroupNo"] + "' ")); + if (drSelM.Length > 0) + { + strMailBody = " Dear Receiver, " + Constants.vbCrLf + Constants.vbCrLf + "    " + TranslateMsg("[%EquipmenListedBelowstillhadAlterEventPleaseCheckit%]", strLanguageMode, strResourceDir); + foreach (DataRow rSM in drSelM) + strMailBody = Conversions.ToString(strMailBody + Constants.vbCrLf + rSM["MailBody"]); + + string argEmailSubject = TranslateMsg("[%EuipmentInspectionAlterEventMailSubject%]", strLanguageMode, strResourceDir); + string argEmailBody = CInput(strMailBody); + modAutoRunLibrary.SendMultiEmail(ref FileName, ref argEmailSubject, argEmailBody, Conversions.ToString(rM["EngineerGroupNo"]), GroupType: (modAutoRunLibrary.GroupType)Conversions.ToInteger("2")); + } + + } + + + funAlertAfterEventEQPQCListRet = "success"; + } + + catch (Exception ex) + { + funAlertAfterEventEQPQCListRet = CombineFailMsg("0000-999999", ex.Message); + + colParameters.Add(funAlertAfterEventEQPQCListRet, "EmailBody"); + SendJobFailEmail(colParameters); + } + + finally + { + if (!(dtQCTack == null)) + dtQCTack.Dispose(); + CloseConnection(cnnTemp); + } + } + while (false); + return funAlertAfterEventEQPQCListRet; + + } + + public string InitEQPSerialNoByGuid() + { + string InitEQPSerialNoByGuidRet = default(string); + // 傳入值: 無 + // 傳回值: String(成功),fail(失敗) + // 2016-07-22, Joe, 調整原取EQPSerialNo的方式,改為日期+ThreadID + + // 2017/10/25 OwenLiu, 調整取EQPSerialNo的方式,改為日期+ThreadID+亂數 + // 編碼格式: [yyMMddHHmmssfff][ThreadId][nnn] + // yyMMddHHmmssfff : 取號當下的日期時間+3碼毫秒 + // ThreadId : 執行序Id(2碼數字),自動補0 + // nnn: 1~999 的隨機亂數(3碼數字),自動補0 + + // 2020/02/24 OwenLiu, Mantis:0067661, 調整EQPSerial 的編碼規則 + // 每次產生新的GUID再用Base64編碼成字串,在隨機在編碼後的字串固定範圍(2~10字元位置)內加入3碼亂數(自動補0) + string SerialNo; + short intUpperBound = 999; // 亂數的最大值 + short intLowerBound = 1; // 亂數的最小值 + short intStartBound = 2; // 亂數的最小值 + short intEndBound = 10; // 亂數的最大值 + short intRandomValue = 0; + short intRandomPosition = 0; + var datEventTime = DateTime.Now; + + InitEQPSerialNoByGuidRet = defString; + + try + { + VBMath.Randomize(); + intRandomValue = Convert.ToInt16(Math.Floor((intUpperBound - intLowerBound + 1) * VBMath.Rnd()) + intLowerBound); + intRandomPosition = Convert.ToInt16(Math.Floor((intStartBound - intEndBound + 1) * VBMath.Rnd()) + intEndBound); + string strEQPGuid = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); + + SerialNo = strEQPGuid.Substring(0, intRandomPosition) + intRandomValue.ToString("000") + strEQPGuid.Substring(intRandomPosition); + + InitEQPSerialNoByGuidRet = SerialNo; + } + catch (Exception e1) + { + InitEQPSerialNoByGuidRet = "fail"; + throw; + } + + finally + { + } + + return InitEQPSerialNoByGuidRet; + + } + + #endregion + + #region OGSM 駕駛艙 + private string CombineFailMsg(string ErrorCode, string Description) + { + string CombineFailMsgRet = default(string); + CombineFailMsgRet = "fail;" + ErrorCode + ";" + Description; + return CombineFailMsgRet; + } + + /// + /// 解析ErrorLog的Description之ErrorCode,回填ErrorCode與ErrorType(舊資料) + /// + /// + /// 已執行到的時間記錄於Parameter10 + /// + /// + /// 每次取3天份的資料,每次取還未執行的舊資料(3/8~3/10 => 3/5~3/7 => 3/2~3/4) + /// 今天為2022/3/29,若Parameter10欄位沒有值, 則取得2022/3/27~2022/3/29 結束後將2022/3/26回填Parameter10 + /// 今天為2022/3/29,若Parameter10欄位有值(2022/3/27), 則取得2022/3/25~2022/3/27 結束後將2022/3/24回填Parameter10 + /// + private string funParseErrorLogErrorCodePast(Collection colParameters = null) + { + string funParseErrorLogErrorCodePastRet = default(string); + + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + + try + { + if (colParameters["JobNo"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["JobNo"])))) + { + funParseErrorLogErrorCodePastRet = CombineFailMsg("0000-999999", "There is no JobNo!"); + return funParseErrorLogErrorCodePastRet; + } + + DateTime startDate, endDate; + // 已執行到的時間記錄於Parameter10 + if (colParameters["Parameter10"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter10"])))) + { + endDate = DateTime.Now; + startDate = endDate.AddDays(-2); + } + else + { + endDate = DateTime.Parse(Conversions.ToString(colParameters["Parameter10"])); + startDate = endDate.AddDays(-2); + } + + var dtTemp = new DataTable(); + dtTemp = GetErrorLog(startDate, endDate); + + // 表示時段中的ErrorCode都有填上 + if (dtTemp.Rows.Count <= 0) + { + Collection argCollectionSQL = null; + UpdateParameter10(startDate.AddDays(-1), Conversions.ToString(colParameters["JobNo"]), CollectionSQL: argCollectionSQL); + funParseErrorLogErrorCodePastRet = "success"; + return funParseErrorLogErrorCodePastRet; + } + + // 填上ErrorCode, ErrorType + FillInErrorCodeAndErrorType(dtTemp); + + // update ErrorCode, ErrorType + var CollectionSQL = new Collection(); + UpdateErrorCodeAndErrorType(dtTemp, ref CollectionSQL); + + UpdateParameter10(startDate.AddDays(-1), Conversions.ToString(colParameters["JobNo"]), CollectionSQL); + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + + catch (Exception ex) + { + // 錯誤訊息: 截取錯誤訊息+換行符號 + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funParseErrorLogErrorCodePastRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funParseErrorLogErrorCodePastRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funParseErrorLogErrorCodePastRet; + } + private DataTable GetErrorLog(DateTime startDate, DateTime endDate) + { + + var sb = new StringBuilder(); + sb.Append("select userid, recorddate, servicename, DESCRIPTION, errorcode, errorType from tblsyserrorlog "); + sb.Append("where "); + sb.AppendFormat("recorddate >= to_date('{0}','YYYY/MM/DD HH24:MI:SS') and ", Strings.Format(startDate, "yyyy/MM/dd 00:00:00")); + sb.AppendFormat("recorddate <= to_date('{0}','YYYY/MM/DD HH24:MI:SS') and ", Strings.Format(endDate, "yyyy/MM/dd 23:59:59")); + sb.Append("(errorcode is null or errorcode = '')"); + + string strSQL = sb.ToString(); + var dtTemp = new DataTable(); + var dsTemp = new DataSet(); + + var cnnTemp = default(IDbConnection); + //System.Data.OleDb.OleDbDataAdapter daTemp; + + try + { + cnnTemp = CreateConnection(strConnectionString); + //cmmTemp = new IDbCommand(strSQL, (IDbConnection)cnnTemp); + //daTemp = new System.Data.OleDb.OleDbDataAdapter((IDbCommand)cmmTemp); + //daTemp.Fill(dsTemp, "errorLog"); + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "errorLog", cnnTemp); + dtTemp = dsTemp.Tables[0]; + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(cnnTemp); + } + + + return dtTemp; + + } + private void FillInErrorCodeAndErrorType(DataTable dtTemp) + { + + foreach (DataRow dr in dtTemp.Rows) + { + string description = dr["DESCRIPTION"].ToString(); + + if (!description.Contains("")) + { + dr["ERRORCODE"] = "0000-999999"; + dr["ERRORTYPE"] = 2; + continue; + } + + // 讀取InXml字串 + XmlDoc.LoadXml("" + description + ""); + dr["ERRORCODE"] = XmlDoc.DocumentElement.GetElementsByTagName("code").Item(0).InnerText; + dr["ERRORTYPE"] = dr["ERRORCODE"].ToString() == "0000-999999" ? 2 : 1; + } + + } + private void UpdateErrorCodeAndErrorType(DataTable dtTemp, ref Collection CollectionSQL) + { + + CollectionSQL = new Collection(); + + string errorCode, errorType; + string userid, serviceName; + var sb = new StringBuilder(); + string strSQL; + + foreach (DataRow dr in dtTemp.Rows) + { + errorCode = dr["ERRORCODE"].ToString(); + errorType = dr["ERRORTYPE"].ToString(); + userid = dr["USERID"].ToString(); + serviceName = dr["SERVICENAME"].ToString(); + + sb.Clear(); + sb.AppendFormat("update tblsyserrorlog set errorcode = '{0}', errortype = '{1}' ", errorCode, errorType); + sb.AppendFormat("where userid = '{0}' and ", userid); + sb.AppendFormat("recorddate = to_date('{0}','YYYY/MM/DD HH24:MI:SS') and ", Strings.Format(dr["RECORDDATE"], "yyyy/MM/dd HH:mm:ss")); + sb.AppendFormat("servicename = '{0}'", serviceName); + strSQL = sb.ToString(); + + CollectionSQL.Add(strSQL); + } + + } + private void UpdateParameter10(DateTime nextParameter10, string jobNo, Collection CollectionSQL = null) + { + + var sb = new StringBuilder(); + sb.AppendFormat("update tblMESAutoRunJob set parameter10 = '{0}' where jobno = '{1}'", Strings.Format(nextParameter10, "yyyy/MM/dd"), jobNo); + string strSQL = sb.ToString(); + + if (CollectionSQL != null) + { + CollectionSQL.Add(strSQL); + return; + } + + CollectionSQL = new Collection(); + CollectionSQL.Add(strSQL); + + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + + } + /// + /// 解析ErrorLog的Description之ErrorCode,回填ErrorCode與ErrorType(新資料) + /// + /// + /// 已執行到的時間記錄於Parameter09 + /// + /// + /// 每次取3天份的資料,每次取還未執行的新資料(3/8~3/10 => 3/11~3/13 => 3/14~3/16) + /// 今天為2022/3/29,若Parameter09欄位沒有值, 則取得現時點往回3天份的資料(2022/3/27~2022/3/29) 結束後將2022/3/29回填Parameter09 + /// 今天為2022/3/29,若Parameter09欄位有值且差距大於2天(2022/3/25), 則取得2022/3/25~2022/3/27 結束後將2022/3/28回填Parameter09 + /// 今天為2022/3/29,若Parameter09欄位有值且差距小於2天(2022/3/27), 則取得2022/3/27~2022/3/29 結束後將2022/3/29回填Parameter09 + /// + private string funParseErrorLogErrorCodeForward(Collection colParameters = null) + { + string funParseErrorLogErrorCodeForwardRet = default(string); + + string strReturnMessage = ""; // 執行檔Catch訊息(Job Jog)。Chr(10)分隔每個錯誤訊息。 + + try + { + if (colParameters["JobNo"] == null || string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["JobNo"])))) + { + funParseErrorLogErrorCodeForwardRet = CombineFailMsg("0000-999999", "There is no JobNo!"); + return funParseErrorLogErrorCodeForwardRet; + } + + // 已執行到的時間記錄於Parameter10 + DateTime startDate, endDate, nextParameter10; + endDate = GetEndDate(Conversions.ToString(colParameters["Parameter10"])); + startDate = GetStartDate(Conversions.ToString(colParameters["Parameter10"])); + nextParameter10 = GetNextParameter10(Conversions.ToString(colParameters["Parameter10"])); + + var dtTemp = new DataTable(); + dtTemp = GetErrorLog(startDate, endDate); + + // 表示時段中的ErrorCode都有填上 + if (dtTemp.Rows.Count <= 0) + { + Collection argCollectionSQL = null; + UpdateParameter10(nextParameter10, Conversions.ToString(colParameters["JobNo"]), CollectionSQL: argCollectionSQL); + funParseErrorLogErrorCodeForwardRet = "success"; + return funParseErrorLogErrorCodeForwardRet; + } + + // 填上ErrorCode, ErrorType + FillInErrorCodeAndErrorType(dtTemp); + + // update ErrorCode, ErrorType + var CollectionSQL = new Collection(); + UpdateErrorCodeAndErrorType(dtTemp, ref CollectionSQL); + + UpdateParameter10(nextParameter10, Conversions.ToString(colParameters["JobNo"]), CollectionSQL); + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + } + + catch (Exception ex) + { + // 錯誤訊息: 截取錯誤訊息+換行符號 + if (!string.IsNullOrEmpty(strReturnMessage)) + { + strReturnMessage += ControlChars.Cr + ex.Message; + } + else + { + strReturnMessage += ex.Message; + } + } + + if (string.IsNullOrEmpty(strReturnMessage)) + { + // //回傳Success + funParseErrorLogErrorCodeForwardRet = "success"; + } + else + { + // Message長度4000限制 + if (strReturnMessage.Length > 3996) + strReturnMessage = strReturnMessage.Substring(0, 3996) + "..."; + + funParseErrorLogErrorCodeForwardRet = CombineFailMsg("0000-999999", strReturnMessage); + } + + return funParseErrorLogErrorCodeForwardRet; + } + private DateTime GetStartDate(string parameter10) + { + + if (parameter10 == null || string.IsNullOrEmpty(Strings.Trim(parameter10))) + { + return DateTime.Now.AddDays(-2); + } + else + { + return DateTime.Parse(parameter10); + } + + } + private DateTime GetEndDate(string parameter10) + { + + if (parameter10 == null || string.IsNullOrEmpty(Strings.Trim(parameter10))) + { + return DateTime.Now; + } + + var tempDate = DateTime.Parse(parameter10); + if (DateTime.Today.CompareTo(tempDate.AddDays(+2)) <= 0) + { + return DateTime.Today; + } + else + { + return tempDate.AddDays(+2); + } + + } + private DateTime GetNextParameter10(string parameter10) + { + + if (parameter10 == null || string.IsNullOrEmpty(Strings.Trim(parameter10))) + { + return DateTime.Now; + } + + var tempDate = DateTime.Parse(parameter10); + if (DateTime.Today.CompareTo(tempDate.AddDays(+2)) <= 0) + { + return DateTime.Today; + } + else + { + return tempDate.AddDays(+3); + } + + } + + #endregion + + + #region MES與WF與PLM整合_產品與物料整合 + + /// + /// WF產品與物料整合 與E10ICD及T100不同,以item_category區分只處理產品或物料部分 + /// + /// + /// + private object funMESCallERPPRDMTLBasis_WF(Collection colParameters = null) + { + object funMESCallERPPRDMTLBasis_WFRet = default(object); + var XmlDoc = new XmlDocument(); + var CollectionSQL = new Collection(); + + // =========================================================== + // 宣告 AutoRunJob設定及執行記錄 變數 + // =========================================================== + string strParameter01 = ""; // 參數一,預設此功能fail通知EMAIL群組。 + string strPageSize = "500"; // 參數二,分包筆數 + int intRunTime = 5; // 參數三,分包執行次數,預設為5次 + var strDate = default(string); // 參數四,手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + string strSubject, strBody; // 寄送通知資訊 + string strServiceName = "item.get_workflow"; + + // AutorunJob拋轉資訊 + string strReturnMessage = ""; // 錯誤訊息(tblMESAutoRunLog.ReturnMessage),Chr(10)分隔錯誤項目。 + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var colResponseXML = new Collection(); + string strKey_Condition = ""; + string strRequest_Datetime = ""; + + do + { + try + { + // Parameter01為參數一 + // 作為Mail通知群組(GroupNo),放在最前面防止連線失敗無法寄送通知。 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strParameter01 = colParameters["Parameter01"].ToString().Trim(); + } + else + { + aryReturnMessage.Add(TranslateMsg("Mail GroupNo [%NOT SET%]([%PARAMETER01%])!", strLanguageMode, strResourceDir)); // ===== 2021/05/18 Elvis 92880 + break; + } + + // Parameter02為參數二 + // 分包筆數必須為數值型態,Add by KevinChang + strPageSize = "500"; + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + // 每封包筆數不可小於500筆,Add by KevinChang + if (Conversions.ToInteger(colParameters["Parameter02"]) < 500) + { + strPageSize = "500"; + } + else + { + strPageSize = colParameters["Parameter02"].ToString().Trim(); + } + } + } + + // Parameter03為參數三 + // 分包執行次數,預設為5次,必須為數值型態。 + if (Information.IsNumeric(colParameters["Parameter03"])) + { + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + intRunTime = Conversions.ToInteger(colParameters["Parameter03"]); + } + } + + // Parameter04為參數四 + // 手動重收時填上時間,如沒填則以log tableERP拋回的最後執行時間為主 + if (!(colParameters["Parameter04"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + // 2022/10/19 Lena, 日期格式調整為 yyyy/MM/dd HH:mm:ss + // strDate = GetDate(colParameters("Parameter04"), "Parameter04") + + if (Information.IsDate(colParameters["Parameter04"])) + { + strDate = Strings.Format(Conversions.ToDate(colParameters["Parameter04"]), "yyyy/MM/dd HH:mm:ss"); + } + else + { + throw new Exception(Conversions.ToString("Parameter04 value is " + + colParameters["Parameter04"] + " DateTime Format is Error!(The format string like: yyyy/MM/dd HH:mm:ss)")); + } + } + else + { + // strDate = GetERPTransactionDate(strServiceName) + + string strERPDate; + strERPDate = GetERPTransactionDate(strServiceName); + if ((strERPDate ?? "") != defString) + { + strDate = strERPDate; + if (strERPDate.Length > 14) + { + strDate = Strings.Mid(strERPDate, 1, 4) + "/" + Strings.Mid(strERPDate, 5, 2) + "/" + Strings.Mid(strERPDate, 7, 2) + " " + Strings.Mid(strERPDate, 9, 2) + ":" + Strings.Mid(strERPDate, 11, 2) + ":" + Strings.Mid(strERPDate, 13, 2); + } + } + } + + // 取得erp資訊 + GetERPSetting_WF(); + + // If (Not GetERPSetting(dtERPSetting, "WorkFlow")) Then + // aryReturnMessage.Add(TranslateMsg("[%PleaseCheck%] EAI ERP Setting Info [%CONFIGSETTING%]!")) + // Exit Try + // End If + + bool chkStatus = true; + + // 抓取其它status為0之資料且塞入colResponseXML + GetReTransData(strServiceName, ref colResponseXML); + + // 判斷『當前回傳筆數』=『應回傳筆數』時才代表為最後一次請求,執行後才進行後續動作 + InXml = CombineRequestXML_item_get_WF("8", strPageSize, strKey_Condition, strDate); + + int intloopTimes = 0; + string strCode = default(string); + string strSql_Code = default(string); + string strDescription = default(string); + do + { + // 迴圈執行超過intRunTime(預設5)次直接跳出迴圈 + if (intloopTimes >= intRunTime) + { + break; + } + + // 先確認是否有測試檔案,有的話就讀取出xml + OutXml = string.Empty; + OutXml = LoadXmlFileForTest(strServiceName); + + try + { + + if (string.IsNullOrEmpty(OutXml)) + { + // ----- Call ERP Web Service ----- + using (var ws = new wsERP_WorkFlow.WFMESService()) + { + ws.Url = gERPWSURL; + OutXml = ws.XMLAdapter(InXml); + } + // 2017-05-03, Joe, 轉換單引號 + OutXml = OutXml.Replace("'", "''"); + } + } + + catch (Exception ex) + { + OutXml = ex.Message; + throw ex; + } + finally + { + // 需等到取得所有資料後,再處理後面之動作,故統一將請求完之ResponseXML放入容器內 + colResponseXML.Add(OutXml); + } + + XmlDoc.LoadXml(OutXml); + + // 執行ERP交易完畢寫入Log + string argstrException = null; + + // 將ERP拋回的資料轉成物件 + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis_WF", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "success", "ERP", strServiceName, strException: argstrException); + chkExecutionStatus_WF(XmlDoc, ref strCode, ref strSql_Code, ref strDescription, ref strKey_Condition, ref strRequest_Datetime); + if (strCode == "0") + { + if (string.IsNullOrEmpty(strKey_Condition)) + break; + InXml = CombineRequestXML_item_get_WF("8", strPageSize, strKey_Condition, strDate); + } + else + { + chkStatus = false; + aryReturnMessage.Add(OutXml); // 2017-06-26, Joe, 如是中台層的錯誤要往外拋 + break; + } + + intloopTimes += 1; + } + while (true); + + // 寫入log table + TreatWriteLogTable_WF(colResponseXML, strServiceName); + + // 寫入MES DB + if (chkStatus) + { + foreach (string strOutXML in colResponseXML) + { + if (WriteProductOrMaterailBasis_WF(strOutXML, ref aryReturnMessage) < 0) + { + if (aryReturnMessage.Count == 0) // 避免不明原因,執行FAIL又沒收集到項目. + { + aryReturnMessage.Add(TranslateMsg("item_get, [%INVOKE FAIL%]!", strLanguageMode, strResourceDir)); + } + } + } + } + } + catch (Exception EX_AUT) + { + + aryReturnMessage.Add("EX_AUT.Exception" + '\n' + EX_AUT.Message.ToString()); + OutXml = EX_AUT.Message.ToString(); + results = "fail"; + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis_WF", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, LogClass: "AutoRun", strException: argstrException); + } + finally + { + // -------------------------------------------------- + // 回傳執行結果:succces 或 fail(ReturnMessage) + // -------------------------------------------------- + if (aryReturnMessage.Count == 0) + { + funMESCallERPPRDMTLBasis_WFRet = "success"; + results = "success"; + } + else + { + + // 組合執行錯誤字串: Chr(10)分隔 + strReturnMessage = ArrayList2String(ref aryReturnMessage); + if ((strReturnMessage ?? "") == defString) + { + // 當錯誤字串組合失敗。補上 + strReturnMessage = "ReturnMessage收集失敗!!"; + } + + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + string strTemp = ""; + if (strReturnMessage.Length > 4000) + { + // 自 strReturnMessage 中截取0-3991碼. + strTemp = strReturnMessage.Substring(0, 3991) + "..."; + } + else + { + strTemp = strReturnMessage; + } + + // 更新log table異常資訊 + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + // UpdateLogTableErrorInfo(nodeID.InnerText, strTemp) + UpdateLogTableErrorInfo(colResponseXML, strServiceName, strTemp); + + // //fail; + funMESCallERPPRDMTLBasis_WFRet = CombineFailMsg("0000-999999", strTemp); + + } + // ===manties:0095454 AutoRun addTransactionLog位置錯誤 需移至Finally 2021/07/06 + // 執行ERP交易完畢寫入Log + string argstrException = null; + modAutoRunLibrary.addTransactionLog(InXml, OutXml, DateTime.Now.ToString("yyyyMMddHHmmssss"), "AutoRun", "funMESCallERPProductBasis_WF", Environment.MachineName, modWIN.gUserNo, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), results, "ERP", strServiceName, strException: argstrException); + } + } + // === + while (false); + + // -------------------------------------------------- + // 當執行失敗,寄送 Email。必須有設定參數一。 + // -------------------------------------------------- + IDbConnection argcnnTemp = null; + try + { + if (aryReturnMessage.Count > 0 && Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(colParameters["Parameter01"], "", false))) + { + strSubject = "[AUT]料件-基本資料抛轉失敗! "; + strBody = Strings.Replace(strReturnMessage, Conversions.ToString('\n'), "
", Compare: CompareMethod.Text); + + // 寄送 Email + argcnnTemp = CreateConnection(strConnectionString); + if (ERP2MES_MailNotice(ref argcnnTemp, ref aryReturnMessage, strSubject, strParameter01, CInput(strBody)) < 0) + { + // '寄送不成功, ReturnMessage 再增加1項. + // 'ProductIntegration += Chr(10) & aryReturnMessage.Item(aryReturnMessage.Count - 1).ToString + + // 寄送不成功, ReturnMessage 再增加1項. + // tblMESAutoRunLog.ReturnMessage 長度4000限制. + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(funMESCallERPPRDMTLBasis().ToString().Length, 4000, false))) + { + + string strTemp = ""; + strTemp = strReturnMessage; + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectLess(strTemp + + aryReturnMessage[aryReturnMessage.Count - 1].ToString().Length, 4000, false))) + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + } + else + { + strTemp = Conversions.ToString(strTemp + '\n' + aryReturnMessage[aryReturnMessage.Count - 1]); + + // 自 strTemp 中截取0-3991碼. + strTemp = strTemp.Substring(0, 3991) + "..."; + } + + // //fail; + funMESCallERPPRDMTLBasis_WFRet = CombineFailMsg("0000-999999", strTemp); + } + } + } + } + catch (Exception) + { + throw; + } + finally + { + CloseConnection(argcnnTemp); + } + + return funMESCallERPPRDMTLBasis_WFRet; + } + + /// + /// funMESCallERPPRDMTLBasis_WF接口呼叫WF端時的RequestXML + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public string CombineRequestXML_item_get_WF(string DoAction = "8", string PageSize = "500", string key_condition = "", string request_datetime = "", string User = null, string Password = null, string ApplicationName = null, string Source = null, string Oraganization = null, string Language = null) + { + string CombineRequestXML_item_get_WFRet = default(string); + + GetERPSetting_WF(); + + try + { + // ERPSignIn改由來自資料庫的ERP Setting表 + if (User == null) + User = gERPUser; + if (Password == null) + Password = gERPPassword; + if (ApplicationName == null) + ApplicationName = "MES"; + if (Source == null) + Source = modWIN.gComputerName; + if (Oraganization == null) + Oraganization = gERPOraganization; + if (Language == null) + Language = gERPLanguage; + } + + catch (Exception ex) + { + CombineRequestXML_item_get_WFRet = "CombineRequestXML_item_get_WF fail;" + ex.Message; + } + + CombineRequestXML_item_get_WFRet = "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + Oraganization + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + DoAction + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + User + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + Password + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + ApplicationName + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + modWIN.gComputerName + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + strDefLanguage + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + request_datetime + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + PageSize + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + key_condition + "" + '\n'; + CombineRequestXML_item_get_WFRet += "" + '\n'; + CombineRequestXML_item_get_WFRet += ""; + return CombineRequestXML_item_get_WFRet; + + } + + /// + /// 解析WF(Work Flow)回傳表頭 + /// + /// 傳入XML + /// + /// + /// + /// + public bool chkExecutionStatus_WF(XmlDocument Xmldoc, ref string code, ref string sql_code, ref string description, ref string key_condition, ref string request_datetime) + { + bool chkExecutionStatus_WFRet = default(bool); + + chkExecutionStatus_WFRet = false; + + var de = Xmldoc.DocumentElement["execution"]; + if (de == null == true) + return chkExecutionStatus_WFRet; + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes[i].Name == "status") + { + var cn = de.ChildNodes[i]; + code = de.ChildNodes[i].Attributes["code"].Value.ToString(); + sql_code = de.ChildNodes[i].Attributes["sql_code"].Value.ToString(); + description = de.ChildNodes[i].Attributes["description"].Value.ToString(); + chkExecutionStatus_WFRet = true; + } + } + + key_condition = ""; + if (Xmldoc.DocumentElement.GetElementsByTagName("key_condition").Count > 0) + { + if (!string.IsNullOrEmpty(Xmldoc.GetElementsByTagName("key_condition").Item(0).InnerText)) + { + key_condition = Xmldoc.GetElementsByTagName("key_condition").Item(0).InnerText; + } + } + + request_datetime = ""; + if (Xmldoc.DocumentElement.GetElementsByTagName("request_datetime").Count > 0) + { + if (!string.IsNullOrEmpty(Xmldoc.GetElementsByTagName("request_datetime").Item(0).InnerText)) + { + request_datetime = Xmldoc.GetElementsByTagName("request_datetime").Item(0).InnerText; + } + } + + return chkExecutionStatus_WFRet; + + } + + /// + /// 解析item_get_detail Value Tag Detail回傳Dictionary(Of String, String) + /// + /// + /// + public DataTable GetXML_DetailValue2Dictionary_WF(XmlDocument Xmldoc) + { + DataTable GetXML_DetailValue2Dictionary_WFRet = default(DataTable); + + var dtResult = new DataTable("item_get_detail"); + XmlNodeList xmlList; + + try + { + + // 先加入欄位資訊 + if (Xmldoc.DocumentElement.GetElementsByTagName("item_get_detail").Count > 0) + { + // 2022/10/19 Lena, 修正 ERF 回拋是沒有明細資料時的錯誤. + if (Xmldoc.GetElementsByTagName("item_get_detail").Item(0).SelectNodes("value").Count > 0) + { + xmlList = Xmldoc.GetElementsByTagName("item_get_detail").Item(0).SelectNodes("value"); + for (int i = 0; i <= 0; i++) + { + for (int j = 0, loopTo = xmlList[i].ChildNodes.Count - 1; j <= loopTo; j++) + { + if (xmlList[i].ChildNodes[j] != null) + { + if (!dtResult.Columns.Contains(xmlList[i].ChildNodes[j].Name)) + { + dtResult.Columns.Add(xmlList[i].ChildNodes[j].Name, Type.GetType("System.String")); + } + } + } + } + + // 每個List新增一筆資料 + for (int i = 0, loopTo1 = xmlList.Count - 1; i <= loopTo1; i++) + { + var drAdd = dtResult.NewRow(); + for (int j = 0, loopTo2 = xmlList[i].ChildNodes.Count - 1; j <= loopTo2; j++) + { + if (xmlList[i].ChildNodes[j] != null) + { + drAdd[xmlList[i].ChildNodes[j].Name] = xmlList[i].ChildNodes[j].InnerText; + } + else + { + drAdd[xmlList[i].ChildNodes[j].Name] = ""; + } + } + dtResult.Rows.Add(drAdd); + } + + } + } + } + + catch (Exception ex) + { + throw; + } + finally + { + GetXML_DetailValue2Dictionary_WFRet = dtResult; + } + + return GetXML_DetailValue2Dictionary_WFRet; + + } + + /// + /// 確認分包資料回傳時,是否仍有後續資料,沒有則回傳fale中斷處理 + /// + /// + /// + public bool CheckOutXMLData(string OutXML) + { + bool CheckOutXMLDataRet = default(bool); + + CheckOutXMLDataRet = false; + + var XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXML); + if (XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("item_get_detail").Count > 0) + { + CheckOutXMLDataRet = true; + } + + return CheckOutXMLDataRet; + + } + + /// + /// 根據XML List內容新增或刪除產品與物料主檔(不同與T100與E10ICD item_category="A" 只處理產品主檔 ,item_category="M"只處理物料主檔) + /// + /// + /// + /// + private int WriteProductOrMaterailBasis_WF(string OutXML, ref ArrayList aryReturnMessage) + { + int WriteProductOrMaterailBasis_WFRet = default(int); + WriteProductOrMaterailBasis_WFRet = -1; // Return -1:fail,0:Success + + // =========================================================== + // 宣告 DB相關 變數 + // =========================================================== + var drTemp = default(DbDataReader); + IDbConnection cnnMES = null; + Collection colSQL_2MES = new Collection(), colSQL_2MES_Rows = new Collection(); // MES正式異動資料(主要). + string strSQL; + string strSQLCol; + string strSQLVal; + + // 每筆中介交易記錄 + string strIfWhereCond_PK; + string strMES_Result; + string strMES_MESSAGE; // 錯誤訊息(中介表.MES_MESSAGE),Chr(10)分隔錯誤項目。 + var aryMES_Message = new ArrayList(); // 收集單筆中介交易記錄的錯誤記錄, Exception及MES判定錯誤訊息。 + + try + { + cnnMES = CreateConnection(strConnectionString); + + // 宣告拋轉資料使用變數 + string strERP_ProductNo, strERP_MaterialNo, strERP_ProductVersion, strERP_status, strERP_UnitNo, strERP_ItemName, strErpNo, strERP_SpecNo, strERP_LotManage = default(string); + DataRow drChk; + + // 預設值 + string strProductType = "PRODUCT"; // 給予預設值"PRODUCT",若不存在則自動新增產品類別. + int intIssueState = 0; + int intCurVersion = 0; + string strMaterialType = "MATERIL"; // 給予預設值"MATERIL",若不存在則自動新增物料類別. + int intPutInPlace = 3; // 投料點:預設為3(工單). + int intCountWay = 1; // 計量方法:預設為1(實際用量). + int intCheckLotNo = 1; // 物料批號檢查:預設為0(不檢查批號). + var aryProductType = new ArrayList(); // 記錄產品類別是否新增 + var aryMaterialType = new ArrayList(); // 記錄物料類別是否新增 + var aryUnitNo = new ArrayList(); // 記錄單位主檔是否新增 + do + { + try + { + + var XmlDoc = new XmlDocument(); + XmlDoc.LoadXml(OutXML); + + // 將OutXML解析為資料表型態,方便後續新增刪除的處理 + var dtDetail = GetXML_DetailValue2Dictionary_WF(XmlDoc); + + bool exitTry2 = false; + for (int intRow = 0, loopTo = dtDetail.Rows.Count - 1; intRow <= loopTo; intRow++) + { + + if (string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["item_category"]))) + { + aryMES_Message.Add(TranslateMsg("item_category" + " [%Is Empty%]!", strLanguageMode, strResourceDir)); + break; + } + + if (dtDetail.Rows[intRow]["item_category"].Equals("A")) // 處理產品類型 + { + // ----------------------------------------------------------- + // 固定檢查ProductType='PRODUCT'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddProductType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryProductType.IndexOf(strProductType) == -1) + { + if (AddProductType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strProductType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryProductType.Add(strProductType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_ProductNo = dtDetail.Rows[intRow]["item_no"].ToString().Trim().ToUpper(); + strErpNo = dtDetail.Rows[intRow]["item_no"].ToString().Trim(); // 記錄原始之ERP編號 + strERP_ProductVersion = Interaction.IIf(string.IsNullOrWhiteSpace(dtDetail.Rows[intRow]["item_ver"].ToString()), "1", dtDetail.Rows[intRow]["item_ver"]).ToString().Trim(); + + strERP_status = dtDetail.Rows[intRow]["transstatus"].ToString().Trim().ToUpper(); + // 2022/10/19 Lena,修正錯誤 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dtDetail.Rows[intRow]["production_unit_no"], "", false))) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = dtDetail.Rows[intRow]["production_unit_no"].ToString().Trim(); + strERP_UnitNo = dtDetail.Rows[intRow]["production_unit_no"].ToString().Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["item_name"])), "N/A", dtDetail.Rows[intRow]["item_name"])); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["specno"])), "N/A", dtDetail.Rows[intRow]["specno"])); + + // 檢查是否有此產品設定 + strSQL = "Select ProductNo,IssueState From tblPRDProductBasis " + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + //cmmTemp = new IDbCommand(strSQL, cnnMES); + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnMES); + bool exitTry = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + + if (!drTemp.Read()) + { + intIssueState = 0; + // ----------------------------------------------------------- + // 產品編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_ProductNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES產品設定 + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblPRDProductBasis " + "(ProductNo,ProductVersion,ProductName,ProductType," + " UnitNo,UnitType,ItemSpec,Description," + " IssueState,CurVersion,Creator,CreateDate,ERPNo,QCCategory"; + strSQLVal = ") Values('" + strERP_ProductNo + "','" + strERP_ProductVersion + "','" + strERP_ItemName + "','" + strProductType + "','" + strERP_UnitNo + "','" + strERP_UnitNo + "','" + strERP_SpecNo + "','AutoRun建立'," + intIssueState + "," + intCurVersion + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + // 2022/10/19 Lane, 修正欄位名稱錯誤的問題 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined01"]))) + { + strSQLCol += ",User_Defined01"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined01"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined02"]))) + { + strSQLCol += ",User_Defined02"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined02"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined03"]))) + { + strSQLCol += ",User_Defined03"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined03"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined04"]))) + { + strSQLCol += ",User_Defined04"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined04"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined05"]))) + { + strSQLCol += ",User_Defined05"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined05"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined06"]))) + { + strSQLCol += ",User_Defined06"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined06"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined07"]))) + { + strSQLCol += ",User_Defined07"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined07"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined08"]))) + { + strSQLCol += ",User_Defined08"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined08"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined09"]))) + { + strSQLCol += ",User_Defined09"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined09"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined10"]))) + { + strSQLCol += ",User_Defined10"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined10"].ToString().Trim()), "'")); + } + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine11")) Then + // strSQLCol += ",User_Defined11" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine11").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine12")) Then + // strSQLCol += ",User_Defined12" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine12").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine13")) Then + // strSQLCol += ",User_Defined13" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine13").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine14")) Then + // strSQLCol += ",User_Defined14" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine14").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine15")) Then + // strSQLCol += ",User_Defined15" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine15").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine16")) Then + // strSQLCol += ",User_Defined16" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine16").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine17")) Then + // strSQLCol += ",User_Defined17" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine17").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine18")) Then + // strSQLCol += ",User_Defined18" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine18").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine19")) Then + // strSQLCol += ",User_Defined19" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine19").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine20")) Then + // strSQLCol += ",User_Defined20" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine20").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine21")) Then + // strSQLCol += ",User_Defined21" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine21")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine22")) Then + // strSQLCol += ",User_Defined22" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine22")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine23")) Then + // strSQLCol += ",User_Defined23" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine23")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine24")) Then + // strSQLCol += ",User_Defined24" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine24")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine25")) Then + // strSQLCol += ",User_Defined25" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine25")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine26")) Then + // strSQLCol += ",User_Defined26" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine26")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine27")) Then + // strSQLCol += ",User_Defined27" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine27")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine28")) Then + // strSQLCol += ",User_Defined28" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine28")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine29")) Then + // strSQLCol += ",User_Defined29" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine29")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine30")) Then + // strSQLCol += ",User_Defined30" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine30")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine31")) Then + // strSQLCol += ",User_Defined31" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine31").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine32")) Then + // strSQLCol += ",User_Defined32" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine32").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine33")) Then + // strSQLCol += ",User_Defined33" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine33").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine34")) Then + // strSQLCol += ",User_Defined34" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine34").Trim + "'" + // End If + + // 2017-05-22, Joe, Add 圖號 + // 2022/10/19 修正欄位名稱的錯誤 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["graph_no"]))) + { + strSQLCol += ",GraphNo"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["graph_no"].ToString().Trim()), "'")); + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES產品設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drTemp["IssueState"]); + } + // 2017-06-08, Joe, 修改為異動CurVersion + strSQL = "Update tblPRDProductBasis Set " + " IssueState = " + intIssueState + " , ProductName = '" + strERP_ItemName + "', UnitNo = '" + strERP_UnitNo + "', UnitType = '" + strERP_UnitNo + "' " + " ,ProductType = '" + strProductType + "', ItemSpec = '" + strERP_SpecNo + "', ERPNo = '" + strErpNo + "' "; + + // 2022/10/19 Lena, 修正欄位名稱錯誤的問題 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined01"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined01='" + + dtDetail.Rows[intRow]["userdefined01"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined02"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined02='" + + dtDetail.Rows[intRow]["userdefined02"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined03"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined03='" + + dtDetail.Rows[intRow]["userdefined03"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined04"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined04='" + + dtDetail.Rows[intRow]["userdefined04"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined05"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined05='" + + dtDetail.Rows[intRow]["userdefined05"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined06"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined06='" + + dtDetail.Rows[intRow]["userdefined06"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined07"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined07='" + + dtDetail.Rows[intRow]["userdefined07"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined08"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined08='" + + dtDetail.Rows[intRow]["userdefined08"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined09"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined09='" + + dtDetail.Rows[intRow]["userdefined09"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined10"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined10='" + + dtDetail.Rows[intRow]["userdefined10"].ToString().Trim() + "'"); + } + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine11")) Then + // strSQL += ",User_Defined11='" & dtDetail.Rows(intRow)("userdefine11").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine12")) Then + // strSQL += ",User_Defined12='" & dtDetail.Rows(intRow)("userdefine12").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine13")) Then + // strSQL += ",User_Defined13='" & dtDetail.Rows(intRow)("userdefine13").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine14")) Then + // strSQL += ",User_Defined14='" & dtDetail.Rows(intRow)("userdefine14").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine15")) Then + // strSQL += ",User_Defined15='" & dtDetail.Rows(intRow)("userdefine15").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine16")) Then + // strSQL += ",User_Defined16='" & dtDetail.Rows(intRow)("userdefine16").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine17")) Then + // strSQL += ",User_Defined17='" & dtDetail.Rows(intRow)("userdefine17").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine18")) Then + // strSQL += ",User_Defined18='" & dtDetail.Rows(intRow)("userdefine18").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine19")) Then + // strSQL += ",User_Defined19='" & dtDetail.Rows(intRow)("userdefine19").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine20")) Then + // strSQL += ",User_Defined20='" & dtDetail.Rows(intRow)("userdefine20").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine21")) Then + // strSQL += ",User_Defined21=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine21")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine22")) Then + // strSQL += ",User_Defined22=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine22")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine23")) Then + // strSQL += ",User_Defined23=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine23")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine24")) Then + // strSQL += ",User_Defined24=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine24")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine25")) Then + // strSQL += ",User_Defined25=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine25")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine26")) Then + // strSQL += ",User_Defined26=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine26")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine27")) Then + // strSQL += ",User_Defined27=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine27")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine28")) Then + // strSQL += ",User_Defined28=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine28")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine29")) Then + // strSQL += ",User_Defined29=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine29")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine30")) Then + // strSQL += ",User_Defined30=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine30")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine31")) Then + // strSQL += ",User_Defined31='" + dtDetail.Rows(intRow)("userdefine31").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine32")) Then + // strSQL += ",User_Defined32='" + dtDetail.Rows(intRow)("userdefine32").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine33")) Then + // strSQL += ",User_Defined33='" + dtDetail.Rows(intRow)("userdefine33").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine34")) Then + // strSQL += ",User_Defined34='" + dtDetail.Rows(intRow)("userdefine34").Trim + "'" + // End If + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["graph_no"]))) + { + strSQL = Conversions.ToString(strSQL + ",GraphNo='" + + dtDetail.Rows[intRow]["graph_no"].ToString().Trim() + "'"); + } + + strSQL += " Where ProductNo='" + strERP_ProductNo + "' And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + case "D": // D:刪除 + { + + if (drTemp.Read()) + { + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drTemp["IssueState"], 0, false))) + { + // ----------------------------------------------------------- + // 先刪除MES產品相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES產品設定 + // ----------------------------------------------------------- + strSQL = "Update tblPRDProductBasis Set " + " IssueState=-1" + " Where ProductNo='" + strERP_ProductNo + "'" + " And ProductVersion='" + strERP_ProductVersion + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + + } + } + // aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " & strERP_ProductNo & ", [%PRODUCTVERSION%](item_ver): " & strERP_ProductVersion & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelProduct(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_ProductNo, strERP_ProductVersion) < 0) + { + exitTry2 = exitTry = true; + break; + + } + drTemp.Close(); + //cmmTemp.Dispose(); + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%PRODUCTNO%](item_no): " + strERP_ProductNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry) + { + break; + } + } + + else if (dtDetail.Rows[intRow]["item_category"].Equals("M")) // 處理物料類型 + { + + // ----------------------------------------------------------- + // 固定檢查MaterialType='MATERIL'資料,若不存在則自動新增。 + // ----------------------------------------------------------- + // If AddMaterialType(cnnMES, colSQL_2MES, colSQL_2MES_Rows, aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0 Then Exit Try + + if (aryMaterialType.IndexOf(strMaterialType) == -1) + { + if (AddMaterialType(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strMaterialType, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryMaterialType.Add(strMaterialType); + } + } + + // ----------------------------------------------------------- + // 取出各欄位資料 + // ----------------------------------------------------------- + strERP_MaterialNo = dtDetail.Rows[intRow]["item_no"].ToString().Trim().ToUpper(); + strErpNo = dtDetail.Rows[intRow]["item_no"].ToString().Trim(); // 記錄原始之ERP編號 + strERP_ProductVersion = Interaction.IIf(string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["item_ver"])), "1", dtDetail.Rows[intRow]["item_ver"]).ToString().Trim(); + + strERP_status = dtDetail.Rows[intRow]["transstatus"].ToString().Trim().ToUpper(); + // 2022/10/19 Lena, 修正錯誤 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(dtDetail.Rows[intRow]["production_unit_no"], "", false))) + { + strERP_UnitNo = "N/A"; + } + else // 單位有傳入才作檢查 + { + string strUnitNo = dtDetail.Rows[intRow]["production_unit_no"].ToString().Trim(); + strERP_UnitNo = dtDetail.Rows[intRow]["production_unit_no"].ToString().Trim().ToLower(); + // ----------------------------------------------------------- + // 檢查UnitNo資料,若不存在則自動新增。 + // ----------------------------------------------------------- + if (aryUnitNo.IndexOf(strERP_UnitNo) == -1) + { + if (AddUnitNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strUnitNo, strERPCreator, DateTime.Now, "AutoRun建立") < 0) + { + exitTry2 = true; + break; + } + else + { + aryUnitNo.Add(strERP_UnitNo); + } + } + + } + strERP_ItemName = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["item_name"])), "N/A", dtDetail.Rows[intRow]["item_name"])); + strERP_SpecNo = Conversions.ToString(Interaction.IIf(string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["specno"])), "N/A", dtDetail.Rows[intRow]["specno"])); + + // 2019/07/08 Eric Mantis:59382 Lot_manage 欄位 批號管理 目前 T100 會拋轉 1,2,3 ,但是 MES 目前只有0/1 拋轉時並未轉換 + // 0(False):不管控物料批號,系統將視物料批號為N/A。 + // 1(True):管控物料批號,所有之進料、退料、扣料動作都必須輸入物料批號。 + if (!string.IsNullOrWhiteSpace(Conversions.ToString(dtDetail.Rows[intRow]["checklotno"]))) + { + // 91087: [605][CP+FT] E10ICD整合問題_E10ICD拋轉批號查核(lot_manage)欄位值調整,MES須同步對應"是否檢查批號(CheckLotNo)"欄位 + if (dtDetail.Rows[intRow]["checklotno"].Equals("Y") | dtDetail.Rows[intRow]["checklotno"].Equals("N")) + { + if (dtDetail.Rows[intRow]["checklotno"].Equals("Y") == true) + { + strERP_LotManage = "1"; + } + else if (dtDetail.Rows[intRow]["checklotno"].Equals("N") == true) + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + } + else + { + strERP_LotManage = "0"; + } + + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + bool exitTry1 = false; + switch (strERP_status ?? "") + { + case "AU": // 有資料修改沒資料新增 + { + if (drChk["MaterialNo"] is DBNull) + { + // 2019/10/25 Eric Mantis:60113 調整成物料自動核准 + intIssueState = 2; + // ----------------------------------------------------------- + // 物料編號合理性檢查 + // 2019/07/22 Eric 啟用檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkValid_MaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + // ----------------------------------------------------------- + // 新增MES物料設定 + // MaterialName,MaterialSpec 必要欄位填"N/A". + // ----------------------------------------------------------- + strSQLCol = "Insert Into tblMTLMaterialBasis " + "(MaterialNo, MaterialName, MaterialSpec, MaterialType," + " PutInPlace, CountWay, CheckLotNo, UnitType, UnitNo, Description," + " IssueState, Creator, CreateDate, ERPNo, QCCategory"; + strSQLVal = ") Values('" + strERP_MaterialNo + "','" + strERP_ItemName + "','" + strERP_SpecNo + "','" + strMaterialType + "'," + intPutInPlace + "," + intCountWay + "," + strERP_LotManage + ",'" + strERP_UnitNo + "','" + strERP_UnitNo + "','AutoRun建立'," + intIssueState + ",'" + strERPCreator + "'," + "To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS'), '" + strErpNo + "', 'N/A'"; + // 2022/10/19 Lena, 修正欄位名稱的錯誤 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined01"]))) + { + strSQLCol += ",User_Defined01"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined01"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined02"]))) + { + strSQLCol += ",User_Defined02"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined02"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined03"]))) + { + strSQLCol += ",User_Defined03"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined03"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined04"]))) + { + strSQLCol += ",User_Defined04"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined04"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined05"]))) + { + strSQLCol += ",User_Defined05"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined05"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined06"]))) + { + strSQLCol += ",User_Defined06"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined06"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined07"]))) + { + strSQLCol += ",User_Defined07"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined07"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined08"]))) + { + strSQLCol += ",User_Defined08"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined08"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined09"]))) + { + strSQLCol += ",User_Defined09"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined09"].ToString().Trim()), "'")); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined10"]))) + { + strSQLCol += ",User_Defined10"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["userdefined10"].ToString().Trim()), "'")); + } + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine11")) Then + // strSQLCol += ",User_Defined11" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine11").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine12")) Then + // strSQLCol += ",User_Defined12" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine12").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine13")) Then + // strSQLCol += ",User_Defined13" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine13").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine14")) Then + // strSQLCol += ",User_Defined14" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine14").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine15")) Then + // strSQLCol += ",User_Defined15" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine15").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine16")) Then + // strSQLCol += ",User_Defined16" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine16").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine17")) Then + // strSQLCol += ",User_Defined17" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine17").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine18")) Then + // strSQLCol += ",User_Defined18" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine18").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine19")) Then + // strSQLCol += ",User_Defined19" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine19").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine20")) Then + // strSQLCol += ",User_Defined20" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine20").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine21")) Then + // strSQLCol += ",User_Defined21" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine21")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine22")) Then + // strSQLCol += ",User_Defined22" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine22")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine23")) Then + // strSQLCol += ",User_Defined23" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine23")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine24")) Then + // strSQLCol += ",User_Defined24" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine24")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine25")) Then + // strSQLCol += ",User_Defined25" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine25")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine26")) Then + // strSQLCol += ",User_Defined26" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine26")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine27")) Then + // strSQLCol += ",User_Defined27" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine27")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine28")) Then + // strSQLCol += ",User_Defined28" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine28")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine29")) Then + // strSQLCol += ",User_Defined29" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine29")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine30")) Then + // strSQLCol += ",User_Defined30" + // strSQLVal += ",To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine30")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine31")) Then + // strSQLCol += ",User_Defined31" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine31").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine32")) Then + // strSQLCol += ",User_Defined32" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine32").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine33")) Then + // strSQLCol += ",User_Defined33" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine33").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine34")) Then + // strSQLCol += ",User_Defined34" + // strSQLVal += ",'" + dtDetail.Rows(intRow)("userdefine34").Trim + "'" + // End If + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["graph_no"]))) + { + strSQLCol += ",GraphNo"; + strSQLVal = Conversions.ToString(strSQLVal + Operators.AddObject(Operators.AddObject(",'", dtDetail.Rows[intRow]["graph_no"].ToString().Trim()), "'")); + } + + strSQL = strSQLCol + strSQLVal + ")"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + else + { + // ----------------------------------------------------------- + // 修改MES物料設定 + // ----------------------------------------------------------- + // 2017-06-02, Joe, 修改時如原狀態為-1變更為0,其他不異動 + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], -1, false))) + { + intIssueState = 0; + } + else + { + intIssueState = Conversions.ToInteger(drChk["IssueState"]); + } + + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState = " + intIssueState + " , MaterialName = '" + strERP_ItemName + "', UnitType = '" + strERP_UnitNo + "', UnitNo = '" + strERP_UnitNo + "'" + ",CHECKLOTNO='" + strERP_LotManage + "',ERPNo='" + strErpNo + "' "; + + // 2022/10/19 Lena, 修正欄位名稱錯誤的問題 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined01"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined01='" + + dtDetail.Rows[intRow]["userdefined01"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined02"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined02='" + + dtDetail.Rows[intRow]["userdefined02"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined03"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined03='" + + dtDetail.Rows[intRow]["userdefined03"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined04"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined04='" + + dtDetail.Rows[intRow]["userdefined04"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined05"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined05='" + + dtDetail.Rows[intRow]["userdefined05"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined06"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined06='" + + dtDetail.Rows[intRow]["userdefined06"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined07"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined07='" + + dtDetail.Rows[intRow]["userdefined07"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined08"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined08='" + + dtDetail.Rows[intRow]["userdefined08"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined09"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined09='" + + dtDetail.Rows[intRow]["userdefined09"].ToString().Trim() + "'"); + } + + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["userdefined10"]))) + { + strSQL = Conversions.ToString(strSQL + ",User_Defined10='" + + dtDetail.Rows[intRow]["userdefined10"].ToString().Trim() + "'"); + } + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine11")) Then + // strSQL += ",User_Defined11='" & dtDetail.Rows(intRow)("userdefine11").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine12")) Then + // strSQL += ",User_Defined12='" & dtDetail.Rows(intRow)("userdefine12").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine13")) Then + // strSQL += ",User_Defined13='" & dtDetail.Rows(intRow)("userdefine13").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine14")) Then + // strSQL += ",User_Defined14='" & dtDetail.Rows(intRow)("userdefine14").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine15")) Then + // strSQL += ",User_Defined15='" & dtDetail.Rows(intRow)("userdefine15").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine16")) Then + // strSQL += ",User_Defined16='" & dtDetail.Rows(intRow)("userdefine16").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine17")) Then + // strSQL += ",User_Defined17='" & dtDetail.Rows(intRow)("userdefine17").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine18")) Then + // strSQL += ",User_Defined18='" & dtDetail.Rows(intRow)("userdefine18").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine19")) Then + // strSQL += ",User_Defined19='" & dtDetail.Rows(intRow)("userdefine19").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine20")) Then + // strSQL += ",User_Defined20='" & dtDetail.Rows(intRow)("userdefine20").Trim & "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine21")) Then + // strSQL += ",User_Defined21=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine21")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine22")) Then + // strSQL += ",User_Defined22=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine22")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine23")) Then + // strSQL += ",User_Defined23=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine23")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine24")) Then + // strSQL += ",User_Defined24=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine24")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine25")) Then + // strSQL += ",User_Defined25=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine25")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine26")) Then + // strSQL += ",User_Defined26=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine26")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine27")) Then + // strSQL += ",User_Defined27=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine27")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine28")) Then + // strSQL += ",User_Defined28=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine28")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine29")) Then + // strSQL += ",User_Defined29=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine29")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine30")) Then + // strSQL += ",User_Defined30=To_Date('" & CDate_EAI(dtDetail.Rows(intRow)("userdefine30")).ToString("yyyy/MM/dd HH:mm:ss") & "','YYYY/MM/DD HH24:MI:SS') " + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine31")) Then + // strSQL += ",User_Defined31='" + dtDetail.Rows(intRow)("userdefine31").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine32")) Then + // strSQL += ",User_Defined32='" + dtDetail.Rows(intRow)("userdefine32").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine33")) Then + // strSQL += ",User_Defined33='" + dtDetail.Rows(intRow)("userdefine33").Trim + "'" + // End If + + // If Not String.IsNullOrEmpty(dtDetail.Rows(intRow)("userdefine34")) Then + // strSQL += ",User_Defined34='" + dtDetail.Rows(intRow)("userdefine34").Trim + "'" + // End If + + // 2017-05-22, Joe, Add 圖號 + if (!string.IsNullOrEmpty(Conversions.ToString(dtDetail.Rows[intRow]["graph_no"]))) + { + strSQL = Conversions.ToString(strSQL + ",GraphNo='" + + dtDetail.Rows[intRow]["graph_no"].ToString().Trim() + "'"); + } + + strSQL += " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + + break; + } + + case "D": // D:刪除 + { + // 檢查是否有此物料設定 + drChk = GetMaterialBasis(strERP_MaterialNo, cnnMES, aryMES_Message); + if (drChk == null) + { + exitTry2 = exitTry1 = true; + break; + } // GoTo lblExitTry_2_NextRow 'fail + + if (!(drChk["MaterialNo"] is DBNull)) + { + // ----------------------------------------------------------- + // 物料編號使用狀況檢查 + // ----------------------------------------------------------- + if (ProductIntegration_ChkforDelMaterialNo(ref cnnMES, ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(drChk["IssueState"], 0, false))) + { + + // ----------------------------------------------------------- + // 刪除MES物料相關設定 + // ----------------------------------------------------------- + if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + } + } + + else + { + // ----------------------------------------------------------- + // 作廢MES物料設定 + // ----------------------------------------------------------- + strSQL = "Update tblMTLMaterialBasis Set " + " IssueState=-1" + " Where MaterialNo='" + strERP_MaterialNo + "'"; + colSQL_2MES.Add(strSQL); + colSQL_2MES_Rows.Add(1); + } + } + + // aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " & strERP_MaterialNo & ", [%IS NOT EXIST%], [%NOT ALLOW TO DELETE%]!!")) + // 刪除有可能會在資料庫中取不到資料,因為同一個交易還沒有commit; + else if (ProductIntegration_DelMaterial(ref colSQL_2MES, ref colSQL_2MES_Rows, ref aryMES_Message, strERP_MaterialNo) < 0) + { + exitTry2 = exitTry1 = true; + break; // GoTo lblExitTry_2_NextRow + + } + + break; + } + + default: + { + aryMES_Message.Add(TranslateMsg("[%MATERIALNO%]item_no): " + strERP_MaterialNo + ",[%TRANSTATUS%](tran_status):" + strERP_status + " [%INVALID%], [%NOT ALLOWED TO EXECUTE%]!!", strLanguageMode, strResourceDir)); + break; + } + } + + if (exitTry1) + { + break; + } + + } + } + + if (exitTry2) + { + break; + + } + } + catch (Exception EX_drIF) + { + + strMES_Result = "9"; + aryMES_Message.Add("WriteProductOrMaterailBasis.Exception" + '\n' + EX_drIF.Message); + } + + finally + { + // =============================================================================== + // 判定 MES_Result 處理結果 (成功回寫1, 失敗回寫9). + // =============================================================================== + + if (aryMES_Message.Count == 0) + { + strMES_Result = "1"; + + // -------------------------------------------------- + // MES資料庫異動 + // -------------------------------------------------- + if (colSQL_2MES.Count > 0) + { + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colSQL_2MES, colSQL_2MES_Rows); + } + } + + // 組合執行錯誤字串: Chr(10)分隔 + strMES_MESSAGE = ArrayList2String(ref aryMES_Message); + + // MES_Message長度4000限制, 截取0-3996碼加"...". + if (strMES_MESSAGE.Length > 4000) + strMES_MESSAGE = strMES_MESSAGE.Substring(0, 3996) + "..."; + + // ---取消前面收集SQL--- + colSQL_2MES.Clear(); + colSQL_2MES_Rows.Clear(); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + if (aryMES_Message.Count > 0) + { + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + } + } + } + while (false); + + // //return 0 : Success + WriteProductOrMaterailBasis_WFRet = 0; + } + catch (Exception ex) + { + aryMES_Message.Add("WriteProductOrMaterailBasis,Finally:" + ex.Message); + + // 當該筆交易記錄處理失敗,必須錯誤訊息匯整記錄(aryMES_Message->aryReturnMessage)。 + foreach (string strErr in aryMES_Message) + aryReturnMessage.Add(strErr); + + throw; + } + finally + { + if (drTemp != null) + drTemp.Close(); + + CloseConnection(cnnMES); + } + + return WriteProductOrMaterailBasis_WFRet; + + } + + private void TreatWriteLogTable_WF(Collection colResponseXML, string strType) + { + Collection colLogSQL = new Collection(), colLogSQL_Rows = new Collection(); + string lastID = default(string), KeepLog; // 最終請求完成之id + ArrayList idList = new ArrayList(), arySQL = new ArrayList(), arySQLParameter = new ArrayList(); + var CreateDate = new DateTime(); + + string strCode = default(string); + string strSql_Code = default(string); + string strDescription = default(string); + foreach (string strOutXML in colResponseXML) + { + + XmlDoc.LoadXml(strOutXML); + string strKey_Condition = ""; + string strRequest_Datetime = ""; + chkExecutionStatus_WF(XmlDoc, ref strCode, ref strSql_Code, ref strDescription, ref strKey_Condition, ref strRequest_Datetime); + + // Dim nodeID As XmlNode = XmlDoc.SelectSingleNode("/response/reqid") + // Dim strID As String = InitOPSerial() + XmlNode nodeID; + string strID = string.Empty; + + try + { + XmlDoc.LoadXml(strOutXML); + nodeID = XmlDoc.SelectSingleNode("/response/reqid"); + } + catch (Exception ex) + { + nodeID = null; + } + + if (nodeID == null) + { + strID = Guid.NewGuid().ToString(); + } + else + { + strID = nodeID.InnerText; + } + + // KeepLog = AppSettings("keepLog") + + // If (KeepLog <> "") AndAlso (IsNumeric(KeepLog)) Then + // '----- 清除小於保留天數的 TransactionBasis Log ----- + // CreateDate = DateAdd(DateInterval.Day, -1 * KeepLog, DateTime.Now) + // colLogSQL.Add("delete from TBLERPTRANSACTIONXMLLOG_BASIS where createdate < To_Date('" & Format(CreateDate, "yyyy/MM/dd H:mm:ss") & "','YYYY/MM/DD HH24:MI:SS')") + // colLogSQL_Rows.Add(-1) + // End If + + // 判斷當有LOG資料時,先刪除再新增 + if (HaveLogData(strID)) + { + colLogSQL.Add("DELETE FROM TBLERPTRANSACTIONXMLLOG_BASIS WHERE ID = '" + strID + "'"); + colLogSQL_Rows.Add(-1); + } + + string pData_Time = string.Empty; + if (!string.IsNullOrEmpty(strRequest_Datetime.ToString())) + { + pData_Time = strRequest_Datetime; + } + + int pStatus = -1; + + if (strCode.Equals("0")) + { + pStatus = 1; + } + else + { + pStatus = -1; + } + + ComposeERPTransactionXMLLog(strID, strID, strType, strOutXML, pData_Time, pStatus, strDescription, arySQL, arySQLParameter, 1); + // Dim strLogSQL As String = ComposeERPTransactionXMLLog(nodeID.InnerText, nodeID.InnerText, strType, strOutXML, pData_Time, pStatus, objResponse.description) + + // colLogSQL.Add(strLogSQL) + // colLogSQL_Rows.Add(1) + + lastID = strID; + idList.Add(strID); + } + + // 將所有請求之BatchID設成最終請求完成之id + foreach (string strID in idList) + { + if ((strID ?? "") != (lastID ?? "")) + { + colLogSQL.Add("UPDATE TBLERPTRANSACTIONXMLLOG_BASIS SET BATCHID = '" + lastID + "' WHERE ID = '" + strID + "'"); + colLogSQL_Rows.Add(1); + } + } + + // 正式寫入log table + if (colLogSQL.Count > 0 || arySQL.Count > 0) + { + // Call ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, colLogSQL, colLogSQL_Rows) + + string argstrDatabaseType = Conversions.ToString(DataBaseType); + Collection argCollectionSQL_Rows = null; + ExecuteSQLNoneQuery_CLOB_Multi(argstrDatabaseType, strConnectionString, colLogSQL, arySQL, arySQLParameter, CollectionSQL_Rows: argCollectionSQL_Rows); + + } + } + + #endregion + + #region ---工單用料回拋TP ICD--- + + private object funWIPMaterialDeductData_TPICD(Collection colParameters = null) + { + object funWIPMaterialDeductData_TPICDRet = default(object); + + var cnnTemp = default(IDbConnection); + string strSQL; + + string strAccess = string.Empty; + string strParameter = string.Empty; + string strMaster = string.Empty; + string strDetail = string.Empty; + + string strTempField = string.Empty; + string strTempRecord = string.Empty; + + var arriveTime = DateTime.Now; + + string strGroupNo = string.Empty; // Mail通知群組 + string strRowCount = "500"; //拋轉ERP筆數 + string description = string.Empty; // Response... 錯誤訊息 + string responseValue = string.Empty; // Request/Response... 收貨單單號, 成功回傳ERP收貨單號起始~截止單號 + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var dsTemp = new DataSet(); + + var datNow = DateTime.Now; + + DataTable MTLDeductTemp = null; + + do + { + try + { + cnnTemp = CreateConnection(strConnectionString); + + // Parameter01為參數一(使用者群組), 可以不設定 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + //若有設定, 先檢查群組合理性 + if (!string.IsNullOrEmpty(strGroupNo) && ERP2MES_MailNoticeChk(ref cnnTemp, ref aryReturnMessage, strGroupNo) < 0) + { + funWIPMaterialDeductData_TPICDRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return funWIPMaterialDeductData_TPICDRet; // 離開 Function。 + } + } + + // 拋轉ERP筆數必須為數值型態 + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + strRowCount = colParameters["Parameter02"].ToString().Trim(); + } + } + + + // ---- InXml ----- + // + // 2023/08/07,Lena, 調整為取出 TipTop ICD 連線資料 + strAccess = cbXMLAccess_TP(ERPName: "TIPTOPICD"); + + // + strTempField = ""; + strTempRecord = cbXMLRecord_TPICD(strTempField); + strParameter = cbXMLParameter_TPICD(strTempRecord); + + int intItemNo = 1; + + // 2023/08/09,Lena, 調整為只取2和4的用料拋 ERP + if (strDataBaseType != "oracle") + { + strSQL = "Select TOP " + Conversions.ToInteger(strRowCount) + " * From tblWIPMaterialDeductContent Where ERPFlag = 'N' and PutInPlaceType in (2,4) Order By DeductDate"; + } + else + { + strSQL = "Select A.* From (Select * From tblWIPMaterialDeductContent Where ERPFlag = 'N' and PutInPlaceType in (2,4) Order By DeductDate) A Where RowNum <= " + Conversions.ToInteger(strRowCount); + } + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "MTLDeduct", cnnTemp); + + //目前的ERP Response + string strResponse = ""; + + if (dsTemp.Tables["MTLDeduct"].Rows.Count > 0) + { + datNow = DateTime.Now; + + // + strTempField = ""; + strTempRecord = cbXMLRecord_TP(strTempField); + strMaster = cbXMLMaster_TP("Master", strTempRecord); + + MTLDeductTemp = dsTemp.Tables["MTLDeduct"].Clone(); + + //進行中的DataTypeNo + int stateType = Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[0]["DataTypeNo"]); + + for (int i = 0; i < dsTemp.Tables["MTLDeduct"].Rows.Count; i++) + { + DataRow drAdd = MTLDeductTemp.NewRow(); + foreach (DataColumn dc in MTLDeductTemp.Columns) + { + drAdd[dc.ColumnName] = dsTemp.Tables["MTLDeduct"].Rows[i][dc.ColumnName]; + } + MTLDeductTemp.Rows.Add(drAdd); + + //沒有下一筆 或 下一筆與本筆DataTypeNo不相符,進行組成XML拋ERP + if (i + 1 == dsTemp.Tables["MTLDeduct"].Rows.Count || + Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[i + 1]["DataTypeNo"]) != stateType) + { + if (MTLDeductTemp != null && MTLDeductTemp.Rows.Count > 0) + { + string strDataType = ""; + switch (Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[i]["DataTypeNo"])) + { + case 1: //1:物料扣料 + strDataType = "[%MaterialDeduct%]"; + break; + case 2: //2:還原物料扣料 + strDataType = "[%UndoMaterialDeduct%]"; + break; + } + + // + strDetail = fuMaterialDeductDataToDetailContent(MTLDeductTemp, cnnTemp); + if (!strDetail.StartsWith(" 0) + { + strResponse = Strings.Mid(strResponse, 1, Strings.Len(strResponse) - 1); + } + } + dsTemp.Dispose(); + + //Return success + funWIPMaterialDeductData_TPICDRet = "success;" + strResponse + ";"; + + } + + catch (Exception ex) + { + funWIPMaterialDeductData_TPICDRet = CombineFailMsg("0000-999999", ex.Message); + + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WIPMaterialDeductData_TPICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", responseValue, "createasft5icd2", LogClass: "AutoRun", strException: argstrException1); + } + finally + { + try + { + if (funWIPMaterialDeductData_TPICDRet.ToString().Substring(0, 7) != "success") + { + if (dsTemp.Tables["MTLDeduct"] == null) + { + //未取出dsTemp.Tables["MTLDeduct"]表示非處理資料產生的錯誤, 以Mail內文的方式寄出 + string argFileName = "N/A"; + string argEmailSubject = "[AUT]" + TranslateMsg("[%FAILEDMATERIALDEDUCTCONTENTTOERP%]", strLanguageMode, strResourceDir) + "。"; + string argEmailBody = Conversions.ToString(funWIPMaterialDeductData_TPICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + } + else + { + //已有取出dsTemp.Tables["MTLDeduct"]表示是處理資料產生的錯誤, 以Excel作為副檔寄送Mail + var dtResult = new DataTable("FailResult"); + DataRow drAdd; + dtResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dtResult.Columns.Add("DeductDate", Type.GetType("System.String")); // 扣料日期 + dtResult.Columns.Add("LotSerial", Type.GetType("System.String")); // 生產批序號 + dtResult.Columns.Add("LogGroupSerial", Type.GetType("System.String")); // 生產批在作業站的Log序號 + dtResult.Columns.Add("DataTypeNo", Type.GetType("System.String")); // 1: 扣料 2:倒扣料 + dtResult.Columns.Add("LotNo", Type.GetType("System.String")); // 生產批編號 + dtResult.Columns.Add("OPNo", Type.GetType("System.String")); // 作業站編號 + dtResult.Columns.Add("EquipmentNo", Type.GetType("System.String")); // 設備編號 + dtResult.Columns.Add("MaterialLevel", Type.GetType("System.String")); // 物料等級 + dtResult.Columns.Add("MaterialNo", Type.GetType("System.String")); // 物枓編號 + dtResult.Columns.Add("MaterialLotNo", Type.GetType("System.String")); // 物枓批號 + + if (MTLDeductTemp != null) + { + foreach (DataRow drMTLDeduct in MTLDeductTemp.Rows) + { + drAdd = dtResult.NewRow(); + drAdd["WOWorkDate"] = arriveTime.ToString("yyyyMMdd"); + drAdd["DeductDate"] = Strings.Format(drMTLDeduct["DeductDate"], "yyyy/MM/dd"); + drAdd["LotSerial"] = drMTLDeduct["LotSerial"].ToString(); + drAdd["LogGroupSerial"] = drMTLDeduct["LogGroupSerial"].ToString(); + drAdd["DataTypeNo"] = drMTLDeduct["DataTypeNo"].ToString(); + drAdd["LotNo"] = drMTLDeduct["LotNo"].ToString(); + drAdd["OPNo"] = drMTLDeduct["OPNo"].ToString(); + drAdd["EquipmentNo"] = drMTLDeduct["EquipmentNo"].ToString(); + drAdd["MaterialLevel"] = drMTLDeduct["MaterialLevel"].ToString(); + drAdd["MaterialNo"] = drMTLDeduct["MaterialNo"].ToString(); + drAdd["MaterialLotNo"] = drMTLDeduct["MaterialLotNo"].ToString(); + dtResult.Rows.Add(drAdd); + } + } + + string strFillType = "XLS"; + + //var iugTemp = new iMESUltraGrid.iMESUltraGridControl(); + //iugTemp.iMESUltraGrid_InitializeLayOut += iMESUltraGrid_InitializeLayOut; + + //iugTemp.Identity = "iMES"; + //iugTemp.UserNo = "iMES"; + + //var memStream = new MemoryStream(); + //讓最後一列style生效,新增空列 + DataRow drEnd = dtResult.NewRow(); + dtResult.Rows.Add(drEnd); + var dsResult = new DataSet(); + dsResult.Tables.Add(dtResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult; + + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dsResult, ExcelMode, strLanguageMode, strResourceDir); + //var memStream = new MemoryStream(membyte); + //memStream.Seek(0L, SeekOrigin.Begin); + + + //// 將欄位翻譯 + //if (!string.IsNullOrEmpty(modWIN.gLanguageMode)) + //{ + // var ColSaveControl = new Collection(); + // ColSaveControl.Add(iugTemp.iMESUltraGrid); + // //ChgTranslateName(ColSaveControl, modWIN.gLanguageMode); + //} + + //switch (strFillType.ToString().ToUpper() ?? "") + //{ + // case "XLS": + // { + // // 匯出Excel再轉Stream + // workbook = ExcelExp.Export(iugTemp.iMESUltraGrid); // iugTemp.iMESUltraGrid, Infragistics.Documents.Excel.WorkbookFormat.Excel97To2003 + // workbook.Save(memStream); + // memStream.Seek(0L, SeekOrigin.Begin); + // break; + // } + //} + + // Stream轉成附件檔 + //var AttachFile = new byte[(int)(memStream.Length - 1L + 1)]; + //double count = 0d; + //while (count < memStream.Length) + //{ + // AttachFile[(int)Math.Round(count)] = Convert.ToByte(memStream.ReadByte()); + // count += 1d; + //} + try + { + dsResult.Dispose(); + } + catch (Exception ex) + { + } + + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "[AUT]" + TranslateMsg("[%FAILEDMATERIALDEDUCTCONTENTTOERP%]", strLanguageMode, strResourceDir) + "。"; + string argEmailBody = Conversions.ToString(funWIPMaterialDeductData_TPICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funWIPMaterialDeductData_TPICDRet = argEmailBody; + } + } + CloseConnection(cnnTemp); + dsTemp.Dispose(); + } + + catch (Exception ex) + { + funWIPMaterialDeductData_TPICDRet = "fail_Finally;" + ex.Message; + } + } + } + while (false); + return funWIPMaterialDeductData_TPICDRet; + + } + + private string fuMaterialDeductDataToDetailContent(DataTable MTLDeductData, IDbConnection cnnTemp) + { + string fuMaterialDeductDataToDetailContentRet = defString; + DbDataReader drTemp = default(DbDataReader); + string strSQL = ""; + string strTempField = string.Empty; + string strTempRecord = string.Empty; + string strDetail = string.Empty; + + try + { + foreach (DataRow drMTLDeduct in MTLDeductData.Rows) + { + strTempField = cbXMLField_TP("status", drMTLDeduct["DataTypeNo"].ToString()); // 1:扣料 2:倒扣料 + strTempField += cbXMLField_TP("sfp01", ""); // 填空值 + strTempField += cbXMLField_TP("sfp02", Strings.Format(drMTLDeduct["DeductDate"], "yyyy/MM/dd")); // 扣料日期 + strTempField += cbXMLField_TP("sfp16", "MES"); // 申請人, 固定填MES + + if (!(drMTLDeduct["MONo"] is DBNull)) + { + strTempField += cbXMLField_TP("sfs03", drMTLDeduct["MONo"].ToString()); // 工單編號 + } + else + { + strSQL = "Select A.MONo From tblWIPLotBasis A, tblWIPLotState B Where A.BaseLotNo = B.BaseLotNo And B.LotNo = '" + drMTLDeduct["LotNo"].ToString() + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + strTempField += cbXMLField_TP("sfs03", drTemp["MONo"].ToString()); // 工單編號 + } + else + { + fuMaterialDeductDataToDetailContentRet = TranslateMsg("[%LotNo%] :" + drMTLDeduct["LotNo"].ToString() + ",[%MONONOTEXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToDetailContentRet; + } + drTemp.Close(); + } + + if (drMTLDeduct["MaterialLevel"].ToString() == "0") + { + strSQL = "Select ERPNo From tblMTLMaterialBasis Where IssueState = 2 And MaterialNo = '" + drMTLDeduct["MaterialNo"].ToString() + "'"; + } + else + { + strSQL = "Select ERPNo From tblPRDProductBasis Where IssueState = 2 And Curversion = 1 And ProductNo = '" + drMTLDeduct["MaterialNo"].ToString() + "'"; + } + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ERPNo"].ToString() != "") + { + strTempField += cbXMLField_TP("sfs04", drTemp["ERPNo"].ToString()); // 物料/半成品在ERP的編號 + } + else + { + strTempField += cbXMLField_TP("sfs04", drMTLDeduct["MaterialNo"].ToString()); // 物料/半成品在ERP的編號, 若ERPNo沒有值, 則拋MaterialNo + } + } + else + { + fuMaterialDeductDataToDetailContentRet = TranslateMsg("[%MaterialNo%] :" + drMTLDeduct["MaterialNo"].ToString() + " [%IS NOT EXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToDetailContentRet; + } + drTemp.Close(); + + + strTempField += cbXMLField_TP("sfs07", drMTLDeduct["PutinPlaceNo"].ToString()); // 扣料點編號 PutinPlaceNo + if (drMTLDeduct["LocatorNo"].ToString() == "N/A") + { + strTempField += cbXMLField_TP("sfs08", ""); // 儲位, 若為N/A則拋空白 + } + else + { + strTempField += cbXMLField_TP("sfs08", drMTLDeduct["LocatorNo"].ToString()); // 儲位 + } + strTempField += cbXMLField_TP("sfs09", drMTLDeduct["MaterialLotNo"].ToString()); // 物料批號 + //2023/10/20,Ning,148374: IC一体化测试 + strTempField += cbXMLField_TP("sfs10", drMTLDeduct["OPNo"].ToString()); // 作業站編號 + + if (drMTLDeduct["MaterialLevel"].ToString() == "0") + { + strSQL = "Select A.UnitNo, B.DefaultValue From tblMTLMaterialBasis A Left Join tblMTLMaterialProperty B On A.MaterialNo = B.Material And B.IssueState = 2 And Upper(B.PropertyNo) = 'ERPUNITNO'" + + " Where A.IssueState = 2 And A.MaterialNo = '" + drMTLDeduct["MaterialNo"].ToString() + "'"; + } + else + { + strSQL = "Select A.UnitNo, B.DefaultValue From tblPRDProductBasis A Left Join tblPRDProductProperty B On A.ProductNo = B.ProductNo And A.ProductVersion = B.ProductVersion And B.IssueState = 2 And Upper(B.PropertyNo) = 'ERPUNITNO'" + + " Where A.IssueState = 2 And A.CurVersion = 1 And A.ProductNo = '" + drMTLDeduct["MaterialNo"].ToString() + "'"; + } + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["DefaultValue"].ToString() != "") + { + strTempField += cbXMLField_TP("sfs30", drTemp["DefaultValue"].ToString()); // 取物料屬性ERPUnitNo 的屬性值 + } + else + { + strTempField += cbXMLField_TP("sfs30", drTemp["UnitNo"].ToString()); // 物料屬性值為空, 則物料主檔的UnitNo + } + } + else + { + fuMaterialDeductDataToDetailContentRet = TranslateMsg("[%MaterialNo%] :" + drMTLDeduct["MaterialNo"].ToString() + " [%IS NOT EXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToDetailContentRet; + } + drTemp.Close(); + + strTempField += cbXMLField_TP("sfs05", drMTLDeduct["DeductQty"].ToString()); //扣料數量(DeductQty) + strTempField += cbXMLField_TP("sfsiicd028", ""); //DateCode,填空值 + strTempField += cbXMLField_TP("idb05", ""); //刻號,填空值 + strTempField += cbXMLField_TP("idb06", ""); //Bin,填空值 + strTempField += cbXMLField_TP("idb11", ""); //數量,填空值 + strTempField += cbXMLField_TP("idb16", ""); //die數,填空值 + + strTempRecord += cbXMLRecord_TP(strTempField) + '\n'; + } + strDetail = cbXMLDetail_TP("sfs_file", strTempRecord); + } + catch (Exception ex) + { + throw; + } + return strDetail; + } + + private Boolean fuMaterialDeductDataThrowTPICD(string InXml, DataTable MTLDeductData, ref string responseValue, ref string description, ref DateTime arriveTime) + { + Boolean fuMaterialDeductDataThrowTPICDRet = false; + string OutXml = ""; + var XmlDoc = new XmlDocument(); + + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + string sqlcode = string.Empty; + string responseName = "rva01str"; + + string strSQL = ""; + var CollectionSQL = new Collection(); + + try + { + arriveTime = DateTime.Now; + responseValue = string.Empty; + description = string.Empty; + // ----- Call ERP Web Service ----- + using (var ws = new wsERP_TP.TIPTOPServiceGateWay()) + { + ws.Url = gERPWSURL; + OutXml = ws.createasft5icd2(InXml); + } + XmlDoc.LoadXml(OutXml); + + // ----- 取得ERP執行結果 code, sqlcode, description ----- + chkExecutionStatus_TP(XmlDoc, ref code, ref sqlcode, ref description); + + //2023/08/08,Lena, ERP 回拋的格式變更同TP + // ----- 取得收貨單號(起始單號~截止單號) ----- + //chkResponseContent_TPICD(XmlDoc, responseName, ref responseValue); + chkResponseContent_TP(XmlDoc, responseName, ref responseValue); + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WIPMaterialDeductData_TPICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "createasft5icd2", LogClass: "AutoRun", strException: argstrException1); + + if (code == "success") + { + foreach (DataRow drMTLDeduct in MTLDeductData.Rows) + { + strSQL = "Update tblWIPMaterialDeductContent Set ERPFlag = 'Y', ERPNo = '" + responseValue + "'" + + " Where LotSerial = '" + drMTLDeduct["LotSerial"].ToString() + "' And LogGroupSerial = '" + drMTLDeduct["LogGroupSerial"].ToString() + "'" + + " And DataTypeNo = " + drMTLDeduct["DataTypeNo"] + " And EquipmentNo = '" + drMTLDeduct["EquipmentNo"].ToString() + "'" + + " And MaterialLevel = " + drMTLDeduct["MaterialLevel"] + " And MaterialNo = '" + drMTLDeduct["MaterialNo"].ToString() + "' And MaterialLotNo = '" + drMTLDeduct["MaterialLotNo"].ToString() + "'" + + " And PutInPlaceType = " + drMTLDeduct["PutInPlaceType"]; + CollectionSQL.Add(strSQL); + } + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + fuMaterialDeductDataThrowTPICDRet = true; + } + + } + catch (Exception ex) + { + fuMaterialDeductDataThrowTPICDRet = false; + throw; + } + return fuMaterialDeductDataThrowTPICDRet; + } + + public bool chkResponseContent_TPICD(XmlDocument Xmldoc, string responseName, ref string responseValue) + { + bool chkResponseContent_TPICDRet = default(bool); + + try + { + chkResponseContent_TPICDRet = false; + + var de = Xmldoc.DocumentElement["ResponseContent"]; + if (de == null == true) + return chkResponseContent_TPICDRet; + + for (int i = 0, loopTo = de.ChildNodes.Count - 1; i <= loopTo; i++) + { + if (de.ChildNodes.Item(i).Name == "Parameter") + { + for (int j = 0, loopTo1 = de.ChildNodes.Item(i).ChildNodes.Count - 1; j <= loopTo1; j++) + { + if (de.ChildNodes.Item(i).ChildNodes[j].Name == "Field") + { + responseName = de.ChildNodes.Item(i).ChildNodes[j].Attributes["name"].Value; + responseValue = de.ChildNodes.Item(i).ChildNodes[j].Attributes["value"].Value; + } + } + } + } + chkResponseContent_TPICDRet = true; + } + catch (Exception ex) + { + chkResponseContent_TPICDRet = false; + } + + return chkResponseContent_TPICDRet; + } + + public string cbXMLParameter_TPICD(string strRecord) + { + string cbXMLParameter_TPICDRet = default(string); + + cbXMLParameter_TPICDRet = "" + '\n'; + cbXMLParameter_TPICDRet += strRecord + '\n'; + return cbXMLParameter_TPICDRet; + + } + + public string cbXMLRecord_TPICD(string strField) + { + string cbXMLRecord_TPICDRet = default(string); + + cbXMLRecord_TPICDRet = "" + '\n'; + cbXMLRecord_TPICDRet += strField; + return cbXMLRecord_TPICDRet; + + } + + public string cbXMLRequest_TPICD(string strAccess, string strParameter, string strMaster, string strDetail) + { + string cbXMLRequest_TPICDRet = default(string); + + cbXMLRequest_TPICDRet = "" + '\n'; + cbXMLRequest_TPICDRet += strAccess + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += strParameter + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += strMaster + '\n'; + cbXMLRequest_TPICDRet += strDetail + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += "" + '\n'; + cbXMLRequest_TPICDRet += ""; + + return cbXMLRequest_TPICDRet; + + } + + #endregion + + #region ---工單用料回拋E10 ICD--- + + private object funWIPMaterialDeductData_E10ICD(Collection colParameters = null) + { + object funWIPMaterialDeductData_E10ICDRet = default(object); + + var cnnTemp = default(IDbConnection); + string strSQL; + + string strOPGroupError = defString; + + string strCDOError = defString; + + string RequestKey = ""; + + string strGroupNo = string.Empty; //Mail通知群組 + string strRowCount = "500"; //拋轉ERP筆數 + string strMaterialOut = string.Empty; //領料單單別 + string strMaterialReturn = string.Empty; //退料單單別 + + var arriveTime = DateTime.Now; + string description = string.Empty; // Response... 錯誤訊息 + string responseValue = string.Empty; // Request/Response... 退料單號, 成功回傳ERP退料單號 + + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var dsTemp = new DataSet(); + + DataTable MTLDeductTemp = null; + DataRow[] OPGroupMTLDeduct = null; + + do + { + try + { + cnnTemp = CreateConnection(strConnectionString); + + //Parameter01:使用者群組,此功能fail時EMAIL通知群組。 + //Parameter02:拋轉ERP筆數,一次拋給 ERP 的生產批報工用料筆數,預設500筆。 + //Parameter03:ERP的領料單單別。 + //Parameter04:ERP的退料單單別。 + + // Parameter01:使用者群組, 可以不設定 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + //若有設定, 先檢查群組合理性 + if (!string.IsNullOrEmpty(strGroupNo) && ERP2MES_MailNoticeChk(ref cnnTemp, ref aryReturnMessage, strGroupNo) < 0) + { + funWIPMaterialDeductData_E10ICDRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + return funWIPMaterialDeductData_E10ICDRet; // 離開 Function。 + } + } + + // Parameter02:拋轉ERP筆數必須為數值型態 + if (Information.IsNumeric(colParameters["Parameter02"])) + { + if (!(colParameters["Parameter02"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter02"])))) + { + strRowCount = colParameters["Parameter02"].ToString().Trim(); + } + } + + // Parameter03:ERP的領料單單別,若未設定參數值,則回拋錯誤並結束此次作業 + if (!(colParameters["Parameter03"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter03"])))) + { + strMaterialOut = colParameters["Parameter03"].ToString().Trim(); + } + else + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg("[%MATERIALOUTSHEETTYPE%][%NOT SET%]!!", strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + + // Parameter04:ERP的退料單單別,若未設定參數值,則回拋錯誤並結束此次作業 + if (!(colParameters["Parameter04"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter04"])))) + { + strMaterialReturn = colParameters["Parameter04"].ToString().Trim(); + } + else + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg("[%MATERIALRETURNSHEETTYPE%][%NOT SET%]!!", strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + + // ---- InXml ----- + // 取得ERP資訊 + try + { + if (!GetERPSetting(ref dtERPSetting, "E10ICD", pEAIType: 1, pActiveERP: 1)) + { + if (!GetERPSetting(ref dtERPSetting, "E10ICD", pEAIType: 1)) + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + } + } + catch (Exception ex) + { + if (!GetERPSetting(ref dtERPSetting, "E10ICD", pEAIType: 1)) + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg("[%ERPWSURL%][%not found%]!", strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + } + + // 2023/08/09,Lena, 調整為只取2和4的用料拋 ERP + if (strDataBaseType != "oracle") + { + strSQL = "Select TOP " + Conversions.ToInteger(strRowCount) + " * From tblWIPMaterialDeductContent Where ERPFlag = 'N' and PutInPlaceType in (2,4) Order By DeductDate"; + } + else + { + strSQL = "Select A.* From (Select * From tblWIPMaterialDeductContent Where ERPFlag = 'N' and PutInPlaceType in (2,4) Order By DeductDate) A Where RowNum <= " + Conversions.ToInteger(strRowCount); + } + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "MTLDeduct", cnnTemp); + + //目前的ERP Response + string strResponse = ""; + + if (dsTemp.Tables["MTLDeduct"].Rows.Count > 0) + { + arriveTime = DateTime.Now; + + MTLDeductTemp = dsTemp.Tables["MTLDeduct"].Clone(); + + //進行中的DataTypeNo + int stateType = Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[0]["DataTypeNo"]); + + for (int i = 0; i < dsTemp.Tables["MTLDeduct"].Rows.Count; i++) + { + DataRow drAdd = MTLDeductTemp.NewRow(); + foreach (DataColumn dc in MTLDeductTemp.Columns) + { + drAdd[dc.ColumnName] = dsTemp.Tables["MTLDeduct"].Rows[i][dc.ColumnName]; + } + MTLDeductTemp.Rows.Add(drAdd); + + //沒有下一筆 或 下一筆與本筆DataTypeNo不相符,進行組成XML拋ERP + if (i + 1 == dsTemp.Tables["MTLDeduct"].Rows.Count || + Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[i + 1]["DataTypeNo"]) != stateType) + { + if (MTLDeductTemp != null && MTLDeductTemp.Rows.Count > 0) + { + int DataTypeNo = Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[i]["DataTypeNo"]); + string SheetType = ""; + string strErrorDataType = ""; + switch (DataTypeNo) + { + case 1: //1:物料扣料 + SheetType = strMaterialOut; //領料單單別 + strErrorDataType = "[%MaterialDeduct%]"; + break; + case 2: //2:還原物料扣料 + SheetType = strMaterialReturn; //退料單單別 + strErrorDataType = "[%UndoMaterialDeduct%]"; + break; + } + + //得到作業站群組 + HashSet OPGroupHs = new HashSet(); + DataTable OPGroupMTLDeductTemp = MTLDeductTemp.Copy(); + strOPGroupError = fuGetOPGroupNoAndOPGroups(ref OPGroupHs, ref OPGroupMTLDeductTemp, cnnTemp); + if (strOPGroupError != defString) + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg(strErrorDataType + strOPGroupError, strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + + foreach (string OPGroupNo in OPGroupHs) + { + //作業站群組的用料 + OPGroupMTLDeduct = OPGroupMTLDeductTemp.Select("OPGroupNo= '" + OPGroupNo + "'"); + + if (OPGroupMTLDeduct != null && OPGroupMTLDeduct.Length > 0) + { + // CDO object + var objERPrequest = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_issue_wo_inverted(); + strCDOError = fuMaterialDeductDataToCDOobject(DataTypeNo, SheetType, OPGroupNo, OPGroupMTLDeduct, ref objERPrequest, ref arriveTime, cnnTemp); + if (strCDOError != defString) + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg(strErrorDataType + strCDOError, strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + + object argCDO_Object = objERPrequest; + InXml = ""; + InXml = CombineRequestXMLbyCDO(ref argCDO_Object, dtERPSetting.Rows[0]["ERP_Name"].ToString(), "", "issue.wo.inverted.e10icd", pRequestKey: RequestKey); + objERPrequest = (iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_issue_wo_inverted)argCDO_Object; + + // ----- Call ERP Web Service ----- + if (!fuMaterialDeductDataThrowE10ICD(InXml, OPGroupMTLDeduct, ref responseValue, ref description, ref arriveTime)) + { + funWIPMaterialDeductData_E10ICDRet = TranslateMsg("fail;" + strErrorDataType + " [%ERP Return Message%]:" + description, strLanguageMode, strResourceDir); + return funWIPMaterialDeductData_E10ICDRet; + } + else + { + //ERP成功單號 + strResponse += responseValue + ","; + } + + //清除已拋ERP扣料資料 + OPGroupMTLDeduct = null; + } + } + + if (i + 1 != dsTemp.Tables["MTLDeduct"].Rows.Count) + { + //更新進行中的DataTypeNo + stateType = Conversions.ToInteger(dsTemp.Tables["MTLDeduct"].Rows[i + 1]["DataTypeNo"]); + } + //清除已拋ERP扣料資料 + MTLDeductTemp.Clear(); + } + } + } + if (strResponse.Length > 0) + { + strResponse = Strings.Mid(strResponse, 1, Strings.Len(strResponse) - 1); + } + } + dsTemp.Dispose(); + + //Return success + funWIPMaterialDeductData_E10ICDRet = "success;" + strResponse + ";"; + + } + + catch (Exception ex) + { + funWIPMaterialDeductData_E10ICDRet = CombineFailMsg("0000-999999", ex.Message); + + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WIPMaterialDeductData_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), "fail", responseValue, "issue.wo.inverted.e10icd", LogClass: "AutoRun", strException: argstrException1); + } + finally + { + try + { + if (funWIPMaterialDeductData_E10ICDRet.ToString().Substring(0, 7) != "success") + { + if (dsTemp.Tables["MTLDeduct"] == null) + { + //未取出dsTemp.Tables["MTLDeduct"]表示非處理資料產生的錯誤, 以Mail內文的方式寄出 + string argFileName = "N/A"; + string argEmailSubject = "[AUT]"+ TranslateMsg("[%FAILEDMATERIALDEDUCTCONTENTTOERP%]", strLanguageMode, strResourceDir)+"。"; + string argEmailBody = Conversions.ToString(funWIPMaterialDeductData_E10ICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + } + else + { + //已有取出dsTemp.Tables["MTLDeduct"]表示是處理資料產生的錯誤, 以Excel作為副檔寄送Mail + var dtResult = new DataTable("FailResult"); + DataRow drAdd; + dtResult.Columns.Add("WOWorkDate", Type.GetType("System.String")); // 拋轉日期 + dtResult.Columns.Add("DeductDate", Type.GetType("System.String")); // 扣料日期 + dtResult.Columns.Add("LotSerial", Type.GetType("System.String")); // 生產批序號 + dtResult.Columns.Add("LogGroupSerial", Type.GetType("System.String")); // 生產批在作業站的Log序號 + dtResult.Columns.Add("DataTypeNo", Type.GetType("System.String")); // 1: 扣料 2:倒扣料 + dtResult.Columns.Add("LotNo", Type.GetType("System.String")); // 生產批編號 + dtResult.Columns.Add("OPNo", Type.GetType("System.String")); // 作業站編號 + dtResult.Columns.Add("EquipmentNo", Type.GetType("System.String")); // 設備編號 + dtResult.Columns.Add("MaterialLevel", Type.GetType("System.String")); // 物料等級 + dtResult.Columns.Add("MaterialNo", Type.GetType("System.String")); // 物枓編號 + dtResult.Columns.Add("MaterialLotNo", Type.GetType("System.String")); // 物枓批號 + + DataRow[] MTLDataTemp = null; + if (OPGroupMTLDeduct != null) + { + MTLDataTemp = OPGroupMTLDeduct; + } + else if (MTLDeductTemp != null) + { + MTLDataTemp = MTLDeductTemp.Select(); + } + else + { + MTLDataTemp = dsTemp.Tables["MTLDeduct"].Select(); + } + + if (MTLDataTemp != null) + { + foreach (DataRow drMTLDeduct in MTLDataTemp) + { + drAdd = dtResult.NewRow(); + drAdd["WOWorkDate"] = arriveTime.ToString("yyyyMMdd"); + drAdd["DeductDate"] = Strings.Format(drMTLDeduct["DeductDate"], "yyyy/MM/dd"); + drAdd["LotSerial"] = drMTLDeduct["LotSerial"].ToString(); + drAdd["LogGroupSerial"] = drMTLDeduct["LogGroupSerial"].ToString(); + drAdd["DataTypeNo"] = drMTLDeduct["DataTypeNo"].ToString(); + drAdd["LotNo"] = drMTLDeduct["LotNo"].ToString(); + drAdd["OPNo"] = drMTLDeduct["OPNo"].ToString(); + drAdd["EquipmentNo"] = drMTLDeduct["EquipmentNo"].ToString(); + drAdd["MaterialLevel"] = drMTLDeduct["MaterialLevel"].ToString(); + drAdd["MaterialNo"] = drMTLDeduct["MaterialNo"].ToString(); + drAdd["MaterialLotNo"] = drMTLDeduct["MaterialLotNo"].ToString(); + dtResult.Rows.Add(drAdd); + } + } + + string strFillType = "XLS"; + + //讓最後一列style生效,新增空列 + DataRow drEnd = dtResult.NewRow(); + dtResult.Rows.Add(drEnd); + var dsResult = new DataSet(); + dsResult.Tables.Add(dtResult); + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dsResult, ExcelMode, strLanguageMode, strResourceDir); + + try + { + dsResult.Dispose(); + } + catch (Exception ex) + { + } + + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "[AUT]"+ TranslateMsg("[%FAILEDMATERIALDEDUCTCONTENTTOERP%]", strLanguageMode, strResourceDir) + "。"; + string argEmailBody = Conversions.ToString(funWIPMaterialDeductData_E10ICDRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funWIPMaterialDeductData_E10ICDRet = argEmailBody; + } + } + CloseConnection(cnnTemp); + dsTemp.Dispose(); + } + + catch (Exception ex) + { + funWIPMaterialDeductData_E10ICDRet = "fail_Finally;" + ex.Message; + } + } + } + while (false); + return funWIPMaterialDeductData_E10ICDRet; + } + + private string fuGetOPGroupNoAndOPGroups(ref HashSet OPGroupHs, ref DataTable MTLDeductDataTemp, IDbConnection cnnTemp) + { + string fuGetOPGroupNoAndOPGroupsRet = defString; + DbDataReader drTemp = default(DbDataReader); + string strSQL = ""; + + try + { + if (!MTLDeductDataTemp.Columns.Contains("OPGroupNo")) + { + MTLDeductDataTemp.Columns.Add("OPGroupNo", Type.GetType("System.String")); //作業站群組 + } + + foreach (DataRow drMTLDeduct in MTLDeductDataTemp.Rows) + { + strSQL = "Select OPGroupNo,OPNo From tblOPGroupDetail Where OPNo = '" + drMTLDeduct["OPNo"] + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + drMTLDeduct["OPGroupNo"] = drTemp["OPGroupNo"].ToString(); + OPGroupHs.Add(drTemp["OPGroupNo"].ToString()); + } + else + { + fuGetOPGroupNoAndOPGroupsRet = TranslateMsg("[%OPNo%] :" + drMTLDeduct["OPNo"].ToString() + ",[%OPGROUPNO%][%IS NOT EXIST%]", strLanguageMode, strResourceDir); + return fuGetOPGroupNoAndOPGroupsRet; + } + drTemp.Close(); + } + } + catch (Exception ex) + { + throw; + } + return fuGetOPGroupNoAndOPGroupsRet; + } + + private string fuMaterialDeductDataToCDOobject(int DataTypeNo, string SheetType, string OPGroupNo, DataRow[] OPGroupMTLDeduct, ref iMESCIO.SCI.ERP.Request_E10ICD.SCI_Request_issue_wo_inverted objERPrequest, ref DateTime arriveTime, IDbConnection cnnTemp) + { + string fuMaterialDeductDataToCDOobjectRet = defString; + DbDataReader drTemp = default(DbDataReader); + string strSQL = ""; + + var objERPrequest_Detail = new List(); + + try + { + arriveTime = DateTime.Now; + //Master + objERPrequest.doc_type_no = SheetType; //單別 + objERPrequest.doc_no = ""; //單據編號,填空值 + objERPrequest.create_date = Strings.Format(arriveTime, "yyyyMMdd"); //單據時間,目前時間 + //DataTypeNo= 1:物料扣料,2:還原物料扣料 + objERPrequest.status = (DataTypeNo == 2) ? "3" : Conversions.ToString(DataTypeNo); //1:扣料(發料)、3:倒扣料(退料) + objERPrequest.remark = ""; //備註,填空值 + objERPrequest.applicant_no = ""; //領退料人員,填空值 + objERPrequest.workstation_no = OPGroupNo; //作業站群組 + + //Detail + for (int i = 0; i < OPGroupMTLDeduct.Length; i++) + { + var objDetail = new iMESCIO.SCI.ERP.Request_E10ICD.SCI_detail_issue_wo_inverted(); + + objDetail.seq = Conversions.ToString(i + 1); //序號,從1開始的流水號 + + //工單編號 + if (!(OPGroupMTLDeduct[i]["MONo"] is DBNull)) + { + objDetail.wo_no = OPGroupMTLDeduct[i]["MONo"].ToString(); //工單單號 + } + else + { + strSQL = "Select A.MONo From tblWIPLotBasis A, tblWIPLotState B Where A.BaseLotNo = B.BaseLotNo And B.LotNo = '" + OPGroupMTLDeduct[i]["LotNo"].ToString() + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + objDetail.wo_no = drTemp["MONo"].ToString(); // 工單編號 + } + else + { + fuMaterialDeductDataToCDOobjectRet = TranslateMsg("[%LotNo%] :" + OPGroupMTLDeduct[i]["LotNo"].ToString() + ",[%MONONOTEXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToCDOobjectRet; + } + drTemp.Close(); + } + + //物料編號 + if (OPGroupMTLDeduct[i]["MaterialLevel"].ToString() == "0") + { + strSQL = "Select ERPNo From tblMTLMaterialBasis Where IssueState = 2 And MaterialNo = '" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + "'"; + } + else + { + strSQL = "Select ERPNo From tblPRDProductBasis Where IssueState = 2 And Curversion = 1 And ProductNo = '" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + "'"; + } + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["ERPNo"].ToString() != "") + { + objDetail.item_no = drTemp["ERPNo"].ToString(); //物料/半成品在ERP的編號 + } + else + { + objDetail.item_no = OPGroupMTLDeduct[i]["MaterialNo"].ToString(); //物料/半成品在ERP的編號,若ERPNo沒有值,則拋MaterialNo + } + } + else + { + fuMaterialDeductDataToCDOobjectRet = TranslateMsg("[%MaterialNo%] :" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + " [%IS NOT EXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToCDOobjectRet; + } + drTemp.Close(); + + objDetail.qty = OPGroupMTLDeduct[i]["DeductQty"].ToString(); //扣料數量 + + //物料單位 + if (OPGroupMTLDeduct[i]["MaterialLevel"].ToString() == "0") + { + strSQL = "Select A.UnitNo, B.DefaultValue From tblMTLMaterialBasis A Left Join tblMTLMaterialProperty B On A.MaterialNo = B.Material And B.IssueState = 2 And Upper(B.PropertyNo) = 'ERPUNITNO'" + + " Where A.IssueState = 2 And A.MaterialNo = '" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + "'"; + } + else + { + strSQL = "Select A.UnitNo, B.DefaultValue From tblPRDProductBasis A Left Join tblPRDProductProperty B On A.ProductNo = B.ProductNo And A.ProductVersion = B.ProductVersion And B.IssueState = 2 And Upper(B.PropertyNo) = 'ERPUNITNO'" + + " Where A.IssueState = 2 And A.CurVersion = 1 And A.ProductNo = '" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + "'"; + } + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (drTemp["DefaultValue"].ToString() != "") + { + objDetail.unit_no = drTemp["DefaultValue"].ToString(); //取物料屬性ERPUnitNo 的屬性值 + } + else + { + objDetail.unit_no = drTemp["UnitNo"].ToString(); //物料屬性值為空,則物料主檔的UnitNo + } + } + else + { + fuMaterialDeductDataToCDOobjectRet = TranslateMsg("[%MaterialNo%] :" + OPGroupMTLDeduct[i]["MaterialNo"].ToString() + " [%IS NOT EXIST%]", strLanguageMode, strResourceDir); + return fuMaterialDeductDataToCDOobjectRet; + } + drTemp.Close(); + + objDetail.item_type = ""; //物料等級,填空值 + objDetail.input_datetime = Strings.Format(OPGroupMTLDeduct[i]["DeductDate"], "yyyyMMdd"); //扣料日期 + objDetail.warehouse_no = OPGroupMTLDeduct[i]["PutinPlaceNo"].ToString(); //扣料點編號 + + //儲位 + if (OPGroupMTLDeduct[i]["LocatorNo"].ToString() == "N/A") + { + objDetail.location_no = ""; //儲位,若為N/A則拋空白 + } + else + { + objDetail.location_no = OPGroupMTLDeduct[i]["LocatorNo"].ToString(); //儲位 + } + + objDetail.lot_no = OPGroupMTLDeduct[i]["MaterialLotNo"].ToString(); //物料批號 + objDetail.expiry_date = ""; //有效日期,填空值 + objDetail.item_feature_no = ""; //物徵碼,填空值 + objDetail.remark = ""; //備註,填空值 + objDetail.positive_negative = ""; //正負,填空值 + objDetail.replaced_item_no = ""; //被替代的物料編號,若未傳入則以物料編號為默認值,填空值 + objDetail.replaced_qty = ""; //被替代的物料數量,填空值 + objDetail.replaced_type = ""; //替代料等級,填空值 + objDetail.issue_to_type = "3"; //3:MO (工單,Default) + objDetail.sub_type = "0"; //0:主料 1:取代 2:替代 + objDetail.replaced_item_feature_no = ""; //替代品號特徵碼,填空值 + objDetail.op_no = OPGroupMTLDeduct[i]["OPNo"].ToString(); //作業站編號 + + objERPrequest_Detail.Add(objDetail); + } + objERPrequest.wo_item_detail = objERPrequest_Detail; + } + catch (Exception ex) + { + throw; + } + return fuMaterialDeductDataToCDOobjectRet; + } + + private Boolean fuMaterialDeductDataThrowE10ICD(string InXml, DataRow[] OPGroupMTLDeduct, ref string responseValue, ref string description, ref DateTime arriveTime) + { + Boolean fuMaterialDeductDataThrowE10ICDRet = false; + string OutXml = ""; + var objERPresponse = new iMESCIO.SCI.ERP.Response_E10ICD.SCI_Response_issue_wo_inverted(); + + string code = string.Empty; // Response... code:錯誤碼;非0則為錯誤 (function回傳 success 或 fail) + + string strSQL = ""; + var CollectionSQL = new Collection(); + + try + { + arriveTime = DateTime.Now; + responseValue = string.Empty; + description = string.Empty; + // ----- Call ERP Web Service ----- + using (var ws = new iMESCore.Base.Invoke.wsERP_EAI.IntegrationEntry()) + { + ws.Url = ERP_URL; + OutXml = ws.invokeSrv(InXml); + } + + objERPresponse.ParseXmlToObject(OutXml); + // ----- 取得ERP執行結果 code,responseValue,description ----- + code = objERPresponse.code; + responseValue = objERPresponse.return_no; + description = objERPresponse.description; + + if (string.IsNullOrEmpty(code) == true) + { + code = "fail"; + } + else if (code == "0") + code = "success"; + else + code = "fail"; + + // Edison 2019/03/22 修正log紀錄位置 + string argstrException1 = null; + modAutoRunLibrary.addTransactionLog_ErrorCode(InXml, OutXml, arriveTime.ToString("yyyyMMddHHmmssss"), "MES", "WIPMaterialDeductData_E10ICD", Environment.MachineName, "AutoRun", arriveTime.ToString("yyyy/MM/dd HH:mm:ss"), code, responseValue, "issue.wo.inverted.e10icd", LogClass: "AutoRun", strException: argstrException1); + + if (code == "success") + { + foreach (DataRow drMTLDeduct in OPGroupMTLDeduct) + { + strSQL = "Update tblWIPMaterialDeductContent Set ERPFlag = 'Y', ERPNo = '" + responseValue + "'" + + " Where LotSerial = '" + drMTLDeduct["LotSerial"].ToString() + "' And LogGroupSerial = '" + drMTLDeduct["LogGroupSerial"].ToString() + "'" + + " And DataTypeNo = " + drMTLDeduct["DataTypeNo"] + " And EquipmentNo = '" + drMTLDeduct["EquipmentNo"].ToString() + "'" + + " And MaterialLevel = " + drMTLDeduct["MaterialLevel"] + " And MaterialNo = '" + drMTLDeduct["MaterialNo"].ToString() + "' And MaterialLotNo = '" + drMTLDeduct["MaterialLotNo"].ToString() + "'" + + " And PutInPlaceType = " + drMTLDeduct["PutInPlaceType"]; + CollectionSQL.Add(strSQL); + } + ExecuteSQLNoneQuery_UPD(strDataBaseType, strConnectionString, CollectionSQL); + fuMaterialDeductDataThrowE10ICDRet = true; + } + + } + catch (Exception ex) + { + fuMaterialDeductDataThrowE10ICDRet = false; + throw; + } + return fuMaterialDeductDataThrowE10ICDRet; + } + + #endregion + + #region 工单自动结单 + private object funProcessERPPendingTrans(Collection colParameters = null) + { + object funProcessERPPendingTransRet = default(object); + + var cnnTemp = default(IDbConnection); + string strSQL; + + string strAccess = string.Empty; + string strParameter = string.Empty; + string strMaster = string.Empty; + string strDetail = string.Empty; + + string strTempField = string.Empty; + string strTempRecord = string.Empty; + + var arriveTime = DateTime.Now; + + string strGroupNo = string.Empty; // Mail通知群組 + string strERPName = string.Empty; //设定的ERP名称 + string closeMORet = string.Empty; // Request/Response... 收貨單單號, 成功回傳ERP收貨單號起始~截止單號 + + // 2021/03/30 Elvis 0087678: [瑞賢] AUTORUN報工--報工失敗,發送郵件新增提供失敗清單 + //var ExcelExp = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter(); + //var workbook = new Infragistics.Documents.Excel.Workbook(); + + var aryReturnMessage = new ArrayList(); // Catch Error Message (Exception及MES判定錯誤訊息)。 + var dsTemp = new DataSet(); + + var datNow = DateTime.Now; + + var dtResult = new DataTable("FailResult"); + DataRow drAdd; + + do + { + try + { + cnnTemp = CreateConnection(strConnectionString); + + dtResult.Columns.Add("TransactionID", Type.GetType("System.String")); // 交易編號 + dtResult.Columns.Add("TransactionType", Type.GetType("System.String")); // 交易類型 + dtResult.Columns.Add("TicketNo", Type.GetType("System.String")); // 單據編號 + dtResult.Columns.Add("ERPType", Type.GetType("System.String")); // ERP類型 + dtResult.Columns.Add("Creator", Type.GetType("System.String")); // 建立人 + dtResult.Columns.Add("CreateDate", Type.GetType("System.String")); // 建立日 + dtResult.Columns.Add("FailReason", Type.GetType("System.String")); // 錯誤訊息 + + // Parameter01為參數一(使用者群組), 可以不設定 + if (!(colParameters["Parameter01"] == null) & !string.IsNullOrEmpty(Strings.Trim(Conversions.ToString(colParameters["Parameter01"])))) + { + strGroupNo = colParameters["Parameter01"].ToString().Trim(); + //若有設定, 先檢查群組合理性 + if (!string.IsNullOrEmpty(strGroupNo) && ERP2MES_MailNoticeChk(ref cnnTemp, ref aryReturnMessage, strGroupNo) < 0) + { + funProcessERPPendingTransRet = Conversions.ToString("fail;" + aryReturnMessage[0]); + goto exitfun; + } + } + + //查询系统当前设置的ERP系统名称,只有workflow才會執行此自動結單功能 + strSQL = "select ERP_NAME from TBLSYSERPSETTING where ACTIVEERP = 1"; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ERPName", cnnTemp); + if (dsTemp.Tables["ERPName"].Rows.Count > 0) + { + strERPName = dsTemp.Tables["ERPName"].Rows[0]["ERP_NAME"].ToString().Trim(); + } + if (strERPName != "Workflow") + { + funProcessERPPendingTransRet = Conversions.ToString("fail;" + TranslateMsg("ERP[%IS NOT%]WorkFlow,[%NOTALLOWTOUSEFUNCTION%]", strLanguageMode, strResourceDir)); + goto exitfun; + } + + //查询出tblERPPendingTrans表中数据并处理工单结案 + strSQL = " select * from tblERPPendingTrans order by CreateDate "; + ExecuteSQLQuery_Adapter(strSQL, dsTemp, "ERPPending", cnnTemp); + for (int i = 0; i < dsTemp.Tables["ERPPending"].Rows.Count; i++) + { + string ERPType = string.Empty; + string transactionType = string.Empty; + ERPType = dsTemp.Tables["ERPPending"].Rows[i]["ERPType"].ToString(); + transactionType = dsTemp.Tables["ERPPending"].Rows[i]["TransactionType"].ToString(); + if (ERPType == "TP" && transactionType == "1") + { + try + { + closeMORet = funMOPendingClose(dsTemp.Tables["ERPPending"].Rows[i]["TicketNo"].ToString()); + } + catch (Exception ex) + { + closeMORet = ex.Message; + } + if (closeMORet != "success") + { + drAdd = dtResult.NewRow(); + drAdd["TransactionID"] = dsTemp.Tables["ERPPending"].Rows[i]["TransactionID"].ToString(); + drAdd["TransactionType"] = dsTemp.Tables["ERPPending"].Rows[i]["TransactionType"].ToString(); + drAdd["TicketNo"] = dsTemp.Tables["ERPPending"].Rows[i]["TicketNo"].ToString(); + drAdd["ERPType"] = dsTemp.Tables["ERPPending"].Rows[i]["ERPType"].ToString(); + drAdd["Creator"] = dsTemp.Tables["ERPPending"].Rows[i]["Creator"].ToString(); + drAdd["CreateDate"] = Strings.Format(dsTemp.Tables["ERPPending"].Rows[i]["CreateDate"], "yyyy/MM/dd HH:mm:ss"); + drAdd["FailReason"] = closeMORet; + dtResult.Rows.Add(drAdd); + } + } + } + if (dtResult.Rows.Count > 0) + { + funProcessERPPendingTransRet = "fail;"; + foreach (DataRow r in dtResult.Rows) + funProcessERPPendingTransRet += Conversions.ToString(TranslateMsg("[%TransactionID%]: " + r["TransactionID"].ToString() + + ", [%TicketNo%]: " + r["TicketNo"].ToString() + ", " + + r["FailReason"].ToString() + "\r\n", strLanguageMode, strResourceDir)); + goto exitfun; + } + funProcessERPPendingTransRet = "success"; + exitfun:; + } + + catch (Exception ex) + { + funProcessERPPendingTransRet = Conversions.ToString("fail;" + ex.Message); + } + finally + { + try + { + if (strGroupNo != string.Empty) + { + if (funProcessERPPendingTransRet.ToString().Substring(0, 7) != "success" || dtResult.Rows.Count > 0) + { + if (dtResult.Rows.Count == 0) + { + //未取出dsTemp.Tables["MTLDeduct"]表示非處理資料產生的錯誤, 以Mail內文的方式寄出 + string argFileName = "N/A"; + string argEmailSubject = "[AUT]" + TranslateMsg("[%PROCESSINGERPPENDINGTRANSFAIL%]", strLanguageMode, strResourceDir); + string argEmailBody = Conversions.ToString(funProcessERPPendingTransRet); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo); + } + else + { + //已有取出dsTemp.Tables["MTLDeduct"]表示是處理資料產生的錯誤, 以Excel作為副檔寄送Mail + string strFillType = "XLS"; + //讓最後一列style生效,新增空列 + DataRow drEnd = dtResult.NewRow(); + dtResult.Rows.Add(drEnd); + var dsResult = new DataSet(); + dsResult.Tables.Add(dtResult); + //iugTemp.iMESUltraGrid.DataSource = dtResult; + + // 0133391: [跨平台]AutoRunLib移除iMESUltraGrid的使用, 2023/4/21 + String ExcelMode = strFillType.ToString().ToUpper(); //"XLSX" , "XLS" + byte[] membyte = modAutoRunLibrary.funExcelToByte(dsResult, ExcelMode, strLanguageMode, strResourceDir); + + try + { + dsResult.Dispose(); + } + catch (Exception ex) + { + } + + // 寄送Mail + string argFileName = "ErrorList.xls"; + string argEmailSubject = "[AUT]" + TranslateMsg("[%PROCESSINGERPPENDINGTRANSFAIL%]", strLanguageMode, strResourceDir); + string argEmailBody = TranslateMsg("[%SOMEMOAUTOCLOSEFAIL%]", strLanguageMode, strResourceDir); + modAutoRunLibrary.SendMultiEmail(ref argFileName, ref argEmailSubject, argEmailBody, strGroupNo, membyte); + funProcessERPPendingTransRet = argEmailBody; + } + } + } + CloseConnection(cnnTemp); + dsTemp.Dispose(); + dtResult.Dispose(); + } + catch (Exception ex) + { + funProcessERPPendingTransRet = "fail_Finally;" + ex.Message; + } + } + } + while (false); + return funProcessERPPendingTransRet; + + } + + // 工單結案 + public string funMOPendingClose(string MONo = defString) + { + DbDataReader drTemp = null; + IDbConnection cnnTemp = null; + // Dim cmd As OleDb.OleDbCommand + string strSQL = string.Empty; + string chkMOState_CloseRet = string.Empty; + + var CollectionSQL = new Collection(); + var CollectionRows = new Collection(); + DateTime EventTime = DateTime.Now; + try + { + cnnTemp = CreateConnection(strConnectionString); + //查询工单是否存在 + strSQL = "Select MONO,FromERP,IssueState,MOState From tblOEMOBasis Where MONo = '" + MONo + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(drTemp["IssueState"], 2, false))) + { + chkMOState_CloseRet = TranslateMsg("[%MONONOTAPPROVED%]", strLanguageMode, strResourceDir); + goto exitfun; + } + if (drTemp["MOState"].ToString() == "99") + { + chkMOState_CloseRet = TranslateMsg("[%MONOCLOSED%]", strLanguageMode, strResourceDir); + goto exitfun; + //工單已結案 + } + } + else + { + chkMOState_CloseRet = TranslateMsg("[%MONONOTEXIST%]", strLanguageMode, strResourceDir); + goto exitfun; + } + // 2016/09/08 YF, 因入庫動作並不會將生產批壓成99, 故工單永遠無法結單, 若壓成99又會有重上線問題 + // 故能否結工單調整為只判斷是否還有線上的生產批 + // 2018/06/07 OwenLiu, Mantis:46288, 增加數量需大於0的檢核 + // 2019/12/11 Eric Mantis:65384 排除tblWIPLotBasis.LotStatus=0(未下線)的資料 (為已開立生產批的未下線資料與設定面檢核失敗而未下線成功的資料) + strSQL = " SELECT Count(A.LotNo) " + " FROM tblWIPLotState A, " + " (select C.* from tblwiplotbasis C where C.LOTSTATE<>0) B " + " WHERE A.BaseLotNo = B.BaseLotNo " + " AND B.MONo = '" + MONo + "' " + " AND A.Status In (0,1,2,3,4,5) " + " AND A.CurQty > 0 "; + + // cmd.CommandText = strSQL + + if (Operators.ConditionalCompareObjectGreater(ExecuteSQLQuery_Scalar(strSQL, cnnTemp), 0, false)) + { + chkMOState_CloseRet = TranslateMsg("[%HavingLotinWIPInventory%],[%NOTALLOWTOCLOSEMO%]", strLanguageMode, strResourceDir); + goto exitfun; + } + + // 82671: [6.0.3]在製品庫仍有數量,ERP仍可執行工單結案 Edison 2020/11/25 + strSQL = " SELECT Count(A.LotNo) FROM tblINVWIPInventory_Semi A, tblWIPLotBasis B " + " WHERE A.BaseLotNo = B.BaseLotNo " + " And B.MONo = '" + MONo + "' "; + + // cmd.CommandText = strSQL + + if (Operators.ConditionalCompareObjectGreater(ExecuteSQLQuery_Scalar(strSQL, cnnTemp), 0, false)) + { + chkMOState_CloseRet = TranslateMsg("[%HavingLotinWIPInventory%],[%NOTALLOWTOCLOSEMO%]", strLanguageMode, strResourceDir); + goto exitfun; + } + // cmmTemp.Dispose() + + //0130980: [6.0.7]0129989: [萬達]工單結案條件確認 + strSQL = " SELECT Count(A.BaseLotNo) FROM tblWIPLotBasis A, tblINVWIP_Scrap B WHERE A.BaseLotNo = B.LotNo AND B.SCRAPQTY > 0 AND A.MONo = '" + MONo + "' "; + + if (Operators.ConditionalCompareObjectGreater(ExecuteSQLQuery_Scalar(strSQL, cnnTemp), 0, false)) + { + chkMOState_CloseRet = TranslateMsg("[%HavingLotinWIPInventory%],[%NOTALLOWTOCLOSEMO%]", strLanguageMode, strResourceDir); + goto exitfun; + } + + strSQL = "SELECT Count(A.BaseLotNo) FROM tblWIPLotBasis A, tblINVWIP_FailBin B WHERE A.BaseLotNo = B.LotNo AND A.MONo = '" + MONo + "' "; + + if (Operators.ConditionalCompareObjectGreater(ExecuteSQLQuery_Scalar(strSQL, cnnTemp), 0, false)) + { + chkMOState_CloseRet = TranslateMsg("[%HavingLotinWIPInventory%],[%NOTALLOWTOCLOSEMO%]", strLanguageMode, strResourceDir); + goto exitfun; + } + strSQL = "SELECT Count(A.BaseLotNo) FROM tblWIPLotBasis A, tblINVWIP_ComponentScrap B WHERE A.BaseLotNo = B.LotNo AND B.SCRAPQTY > 0 AND A.MONo = '" + MONo + "' "; + + if (Operators.ConditionalCompareObjectGreater(ExecuteSQLQuery_Scalar(strSQL, cnnTemp), 0, false)) + { + chkMOState_CloseRet = TranslateMsg("[%HavingLotinWIPInventory%],[%NOTALLOWTOCLOSEMO%]", strLanguageMode, strResourceDir); + goto exitfun; + } + strSQL = "Update tblOEMOBasis Set MOState = 99, MOCloseDate = To_Date('" + Strings.Format(DateTime.Now, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS') "; + strSQL += " ,OrgMOState = " + drTemp["MOState"].ToString() + " Where MONo = '" + MONo + "'"; + CollectionSQL.Add(strSQL); + CollectionRows.Add(1); + + strSQL = "Insert into tblERPPendingTransLog Select TRANSACTIONID, TRANSACTIONTYPE, TICKETNO, ERPType, Creator, CreateDate ,sysdate as EventTime from tblERPPendingTrans where TRANSACTIONTYPE = 1 And TICKETNO = '" + MONo + "' "; + CollectionSQL.Add(strSQL); + CollectionRows.Add(1); + + strSQL = " Delete from tblERPPendingTrans Where TRANSACTIONTYPE = 1 And TICKETNO = '" + MONo + "' "; + CollectionSQL.Add(strSQL); + CollectionRows.Add(1); + + // 0151198: [6.0.7] SDD231107_01-02_ERP 工單結案接口調整, 19245, 2023/12/11 + // 1.找出ERPCloseMOClearMTLQty參數值, 是否要清除工單上的還有數量的物料 0:否,不清除 ; 1:是,要清除工單上有剩餘數量的物料。 + string strMOClearMTLQty = defString; + Double dblMOMTLQty_MIN = 1; + strSQL = "Select ParameterValue From tblSYSParameter Where ParameterNo = 'ERPCloseMOClearMTLQty'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + strMOClearMTLQty = drTemp["ParameterValue"].ToString(); + drTemp.Close(); + + if (strMOClearMTLQty == "1") // 要清除 + { + Decimal decNumber = 0; + // 2.找出MOMTLQty_MIN (最低工單物料數量(用於ERP工單結案清除剩餘物料))參數值 + strSQL = "Select ParameterValue From tblSYSParameter Where ParameterNo = 'MOMTLQty_MIN'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + if (drTemp.Read()) + { + //判斷MOMTLQty_MIN是否為數值 + if (decimal.TryParse(drTemp["ParameterValue"].ToString(), out decNumber)) + dblMOMTLQty_MIN = Convert.ToDouble(drTemp["ParameterValue"]); + else + { + chkMOState_CloseRet = TranslateMsg("[%MOMTLQty_MIN%] [%IS NOT NUMERIC%]", strLanguageMode, strResourceDir); + goto exitfun; + } + } + drTemp.Close(); + + // 取出目前工單的物料數量 + strSQL = "Select * From tblOEMOMaterialState Where MONo='" + MONo + "'"; + drTemp = ExecuteSQLQuery_Reader(strSQL, cnnTemp); + while (drTemp.Read()) + { + // 小於最低工單物料數量時,就必須要將該物料做清除 + if (Convert.ToDouble(drTemp["Qty"]) < dblMOMTLQty_MIN) + { + strSQL = "Update tblOEMOMaterialState set Qty = 0 Where MONo ='" + drTemp["MONo"].ToString() + "'" + + " And MaterialNo = '" + drTemp["MaterialNo"] + "'" + + " And MaterialLotNo = '" + drTemp["MaterialLotNo"] + "'" + + " And SubstituteMaterialNo = '" + drTemp["SubstituteMaterialNo"] + "'"; + CollectionSQL.Add(strSQL); + CollectionRows.Add(1); + + // 將清除前的物料紀錄回tblERPMOMTLStateClearLog + strSQL = "Insert Into tblERPMOMTLStateClearLog " + + "(MONo, MaterialNo, MaterialLotNo, UnitNo, Qty, MaterialLevel, MaterialType, InputDate, " + + "SubstituteMaterialNo, SubstituteMaterialLevel, SubstituteMaterialQty, Description, ExpireDate," + + " OpenDate, ManufactureDate, GraceDate, EventDate)"; + strSQL += " (Select MONo, MaterialNo, MaterialLotNo, UnitNo, " + drTemp["Qty"] + ", MaterialLevel, MaterialType, InputDate " + + ", SubstituteMaterialNo, SubstituteMaterialLevel, SubstituteMaterialQty, Description" + + ", ExpireDate, OpenDate, ManufactureDate, GraceDate" + + ", To_Date('" + Strings.Format(EventTime, "yyyy/MM/dd H:mm:ss") + "','YYYY/MM/DD HH24:MI:SS')"; // 紀錄資料產生時間(EventTime) + strSQL += " From tblOEMOMaterialState"; + strSQL += " Where MONo='" + drTemp["MONo"].ToString() + "'" + + " And MaterialNo = '" + drTemp["MaterialNo"] + "'" + + " And MaterialLotNo = '" + drTemp["MaterialLotNo"] + "'" + + " And SubstituteMaterialNo = '" + drTemp["SubstituteMaterialNo"] + "')"; + + CollectionSQL.Add(strSQL); + CollectionRows.Add(1); + } + } + drTemp.Close(); + } + + ExecuteSQLNoneQuery_ChkRowCount(strDataBaseType, strConnectionString, CollectionSQL, CollectionRows); + chkMOState_CloseRet = "success"; + exitfun:; + } + catch (Exception e1) + { + throw; + } + finally + { + drTemp.Close(); + CloseConnection(cnnTemp); + // cmd = Nothing + } + return chkMOState_CloseRet; + } + #endregion + + private string funGetRequestKey(ref object SCI_Object, string pService, string pUserNo, string pServiceName, string pCalledID = defString, string pRequestKey = defString) + { + string funGetRequestKeyRet = default(string); + + DataRow[] drERPSetting; + string strFilter = ""; + + do + { + try + { + strFilter = "ERP_Name ='" + pService + "' "; + if ((pCalledID ?? "") != defString && string.IsNullOrEmpty(pCalledID) == false) + strFilter += " And CalledID ='" + pCalledID + "' "; + // 取得服務資訊 + drERPSetting = dtERPSetting.Select(strFilter); + if (drERPSetting == null) + break; + if (drERPSetting.Length != 1) + break; + if ((pCalledID ?? "") == defString) + { + pCalledID = drERPSetting[0]["CalledID"].ToString(); + } + + // 2017-03-17, Joe, 加Parameter for E10 + (SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).enterprise_no = drERPSetting[0]["ERP_ENTID"].ToString(); + (SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).site_no = drERPSetting[0]["ERP_ORG"].ToString(); + + // 轉XML + string RequestHead = ""; + RequestHead += ""; + string RequestDataKey = "" + drERPSetting[0]["ERP_ENTID"].ToString() + "" + drERPSetting[0]["ERP_ORG"].ToString() + ""; + string RequestXML_Body = Conversions.ToString((SCI_Object as iMESCIO.SCI.ERP.ERPRequestBase).ParseXml()); + pRequestKey = modAutoRunLibrary.GetRequestKey(RequestHead); + + funGetRequestKeyRet = pRequestKey; + } + + catch (Exception ex) + { + throw; + } + } + while (false); + return funGetRequestKeyRet; + + } + } +} diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modAutoRunLibrary.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modAutoRunLibrary.cs new file mode 100644 index 0000000..b467841 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modAutoRunLibrary.cs @@ -0,0 +1,899 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using System.Resources; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Xml; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; +using static iMESCore.Base.iMESComXML; +using static iMESCore.Base.iMESConst; +using NPOI.SS.UserModel; +using NPOI.SS.Util; +using NPOI.XSSF.UserModel; +using NPOI.HSSF.UserModel; +using static iMESCore.Base.iMESComSubroutine; + +namespace AutoRunLib +{ + + static class modAutoRunLibrary + { + public enum GroupType + { + UserGroup = 0, // 使用者群組 + IssueGroup = 1, // 簽核群組 + EquipmentGroup = 2, // 設備工程師群組 + InventoryGroup = 3, // 庫房工程師群組 + ReportGroup = 4, // 報表使用群組 + ERFDispositionGroup = 5, // 異常處理群組 + ERFMailccGroup = 6 // 附件收件人群組 + } + + private static string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; + + + #region Invoke + + /// + /// 叫用Web Service, 並回傳Response XML + /// + /// 要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis + /// InXml + /// 是否客製的WebService + /// + /// + /// 2019/08/22 OwenLiu, Mantis:0061402, 修正WS加上CI/CO執行時間紀錄 運作邏輯後AutoRun Servive呼叫WS失敗的問題 + /// + public static string InvokeSrv(string Method, string InXml, bool Customize = false, int TimeOut = defInteger, bool LogOn = false) + { + + object result; + + try + { + + using (var ws = new iMESCore.Base.Invoke.wsInvoke.wsInvoke()) + { + ws.Url = modWIN.LocalizeWebService(ws.Url.ToString(), Customize); + ws.EnableDecompression = true; + + if (TimeOut != defInteger) + { + ws.Timeout = TimeOut; + } + + result = ws.invokeSrv(Method, new object[] { InXml, LogOn }); + } + } + + catch (Exception ex) + { + throw; + } + + return Conversions.ToString(result); + + } + + /// + /// 叫用Web Service, 回傳Response XML + /// + /// 要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis + /// InXml + /// 用來取回byte資料或傳入byte資料 + /// 是否客製的WebService + /// + /// 2019/08/22 OwenLiu, Mantis:0061402, 修正WS加上CI/CO執行時間紀錄 運作邏輯後AutoRun Servive呼叫WS失敗的問題 + /// + public static string InvokeSrv(string Method, string InXml, byte[] buffer, bool Customize = false, int TimeOut = defInteger, bool LogOn = false) + { + + object result; + + try + { + + using (var ws = new iMESCore.Base.Invoke.wsInvoke.wsInvoke()) + { + ws.Url = modWIN.LocalizeWebService(ws.Url.ToString(), Customize); + ws.EnableDecompression = true; + + if (TimeOut != defInteger) + { + ws.Timeout = TimeOut; + } + + result = ws.invokeSrv(Method, new object[] { InXml, buffer, LogOn }); + } + } + + catch (Exception ex) + { + throw; + } + + return Conversions.ToString(result); + + } + + /// + /// 叫用Web Service, 並回傳Response XML + /// + /// 要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis + /// InXml + /// 接收結果的DataSet + /// 是否客製的WebService + /// + public static string InvokeSrv(string Method, string InXml, ref DataSet pDataSet, bool Customize = false) + { + + object result; + + try + { + + using (var ws = new iMESCore.Base.Invoke.wsInvoke.wsInvoke()) + { + ws.Url = modWIN.LocalizeWebService(ws.Url.ToString(), Customize); + ws.EnableDecompression = true; + result = ws.invokeSrv_DataSet(Method, InXml, ref pDataSet); + } + } + + catch (Exception ex) + { + throw; + } + + return Conversions.ToString(result); + + } + + public static string InvokeSrv_GuardServer(bool Customize = false) + { + object result; + + try + { + + using (var ws = new iMESCore.Base.Invoke.wsInvoke.wsInvoke()) + { + ws.Url = modWIN.LocalizeWebService(ws.Url.ToString(), Customize); + ws.EnableDecompression = true; + result = ws.Invoke_GuardServer_Process(); + + } + } + + catch (Exception ex) + { + throw; + } + + return Conversions.ToString(result); + } + + #endregion + + + /// + /// EAI 檢核編碼(MD5) + /// + /// + /// + public static string GetRequestKey(string input) + { + + const string ID = "28682266"; // 鼎新統編 + + string key = ""; + var md5Hasher = MD5.Create(); // 建立MD5物件 + + try + { + + input += ID; + + // 將input轉換成MD5,並且以Bytes傳回,由於ComputeHash只接受Bytes型別參數,所以要先轉型別為Bytes + byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(input)); + + // 建立StringBuilder物件 + var sb = new StringBuilder(); + + // 將Bytes轉型別為String,並且以16進位存放 + for (int i = 0, loopTo = data.Length - 1; i <= loopTo; i++) + sb.Append(data[i].ToString("x2")); + + key = sb.ToString(); + } + + catch (Exception ex) + { + throw; + } + finally + { + md5Hasher = null; + } + + return key; + + } + + + /// + /// 紀錄Transaction + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static bool addTransactionLog(string InXml, string OutXml, string TransactionID, string ModuleID, string FunctionID, string ComputerName, string CurUserNo, string SendTime, string Result, string KeyValue, string ExceptionFun, string strException = null) + { + bool addTransactionLogRet = default(bool); + try + { + using (var wsERP = new iMESCore.Base.Invoke.wsMES.wsMES()) + { + wsERP.Url = modWIN.LocalizeWebService_ERP(wsERP.Url.ToString()); + wsERP.EnableDecompression = true; + if (wsERP.addTransactionLog(InXml, OutXml, TransactionID, ModuleID, FunctionID, ComputerName, CurUserNo, SendTime, Result, KeyValue, ExceptionFun, ref strException) == true) + { + addTransactionLogRet = true; + } + else + { + addTransactionLogRet = false; + } + } + } + catch (Exception ex) + { + addTransactionLogRet = false; + } + + return addTransactionLogRet; + } + /// + /// 紀錄Transaction + /// + public static bool addTransactionLog_ErrorCode(string InXml, string OutXml, string TransactionID, string ModuleID, string FunctionID, string ComputerName, string CurUserNo, string SendTime, string Result, string KeyValue, string ExceptionFun, string strException = null, string ErrorCode = "0000-999999", string LogClass = null) + { + bool addTransactionLog_ErrorCodeRet = default(bool); + try + { + using (var wsERP = new iMESCore.Base.Invoke.wsMES.wsMES()) + { + wsERP.Url = modWIN.LocalizeWebService_ERP(wsERP.Url.ToString()); + wsERP.EnableDecompression = true; + if (wsERP.addTransactionLog_ErrorCode(InXml, OutXml, TransactionID, ModuleID, FunctionID, ComputerName, CurUserNo, SendTime, Result, KeyValue, ExceptionFun, ref strException, ErrorCode, LogClass) == true) + { + addTransactionLog_ErrorCodeRet = true; + } + else + { + addTransactionLog_ErrorCodeRet = false; + } + } + } + catch (Exception ex) + { + addTransactionLog_ErrorCodeRet = false; + } + + return addTransactionLog_ErrorCodeRet; + } + + + // =====Elvis ,0091128: [605][CP+FT] E10ICD整合問題_AutoRun主檔拋轉的ERP交易紀錄exception時紀錄不正確 + #region --- Combine (Exception, Message) --- + + public static bool ChgTranslateException(ref List Exception, ref string strExceptionSysmsg, ref string strExceptionMesmsg, ref string strExceptionStack) + { + bool ChgTranslateExceptionRet = default(bool); + + try + { + foreach (ArrayList al in Exception) + { + // If strExceptionSysmsg <> String.Empty Then strExceptionSysmsg += Chr(10) + if (string.IsNullOrEmpty(Conversions.ToString(al[1])) == false) + strExceptionSysmsg += al[1].ToString(); + // If String.IsNullOrEmpty(strExceptionMesmsg) = False Then strExceptionMesmsg += Chr(10) + if (string.IsNullOrEmpty(Conversions.ToString(al[2])) == false) + { + // 翻譯錯誤訊息 + string strErrName_Rep = ""; + string ErrorName = al[2].ToString(); + if (Strings.InStr(ErrorName, "[%", CompareMethod.Text) > 0) + { + string strKey, strKeyValue; + int intStart, j, k, l; + + intStart = 1; + j = 1; + + while (j != 0) + { + j = Strings.InStr(intStart, ErrorName, "[%", CompareMethod.Text); + if (j == 0) + { + strErrName_Rep += Strings.Mid(ErrorName, intStart); + } + else + { + k = Strings.InStr(j + 2, ErrorName, "%]", CompareMethod.Text); + if (k == 0) + { + // 找不到對應的結束字元. + strErrName_Rep += Strings.Mid(ErrorName, intStart); + j = 0; + } + else + { + // 檢查是否有不對稱的情況. + l = Strings.InStr(j + 2, ErrorName, "[%", CompareMethod.Text); + if (l == 0 || l > k) + { + strErrName_Rep += Strings.Mid(ErrorName, intStart, j - intStart); + strKey = Strings.Mid(ErrorName, j + 2, k - j - 2); + // 將Key執行語系轉換 + try + { + strKeyValue = ""; + } + // strKeyValue = Resources.Resource.ResourceManager.GetString(strKey) + catch (Exception ex) + { + strKeyValue = strKey; + } + if (string.IsNullOrEmpty(strKeyValue)) + { + strErrName_Rep += strKey; + } + else + { + strErrName_Rep += strKeyValue; + } // & "(" & strKey & ")" + // 下次截取字串的起始位置 + intStart = k + 2; + } + else + { + // 不對稱,找到最內層的[%%] + int m; + // 在前面的條件下,一定找得到. + m = Strings.InStrRev(ErrorName, "[%", k, CompareMethod.Text); + // 擷出不轉換的字串. + strErrName_Rep += Strings.Mid(ErrorName, intStart, m - intStart); + strKey = Strings.Mid(ErrorName, m + 2, k - m - 2); + // 將Key執行語系轉換 + try + { + strKeyValue = ""; + } + // strKeyValue = Resources.Resource.ResourceManager.GetString(strKey) + catch (Exception ex) + { + strKeyValue = strKey; + } + if (string.IsNullOrEmpty(strKeyValue)) + { + strErrName_Rep += strKey; + } + else + { + strErrName_Rep += strKeyValue; + } // & "(" & strKey & ")" + // 下次截取字串的起始位置 + intStart = k + 2; + } + } + } + } + } + // strExceptionMesmsg += Chr(9) & Chr(9) & Chr(9) & Resources.Resource.ResourceManager.GetString(al.Item(2).ToString) & "(" & al.Item(2).ToString & ")" + strExceptionMesmsg += strErrName_Rep; + } + + // If strExceptionStack <> String.Empty Then strExceptionStack += Chr(10) + if (string.IsNullOrEmpty(Conversions.ToString(al[3])) == false) + strExceptionStack += al[3].ToString(); + } + + ChgTranslateExceptionRet = true; + } + + catch (Exception e1) + { + throw; + ChgTranslateExceptionRet = false; + } + + return ChgTranslateExceptionRet; + + } + + + public static string CombineXMLResponse(string Identity, string ReturnValue = null, List Exception = null, string Result = null, List Message = null) + { + string CombineXMLResponseRet = default(string); + + try + { + // + CombineXMLResponseRet = ""; + + // + if (string.IsNullOrEmpty(Identity)) + { + CombineXMLResponseRet += ""; + } + else + { + CombineXMLResponseRet += ""; + CombineXMLResponseRet += Identity; + CombineXMLResponseRet += ""; + } + + // + if (string.IsNullOrEmpty(ReturnValue)) + { + CombineXMLResponseRet += ""; + } + else + { + CombineXMLResponseRet += ""; + CombineXMLResponseRet += ReturnValue; + CombineXMLResponseRet += ""; + } + + // + if (string.IsNullOrEmpty(Result)) + { + CombineXMLResponseRet += ""; + } + else + { + CombineXMLResponseRet += "" + Result + ""; + } + + // + string strExceptionSysmsg = string.Empty; + string strExceptionMesmsg = string.Empty; + string strExceptionStack = string.Empty; + + if (Exception.Count == 0) + { + CombineXMLResponseRet += ""; + } + else + { + // 2016-12-01, Joe, Exception轉語系 + ChgTranslateException(ref Exception, ref strExceptionSysmsg, ref strExceptionMesmsg, ref strExceptionStack); + + CombineXMLResponseRet += ""; + CombineXMLResponseRet += ""; + if (string.IsNullOrEmpty(strExceptionSysmsg) == true) + { + CombineXMLResponseRet += ""; + } + else + { + CombineXMLResponseRet += "" + strExceptionSysmsg + '\n' + "" + '\n'; + } + if (string.IsNullOrEmpty(strExceptionMesmsg) == true) + { + CombineXMLResponseRet += "" + strExceptionMesmsg + "" + '\n'; + } + else + { + CombineXMLResponseRet += "" + strExceptionMesmsg + "" + '\n'; + } + if (string.IsNullOrEmpty(strExceptionStack)) + { + CombineXMLResponseRet += ""; + } + else + { + // CombineXMLResponse += Chr(9) & Chr(9) & "" & Chr(10) & strExceptionStack & Chr(10) & Chr(9) & Chr(9) & "" & Chr(10) + CombineXMLResponseRet += ""; + } + CombineXMLResponseRet += '\t' + "" + '\n'; + } + + // + string strMmsg = string.Empty; + + if (Message.Count == 0) + { + CombineXMLResponseRet += '\t' + "" + '\n'; + } + else + { + CombineXMLResponseRet += '\t' + "" + '\n'; + // 2016-12-01, Joe, Message轉語系 + // Call ChgTranslateMessage(Message, strMmsg) + + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + strMmsg + "" + '\n'; + CombineXMLResponseRet += '\t' + "" + '\n'; + } + + CombineXMLResponseRet += "" + '\n'; + } + + catch (Exception e1) + { + // 發生錯誤時丟回本身的Function Name及系統錯誤訊息 + // Throw 'New Exception("modWS.CombineXMLResponse: " & e1.Message) + CombineXMLResponseRet = "" + '\n'; + CombineXMLResponseRet += '\t' + "" + '\n'; + CombineXMLResponseRet += '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + '\t' + e1.Message + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + '\t' + "CombineXMLResponse;Fail" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += e1.StackTrace + '\n'; + CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "" + '\n'; + CombineXMLResponseRet += '\t' + "" + '\n'; + CombineXMLResponseRet += '\t' + "" + '\n'; + CombineXMLResponseRet += ""; + } + + return CombineXMLResponseRet; + + } + + public static bool combineException(ref List arrException, string code = null, string sysmsg = null, string mesmsg = null, string stack = null) + { + bool result = false; + try + { + var al = new ArrayList(); + + al.Add(code); + al.Add(sysmsg); + al.Add(mesmsg); + al.Add(stack); + arrException.Add(al); + result = true; + } + catch (Exception ex) + { + result = false; + } + + return default(Boolean); + + } + + // Public Function combineMessage( + // ByRef strMessage As List(Of ArrayList), + // Optional ByVal mcode As String = Nothing, + // Optional ByVal mtype As String = Nothing, + // Optional ByVal mmsg As String = Nothing + // ) As Boolean + // Dim result As Boolean = False + // Try + // Dim al As New ArrayList + // al.Add(mcode) + // al.Add(mtype) + // al.Add(mmsg) + // strMessage.Add(al) + // result = True + // Catch ex As Exception + // result = False + // End Try + // End Function + + #endregion + // ===== + + // 發Mail功能 非群組與群組發送 + public static string SendMultiEmail(ref string FileName, ref string EmailSubject, string EmailBody = defString, string GroupNo = defString, byte[] AttachFile = null, GroupType GroupType = GroupType.UserGroup) + { + string SendMultiEmailRet = default(string); + // GroupType + // 0:User Group (使用者群組) + // 1:Issue Group (簽核群組) + // 2:Equipment Group(設備工程師群組) + // 3:Inventory Group(庫房工程師群組) + // 4:Report Group(報表使用群組) + // 5:ERF Disposition Group(異常處理群組) + // 6:ERF Mail ccGroup(附件收件人群組) + + try + { + + strIdentity = CombineXMLIdentity(modWIN.gComputerName, "AUTORUN", DateTime.Now.ToString()); + strParameter = CombineXMLParameter("groupno", "GroupNo", "String", CInput(GroupNo), ""); + strParameter = strParameter + CombineXMLParameter("emailsubject", "EmailSubject", "String", EmailSubject, ""); + strParameter = strParameter + CombineXMLParameter("emailbody", "EmailBody", "String", EmailBody, ""); + strParameter = strParameter + CombineXMLParameter("grouptype", "GroupType", "Integer", ((int)GroupType).ToString(), ""); + strParameter = strParameter + CombineXMLParameter("attachfilename", "AttachFileName", "String", FileName, ""); + + var XmlDoc = new XmlDocument(); + + InXml = CombineXMLRequest(strIdentity, strParameter); + + // OutXml = wsWIP.SendEmailAndAttachFileToGroup(InXml, AttachFile) + OutXml = InvokeSrv("wsWIP.SendEmailAndAttachFileToGroup", InXml, AttachFile); + + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) // 找出Exception訊並顯示出來 + { + SendMultiEmailRet = "success"; + } + else + { + SendMultiEmailRet = "fail"; + } + + XmlDoc = null; + } + + catch (Exception ex) + { + SendMultiEmailRet = "fail;" + ex.Message; + } + + return SendMultiEmailRet; + + } + + #region --- 數值查核 --- + + public static bool funChkNumericIsValid(string pSourceText, bool AllowFloat = true, bool AllowContainsDot = true, bool AllowZeroValue = true, bool AllowMinus = true) + { + + bool blnExecResult = false; + decimal decInputValue = 0m; + + try + { + + if (!Information.IsNumeric(pSourceText)) + { + blnExecResult = false; + return blnExecResult; + } + decInputValue = Convert.ToDecimal(pSourceText); + + if (!AllowMinus && decInputValue < 0m) + { + blnExecResult = false; + return blnExecResult; + } + if (!AllowZeroValue && decInputValue == 0m) + { + blnExecResult = false; + return blnExecResult; + } + if (!AllowFloat) + { + if (decInputValue % 1m > 0m) + { + blnExecResult = false; + return blnExecResult; + } + } + + if (!AllowContainsDot && !pSourceText.IndexOf(".").Equals(-1)) + { + blnExecResult = false; + return blnExecResult; + } + + blnExecResult = true; + } + catch (Exception ex) + { + throw; + } + + return blnExecResult; + + } + + #endregion + + + public static byte[] funExcelToByte(DataSet dsResult, String ExcelMode, String strLanguageMode, String strResourceDir) + { + var memStream = new MemoryStream(); + IWorkbook workbook = null; + int title = 0; + byte[] membyte; + try + { + // 匯出Excel再轉Stream + if (ExcelMode == "XLSX") + { + workbook = new XSSFWorkbook(); + } + else + { + workbook = new HSSFWorkbook(); + } + + // Add a new worksheet + ISheet worksheet = workbook.CreateSheet("Sheet1"); + + // Add the TSSAVE data table to the worksheet + IRow headerRow = worksheet.CreateRow(0); + + + for (int i = 0; i <= dsResult.Tables[0].Columns.Count - 1; i++) + { + string strLanguage = dsResult.Tables[0].Columns[i].ToString(); + strLanguage = TranslateMsg("[%" + strLanguage + "%]", strLanguageMode, strResourceDir); //語系翻譯 + headerRow.CreateCell(i).SetCellValue(strLanguage); + } + + for (int i = 0; i <= dsResult.Tables[0].Rows.Count - 1; i++) + { + IRow dataRow = worksheet.CreateRow(i + 1); + + + for (int j = 0; j <= dsResult.Tables[0].Columns.Count - 1; j++) + { + var objdsResultType = dsResult.Tables[0].Rows[i][j].GetType(); + dataRow.CreateCell(j); + if (!Convert.IsDBNull(dsResult.Tables[0].Rows[i][j])) + { + dataRow.CreateCell(j).SetCellValue(dsResult.Tables[0].Rows[i][j].ToString()); + } + else if (objdsResultType.Name == "DateTime") + { + DateTime datedsTemp = DateTime.Parse(dsResult.Tables[0].Rows[i][j].ToString()); + dataRow.CreateCell(j).SetCellValue(datedsTemp); + } + else if (objdsResultType.Name == "Decimal") + { + decimal amount; + amount = Convert.ToDecimal(dsResult.Tables[0].Rows[i][j].ToString()); + dataRow.CreateCell(j).SetCellValue((double)amount); + } + else + { + dataRow.CreateCell(j).SetCellValue(dsResult.Tables[0].Rows[i][j].ToString()); + } + + //.抓取值 + IRow SelectRow = worksheet.GetRow(i); + ICell SelectCell = SelectRow.GetCell(j); + //Style處理 + if (i == 0) + title = 1; + else + title = 0; + funCellStyleClone(workbook, SelectCell, title, ExcelMode); + } + } + //Columns 寬度 + for (int i = 0; i <= dsResult.Tables[0].Columns.Count - 1; i++) + { + worksheet.AutoSizeColumn(i); + } + ////debug 用 + //var fileStream = File.Create($"{DateTime.Now.ToString("HHmmss")}.xlsx"); + //FileStream fs = new FileStream(@"c:\test.xlsx", FileMode.Create); + //workbook.Write(fs); + //fs.Close(); + //// + + workbook.Write(memStream); + membyte = memStream.ToArray(); + return membyte; + } + catch (Exception ex) + { + throw; + } + finally + { + workbook?.Close(); + memStream.Close(); + memStream.Dispose(); + } + + } + public static void funCellStyleClone(IWorkbook Workbook, ICell SourceCell, int title, String ExcelMode) + { + try + { + ICellStyle CellStyle = Workbook.CreateCellStyle(); + IFont CellFont = Workbook.CreateFont(); + if (title == 1) + { + CellStyle.BorderLeft = BorderStyle.None; + CellStyle.BorderRight = BorderStyle.None; + CellStyle.BorderTop = BorderStyle.None; + if (ExcelMode == "XLSX") + { + XSSFColor xssfColor = new XSSFColor(); + byte[] colorRgb = { (byte)192, (byte)192, (byte)255 }; + xssfColor.SetRgb(colorRgb); + ((XSSFCellStyle)CellStyle).FillForegroundColorColor = xssfColor; + ((XSSFCellStyle)CellStyle).FillPattern = FillPattern.SolidForeground; + } + else + { + CellStyle.FillForegroundColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + CellStyle.FillBackgroundColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + + } + CellStyle.FillPattern = FillPattern.SolidForeground; + CellStyle.BorderBottom = BorderStyle.None; + CellStyle.Alignment = HorizontalAlignment.Center; + SourceCell.CellStyle = CellStyle; + } + else + { + CellStyle.BorderLeft = BorderStyle.Thin; + CellStyle.BorderRight = BorderStyle.Thin; + CellStyle.BorderTop = BorderStyle.Thin; + CellStyle.BorderBottom = BorderStyle.Thin; + if (ExcelMode == "XLSX") + { + XSSFColor xssfColor = new XSSFColor(); + byte[] colorRgb = { (byte)192, (byte)192, (byte)255 }; + xssfColor.SetRgb(colorRgb); + ((XSSFCellStyle)CellStyle).SetTopBorderColor(xssfColor); + ((XSSFCellStyle)CellStyle).SetRightBorderColor(xssfColor); + ((XSSFCellStyle)CellStyle).SetLeftBorderColor(xssfColor); + ((XSSFCellStyle)CellStyle).SetBottomBorderColor(xssfColor); + } + else + { + CellStyle.LeftBorderColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + CellStyle.RightBorderColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + CellStyle.TopBorderColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + CellStyle.BottomBorderColor = (((HSSFWorkbook)Workbook).GetCustomPalette().FindSimilarColor((byte)192, (byte)192, (byte)255)).Indexed; + + } + + CellStyle.FillPattern = FillPattern.SolidForeground; + CellStyle.Alignment = HorizontalAlignment.Left; + SourceCell.CellStyle = CellStyle; + } + + // 文字 + + CellFont.FontHeightInPoints = 9; + //CellFont.Boldweight = StyleFon.Boldweight; + //CellFont.Charset = StyleFon.Charset; + //CellFont.Color = StyleFon.Color; + //CellFont.FontHeight = 9; + //CellFont.FontHeightInPoints = StyleFon.FontHeightInPoints; + //CellFont.FontName = StyleFon.FontName; + //CellFont.IsItalic = StyleFon.IsItalic; + //CellFont.IsStrikeout = StyleFon.IsStrikeout; + //CellFont.Underline = StyleFon.Underline; + + CellStyle.SetFont(CellFont); + } + catch (Exception ex) + { + throw; + } + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modWIN.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modWIN.cs new file mode 100644 index 0000000..2e9b5ee --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunLib/modWIN.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections; +using static System.Configuration.ConfigurationSettings; +using System.Data; +using System.Runtime.InteropServices; +using System.Xml; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; + +namespace AutoRunLib +{ + + static class modWIN + { + + // ReviseDate : 2003/08/07,修改處理AdditionalXML + // ReviseDate : 2003/08/05,新增Public gReturnArray + // ReviseDate : 2003/07/01,更改AddFlow產生的Error(CInput) + // ReviseDate : 2002/11/04,新增CUnInput function + + public static string gComputerName = System.Environment.MachineName; + public static string gUserNo = "AUTService"; + public static string gMESWebServiceHost = GetAppSettings("MesWebServiceHost"); + public static string gCUSWebServiceHost = GetAppSettings("CusWebServiceHost"); + public static string gERPWebServiceHost = GetAppSettings("ERPWebServiceHost"); + public static string gLanguageMode = GetAppSettings("LanguageMode"); + + //新增gEnableSSL配置参数 + public static bool gEnableSSL = Convert.ToBoolean(GetAppSettings("EnableSSL")); + + // Add By Peter 2005/6/20 + public static string gSettingMode = ""; + + + public static string PasswordEncoding(ref string Password) + { + string PasswordEncodingRet = default(string); + // 此 Function 將傳入值加以編碼後傳出,編碼後長度不變 + // 傳入值: 密碼 + // 傳回值: 編碼後密碼 + + // Vernam密碼是由Gilbert Vernam在1918年發明的 + string g_Key = "xNDFz6LH67LOv7xKbWFpbMu1wejrM7SzvV4tLRvq3X47m708O1xMHLoaMNCqGhoaEN"; + string strChar, iCryptChar, strEncrypted = default(string); + int i, iKeyChar, iStringChar; + + var loopTo = Strings.Len(Password); + for (i = 1; i <= loopTo; i++) + { + iKeyChar = Strings.Asc(Strings.Mid(g_Key, i, 1)); + iStringChar = Strings.Asc(Strings.Mid(Password, i, 1)); + iCryptChar = (iKeyChar ^ iStringChar).ToString(); + strEncrypted = strEncrypted + Strings.Chr(Conversions.ToInteger(iCryptChar)); + } + + PasswordEncodingRet = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(strEncrypted)); + return PasswordEncodingRet; + + } + + + // 2017-06-05, Joe, 依XML標準定義轉換特殊字元 + public static string CInputWithXMLStandard(ref string strInput) + { + string CInputWithXMLStandardRet = default(string); + + // 轉換 ' 為 ' + CInputWithXMLStandardRet = Strings.Replace(strInput, "'", "'"); + + // 轉換 & 為 & + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "&", "&"); + + // 轉換 " 為 quot; + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "\"", """); + + // 轉換 > 為 > + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, ">", ">"); + + // 轉換 < 為 < + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "<", "<"); + return CInputWithXMLStandardRet; + + } + + // 2017-06-05, Joe, 依XML標準定義反轉換特殊字元 + public static string CUnInputWithXMLStandard(ref string strInput) + { + string CUnInputWithXMLStandardRet = default(string); + + // 轉換 ' 為 "'" + CUnInputWithXMLStandardRet = Strings.Replace(strInput, "'", "'"); + + // 轉換 " 為 quot; + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, """, "\""); + + // 轉換 & 為 & + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, "&", "&"); + + // 轉換 > 為 > + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, ">", ">"); + + // 轉換 < 為 < + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, "<", "<"); + return CUnInputWithXMLStandardRet; + + } + + // **Add by py 2003/12/04,Gary Lu 20120911:以MESWin1~Win4的版本進行替換 + public static string LocalizeWebService(string wsUrl, bool Customize = false) + { + + string[] tmpString; + int i; + tmpString = wsUrl.Split('/'); + if (Customize == true) + { + if (!string.IsNullOrEmpty(Strings.Trim(gCUSWebServiceHost))) + { + if (tmpString.Length == 6) + { + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gCUSWebServiceHost + "/" + tmpString[4].ToString() + "/" + tmpString[5].ToString(); + } + else if (tmpString.Length == 5) + { + wsUrl = "http://" + gCUSWebServiceHost + "/" + tmpString[tmpString.Length - 1].ToString(); + } + } + } + else if (!string.IsNullOrEmpty(Strings.Trim(gMESWebServiceHost))) + { + if (tmpString.Length == 6) + { + // wsUrl = "http://" & gMESWebServiceHost & "/" & tmpString(tmpString.Length - 2).ToString & "/" & tmpString(tmpString.Length - 1).ToString + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gMESWebServiceHost + "/" + tmpString[4].ToString() + "/" + tmpString[5].ToString(); + } + else if (tmpString.Length == 5) + { + wsUrl = "http://" + gMESWebServiceHost + "/" + tmpString[tmpString.Length - 1].ToString(); + } + } + if (gEnableSSL) + { + wsUrl = wsUrl.Replace("http://", "https://"); + } + return wsUrl; + // Have to assume the web service is on the machine that this application came from + } // LocalizeWebService + + public static string LocalizeWebService_ERP(string wsUrl) + { + + string[] tmpString; + int i; + tmpString = wsUrl.Split('/'); + + if (!string.IsNullOrEmpty(Strings.Trim(gERPWebServiceHost))) + { + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gERPWebServiceHost + "/" + tmpString[4].ToString(); + } + if (gEnableSSL) + { + wsUrl = wsUrl.Replace("http://", "https://"); + } + return wsUrl; + + } + + // Add By Peter 2005/6/20 + public static string GetAppSettings(string key, string section = "") + { + string result = string.Empty; + + try + { + + if (!string.IsNullOrEmpty(section)) + { + result = Conversions.ToString(((Hashtable)GetConfig(section))[key]); + } + else if (string.IsNullOrEmpty(gSettingMode) || string.IsNullOrEmpty(gSettingMode) || gSettingMode.Length == 0) + { + result = AppSettings[key]; + } + else + { + Hashtable ht = (Hashtable)GetConfig(gSettingMode); + if (ht != null) + { + result = Conversions.ToString(ht[key]); + if (string.IsNullOrEmpty(result)) + { + result = AppSettings[key]; + if (string.IsNullOrEmpty(result)) + { + result = ""; + } + } + } + else + { + result = AppSettings[key]; + } + } + } + + catch (Exception ex) + { + throw ex; + } + + return result; + + } + + + public static string GetSubString(string strValue, int intLength) + { + int intLen; + string strReturn; + + // Dim byteValue As Byte() = System.Text.Encoding.UTF8.GetBytes(strValue) + // If intLength > byteValue.Length - 1 Then + // intLen = byteValue.Length - 1 + // End If + // Dim strReturn As String = System.Text.Encoding.UTF8.GetString(byteValue, 0, intLen) + intLen = (int)Math.Round(Conversion.Int(intLength / 3d)); + strReturn = Strings.Left(strValue, intLen); + + return strReturn; + + } + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.Designer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.Designer.cs new file mode 100644 index 0000000..f452fa8 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.Designer.cs @@ -0,0 +1,104 @@ +using System; +using System.Diagnostics; +using System.ServiceProcess; + +namespace AutoRunService +{ + + [Microsoft.VisualBasic.CompilerServices.DesignerGenerated()] + public partial class AutoRunService : ServiceBase + { + + // UserService 覆寫 Dispose 以清除元件清單。 + [DebuggerNonUserCode()] + protected override void Dispose(bool disposing) + { + try + { + if (disposing && components != null) + { + components.Dispose(); + } + } + finally + { + base.Dispose(disposing); + } + } + + // 處理序的主要進入點 + [MTAThread()] + [DebuggerNonUserCode()] + public static void Main() + { + ServiceBase[] ServicesToRun; + + // 在同一個處理序中可以執行多個 NT 服務。若要在這個處理序中 + // 加入另一項服務,請修改下行程式碼, + // 以建立第二個服務物件。例如, + // + // ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService} + // + ServicesToRun = new ServiceBase[] { new AutoRunService() }; + //RunInteractive(ServicesToRun); //debug + Run(ServicesToRun); + } + private static void RunInteractive(ServiceBase[] servicesToRun) + { + var onStartMethod = typeof(ServiceBase).GetMethod("OnStart", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); + + foreach (ServiceBase service in servicesToRun) + { + Console.Write("Starting {0}...", service.ServiceName); + onStartMethod.Invoke(service, new object[] { new string[] { } }); + Console.Write("Started"); + } + + Console.WriteLine("Press any key to stop the services"); + Console.ReadKey(); + var onStopMethod = typeof(ServiceBase).GetMethod("OnStop", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); + + foreach (ServiceBase service in servicesToRun) + { + Console.Write("Stopping {0}...", service.ServiceName); + onStopMethod.Invoke(service, null); + Console.WriteLine("Stopped"); + } + } + + // 為元件設計工具的必要項 + private System.ComponentModel.IContainer components; + + // 注意: 以下為元件設計工具的所需的程序 + // 您可以使用元件設計工具進行修改。 + // 請不要使用程式碼編輯器進行修改。 + [DebuggerStepThrough()] + private void InitializeComponent() + { + TimerCheckJobList = new System.Timers.Timer(); + TimerCheckJobList.Elapsed += new System.Timers.ElapsedEventHandler(TimerCheckJobList_Elapsed); + TimerCheckQueue = new System.Timers.Timer(); + TimerCheckQueue.Elapsed += new System.Timers.ElapsedEventHandler(TimerCheckQueue_Elapsed); + ((System.ComponentModel.ISupportInitialize)TimerCheckJobList).BeginInit(); + ((System.ComponentModel.ISupportInitialize)TimerCheckQueue).BeginInit(); + // + // TimerCheckJobList + // + TimerCheckJobList.Interval = 300000.0d; + // + // TimerCheckQueue + // + TimerCheckQueue.Interval = 60000.0d; + // + // AutoRunService + // + ServiceName = "MES AutoRun Service"; + ((System.ComponentModel.ISupportInitialize)TimerCheckJobList).EndInit(); + ((System.ComponentModel.ISupportInitialize)TimerCheckQueue).EndInit(); + + } + internal System.Timers.Timer TimerCheckJobList; + internal System.Timers.Timer TimerCheckQueue; + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.cs new file mode 100644 index 0000000..b694af4 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.cs @@ -0,0 +1,1204 @@ +using System; +using System.Data; +using System.Deployment.Application; +using System.Diagnostics; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.ServiceProcess; +using System.Xml; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; +using static iMESCore.Base.iMESConst; +using static iMESCore.Base.iMESComXML; +using static iMESCore.Base.iMESComSubroutine; + +namespace AutoRunService +{ + + public partial class AutoRunService : ServiceBase + { + + // 2016/06/23 YF, 改呼叫wsInvoke + + private string tblJobQueue, tblJob; + private int intMaxRunningJobCount = modAutoRun.gIntMaxRunningJobCount; + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + // 2014/06/25 YF, 記錄JOB的執行狀況 + private Collection CollectionJob = new Collection(); + + // 取回JOB LIST 到 JOB QUEUE的時間間隔(單位:秒) '20211015 13871,修正為*1000才是秒 + private int MonitorjoblistDuration = (int)Math.Round(Conversions.ToDouble(modWIN.GetAppSettings("MonitorjoblistDuration")) * 1000d); + // 到JOB QUEUE 檢查是否有要執行的job的時間間隔(單位:秒) '20211015 13871,修正為*1000才是秒 + private int MonitorQueueDuration = (int)Math.Round(Conversions.ToDouble(modWIN.GetAppSettings("MonitorQueueDuration")) * 1000d); + + public AutoRunService() + { + InitializeComponent(); + } + + protected override void OnStart(string[] args) + { + + var currentDomain = AppDomain.CurrentDomain; + currentDomain.UnhandledException += CurrentDomain_UnhandledException; + + // 在此加入啟動服務的程式碼。這個方法必須設定已啟動的 + // 事項,否則可能導致服務無法工作。 + funWriteTxtFile("Service Starting."); + + // 2012/10/05, Aaron, 啟動時先刪除資料庫中上次執行的殘留JobQueue + funDelMesAutoRunQueue(); + + // 啟動時先載入Job List及Table架構 + funLoadAutoRunJob_All(); + + // 每隔n秒鐘, 取回一次JOB LIST 到 JOB QUEUE + TimerCheckJobList.Interval = MonitorjoblistDuration; + TimerCheckJobList.Enabled = true; + + // 每隔n秒鐘,到 JOB QUEUE 檢查是否有要執行的 + TimerCheckQueue.Interval = MonitorQueueDuration; + TimerCheckQueue.Enabled = true; + + modAutoRun.gIntCurrentJobCount = 0; + + funWriteTxtFile("Service Started."); + + } + + protected override void OnStop() + { + // 在此加入停止服務所需執行的終止程式碼。 + modAutoRun.dsJob.Dispose(); + modAutoRun.dsJobQueue.Dispose(); + TimerCheckJobList.Enabled = false; + TimerCheckQueue.Enabled = false; + funWriteTxtFile("Service Stopped."); + } + + + /// + /// 取出近期的Job放入JobQueue中, + /// + /// + /// + /// + private void TimerCheckJobList_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + + // funWriteTxtFile("Running CheckJobList...") + + TimerCheckJobList.Enabled = false; + + // *****取回最近要執行的Jobs, 放入JobQueue中 + funGetJob2Queue(); + + // *****平分近8分的工作 + TimerCheckJobList.Enabled = true; + + } + + + /// + /// 定期檢查JobQueue是否有工作預定執行之動作, + /// + /// + /// + /// + private void TimerCheckQueue_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + + // funWriteTxtFile("Running CheckQueue...") + + // 若未達到最大同時執行工作數目之限制時 + if (modAutoRun.gIntCurrentJobCount < intMaxRunningJobCount) + { + TimerCheckQueue.Enabled = false; + + do + { + try + { + + int intTmp; + var strJOB = new string[3]; + DateTime dateTmp; + int intTmp2; + string strServerName; + + // *****從JobQueue中取回資料,存成 DataSet + funReBind(); + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + // 2014/06/25 YF, JobQueue物件不存在則跳離 + if (modAutoRun.dsJobQueue.Tables[tblJobQueue] == null) + { + break; + } + + // 2014/06/25 YF, 將tblJobQueue內Running的Job與CollectionJob做比對, 來判斷Job是否已死在Queue內 + // CollectionJob內若還有此JobNo, 則表示該Job還在執行中, 若沒有則表示Job已死 + CheckJobIsDead(); + + + // '*****檢查是否有需要執行的job, 包含沒有設定ServiceStation或ServiceStation為ME的Job + DataRow[] dr = modAutoRun.dsJobQueue.Tables[tblJobQueue].Select("(ServerName is null Or ServerName='' Or ServerName='" + System.Windows.Forms.SystemInformation.ComputerName.ToString().ToUpper() + "') and STATUS='Standby'"); + + + // 如果有則處理它們 + var loopTo = dr.Length - 1; + for (intTmp = 0; intTmp <= loopTo; intTmp++) + { + // 若未達到最大同時執行工作數目之限制時 + if (modAutoRun.gIntCurrentJobCount < intMaxRunningJobCount) + { + dateTmp = Conversions.ToDate(dr[intTmp][2]); + + // ..........判斷此job是否執行時間到 + if (dateTmp <= DateTime.Now) + { + strJOB[0] = Conversions.ToString(dr[intTmp][0]); + strJOB[1] = Conversions.ToString(dr[intTmp][5]); + + // ..............再檢查一次,判斷此job是否尚未有人執行 + strServerName = funLoadAutoRunServerName(strJOB[0]); + if ((strServerName ?? "") != defString) + { + if (string.IsNullOrEmpty(strServerName) || string.IsNullOrEmpty(strServerName.Trim())) + { + intTmp2 = 1; // 尚未有主機登記要執行 + } + else if ((strServerName ?? "") == (System.Windows.Forms.SystemInformation.ComputerName ?? "")) + { + intTmp2 = 1; // 本主機自行登記要執行 + } + else + { + intTmp2 = 0; + } // 已經有其他機器登記要執行 + + // 尚未有主機登記要執行或本主機自行登記要執行 + if (intTmp2 == 1) + { + + // 寫入註明自己正要執行 + funUpdateAutoRunQueue(System.Windows.Forms.SystemInformation.ComputerName, strJOB[0], defString); + + // ..........再取一次,判斷ServerName是否為自己 + strServerName = funLoadAutoRunServerName(strJOB[0]); + if ((strServerName ?? "") != defString) + { + if ((strServerName ?? "") == (System.Windows.Forms.SystemInformation.ComputerName ?? "")) + { + modAutoRun.gIntCurrentJobCount = modAutoRun.gIntCurrentJobCount + 1; + + // 建立傳入執行緒之參數物件 + var objJobData = new modAutoRun.SomeStateType(); + objJobData.SomeState(strJOB[0], strJOB[1]); + // 開始執行 + if (System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(funProcessJob), objJobData) == false) + { + // MsgBox("Thread fail.") + } + + } + } // ...........If DataReader.Read Then + + } // .............If intTmp2 = 1 Then + + } // ...............判斷是否尚未有人執行 If DataReader.Read Then + + } // .........判斷是否執行時間到 If dateTmp <= Now Then + + } // ...........If gIntCurrentJobCount <= intMaxRunningJobCount Then + + } + } + + catch (Exception e1) + { + funWriteTxtFile("TimerCheckQueue Error : " + e1.Message); + funWriteToAnEventLog("TimerCheckQueue Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + finally + { + } + } + + while (false); + TimerCheckQueue.Enabled = true; + } + + // 'Call funReBind() + + } + + + /// + /// 將執行的Log紀錄在文字檔(AutoRunWS_Log.txt)中 + /// + /// + /// + /// + private int funWriteTxtFile(string WriteTxt) + { + int funWriteTxtFileRet = default(int); + + funWriteTxtFileRet = -1; + + try + { + if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Log")) + { + Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Log"); + } + + var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + @"\Log\AutoRunWS_Log_" + Strings.Format(DateTime.Now, "yyyyMMdd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); + var w = new StreamWriter(fs); + + w.BaseStream.Seek(0L, SeekOrigin.End); + w.WriteLine(Strings.Format(DateTime.Now, "yyyy/MM/dd HH:mm:ss") + " " + WriteTxt); + w.Close(); + fs.Close(); + + funWriteTxtFileRet = 0; + } + + catch (Exception e1) + { + + } + + return funWriteTxtFileRet; + + } + + private void funWriteToAnEventLog(string sEvent, EventLogEntryType sEventType = EventLogEntryType.Information, int sEventID = 0) + { + string sSource = "MES AutoRun Service"; + string sLog = "Application"; + + try + { + if (!EventLog.SourceExists(sSource)) + EventLog.CreateEventSource(sSource, sLog); + EventLog.WriteEntry(sSource, sEvent, sEventType, sEventID); + } + catch (Exception ex) + { + + } + + } + + /// + /// 重新載入JobQueue資料 + /// + /// + /// + private int funReBind() + { + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + StringReader tmpStringReader; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; + + // 先判斷是否dataset中已有equipmenttype之datatable,若有,需先remove否則會有錯誤 + if (!(modAutoRun.dsJobQueue.Tables[tblJobQueue] == null)) + { + modAutoRun.dsJobQueue.Tables.Remove(tblJobQueue); + } + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.LoadMesAutoRunQueue(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.LoadMesAutoRunQueue", InXml); + + XmlDoc = new XmlDocument(); + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + tblJobQueue = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadmesautorunqueue").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunqueue").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + modAutoRun.dsJobQueue.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunqueue").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + modAutoRun.dsJobQueue.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + } + + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + } + + catch (Exception e1) + { + funWriteTxtFile("funReBind Error : " + e1.Message); + funWriteToAnEventLog("funReBind Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return default(int); + + } + + + /// + /// 取出近期的Job放入JobQueue中 + /// + /// + public void funGetJob2Queue() + { + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.GetJob2Queue(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.GetJob2Queue", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + } + + catch (Exception e1) + { + funWriteTxtFile("funGetJob2Queue Error : " + e1.Message); + funWriteToAnEventLog("funGetJob2Queue Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + } + + + /// + /// 取出ServerName + /// + /// + /// + /// + private string funLoadAutoRunServerName(string JobNo) + { + string funLoadAutoRunServerNameRet = default(string); + // 判斷此job是否尚未有人執行 + // 判斷ServerName是否為自己(本機) + + funLoadAutoRunServerNameRet = defString; + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + // 組InXml的字串 + strParameter = ""; + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "jobno"; + string argname = "JobNo"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, JobNo, argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.LoadMesAutoRunQueue(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.LoadMesAutoRunQueue", InXml); + + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + // 取出CPN + if (XmlDoc.GetElementsByTagName("ServerName".ToUpper()).Count > 0) + { + string serverNameTmp = XmlDoc.GetElementsByTagName("ServerName".ToUpper()).Item(0).InnerXml.ToString(); + funLoadAutoRunServerNameRet = CUnInput(serverNameTmp); + } + else + { + funLoadAutoRunServerNameRet = ""; + } + } + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + + XmlDoc = null; + } + + catch (Exception e1) + { + funWriteTxtFile("funLoadAutoRunServerName (JobNo : " + JobNo + ") Error : " + e1.Message); + funWriteToAnEventLog("funLoadAutoRunServerName (JobNo : " + JobNo + ") Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return funLoadAutoRunServerNameRet; + + } + + private int funUpdateAutoRunQueue(string ServerName, string JobNo, string Status) + { + int funUpdateAutoRunQueueRet = default(int); + + // 寫入註明自己(本機)正要執行 + funUpdateAutoRunQueueRet = -1; + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + try + { + + // 將傳入參數組成XML字串 + // 定義Identity + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + + // 定義Parameter + strParameter = string.Empty; + strParameter = ""; + if ((ServerName ?? "") != defString) + { + string argvalue_name = "servername"; + string argname = "ServerName"; + string argtype = "String"; + string argdesc = ""; + strParameter += CombineXMLParameter(argvalue_name, argname, argtype, ServerName, argdesc); + } + if ((JobNo ?? "") != defString) + { + string argvalue_name1 = "jobno"; + string argname1 = "JobNo"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, JobNo, argdesc1); + } + if ((Status ?? "") != defString) + { + string argvalue_name2 = "status"; + string argname2 = "Status"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameter(argvalue_name2, argname2, argtype2, Status, argdesc2); + } + + // request XML字串 + InXml = CombineXMLRequest(strIdentity, strParameter); + + // OutXml = wsAUT.EditMesAutoRunQueue(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.EditMesAutoRunQueue", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + + funUpdateAutoRunQueueRet = 0; + } + + catch (Exception e1) + { + // Throw New Exception("Unexpected Error. Update auto-run queue fails. " & e1.Message) + funWriteTxtFile("funUpdateAutoRunQueue (JobNo : " + JobNo + ") Error : " + e1.Message); + funWriteToAnEventLog("funUpdateAutoRunQueue (JobNo : " + JobNo + ") Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return funUpdateAutoRunQueueRet; + + } + + /// + /// 取出Job參數設定 + /// + /// + /// + /// 2016/04/26 YF, 此Function的目的在取出要執行的JOB的參數, 故不要使用dsJob物件, 以避免各執行緒異動dsJob, 而造成 "DataTable 内部索引已损坏" 的錯誤 + /// + private int funLoadAutoRunJob(string JobNo, ref Collection colParameters) + { + + // Dim dr As DataRow + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + StringReader tmpStringReader; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; + + // 先判斷是否dataset中已有datatable,若有,需先remove否則會有錯誤 + // If Not IsNothing(dsJobQueue.Tables(tblJob)) Then + // dsJobQueue.Tables.Remove(tblJob) + // End If + + // 組InXml的字串 + strParameter = ""; + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "jobno"; + string argname = "JobNo"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, JobNo, argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.LoadMesAutoRunJob(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.LoadMesAutoRunJob", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + + if (chkExecutionSuccess(XmlDoc)) + { + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + tblJob = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadmesautorunjob").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + lock (this) + { + if (modAutoRun.dsJob.Tables[tblJob] == null) + { + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunjob").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + modAutoRun.dsJob.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + } + + // 先刪除舊資料 + DataRow[] drSel; + drSel = modAutoRun.dsJob.Tables[tblJob].Select("JobNo = '" + JobNo + "'"); + if (drSel.Length > 0) + drSel[0].Delete(); + + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunjob").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + modAutoRun.dsJob.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + + drSel = modAutoRun.dsJob.Tables[tblJob].Select("JobNo = '" + JobNo + "'"); + if (drSel.Length > 0) + { + colParameters.Add(drSel[0]["Parameter01"].ToString(), "Parameter01"); + colParameters.Add(drSel[0]["Parameter02"].ToString(), "Parameter02"); + colParameters.Add(drSel[0]["Parameter03"].ToString(), "Parameter03"); + colParameters.Add(drSel[0]["Parameter04"].ToString(), "Parameter04"); + colParameters.Add(drSel[0]["Parameter05"].ToString(), "Parameter05"); + colParameters.Add(drSel[0]["Parameter06"].ToString(), "Parameter06"); + colParameters.Add(drSel[0]["Parameter07"].ToString(), "Parameter07"); + colParameters.Add(drSel[0]["Parameter08"].ToString(), "Parameter08"); + colParameters.Add(drSel[0]["Parameter09"].ToString(), "Parameter09"); + colParameters.Add(drSel[0]["Parameter10"].ToString(), "Parameter10"); + colParameters.Add(drSel[0]["EmailAddress"].ToString(), "EmailAddress"); + } + + } + } + + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + } + + catch (Exception e1) + { + funWriteTxtFile("funLoadAutoRunJob (JobNo : " + JobNo + ") Error : " + e1.Message); + funWriteToAnEventLog("funLoadAutoRunJob (JobNo : " + JobNo + ") Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return default(int); + + } + + private void funLoadAutoRunJob_All() + { + + // Dim dr As DataRow + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + StringReader tmpStringReader; + string InXml, OutXml, strIdentity, strParameter, XmlData, XmlSchema; + + // 先判斷是否dataset中已有datatable,若有,需先remove否則會有錯誤 + if (!(modAutoRun.dsJob.Tables[tblJob] == null)) + { + modAutoRun.dsJob.Tables.Remove(tblJob); + } + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + strParameter = ""; + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.LoadMesAutoRunJob(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.LoadMesAutoRunJob", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (chkExecutionSuccess(XmlDoc)) + { + tblJob = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("loadmesautorunjob").Item(0).SelectNodes("name").Item(0).InnerXml; + + // 取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題 + XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunjob").Item(0).SelectNodes("schema").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlSchema)) + { + // 將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件 + tmpStringReader = new StringReader(XmlSchema); + modAutoRun.dsJob.ReadXmlSchema(tmpStringReader); + tmpStringReader.Close(); + } + // 取出Data + XmlData = XmlDoc.DocumentElement.GetElementsByTagName("loadmesautorunjob").Item(0).SelectNodes("value").Item(0).InnerXml; + if (!string.IsNullOrEmpty(XmlData)) + { + tmpStringReader = new StringReader(XmlData); + modAutoRun.dsJob.ReadXml(tmpStringReader); + tmpStringReader.Close(); + } + } + + else + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + } + + catch (Exception e1) + { + funWriteTxtFile("funLoadAutoRunJob_All Error : " + e1.Message); + funWriteToAnEventLog("funLoadAutoRunJob_All Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + } + + + /// + /// 執行設定的Job + /// + /// + /// + public void funProcessJob(object State) + { + + modAutoRun.SomeStateType strJob = (modAutoRun.SomeStateType)State; + string strJobNo = strJob.strJobNo; + string strJobName = strJob.strCommandName; + var StartTime = DateTime.Now; + string strStatus = "Fail"; // 回傳狀況先設定為Fail + string strReturnMsg = ""; + string strMemo = ""; + string errorCode = "0000-999999"; + + try + { + + funWriteTxtFile("JobNo : " + strJobNo + ", Running."); + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + // 2014/06/25 YF, Job Running + if (CollectionJob.Contains(strJobNo)) + { + CollectionJob.Remove(strJobNo); + } + CollectionJob.Add(1, strJobNo); + + // 1. 註明正在執行 + funUpdateAutoRunQueue(defString, strJobNo, "Running"); + + // 2. 取出tblMESAutoRunJob的參數(Parameter1~Parameter5) + var colParameters = new Collection(); + colParameters.Add(strJobNo, "JobNo"); + funLoadAutoRunJob(strJobNo, ref colParameters); + + // 3. 引用AutoRunLib.dll, 不加入參考 ---- + string strAppBase = AppDomain.CurrentDomain.BaseDirectory; + string strFilePath; + + // 判斷是否是使用ClickOnce + if (ApplicationDeployment.IsNetworkDeployed) + { + // ClickOnce架構下將strAppBase改指回Smart Client + var tempUri = ApplicationDeployment.CurrentDeployment.UpdateLocation; + strAppBase = tempUri.ToString().Replace("/ClickOnce/MESSeries.application", ""); + } + + if (Strings.Mid(strAppBase, 1, 4) == "http") + { + strFilePath = strAppBase + "/AutoRunLib.dll"; + } + else + { + strFilePath = strAppBase + "AutoRunLib.dll"; + } + + // 本機執行:將DLL放在執行檔編譯後的位置底下 + var mainAssembly = System.Reflection.Assembly.LoadFrom(strFilePath); + // 建立Type物件 + var hashType = mainAssembly.GetType("AutoRunLib.clsAutoRunLibrary"); + // 使用ConstructorInfo建立物件 + Type[] argumentTypes = Type.EmptyTypes; + var ctor = hashType.GetConstructor(argumentTypes); + // 因AutoRunLib.clsAutoRunLibrary會叫用到iMESLicxManager.dll,所以AutoRunLib.dll和iMESLicxManager.dll要放在同一個路徑底下,且app.config要設連線字串 + var newHash = ctor.Invoke(new object[] { }); + // 使用MethodInfo.Invoke執行 + var meth = hashType.GetMethod("ExecuteFunction"); + + // 執行設定的Job + strReturnMsg = Conversions.ToString(meth.Invoke(newHash, new object[] { strJobName, colParameters })); + + // 若對應的程式回傳為success, 則本程序也回傳Success + // If strReturnMsg = "success" Then strStatus = "Success" + if (Strings.Mid(strReturnMsg, 1, 7).ToLower() == "success") + { + strStatus = "Success"; // 2012/08/20,Even,需判斷若回傳值 =Success (第一字碼大寫時,造成 strStatus無判斷),因此故意不回傳值 + strReturnMsg = ""; // 成功不顯示msg + } + else if (Strings.Mid(strReturnMsg, 1, 5) == "fail;") // 2013/01/14,Hank,狀態已是fail,故Msg不show + { + // 取ErrorCode + string[] tmp = Strings.Split(strReturnMsg, ";"); + if (tmp.Length >= 3) + { + if (tmp[1].Length == 11) + { + errorCode = tmp[1]; + } + } + + strReturnMsg = Strings.Replace(strReturnMsg, "fail;", "", 1, 1, CompareMethod.Text); // 拿掉前面的fail; + } + + funWriteTxtFile("JobNo : " + strJobNo + ", Complete. " + strReturnMsg); + } + + catch (Exception E2) + { + strMemo = "funProcessJob Error : " + E2.Message; + funWriteTxtFile(strMemo); + funWriteToAnEventLog(strMemo, EventLogEntryType.Error, 9000); + } + finally + { + try + { + + // Job完成後的後續動作: + // 刪除已經執行完畢之工作 (最先做, 減少執行完畢而未刪的情形) + // 註記最後執行時間 + // 增加log + if (strStatus == "Success") + { + funEndProcessJob(strJobNo, strStatus, CInput(strReturnMsg), + CInput(System.Windows.Forms.SystemInformation.ComputerName), + StartTime, DateTime.Now, Convert.ToInt32(DateAndTime.DateDiff(DateInterval.Second, StartTime, DateTime.Now)), strMemo); + } + else + { + funEndProcessJob_ErrorCode(strJobNo, strStatus, CInput(strReturnMsg), + CInput(System.Windows.Forms.SystemInformation.ComputerName), StartTime, DateTime.Now, + Convert.ToInt32(DateAndTime.DateDiff(DateInterval.Second, StartTime, DateTime.Now)), strMemo, errorCode, "AutoRun"); + } + } + + catch (Exception E1) + { + strMemo = "funProcessJob (JobNo : " + strJobNo + ") Error : " + E1.Message; + funWriteTxtFile(strMemo); + funWriteToAnEventLog(strMemo, EventLogEntryType.Error, 9000); + } + finally + { + modAutoRun.gIntCurrentJobCount = modAutoRun.gIntCurrentJobCount - 1; + } + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + // 2014/06/25 YF, Job End + if (CollectionJob.Contains(strJobNo)) + { + CollectionJob.Remove(strJobNo); + } + + } + + } + + /// + /// 執行Job完成後的後續動作 + /// + private int funEndProcessJob(string JobNo, string Status = defString, string ReturnMsg = defString, string ServerName = defString, DateTime StartTime = default(DateTime), DateTime EndTime = default(DateTime), int RunTime = defInteger, string Memo = defString) + { + int funEndProcessJobRet = default(int); + // 刪除已經執行完畢之工作 (最先做, 減少執行完畢而未刪的情形) + // 註記最後執行時間 + // 增加log + + funEndProcessJobRet = -1; + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + try + { + + // 將傳入參數組成XML字串 + // 定義Identity + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + + // 定義Parameter + strParameter = string.Empty; + string argvalue_name = "jobno"; + string argname = "JobNo"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, JobNo, argdesc); + if ((Status ?? "") != defString) + { + string argvalue_name1 = "status"; + string argname1 = "Status"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, Status, argdesc1); + } + if ((ReturnMsg ?? "") != defString) + { + string argvalue_name2 = "returnmsg"; + string argname2 = "ReturnMsg"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameter(argvalue_name2, argname2, argtype2, ReturnMsg, argdesc2); + } + if ((ServerName ?? "") != defString) + { + string argvalue_name3 = "servername"; + string argname3 = "ServerName"; + string argtype3 = "String"; + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, ServerName, argdesc3); + } + if (StartTime != defDateTime) + { + string argvalue_name4 = "starttime"; + string argname4 = "StartTime"; + string argtype4 = "DateTime"; + string argvalue = Strings.Format(StartTime, "yyyy/MM/dd HH:mm:ss"); + string argdesc4 = ""; + strParameter += CombineXMLParameter(argvalue_name4, argname4, argtype4, argvalue, argdesc4); + } // 2016-11-09, Joe, Format日期格式 + if (EndTime != defDateTime) + { + string argvalue_name5 = "endtime"; + string argname5 = "EndTime"; + string argtype5 = "DateTime"; + string argvalue1 = Strings.Format(EndTime, "yyyy/MM/dd HH:mm:ss"); + string argdesc5 = ""; + strParameter += CombineXMLParameter(argvalue_name5, argname5, argtype5, argvalue1, argdesc5); + } // 2016-11-09, Joe, Format日期格式 + if (RunTime != defInteger) + { + string argvalue_name6 = "runtime"; + string argname6 = "RunTime"; + string argtype6 = "Integer"; + string argvalue2 = RunTime.ToString(); + string argdesc6 = ""; + strParameter += CombineXMLParameter(argvalue_name6, argname6, argtype6, argvalue2, argdesc6); + RunTime = Conversions.ToInteger(argvalue2); + } + if ((Memo ?? "") != defString) + { + string argvalue_name7 = "memo"; + string argname7 = "Memo"; + string argtype7 = "String"; + string argdesc7 = ""; + strParameter += CombineXMLParameter(argvalue_name7, argname7, argtype7, Memo, argdesc7); + } + + // request XML字串 + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRun.InvokeSrv("wsAUT.funEndProcessJob", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + + funEndProcessJobRet = 0; + } + + catch (Exception e1) + { + funWriteTxtFile("funEndProcessJob (JobNo : " + JobNo + ") Error : " + e1.Message); + funWriteToAnEventLog("funEndProcessJob (JobNo : " + JobNo + ") Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return funEndProcessJobRet; + + } + /// + /// 執行Job完成後的後續動作 + /// + private int funEndProcessJob_ErrorCode(string JobNo, string Status = defString, string ReturnMsg = defString, string ServerName = defString, DateTime StartTime = default(DateTime), DateTime EndTime = default(DateTime), int RunTime = defInteger, string Memo = defString, string ErrorCode = "0000-999999", string LogClass = defString) + { + int funEndProcessJob_ErrorCodeRet = default(int); + // 刪除已經執行完畢之工作 (最先做, 減少執行完畢而未刪的情形) + // 註記最後執行時間 + // 增加log + + funEndProcessJob_ErrorCodeRet = -1; + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + try + { + + // 將傳入參數組成XML字串 + // 定義Identity + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + + // 定義Parameter + strParameter = string.Empty; + string argvalue_name = "jobno"; + string argname = "JobNo"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, JobNo, argdesc); + if ((Status ?? "") != defString) + { + string argvalue_name1 = "status"; + string argname1 = "Status"; + string argtype1 = "String"; + string argdesc1 = ""; + strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, Status, argdesc1); + } + if ((ReturnMsg ?? "") != defString) + { + string argvalue_name2 = "returnmsg"; + string argname2 = "ReturnMsg"; + string argtype2 = "String"; + string argdesc2 = ""; + strParameter += CombineXMLParameter(argvalue_name2, argname2, argtype2, ReturnMsg, argdesc2); + } + if ((ServerName ?? "") != defString) + { + string argvalue_name3 = "servername"; + string argname3 = "ServerName"; + string argtype3 = "String"; + string argdesc3 = ""; + strParameter += CombineXMLParameter(argvalue_name3, argname3, argtype3, ServerName, argdesc3); + } + if (StartTime != defDateTime) + { + string argvalue_name4 = "starttime"; + string argname4 = "StartTime"; + string argtype4 = "DateTime"; + string argvalue = Strings.Format(StartTime, "yyyy/MM/dd HH:mm:ss"); + string argdesc4 = ""; + strParameter += CombineXMLParameter(argvalue_name4, argname4, argtype4, argvalue, argdesc4); + } // 2016-11-09, Joe, Format日期格式 + if (EndTime != defDateTime) + { + string argvalue_name5 = "endtime"; + string argname5 = "EndTime"; + string argtype5 = "DateTime"; + string argvalue1 = Strings.Format(EndTime, "yyyy/MM/dd HH:mm:ss"); + string argdesc5 = ""; + strParameter += CombineXMLParameter(argvalue_name5, argname5, argtype5, argvalue1, argdesc5); + } // 2016-11-09, Joe, Format日期格式 + if (RunTime != defInteger) + { + string argvalue_name6 = "runtime"; + string argname6 = "RunTime"; + string argtype6 = "Integer"; + string argvalue2 = RunTime.ToString(); + string argdesc6 = ""; + strParameter += CombineXMLParameter(argvalue_name6, argname6, argtype6, argvalue2, argdesc6); + RunTime = Conversions.ToInteger(argvalue2); + } + if ((Memo ?? "") != defString) + { + string argvalue_name7 = "memo"; + string argname7 = "Memo"; + string argtype7 = "String"; + string argdesc7 = ""; + strParameter += CombineXMLParameter(argvalue_name7, argname7, argtype7, Memo, argdesc7); + } + if ((LogClass ?? "") != defString) + { + string argvalue_name8 = "logclass"; + string argname8 = "LogClass"; + string argtype8 = "String"; + string argdesc8 = ""; + strParameter += CombineXMLParameter(argvalue_name8, argname8, argtype8, LogClass, argdesc8); + } + string argvalue_name9 = "errorcode"; + string argname9 = "ErrorCode"; + string argtype9 = "String"; + string argdesc9 = ""; + strParameter += CombineXMLParameter(argvalue_name9, argname9, argtype9, ErrorCode, argdesc9); + + // request XML字串 + InXml = CombineXMLRequest(strIdentity, strParameter); + + OutXml = modAutoRun.InvokeSrv("wsAUT.funEndProcessJob_ErrorCode", InXml); + + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + + funEndProcessJob_ErrorCodeRet = 0; + } + + catch (Exception e1) + { + funWriteTxtFile("funEndProcessJob (JobNo : " + JobNo + ") Error : " + e1.Message); + funWriteToAnEventLog("funEndProcessJob (JobNo : " + JobNo + ") Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + return funEndProcessJob_ErrorCodeRet; + + } + /// + /// 啟動時先刪除資料庫中上次執行的殘留JobQueue + /// + /// + public void funDelMesAutoRunQueue() + { + + // //Web Service相關變數 + var XmlDoc = new XmlDocument(); + string InXml, OutXml, strIdentity, strParameter; + + // 組InXml的字串 + string argSendTime = Conversions.ToString(DateTime.Now); + strIdentity = CombineXMLIdentity(modWIN.gComputerName, modWIN.gUserNo, argSendTime); + string argvalue_name = "servername"; + string argname = "ServerName"; + string argtype = "String"; + string argdesc = ""; + strParameter = CombineXMLParameter(argvalue_name, argname, argtype, System.Windows.Forms.SystemInformation.ComputerName.ToString().ToUpper(), argdesc); + InXml = CombineXMLRequest(strIdentity, strParameter); + + try + { + // OutXml = wsAUT.DelMesAutoRunQueue(InXml) + OutXml = modAutoRun.InvokeSrv("wsAUT.DelMesAutoRunQueue", InXml); + + // 利用XmlDoc物件處理ReturnValue + XmlDoc.LoadXml(OutXml); + if (!chkExecutionSuccess(XmlDoc)) + { + throw new Exception(GetExceptionSysMsg(XmlDoc) + '\r' + GetExceptionMesMsg(XmlDoc)); + } + } + + catch (Exception e1) + { + funWriteTxtFile("funDelMesAutoRunQueue Error : " + e1.Message); + funWriteToAnEventLog("funDelMesAutoRunQueue Error : " + e1.Message, EventLogEntryType.Error, 9000); + } + + } + + private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs args) + { + try + { + Exception e = (Exception)args.ExceptionObject; + funWriteTxtFile(e.Message); + funWriteToAnEventLog(e.Message, EventLogEntryType.Error, 9000); + } + + catch (Exception ex) + { + + } + } + + // 2017/12/26 OwenLiu, mantis:0043439, AutoRunService 問題調整 + // 2014/06/25 YF, 將tblJobQueue內Running的Job與CollectionJob做比對, 來判斷Job是否已死在Queue內 + // 若CollectionJob沒有此JobNo, 則表示Job已死, 將Job狀態改為Standby, 即可再繼續執行 + private void CheckJobIsDead() + { + + try + { + + foreach (DataRow row in modAutoRun.dsJobQueue.Tables[tblJobQueue].Select("(ServerName is null Or ServerName='' Or ServerName='" + System.Windows.Forms.SystemInformation.ComputerName.ToString().ToUpper() + "') and STATUS='Running'")) + { + + if (!CollectionJob.Contains(Conversions.ToString(row["JobNo"]))) + { + row["Status"] = "Standby"; + } + + } + } + + catch (Exception ex) + { + funWriteTxtFile("CheckJobIsDead Error: " + ex.Message); + funWriteToAnEventLog(ex.Message, EventLogEntryType.Error, 9000); + } + + } + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj new file mode 100644 index 0000000..8e632c1 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj @@ -0,0 +1,272 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {1D8229EF-DEED-0C6F-1A45-76DD01FBF457} + WinExe + AutoRunService.AutoRunService + AutoRunService + AutoRunService + Console + SAK + SAK + SAK + SAK + v4.6.2 + + + 2.0 + + + false + D:\Temp\MESSeries6\AutoRunService\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 1.0.0.%2a + false + true + true + $(DefaultItemExcludes);$(ProjectDir)**\*.vb + + + true + full + true + true + ..\..\..\MESClient\AutoRunServiceInstall\ + ..\..\..\MESClient\AutoRunServiceInstall\AutoRunService.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355 + false + + + pdbonly + false + true + true + ..\..\..\MESClient\AutoRunServiceInstall\ + ..\..\..\MESClient\AutoRunServiceInstall\ + + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355 + false + + + BB1E0A6C038D360CE4BE9723ABC415D99A432E73 + + + + + + + true + + + true + + + true + + + + False + ..\..\..\MES_C_DLL\AutoRunLib.dll + + + ..\..\..\MES_S_DLL\data_access_service.dll + + + ..\..\..\MES_S_DLL\iMESAppSetting.dll + + + ..\..\..\MES_S_DLL\iMESChart_HtmlHandler.dll + + + ..\..\..\MES_S_DLL\iMESComInvoke.dll + + + ..\..\..\MES_S_DLL\iMESComSubroutine.dll + True + + + ..\..\..\MES_S_DLL\iMESComXML.dll + True + + + ..\..\..\MES_S_DLL\iMESConst.dll + True + + + False + ..\..\..\MES_C_DLL\Ionic.Zip.dll + + + + ..\..\..\MES_S_DLL\GuardServerProvider.dll + + + False + ..\..\..\MES_S_DLL\iMESCIO.dll + + + ..\..\..\MES_S_DLL\iMESDAO.dll + + + ..\..\..\MES_S_DLL\iMESDataObject.dll + + + ..\..\..\MES_S_DLL\iMESProjectBase.dll + + + ..\..\..\MES_S_DLL\iMESLicxManager.dll + True + + + False + ..\..\..\MES_C_DLL\NPOI.dll + + + False + ..\..\..\MES_C_DLL\NPOI.OOXML.dll + + + False + ..\..\..\MES_C_DLL\NPOI.OpenXml4Net.dll + + + False + ..\..\..\MES_C_DLL\NPOI.OpenXmlFormats.dll + + + False + ..\..\..\MES_S_DLL\Oracle.ManagedDataAccess.dll + + + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + Component + + + AutoRunService.cs + + + + True + Settings.settings + True + + + ProjectInstaller.cs + + + Component + + + + + Designer + AutoRunService.cs + + + Designer + ProjectInstaller.cs + + + + + + Always + + + Always + + + MyApplicationCodeGenerator + Application.Designer.cs + + + SettingsSingleFileGenerator + AutoRunService.My + Settings.Designer.cs + + + Always + + + Always + + + Always + + + + + + + + + + + Always + + + + + False + Microsoft .NET Framework 4 %28x86 和 x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 4.5 + true + + + + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj.vspscc b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.resx b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.resx new file mode 100644 index 0000000..548ef71 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 56 + + + 17, 17 + + + False + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService_TemporaryKey.pfx b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService_TemporaryKey.pfx new file mode 100644 index 0000000..36becd9 Binary files /dev/null and b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/AutoRunService_TemporaryKey.pfx differ diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x64.bat b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x64.bat new file mode 100644 index 0000000..c63097e --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x64.bat @@ -0,0 +1,3 @@ +%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "%~dp0AutoRunService.exe" + +Pause \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x86.bat b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x86.bat new file mode 100644 index 0000000..413214d --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Install_x86.bat @@ -0,0 +1,3 @@ +%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "%~dp0AutoRunService.exe" + +Pause \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.Designer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.Designer.cs new file mode 100644 index 0000000..5e9e2a0 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.Designer.cs @@ -0,0 +1,11 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + + diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.myapp b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.myapp new file mode 100644 index 0000000..602de37 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 3 + true + diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/AssemblyInfo.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/AssemblyInfo.cs new file mode 100644 index 0000000..ac06c1c --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +// 一般的組件資訊是由下列這組屬性所控制。 +// 變更這些屬性的值即可修改組件的相關資訊。 +// 檢閱組件屬性的值 + +[assembly: AssemblyTitle("AutoRunService")] +[assembly: AssemblyDescription("AutoRunService for MESSeries")] +[assembly: AssemblyCompany("iMES Technology Inc.")] +[assembly: AssemblyProduct("MESSeries 6")] +[assembly: AssemblyCopyright("Copyright © iMES Technology Inc.")] +[assembly: AssemblyTrademark("")] +[assembly: ComVisible(true)] + +// 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID +[assembly: Guid("88779103-B613-42AE-9368-24C38D3E131A")] + +// 組件的版本資訊由下列四個值所組成: +// +// 主要版本 +// 次要版本 +// 組建編號 +// 修訂 +// +// 您可以自行指定所有的值,也可以依照以下的方式,使用 '*' 將修訂和組建編號 +// 指定為預設值: + +[assembly: AssemblyVersion("6.0.0.0")] diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/BuildIncrementVersionInfo.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/BuildIncrementVersionInfo.cs new file mode 100644 index 0000000..af1c995 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/BuildIncrementVersionInfo.cs @@ -0,0 +1,2 @@ + +[assembly: System.Reflection.AssemblyFileVersion("6.0.7.30207")] diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Resources.resx b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.Designer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.Designer.cs new file mode 100644 index 0000000..fe34b13 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.Designer.cs @@ -0,0 +1,101 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +using System.Diagnostics; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; + + +namespace AutoRunService.My +{ + + [System.Runtime.CompilerServices.CompilerGenerated()] + [System.CodeDom.Compiler.GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)] + internal sealed partial class MySettings : System.Configuration.ApplicationSettingsBase + { + + private static MySettings defaultInstance = (MySettings)Synchronized(new MySettings()); + + #region My.Settings 自動儲存功能 + /* TODO ERROR: Skipped IfDirectiveTrivia + #If _MyType = "WindowsForms" Then + *//* TODO ERROR: Skipped DisabledTextTrivia + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub + *//* TODO ERROR: Skipped EndIfDirectiveTrivia + #End If + */ + #endregion + + public static MySettings Default + { + get + { + + /* TODO ERROR: Skipped IfDirectiveTrivia + #If _MyType = "WindowsForms" Then + *//* TODO ERROR: Skipped DisabledTextTrivia + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If + *//* TODO ERROR: Skipped EndIfDirectiveTrivia + #End If + */ + return defaultInstance; + } + } + + [System.Configuration.ApplicationScopedSetting()] + [DebuggerNonUserCode()] + [System.Configuration.SpecialSetting(System.Configuration.SpecialSetting.WebServiceUrl)] + [System.Configuration.DefaultSettingValue("http://localhost/MESws_STD/wsInvoke.asmx")] + public string AutoRunService_wsInvoke_wsInvoke + { + get + { + return Conversions.ToString(this["AutoRunService_wsInvoke_wsInvoke"]); + } + } + } +} + +namespace AutoRunService.My +{ + + [HideModuleName()] + [DebuggerNonUserCode()] + [System.Runtime.CompilerServices.CompilerGenerated()] + internal static class MySettingsProperty + { + + [System.ComponentModel.Design.HelpKeyword("My.Settings")] + internal static MySettings Settings + { + get + { + return MySettings.Default; + } + } + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.settings b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.settings new file mode 100644 index 0000000..3453767 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/My Project/Settings.settings @@ -0,0 +1,9 @@ + + + + + + http://localhost/MESws_STD/wsInvoke.asmx + + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.Designer.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.Designer.cs new file mode 100644 index 0000000..b831014 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.Designer.cs @@ -0,0 +1,89 @@ +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace AutoRunService +{ + [System.ComponentModel.RunInstaller(true)] + public partial class ProjectInstaller : System.Configuration.Install.Installer + { + + // Installer 覆寫 Dispose 以清除元件清單。 + [DebuggerNonUserCode()] + protected override void Dispose(bool disposing) + { + try + { + if (disposing && components != null) + { + components.Dispose(); + } + } + finally + { + base.Dispose(disposing); + } + } + + // 為元件設計工具的必要項 + private System.ComponentModel.IContainer components; + + // 注意: 以下為元件設計工具所需的程序 + // 您可以使用元件設計工具進行修改。 + // 請不要使用程式碼編輯器進行修改。 + [DebuggerStepThrough()] + private void InitializeComponent() + { + _ServiceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); + _ServiceInstaller1 = new System.ServiceProcess.ServiceInstaller(); + // + // ServiceProcessInstaller1 + // + _ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; + _ServiceProcessInstaller1.Password = null; + _ServiceProcessInstaller1.Username = null; + // + // ServiceInstaller1 + // + _ServiceInstaller1.DisplayName = "MES AutoRun Service"; + _ServiceInstaller1.ServiceName = "MES AutoRun Service"; + // + // ProjectInstaller + // + Installers.AddRange(new System.Configuration.Install.Installer[] { _ServiceProcessInstaller1, _ServiceInstaller1 }); + + } + private System.ServiceProcess.ServiceProcessInstaller _ServiceProcessInstaller1; + + internal virtual System.ServiceProcess.ServiceProcessInstaller ServiceProcessInstaller1 + { + [MethodImpl(MethodImplOptions.Synchronized)] + get + { + return _ServiceProcessInstaller1; + } + + [MethodImpl(MethodImplOptions.Synchronized)] + set + { + _ServiceProcessInstaller1 = value; + } + } + private System.ServiceProcess.ServiceInstaller _ServiceInstaller1; + + internal virtual System.ServiceProcess.ServiceInstaller ServiceInstaller1 + { + [MethodImpl(MethodImplOptions.Synchronized)] + get + { + return _ServiceInstaller1; + } + + [MethodImpl(MethodImplOptions.Synchronized)] + set + { + _ServiceInstaller1 = value; + } + } + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.cs new file mode 100644 index 0000000..5fa66fa --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.cs @@ -0,0 +1,19 @@ + +namespace AutoRunService +{ + + public partial class ProjectInstaller + { + + public ProjectInstaller() : base() + { + + // 此為元件設計工具所需的呼叫。 + InitializeComponent(); + + // 在呼叫 InitializeComponent 之後加入初始化程式碼 + + } + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.resx b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.resx new file mode 100644 index 0000000..a387ccf --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 56 + + + 17, 17 + + + False + + \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ReplicationTableList.config b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/ReplicationTableList.config new file mode 100644 index 0000000..e69de29 diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x64.bat b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x64.bat new file mode 100644 index 0000000..61d8a39 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x64.bat @@ -0,0 +1,4 @@ +%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "%~dp0AutoRunService.exe" -u + + +Pause \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x86.bat b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x86.bat new file mode 100644 index 0000000..20d4564 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/Uninstall_x86.bat @@ -0,0 +1,3 @@ +%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "%~dp0AutoRunService.exe" -u + +Pause \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/app.config b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/app.config new file mode 100644 index 0000000..337334e --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/app.config @@ -0,0 +1,128 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://internal.imestech.com/MESws_STD_6033/wsInvoke.asmx + + + http://localhost/MESEAI_DSC/wsMES.asmx + + + + diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modAutoRun.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modAutoRun.cs new file mode 100644 index 0000000..8f0838b --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modAutoRun.cs @@ -0,0 +1,90 @@ +using System; +using System.Data; +using System.Diagnostics; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; +using AutoRunLib; + +namespace AutoRunService +{ + static class modAutoRun + { + + // Dim objLic As New iMESLicxManager.clsDBCom + + public static int gIntCurrentJobCount; + public static DateTime dateStartTime; + public static string gStatus; // 目前是否起動AutoRun + public static DataSet dsJobQueue = new DataSet(); + public static DataSet dsJob = new DataSet(); + // Public Const defInteger As Integer = -999 '宣告整數使用的常數,用以辨識參數是否有傳入Function中。 + // Public Const defString As String = "Null" '宣告字串使用的常數,用以辨識參數是否有傳入Function中。 + // Public Const defDateTime As Date = #12/31/1900# '宣告日期使用的常數,用以辨識參數是否有傳入Function中。 + + // Public ConnectionString As String = objLic.GetConnectionString 'app.config要設連線字串 + public const int cJobList2Queue = 30; // 每隔30秒鐘, 取回一次JOB LIST 到 JOB QUEUE + public const int cCheckQueue = 17; // 每隔17秒鐘,到 JOB QUEUE 檢查是否有要執行的 + public static int gIntMaxRunningJobCount = 5; // 最大允許同時執行數量 + + + public class SomeStateType + { + public string strJobNo; + public string strCommandName; + public void SomeState(string strJN, string strCN) + { + strJobNo = strJN; + strCommandName = strCN; + } + } + + public static bool PrevInstance() + { + if (Information.UBound(Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)) > 0) + { + return true; + } + else + { + return false; + } + } + + #region Invoke + + /// + /// 叫用Web Service, 並回傳Response XML + /// + /// 要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis + /// InXml + /// 是否客製的WebService + /// + public static string InvokeSrv(string Method, string InXml, bool Customize = false) + { + + object result; + + try + { + + using (var ws = new iMESCore.Base.Invoke.wsInvoke.wsInvoke()) + { + ws.Url = modWIN.LocalizeWebService(ws.Url.ToString(), Customize); + ws.EnableDecompression = true; + result = ws.invokeSrv(Method, new object[] { InXml }); + } + } + + catch (Exception ex) + { + throw; + } + + return Conversions.ToString(result); + + } + + #endregion + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modWIN.cs b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modWIN.cs new file mode 100644 index 0000000..9066ad5 --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/modWIN.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections; +using static System.Configuration.ConfigurationSettings; +using System.Data; +using System.Runtime.InteropServices; +using System.Xml; +using Microsoft.VisualBasic; +using Microsoft.VisualBasic.CompilerServices; + +namespace AutoRunService +{ + + static class modWIN + { + + // ReviseDate : 2003/08/07,修改處理AdditionalXML + // ReviseDate : 2003/08/05,新增Public gReturnArray + // ReviseDate : 2003/07/01,更改AddFlow產生的Error(CInput) + // ReviseDate : 2002/11/04,新增CUnInput function + + public static string gComputerName = System.Environment.MachineName; + public static string gUserNo = "AUTService"; + public static string gMESWebServiceHost = GetAppSettings("MesWebServiceHost"); + public static string gCUSWebServiceHost = GetAppSettings("CusWebServiceHost"); + public static string gERPWebServiceHost = GetAppSettings("ERPWebServiceHost"); + public static string gLanguageMode = GetAppSettings("LanguageMode"); + + //新增gEnableSSL配置参数 + public static bool gEnableSSL = Convert.ToBoolean(GetAppSettings("EnableSSL")); + // Add By Peter 2005/6/20 + public static string gSettingMode = ""; + + + public static string PasswordEncoding(ref string Password) + { + string PasswordEncodingRet = default(string); + // 此 Function 將傳入值加以編碼後傳出,編碼後長度不變 + // 傳入值: 密碼 + // 傳回值: 編碼後密碼 + + // Vernam密碼是由Gilbert Vernam在1918年發明的 + string g_Key = "xNDFz6LH67LOv7xKbWFpbMu1wejrM7SzvV4tLRvq3X47m708O1xMHLoaMNCqGhoaEN"; + string strChar, iCryptChar, strEncrypted = default(string); + int i, iKeyChar, iStringChar; + + var loopTo = Strings.Len(Password); + for (i = 1; i <= loopTo; i++) + { + iKeyChar = Strings.Asc(Strings.Mid(g_Key, i, 1)); + iStringChar = Strings.Asc(Strings.Mid(Password, i, 1)); + iCryptChar = (iKeyChar ^ iStringChar).ToString(); + strEncrypted = strEncrypted + Strings.Chr(Conversions.ToInteger(iCryptChar)); + } + + PasswordEncodingRet = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(strEncrypted)); + return PasswordEncodingRet; + + } + + + // 2017-06-05, Joe, 依XML標準定義轉換特殊字元 + public static string CInputWithXMLStandard(ref string strInput) + { + string CInputWithXMLStandardRet = default(string); + + // 轉換 ' 為 ' + CInputWithXMLStandardRet = Strings.Replace(strInput, "'", "'"); + + // 轉換 & 為 & + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "&", "&"); + + // 轉換 " 為 quot; + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "\"", """); + + // 轉換 > 為 > + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, ">", ">"); + + // 轉換 < 為 < + CInputWithXMLStandardRet = Strings.Replace(CInputWithXMLStandardRet, "<", "<"); + return CInputWithXMLStandardRet; + + } + + // 2017-06-05, Joe, 依XML標準定義反轉換特殊字元 + public static string CUnInputWithXMLStandard(ref string strInput) + { + string CUnInputWithXMLStandardRet = default(string); + + // 轉換 ' 為 "'" + CUnInputWithXMLStandardRet = Strings.Replace(strInput, "'", "'"); + + // 轉換 " 為 quot; + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, """, "\""); + + // 轉換 & 為 & + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, "&", "&"); + + // 轉換 > 為 > + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, ">", ">"); + + // 轉換 < 為 < + CUnInputWithXMLStandardRet = Strings.Replace(CUnInputWithXMLStandardRet, "<", "<"); + return CUnInputWithXMLStandardRet; + + } + + // **Add by py 2003/12/04,Gary Lu 20120911:以MESWin1~Win4的版本進行替換 + public static string LocalizeWebService(string wsUrl, bool Customize = false) + { + + string[] tmpString; + int i; + tmpString = wsUrl.Split('/'); + if (Customize == true) + { + if (!string.IsNullOrEmpty(Strings.Trim(gCUSWebServiceHost))) + { + if (tmpString.Length == 6) + { + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gCUSWebServiceHost + "/" + tmpString[4].ToString() + "/" + tmpString[5].ToString(); + } + else if (tmpString.Length == 5) + { + wsUrl = "http://" + gCUSWebServiceHost + "/" + tmpString[tmpString.Length - 1].ToString(); + } + } + } + else if (!string.IsNullOrEmpty(Strings.Trim(gMESWebServiceHost))) + { + if (tmpString.Length == 6) + { + // wsUrl = "http://" & gMESWebServiceHost & "/" & tmpString(tmpString.Length - 2).ToString & "/" & tmpString(tmpString.Length - 1).ToString + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gMESWebServiceHost + "/" + tmpString[4].ToString() + "/" + tmpString[5].ToString(); + } + else if (tmpString.Length == 5) + { + wsUrl = "http://" + gMESWebServiceHost + "/" + tmpString[tmpString.Length - 1].ToString(); + } + } + if (gEnableSSL) + { + wsUrl = wsUrl.Replace("http://", "https://"); + } + return wsUrl; + // Have to assume the web service is on the machine that this application came from + } // LocalizeWebService + + public static string LocalizeWebService_ERP(string wsUrl) + { + + string[] tmpString; + int i; + tmpString = wsUrl.Split('/'); + + if (!string.IsNullOrEmpty(Strings.Trim(gERPWebServiceHost))) + { + wsUrl = tmpString[0].ToString() + "/" + tmpString[1].ToString() + "/" + gERPWebServiceHost + "/" + tmpString[4].ToString(); + } + if (gEnableSSL) { + wsUrl = wsUrl.Replace("http://", "https://"); + } + return wsUrl; + + } + + // Add By Peter 2005/6/20 + public static string GetAppSettings(string key, string section = "") + { + string result = string.Empty; + + try + { + + if (!string.IsNullOrEmpty(section)) + { + result = Conversions.ToString(((Hashtable)GetConfig(section))[key]); + } + else if (string.IsNullOrEmpty(gSettingMode) || string.IsNullOrEmpty(gSettingMode) || gSettingMode.Length == 0) + { + result = AppSettings[key]; + } + else + { + Hashtable ht = (Hashtable)GetConfig(gSettingMode); + if (ht != null) + { + result = Conversions.ToString(ht[key]); + if (string.IsNullOrEmpty(result)) + { + result = AppSettings[key]; + if (string.IsNullOrEmpty(result)) + { + result = ""; + } + } + } + else + { + result = AppSettings[key]; + } + } + } + + catch (Exception ex) + { + throw ex; + } + + return result; + + } + + + public static string GetSubString(string strValue, int intLength) + { + int intLen; + string strReturn; + + // Dim byteValue As Byte() = System.Text.Encoding.UTF8.GetBytes(strValue) + // If intLength > byteValue.Length - 1 Then + // intLen = byteValue.Length - 1 + // End If + // Dim strReturn As String = System.Text.Encoding.UTF8.GetString(byteValue, 0, intLen) + intLen = (int)Math.Round(Conversion.Int(intLength / 3d)); + strReturn = Strings.Left(strValue, intLen); + + return strReturn; + + } + + } +} \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/AutoRunService/安裝說明.txt b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/安裝說明.txt new file mode 100644 index 0000000..2a41d8d --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/AutoRunService/安裝說明.txt @@ -0,0 +1,29 @@ +wAutoRun + +1. ƻsResourcesƧܦؿ +2. I@~tΪw˧妸 + 32줸 Install_x86.bat + 64줸 Install_x64.bat +e: +%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "D:\TFS\messeries\MESSeries\MESClient\AutoRunServiceInstall\AutoRunService.exe" +Pause + +3. ƹk > Htκ޲z +4. w +5. קsurAutoRunService.exe.config +6. Windows ServiceҰ (q޲z-A-MES AutoRun ServiceAiҥ) +7. NCompilerɮAutoRunLib.dllmD:\TFS\messeries\MESSeries\MESClient\AutoRunServiceInstall +8. miMESLicxManager.dllD:\TFS\messeries\MESSeries\MESClient\AutoRunServiceInstall + +------------------------------------------------------------------------------------------------------------------------------------------------------- +ѰwAutoRun +1. Windows Service +2. I@~tΪw˧妸 + 32줸 Uninstall_x86.bat + 64줸 Uninstall_x64.bat +e: +%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "D:\TFS\messeries\MESSeries\MESClient\AutoRunServiceInstall\AutoRunService.exe" -u +Pause + +3. ƹk > Htκ޲z +4. w \ No newline at end of file diff --git a/SRC/MESAgent/MESAutoRun_STD/MESAutoRun.sln b/SRC/MESAgent/MESAutoRun_STD/MESAutoRun.sln new file mode 100644 index 0000000..2a9b3fa --- /dev/null +++ b/SRC/MESAgent/MESAutoRun_STD/MESAutoRun.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoRunService", "AutoRunService\AutoRunService.csproj", "{1D8229EF-DEED-0C6F-1A45-76DD01FBF457}" + ProjectSection(ProjectDependencies) = postProject + {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A} = {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoRunLib", "AutoRunLib\AutoRunLib.csproj", "{7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D8229EF-DEED-0C6F-1A45-76DD01FBF457}.Debug|x86.ActiveCfg = Debug|Any CPU + {1D8229EF-DEED-0C6F-1A45-76DD01FBF457}.Debug|x86.Build.0 = Debug|Any CPU + {1D8229EF-DEED-0C6F-1A45-76DD01FBF457}.Release|x86.ActiveCfg = Release|Any CPU + {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A}.Debug|x86.Build.0 = Debug|Any CPU + {7C0468A8-E807-0FF4-0C04-C1AD9B3D7D2A}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 3 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = http://tfs.imestech.com:8080/tfs/messeries6 + SccLocalPath0 = . + SccProjectUniqueName1 = AutoRunLib\\AutoRunLib.vbproj + SccProjectName1 = AutoRunLib + SccLocalPath1 = AutoRunLib + SccProjectUniqueName2 = AutoRunService\\AutoRunService.vbproj + SccProjectName2 = AutoRunService + SccLocalPath2 = AutoRunService + EndGlobalSection +EndGlobal