Jika kita membuat suatu Form terutama DropDialog yang diperuntukan untuk
mengentry data, terkadang sukar sekali untuk merefresh form induknya
supaya memperlihatkan hasil entry kita.
berikut adalah contoh untuk merefresh datasource induk.
Di form Childnya (DropDialog) ...
Buka node method
di method CloseOK()
tambahkan macro #Task
public void closeOk()
{
#Task
FormRun formRun;
super();
formrun = element.args().caller();
if(formrun)
{
formrun.task(#taskF5);
}
}
implementasinya bisa speerti ini :
public void closeOk()
{
#Task
FormRun formRun;
RefRecId custRecId = element.args().record().RecId;
RefRecId caseRecId;
Inventtable ITinventtable;
ITinventtable.InventId = FieldInventId.valueStr();
ITinventtable.Name = FieldInventname.valueStr();
ITinventtable.insert();
formrun = element.args().caller();
formrun.task(#taskF5);
if(formHasMethod(element.args().caller(), identifierstr('setTouched')))
{
element.args().caller().setTouched();
}
super();
element.savelastvalues();
}
private void saveLastValues()
{
xSysLastValue::putValue([FieldInventId.valueStr()], curext(), curuserid(), UtilElementType::Form, form.name());
}
All Archives in this blog may be used for the Junior,Dummies or someone who just started for career at Dynamics Ax ... A Place Where U can Start ur Code - right here ...
Rabu, 17 Desember 2014
Senin, 15 Desember 2014
Melempar value dari form ke form
Kali ini adalah script untuk melempar value dari Form A ke Form B.
Misalkan kita mempunyai form A dengan value 'husna'. Nilai 'husna' ini ingin kita transfer/lempar ke form B.
Pertama kita mempunyai 2 Form, A dan B
Buat juga menuitem displaynya untuk ke dua form tersebut.
Di form A, tarik menuitem display formB ke form A, jadikan sebagai button link ke form B.
Expand node menuitembutton B ke node method.
tambahkan method Clicked()
void clicked()
{
Args args;
FormRun formrun;
super();
args = new Args(formStr([formB]));
args.record([datasource darimana value berasal]);
formrun = classFactory.formRunClass(args);
formrun.init();
}
contoh :
void clicked()
{
Args args;
FormRun formrun;
super();
args = new Args(formStr(FormB));
args.record(EmplTable);
formrun = classFactory.formRunClass(args);
formrun.init();
//formrun.run();
//formrun.wait();
//formrun.detach();
}
di Classdeclaration Form B
public class FormRun extends ObjectRun
{
[table value yang akan ditangkap berasal]
Contoh
Empltable empltable;
}
Tambahkan juga method init di form B
public void init()
{
super();
empltable = element.args().record();
}
selanjutnya..silahkan diolah ..
misalnya anda ingin menangkap value dari field employeeId.
tinggal ambil dari empltable.
empltable.EmployeeId
Misalkan kita mempunyai form A dengan value 'husna'. Nilai 'husna' ini ingin kita transfer/lempar ke form B.
Pertama kita mempunyai 2 Form, A dan B
Buat juga menuitem displaynya untuk ke dua form tersebut.
Di form A, tarik menuitem display formB ke form A, jadikan sebagai button link ke form B.
Expand node menuitembutton B ke node method.
tambahkan method Clicked()
void clicked()
{
Args args;
FormRun formrun;
super();
args = new Args(formStr([formB]));
args.record([datasource darimana value berasal]);
formrun = classFactory.formRunClass(args);
formrun.init();
}
contoh :
void clicked()
{
Args args;
FormRun formrun;
super();
args = new Args(formStr(FormB));
args.record(EmplTable);
formrun = classFactory.formRunClass(args);
formrun.init();
//formrun.run();
//formrun.wait();
//formrun.detach();
}
di Classdeclaration Form B
public class FormRun extends ObjectRun
{
[table value yang akan ditangkap berasal]
Contoh
Empltable empltable;
}
Tambahkan juga method init di form B
public void init()
{
super();
empltable = element.args().record();
}
selanjutnya..silahkan diolah ..
misalnya anda ingin menangkap value dari field employeeId.
tinggal ambil dari empltable.
empltable.EmployeeId
Kamis, 13 November 2014
Financial Dimension AX 2012
Selama ini ane dibuat bingung dengan behavior nya Financial Dimension AX 12...
Ada beberapa table yang saling berkaitan.
Tapi akhirnya Alhamdulillah ane dah nemu code yang bisa membaca komponen Financial Dimension di AX 12.
berikut Kodenya ;
Ada beberapa table yang saling berkaitan.
Tapi akhirnya Alhamdulillah ane dah nemu code yang bisa membaca komponen Financial Dimension di AX 12.
berikut Kodenya ;
static void ShowVendDefaultDimensions(Args _args)
{
VendTable vendTable;
DimensionAttributeValueSet dimAttrValueSet;
DimensionAttributeValueSetItem dimAttrValueSetItem;
DimensionAttributeValue dimAttrValue;
DimensionAttribute dimAttr;
Common dimensionValueEntity;
;
// Find our supplier
vendTable = VendTable::find('3008');
// Find the dimension value set that the vendor points to (for specifying the
// 'default' dimensions). This table is used as a sort of 'header' that the
// value set items (DimensionAttributeValueSetItem) records belong to.
dimAttrValueSet = DimensionAttributeValueSet::find(vendTable.DefaultDimension);
// Find all of the 'value set items' linked against the 'value set'
while select dimAttrValueSetItem
where dimAttrValueSetItem.DimensionAttributeValueSet == dimAttrValueSet.RecId
{
// Find the dimension 'value' (DimensionAttributeValue) that the set item points to.
dimAttrValue = DimensionAttributeValue::find(dimAttrValueSetItem.DimensionAttributeValue);
// Find the underlying attribute.
dimAttr = DimensionAttribute::find(dimAttrValue.DimensionAttribute);
// Use the helper class to obtain a reference to the underlying entity (can be anything)
dimensionValueEntity = DimensionDefaultingControllerBase::findBackingEntityInstance(
curext(),
dimAttr,
dimAttrValue.EntityInstance);
info(dimAttr.Name + ' ' + dimAttrValue.getValue());
}
}
lebih lengkapnya ada disini :
http://axinternals.blogspot.com/2011/09/default-dimension-storage-in-ax-2012.html
Minggu, 09 November 2014
Melempar value dari form ke report
2 Cara berikut bisa dipakai untuk melempar nilai dari form ke report.
Cara 1 :
Dengan membuat object Query di AOT.
Pastikan kita mempunyai form dengan datasource yang sama dengan report.
Misalkan :
Form Employee, Datasource : EmplTable.
Report Employee, Datasource : EmplTable.
buat object Query dengan nama ex: Emplquery
Definisikan DataSource = EmplTable.
Definisikan Range = field2 yang akan menjadi parameter.
Save
Di Reportnya,
Buat Report dengan EmplReport.
Datasource EmplTable tadi delete dan ganti dengan object query EmplQuery.
di Method init
tambahkan code berikut
public void init()
{
EmplTable empltable;
super();
if (element.args().dataset() == tablenum(EmplTable))
{
empltable = element.args().record();
this.query().dataSourceName("[nama query kamu di report]").addRange(fieldnum(EmplTable , EmplId)).value(queryValue(empltable.emplid));
}
}
Done untuk cara satu.
Cara 2 :
Kita bisa menambahkan method initfromcaller atau kamu bisa pakai nama method kamu sendiri.
(cara ini kita tidak perlu membuat object Query)
tambahkan code berikut di method initfromcaller
public void initFromCaller(Args _args)
{
EmplTable empltable;
QueryBuildDataSource qbds;
;
if (_args.caller())
{
if (! _args.record().recId)
throw error(strfmt("@SYS22338",funcname()));
switch (_args.dataset())
{
case tablenum(EmplTable ):
empltable= _args.record();
//if (projmtotable.MTODocumentNo != ProjMTOTableAXS.MTODocumentNo)
//throw error(strfmt("@SYS23396",funcname()));
//break;
//default:
//throw error(strfmt("@SYS23396",funcname()));
}
}
if (true || empltable.emplid)
{
qbds = element.query().dataSourceTable(tablenum(EmplTable));
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, emplid)).value(empltable.emplid);
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, Name)).value(empltable.name);
}
}
Done cara 2
bisa lihat lebih lengkap disini http://theaxapta.blogspot.com/2013/01/how-to-pass-values-from-form-to-report.html
Cara 1 :
Dengan membuat object Query di AOT.
Pastikan kita mempunyai form dengan datasource yang sama dengan report.
Misalkan :
Form Employee, Datasource : EmplTable.
Report Employee, Datasource : EmplTable.
buat object Query dengan nama ex: Emplquery
Definisikan DataSource = EmplTable.
Definisikan Range = field2 yang akan menjadi parameter.
Save
Di Reportnya,
Buat Report dengan EmplReport.
Datasource EmplTable tadi delete dan ganti dengan object query EmplQuery.
di Method init
tambahkan code berikut
public void init()
{
EmplTable empltable;
super();
if (element.args().dataset() == tablenum(EmplTable))
{
empltable = element.args().record();
this.query().dataSourceName("[nama query kamu di report]").addRange(fieldnum(EmplTable , EmplId)).value(queryValue(empltable.emplid));
}
}
Done untuk cara satu.
Cara 2 :
Kita bisa menambahkan method initfromcaller atau kamu bisa pakai nama method kamu sendiri.
(cara ini kita tidak perlu membuat object Query)
tambahkan code berikut di method initfromcaller
public void initFromCaller(Args _args)
{
EmplTable empltable;
QueryBuildDataSource qbds;
;
if (_args.caller())
{
if (! _args.record().recId)
throw error(strfmt("@SYS22338",funcname()));
switch (_args.dataset())
{
case tablenum(EmplTable ):
empltable= _args.record();
//if (projmtotable.MTODocumentNo != ProjMTOTableAXS.MTODocumentNo)
//throw error(strfmt("@SYS23396",funcname()));
//break;
//default:
//throw error(strfmt("@SYS23396",funcname()));
}
}
if (true || empltable.emplid)
{
qbds = element.query().dataSourceTable(tablenum(EmplTable));
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, emplid)).value(empltable.emplid);
SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, Name)).value(empltable.name);
}
}
Done cara 2
bisa lihat lebih lengkap disini http://theaxapta.blogspot.com/2013/01/how-to-pass-values-from-form-to-report.html
Selasa, 09 September 2014
PR approved is not exist in the form Release approved purchase requisitions
There's an unexpected moment when an Approved Purchase Requisition is not collected by Release approved purchase requisition form. ... something silly rite?
but, yes ... iv got that problem.
This case is happen when the Accounting status field on Sourcedocumentline table is set to 'Fully distributed'. i dont know why this accounting status field is set to 'Fully distributed', i mean the trigger that's makes the status become 'Fully distributed'.
So,... in this case u can fix this problem by set the Accounting status to become 'Completed'.
U can use the script from the Job.
Use the PurchTable, Purchline and SourceDocumentline.
Select PRtable where Prtable.PurchReqId == "XXXX";
while select PRline where PRline.PurchReqTable == PRtable.RecId
{
Select forUpdate documentline where documentline.RecId == PRline.SourceDocumentLine;
{
info(strFmt("PRlinenum : %1, Documentstatus : %2",PRline.LineNum,documentline.AccountingStatus));
ttsBegin;
documentline.AccountingStatus = SourceDocumentLineAccountingStatus::Completed;
documentline.update();
ttsCommit;
}
}
but, yes ... iv got that problem.
This case is happen when the Accounting status field on Sourcedocumentline table is set to 'Fully distributed'. i dont know why this accounting status field is set to 'Fully distributed', i mean the trigger that's makes the status become 'Fully distributed'.
So,... in this case u can fix this problem by set the Accounting status to become 'Completed'.
U can use the script from the Job.
Use the PurchTable, Purchline and SourceDocumentline.
Select PRtable where Prtable.PurchReqId == "XXXX";
while select PRline where PRline.PurchReqTable == PRtable.RecId
{
Select forUpdate documentline where documentline.RecId == PRline.SourceDocumentLine;
{
info(strFmt("PRlinenum : %1, Documentstatus : %2",PRline.LineNum,documentline.AccountingStatus));
ttsBegin;
documentline.AccountingStatus = SourceDocumentLineAccountingStatus::Completed;
documentline.update();
ttsCommit;
}
}
Jumat, 22 Agustus 2014
Number sequence ******** has been exceeded
Hai,... maaf nih baru update lagi,...
sudah hampir sepuluh bulan di tempat baru ...
Kali ini kita akan membahas number sequence yang telah habis.
Jika teman-teman mendapatkan error message "Number sequence ******** has been exceeded" pada saat posting Packing Slip, Invoice dsb bisa jadi number sequence yang akan berjalan lebih besar dari number sequence yang terbesar yang telah kita setup.
Cek ******.. tersebut di table Numbersequencetable, lihat number sequence codenya.
Back to form Number sequence dan pilih sequence codenya, klik edit/double click numbersequence tersebut. Selanjutnya kita bisa setup kembali numbersequence terbesarnya di field Largest. Klik OK.
Selasa, 15 April 2014
Cannot update LogisticPostalAddress
Hallo
saat ini aku sedang mencoba untuk mengupdate record yang ada di table LogisticsPostalAddress. Tetapi system malah mengeluarkan error seperti dibawah ini "Cannot edit a record in Addresses (LogisticsPostalAddress). Update on a valid time state table is not allowed without specifying a ValidTimeStateUpdateMode."
what u have todo is,... make sure u call validTimeStateUpdateMode method.
here is the example
static void Job12(Args _args)
{
RecId _recid;
LogisticsPostalAddress _dlvadress;
;
ttsBegin;
_dlvadress.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);
select forUpdate _dlvadress where _dlvadress.RecId == 5637147898;
// _dlvadress = LogisticsPostalAddress::findRecId(5637147898,true); or ucan try this
_dlvadress.Address = "Cirebon";
_dlvadress.update();
ttsCommit;
}
OK...
selamat mencoba
saat ini aku sedang mencoba untuk mengupdate record yang ada di table LogisticsPostalAddress. Tetapi system malah mengeluarkan error seperti dibawah ini "Cannot edit a record in Addresses (LogisticsPostalAddress). Update on a valid time state table is not allowed without specifying a ValidTimeStateUpdateMode."
what u have todo is,... make sure u call validTimeStateUpdateMode method.
here is the example
static void Job12(Args _args)
{
RecId _recid;
LogisticsPostalAddress _dlvadress;
;
ttsBegin;
_dlvadress.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);
select forUpdate _dlvadress where _dlvadress.RecId == 5637147898;
// _dlvadress = LogisticsPostalAddress::findRecId(5637147898,true); or ucan try this
_dlvadress.Address = "Cirebon";
_dlvadress.update();
ttsCommit;
}
OK...
selamat mencoba
Kamis, 13 Maret 2014
Import Data dari file excel .CSV ke table AX2012
Di AX2012 ini memang bikin kita senewen, terutama untuk kita yang sudah terbiasa dengan fasilitas import Data Excel ke table AX, karena fasilitas ini dihilangkan oleh si mihkocok.
Belum lagi kita dibikin mumet dengan Addin kita yang gaaaaa solve solve errornya.
Ok.
Kali ini saya mau berbagi script untuk meimport data dari file excel terutama yang berformat .CSV.
1.Asumsikan kita mempunyai file excel dengan data yang sudah dimasukna ke kolom2nya.
Oh iya, script ini saya buat untuk mengimport data ke table custom kita bukan table standard AX.(ane masih mumet cuuuy dengan struktur table AX2012 ini :( )
2.Asumsikan kamu mempunyai table custom yang sudah kamu buat.
lalu buat lah job seperti ini.
Di job ini sebelumnya saya sudah membuat table bernama HYNImportTable.
Dan saya juga sudah maping kolom mana saja yang akan saya ambil nilainya dan selanjutnya saya tembak ke field2 yang sesuai dengan field yang ada ditable saya itu.
static void HYNimporttable(Args _args)
{
#File
CommaTextIo commaTextIo;
FileIOPermission permission;
container containFromRead;
int x;
int cols;
PurchId purchid;
AccountingDate accountingdate;
VendAccount vendaccount;
Line line;
TaxGroup taxgroup;
TaxItemGroup taxitemgroup;
PurchPoolId poolid;
LogisticsDeliveryName Dlvaname;
Addressing dlvaddress;
DlvDate dlvdate;
CurrencyCode currencycode;
ItemId itemid;
EcoResCategoryName procurementcategory;
PurchQty purchQty;
PurchUnit purchunit;
PurchPrice purchPrice;
AmountCur lineAmount;
PurchReqId PRid;
PurchQtyOrdered deliveryremainder;
ProjCategoryId ProjCategoryId;
VersioningDocumentState Approvalstatus;
PurchReqAttention Attention;
ItemFreeTxt POtext;
AmountCur progpaymamount;
Name PaymTermId;
ProjId ProjId;
EcoResItemConfigurationName configId;
InventLocationId warehouseid;
InventSiteId siteId;
EcoResItemSizeName inventSizeid;
EcoResItemColorName inventColorid;
EcoResItemStyleName inventStyleid;
HYNImportTable hynimporttable;
;
permission = new FileIOPermission('d:\\Upload data PTG\\PO Open Part2 4.csv',#io_read);//D:\Upload data PTG
permission.assert();
commaTextIo = new CommaTextIO('d:\\Upload data PTG\\PO Open Part2 4.csv','R');
containFromRead = commaTextIo.read();
ttsBegin;
while(containFromRead)
{
cols = conLen(containFromRead);
for(x=1;x<=cols;x++)
{
//accounting date
if(x == 1)
{
accountingdate = str2Date(conPeek(containFromRead,x),-1);
}
//PO number
if(x == 2)
{
purchid = strLTrim(conpeek(containFromRead,x));
}
//vendaccount
if(x == 3)
{
vendaccount = strLTrim(conPeek(containFromRead,x));
}
//line
if(x==4)
{
line = conPeek(containFromRead,x);
}
//taxgroup
if(x==5)
{
taxgroup = conPeek(containFromRead,x);
}
//taxitemgroup
if(x==6)
{
taxitemgroup = conPeek(containFromRead,x);
}
//pool
if(x==8)
{
poolid = conPeek(containFromRead,x);
}
//Dlvname
if(x==9)
{
Dlvaname = conPeek(containFromRead,x);
}
//dlvaddress
if(x==10)
{
dlvaddress = conPeek(containFromRead,x);
}
//dlvdate
if(x==12)
{
dlvdate = str2Date(conPeek(containFromRead,x),-1);
}
//currencycode
if(x==13)
{
currencycode = conPeek(containFromRead,x);
}
//Payemtermid
if(x==14)
{
PaymTermId = conPeek(containFromRead,x);
}
//ItemId
if(x==15)
{
itemid = conPeek(containFromRead,x);
}
//Procurementcategory
if(x==16)
{
procurementcategory = conPeek(containFromRead,x);
}
//configId
if(x==17)
{
configId = conPeek(containFromRead,x);
}
//inventSizeId
if(x==18)
{
inventSizeid = conPeek(containFromRead,x);
}
//inventCOlorId
if(x==19)
{
inventColorid = conPeek(containFromRead,x);
}
//inventStyleId
if(x==20)
{
inventStyleid = conPeek(containFromRead,x);
}
//inventSiteId
if(x==21)
{
siteId = conPeek(containFromRead,x);
}
//inventLocationId
if(x==22)
{
warehouseid = conPeek(containFromRead,x);
}
//Qty
if(x==23)
{
purchQty = conPeek(containFromRead,x);
}
//PurchUnit
if(x==24)
{
purchunit = conPeek(containFromRead,x);
}
//PurchPrice
if(x==25)
{
purchPrice = conPeek(containFromRead,x);
}
//lineamount
if(x==26)
{
lineAmount = conPeek(containFromRead,x);
}
//PR
if(x==27)
{
PRid = strLTrim(conPeek(containFromRead,x));
}
//deliveryremainder
if(x==28)
{
deliveryremainder = conPeek(containFromRead,x);
}
//ProjId
if(x==30)
{
ProjId = conPeek(containFromRead,x);
}
//ProjCategoryId
if(x==31)
{
ProjCategoryId = conPeek(containFromRead,x);
}
//Approvalstatus
if(x==38)
{
Approvalstatus = str2enum(Approvalstatus,conPeek(containFromRead,x));
}
//Attention
if(x==39)
{
Attention = conPeek(containFromRead,x);
}
//POtext
if(x==40)
{
POtext = conPeek(containFromRead,x);
}
if(x==42)
{
progpaymamount = conPeek(containFromRead,x);
}
}
hynimporttable.AccountingDate = accountingdate;
hynimporttable.PurchId = purchid;
hynimporttable.VendAccount = vendaccount;
hynimporttable.Line = line;
hynimporttable.TaxGroup = taxgroup;
hynimporttable.TaxItemGroup = taxitemgroup;
hynimporttable.PurchPoolId = poolid;
hynimporttable.DlvName = Dlvaname;
hynimporttable.DlvAddress = dlvaddress;
hynimporttable.DlvDate = dlvdate;
hynimporttable.CurrencyCode = currencycode;
hynimporttable.PaymTermId = PaymTermId;
hynimporttable.ItemId = itemid;
hynimporttable.ProcurementCategory = procurementcategory;
hynimporttable.ConfigId = configId;
hynimporttable.InventSiteId = siteId;
hynimporttable.InventLocationId = warehouseid;
hynimporttable.InventSizeId = inventSizeid;
hynimporttable.InventColorId = inventColorid;
hynimporttable.InventStyleId = inventStyleid;
hynimporttable.PurchQty = purchQty;
hynimporttable.PurchUnit = purchunit;
hynimporttable.PurchPrice = purchPrice;
hynimporttable.LineAmount = lineAmount;
hynimporttable.PurchReqId = PRid;
hynimporttable.DeliverRemainder = deliveryremainder;
hynimporttable.ProjId = ProjId;
hynimporttable.ProjCategoryId = ProjCategoryId;
hynimporttable.ApprovalStatus = Approvalstatus;
hynimporttable.Attention = Attention;
hynimporttable.POText = POtext;
hynimporttable.ProgPaymAmount = progpaymamount;
hynimporttable.insert();
containFromRead = commaTextIo.read();
}
ttsCommit;
info("done");
}
Ok selamat mencoba
Belum lagi kita dibikin mumet dengan Addin kita yang gaaaaa solve solve errornya.
Ok.
Kali ini saya mau berbagi script untuk meimport data dari file excel terutama yang berformat .CSV.
1.Asumsikan kita mempunyai file excel dengan data yang sudah dimasukna ke kolom2nya.
Oh iya, script ini saya buat untuk mengimport data ke table custom kita bukan table standard AX.(ane masih mumet cuuuy dengan struktur table AX2012 ini :( )
2.Asumsikan kamu mempunyai table custom yang sudah kamu buat.
lalu buat lah job seperti ini.
Di job ini sebelumnya saya sudah membuat table bernama HYNImportTable.
Dan saya juga sudah maping kolom mana saja yang akan saya ambil nilainya dan selanjutnya saya tembak ke field2 yang sesuai dengan field yang ada ditable saya itu.
static void HYNimporttable(Args _args)
{
#File
CommaTextIo commaTextIo;
FileIOPermission permission;
container containFromRead;
int x;
int cols;
PurchId purchid;
AccountingDate accountingdate;
VendAccount vendaccount;
Line line;
TaxGroup taxgroup;
TaxItemGroup taxitemgroup;
PurchPoolId poolid;
LogisticsDeliveryName Dlvaname;
Addressing dlvaddress;
DlvDate dlvdate;
CurrencyCode currencycode;
ItemId itemid;
EcoResCategoryName procurementcategory;
PurchQty purchQty;
PurchUnit purchunit;
PurchPrice purchPrice;
AmountCur lineAmount;
PurchReqId PRid;
PurchQtyOrdered deliveryremainder;
ProjCategoryId ProjCategoryId;
VersioningDocumentState Approvalstatus;
PurchReqAttention Attention;
ItemFreeTxt POtext;
AmountCur progpaymamount;
Name PaymTermId;
ProjId ProjId;
EcoResItemConfigurationName configId;
InventLocationId warehouseid;
InventSiteId siteId;
EcoResItemSizeName inventSizeid;
EcoResItemColorName inventColorid;
EcoResItemStyleName inventStyleid;
HYNImportTable hynimporttable;
;
permission = new FileIOPermission('d:\\Upload data PTG\\PO Open Part2 4.csv',#io_read);//D:\Upload data PTG
permission.assert();
commaTextIo = new CommaTextIO('d:\\Upload data PTG\\PO Open Part2 4.csv','R');
containFromRead = commaTextIo.read();
ttsBegin;
while(containFromRead)
{
cols = conLen(containFromRead);
for(x=1;x<=cols;x++)
{
//accounting date
if(x == 1)
{
accountingdate = str2Date(conPeek(containFromRead,x),-1);
}
//PO number
if(x == 2)
{
purchid = strLTrim(conpeek(containFromRead,x));
}
//vendaccount
if(x == 3)
{
vendaccount = strLTrim(conPeek(containFromRead,x));
}
//line
if(x==4)
{
line = conPeek(containFromRead,x);
}
//taxgroup
if(x==5)
{
taxgroup = conPeek(containFromRead,x);
}
//taxitemgroup
if(x==6)
{
taxitemgroup = conPeek(containFromRead,x);
}
//pool
if(x==8)
{
poolid = conPeek(containFromRead,x);
}
//Dlvname
if(x==9)
{
Dlvaname = conPeek(containFromRead,x);
}
//dlvaddress
if(x==10)
{
dlvaddress = conPeek(containFromRead,x);
}
//dlvdate
if(x==12)
{
dlvdate = str2Date(conPeek(containFromRead,x),-1);
}
//currencycode
if(x==13)
{
currencycode = conPeek(containFromRead,x);
}
//Payemtermid
if(x==14)
{
PaymTermId = conPeek(containFromRead,x);
}
//ItemId
if(x==15)
{
itemid = conPeek(containFromRead,x);
}
//Procurementcategory
if(x==16)
{
procurementcategory = conPeek(containFromRead,x);
}
//configId
if(x==17)
{
configId = conPeek(containFromRead,x);
}
//inventSizeId
if(x==18)
{
inventSizeid = conPeek(containFromRead,x);
}
//inventCOlorId
if(x==19)
{
inventColorid = conPeek(containFromRead,x);
}
//inventStyleId
if(x==20)
{
inventStyleid = conPeek(containFromRead,x);
}
//inventSiteId
if(x==21)
{
siteId = conPeek(containFromRead,x);
}
//inventLocationId
if(x==22)
{
warehouseid = conPeek(containFromRead,x);
}
//Qty
if(x==23)
{
purchQty = conPeek(containFromRead,x);
}
//PurchUnit
if(x==24)
{
purchunit = conPeek(containFromRead,x);
}
//PurchPrice
if(x==25)
{
purchPrice = conPeek(containFromRead,x);
}
//lineamount
if(x==26)
{
lineAmount = conPeek(containFromRead,x);
}
//PR
if(x==27)
{
PRid = strLTrim(conPeek(containFromRead,x));
}
//deliveryremainder
if(x==28)
{
deliveryremainder = conPeek(containFromRead,x);
}
//ProjId
if(x==30)
{
ProjId = conPeek(containFromRead,x);
}
//ProjCategoryId
if(x==31)
{
ProjCategoryId = conPeek(containFromRead,x);
}
//Approvalstatus
if(x==38)
{
Approvalstatus = str2enum(Approvalstatus,conPeek(containFromRead,x));
}
//Attention
if(x==39)
{
Attention = conPeek(containFromRead,x);
}
//POtext
if(x==40)
{
POtext = conPeek(containFromRead,x);
}
if(x==42)
{
progpaymamount = conPeek(containFromRead,x);
}
}
hynimporttable.AccountingDate = accountingdate;
hynimporttable.PurchId = purchid;
hynimporttable.VendAccount = vendaccount;
hynimporttable.Line = line;
hynimporttable.TaxGroup = taxgroup;
hynimporttable.TaxItemGroup = taxitemgroup;
hynimporttable.PurchPoolId = poolid;
hynimporttable.DlvName = Dlvaname;
hynimporttable.DlvAddress = dlvaddress;
hynimporttable.DlvDate = dlvdate;
hynimporttable.CurrencyCode = currencycode;
hynimporttable.PaymTermId = PaymTermId;
hynimporttable.ItemId = itemid;
hynimporttable.ProcurementCategory = procurementcategory;
hynimporttable.ConfigId = configId;
hynimporttable.InventSiteId = siteId;
hynimporttable.InventLocationId = warehouseid;
hynimporttable.InventSizeId = inventSizeid;
hynimporttable.InventColorId = inventColorid;
hynimporttable.InventStyleId = inventStyleid;
hynimporttable.PurchQty = purchQty;
hynimporttable.PurchUnit = purchunit;
hynimporttable.PurchPrice = purchPrice;
hynimporttable.LineAmount = lineAmount;
hynimporttable.PurchReqId = PRid;
hynimporttable.DeliverRemainder = deliveryremainder;
hynimporttable.ProjId = ProjId;
hynimporttable.ProjCategoryId = ProjCategoryId;
hynimporttable.ApprovalStatus = Approvalstatus;
hynimporttable.Attention = Attention;
hynimporttable.POText = POtext;
hynimporttable.ProgPaymAmount = progpaymamount;
hynimporttable.insert();
containFromRead = commaTextIo.read();
}
ttsCommit;
info("done");
}
Ok selamat mencoba
SSRS (rsAccessDenied)
Baiklah Seminggu ini kami dihadapkan persiapan Go Live dan menghadapi kendala pada Report yang tidak bisa dibuka oleh user.
Kendalanya seperti berikut : Report yang ada di menu AX2012 bisa running/terbuka oleh user yang masuk group administrator. User yang tidak termasuk didalamnya tidak bisa membukanya, system mengeluarkan message error seperti berikut
"Error while setting server report parameters. Error message: The permissions granted to user '[DOMAIN\USERNAME]' are insufficient for performing this operation. (rsAccessDenied)"
untuk mengatasi hal ini kita bisa menambahkan permision untuk user2 tersebut di
http://(SSRSREPORTSERVERNAME)/Reports/Pages/Folder.aspx
anda bisa membukanya dibrowser anda.
SSRSREPORTSERVERNAME : nama server/ip address SSRS anda.
Jika sudah terbuka :
1.
pilih folder Report AXnya
2.
klik tombol Folder Setting
3.
Setelah itu klik menu Security yang ada di panel kiri, maka terbuka halaman list user yang mempunyai akses ke report2 AX2012. Anda bisa menambahkan user2 yang lainnya dengan mengklik tombol New Role Assignment.
Selanjutnya anda tinggal memasukan username user-user anda dan memilih report mana saja yang bisa dibuka oleh mereka.
Selamat mencoba.
Langganan:
Postingan (Atom)
Erorr CS1963 - An expression tree may not contain a dynamic operation.
Kali ini saya mendapatkan erorr dengan code CS1963, padahal sebelumnya saya sudah mendefinisikan 'var item in Model' di @foreach(var...
-
My code here is to copy Purchase Agreement line from reference Purchase Agreement to new Purchase Agreement. static void PSMCopydirecttoag...
-
If you want to try custom your notification, AX Standard can bring the user to the form where the information exist but when the form was...
-
"Error while setting server report parameters. Error Message: The item ´/DynamicsAx/PurchPurchaseOrderreport.Report4´ cannot be found ...