D365/AX7:Move the objects/Customisation/Elements from one model to another

Purpose :

Move the Objects/Customisation/Elements from one model to another model.

Example : Table “T” exists in Model “A”.Now developer wants to mode the table “T” from model “A” to a new model “B”.

Steps:

  1. Open your original project from where you want to move Objects/Customisation/Elements to a different model.
  2. Right click on project solution node, click on add a new project and set it as your model in which you want to move Objects/Customisation/Elements.
  3. Drag and drop the objects from your old model  to your newly created model.
  4. Rebuild and synch the models.

Cheers 🙂

Piyush Adhikari

 

 

 

D365/AX7:Post Inventory Adjustment/Movement/Transfer/Counting Journals using X++ Codes

Purpose

Post Inventory Adjustment/Movement/Transfer/Counting Journals using X++ Codes

Sample Code

[code language=”cpp”]

JournalCheckPost        journalCheckPost;

InventJournalTable inventJournalTable = inventJournalTable::Find(“Journal number”);

journalCheckPost = InventJournalCheckPost::newPostJournal(inventJournalTable);
journalCheckPost.parmThrowCheckFailed(false);
journalCheckPost.parmTransferErrors(NoYes::No);
journalCheckPost.run();

[/code]

D365/AX7:Post Transfer Order Shipment using X++ Codes

Purpose

Post Transfer Order Shipment using X++ Codes

Sample Code

[code language=”cpp”]

InventTransferParmTable             inventTransferParmTable;
InventTransferUpdShip                  inventTransferUpdShip;

inventTransferParmTable.clear();
inventTransferParmTable.initParmDefault();
inventTransferParmTable.ParmId = RunBaseMultiParm::getSysParmId();
inventTransferParmTable.TransferId = ‘transfer order number’;
inventTransferParmTable.UpdateType = InventTransferUpdateType::Shipment;
inventTransferParmTable.PrintTransferReceipt = NoYes::No;
inventTransferParmTable.ShipUpdateQty = InventTransferShipUpdateQty::All;
inventTransferParmTable.EditLines = NoYes::Yes;
inventTransferParmTable.ExplodeLines = NoYes::No;
inventTransferParmTable.TransDate = today(); //shipment date
inventTransferParmTable.InventDimFixedReceiveList = 0;
inventTransferUpdShip = InventTransferUpdShip::newParmBuffer(inventTransferParmTable);
inventTransferUpdShip.run();

[/code]

D365/AX7:Read & Parse JSON (JavaScript Object Notation) using X++

Purpose

Reading Json in Microsoft Dynamics AX/D365 is very common requirement in integration.Here we will use standard AX/D365 class RetailCommonWebAPI for reading JSON string.

Sample Code

[code language=”cpp”]

static void readJSON(Args _args)
{
mapEnumerator mapEnumerator;
Map data;
List testList;
str _jsonStr;
container test;
ListEnumerator listEnumerator;
int containerList;
Map map1;
int lengthIterate;
;
_jsonStr = ‘{“branchList”:[“601″,”602″,”603″,”604”]}’;
data = RetailCommonWebAPI::getMapFromJsonString(_jsonStr);
mapEnumerator = data.getEnumerator();
while (mapEnumerator.moveNext())
{
switch (mapEnumerator.currentKey())
{
case “branchList” :
test = mapEnumerator.currentValue();
testList =List::create(test);
listEnumerator = testList.getEnumerator();
while (listEnumerator.moveNext())
{
test = listEnumerator.current();
info(conpeek(test, 1));
}
break;
}
}
}

[/code]

Cheers 🙂

Piyush Adhikari

D365/AX7:Adding color to a form control of a standard or custom form by using event OnDisplayOptionInitialize

Here is the fixed for conditional coloring.

D365/AX7:OnDisplayOptionInitialize event is retrieving/getting always the first record

Requirement :

Adding color to “Product Name” string control of form “SalesTable” inside line grid.

Untitled

Sample Code & Instructions:

  1. Create a new class.
  2. Copy event handler method OnDisplayOptionInitialize of datasource “SalesLine” in form “SalesTable”.
  3. Paste the event handler method “OnDisplayOptionInitialize in class you created on step 1.[code language=”cpp”]/// ///
    ///
    ///

    ///
    ///
    [FormDataSourceEventHandler(formDataSourceStr(SalesTable, SalesLine), FormDataSourceEventType::DisplayOptionInitialize)]
    public static void SalesLine_OnDisplayOptionInitialize(FormDataSource sender, FormDataSourceEventArgs e)
    {
    FormDataSourceDisplayOptionInitializeEventArgs eventArgs = e as FormDataSourceDisplayOptionInitializeEventArgs;
    eventArgs.displayOption().affectedElementsByControl(sender.formRun().design(0).controlName(“ItemName”).id());
    eventArgs.displayOption().textColor(WinAPI::RGB2int(255,0,0));
    }[/code]

  4. Untitled

 

 

Cheers 🙂

Piyush Adhikari

 

D365/AX7/OData:Filter query on enum field of Data Entities

Requirement

Filter query on enum field of data entity.For example – To filter records of data entity BatchJobs on enum field “Status”

Sample Code:

https://XXXXXX.sandbox.operations.dynamics.com/data/BatchJobs?$filter=Status eq Microsoft.Dynamics.DataEntities.BatchStatus’Executing’

Cheers 🙂

Piyush Adhikari

D365/AX:Import records from CSV file into D365/AX table using X++ code

Requirement

Import records from CSV file into D365/AX table using X++ code.

Sample Code

[code language=”cpp”]

class ACXInventBatchImport
{
public static void main(Args _args)
{
AsciiStreamIo file;
Array fileLines;
FileUploadTemporaryStorageResult fileUpload;
ItemId itemId;
InventBatchId inventBatchId;
MaximumRetailPrice_IN mrp, mrpMultiple;
AcxMfgInventBatchId mfgInventBatchID;
ExpirationDate expDate;
real qtyMultiple;
InventTable inventTable;

//Upload a file
fileUpload = File::GetFileFromUser() as FileUploadTemporaryStorageResult;
file = AsciiStreamIo::constructForRead(fileUpload.openResult());
if (file)
{
if (file.status())
{
throw error(“@SYS52680”);
}
file.inFieldDelimiter(‘,’); // CSV must have Comma , separator
file.inRecordDelimiter(‘\r\n’);
}

//Read a CSV File
container rec;
while (!file.status())
{
rec = file.read();
if (conLen(rec))
{
itemId = conPeek(rec,1);
inventBatchId = conPeek(rec,2);
mrp = str2Num(conPeek(rec,3));
mrpMultiple = str2Num(conPeek(rec,4));
mfgInventBatchID = conPeek(rec,5);
qtyMultiple = str2Num(conPeek(rec,6));
expDate = str2Date(conPeek(rec,7), 123);

select firstonly1 inventTable
where inventTable.ItemId == itemId;
if (inventTable.RecId)
{
InventBatch inventBatch = InventBatch::find(inventBatchId, itemId, true);
if (inventBatch.RecId == 0)
{
inventBatch.clear();
inventBatch.itemId = itemId;
inventBatch.inventBatchId = InventBatchId;
inventBatch.AcxMfgInventBatchId = mfgInventBatchID;
inventBatch.prodDate = today();
inventBatch.AcxMaximumRetailPrice_IN = mrp;
inventBatch.AcxMaximumRetailPrice_INMultiples = mrpMultiple;
inventBatch.AcxQtyMultiples = qtyMultiple;
inventBatch.expDate = expDate;
inventBatch.insert();
}
else
{
ttsbegin;
inventBatch.AcxMfgInventBatchId = mfgInventBatchID;
inventBatch.AcxMaximumRetailPrice_IN = mrp;
inventBatch.AcxMaximumRetailPrice_INMultiples = mrpMultiple;
inventBatch.AcxQtyMultiples = qtyMultiple;
inventBatch.expDate = expDate;
inventBatch.doUpdate();
ttscommit;
}
}
else
{
error(strfmt(‘Item Doesnot Exists.Item Code = %1’, itemId));
}
}
}
info(“done”);
}

}

[/code]

Cheers 🙂

Piyush Adhikari

 

D365/AX:Export or download records into CSV file or format from D365 Finance & Operations Environment using X++

Requirement

Export or download records into CSV file or format from D365 Finance & Operations Environment using X++ Code.

Sample Code

[code language=”cpp”]

class ACXExportCSV
{
public void export()
{
CommaStreamIo commaStreamIo = CommaStreamIo::constructForWrite();
InventTable inventTable;
InventSum inventSum;

;

const str fileName = ‘Export.csv’;
commaStreamIo.writeExp([‘Item Code’, ‘Item Name’, ‘Available Physical’]);
while select * from inventTable
{
select sum(AvailPhysical) from inventSum
where inventSum.ItemId == inventTable.ItemId;
commaStreamIo.writeExp([strFmt(‘%1’, inventTable.ItemId), strFmt(‘%1’, inventTable.itemName()), strFmt(‘%1’, inventSum.AvailPhysical)]);
}
System.IO.Stream stream = commaStreamIo.getStream();
stream.Position = 0;

FileUploadTemporaryStorageResult result = File::SendFileToTempStore_GetResult(stream, fileName);
info(result.getDownloadUrl());
Message::Add(MessageSeverity::Informational, result.getDownloadUrl());

}

}

[/code]

Cheers 🙂

Piyush Adhikari

 

 

D365/AX7:Call any method of caller form in a class or any other form or Extension etc.

Call any method of caller form into a class or any other form

Requirement

Here is very impressive piece of code for calling any method of custom or base form in a class or any form.

In standard form “PurchCreateFromSalesOrder” there is a base method specifyVendAccount which i need to call on extension class of form “PurchCreateFromSalesOrder” on the modification of a new custom control i have created separately on the same form “PurchCreateFromSalesOrder“.

Sample Code With Explanation

I created one class and a new event method.

[FormControlEventHandler(formControlStr(PurchCreateFromSalesOrder, FormStringControl1), FormControlEventType::Modified)]
public static void FormStringControl1_OnModified(FormControl sender, FormControlEventArgs e)
{
FormRun formRun =sender.formRun();
SalesLine salesLine;
FormDataSource formDataSource;
Object formRunObject;
;
salesLine = SalesLine::findRecId(68719716393);
formRunObject = formRun.dataSource(1);
formRunObject.specifyVendAccount(true, SalesLine, ‘INMF-000001’); //here i am calling the method of  form datasource 🙂
formRun.dataSource(1).write();
formRun.dataSource(1).research(true);
formRun.dataSource(1).refresh();
}

Cheers 🙂

Piyush Adhikari

D365/AX7:Cannot save K:\AosService\PackagesLocalDirectory…The Model XXXX is locked & cannot be edited.

Issue

Cannot save K:\AosService\PackagesLocalDirectory…The Model XXXX is locked & cannot be edited

 

Resolution

Go to Dynamics 365 – Model Management – Update Model Parameters

Select Model Name and untick boolean LOCKED.

Untitled