Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Cari Blog Ini

02 Agustus 2023

Dynamics AX 2012 Workflow Stopped error: The SQL database has issued an error.

 Terjadi error workflow dengan tampilan seperti ini:

Stopped (error): session 113 (Sync) UPDATE T1 SET ACCOUNTINGEVENT=5638165117,RECVERSION=786788108 FROM ACCOUNTINGDISTRIBUTION T1 WITH (INDEX(I_7452SOURCEDOCUMENTHEADERIDX)) CROSS JOIN SOURCEDOCUMENTLINE T2 WHERE (((T1.PARTITION=5637144576) AND (T1.ACCOUNTINGEVENT=0) AND (T1.ACCOUNTINGDATE={ d''})) AND (T1.SOURCEDOCUMENTHEADER=5638834650)) AND ((T2.RECID=T1.SOURCEDOCUMENTLINE) AND (T2.ACCOUNTINGSTATUS=4 OR T2.ACCOUNTINGSTATUS=6)) AND (T2.PARTITION=5637144576) [Microsoft][SQL Server Native Client 10.0][SQL Server]Conversion failed when converting date and/or 
time from character string. Object Server 01:  Cannot execute the required database operation.
The SQL database has issued an error.

Penyebabnya adalah tidak disetnya AccountingDate pada tabel PurchReqTable dan PurchReqLine. Kenapa terjadi seperti itu? Tidak tau. Karena secara default harusnya accounting date terisi dengan tanggal saat dibuat.

Solusinya:

Isi accounting date di kedua table tersebut dan pada tabel AccountingDistribution yang berhubungan. (Link melalui table SourceDocumentHeader dan SourceDocumentLine).


Referensi dan ide:

sql server - Dynamics AX 2012: Conversion failed when converting date and/or time from character string - Stack Overflow






26 Mei 2023

Dynamics AX 2012 parameter Args with record

Suatu saat terjadi hal aneh di AX. Dimana ketika user menekan tombol proses, tetapi record yang terupdate bukan record yang dipilih. Saya coba reporduksi bagaimana error tersebut terjadi, namun tidak berhasil. Apa yang saya coba sesuai dengan yang diharapkan. Hingga suatu saat secara tidak sengaja ada rekan saat mencoba fitur baru, dia menekan sebuah tombol dimana tombol tersebut menampilkan dialog terlebih dahulu. Dialog tersebut tanpa modal, setelah dialog muncul, user tetap bisa interaksi dengan form, termasuk menggeser pilihan record yang terpilih. Ternyata ketika dialog muncul dan user menggeser pilihan row maka yang terproses adalah pilihan row yang baru dipilih. Bukan row yang dipilih sebelum dialog tersebut muncul. 

Ternyata di AX jika kita memakai arg.record() sebagai data terpilih, data tersebut bersifat byref (mengambil istilah VB). Jadi ketika user mengganti pilihan record, maka data ikut berubah.

Contoh source dibawah ini:

public static void main(Args arg)
{
    Dialog dlg = new Dialog("TEST");
    
    CustTable tbl = arg.record();
    
    dlg.addText(tbl.AccountNum);
    if (dlg.run())
    {
        info("Selected: " + tbl.AccountNum );
    }
}

Code diatas adalah dialam sebuah Class yang dipanggil oleh MenuAction, dan menu Action menempel pada form yang memiliki data source tabel "CustTable"

Ketika saya pilih baris pertama (kode: 000001), maka tampilan dialog seperti dibawah ini:


Terlihat yang ditampilkan dialog adalah sesuai. Namun kemudian saya pilih row yang lain saat dialog tersebut masih muncul (karena bukan modal).

Terlihat dialog masih menampilkan record awal. Namun saat saya tekan tombol OK maka record yang dipilih ternyata sesuai pilihan terakhir.


Ternyata berbahaya sekali. Karena bisa salah update/proses data. Solusi untuk kasus ini adalah dengan menjadikan dialog menjadi modal. Lihat caranya disini: System Modal Dialog - Microsoft Dynamics AX Forum Community Forum

Cara kedua adalah membiarkan dialog tanpa modal, namun data yang diproses benar, yaitu dengan mengubah code menjadi dibawah ini:

public static void main(Args arg)
{
    Dialog dlg = new Dialog("TEST");
    
    //OLD CODE CustTable tbl = arg.record();
    CustTable tbl = CustTable::findRecId(arg.record().RecId);
    
    dlg.addText(tbl.AccountNum);
    if (dlg.run())
    {
        info("Selected: " + tbl.AccountNum );
    }
}

Pada code yang saya warna biru terlihat variabel tbl bukan dari arg.record() lagi namun query lagi dengan mengambil arg.record().recId. Hasilnya seperti gambar dibawah ini.



19 Januari 2023

Windows server upgrade muter-muter terus (infinite loading/searching)...

 Pada suatu saat saya ingin upgrade veeam yang ada di server backup windows server 2012. Untuk upgrade diharuskan mengupgrade juga powershellnya. Maka saya cari cara untuk upgrade powershellnya, dan dipatkan cukup download offline update dan menjalankannya.

Ternyata tidak berhasil, setelah dijalankan hanya terlihat progress putar-putar. Saya pikir lagi proses download lagi dan lama. Maka saya biarkan sampai 1 hari. Ternyata masih seperti itu. Hmm ada yang tidak beres ini.


Alhamdulillah masalahnya sudah terpecahkan. Server tersebut terkonek ke WSUS untuk update, dan server tersebut pernah saya clone yang mengakibatkan ID server di WSUS nya dobel. Untuk itu maka lakukan hal dibawah ini:

net stop bits
net stop wuauserv
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientIDValidation /f
rd /s /q "%SystemRoot%\SoftwareDistribution"
net start bits
net start wuauserv
wuauclt /resetauthorization /detectnow
PowerShell.exe (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()

Fungsi command diatas adalah untuk mereset registrasi server di wsus.