目的: 新版VES: 解壓縮處理 – 2026/08/14
2026年8月13日 星期四
2026年8月4日 星期二
2026年7月28日 星期二
Blogger 的本篇連結範例 - 1>目錄連結 主題A介紹 2>目標Tag:
目的: 1>目錄連結 <a href="#Topic-A">主題A介紹</a> , 由目錄連結至實際內容
2>目標Tag: <a id="Topic-A"> </a> , 目錄的內容
2>目標Tag: <a id="Topic-A"> </a> , 目錄的內容
處理說明: 1>目錄連結 <a href="#Topic-A">主題A介紹</a>
--> 有時直接寫
href="#topic-A" 會被瀏覽器誤判為相對於網站根目錄的連結, 導致點擊後直接跳轉回網誌首頁或分類頁面。
--> 改成永久的連結網址 #Topic-A
https://smallsun123.blogspot.com/2026/07/html-scroll-behavior-smooth-b-a.html#Topic-A
連結時,會連至永久網址#Topic-A目標
2>目標Tag: <a id="Topic-A"> </a> , 目錄的內容
文章目錄
一、主題 A 介紹
這裡是主題 A 的詳細內容...
二、主題 B 介紹
這裡是主題 B 的詳細內容...
▲ 回到文章頂端連結說明: 使用永久網址#目標
VPN, proxy, FIREWALL 的功用
VPN, PROXY, FIREWALL 的功用
PS: firewall 的設定範例 - Windows PowerShell
一、三者在網路中的位置
Internet(網際網路) │ ┌──────────────┼──────────────┐ │ │ │ 各種網站 雲端服務 郵件伺服器 ▲ │ Proxy Server ▲ │ Firewall ▲ │ VPN Tunnel (加密通道) ▲ │ 你的電腦/手機
二、各自的工作
① Firewall(防火牆)— 門衛
工作內容:
- 檢查每個封包
- 決定允許或拒絕
- 阻擋駭客攻擊
- 控制哪些程式可以連網
例如:
外部封包 │ ▼ Firewall ┌─────────┐ │允許 ✔ │ │拒絕 ✖ │ └─────────┘
就像公司大樓警衛:
「沒有證件,不准進。」
② Proxy Server(代理伺服器)— 代辦人
它不讓你直接跟網站接觸。
你 │ ▼ Proxy │ ▼ Google
Google 看到的是:
Proxy 的 IP
而不是你的 IP。
Proxy 可以:
- 隱藏 IP
- 快取資料
- 過濾網站
- 記錄上網行為
③ VPN(虛擬私人網路)— 加密隧道
VPN 不只是代理,而是把整條連線加密。
你 │ │ 加密 ▼ ═══════════════ VPN Tunnel ═══════════════ │ ▼ VPN Server │ ▼ Internet
即使有人攔截封包,也只能看到加密後的內容。
三、生活中的比喻
假設你要寄一封信。
沒有任何保護
你 ─────────► 公司
任何人都可能看到:
- 寄件人
- 收件人
- 信件內容(如果沒有加密)
使用 Firewall
你 │ 警衛 │ 公司
警衛只負責:
「檢查能不能出去。」
不會替你寄信。
使用 Proxy
你 │ 朋友代寄 │ 公司
公司只知道:
是朋友寄來的。
不知道真正寄件人。
四、三者比較
| 功能 | Firewall | Proxy | VPN |
|---|---|---|---|
| 阻擋攻擊 | ✅ | ❌ | ❌ |
| 隱藏 IP | ❌ | ✅ | ✅ |
| 加密資料 | ❌ | 通常沒有 | ✅ |
| 提高隱私 | 少 | 中 | 高 |
| 控制網站 | ✅ | ✅ | ❌(主要功能不是過濾) |
| 全系統保護 | ✅ | 通常只有特定程式 | ✅ |
五、在公司網路中的實際架構
很多企業會同時使用這三種技術:
員工電腦 │ ▼ Firewall (阻擋攻擊) │ ▼ Proxy (網站過濾、快取、記錄) │ ▼ Internet
如果員工在家工作,通常還會加入 VPN:
家中電腦 │ ▼ VPN(加密) ══════════════════════ │ 公司 VPN Server │ Firewall │ Proxy │ Internet
這樣即使在外面使用公共 Wi-Fi,也能安全地連回公司內部網路。
一句話總結:
- Firewall:決定「能不能通過」。
- Proxy:代替你「去連線」。
- VPN:建立一條「安全且加密的專用通道」。
三者各有不同角色,也常常一起使用,形成完整的企業網路安全架構。
PS : firewall 的設定範例 - Windows PowerShell
========================
PS:Firewall 設定範例 - Windows PowerShell
New-NetFirewallRule ...
========================
WIN_AMM_V502- 需求物料自動上載 - FTP Server 於Local執行正常,但於排程主機執行 , 有問題 - 194.1.6.80
目的: WIN_AMM_V502- 需求物料自動上載
- FTP Server 於Local執行正常,但於排程主機執行 , 有問題 - FTP IP:194.1.6.80
- FTP Server 於Local執行正常,但於排程主機執行 , 有問題 - FTP IP:194.1.6.80
處理說明: 1>同一支程式, 於不同的電腦執行結果不同
--> 因不同電腦的設定不同
--> Ex1: 日期格式設定不同
我的電腦日期格式: YYYY/MM/DD
主機電腦日期格式: YYYY/MM/DD 上午/下午 HH:MM
--> insert AMM_CHKCHG_ASN
(INS_DT,..)
VALUES
('YYYY/MM/DD 上午 HH:MM',.. );
--> SQL 會 Error
--> Ex2: proxy 設定不同 , FTP Server 主機的IP: 194.1.6.80
我的電腦. 194.1.6.80 列為內網,不會透過 proxy
主機的電腦. 194.1.6.80 列為外網,會透過 proxy , FTP 連線會失敗,不會成功
--> Ex3: 將排程程式的主機,更換 IP 由 194.1.6.251 改到 194.1.6.249
導致 FTP 執行失敗
主機1: 192.1.6.251 將 192.1.6.80 視為內網, FTP連線 OK
主機2: 192.1.6.249 將 192.1.6.80 視為外網,必需透過 proxy,FTP連線 失敗,
--> 因 proxy主機認證失敗(沒有AIDC_ID/PASS)
2026年7月22日 星期三
V1060304 – 定更定檢拆挪管制 – Grid 只允許挑選一筆資料(不可多選)
目的: V1060304 – 定更定檢拆挪管制 – Grid 只允許挑選一筆資料(不可多選)
處理說明: 1>
var sub_Grid1 = Ext.create('TMGrid', {
grid_id: 'sub_Grid1',
:
grid_id: 'sub_Grid1',
:
selModel: {
selType: 'rowmodel', // 預設就是 rowmodel
mode: 'SINGLE' // 關鍵:只允許單選
},
}); // end of sub_Grid1
selType: 'rowmodel', // 預設就是 rowmodel
mode: 'SINGLE' // 關鍵:只允許單選
},
}); // end of sub_Grid1
1>*.js
var sub_Grid1 = Ext.create('TMGrid', {
grid_id: 'sub_Grid1',
columns: sub_Columns1,
//autoScroll: true,
flex: 1,
store: Ext.create('gridstore', { model: sub_model1 }),
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', { // 不會出現[Update][Cancel]鈕, 直接編輯
clicksToEdit: 1, // 按一下進行編輯,預設為按兩下
clicksToMoveEditor: 1, //在編輯模式下切換編輯另一行的行為
grid_id: 'sub_Grid1',
columns: sub_Columns1,
//autoScroll: true,
flex: 1,
store: Ext.create('gridstore', { model: sub_model1 }),
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', { // 不會出現[Update][Cancel]鈕, 直接編輯
clicksToEdit: 1, // 按一下進行編輯,預設為按兩下
clicksToMoveEditor: 1, //在編輯模式下切換編輯另一行的行為
//1表示點選一就切換; 2表示點2下才切換。
})],
selModel: {
selType: 'rowmodel', // 預設就是 rowmodel
mode: 'SINGLE' // 關鍵:只允許單選
},
}); // end of sub_Grid1
})],
selModel: {
selType: 'rowmodel', // 預設就是 rowmodel
mode: 'SINGLE' // 關鍵:只允許單選
},
}); // end of sub_Grid1
2026年7月21日 星期二
V1060302 - change event - blur event - 檢核管制 - 輸入資料是否已完成
目的: V1060302 - change event - blur event
– change event – 判斷是否有查詢資料 – 若有則顯示查詢資料,若無 à 則不顯示錯誤訊息
– blur event – 判斷是否有查詢資料 – 若有則顯示查詢資料,若無 à 則顯示錯誤訊息
處理說明: 1>change event
– change event – 判斷是否有查詢資料 – 若有則顯示查詢資料,若無 à 則不顯示錯誤訊息
– blur event – 判斷是否有查詢資料 – 若有則顯示查詢資料,若無 à 則顯示錯誤訊息
處理說明: 1>change event
– 判斷是否有對應資料 – 若有則顯示對應資料,若無 à 則不顯示錯誤訊息
2>blur event
– 判斷是否有對應資料 – 若有則顯示對應資料,若無 à 則顯示錯誤訊息
1>*.js
1>*.js
Ext.getCmp("ITEM").on('change', function (me, newValue, oldValue, eOpts) {
var Tmp_PROJID = Ext.getCmp("PROJID").getValue();
var Tmp_TYPE = Ext.getCmp("TYPE").getValue();
var Tmp_ITEM = Ext.getCmp("ITEM").getValue();
// change event , 不顯示 AMM_CHKCHG 不存在訊息
if ((!checkisnull(Tmp_PROJID)) && (!checkisnull(Tmp_TYPE)) && (!checkisnull(Tmp_ITEM))) {
Show_AMM_CHKCHG_Data(Tmp_PROJID, Tmp_TYPE, Tmp_ITEM,"false");
}
});
Ext.getCmp("ITEM").on('blur', function (me, eOpts) {
var Tmp_PROJID = Ext.getCmp("PROJID").getValue();
var Tmp_TYPE = Ext.getCmp("TYPE").getValue();
var Tmp_ITEM = Ext.getCmp("ITEM").getValue();
// blur 時,才顯示 AMM_CHKCHG 不存在訊息
if ((!checkisnull(Tmp_PROJID)) && (!checkisnull(Tmp_TYPE)) && (!checkisnull(Tmp_ITEM))) {
Show_AMM_CHKCHG_Data(Tmp_PROJID, Tmp_TYPE, Tmp_ITEM, "true");
}
});
2>*.cs
[HttpPost]
public dynamic get_AMM_CHKCHG()
{
//取得參數值
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
string Tmp_PROJID = nvc["PROJID"];
string Tmp_TYPE = nvc["TYPE"];
string Tmp_ITEM = nvc["ITEM"];
string Tmp_is_Show = nvc["is_Show"]; //true : 顯示訊息, false : 不顯示訊息
int Tmp_cnt;
string Tmp_RtnMsg = "";
string Tmp_Sql = "";
string Tmp_Str = "";
string n = funId + "_get_AMM_CHKCHG";
HttpCookie MyCookie;
DataTable Tmp_dt1 = new DataTable();
string Tmp_dt2JSON;
string Tmp_TMBASE1, Tmp_TMUNIT1, Tmp_TMBASE2, Tmp_TMUNIT2;
string Tmp_PTMUNIT1, Tmp_PTMUNIT2;
string Tmp_TMBASE1_, Tmp_TMUNIT1_, Tmp_TMBASE2_, Tmp_TMUNIT2_;
string Tmp_PTMUNIT1_, Tmp_PTMUNIT2_;
try
{
Tmp_Sql = " SELECT PROJID,TYPE,ITEM,"
+ " WUC,SITEM,CHKCHG_TEXT,CHKCHG_NM,CHKCHG_TM,PN,IS_MULTI,"
+ " TMBASE1,TMFEQ1,TMUNIT1,TMBASE2,TMFEQ2,TMUNIT2, "
+ " PTMVAL1,PTMUNIT1,PTMVAL2,PTMUNIT2,"
+ " HAS_FCHK,FCHK_VAL,ENG_LR,IS_SER"
+ " FROM AMM_CHKCHG "
+ " WHERE PROJID=" + myfunc.AA(Tmp_PROJID)
+ " AND TYPE=" + myfunc.AA(Tmp_TYPE)
+ " AND ITEM=" + myfunc.AA(Tmp_ITEM)
;
Tmp_dt1 = myfunc.SqlOpen(Tmp_dt1, Tmp_Sql);
Tmp_cnt = Tmp_dt1.Rows.Count;
//Tmp_Str = myfunc.SqlValue(Tmp_Sql);
if (Tmp_cnt==0)
{
//若要顯示訊息(blur event),則傳回錯誤訊息
if (Tmp_is_Show=="true")
Tmp_RtnMsg = "錯誤: 專案別(" + Tmp_PROJID + ")"
+"分類(" + Tmp_TYPE + ")"
+"ITEM(" + Tmp_ITEM + ")<br>"
+ "不存在[專案定更定檢資料檔(AMM_CHKCHG)]<br>"
+ "敬請檢核 !!<br>";
}
else
{
/* 傳回如下欄位值, 以 ; 分隔欄位值
* PROJID,TYPE,ITEM,
WUC,SITEM,CHKCHG_TEXT,CHKCHG_NM,CHKCHG_TM,PN,IS_MULTI,
TMBASE1,TMFEQ1,TMUNIT1,TMBASE2,TMFEQ2,TMUNIT2,
PTMVAL1,PTMUNIT1,PTMVAL2,PTMUNIT2,
HAS_FCHK,FCHK_VAL,ENG_LR
*/
Tmp_dt1.Columns.Add("TMBASE1_", typeof(object));
Tmp_dt1.Columns.Add("TMUNIT1_", typeof(object));
Tmp_dt1.Columns.Add("TMBASE2_", typeof(object));
Tmp_dt1.Columns.Add("TMUNIT2_", typeof(object));
Tmp_dt1.Columns.Add("PTMUNIT1_", typeof(object));
Tmp_dt1.Columns.Add("PTMUNIT2_", typeof(object));
for (var i = 0; i < Tmp_cnt; i++)
{
DataRow dr = Tmp_dt1.Rows[i];
Tmp_TMBASE1 = dr["TMBASE1"].ToString();
Tmp_Sql = " SELECT DESCPT "
+ " FROM KEYCODE "
+ " WHERE TBL_NAME = 'AMM_CHKCHG' "
+ " AND KEY_NAME = 'TMBASE1' "
+ " AND KEY_CODE=" + myfunc.AA(Tmp_TMBASE1);
Tmp_TMBASE1_ = Tmp_TMBASE1 + ":" + myfunc.SqlValue(Tmp_Sql);
//屆期單位1
Tmp_TMUNIT1 = dr["TMUNIT1"].ToString();
Tmp_Sql = " SELECT DESCPT "
+ " FROM KEYCODE "
+ " WHERE TBL_NAME = 'AMM_CHKCHG' "
訂閱:
文章 (Atom)