// 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.
8 Aralık 2017 Cuma
ilişkili tablolardan bilgi alma
Örnek;
İade sipariş aynrınlarında, İnventTable'dan kontrolünü yapacağımız madde tipi HİZMET olmayanlar için bir kontrol eklemek istiyoruz.
DataSource'da bulunan SalesLine'ın methods'unda validateWrite'ına aşağıdaki şekilde kod yazarak İnventTable'ı elimize alıp istediğimiz gibi bilgiyi alabiliriz.
if (InventTable::find(salesLine.ItemId).ItemType != ItemType::Service )
{
if(!salesLine.InventTransIdReturn)
return checkfailed("İade lot kodunu doldurunuz!");
}
ilişkili tablolardan bilgi alma 2
Örnek üzerinden gidecek olursak;
Bir formunuz var ve formda kayıt girerken CustTable'daki bir alanın durumuyla ilgili bilgi vermek istiyorsunuz,
Bunun için bilgi vermek istediğiniz formun Data Sources'ında buluan ilgili alanın(CustAccount) validete'ına aşağıdaki gibi bir kontrol eklerseniz CustTable'daki bütün alanlar için bilgiyi forma çekebilirsiniz.
public boolean validate() // maakbulut 18.10.2017
{
boolean ret;
CustTable custTable;
ETGTradePaymentJour TradePaymentJour;
ret = super();
while select CustTable
if (ETGTradePaymentJour.CustAccount == CustTable.AccountNum && CustTable.DRT_CzechSignature == DRT_CzechSignature::JointSignature)
{
info("Cari Müşterek İmzalı!");
}
while select CustTable
if (ETGTradePaymentJour.CustAccount == CustTable.AccountNum && CustTable.DRTCzechCondition == DRTCzechCondition::Zavala)
{
info("Cari Avalim!");
}
return ret;
}
9 Kasım 2017 Perşembe
Sayfanın Sığmaması
Çıktı almaya çalışırken aşağıdaki gibi bir çıktı sorunuyla karşılaşırsanız;
2 Kasım 2017 Perşembe
Kullanıcı verilerini aktarma
SYSPERSONALIZATION sık kullanılanların saklandığı tablo
SYSLASTVALUE kullanıcının özelleştirmelerinin saklandığı tablo (ax rapor filtreleri vs.)
SYSLASTVALUE kullanıcının özelleştirmelerinin saklandığı tablo (ax rapor filtreleri vs.)
UPDATE [dbo].[SYSLASTVALUE] SET [USERID] = 'yeniuserid' WHERE [USERID] = 'eskiuserid' GO UPDATE [dbo].[SYSPERSONALIZATION] SET [USERID] = 'yeniuserid' WHERE [USERID] = 'eskiuserid' GOKaynak : https://daxapta.wordpress.com/2017/11/02/kullanici-verilerini-aktarma/
26 Ekim 2017 Perşembe
Range verme | Daynamics Ax
Farklı tiplere range verme örneklerini aşağıdaki koddan görebilirsiniz.
Formun datasource'una ekliyorsunuz.
Formun datasource'una ekliyorsunuz.
this.query().dataSourceTable(tablenum(PurchLineTotals)).addSortField(fieldnum(PurchLineTotals, PurchId), SortOrder::Descending); // Büyükten küçüğe sıralama yapar. this.query().dataSourceTable(tablenum(PurchLineTotals)).addRange(fieldnum(PurchLineTotals, Dimension3)).value("IHR*"); // IHR ile başlayan kayıtları getirir.this.query().dataSourceTable(tablenum(ExImpExpense_View)).addRange(fieldnum(ExImpExpense_View, MarkupCode)).value(queryvalue("D-Navlun")); // MarkupCode'u D-Navlun olanları getirthis.query().dataSourceTable(tablenum(ETGChequeHistoryByDates)).addRange(fieldnum(ETGChequeHistoryByDates, LastTransACType)).value(enum2str(LedgerJournalACType::Cust));// Enum tipi için range
25 Ekim 2017 Çarşamba
Formdaki alanın genişliği
Ax'ta aşağıdaki gibi formun içinde bir alandaki veri hücreye sığmıyorsa;
Formda sağ tık > kurulum'dan Genişlik(lkarakter olarak) alanını kendinize göre ayarlayabilirsiniz.
Faturalanan Satış Siparişinde Değişiklik İstenirse Bakılacak Tablolar
Dynamics Ax'ta faturalanan sipariş ekstrem durumlarda değiştirilmesi istenir.
Genellikle sıkıntılı durumlardır. Böyle bir talep gelirse güncellenecek tablolar:
- CustInvoiceJour
- CustInvoiceTrans
- CustTrans
- LedgerTrans
- TaxTrans
Satınalma için;
Kaydol:
Kayıtlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
-
Dynamic Ax 2009'da Kullanıcı Grupları ve Kullanıcıları Bir Forma Çekip Kullanma Dynamics Axapta 2009'da kullanıcı grupları ve iç...
-
Aşağıdaki hatayı aldığınızda, İlk olarak kullanıcının şirketini DAT olarak değiştirin, kullanıcının hesabından giriş yapın, sonrasında k...


