Download SAP Data Dengan RFC & C# WCF Web Service dan SQL Server Part2

Ok melanjutkan postingan saya Sebelumnya untuk membuat wcf web service dengan Visual Studio 2015. langsung saja buka Visual Studio-nya dan buat project baru


Setelah membuat project baru, selanjutnya kita tambahkan libarary RFC Connector kedalam project dengan cara klik kanan pada References->Add Reference


lalu pilih sapnco.dll dan sapnco_util.dll, untuk library nya bisa di download DISINI


kemudian kita tambahkan satu class baru kedalam project dengan nama rfc_Connector


dan didalam class rfc_Connector kita implement interface IDestinationConfiguration dan jangan lupa import name space SAP.Middleware.Connector 




lalu pada bagian RfcConfigParameters tambahkan source code berikut :



lalu kita tambahkan dataset baru kedalam project :




kemudian kita tambahkan table adapter didalam dataset, ikuti gambar berikut untuk menambah table adapter














Kemudian kita tambahkan satu class baru lagi kedalam project dengan nama GlobalData



tambahkan global.asax




Buka file IService1 dan tambah source code berikut :


Buka file Service1.svc dan implement interface yang sudah kita tambahkan pada Iservice1 dan tambahkan name space seperti pada gambar


setelah kita implement interface maka akan terbentuk sebuah method baru dengan nama Download_ZMARA




Berikut Source Code lengkap didalam Service1.svc

string message;
        string status;
        public string Download_ZMARA(string matnr)
        {
            try
            {
                IRfcFunction getDataSAP = GlobalData.rfcRepository.CreateFunction("ZDLMARA");
                getDataSAP.SetValue("P_MATNR", matnr);

                try
                {
                    getDataSAP.Invoke(GlobalData.rfcDestination);
                }
                catch (Exception ex)
                {

                    if (ex.Message.Contains("DATA_NOT_FOUND"))
                    {
                        status = "sukses";
                    }
                    else
                    {
                        status = "gagal";
                    }


                    message = "SAP ZDLMARA ";
                    message += ex.Message;
                    return message;
                }


                IRfcTable IT_MARA = getDataSAP.GetTable("IT_MARA");
                DataSet1 dsUniversal = new DataSet1();

                DataTable dtMARA = dsUniversal.Tables["ZMARA"];

                dtMARA = CreateDataTable(dtMARA, IT_MARA);

                SqlConnection con = GetSQLConn();
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                SqlTransaction transaction = con.BeginTransaction();

                SqlCommand command = new SqlCommand("SP_Update_ZMARA", con);
                command.Transaction = transaction;
                command.Parameters.Add(new SqlParameter("@tblZmara", SqlDbType.Structured));
                command.Parameters["@tblZmara"].Value = dtMARA;
                command.Parameters["@tblZmara"].TypeName = "zmaraType";

                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandTimeout = 600000;
                int result = command.ExecuteNonQuery();

                transaction.Commit();
                transaction.Dispose();
                IT_MARA.Clear();
                message = "Download data completed. ";
                message += "ZMARA :" + dtMARA.Rows.Count + " rows. ";
            }
            catch (Exception x)
            {
                return x.Message;
            }

            return message;
        }


        public string GetAppSetting(string key)
        {
            try
            {
                return ConfigurationManager.AppSettings[key];
            }
            catch (Exception)
            {
                return "";
            }
        }

        public SqlConnection GetSQLConn()
        {
            string ConnString = GetAppSetting("ConnString");
            SqlConnection koneksi = new SqlConnection(ConnString);
            return koneksi;
        }

        rfc_Connector konstruktor = new rfc_Connector();

        //function for register to SAP server
        public void Register()
        {

            if (RfcDestinationManager.IsDestinationConfigurationRegistered())
            {
                rfc_Connector konstruktor = new rfc_Connector();
                RfcDestinationManager.UnregisterDestinationConfiguration(konstruktor);
            }
            RfcDestinationManager.RegisterDestinationConfiguration(konstruktor);

        }

        public static DataTable CreateDataTable(DataTable dt, IRfcTable rfcTable)
        {
            foreach (IRfcStructure row in rfcTable)
            {
                DataRow newRow = dt.NewRow();
                for (int element = 0; element < rfcTable.ElementCount; element++)
                {
                    RfcElementMetadata metadata = rfcTable.GetElementMetadata(element);
                    var nrow = newRow[element];
                    var rrow = row.GetString(metadata.Name);
                    newRow[element] = row.GetString(metadata.Name);

                }
                dt.Rows.Add(newRow);
            }

            return dt;

        }

Configurasi web config






sampai disini web service sudah bisa kita jalankan dan coba download data sap, kita cek apakah data berhasil masuk ke database SQL Server atau tidak.


tambahan sedikit, jika menemukan error kurang lebih seperti gambar berikut :


cara mengatasinya adalah masuk ke regedit :
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\WebProjects
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\WebProjects

terus double klik Use64BitIISExpress lalu ruba nilai 0 jadi 1 kemudia restart visual studio dan IIS lalu jalankan kembali web service nya.


ok cukup sekian sharing kali ini semoga bermanfaat. :D, yang berminat project lengkapnya bisa tulis email dikolom komentar :D

Comments

  1. Halo mas Husnul, salam kenal.
    Terimakasih untuk tutorialnya yang sangat bermanfaat semoga jadi ladang pahala yang terus mengalir. Amin.

    Sy tertarik dan ingin belajar lebih dalam mengenai pengambilan data pada SAP melalui C#.
    Sy masih bingung mengenai parameter dibawah ini dan mungkin mas husnul mau menunjukan lokasi/letak parameter ini disisi SAP.

    Parameter :
    parms.Add(RfcConfigParameters.AppServerHost, ""); //Server IP
    parms.Add(RfcConfigParameters.SystemNumber, "10"); //System Number
    parms.Add(RfcConfigParameters.User, ""); //User ID
    parms.Add(RfcConfigParameters.Password, ""); //Password
    parms.Add(RfcConfigParameters.SAPRouter, ""); if use saprouter
    parms.Add(RfcConfigParameters.Client, "110"); //Client
    parms.Add(RfcConfigParameters.Language, "EN");
    parms.Add(RfcConfigParameters.Name, "SE37");
    parms.Add(RfcConfigParameters.ConnectionIDleTimeout, "600");
    parms.Add(RfcConfigParameters.PeakConnectionLimit, "10");
    parms.Add(RfcConfigParameters.PoolSize, "10");

    Terimakasih untuk bantuannya semoga dibalas pahala utk kebaikannya.
    Mohon dapat dikirimkan juga utk project lengkapnya ke andi2302@gmail.com.

    ReplyDelete
    Replies
    1. Halo mas Andi, salam kenal juga.

      Amin, terimakasih mas

      parameter disini adalah untuk login ke server SAP-nya sesuai dengan configurasinya loginnya, misalnya IP servernya berapa, System Number, User ID SAP nya, password, dan client SAP nya

      Delete
  2. Bro, Thank you for this useful exam. But ı have question. Already ı have a web service from sap. This service give to me material table values when ı work on.
    I want to this values insert to data base table with a web service in the visual studio.

    Could you help me.

    Esselamun aleykum.

    ReplyDelete

Post a Comment

Popular posts from this blog

IT Asset Management Dengan PHP MySQL

PHP MySql CRUD Dengan Konsep MVC

Cara Sederhana Multi Insert Data Dengan PHP - MySQL