// sadece bir gruba yetki verirken kullanılır.
static void MAA_ChangeAccess_OneGroup(Args _args)
{
   SecurityKeySet          swSysSecurity;
   UserGroupList           userGroupList;
   DomainInfo              domainInfo;
   #admin
   ttsbegin;
   while select domainInfo
        //where domainInfo.id == #AdminDomain   //sadece belirli domainler için çalıştırmak istersen
   {
       while select userGroupList
         where userGroupList.groupId     == "10-03"
       {
           swSysSecurity = SysSecurity::constructSecurityKeySet();
           swSysSecurity.loadGroupRights(userGroupList.groupId, domainInfo.id);
             
           swSysSecurity.tableAccess(tablenum(VENDBANKACCOUNT), AccessType::View); // tabloya yetki
           swSysSecurity.menuItemAccess("ETGCustRiskLimitUpdateAppApproval", AccessRecordType::MenuItemAction, AccessType::View); // menuye yetki
           xAccessRightsList::saveSecurityRights(swSysSecurity.packTouched(), userGroupList.groupId, domainInfo.id);
       }
   }
   ttscommit;
   info("tamamlandı");
}
25 Ocak 2018 Perşembe
Kodla bir gruba menuye ve tabloya yetki verme
Ax'ta bir kullanıcı grubuna, istediğiniz forma ya da tabloya yetki vermek için aşağıdaki kodu çalıştırabilirsiniz.
Verileri Excelle Aktarma
Verilerinizi excelle aktarmak için. bir buton ekleyip click'ine aşağıdaki kodu eklededikten sonra;
void clicked()
{
    super();
    element.updateFromExcel();
    DRTCreateProdDemandsTable_ds.query().dataSourceTable(tablenum(DRTCreateProdDemandsTable)).sortClear();
    DRTCreateProdDemandsTable_ds.query().dataSourceTable(tablenum(DRTCreateProdDemandsTable)).addSortField(fieldNum(DRTCreateProdDemandsTable,Qty),SortOrder::Descending);
    DRTCreateProdDemandsTable_ds.executeQuery();
}
Formun methods kısmına kodları eklediyip excelinizdeki verileri aktarabilirsiniz.
void updateFromExcel()
{
    #Excel
    #AviFiles
    Dialog                  dialog = new Dialog("Excel veri aktarma");
    DialogField             dialogPath;
    FilenameFilter          filter = ['Excel files 2010','*.xlsx','Excel files 2003', '*.xls' ];
    FilenameOpen            filePath;
    SysExcelApplication     application;
    SysExcelWorkBooks       workBooks;
    SysExcelWorkBook        workBook;
    SysExcelWorkSheets      workSheets;
    SysExcelWorkSheet       workSheet;
    SysExcelCells           cells;
    SysOperationProgress    progress;
    SysExcelRange           range;
    Int                     NoofSheet,i,lastRow,sn;
    DRTCreateProdDemandsTable     ProdDemandsTable;
    void findLastRow(SysExcelWorkSheet _workSheet)
    {
        #define.Star('*')
        #define.Space(' ')
        ;
        range = _workSheet.cells().range(#ExcelTotalRange);
        try
        {
            // Finds the row where the first contents is found.
            range = range.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious);
        }
        catch (Exception::Error)
        {
            error("@SYS59926");
        }
        if (range)
        {
            lastRow = range.row();
        }
        else
        {
            lastRow = 0;
        }
    }
    ;
    dialog.filenameLookupFilter(filter);
    dialogPath  = dialog.addField(typeid(FilenameOpen));
    if (dialog.run())
    {
        if(dialog.closedOk())
        {
            filePath            = dialogPath.value();
            application         = SysExcelApplication::construct();
            application.visible(false);
            workBooks           = application.workbooks();
            workBooks.open(filePath,0,true);
            workSheets          = workBooks.item(1).worksheets();
            noOfSheet           = worksheets.count();
            progress = new SysOperationProgress();
            progress.setCaption("Plan aktarılıyor");
            progress.setTotal(lastRow);
            progress.setAnimation(#AviTransfer);
            setprefix("Plan aktarımı başladı");
            try
            {
                For( i = 1; i <= noOfSheet; i++)
                {
                    workSheet       = workSheets.itemFromNum(i);
                    if(workSheet)
                    {
                        findLastRow(workSheet);
                        for(sn = 2;sn <= lastRow;sn++)
                        {
                            ttsbegin;
                            cells = workSheet.cells();
                            ProdDemandsTable.clear();
                            select forupdate ProdDemandsTable
                                where ProdDemandsTable.itemid == cells.item(sn,1).value().bStr();
                            if ( ProdDemandsTable.RecId )
                            {
                                ProdDemandsTable.Qty           = cells.item(sn,2).value().double();
                                ProdDemandsTable.Notes         = cells.item(sn,3).value().bStr();
                                ProdDemandsTable.ConfigId      = cells.item(sn,4).value().bStr();
                                ProdDemandsTable.InventSizeId  = cells.item(sn,5).value().bStr();
                                ProdDemandsTable.InventColorId = cells.item(sn,6).value().bStr();
                                ProdDemandsTable.InventDimId   = cells.item(sn,7).value().bStr(); // MAA
                                ProdDemandsTable.ETGGroupId2   = cells.item(sn,8).value().bStr();
                                ProdDemandsTable.InventDimCombinationName   = cells.item(sn,9).value().bStr();
                                ProdDemandsTable.InventSizeName             = cells.item(sn,10).value().bStr();
                                ProdDemandsTable.doupdate();
                            }
                            else
                                info(strfmt("%1 bulunamadı.", cells.item(sn,1).value().bStr()));
                            ttscommit;
                        }
                    }
                }
            }
            catch
            {
                ttsabort;
                application.quit();
            }
        }
    }
}
exceli görmek için tıklayın.
Oluşturma tarihini display olarak farklı bir forma ekleme
Örneğin sizden satış siparişinin oluşturma tarihini farklı bir formda isteniyorsa display olarak aşağıdaki şekilde ekleyebilirsiniz.
display utcDatetime dispSalesCreateDate()
{
  return salestable::find(SalesLine::findInventTransId(this.InventTransId).SalesId).createdDateTime;
}
18 Ocak 2018 Perşembe
Dynamics Ax | Deftere nakli kontrollü hale getirebilirsiniz.
Kullanıcılar girdikleri siparişleri Deftere naklederken yetkisi varsa farkında olmadan PurchParmTable'da beklemede tikini kaldırmaya yetkisi varsa;
farkında olmadan bu alanı tikleyip faturalaştırabilirler. Bu da muhasebesel açıdan çok büyük bir probleme yol açabilir.
Bir tablodaki alanın yetkisini yönetmek daha zor olduğu için tablodan düzenlemeye kapattıktan sonra, beklemede alanın görevini bir butona verip yetkisini de ilgili departmana verirseniz yönetmeniz daha kolay olabilir.
Beklemede butonunun click method'una kodları yazdığınızda tikleme görevini buton yapacaktır.
Butonun yetkilerini de aşağıdaki gibi SecurityKey ve ConfigurationKey'den verebilirsiniz.
Bu konuyla ilgili farklı bir önlemi daha inceleyebilirsiniz.
void clicked()
{
    super();
    element.hold();
}
void hold() //MAA 10.01.2017
{
    PurchTable  purchTbl;
    if ((PurchTable::find(PurchParmTable.PurchId).PurchId == PurchParmTable.PurchId) && PurchParmTable.ETGHold == NoYes::Yes)
     {
        PurchParmTable.ETGHold =NoYes::No;
        PurchParmTable.doUpdate();
     }
}
Butonun yetkilerini de aşağıdaki gibi SecurityKey ve ConfigurationKey'den verebilirsiniz.
Bu konuyla ilgili farklı bir önlemi daha inceleyebilirsiniz.
Kaydol:
Yorumlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
- 
Dynamics Ax Microsoft’un orta ve büyük ölçekli işletmelerin ihtiyaçlarını karşılamak için tasarladığı temel iş çözümüdür. Veritabanı yöne...
 - 
Veri Filtreleme CTRL+F Geçerli alanı filtrelemek için kullanılır. Ekran açılır. Hangi alan üzerine tıklandı ise o alan için filtreleme k...
 

