This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
SXS20240115/SRC/MESAgent/MESAutoRun/AutoRunLib/clsAutoRunLibrary.cs
2024-01-15 10:57:41 +08:00

1189 lines
48 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
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;
namespace AutoRunLib_C
{
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 string ConnectionString
{
get
{
return strConnectionString;
}
}
public string 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 string 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_ 開頭
// --------------------------------------------------------------------------------------------------
// 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
{
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;
}
private string SendMultiEmailNonGroup(ref string EmailSubject, string EmailBody = defString, string EmailAddress = defString, string AttachFileName = defString, byte[] AttachFile = null, string EmailAddressCC = defString)
{
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)
{
string argTagName = "address";
string argValue = CombineXMLValue(argTagName, StrTemp);
tmpXML += CombineXMLValueTag(argValue);
}
if ((EmailAddressCC ?? "") != defString && !string.IsNullOrEmpty(EmailAddressCC))
{
aryAddressCC = Strings.Split(EmailAddressCC, ",");
foreach (string StrTemp in aryAddressCC)
{
string argTagName1 = "address";
string argValue1 = CombineXMLValue(argTagName1, StrTemp);
tmpXMLCC += CombineXMLValueTag(argValue1);
}
}
try
{
string argCurUserNo = "AUTORUN";
string argSendTime = Conversions.ToString(DateTime.Now);
strIdentity = CombineXMLIdentity(modWIN.gComputerName, argCurUserNo, argSendTime);
string argvalue_name = "emailaddress";
string argname = "EmailAddress";
string argtype = "String";
string argdesc = "";
strParameter = CombineXMLParameterMultiValue(argvalue_name, argname, argtype, tmpXML, argdesc);
string argvalue_name1 = "emailsubject";
string argname1 = "EmailSubject";
string argtype1 = "String";
string argdesc1 = "";
strParameter += CombineXMLParameter(argvalue_name1, argname1, argtype1, EmailSubject, argdesc1);
string argvalue_name2 = "emailbody";
string argname2 = "EmailBody";
string argtype2 = "String";
string argvalue = CInput(EmailBody);
string argdesc2 = "";
strParameter += CombineXMLParameter(argvalue_name2, argname2, argtype2, argvalue, argdesc2);
if (!string.IsNullOrEmpty(tmpXMLCC))
{
string argvalue_name3 = "emailaddresscc";
string argname3 = "EmailAddressCC";
string argtype3 = "String";
string argdesc3 = "";
strParameter += CombineXMLParameterMultiValue(argvalue_name3, argname3, argtype3, tmpXMLCC, argdesc3);
}
if ((AttachFileName ?? "") != defString)
{
string argvalue_name4 = "attachfilename";
string argname4 = "AttachFileName";
string argtype4 = "String";
string argdesc4 = "";
strParameter += CombineXMLParameter(argvalue_name4, argname4, argtype4, AttachFileName, argdesc4);
}
var XmlDoc = new XmlDocument();
InXml = CombineXMLRequest(strIdentity, strParameter);
if ((AttachFileName ?? "") != defString)
{
OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.SendMultiEmailAndAttachFile", InXml, AttachFile);
}
else
{
OutXml = modAutoRunLibrary.InvokeSrv("wsSYS.SendMultiEmail", 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);
}
}
private string ChgTranslateName(Collection ColSaveControl, string LanguageMode = "en")
{
// 目的:
// 將 Collection 上所有的 Object 都做語系切換
// 語系檔命名為 MESResource.XX.Resx
// zh-CHS簡體、zh-CHT繁體、en英文
string strResourceFile;
if (string.IsNullOrEmpty(LanguageMode))
{
return default(string);
}
else
{
strResourceFile = "MESResource." + LanguageMode;
}
string strResourcePath;
strResourcePath = AppDomain.CurrentDomain.BaseDirectory + "Resources";
// 檢查檔案是否存在
if (string.IsNullOrEmpty(FileSystem.Dir(strResourcePath + @"\" + strResourceFile + ".resources"))) // File not exist
{
return default(string);
}
var rm = System.Resources.ResourceManager.CreateFileBasedResourceManager(strResourceFile, strResourcePath, null);
string TmpString;
int i;
foreach (var objControl in ColSaveControl)
{
if (objControl is iMESUltraGrid.iMESUltraGridControl)
{
TmpString = Conversions.ToString((objControl as iMESUltraGrid.iMESUltraGridControl).Name.Substring(3, (Strings.Len((objControl as iMESUltraGrid.iMESUltraGridControl).Name) - 3)));
TmpString = rm.GetString(TmpString.ToUpper());
if (Conversions.ToBoolean(Operators.AndObject(!string.IsNullOrEmpty(TmpString), Operators.ConditionalCompareObjectNotEqual((objControl as iMESUltraGrid.iMESUltraGridControl).iMESUltraGrid.Text, "", false))))
{
(objControl as iMESUltraGrid.iMESUltraGridControl).iMESUltraGrid.Text = TmpString;
}
}
else if (objControl is Infragistics.Win.UltraWinGrid.UltraGrid)
{
int bandCount;
int colCount;
var loopTo = ((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands.Count - 1;
for (bandCount = 0; bandCount <= loopTo; bandCount++)
{
var loopTo1 = ((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands[bandCount].Columns.Count - 1;
for (colCount = 0; colCount <= loopTo1; colCount++)
((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands[bandCount].Columns[colCount].Header.Caption = Conversions.ToString(Interaction.IIf(string.IsNullOrEmpty(rm.GetString(((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands[bandCount].Columns[colCount].Key.ToUpper())), ((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands[bandCount].Columns[colCount].Header.Caption, rm.GetString(((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.Bands[bandCount].Columns[colCount].Key.ToUpper())));
// 20120911, Aaron, Group By Box
} ((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.GroupByBox.ResetPrompt();
TmpString = ((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.GroupByBox.Prompt;
TmpString = rm.GetString(TmpString.ToUpper());
if (!string.IsNullOrEmpty(TmpString))
{
((Infragistics.Win.UltraWinGrid.UltraGrid)objControl).DisplayLayout.GroupByBox.Prompt = TmpString;
}
}
TmpString = "";
}
return default(string);
}
public string ChgTranslateName_Content(string ErrorName)
{
string ChgTranslateName_ContentRet = default(string);
// 1.Check LanguageMode
string strMsgFile, strGenFile;
if (string.IsNullOrEmpty(modWIN.gLanguageMode))
{
strMsgFile = "msg_name" + "en";
strGenFile = "mesresource" + "en";
}
else
{
strMsgFile = "msg_name." + modWIN.gLanguageMode;
strGenFile = "mesresource." + modWIN.gLanguageMode;
}
// 2.Get File Path
string strResourcePath = AppDomain.CurrentDomain.BaseDirectory + "Resources";
// 檢查檔案是否存在
if (string.IsNullOrEmpty(FileSystem.Dir(strResourcePath + @"\" + strMsgFile + ".resources"))) // File not exist
{
ChgTranslateName_ContentRet = ErrorName;
return ChgTranslateName_ContentRet;
}
if (string.IsNullOrEmpty(FileSystem.Dir(strResourcePath + @"\" + strGenFile + ".resources"))) // File not exist
{
ChgTranslateName_ContentRet = ErrorName;
return ChgTranslateName_ContentRet;
}
// 4.Replace原始訊息.
string strErrName_Rep = "";
if (Strings.InStr(ErrorName, "[%", CompareMethod.Text) > 0)
{
// Replace[%%]
var rmGen = System.Resources.ResourceManager.CreateFileBasedResourceManager(strGenFile, strResourcePath, null);
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 = rmGen.GetString(strKey.ToUpper());
}
catch (Exception ex)
{
strKeyValue = strKey;
}
if (string.IsNullOrEmpty(strKeyValue))
{
strErrName_Rep += strKey;
}
else
{
strErrName_Rep += strKeyValue;
}
// 下次截取字串的起始位置
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 = rmGen.GetString(strKey.ToUpper());
}
catch (Exception ex)
{
strKeyValue = strKey;
}
if (string.IsNullOrEmpty(strKeyValue))
{
strErrName_Rep += strKey;
}
else
{
strErrName_Rep += strKeyValue;
}
// 下次截取字串的起始位置
intStart = k + 2;
}
}
}
}
rmGen = null;
}
// 5.Final Message.
string strFinalMsg;
// 原始訊息
if (string.IsNullOrEmpty(strErrName_Rep))
{
strFinalMsg = ErrorName;
}
else
{
strFinalMsg = strErrName_Rep;
}
ChgTranslateName_ContentRet = strFinalMsg;
return ChgTranslateName_ContentRet;
}
~clsAutoRunLibrary()
{
if (objSetting != null)
objSetting = null;
}
/// <summary>
/// 向資料庫取得使用TipTop時的ERP整合設定資訊。
/// </summary>
/// <returns></returns>
/// <remarks></remarks>
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);
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("[%ERPWSURL%] not found!");
}
}
else
{
throw new Exception("[%ERPWSURL%] not found!");
}
}
catch (Exception ex)
{
throw;
}
}
/// <summary>
/// 取得ERP整合的設定資料
/// </summary>
/// <param name="ERPName"></param>
/// <param name="pTable"></param>
/// <returns></returns>
private bool GetERPSetting(ref DataTable pTable, string pERPName = defString, int pEAIType = 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);
}
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("[%GetERPSetting%] not found!");
}
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("[%GetERPSetting%] not found!");
}
}
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 = "<host prod=\"" + drERPSetting[0]["MESProductName"].ToString() + "\" ver=\"" + drERPSetting[0]["MESProductVer"].ToString() + "\" ip=\"" + drERPSetting[0]["MESIP"].ToString() + "\" id=\"" + drERPSetting[0]["MESID"].ToString() + "\" acct=\"" + drERPSetting[0]["ERP_USER"].ToString() + "\" lang=\"" + drERPSetting[0]["ERP_LANG"].ToString() + "\" timestamp=\"" + Strings.Format(DateTime.Now, "yyyyMMddHHmmssfff") + "\"/>";
RequestHead += "<service prod=\"" + drERPSetting[0]["CalledProductName"].ToString() + "\" name=\"" + pServiceName + "\" ip=\"" + drERPSetting[0]["CalledIP"].ToString() + "\" id=\"" + drERPSetting[0]["CalledID"].ToString() + "\"/>";
string RequestDataKey = "<datakey><key name=\"EntId\">" + drERPSetting[0]["ERP_ENTID"].ToString() + "</key><key name=\"CompanyId\">" + drERPSetting[0]["ERP_ORG"].ToString() + "</key></datakey>";
string RequestXML_Body = Conversions.ToString((SCI_Object as iMESCIO.SCI.ERP.ERPResponseBase).ParseXml());
pRequestKey = modAutoRunLibrary.GetRequestKey(RequestHead);
string RequestHeader = "<request key=\"" + pRequestKey + "\" type=\"sync\">" + RequestHead + RequestDataKey + "<payload>" + RequestXML_Body + "</payload></request>";
// CDO to XML
CombineRequestXMLbyCDORet = RequestHeader;
}
catch (Exception ex)
{
throw;
}
}
while (false);
return CombineRequestXMLbyCDORet;
}
/// <summary>
/// EAI 檢核編碼(MD5)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
// 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
#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
}
}