读取SAP数据, 从两方面来做
1) 做一个C# app 在服务器上\任务计划\每天读取. 必须在服务器上执行, 否则可能从SAP读的汉字是乱码.
2) 对于要实时读取的, 做成页面或web Service放OA上.
下面是页面实现的部分代码.
using System.Data.SqlClient; //连接SQL SERVER
using System.Data.OleDb; //把页面GridView的数据导出EXCEL中用到
using SAPFunctionsOCX; //以下三项安装SAP客户端后引用 using SAPLogonCtrl;
using SAPTableFactoryCtrl;
//页面上调用事件
protected void Button2_Click(object sender, EventArgs e) {
stdate = System.DateTime.Now; DataTable dt = this.GetGridData(); foreach (DataRow row in dt.Rows) {
tOrder = row[\生产订单\ if (string.IsNullOrEmpty(tOrder) == true) { break; } else {
ExecSQL(\重读订单(生产订单) VALUES ('\ } }
dt.Dispose();
GridView2.DataSource = GetDataSet(\重读订单 where 状态 is null\重读订单\
GridView2.DataBind();
int dgv = GridView2.Rows.Count;
if (dgv >= 1) {
System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(GETTBL));
s.SetApartmentState(System.Threading.ApartmentState.STA); s.Start(); s.Join();
GridView1.DataSource = GetDataSet(\重读订单\重读订单\ GridView1.DataBind();
endate = System.DateTime.Now;
int st_hours = stdate.Hour; int st_minute = stdate.Minute; int st_second = stdate.Second;
int en_hours = endate.Hour; int en_minute = endate.Minute; int en_second = endate.Second;
string timeConsume = Convert.ToString(en_hours - st_hours) + \时 \+ Convert.ToString(en_minute - st_minute) + \分 \秒\
ExecSQL(\重读订单 where 状态 is not null\
insertEvent(stdate.ToString(), endate.ToString(), timeConsume, \重读订单\recAufk); } else {
Response.Write(MessageBox(\请输入生产订单!\ }
}
protected void Button4_Click(object sender, EventArgs e) {
DataTable dt = this.GetGridData(); DataRow newRow = dt.NewRow(); newRow[0] = \
newRow[1] = null; dt.Rows.Add(newRow);
GridView1.DataSource = dt; GridView1.DataBind(); dt.Dispose(); }
protected DataTable GetGridData() {
DataTable dt1 = new DataTable(\
dt1.Columns.Add(\生产订单\ dt1.Columns.Add(\状态\
for (int i = 0; i < GridView1.Rows.Count; i++) {
GridViewRow gRow = GridView1.Rows[i]; DataRow newRow = dt1.NewRow();
newRow[0] = ((TextBox)gRow.FindControl(\ newRow[1] = ((TextBox)gRow.FindControl(\ dt1.Rows.Add(newRow); }
dt1.AcceptChanges(); return dt1; }
//连接SAP, 调用RFC
protected void GETTBL() {
SAPLogonCtrl.SAPLogonControlClass sapLogin SAPLogonCtrl.SAPLogonControlClass();
sapLogin.ApplicationServer = \ sapLogin.Client = \ sapLogin.Language = \ sapLogin.User = \ sapLogin.Password = \ sapLogin.SystemNumber = 00;
SAPLogonCtrl.Connection sapConn (SAPLogonCtrl.Connection)sapLogin.NewConnection();
if (sapConn.Logon(0, true)) //login successful {
SAPFunctionsOCX.SAPFunctionsClass func SAPFunctionsOCX.SAPFunctionsClass();
= new
=
= new
func.Connection = sapConn; SAPFunctionsOCX.IFunction
(SAPFunctionsOCX.IFunction)func.Add(\
ifunc =
GridView2.DataSource = GetDataSet(\* from 重读订单 where 状态 is null\重读订单\
GridView2.DataBind();
int dgv = GridView2.Rows.Count; recAufk = dgv; string T_aufnr; string o_aufnr;
if (dgv >= 1) {
for (int i = 0; i < dgv; i++) {
T_aufnr = GridView2.Rows[i].Cells[0].Text.ToString(); o_aufnr = T_aufnr;
if (T_aufnr.Length < 12) //补零 {
string str_zero = \
for (int j = 2; j <= 12 - T_aufnr.Length; j++) {
str_zero = str_zero + j.ToString();
str_zero = str_zero.Replace(j.ToString(), \ }
T_aufnr = str_zero + T_aufnr; }
SAPFunctionsOCX.IParameter zaufnr (SAPFunctionsOCX.IParameter)ifunc.get_Exports(\ zaufnr.Value = T_aufnr;
SAPFunctionsOCX.IParameter zstyle (SAPFunctionsOCX.IParameter)ifunc.get_Exports(\ zstyle.Value = \
ifunc.Call(); // SAPFunctionsOCX.IParameter =(SAPFunctionsOCX.IParameter)ifunc.get_Imports(\
= = NUMBER
相关推荐: