712 lines
28 KiB
C#
712 lines
28 KiB
C#
|
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;
|
|||
|
|
|||
|
namespace AutoRunLib_C
|
|||
|
{
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 叫用Web Service, 並回傳Response XML
|
|||
|
/// </summary>
|
|||
|
/// <param name="Method">要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis</param>
|
|||
|
/// <param name="InXml">InXml</param>
|
|||
|
/// <param name="Customize">是否客製的WebService</param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <remarks>
|
|||
|
/// 2019/08/22 OwenLiu, Mantis:0061402, 修正WS加上CI/CO執行時間紀錄 運作邏輯後AutoRun Servive呼叫WS失敗的問題
|
|||
|
/// </remarks>
|
|||
|
public static string InvokeSrv(string Method, string InXml, bool Customize = false, int TimeOut = defInteger, bool LogOn = false)
|
|||
|
{
|
|||
|
|
|||
|
object result;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
using (var ws = new 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);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 叫用Web Service, 回傳Response XML
|
|||
|
/// </summary>
|
|||
|
/// <param name="Method">要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis</param>
|
|||
|
/// <param name="InXml">InXml</param>
|
|||
|
/// <param name="buffer">用來取回byte資料或傳入byte資料</param>
|
|||
|
/// <param name="Customize">是否客製的WebService</param>
|
|||
|
/// <remarks>
|
|||
|
/// 2019/08/22 OwenLiu, Mantis:0061402, 修正WS加上CI/CO執行時間紀錄 運作邏輯後AutoRun Servive呼叫WS失敗的問題
|
|||
|
/// </remarks>
|
|||
|
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 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);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 叫用Web Service, 並回傳Response XML
|
|||
|
/// </summary>
|
|||
|
/// <param name="Method">要呼叫哪一個WebService的方法, ex: wsWIP.LoadLotBasis</param>
|
|||
|
/// <param name="InXml">InXml</param>
|
|||
|
/// <param name="pDataSet">接收結果的DataSet</param>
|
|||
|
/// <param name="Customize">是否客製的WebService</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string InvokeSrv(string Method, string InXml, ref DataSet pDataSet, bool Customize = false)
|
|||
|
{
|
|||
|
|
|||
|
object result;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
using (var ws = new 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 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
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// EAI 檢核編碼(MD5)
|
|||
|
/// </summary>
|
|||
|
/// <param name="input"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 紀錄Transaction
|
|||
|
/// </summary>
|
|||
|
/// <param name="InXml"></param>
|
|||
|
/// <param name="OutXml"></param>
|
|||
|
/// <param name="ModuleID"></param>
|
|||
|
/// <param name="FunctionID"></param>
|
|||
|
/// <param name="Result"></param>
|
|||
|
/// <param name="KeyValue"></param>
|
|||
|
/// <returns></returns>
|
|||
|
/// <remarks></remarks>
|
|||
|
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 wsERP_MES.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;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 紀錄Transaction
|
|||
|
/// </summary>
|
|||
|
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 wsERP_MES.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<ArrayList> 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<ArrayList> Exception = null, string Result = null, List<ArrayList> Message = null)
|
|||
|
{
|
|||
|
string CombineXMLResponseRet = default(string);
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
// <response>
|
|||
|
CombineXMLResponseRet = "<response>";
|
|||
|
|
|||
|
// <identity>
|
|||
|
if (string.IsNullOrEmpty(Identity))
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<identity></identity>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<identity>";
|
|||
|
CombineXMLResponseRet += Identity;
|
|||
|
CombineXMLResponseRet += "</identity>";
|
|||
|
}
|
|||
|
|
|||
|
// <returnvalue>
|
|||
|
if (string.IsNullOrEmpty(ReturnValue))
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<returnvalue></returnvalue>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<returnvalue>";
|
|||
|
CombineXMLResponseRet += ReturnValue;
|
|||
|
CombineXMLResponseRet += "</returnvalue>";
|
|||
|
}
|
|||
|
|
|||
|
// <result>
|
|||
|
if (string.IsNullOrEmpty(Result))
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<result></result>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<result>" + Result + "</result>";
|
|||
|
}
|
|||
|
|
|||
|
// <exception>
|
|||
|
string strExceptionSysmsg = string.Empty;
|
|||
|
string strExceptionMesmsg = string.Empty;
|
|||
|
string strExceptionStack = string.Empty;
|
|||
|
|
|||
|
if (Exception.Count == 0)
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<exception></exception>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// 2016-12-01, Joe, Exception轉語系
|
|||
|
ChgTranslateException(ref Exception, ref strExceptionSysmsg, ref strExceptionMesmsg, ref strExceptionStack);
|
|||
|
|
|||
|
CombineXMLResponseRet += "<exception>";
|
|||
|
CombineXMLResponseRet += "<code></code>";
|
|||
|
if (string.IsNullOrEmpty(strExceptionSysmsg) == true)
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<sysmsg></sysmsg>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<sysmsg>" + strExceptionSysmsg + '\n' + "</sysmsg>" + '\n';
|
|||
|
}
|
|||
|
if (string.IsNullOrEmpty(strExceptionMesmsg) == true)
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<mesmsg>" + strExceptionMesmsg + "</mesmsg>" + '\n';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<mesmsg>" + strExceptionMesmsg + "</mesmsg>" + '\n';
|
|||
|
}
|
|||
|
if (string.IsNullOrEmpty(strExceptionStack))
|
|||
|
{
|
|||
|
CombineXMLResponseRet += "<stack></stack>";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// CombineXMLResponse += Chr(9) & Chr(9) & "<stack>" & Chr(10) & strExceptionStack & Chr(10) & Chr(9) & Chr(9) & "</stack>" & Chr(10)
|
|||
|
CombineXMLResponseRet += "<stack></stack>";
|
|||
|
}
|
|||
|
CombineXMLResponseRet += '\t' + "</exception>" + '\n';
|
|||
|
}
|
|||
|
|
|||
|
// <message>
|
|||
|
string strMmsg = string.Empty;
|
|||
|
|
|||
|
if (Message.Count == 0)
|
|||
|
{
|
|||
|
CombineXMLResponseRet += '\t' + "<message></message>" + '\n';
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CombineXMLResponseRet += '\t' + "<message>" + '\n';
|
|||
|
// 2016-12-01, Joe, Message轉語系
|
|||
|
// Call ChgTranslateMessage(Message, strMmsg)
|
|||
|
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<mcode></mcode>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<mtype></mtype>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<mmsg>" + strMmsg + "</mmsg>" + '\n';
|
|||
|
CombineXMLResponseRet += '\t' + "</message>" + '\n';
|
|||
|
}
|
|||
|
|
|||
|
CombineXMLResponseRet += "</response>" + '\n';
|
|||
|
}
|
|||
|
|
|||
|
catch (Exception e1)
|
|||
|
{
|
|||
|
// 發生錯誤時丟回本身的Function Name及系統錯誤訊息
|
|||
|
// Throw 'New Exception("modWS.CombineXMLResponse: " & e1.Message)
|
|||
|
CombineXMLResponseRet = "<response>" + '\n';
|
|||
|
CombineXMLResponseRet += '\t' + "<identity></identity>" + '\n';
|
|||
|
CombineXMLResponseRet += '\t' + "<exception>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<code></code>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<sysmsg>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + '\t' + e1.Message + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "</sysmsg>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<mesmsg>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + '\t' + "CombineXMLResponse;Fail" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "</mesmsg>" + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "<stack>" + '\n';
|
|||
|
CombineXMLResponseRet += e1.StackTrace + '\n';
|
|||
|
CombineXMLResponseRet += Conversions.ToString('\t') + '\t' + "</stack>" + '\n';
|
|||
|
CombineXMLResponseRet += '\t' + "</exception>" + '\n';
|
|||
|
CombineXMLResponseRet += '\t' + "<message></message>" + '\n';
|
|||
|
CombineXMLResponseRet += "</response>";
|
|||
|
}
|
|||
|
|
|||
|
return CombineXMLResponseRet;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public static bool combineException(ref List<ArrayList> 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", 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
|
|||
|
}
|
|||
|
}
|