ขั้นตอนการสร้าง
1. เปิด Project WebService
2. สร้าง Class สำหรับงานประมวลผล 1 Class ในโฟลเดอร์ Processing ตัวอย่างเช่น
public class DpCloseDayProgress : MainProgress, Running
ตัวอย่างนี้ใช้ Class ชื่อ DpCloseDayProgress(กรุณาเปิดดูไฟล์นี้ประกอบด้วย) โดยต้อง Inherit Class MainProgress และ Interface Runningจากนั้นทำการ Implement Interface Running จะได้ method Disconnect() GetProgress() และ Run()
3. ประกาศตัวแปร Instance ที่จำเป็นต้องใช้คือ
private n_cst_deposit_service svDep;
private n_cst_dbconnectservice svCon;
private n_cst_progresscontrol svProgress;
private bool isError = false;
* ตัวแปร svDep คือเซอร์วิสเงินฝากสำหรับประมวลผลปิดสิ้นวัน นอกนั้นต้องประกาศให้เหมือนกันทุกระบบ
4. สร้าง Constructor โดยรับ argument ตัวแรกคือ wsPass และตัวถัดไปคือ argument ที่จำเป็นสำหรับส่งให้ pbservice ใช้งาน
//Argument
private DateTime closeDate;
private DateTime workDate;
private String appName;
private String branchId;
private String entryId;
private String machine;
//Constructor
public DpCloseDayProgress(String connectionString, DateTime closeDate, DateTime workDate,
String appName, String branchId, String entryId, String machine) { }
ภายใน Constructor จะเป็นการกำหนดค่าให้ตัวแปร Instance และประกาศตัวแปรจาก pbservice และจะต้องจบท้ายด้วยคำสั่ง SetRunning(this); เพื่อเป็นการระบุให้ class แม่รู้ว่าทำงานแบบ thread
5. สร้าง Destructor และเขียนคำสั่งใน method DisConnect() เพื่อทำการตัดการเชื่อมต่อ Database ในกรณีเกิดข้อผิดผลาด Destructor จะช่วยตัดการเชื่อมต่อโดยอัตโนมัติ
ภายใน Constructor จะเป็นการกำหนดค่าให้ตัวแปร Instance และประกาศตัวแปรจาก pbservice และจะต้องจบท้ายด้วยคำสั่ง SetRunning(this); เพื่อเป็นการระบุให้ class แม่รู้ว่าทำงานแบบ thread
5. สร้าง Destructor และเขียนคำสั่งใน method DisConnect() เพื่อทำการตัดการเชื่อมต่อ Database ในกรณีเกิดข้อผิดผลาด Destructor จะช่วยตัดการเชื่อมต่อโดยอัตโนมัติ
//Destructor
~DpCloseDayProgress() {
DisConnect();
}
//Method Disconnect()
public void DisConnect() {
try {
svCon.of_disconnectdb();
} catch { }
}
6. ใน method Run() จะเป็นการเรียก PB Service (ในตัวอย่างนี้สร้าง method RunningThread() แยกไว้เพื่อไปเรียก PB Service อีกต่อหนึ่ง) หากเกิด Exception ทำการตั้งค่าเองเพราะ pbservice อาจไม่สามารถตั้งค่าเองขณะเกิด exception ได้
public void Run() {
if (thread != null) {
try {
RunningThread();
DisConnect();
} catch (Exception ex) {
DisConnect();
isError = true;
svDep.of_set_progresscontrol(ref svProgress);
progress = svProgress.of_get_progress();
progress.status = -1;
progress.progress_text = ex.Message;
}
}
}
7. ใน Method GetProgress() เป็นการ return ค่าไปให้ฝั่ง UI เพื่อไปดูสถานะ และความคืบหน้าต่างๆ โดยในโคดมีการเช็คว่าหากเกิด error หรือ Exception ให้นำสถานะจากการดัก Exception ไปใช้ แต่ถ้าไม่ error ก็นำสถานะจาก pbservice ไปใช้
public str_progress GetProgress() {
if (isError) {
return progress;
} else {
svDep.of_set_progresscontrol(ref svProgress);
return svProgress.of_get_progress();
}
}
*** จบส่วนการสร้าง Class เพื่อรองรับการประมวลผล ***
8. สร้าง [WebMethod] ของ WebService เพื่อเรียกใช้การประมวลผล
- ประกาศตัวแปร(dp) object สำหรับประมวลผล โดยส่ง argument ที่ constructor ด้วย
- ใช้คำสั่ง Processing.Progressing.Add() โดย Add() มี argument เรียงตามนี้
Add(Running running, String application, String w_sheet_id, bool isRemoveBefore)
- object สำหรับประมวลผล
- ชื่อระบบ
- ชื่อหน้าจอ
- กรณีหากมีการประมวลผลอยู่ให้หยุดประมวลผลเดิมอัตโนมัติ และทำการประมวลใหม่ โดยค่าที่ return ออกมาจะเป็นลำดับที่การประมวลผลปัจจุบัน
[WebMethod]
public int RunCloseDayProcess(String wsPass, String w_sheet_id, DateTime closeDate, DateTime workDate, String appName, String branchId, String entryId, String machine) {
DpCloseDayProgress dp = new DpCloseDayProgress(wsPass, closeDate, workDate, appName, branchId, entryId, machine);
int ii = Processing.Progressing.Add(dp, appName, w_sheet_id, true);
return ii;
}
*** จบส่วน WebService การประมวลผล ***
9. หน้าจอ UI สร้างการเรียกใช้งานปิดสิ้นวัน w_dlg_dp_dayproc_wizard_new.aspx
- สร้าง <asp:HiddenField ID="HdCloseday" runat="server" /> เพื่อเอาไว้เช็คว่าหลัง postback แล้วให้เปิด Iframe ดูสถานะหรือไม่
- สร้างฟังก์ชั่น JavaScript SheetLoadComplete() ทำการเช็คค่า HdCloseDay หากเป็น "true" ให้ใช้คำสั่ง
Gcoop.OpenProgressBar() โดยมี argument ดังนี้
Gcoop.OpenProgressBar(progressName, warnning, showCloseButton, extraFunction, extraWinId)
- progressName:String – ชื่อประมวลผลสำหรับ Display บนหน้า Iframe
- warnning:bool - ให้แสดงข้อความเตือนห้ามปิดหน้าจอหรือไม่
- showCloseButton:bool – ให้โชว์ปุ่มปิด Iframe ระหว่างประมวลผลหรือไม่
- extraFunction:object – หากกดปุ่มปิดแล้วให้ไปเรียกใช้ฟังก์ชั่นของ w_sheet โดยหากไม่ใส่ argument นี้หรือส่งค่า null ไปจะเป็นการปิด IFrame ธรรมดา
- extraWinId:String – ส่งค่าพิเศษกรณีหน้าจอ 1 หน้ามีการประมวลผลมากกว่า 1 หากไม่มีไม่ต้องใส่ argument หรือใส่ค่า null
function SheetLoadComplete(){
if(Gcoop.GetEl("HdCloseday").value == "true"){
Gcoop.OpenProgressBar("ประมวลผลปิดสิ้นวัน", true, false, CloseDayFinish);
}
}
- หน้า Code Behind ที่ method WebSheetLoadBegin() ตั้งค่า HdCloseday.Value = "false";
public void WebSheetLoadBegin() {
HdCloseday.Value = "false";
//................................................
}
- ที่ method CheckJsPostBack(eventArg) หากมีการ postback จะไปเรียก JsPostCloseDay() เมื่อเรียกใช้ WebService การประมวลผล ให้ตั้งค่า HdCloseday.Value = "true";
private void JsPostCloseDay() {
//......................................
try {
depService.RunCloseDayProcess(state.SsWsPass, state.CurrentPage, closeDate, state.SsWorkDate, state.SsApplication, state.SsBranchId, state.SsUsername, state.SsClientComputerName);
HdCloseday.Value = "true";
} catch (Exception ex) {
LtServerMessage.Text = WebUtil.ErrorMessage(ex);
}
}
0 ความคิดเห็น:
แสดงความคิดเห็น