Rabu, 13 Desember 2023

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 item in Model)
{
    ...
}

tetapi tidak bisa di panggil dengan erorr CS1963, 'Lah kok bisa??'

Jawabannya adalah kita harus mendefinisikan terlebih dahulu 'model' nya. Kita bisa defisikan diline paling awal.

@model IEnumerable<TestPhotosharing.Models.Photo>

setelah ditambahkan maka = No issue found

 

Cara menginstall Nugget Pacckage pada MS Visual Studio

Pada Project Visual Studio anda, klik menu bar :

Tools > Nugget Package Manager > Manage Nugget for solution

pada field Browse ketik package yang anda cari.

contoh EntityFrameworkCore.SqlServer


Pilih package yang anda mau. Pada panel sebelah kanan pilih project yang akan menggunakan package.
dibawahnya ada field version. pilih version yang sesuai dengan .Net Framework yang terinstall/terattach dengan versi Visual studio anda.
contoh Visual Studio saya 2022 dengan .Net Framework version 7.0.12
maka saya pilih Entitiframework.sqlserver versi 7.0.0 , kenapa tidak yang sama?.. coba saja.

setelah berhasil terinstall tambahkan Pakcage itu kedalam project dengan cara.

Tools > Nugget Package Manager > Package Manager Console :

Install-Package [nama package] -version [versi]

setelah selesai.

coba cek pada Solution Explore>Dependecies>Packages


.Net Framework pada Komputer anda

Jadi ceritanya saya mendapatkan file latihan ASP.Net MVC dari instruktur saya. Tapi ternyata pada saat dirunning filenya erorr dengan menyebutkan saya harus mengupdate .Net Framework pada komputer saya. Padahal .Net Framework dikomputer saya sudah Update ke version 7, 
Tapi kok masih minta update, Lah kok bisa?

Jadi dikomputer saya ada 3 versi Visual Studio dan masing-masing visual studio membawa .Net Framework masing-masing. Visual studio yang terakhir saya install dikomputer saya adalah versi 2022 sehingga dikomputer saya terinstall versi .Net Framework versi 6 dan 7.

Pada saat kita membuka project .sln langsung dikomputer kita Visual studio tidak menampilkan .Net Framework mana yang akan anda pakai, Defaultnya akan memakai .Net Framework yang sebelumnya.
Sedangkan environment visual studio yang anda pakai untuk membuka file .sln adalah Visual studio 2022 yang terhubung dengan .Net Framework 7. maka terjadilah ke ambiguan dan menampilkan erorr message menyarankan anda untuk mengupdate .Net Framework.

Saat ini saya belum berhasil mengeliminasi .Net Framework versi sebelumnya dan hanya meninggalkan .Net Framework versi terbaru. Bahkan dengan .Net Uninstall Tool yang saya dapat.
Informasi yang saya dapat kenapa tidak berhasil karena .Net Framework-.Net Framework yang terintsall  dikomputer saya masih berkaitan dengan Visual Studio dengan versi2 yang sbeelumnya yang sudah terinstall dikomputer saya.

cara menampilkan informasi .Net Framework
pada command promft ketik
dotnet --info

maka komputer akan memperlihatkan informasi .Net yang terinstall.

Selasa, 31 Oktober 2023

Update IsBlockedformanualEntry di Mainaccount

DimensionAttributeValue dimAttrValue;
    DimensionAttribute      mainAccountDimAttribute;
    MainAccount             mainaccount;

    // If creating from template, then the DimensionAttributeValue datasource hasn't
    // been initialized yet. Return value from the template instead
    /*
    if (!templateAppliedCompletely && mainAccountTemplate)
    {
        return mainAccountTemplate.IsBlockedForManualEntry;
    }*/
    
    select mainAccountDimAttribute
    where mainAccountDimAttribute.Name == "MainAccount";
    info(strFmt("%1", mainAccountDimAttribute.RecId));
    
    select * from mainaccount
    where mainaccount.MainAccountId == "1601001";
    //&& mainaccount.dataAreaId == "psm";
    
    Select forupdate dimAttrValue
    where dimAttrValue.DimensionAttribute == mainAccountDimAttribute.RecId 
    && dimAttrValue.EntityInstance ==mainaccount.RecId; 
    ttsBegin;
        dimAttrValue.IsBlockedForManualEntry = NoYes::No;
        dimAttrValue.update();
    ttsCommit;
    
    info("done");

Senin, 02 Oktober 2023

Refresh datasource

Ini hal sepele tapi sering terlupakan oleh kebanyakan Programmer.
Memberikan konfirmasi kepada user/pengguna berkaitan dengan action/trigger yang diberikan user.

Konfirmasi ini menjadi bagian komunikasi antara system dengan user sehingga menjadi salahsatu esensial apakah aplikasi yang dibangun userfriendly atau ribet.

Put this code in your clicked() method 

if(Box::okCancel("[isi dengan informasi yang menyatakan keputusan user yang akan diambil contoh : "apakah anda akan menggenerate journal pembayaran?"]", DialogButton::Cancel) == DialogButton::Ok)
    { 

                super();

                datasource_ds.refresh();
                datasource_ds.reread();
                datasource_ds.research(true);
                //tiga mtheod datasource ini akan merefres dan mereturn hasil/output dari sebuah proses.

     }

Senin, 21 Agustus 2023

Relasi antara MainAccount, DimensionAttribute dan DimensionAttibuteValue

Jika kita akan mengakses DimensionAttributeValue melalui MainAccountId bisa menggunakan relasi berikut :

Select RecId from MainAccount
Where MainAccount.MainAccountId == "1603008";

MainAccount.RecId = 5637144716

Kebetulan saya sudah bisa mendefisnikan nomor RecId yang tersimpan di DimensionAttibute, karena main account 1603008 merupakan "Main Account"

DimensionAttribute.RecId = 5637144583

Maka SQL statement untuk DimensionAttibuteValue :

Select DimensionAttributeValue 
where DimensionAttributeValue.DimensionAttribute = DimensionAttribute.RecId
&& DimensionAttributeValue.EntityInstance = MainAccount.RecId

Minggu, 06 Agustus 2023

Membuat UTCdatetime untuk Awal tahun dan akhir tahun

contoh :

Int            tahuncur;
    TransDate       awaltahun;
    Transdate       ahirtahun;
    
    utcDateTime     awalTahunUTC;
    utcDateTime     ahirTahunUTC;
    ;
    
    tahuncur = 2023;
    awaltahun = mkDate(1,1,tahuncur);
    ahirtahun = mkDate(31,12,tahuncur);
    
    //convert to UTCdatetime
    awalTahunUTC = DateTimeUtil::newDateTime(awaltahun,0);
    ahirTahunUTC = DateTimeUtil::newDateTime(ahirtahun,86399);//86400
    
    info(strFmt("awal tahun %1, akhir tahun %2, UTCdattime awal %3, UTCdatetime ahir %4", awaltahun,ahirtahun,awalTahunUTC,ahirTahunUTC));

maka outputnya :

awal tahun 01/01/2023, akhir tahun 31/12/2023, UTCdattime awal 01/01/2023 00:00:00, UTCdatetime ahir 31/12/2023 23:59:59

jika diganti dengan

//convert to UTCdatetime
    awalTahunUTC = DateTimeUtil::newDateTime(awaltahun,0);
    ahirTahunUTC = DateTimeUtil::newDateTime(ahirtahun,86400);

Maka outputnya :
awal tahun 01/01/2023, akhir tahun 31/12/2023, UTCdattime awal 01/01/2023 00:00:00, UTCdatetime ahir 01/01/2024 00:00:00



Referensi :

https://www.tech.alirazazaidi.com/date-to-utcdatetime-convertion-dynamics-ax-2012/

Jumat, 07 Juli 2023

Table Attachment

Untuk attachment tersimpan pada table docuRef

Field index yang dipakai adalah RefTableId dan RefRecId.

RefTableId, dipakai untuk value TableId yang dipakai attachment.
RefRecId, dipakai untuk value RecId sebuah record.

Contoh Query :

RSMmdPlasmaRegister     data;
RS_PlasmaFarmer             farmer;
docuRef                             docuRef, docuRefNew;

data = RSMmdPlasmaRegister::find(_recId, true);

//mencari record pada table docuRef basedon TableId dan RecId
while select docuRef
        where docuRef.RefTableId == data.TableId &&
        docuRef.RefRecId == data.RecId
    {
        docuRefNew.clear();
        docuRefNew.data(docuRef);
        docuRefNew.RefTableId = _targetTableId;
        docuRefNew.RefRecId = _targetRecId;
        docuRefNew.insert();
    }

Rabu, 05 Juli 2023

Senin, 03 Juli 2023

memperingan method Display

[SysClientCacheDataMethodAttribute(true)] 

menurut info bisa mempercepat proses menampilkan data 

sumber :

https://robscode.onl/x-caching-of-display-methods-via-attribute-2/

Jumat, 16 Juni 2023

Failed Full Cill

Go to table SYSLASTVALUE

than delete record -AutoSem

Matikan semua AOS yang sedang berjalan
masuk ke Database AX dan delete record -AutoSem di table SYSLASTVALUE
Hidupkan kembali AOS dan coba full cill lagi

Senin, 29 Mei 2023

How to force complete CIL recreation in MS Dynamics AX 2012

https://cloudblogs.microsoft.com/dynamics365/no-audience/2014/06/22/how-to-force-complete-cil-recreation-in-ms-dynamics-ax-2012/

Cancel and Correct Packingslip

Class yang mengontrol tombol Cancel dan Correct PackingSlip bisa dilihat di sini :

VendPackingSlipJourFormHelper.canPackingSlipBeCanceledOrCorrected()

public static server container canPackingSlipBeCanceledOrCorrected(VendPackingSlipJour _vendPackingSlipJour)
{
    boolean     canBeCorrected;
    boolean     canBeCanceled;
    boolean     isIntercompanyDirectDelivery;
    PurchTable  purchTable = _vendPackingSlipJour.purchTable();

    isIntercompanyDirectDelivery = purchTable.InterCompanyDirectDelivery && purchTable.isInterCompanyOrder();
    /* Remark by Husna untuk form Berita Acara GRN 20220214
    canBeCorrected = !isIntercompanyDirectDelivery && !_vendPackingSlipJour.isCanceled() && !_vendPackingSlipJour.isFullyInvoiced();
    canBeCanceled  = canBeCorrected && !_vendPackingSlipJour.isInvoiceMatched();
    */

    canBeCorrected = !isIntercompanyDirectDelivery && !_vendPackingSlipJour.isCanceled() && !_vendPackingSlipJour.isFullyInvoiced() && _vendPackingSlipJour.PSMAllowrevisi(); //add by Husna untuk form berita acara GRN 20220214
    canBeCanceled  = canBeCorrected && !_vendPackingSlipJour.isInvoiceMatched() && _vendPackingSlipJour.PSMAllowrevisi(); //add by Husna untuk form berita acara GRN 20220214

    return [canBeCanceled, canBeCorrected];
}

Jumat, 26 Mei 2023

X++ Exception: Workitem could not be created, Insufficient right to user ...

Error ini memang tidak specific merujuk pada sebuah lines logic dari sebuah class sehingga beberapa kasus bisa membingungkan.
kebetulan pada kasus saya terjadi karena setup Query yang menjadi reference class WorkflowtypeDocument.

Pada saat anda membuka Workflowtype anda, anda akan melihat properties DocumentMenuItem sesuai dengan menuitem sebuah form yang mempunyai Workflow. tetapi anehnya system mengatakan tidak mempunyai akses kesana.
anda sudah cekda mencoba login dengan user_account yang dipilih, tetap bisa menampilkan Form menuitemnya.

Pada Kasus saya terjadi karena :
Error ini terjadi di Query yang anda Setup.
Misalkan : Form A yang mempunyai 1 Parent dan 2 Child Table.
Anda definisikan Parent dengan table A
                             dengan child1 table B
                             table B mempunyai child table C.
                             status Join = InnerJoin

Maka jika Entrian tablenya ternyata ada yang kosong disalah satu tablenya system akan Error dengan mengatakan "Workitem could not be created, Insufficient right to user"
                    "X++ Exception: The workflow system could not access the business document data. Report this issue to your system administrator"

Bahkan dengan Akun Pusaka/System Administrator pun tidak akan mampu memecakan error ini.

Analisis :
setelah saya coba tampilkan Query ini kedalam sebuah View, dengan resource field hanya dari table parent saja, jumlah record/data itu kurang dari actualnya. 
di actual ada 3 record
di view hanya 2 record.
1 lagi kemana?
karena record 1 lagi hanya mempunyai data ditable A dan B, sdangan C kosong.

Masuk akal memang, anda mendefinisikan Querynya dengan 3 sumber data tetapi yang informasi yang akan di sampaikan ke Workitem tidak lengkap, salah satu table tidak mempunyai data.

Jadi untuk menghindari error ini pastikan kebutuhan anda. Jika memang Datasource tidak harus semuanya terisi maka pilih datasource/table yang diprlukan saja/mandatory. 

salah satu sumber bantuan :
https://workflowax.wordpress.com/2012/05/02/x-exception-workitem-could-not-be-created/

Kamis, 04 Mei 2023

Menambahkan main account dengan x++

https://rrabbani.blogspot.com/2017/08/dynamics-ax-365-create-main-account.html?sc=1683269975150#c3783525751097406839

Menggunakan MainAccountContract,MainAccountCategory claSS

Selasa, 14 Maret 2023

Journal AP tidak bisa posting karena "None"

https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/433894/payment-journal-error-settlement-type-none

Senin, 13 Maret 2023

Kamis, 16 Februari 2023

Membuat lookup field dengan multiple tab

https://vardhan24.blogspot.com/2013/12/form-as-lookup-with-multi-tab-page.html?sc=1676618365721#c1296563064538208160

Faster performance Display

Gunakan 

[SysClientCacheDataMethodAttribute]

https://community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/178319/display-method-performance-issue

Rabu, 25 Januari 2023

Setup format sequence number with year

Selain bisa dengan penggabungan antara parameter tahun + Setup sequence number, Pendefinisian squence number menggunakan format tahun juga bisa dilakukan pada sequence number itu sendiri.

contoh,

buat Sequence number dan setup field parameternya.



Pada field :
Scoope : pilih company
Company : pilih entiti company
Periodic reset : Yearly
PerProject :

Pada segment :
Constant : MRIS~y (menggunakan cacing)
Alphanumeric : diisi sesuai keinginan

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...