作者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/cn.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