Pliki cookie pomagają nam udostępniać nasze usługi. Korzystając z tych usług, zgadzasz się na użycie plików cookie. Więcej informacji
CRM - Sz@rk API - import kontrahentów

2011-09-27

Na naszych stronach można odszukać kilka artykułów na temat Sz@rk API oraz Sz@rk Designer. Jednak dopiero teraz, w module CRM, narzędzia te zostały całkowicie zintegrowane z systemem.

Podobnie jak w programach innych producentów, pierwsza koncepcja przewidywała udostępnienie API do wykonywania tylko niektórych (wybranych) operacji. Zweryfikowaliśmy jednak te założenia i teraz wszystkie moduły oraz klasy .NET tworzone są z myślą o wykorzystaniu ich przez naszych użytkowników za pomocą Sz@rk API.

W module Sz@rk CRM dodaliśmy opcje Zdarzeń (Events), które można oprogramować za pomocą wbudowanego Sz@rk API. Zanim jednak przejdziemy do bardziej zaawansowanych rozwiązań, wykorzystamy Sz@rk Designer do wykonania własnego importu kontrahentów z CDN OPTIMA.

W dokumencie http://tgsoft.pl/Blog.aspx?id=45 było już wykorzystanie skryptu, jednak tylko do pobrania danych z Optimy. Dalszą część dołączania danych wykonywał kreator, a użytkownik musiał przejść przez kolejne kroki kreatora.

W niektórych sytuacjach możemy potrzebować większej automatyzacji, np. w przypadku jednoczesnego wykorzystywania obu programów na co dzień. Poniższy przykład umożliwia całkowitą kontrolę nad procesem importu danych.

Widok definicji formularza nowego okna.

Kod C# wykonujący import kontrahentów.

Rezultat działania nowej opcji użytkownika. W rzeczywistym projekcie nie będziemy wyświetlać danych, być może w ogóle nie otworzymy nowego okna. My chcieliśmy przy okazji zademonstrować wykorzystanie standardowych kontrolek .NET (DataGridView).

Gotowy projekt można pobrać pod adresem: http://programy.tgsoft.pl/dev/optimaimport.zip

Pamiętaj! Sz@rk API daje Ci możliwość rozbudowy naszego zintegrowanego systemu bez potrzeby zakupu dodatkowych programów czy licencji.

Pełny kod programu.

namespace Szark
{
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    using TGSoft.Data;
 
    public partial class Form1 : System.Windows.Forms.Form
    {
 
        public Form1(object sender)
        {
            this.InitializeComponent();
            button1.Click += button1_click;
            button2.Click += button2_click;
        }
 
        public void Main()
        {
            this.ShowDialog();
        }
       
        #region Odczyt danych z CDN OPTIMA
        private DataTable GetCustomers()
        {
            SqlConnection conn = new SqlConnection(GetConnectionString());
            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(SqlKontrahenci(), conn);
                using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    adapter.Fill(ds, "kontrahenci");
                    return ds.Tables[0];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Nie mogę odczytać danych: " + ex.Message, "Błąd", 
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
            finally
            {
                if (conn != null)
                    conn.Dispose();
            }
        }
       
        private string GetConnectionString()
        {
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = "localhost";
            builder.InitialCatalog = "CDN_Demo";
            builder.IntegratedSecurity = true;
            return builder.ConnectionString;
        }
       
        private string SqlKontrahenci()
        {
            return "SELECT * FROM CDN.kontrahenci WHERE Knt_KntId BETWEEN 2 AND 5";
        }
 
        private void button1_click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = GetCustomers();
            button2.Enabled = true;
        }
        #endregion
 
        private void button2_click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            try
            {
                Kontrahenci k = new Kontrahenci("K");
                k.Open();
                DataTable optima = (DataTable)dataGridView1.DataSource;
                int dodano = 0; int pominieto = 0;
                foreach (DataRow row in optima.Rows)
                {
                    k.Append();
                    k.Kod = -1;
                    k.Skrot = row["Knt_Kod"].ToString();
                    k.Nazwa1 = row["Knt_Nazwa1"].ToString();
                    k.Nazwa2 = row["Knt_Nazwa2"].ToString();
                    k.Ulica = row["Knt_Ulica"].ToString();
                    k.NumerDomu = row["Knt_NrDomu"].ToString();
                    k.KodPocztowy = row["Knt_KodPocztowy"].ToString();
                    k.Miasto = row["Knt_Miasto"].ToString();
                    k.NIP = row["Knt_NipE"].ToString();
                    k.Telefon1 =  row["Knt_Telefon1"].ToString();
                    k.Telefon2 =  row["Knt_Telefon2"].ToString();
                    k.Fax = row["Knt_Fax"].ToString();
                    k.Email1 = row["Knt_Email"].ToString();
                    k.Email2 = row["Knt_OsEmail"].ToString();
                    k.WWW = row["Knt_URL"].ToString();
                    if (!k.IsExists(false))
                    {
                        k.Post();
                        dodano ++;
                    }
                    else
                    {
                        k.Cancel();
                        pominieto ++;
                    }
                }
                k.Update();
                MessageBox.Show(string.Format("Koniec importu. Dodano: {0}, 
                                              Pominięto: {1}", dodano, pominieto));
            }
            catch (Exception ex)
            {
                MessageBox.Show("Wystąpił błąd: " + ex.Message);
            }
        }
    }
}