Skip to main content

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

PHP MySql CRUD Dengan Konsep MVC

Pada postingan kali ini saya akan sharing cara membuat CRUD dengan php menggunakan konsep MVC, ok langsung saja buka code editor (saya menggunakan sublime text) dan buat folder baru dengan nama phpmvc didalam folder htdocs kalian dan tambah folder seperti berikut :  Setelah itu kita siapkan database di mysql, buat database dengan nama phpmvc dan tablenya seperti gambar berikut : tambahkan file config.php didalam folder app/config : <?php define('BASEURL', 'http://localhost:8181/phpmvc/public'); define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_NAME', 'phpmvc'); kemudian tambahkan 3 file controller didalam folder app/controllers, yaitu Home, About, dan Mahasiswa : Home.php <?php class Home extends Controller { public function index() { $data['nama'] = $this->model('User_model')->getUser()...

Cara Sederhana Multi Insert Data Dengan PHP - MySQL

Pada postingan kali ini saya akan share cara melakukan insert lebih dari satu data dengan menggunaka PHP- Jquery dan MySQL. Pertama buat database di MySQL dan table, disini saya membuat database dengan nama db_latihan dan table dengan nama t_barang dengan struktur table seperti berikut : Setelah membuat database dan table selanjutnya membuat project PHP, project PHP nya saya buat dengan nama multi-insert, lalu didalam folder ini saya membuat dua file yaitu index.php dan insert.php . Source code index.php seperti berikut : <! doctype   html > < html   lang = "en" >    < head >      <!-- Required meta tags -->      < meta   charset = "utf-8" >      < meta   name = "viewport"   content = "width=device-width, initial-scale=1" >      <!-- Bootstrap CSS -->      < link ...

Laravel - Sistem Informasi Perpustakaan Sederhana Laravel

Postingan kali saya akan sharing membuat aplikasi perpustakaan sederhana menggunakan laravel 5.8, dimana terdapan menu Anggota, Kategori Buku, Daftar Buku dan Transaksi (Peminjaman/Pengembalian Buku). ok langsung saja kita buat project laravel dengan nama perpus : composer create-project --prefer-dist laravel/laravel perpus setelah create project laravel-nya selesai kita buat database melalui localhost/phpmyadmin dengan nama db_perpus, lalu kita buka project laravel dengan code editor disini saya menggunakan visual studio code. Setelah project kita buka dengan code editor, pertama kita atur koneksi database yang ada di file .env, kita rubah menjadi seperti berikut : note : untuk db_username dan db_password di sesuiakan dengan configurasi masing-masing. Selanjutnya kita tambahkan 4 buah data migration yaitu : table_anggota, table_kategori, table_buku, table_transaksi, kita buka terminal dan jalankan command berikut :  php artisan make:migration crea...