Bu örnek için Mirko Bonello'nun blogundan faydalandım.
Tablomuzda container türünde bir alan açıyoruz. Benimkisi InventTableQuery:
void createAndSaveQueryInTable()
{
QueryRun SysqueryRun;
;
if (this.InventTableQuery)
queryRun = new SysQueryRun(this.InventTableQuery);
else
queryRun = new SysQueryRun(queryStr('InventTable'));
qrun.promptLoadLastUsedQuery(false);
if (queryRun.prompt())
this.InventTableQuery = queryRun.pack();
}
QueryRun nesnesi yerine SysQueryRun nesnesini kullanıp ardından qrun.promptLoasLastUsedQuery(false) ile son kullanılan query değerlerinin gelmesini engelliyoruz ki sonra aynı benim gibi neden tüm kayıtlarda aynı query değerleri geliyor diye kafayı yemeyin... :)
Blog Listem
27 Ağustos 2015 Perşembe
AXAPTA - Text dosyaya yazmak
TextIo textIo;
str fileName;
FileIOPermission fioPermission;
#File
;
fileName = "c:\\myfolder\\test.txt"
fioPermission = new FileIOPermission
(fileName ,"RW");
fioPermission.assert();
if (WINAPI::fileExists(fileName))
{
WINAPI::deleteFile(fileName);
}
textIo = new TextIo(fileName, #IO_WRITE);
textIo.write("test 12");
textIo.write("test 34");
textIo = null;
CodeAccessPermission::revertAssert();
}
str fileName;
FileIOPermission fioPermission;
#File
;
fileName = "c:\\myfolder\\test.txt"
fioPermission = new FileIOPermission
(fileName ,"RW");
fioPermission.assert();
if (WINAPI::fileExists(fileName))
{
WINAPI::deleteFile(fileName);
}
textIo = new TextIo(fileName, #IO_WRITE);
textIo.write("test 12");
textIo.write("test 34");
textIo = null;
CodeAccessPermission::revertAssert();
}
19 Ağustos 2015 Çarşamba
AXAPTA - Direk SQL ifadesi çalıştırma
Bu blogda verilen örnek çok işime yaradı. Ancak bu blog ve diğer tüm bloglarda verilen örneklerde her kayıtta hep tek bir field okunmuş. Birden fazla field okumaya kalktığımda index hatası aldım. Daha sonra Microsoft'un bu sayfasında fieldların artan nümerik sırada okunması gerektiğini öğrendim ve sorunum çözülmüş oldu. Metodunuzu server tarafında çalıştırın. Yoksa yetki hatası alabilirsiniz. Insert ve delete işlemleri için de (Axapta tabloları için pek tavsiye edilebilecek bir durum olmasa da) executeQuery yerine executeUpdate metodunu kullanabilirsiniz.
public server static InventRep FillSQL(DatePhysical _DatePhysical = today())
{
InventRep InventRep;
Connection connection;
Statement statement;
str query,dateStr;
Resultset resultSet;
;
dateStr = date2str(_DatePhysical,321,dateday::Digits2,dateseparator::None,
datemonth::Digits2,dateseparator::None,dateyear::Digits4);
connection = new Connection();
statement = connection.createStatement();
query =
"select ITEMID,SUM(QTY)"+
"from INVENTTRANS "+
"where DATAAREAID='TST'"+
"and DATEPHYSICAL <='"+dateStr+"' "+
"group by ITEMID "+
"having SUM(QTY) <>0";
new SqlStatementExecutePermission(query).assert();
resultSet = statement.executeQuery(query);
while(resultSet.next())
{
//---- fieldlar mutlaka nümerik artan sırada okunmalı ------
InventRep.ItemId = resultSet.getString(1);
InventRep.Qty = resultSet.getReal(2);
InventRep.insert();
}
CodeAccessPermission::revertAssert();
}
public server static InventRep FillSQL(DatePhysical _DatePhysical = today())
{
InventRep InventRep;
Connection connection;
Statement statement;
str query,dateStr;
Resultset resultSet;
;
dateStr = date2str(_DatePhysical,321,dateday::Digits2,dateseparator::None,
datemonth::Digits2,dateseparator::None,dateyear::Digits4);
connection = new Connection();
statement = connection.createStatement();
query =
"select ITEMID,SUM(QTY)"+
"from INVENTTRANS "+
"where DATAAREAID='TST'"+
"and DATEPHYSICAL <='"+dateStr+"' "+
"group by ITEMID "+
"having SUM(QTY) <>0";
new SqlStatementExecutePermission(query).assert();
resultSet = statement.executeQuery(query);
while(resultSet.next())
{
//---- fieldlar mutlaka nümerik artan sırada okunmalı ------
InventRep.ItemId = resultSet.getString(1);
InventRep.Qty = resultSet.getReal(2);
InventRep.insert();
}
CodeAccessPermission::revertAssert();
}
12 Ağustos 2015 Çarşamba
AX 2009 - Rapor ekrana sığmadığında çıkan mesajdan kurtulmak
Axapta rapor aldığınızda eğer rapor sayfaya sığmazsa sizi uyarır. Eğer bu mesaj canınızı sıkıyorsa, raporun init metoduna şunu yazın:
this.printJobSettings().suppressScalingMessage(true);
Bunu tüm raporlar için de yapmanın bir yolu varmış. SysReportRun sınıfının Run metoduna super() çağrısından önce bu satırı ekleyin:
if(this.printJobSettings())
this.printJobSettings().suppressScalingMessage(true);
this.printJobSettings().suppressScalingMessage(true);
Bunu tüm raporlar için de yapmanın bir yolu varmış. SysReportRun sınıfının Run metoduna super() çağrısından önce bu satırı ekleyin:
if(this.printJobSettings())
this.printJobSettings().suppressScalingMessage(true);
Etiketler:
2009,
ax,
AXAPTA,
küçültme,
mesajı fit,
otomatik,
rapor sığmazsa,
sayfa,
sığdır
5 Ağustos 2015 Çarşamba
AX 2009 - TC kimlik no sorgulama ile örnek web servisi kullanımı
Daha önce AX 2012 için yazdığım örneğini bu sefer de 2009 için yazdım. Servisi yazarken Microsoft'un ilgili white page sayfasından faydalandım. White page artık olmayan bir servis için yazılmış ama yine de işimi gördü.
Öncelikle AOT->References->Servis başvurusu ekle çalıştırın:
WSDL URL kısmına https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL yazın.
Ben .NET kodu ad alanına TCSorgula yazdım. Başvuru adı kısmında da aynen otomatik yazılan TCSorgula değerini değiştirmeden bıraktım.
Daha sonra aşağıdaki metodu yazdım:
public server static boolean Sorgula(Int64 _TCKimlikNo,str _ad,str _soyad, int _dogumYili, boolean _interActive = false)
{
TCSorgula.KPSPublicSoapClient cl;
boolean ret;
System.Exception ex;
str st;
;
try
{
new InteropPermission(InteropKind::ClrInterop).assert();
cl = new TCSorgula.KPSPublicSoapClient("KPSPublicSoap");
ret = cl.TCKimlikNoDogrula(_TCKimlikNo,_ad,_soyad,_dogumYili);
CodeAccessPermission::revertAssert();
}
catch(Exception::CLRError)
{
exceptionTextFallThrough();
}
if (_interActive)
{
if (ret)
info("TC kimlik doğrulandı!..");
else
warning("TC kimlik doğrulanamadı!..");
}
return ret;
}
Kodu çalıştırmak için yazdığım job:
static void TCKimlikTest(Args _args)
{
;
TCKimlik::Sorgula(11111111111,"METİN","EMRE",1911,true);
}
TC kimlik doğrulama servisi isim veya doğum tarihi hatalı olduğunda false değeri döndürürken TC kimlikno hatalı olduğu durumlarda nedense exception atıyor. AX 2012 ile bu exception dönüş değeri içinde "T.C. Kimlik No alanına girdiğiniz değer geçerli bir T.C. Kimlik Numarası değildir" değerini kontrol ederek hatalı kimlik no mu yoksa başka bir hata mı döndüğünü kontrol edebiliyordum. 2009 ile malesef bunu başaramadım. Yani ya TC kimlikno düzgün ya da hatalı veya servis çalışmıyor şeklinde bilgi alabiliyorum.
Eğer VS kurulu değilse oluşturulmuş servisi yapılandırmak için .NET framework SDK'yı indirebilirsiniz.
Öncelikle AOT->References->Servis başvurusu ekle çalıştırın:
WSDL URL kısmına https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL yazın.
Ben .NET kodu ad alanına TCSorgula yazdım. Başvuru adı kısmında da aynen otomatik yazılan TCSorgula değerini değiştirmeden bıraktım.
Daha sonra aşağıdaki metodu yazdım:
public server static boolean Sorgula(Int64 _TCKimlikNo,str _ad,str _soyad, int _dogumYili, boolean _interActive = false)
{
TCSorgula.KPSPublicSoapClient cl;
boolean ret;
System.Exception ex;
str st;
;
try
{
new InteropPermission(InteropKind::ClrInterop).assert();
cl = new TCSorgula.KPSPublicSoapClient("KPSPublicSoap");
ret = cl.TCKimlikNoDogrula(_TCKimlikNo,_ad,_soyad,_dogumYili);
CodeAccessPermission::revertAssert();
}
catch(Exception::CLRError)
{
exceptionTextFallThrough();
}
if (_interActive)
{
if (ret)
info("TC kimlik doğrulandı!..");
else
warning("TC kimlik doğrulanamadı!..");
}
return ret;
}
Kodu çalıştırmak için yazdığım job:
static void TCKimlikTest(Args _args)
{
;
TCKimlik::Sorgula(11111111111,"METİN","EMRE",1911,true);
}
TC kimlik doğrulama servisi isim veya doğum tarihi hatalı olduğunda false değeri döndürürken TC kimlikno hatalı olduğu durumlarda nedense exception atıyor. AX 2012 ile bu exception dönüş değeri içinde "T.C. Kimlik No alanına girdiğiniz değer geçerli bir T.C. Kimlik Numarası değildir" değerini kontrol ederek hatalı kimlik no mu yoksa başka bir hata mı döndüğünü kontrol edebiliyordum. 2009 ile malesef bunu başaramadım. Yani ya TC kimlikno düzgün ya da hatalı veya servis çalışmıyor şeklinde bilgi alabiliyorum.
Eğer VS kurulu değilse oluşturulmuş servisi yapılandırmak için .NET framework SDK'yı indirebilirsiniz.
Kaydol:
Kayıtlar (Atom)