Blog Listem

29 Kasım 2011 Salı

AXAPTA Ana tablo formuna git çalışmayınca?

Bir tabloya bağlı kontrollerde tabloda ayarlanmışsa "Ana tablo formuna git" butonu otomatik olarak çalışır. Ancak kontrol sadece extended data tipine bağlıysa, çalışmaz. Bu durumda kendi Jumpref methodunuzu yazmanız gerekir.

Bu konuda Fatih Demirci'nin aşağıdaki kodundan faydalandım:

public void jumpRef()
{
EmplTable emplTable;
Args args;
MenuFunction menuFunction;
;
emplTable = EmplTable::find(this.text());
if (!emplTable)
{
return;
}
args = new Args();
args.caller(element);
args.record(emplTable);
menuFunction = new MenuFunction( menuitemdisplaystr(EmplTable),
MenuItemType::Display);
menuFunction.run(args);
}

Ancak bu kodun standart "Ana tablo formuna git" butonundan ufak bir farklılığı vardı. Ekrana sadece ilgili kaydı getiriyordu. Standarttaysa ilgili kayıt bulunuyor ve tüm kayıtlar görüntüleniyordu. Ufak bir araştırma sonrası aşağıdaki kodu yazdım. Tam standarttaki gibi çalışıyor:

public void jumpRef()
{
CustTable custTable;
Args args;
MenuFunction menuFunction;
;
args = new Args();
args.caller(element);
args.lookupfield(FieldNum(CustTable,AccountNum));
args.lookupValue(this.text());
menuFunction = new MenuFunction(MenuItemDisplayStr(custTable),MenuItemType::Display);
menuFunction.run(args);
}

24 Kasım 2011 Perşembe

AXAPTA Kullanıcı ilişkileri

Axapta'da kullanıcı ilişkileriyle ilgili üç tablo var:

UserInfo - Bu tabloda Axapta'ya girebilmek için kullandığınız active directory user kodları var:
Id alanında user id ve name alanında ismi ...

EmplTable - Bu personel dosyası.
EmplId alanında personel kodu var.

SysCompanyUserInfo - Bu tablo UserInfo ve EmplTable dosyalarını birbirine bağlamaya yarıyor. Bu tablodaki UserId alanına UserInfo tablosundaki Id ve EmplId alanına da EmplTable'daki EmplId bilgisi atılarak aradaki bağlantı sağlanıyor. Bu bağlantıyı yapmak için Yönetim->Kullanıcı ilişkileri formunu kullanabilirsiniz.

Mevcut ID alanını CurUserId() fonksiyonu ile alabilirsiniz.
Mesela bir tablo oluşturdunuz ve o tabloda sisteme giriş yapılan varsayılan Employee ID değerini atamak istiyorsunuz:
    MyTable.EmplId = SysCompanyUserInfo::find(CurUserId()).EmplId;

3 Kasım 2011 Perşembe

AXAPTA'yı çökertmek: hata 174

Aşağıdaki kod hata vermiyor. Ancak istediğim işi de yapmayacak, yine de hata 174 verip AOS'u göçertmemesi gerekir:

    select firstonly * from ord join rel join obj
        where ord.ServiceOrderId == rel.RelKeyId &&
            rel.RelTableId == ord.TableId &&
            obj.ServiceObjectId == rel.ServiceObjectId &&
            ( L_ItemSerialNum.valueStr()== obj.ItemSerialNum || (!L_ItemSerialNum)) &&
            ( L_SMAServiceObjectId.valueStr()== rel.ServiceObjectId || (!L_SMAServiceObjectId));

Kodu düzeltince hata vermiyor:
    select firstonly * from ord join rel join obj
        where ord.ServiceOrderId == rel.RelKeyId &&
            rel.RelTableId == ord.TableId &&
            obj.ServiceObjectId == rel.ServiceObjectId &&
            ( L_ItemSerialNum.valueStr()== obj.ItemSerialNum || (!L_ItemSerialNum.valueStr())) &&
            ( L_SMAServiceObjectId.valueStr()== rel.ServiceObjectId || (!L_SMAServiceObjectId.valueStr()));

İnternette ufak bir araştırma yaptım ve bu hatanın tamamen düzgün yazılmış kodlarda da verdiğini öğrendim.