1189 lines
48 KiB
C#
1189 lines
48 KiB
C#
|
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
|
|||
|
|
|||
|
}
|
|||
|
}
|