Javascript与SAP GUI界面的集成

    技术2022-05-20  83

    1. 先决条件:

    在本机上安装SAP GUI, 最好选择同时选择with RFC SDK。确保WINDOW/SYSTEM32下出现必要的dll。

     

    2. Javascript代码实例(在ECC6下测试有效):

    注:如果直接存成本地HTML文件会无法运行哦,直接放BSP里面吧。

     

    <script language="JavaScript"> retcd = 0; exceptions = 0; // *** SAPLogon() creates an object that has the methods to //        execute call to an SAP function module function SAPlogon() {     alert("ok");fns         = new ActiveXObject("SAP.Functions"); trans       = fns.Transactions; conn        = fns.connection;   /* get new connection object */ conn.ApplicationServer = your server;conn.SystemNumber = "00";conn.System     = "DEV";   /* Set the system ID (see: SY-SYSID) */ conn.user       = username;          /* set userid (blank for dialog) */ conn.password         = password;   /* set password (blank for dialog) */ conn.Client       = "200";     /* set password (blank for dialog) */ conn.Language         = "ZH"; /* set language (blank for default) */ conn.tracelevel    = 6;    /* set password (blank for dialog) */ conn.RFCWithDialog = 1;    /* true: opens visible session window */ exceptions = 0; conn.logon(0, 0);     /* *** this call creates the object *** */ SAPcallTransaction();SAPlogoff();}; function SAPlogoff() {

      conn.logoff(0, 0);   exceptions = 0; }; // *** execute the SAP function MODULE "RFC_CALL_TRANSACTION_USING" //      as method execution of object type SAP.functions function SAPcallTransaction() {  exceptions            = 0;   callta                  = fns.add("RFC_CALL_TRANSACTION_USING");   callta.exports("TCODE") = "SE38";   callta.exports("MODE")  = "E";   retcd                   = callta.call;   conn.logoff();                    alert(retcd);   SAPcallTransaction      = retcd; }; </script> <body> <!—Create an HTML button with JavaScript call attached –> <input TYPE="button"  VALUE="Call ABAP Editor"  OnClick "SAPlogon();" > </body> 

     

     

    3.  单点登录

    在第2步完成后,测试的时候出弹出SAP GUI登录的对话框。

    要实现想portal那样的singlesignon功能,必须要提供ECC的SSO ticket。每个instance是不一样的。

    增加以下参数,并可以去掉conn.password

    conn.ticket = "MIIC/DCCArsCByARBBMBNkcwCQYHKoZIzjgEAzBkMQswCQYDVQQGEwJERTEcMBoG" +"A1UEChMTU0FQIFRydXN0IENvbW11bml0eTETMBEGA1UECxMKU0FQIFdlYiBBUzEU" +"MBIGA1UECxMLSTAwMjA2MzcxOTIxDDAKBgNVBAMTA0VHUTAeFw0xMTA0MTMwMTM2" +"NDdaFw0zODAxMDEwMDAwMDFaMGQxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNTQVAg" +"VHJ1c3QgQ29tbXVuaXR5MRMwEQYDVQQLEwpTQVAgV2ViIEFTMRQwEgYDVQQLEwtJ" +"MDAyMDYzNzE5MjEMMAoGA1UEAxMDRUdRMIIBtzCCASwGByqGSM44BAEwggEfAoGB" +"AP/UzX5lnXRk6QbS7CEboUI0WKQcS9sAK2J88kCkNYOBfCI34pV1VttrG+dcEIQ1" +"nnbC6MKF3feWDQ7ayRWBSWwZNgez+bE/2R789TInAxEAGVJCZkhPmFvsvnxj6XsZ" +"OJXJeiKMtxOmEHAo5jcKHJfiKCUiKyxW1VcfQjJldliJAhUA3y6wdWacew2pbOuh" +"GVBkS5IKCTkCgYEAqOa2FowF8FZd74L09/Y6DEMAysJSKp0SFjXALOjVAGJ9Nd0M" +"wwbC2RLaRXgLlMkLutfVxOT/w0u8IWZoBpXEscppq/zlRdt3ogHfcJ6rduUVOzTX" +"DRhKIWWfZpR9K0RbANgAClRXqTzCGvdE40Sk06aq3TcJzmy0BNab8sMqiC4DgYQA" +"AoGAAIYIVVFPz0NONR6FVuEptmMm8a/JngQCVMFbmUxTG2eXuAW7jXfXCfS7sZXU" +"XC8NeVzWAzWGaK7IbQObtQkAwdscEoU9QUcFwk/PMpbYCyGNSM9hq5o9+i46kyNG" +"14rdo+Wxi/Un2h/IHS5BQR4uTaS06/TDkmF2ZzYzZ8NiIMwwCQYHKoZIzjgEAwMw" +"ADAtAhUAz00pAVQOPp90yn9fr5ZIygOUdKcCFDeDnZZGdRJXzpbKflJLxBCSmrDx";

    当然,需要保证javascript运行时能够得到当前用户的SAP用户名。

    测试,是不是很爽啊!

     

    4. 参数的传递

    其实上述的方法,是用来使用SAP的RFC的, 只不过RFC_CALL_TRANSACTION_USING这个RFC本身具有调用TCODE的功能。

      callta.exports("TCODE") = "SE38";   callta.exports("MODE")  = "E"; 是RFC的传入参数,传出参数应该为 callta.imports,表参数是callta.tables。

     

    未完待续。。。


    最新回复(0)