13 Kasım 2015 Cuma

AXAPTA - Kodla security check kontrolü

Bazen kodla security check yapmak gerekir (Display metod vb.. durumlarda):



    SecurityKeySet securityKeys = new SecurityKeySet();
    ;
    securityKeys.loadUserRights(curuserid());

   if (securityKeys.access(securitykeynum("KRC_CrossCompany")) ==  AccessType::NoAccess)
   chkCrsCompany.value(NoYes::No);

12 Kasım 2015 Perşembe

AXAPTA - SysInfoAction sınıfıyla info fonksiyonuna ekstra görev getirme

Bu sınıf ile bir formu çağırmanın iki yolu var:

info(strfmt("Satış siparişi oluşturuldu: %1",salesTable.SalesId),"",
            SysInfoAction_TableField::newBuffer(salesTable));


Yukarıdaki yöntemin aşağıdakinden farklı bir record datası göndermemesi:

SysInfoAction_FormRun    infoAction = SysInfoAction_FormRun::newFormName(formStr(SalesTable));
;
infoAction.parmCallerBuffer(salestable);
 

info(strfmt("Satış siparişi oluşturuldu: %1",salesTable.SalesId),"",
            infoaction);



16 Ekim 2015 Cuma

AXAPTA - Formlarda pack-unpack

ClassDeclaration metodu:

    Container   packedQuery;
    SysQueryRun qRun;
    s
tr dummy;
    #DEFINE.CurrentVersion(1)
    #LOCALMACRO.CurrentList
        dummy,
        packedQuery
    #ENDMACRO


Diğer metodlar:

container pack()
{
    ;
    dummy      = txtDummy.valuestr();
    return [#CurrentVersion,#CurrentList];
}


public boolean unpack(container _packedClass)
{
    int version = conPeek(_packedClass,1);

    switch (version)
   {
        case #CurrentVersion:
            [version,#CurrentList] = _packedClass;
            break;
        default:
            return false;
    }
    return true;
}


public void init()
{
    ;
    xSysLastValue::getLast(this);
    super();
    txtDummy(dummy);
    element.initQuery();
}


public void close()
{
    super();
    xSysLastValue::saveLast(this);
}


void initParmDefault()
{
}


private IdentifierName lastValueDesignName()
{
    return '';
}


private IdentifierName lastValueElementName()
{
    return this.name();
}


private UtilElementType lastValueType()
{
    return UtilElementType::Form;
}


private UserId lastValueUserId()
{
    return curuserid();
}


public dataAreaId lastValueDataAreaId()
{
    return curExt();
}


Bu metod zorunlu değil, ancak query kullanacaksanız buna benzer birşey yazabilirsiniz:

void initQuery()
{
  Query                q;
  QueryBuildDataSource qbds;
  QueryBuildDataSource qbds2;
  QueryBuildRange      qRange;
  ;
  if (packedQuery)
      qRun = new SysQueryRun(packedQuery);
  else
  {
      q = new query();
      qbds = q.addDataSource(tablenum(EmplTable));
      qRun = new SysQueryRun(q);
  }
  qRun.promptLoadLastUsedQuery(false);
}


Bu metod da query'nin select butonu için, yani bu da zorunlu değil:
 void clicked()
{
    ;
    super();
    if (qRun.prompt())
        packedQuery = qRun.pack();
}

12 Ekim 2015 Pazartesi

AXAPTA - Form kontrolüne sağ mouse popup menübar eklemek

Bunu kontrolün showContextMenu metodunu düzenleyerek yapabilirsiniz:

public int showContextMenu(int _menuHandle)
{
    int                 ret;
    int                bar1,bar2;
    PopupMenu           pMenu = PopupMenu::create(_menuHandle,element.hWnd());
    ;
        bar1 = pMenu.insertItem("Seçenek 1");
        bar2 = pMenu.insertItem("Seçenek 2");

    ret = pMenu.draw();
    switch (ret)
    {
    case -1 :
        break;
    case bar1:

...
    case bar2:
...
    default :
        break;
    }
    return ret;

}


8 Ekim 2015 Perşembe

Axapta - Dataset gönderme ve alma


Bu kodları Fatih Demirci'nin bir geliştirmesinden aldım.

Dataset gönderme:
 

    System.Data.DataTable               dataTable;
    System.Data.DataColumnCollection    dataTableColumns;
    System.Data.DataRowCollection       DataRowCollection;
    System.Data.DataRow                 tmpRow;
    System.Data.DataSet dataset = new System.Data.DataSet();
    System.Data.DataTableCollection     dataTableCollection;


    dataTable = new System.Data.DataTable();
    dataTableColumns = dataTable.get_Columns();

//satırları tanımla
    dataTableColumns.Add("ACCOUNTNO", System.Type::GetType("System.String"));
    dataTableColumns.Add("ITEMNO", System.Type::GetType("System.String"));
    dataTableColumns.Add("TOACCOUNTNUM", System.Type::GetType("System.String"));
    dataTableColumns.Add("RETURNREASONIDD", System.Type::GetType("System.String"));
    dataTableColumns.Add("QUANTITY", System.Type::GetType("System.Double"));
    dataTableColumns.Add("DESCRIPTION", System.Type::GetType("System.String"));
//bir satır al
    DataRowCollection = dataTable.get_Rows();
        tmpRow = dataTable.NewRow();
//satırı doldur
    tmpRow.set_Item("ACCOUNTNO","MU_014600");
    tmpRow.set_Item("ITEMNO","200.05.01.0306");
    tmpRow.set_Item("TOACCOUNTNUM","MU_014600");
    tmpRow.set_Item("RETURNREASONIDD","");
    tmpRow.set_Item("QUANTITY",11);
    tmpRow.set_Item("DESCRIPTION","");

    DataRowCollection.Add(tmpRow);

     dataTable.AcceptChanges();
//bu aşamada eğer karşı taraf data table istiyorsa, data table hazır
//eğer dataset istiyorsa bu data tableyi bir datasete ekle
     dataTableCollection     = dataSet.get_Tables();
     dataTableCollection.Add(datatable);
//artık dataset de hazır


Dataset alma:

    System.Data.DataTable               dataTable;
    System.Data.DataTableCollection     dataTableCollection;
    System.Data.DataColumnCollection    dataColumnCollection;
    System.Data.DataRowCollection       dataRowCollection;
    System.Data.DataRow                 dataRow;
    System.Data.DataColumn              dataColumn;
    System.Data.DataTable               returnData;
;


        dataTableCollection     = dataSet.get_Tables();
        totalTable              = dataTableCollection.get_Count();
        for(i = 0; i < totalTable; i ++)
        {
            dataTable               = dataTableCollection.get_Item(i);
            dataColumnCollection    = dataTable.get_Columns();
            DataRowCollection       = dataTable.get_Rows();
            totalRow                = dataRowCollection.get_Count();
            totalCol                = dataColumnCollection.get_Count();
            for( j = 0; j < totalRow; j ++)
            {
                dataRow         = dataRowCollection.get_Item(j);
                custAccount     = dataRow.get_Item("ACCOUNTNO");
                itemId          = dataRow.get_Item("ITEMNO");
                toCustAccount   = dataRow.get_Item("TOACCOUNTNUM");
                strtext         = dataRow.get_Item("RETURNREASONIDD");
                krc_DefectiveId = str2int64(strtext);
                strtext         = dataRow.get_Item("QUANTITY");
                _b2bdesc        = dataRow.get_Item("DESCRIPTION");
...

3 Eylül 2015 Perşembe

Axapta - Query promt "Sorgulama seç - önceden kullanılan sorgu" yu engelleme

Axapta query çalıştırıp range değerleri yüklendiğinde istediğiniz değerlerin gelmediğini görebilirsiniz. Bunun sebebi Sorgulama seç kısmında önceden kullanılan sorgu gelmesi olabilir. Bunu engellemek için QueryRun sınıfı yerine SysQueryRun sınıfını kullanmalısınız. SysQueryRun sınıfı  QueryRun sınıfının genişletilmiş halidir.

Aşağıdaki kod "önceden kullanılan sorgu" yerine "kullanılan sorgu"nun gelmesini sağlar:

mySysQueryRun.promptLoadLastUsedQuery(false);


2 Eylül 2015 Çarşamba

Axapta - Transfer emri kısmi mal kabul

Bir forum sayfasından öğrendiğim yöntemle bu gerçekten çok basit:

inventTranstransferLine.QtyReceiveNow = 50;

Daha sonra transfer emrini post ettiğinizde 50 adet miktar mal kabul yapılacaktır.