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);
}
}
}
}