作者aeolus0829 (archer)
看板C_Sharp
標題[問題] 讓網頁顯示錯誤訊息
時間Wed Jun 15 09:42:02 2016
大家好~
我是弱弱的兼職程設
(本職是系統管理,會兼職是因為遇缺不補,只好硬著頭皮跳下來做... Q_Q)
我遇到的問題是,無法把後端的錯誤訊息顯示到前端 (術語是這樣講嗎?)
要講清楚得先畫一下架構
一等一電子簽核系統(簡稱UOF,c# 寫的) -- SAP RFC(Remote Function Call) - DB
RFC 是在 sap 中用 ABAP 撰寫
畫面是這樣
https://dl.dropboxusercontent.com/u/6828634/bpm_po_form.png
運用 UOF 系統做 收貨,流程如下:
1. 在 UOF 點選 [讀取採購單資料]
2. 呼叫 RFC ,到 DB 取得採購單相關資料
3. 回傳資料到前端
UOF 端的程式架構不太懂,應該是 master page 架構,元件是這樣子
1. UOF 內建的東西 (master page ?)
2. 客製程式 po_receipt_i,寫成使用者控制項 (有 .ascx 和 .ascx.cs)
我希望按下 [讀取採購單資料] 時,能夠顯示錯誤訊息在網頁上
(錯誤訊息:在 sap 內檢查採購單的各種狀況,並以 string 的方式透過 RFC 傳回)
現在的問題是,[訊息] 區塊埋的錯誤檢核,基本上是用 javascript 檢查
採購單號是否空白
採購單號是不是數字
這些都是在網頁 (前端) 就可以直接檢查
但我的需求必須先將資料從 網頁 取出,送到 sap 檢查,若有錯誤再回傳訊息到 網頁
我想作法應該是
在訊息區塊埋一段 c# 程式,按下 [讀取採購單資料] 時一併觸發,回傳資料也是用
c# 接 (現在還看不懂要埋在哪邊,不過這只能試看看了)
Q 要怎麼用 javascript 去取得錯誤訊息.. = =a
應該會有人問為什麼不找廠商吧?因為態度太差所以翻臉了 (攤手)
然後上面也要不到預算找別人接手
其實這問題不是非解不可,只是身為IT看到會手癢 ... 0rz
古早以前曾經用 php + javascript 辦到類似的事情,所以作法的部份稍微有點頭緒
但我想直接問應該可以少繞很多路 (另一方面是現在沒太多時間可繞)
我已經做好會被罵的準備了 U_U
罵完還請給個方向或關鍵字讓我排除問題,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.20.129.1
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1465954925.A.199.html
1F:→ pico2k: 要改SAP RFC讓它回傳你要的資料,所以... 06/15 10:00
RFC 段已經處理好了 :)
※ 編輯: aeolus0829 (211.20.129.1), 06/15/2016 10:07:08
2F:推 ian90911: 直接把訊息放到label.text呢 06/15 13:00
3F:推 ypsps: ajax? 06/15 15:35
4F:→ ypsps: 還是我誤會題意XD 06/15 15:36
你應該.. 沒誤會,但... 我只是問要怎麼丟參數和接訊息..
ajax 會搞死我 Q_Q
雖然我是有在 cs 檔開頭看到 jquery 3.0 啦... 0rz
※ 編輯: aeolus0829 (211.20.129.1), 06/15/2016 16:01:50
5F:→ ssccg: 你應該只是要把Server端的訊息放到轉出的html上吧? 06/15 17:23
6F:→ ssccg: 那應該是不需要javascript,就二樓那個就好 06/15 17:23
7F:→ ssccg: WebForm的作法就是把string值設給控制項,自然就會呈現出來 06/15 17:26
8F:→ ssccg: 不用在UI(aspx、ascx)埋程式,只是原本沒控制項的話要加 06/15 17:32
9F:→ aeolus0829: 我試試 06/16 10:56
真的可以!
原先是因為 po_reciept_i 有部份程式是引用 axl,但我找不到 axl 的程式碼在哪
axl.SapCon.PO_Receipt_get get = new axl.SapCon.PO_Receipt_get();
來回找了好幾次後,確定 PO_Receipt_get 是包在 axl.dll 裡,
所以看不懂為什麼 RFC 端明明有回傳訊息,但是網頁卻沒有顯示
後來用 ILSpy 反組譯 axl.dll 才發現...
axl.dll 裡根本沒有寫接收訊息的機制 (補個幹)
我把 axl.dll 看到的 class 及程式碼內容直接寫在 po_reciept_i.cs 裡面
然後補上訊息接收機制
this.ZMSG = logon.Retrun_String("ZMSG");
this.ZFLAG = logon.Retrun_String("ZFLAG");
再照二樓提醒的方式,直接把 RFC 回傳的訊息丟給 label 就可以了
string ZMSG = get.ZMSG;
string ZFLAG = get.ZFLAG;
if (ZFLAG == "E") warring.Text = ZMSG;
太開心了~ 這樣對 UOF 的架構又多了一些了解,以後能做的事就更多了
(但是我不能亂講) > <"
※ 編輯: aeolus0829 (211.20.129.1), 06/16/2016 14:30:31