Thursday 19 September 2019

D365FO - Importing License File (ISV/VAR Add-on) via deployable package (LCS)

In order to deploy this license file to, we need to do the following. 

It is a two-step process 

1. Copy license file to ImportISLicense.Zip folder 
Any AOS server:

Windows Explorer > \AOSService\PackagesLocalDirectory\Bin\CustomDeployablePackage
*usually C:\AOSService\PackagesLocalDirectory\Bin\CustomDeployablePackage or on the K-drive*



In here you will find the file  ImportISVLicense.zip

Make a copy of this zip file and open it up (don't unzip, just open it). 
Then browse to the following location: ImportISVLicense.zip\AosService\Scripts\License
Copy the license .txt file into this folder and save the zip.




2. Upload to LCS packages 

LCS > Open the AX project in which you wish to apply the license to which in this case is the QA environment which means we need to open the implementation project. Then go to Asset library
Go to software deployable package > Click on the add button and fill out the info regarding the file being uploaded and select the zip file we created in the steps above


wait for a couple of minutes before the "valid" box has a checkmark. You will not be able to apply this file until the instance is marked as valid.

Once the instance has been marked as valid we need to apply it to the system.

Go to the full details page for the specific environment we need to apply this to and click on the Maintain option > Apply updates


apply+updates+menu.png (1045×401)
From this window, we need to choose the asset we just created and click on apply

After this, the system will process the request and trigger emails whenever the process starts and completes.

Whenever you open the main page you will also see the current status of the import itself as well.

Reference:

Friday 13 September 2019

D365 F&O X++ code to copy data form one table two other table with similar fields using SysdictTable

Today we will see a code, which is useful to copy data from one table to a similar table and let's say you have many fields.



public static Common copyFromToTable(Common _commonFrom, Common _commonTo)
    {
        SysDictTable    dictTable = new SysDictTable(_commonTo.TableId);
        SysDictField    dictField;
        FieldId         fieldId = dictTable.fieldNext(0);
       
        while (fieldId)
        {
            dictField = dictTable.fieldObject(fieldId);

            if (dictField.isSql() && !dictField.isSystem())
            {
                FieldName fieldName = dictField.name();
                FieldId fieldIdFrom = fieldName2Id(_commonFrom.TableId, fieldName);

                if (fieldIdFrom)
                {
                    _commonTo.(dictField.id()) = _commonFrom.(fieldIdFrom);
                }
            }

            fieldId = dictTable.fieldNext(fieldId);
        }

        return _commonTo;
    }

Monday 13 May 2019

D365 Disable grid field based on other field value

Disable grid field based on other field value in D365 FO


Here we will see how we can disable field in the grid based on the other field value.
1. Create a call extension for the form
2. Goto From the data source and in events copay active event
3. come to class you created in step one and past it.
4. Below is the sample code. 

[ExtensionOf(formStr(FormParameters))]
final class ParametersFormUP_Extension
{
   
    ///
    /// for UsagePrice the Group should must be disabled
    ///
    ///
    ///
    [FormDataSourceEventHandler(formDataSourceStr(FormParameters,FormDatasource), FormDataSourceEventType::Activated)]
    public static void FormDatasource_OnActivated(FormDataSource sender, FormDataSourceEventArgs e)
    {
        FormDataSource              fds = sender.formRun().dataSource(formDataSourceStr(FormParameters,FormDatasource));
        FormDatasourceTable       dsTable = fds.cursor();
        FormRun                     fr = sender.formRun();
        //FormControl                 fc = fr.design(0).controlName("FINMeters_FINRollover");
        //FormControl                 fcMeterType = fr.design(0).controlName("FINMeters_FINMeterType");

        //fc.enabled(meterTable.FINMeterType == FINMeterType::Continuous);
       
        fds.object(fieldNum(FormDatasourceTable ,fieldForGroup)).allowEdit(!(dsTable.AgreementType == AgreementType::UsagePricing));

    }

}

Thursday 18 April 2019

Cross reference alternative D365 FO

FindStr


Today we are going to look interesting stuff, which can be very handy for the developers. This is nothing but, FindStr windows command, which searches for the patterns of text in files.


As everyone is aware of the thing that, in D365FO all the objects i.e. Tables, forms, classes, etc are stored as files (XML's). So it makes sense that, we use can use the Windows command to find the files. 

Now we will see how we can use the FindStr command. 

1. Open command prompt (as administrator)
2. Change to Package directory (CD ) Ex: C: cd K:\AosService\PackagesLocalDirectory\XXXModel\XXXModel
3.  FindStr /S /L /I  /C:"serachText"*.xml

it will give you the result similar to cross-reference 

Sunday 3 March 2019

Form Lookup Event Handler D365FO

Here we are going to see how we can filter / override the lookup on the form control.

Scenario, we need to override the TemplateID lookup based on the ProjGroupId field.

1. First we need to copy the OnLookup event on the form field control.


2. Create a new class and past the above event
 ///
    ///
    ///
    ///
    ///
    [FormControlEventHandler(formControlStr(MkQuoteCreate, TemplateId), FormControlEventType::Lookup)]
    public static void TemplateId_OnLookup(FormControl sender, FormControlEventArgs e)
    {
//
    }
 
3. Now the actual lookup code.

 FormRun                     callerFormRun;
        MKQuotations          quotations;
//Get the Data source of the form
        quotations = sender.dataSourceObject().cursor();
        Query                       query = new Query();
        QueryBuildDataSource        queryBuildDataSource;
        QueryBuildRange             queryBuildRange;
        SysTableLookup              sysTableLookup = SysTableLookup::newParameters(tableNum(MKTemplateTable), sender);
        sysTableLookup.addLookupField(fieldNum(MKTemplateTable, TemplateId));
        sysTableLookup.addLookupField(fieldNum(MKTemplateTable, Description));
        queryBuildDataSource = query.addDataSource(tableNum(MKTemplateTable));
        queryBuildRange = queryBuildDataSource.addRange(fieldNum(MKTemplateTable, ProjGroupId));
        queryBuildRange.value(quotations.ProjGroupId);
        sysTableLookup.parmQuery(query);
        sysTableLookup.performFormLookup();

 FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
        //cancel super() to prevent error.
        if (ce)
        {
            ce.CancelSuperCall();
        }


A few things we can note here are...
1. To get the Datasource cursor we need to use the "sender" parameter as below.

quotations= sender.dataSourceObject().cursor();
Eg:
 ecoResProduct   = sender.formRun().dataSource(formDataSourceStr(EcoResProductDetailsExtended, EcoResProduct)).cursor();





   

Update NuGet package to new MS D365FO version

1. Import the NuGet package files from LCS for that particular version please take the PU version files only. a. Goto LCS-->Asset Libra...