VB.Net kullanarak Axapta işlemleri

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

Hiç yorum yok: