Rabu, 07 April 2021

Membuat string sql statement dan mengeksekusinya

Masih inget dengan programming diJava?... 
Bagaimana kita mengquery data dalam sebuah table?.
kita akan mendefinisikan Sql statmentnnya dalam sebuah string.

string        sqlstmt;
;
sqlstmt = "Select * from Mahasiswa";

atau

String     namatable;
String     sqlstmt;

;

namatable = "Mahasiswa";
sqlstmt = "Select * from "+namatable;

conn.execute(sqlstmt) //begitu kalo ga salah kalo diJava :D

Sekarang kita akan melakukannya di AX dengan bahasa x++
dengan menggunakan class
> Connection
> Statement

void Sample_1(void)

{
Connection Con = new Connection();
Statement Stmt = Con.createStatement();
ResultSet R =Stmt.executeQuery(‘SELECT VALUE FROM SQLSYSTEMVARIABLES’);

while ( R.next() )
{
print R.getString(1);
}
}


https://msdax.wordpress.com/2010/06/21/executing-sql-directly-from-x/

Minggu, 21 Februari 2021

Menambahkan file .dll untuk bisa dikenali AX

Tempatkan file .dll di alamat directory 

C:\Program Files\Microsoft Dynamics AX\60\Server\<aosname>\bin

https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/153699/adding-a-dll-to-ax-in-server-and-refer-it-in-code?pifragment-96834=1

Jumat, 29 Januari 2021

Memutus proses Workflow diAX

Relasi antara
WorkflowTrackingstatusTable dengan WorkflowWorkItemTable

WorkflowTrackingstatusTable.CorelationId <> WorkflowWorkItemTable.CorelationId

Kita akan mengupdate worklfow yang masih berjalan menjadi seolah2 sudah selesai.

Pertama masuk ke View detail menuitemnya.
lalu lihat dan klik kanan>record info pada lines informasi status workflow maka didapat RecId dari WorkflowTrackingstatusTable.

Step pertama : membuat status WFnya = "Completed"
> setelah itu dapatkan WorkflowTrackingstatusTable.CorelationId based on WorkflowTrackingstatusTable.recId. 
> rubah statusnya menjadi "Completed".

Step kedua : delete WorkItem/user yang salah alamat
> dengan value WorkflowTrackingstatusTable.CorelationId dapatkan record2 workitem pada table WorkflowWorkItemTable dengan cara query relasi antara :
WorkflowTrackingstatusTable.CorelationId <> WorkflowWorkItemTable.CorelationId.
> pilih User user ID yang akan didelete recordnya.

Step ketiga : rubah status dokumen menjadi "Approved"


Minggu, 01 November 2020

Custom form Listpage

Jangan kaget jika kita mendapati form Listpage yang kita kerjakan tidak mempunyai fitur Overwrite method. 
untuk mengcustom atau menambah method di form listpage kita bisa merubahnya di class yang memanage form listpage itu. seperti class controlnya.
contoh untuk mengcustom form PurchTableListPage maka maka custom classnya ada di PurchTableListPageInteraction.

mari kita sebut class ini, class interaction.

setujruh??

Membuat custom workflow dari awal

Ada beberapa referensi untuk membuat workflow untuk form yang kita buat.
Saya menggunakan referensi dari link ini :

https://www.tech.alirazazaidi.com/custom-workflow-from-scratch-dynamics-ax-2012/

Minggu, 11 Oktober 2020

Get value VendTransOpen.Duedate and update LedgerJournalLines.Due with VendTransOpen.Duedate

Classes CustVendOpenTransManager
Classes VendOpenTransform

Jadi kita akan melakukan custom pada modul AP-Journal payment. terutama pada VendTransOpen.Duedate.

Skenario :
pada saat user memilih Open Settlement (VendTransOpen form), value VendTransOpen.duedate dapat dikopi dan masukan ke table LedgerjournalTrans.Due.

Caranya adalah.
custom class CustVendOpenTransManager.updateOriginatorForMarkedTrans

LedgerJournalTrans ledgerJournalTrans;
    BankThirdPartyAccountId firstVendBank;
    SalesTable salesTable;
    PurchTable purchTable;
    NoYes autoSettlement;

    // <GIN>
    LedgerJournalType           ledgerJournalType;
    TaxWithholdAuthorities_IN   taxWithholdAuthorities;
    // </GIN>

    // <GEEU>
    CustInvoiceJour custInvoiceJour;
    CustInvoiceJour_RU custInvoiceJourRU;
    // </GEEU>

    DueDate         duedateAP;//Add husna 20201011

    if (specTransManager.getSpecTransCount() > 0)
    {
        // If transactions were marked, write data back to the originating record.
        switch(originator.TableId)
        {
            case tableNum(LedgerJournalTrans):
                ledgerJournalTrans = originator;
                duedateAP = vendOpenTransForm.getDuedatesettlement();//add husna 20201011
                ledgerJournalTrans.Due = duedateAP;//add husna 20201011

lalu
di class VendOpenTransform buat sebuah method getDuedatesettlement()
public DueDate getDuedatesettlement()
{
    DueDate             duedatesettlement;
    SpecTrans               specTrans;

    if (!diffVendBankExist)
    {
        select firstOnly RecId, RefTableId, RefCompany, RefRecId from specTrans
            where specTrans.SpecRecId == originator.RecId;

        duedatesettlement = specTrans.vendTransOpen().DueDate;
    }

    return duedatesettlement;
}

Cloud hosted environment di D365

Biasanya kita menginginkan sebuah environment yang sama dengan LIVE/PROD untuk mengtest sebuah proses. Maka kita bisa menggunakan fitur Clou...