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.
// 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ı");
}

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.

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.

Total ciro

static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...