Makale Özeti

Bir önceki makalemizde Axapta Business Connector arabirimini ve arabirimde bulunan fonksiyonları tanımıya çalışmıştık. Şimdi VB.Net kullanarak Axapta'ya nasıl bağlanacağımızı (logon), bir Axapta Class'ını nasıl çağıracağımızı ve Axapta'dan bunu nasıl karşılayacağımıza bakalım.

Makale

Bir önceki makalemizde Axapta Business Connector arabirimini ve arabirimde bulunan fonksiyonları tanımıya çalışmıştık.

Şimdi VB.Net kullanarak Axapta'ya nasıl bağlanacağımızı (logon), bir Axapta Class'ını nasıl çağıracağımızı ve Axapta'dan bunu nasıl karşılayacağımıza bakalım.

İlk olarak açtığımız .net projemizde Axapta Business Connector 'ü projemizin referanslarına eklememiz gerekmektedir.

Bu yapabilmek için projemizin "references" kısmına gelerek yeni bir referans ekleyiniz, COM sekmesinde "Axapta COM Connector 1.2 Type Library " i bulunuz ve OK tuşuna basınız. Bu işlem proje referanslarına Axapta Business Connector 'ü ekleyecektir.

Projemizin referanslarına COM connector'ü eklediğimizi düşünelim. Dikkat edecek olursanız referanslara eklediğimiz  dll aslında Axapta Configuration Utility  kullanarak register (bilgi kütüğü) ettiğimiz "axcom.dll' lidir.

Projemizin Public Class'ında referans a eklediğimiz COM Connector'u tanımlamalıyız.

Private axapta As AxaptaCOMConnector.Axapta2

Şimdi Axapta'ya nasıl bağlanacağımız bakalım.

NOT : Örneklerini göreceğiniz foksiyonların hata ve sonlandırma kısımlarını ihtiyaca bağlı olarak değişeceğinden fazla detaylı yazmadım.  Genel .Net kurallarına göre yazabilirsiniz.

Private Function Logon2(ByVal defaultLogon As String, ByVal configuration As String, ByVal company As String, ByVal Password As String)
    Const FUNCTION_NAME = "GetNotificationHeader"
    Try
        axapta = New AxaptaCOMConnector.Axapta2
        axapta.Logon2(defaultLogon, Password, company, "", "", "", configuration, "false", "", "")
    Catch ex As Exception
        Dim strErrorMessage As String
        strErrorMessage = " ERROR IN " & MODULE_NAME & "." & FUNCTION_NAME & _
        " ERRSOURCE: " & Err.Source & _
        " ERRCODE: " & Err.Number & _
        " ERRDESC: " & Err.Description & _
        " ERRLINE: " & Erl()
        InformationManager.HandleError(MODULE_NAME, FUNCTION_NAME, strErrorMessage, InformationManager.LOG_TYPE_ERROR)
        Err.Clear()
    Finally
    End Try
End Function
  • defaultLogon: Axapta'ya bağlanacak kullanıcı. configuration: Axapta'ya bağlantı kuracağımız konfigürasyon'un ismi. company: Axapta da şirket ismi.  Password: Axapta'ya bağlanacak kullanıcının parolası. Bu örnekte kullanıcımız Axapta'da tanımlı normal Axapta kullanıcısıdır.
  • axapta = New AxaptaCOMConnector.Axapta2 Axapta değişkenimizi new'leyerek yeni bir nesne olarak tanımlıyoruz.
  • axapta.Logon2(defaultLogon, Password, company, "", "", "", configuration, "false", "", "") Axapta2 arabirimini kullanarak  IAxapta2::Logon2 fonksiyonu ile Axapta'ya bağlanıyoruz. Diğer parametrelerini görmek için bir önceki makalemizi inceleyebilirsiniz.
  • InformationManager.HandleError bir hata olması durumunda hatayı sistem event log 'una kayıt atar.

Axapta'ya bağlandıktan sonra aynı Axapta nesnesini kullanarak Axapta içinde bulunan Global Class ına ait operatingSystem metod'unu çağırmaya çalışalım.

Private Function getOSName() As String
    Dim result As Object
    Try
        result = axapta.CallStaticClassMethod("Global", "operatingSystem", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
        If (Not result Is Nothing) Then
            Return result.ToString()
        Else
            Return Nothing
        End If
    Catch ex As Exception
    Finally
        If Not axapta Is Nothing Then
            Try
                axapta.Logoff()
            Catch ex As Exception
            End Try
        End
If
    End Try
End Function
  • Bu fonsiyon bize kullandığımız operasyon sistemimizi döndürecektir.
  • result = axapta.CallStaticClassMethod("Global", "operatingSystem", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) Axapta2 arabiriminin IAxapta::CallStaticClassMethod fonksiyonunu kullandık. Hatırlayacağınız gibi  CallStaticClassMethod fonksiyonunun ilk parametresi Class ismi ikinci parametresi ise Class'a ait metod du.
  • result.ToString()  operatingSystem metodu tarafından dönen değer.
  • axapta.Logoff() sistemle bağlantımızı keser.

Bir de bizim yazdığımız bir Axapta Class'ını nasıl çağıracağımıza bakalım. Yukarıda yazdığımız fonksiyonu da kullanalım. Yazacağımız örnekte bir recordSet'i göndermeye çalışacağız.

Private Function CallAxaptaClassMethod(ByVal axRecorset As ADODB.Recordset, ByVal strAxMethodName As String)
    Const FUNCTION_NAME = "CallAxaptaClassMethod"
    Dim osName As String
    Dim returnd As Object
    Dim ssss As String
    Try
        osName = getOSName()
        If Not osName Is Nothing Then
            axapta.TTSBegin()
            returnd = axapta.CallStaticClassMethod("dataInAxapta", strAxMethodName, axRecorset, Nothing, Nothing, Nothing, Nothing, Nothing)
            axapta.TTSCommit()
        Else
            Throw New Exception("Axapta Connection Not Setvvvv")
        End If

    Catch ex As Exception
        Dim strErrorMessage As String
        axapta.TTSAbort()
        If Not axapta Is Nothing Then
            axapta.Logoff()
        End If
        strErrorMessage = " ERROR IN " & MODULE_NAME & "." & FUNCTION_NAME & _
        " ERRSOURCE: " & Err.Source & _
        " ERRCODE: " & Err.Number & _
        " ERRDESC: " & Err.Description & _
        " ERRLINE: " & Erl()
        InformationManager.HandleError(MODULE_NAME, FUNCTION_NAME, strErrorMessage, InformationManager.LOG_TYPE_ERROR)
        Err.Clear()
    Finally
    End Try
End Function
  • Bu örnekte CallStaticClassMethod kullanarak bizim tanımladığımız dataInAxapta Class'ımızın strAxMethodName parametresi ile belirtiğimiz metod 'u çağırıyoruz. Gördüğünüz gibi bir recordset'i de parametre olarak göndere biliriz.

Şimdi son olarak Axapta da bu işlemi nasıl karşılayacağımızı görelim.

Static boolean axaptaCOM(COM _recordSet)
{
    CCADORecordSet CCADORecordSet;
    ;
    try
    {
        CCADORecordSet = new CCADORecordSet(_recordSet);

        while (!CCADORecordSet.EOF())
        {
            Alan = CCADORecordSet.fields().itemName("Alanİsmi").value();
            ...................

            CCADORecordSet.moveNext();
        }
        return true;
    }

    catch(Exception::Error)
    {
        .................
    return False;
    }
        ....................
    }

}
  • Dikkate ederseniz VB.Net ile gönderdiğimiz recordset 'i bir COM nesnesi olarak içeri alıyoruz. Bunu bir recordset'e dönüştürmemiz için Axaptada tanımlanmış  CCADORecordSet Class'ını kullanabiliriz. Axapta isimlendirmesi biraz garip olduğu için aramalarda bulamaya bilirsiniz ama CC ile başlayan Class'ların çoğu bu tür işlemler için hazırlanmış Class'lardır. İncelemenizde fayda olduğunu düşünüyorum.

Daya çok bilgi için http://msdn2.microsoft.com/en-us/library/default.aspx sayfasını ziyaret edebilirsiniz.

Volkan Acar

volkan.vacar@gmail.com