https://www.youtube.com/watch?v=0RLV4wvA1-o
How to install Adventure works database on local machine
Download and install SQL Server 2019 Developer Edition
Indentation short cut keys Dynamics 365 for finance and operations Visual Studio
D365 finance and operations used Visual studio as development environment. Yes I know that is old story, whats new here. I just document here, Just document not create.
I faced problem to indent code in visual studio. I found following keyboard command
CTRL+K and after CTRL+D
MB-300 Global Address book Dynamics 365 for finance and Operation Youtube video
How to hide Blank in Slicer – Power BI
Select slicer,Expand visual filter,and select advance filter and and select is not blank.

Custom Column, If Statement Power BI
Today I face simple requirement, I need count on Gender, Entered data most of employee did not filed Gender in ERP system. So it is decided we show These records as male.For this I have to edit query and add custom column and update its value with If Condition.
For this I have to edit Query in power BIAdd Custom column with Employee Gender and similar logic.
= if [Gender]= "None" then "Male"
else [Gender]
How to restore a Production database to the DevBox environment Dynamics 365 For Finance and Operations
This blog post is for my notes, you can find more details on Microsoft link.
There are some extra steps in the Microsoft link, which I never used. I usually follow only these steps and it works for me. So Instead I need to search on Microsoft link. I wrote this post for my future use.
Step 1: You have to restore production database to UAT and then from uat to export it to Asset library
Step 2: Download Backpac file in specific location
Step 3: Open Command prompt with run as administrator for locally hosted VM and go to following location
Cd C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin
Step 4: run the following command
SqlPackage.exe /a:import /sf:D:\Exportedbacpac\my.bacpac /tsn:localhost /tdn:<target database name> /p:CommandTimeout=1200
I modified the above statement as
SqlPackage.exe /a:import /sf:C:\Temp\hsauatbackup.bacpac /tsn:localhost /tdn:AxDb_6 /p:CommandTimeout=1200
Step 5: run the following command.
After the database is restored. Run the following command in SQL Server management
CREATE USER axdeployuser FROM LOGIN axdeployuser
EXEC sp_addrolemember 'db_owner', 'axdeployuser'
CREATE USER axdbadmin FROM LOGIN axdbadmin
EXEC sp_addrolemember 'db_owner', 'axdbadmin'
CREATE USER axmrruntimeuser FROM LOGIN axmrruntimeuser
EXEC sp_addrolemember 'db_datareader', 'axmrruntimeuser'
EXEC sp_addrolemember 'db_datawriter', 'axmrruntimeuser'
CREATE USER axretaildatasyncuser FROM LOGIN axretaildatasyncuser
EXEC sp_addrolemember 'DataSyncUsersRole', 'axretaildatasyncuser'
CREATE USER axretailruntimeuser FROM LOGIN axretailruntimeuser
EXEC sp_addrolemember 'UsersRole', 'axretailruntimeuser'
EXEC sp_addrolemember 'ReportUsersRole', 'axretailruntimeuser'
CREATE USER axdeployextuser FROM LOGIN axdeployextuser
EXEC sp_addrolemember 'DeployExtensibilityRole', 'axdeployextuser'
CREATE USER [NT AUTHORITY\NETWORK SERVICE] FROM LOGIN [NT AUTHORITY\NETWORK SERVICE]
EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'
UPDATE T1
SET T1.storageproviderid = 0
, T1.accessinformation = ''
, T1.modifiedby = 'Admin'
, T1.modifieddatetime = getdate()
FROM docuvalue T1
WHERE T1.storageproviderid = 1 --Azure storage
DROP PROCEDURE IF EXISTS SP_ConfigureTablesForChangeTracking
DROP PROCEDURE IF EXISTS SP_ConfigureTablesForChangeTracking_V2
GO
-- Begin Refresh Retail FullText Catalogs
DECLARE @RFTXNAME NVARCHAR(MAX);
DECLARE @RFTXSQL NVARCHAR(MAX);
DECLARE retail_ftx CURSOR FOR
SELECT OBJECT_SCHEMA_NAME(object_id) + '.' + OBJECT_NAME(object_id) fullname FROM SYS.FULLTEXT_INDEXES
WHERE FULLTEXT_CATALOG_ID = (SELECT TOP 1 FULLTEXT_CATALOG_ID FROM SYS.FULLTEXT_CATALOGS WHERE NAME = 'COMMERCEFULLTEXTCATALOG');
OPEN retail_ftx;
FETCH NEXT FROM retail_ftx INTO @RFTXNAME;
BEGIN TRY
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Refreshing Full Text Index ' + @RFTXNAME;
EXEC SP_FULLTEXT_TABLE @RFTXNAME, 'activate';
SET @RFTXSQL = 'ALTER FULLTEXT INDEX ON ' + @RFTXNAME + ' START FULL POPULATION';
EXEC SP_EXECUTESQL @RFTXSQL;
FETCH NEXT FROM retail_ftx INTO @RFTXNAME;
END
END TRY
BEGIN CATCH
PRINT error_message()
END CATCH
CLOSE retail_ftx;
DEALLOCATE retail_ftx;
Delete the AXDB. Create backup.
Rename current database to AXDB
How to enabled document attached on processed records Dynamics 365 for finance and operations
In many cases, document attachment disabled on processed records. Usually this happened with respect to business requirements. For example when Purchased order invoiced and settled in ledger, attachment add, edit and delete can be disabled. Only existing attachment can be view on these documents.But some cases we have to forcefully enabled document attachment on these processed records.
I used following code snippet to enable the document attachment.
/ <param name="args"></param>
[PostHandlerFor(formStr(DocuView), formMethodStr(DocuView, setEnabled))]
public static void DocuView_Post_setEnabled(XppPrePostArgs args)
{
FormRun formRun;
//= sender;
formRun =Args.getThis();
formrun.design().controlName("ctrlAdd").enabled(true);
FormDataSource DocuRef_DS =formRun.dataSource("DocuRef");
DocuRef_DS.allowEdit(true);
DocuRef_DS.allowCreate(true);
DocuRef_DS.allowDelete(true);
}
Custom lookup UIBuilder SSRS RDP Dynamics 365 for finance and operations
Hi, Today I have simple code snippet to create a custom lookup in SSRS Reports in Dynamics 365 for finance and operations.
public class MyUIBuilder extends SrsReportDataContractUIBuilder
{
private DialogField vendordf,dialogbranch;
MyDC contract;
public void postBuild()
{
super();
contract = this.dataContractObject();
// binding dialogs with contract fields
vendordf = this.bindInfo().getDialogField(this.dataContractObject(),
methodStr(MyDC, parmHcmPerfPeriodId));
dialogbranch = this.bindInfo().getDialogField(this.dataContractObject(),
methodStr(MyDC, parmOMOperatingUnitNumber));
dialogbranch.registerOverrideMethod(methodStr(FormStringControl,lookup),methodStr(BEHCMReviewUIBuilder,divisionCodeLookup),this);
vendordf.registerOverrideMethod(methodStr(FormStringControl,lookup),methodStr(BEHCMReviewUIBuilder,PerfPeriodIdLookup),this);
}
public void postRun()
{
}
private void PerfPeriodIdLookup(FormStringControl divisionCodeLookup)
{
Query query = new Query();
QueryBuildDataSource qbd, qbdPerson;
QueryBuildDataSource qbds;
QueryBuildDataSource qbdsJoin;
SysTableLookup sysTableLookup = sysTableLookup::newParameters(tableNum(HcmPerfPeriod), divisionCodeLookup);
qbds= query.addDataSource(tableNum(HcmPerfPeriod));
sysTableLookup.parmQuery(query);
sysTableLookup.addLookupfield(fieldNum(HcmPerfPeriod, PerfPeriodId), true);
sysTableLookup.parmQuery(query);
sysTableLookup.parmUseLookupValue(False);
sysTableLookup.performFormLookup();
}
private void divisionCodeLookup(FormStringControl divisionCodeLookup)
{
Query query;
QueryBuildDataSource qbds,qbds1;
SysTableLookup sysTableLookup;
DimensionAttribute dimAttr;
;
sysTableLookup = SysTableLookup::newParameters(tablenum(OMOperatingUnit),divisionCodeLookup);
sysTableLookup.addLookupfield(fieldnum(OMOperatingUnit, OmoperatingunitNumber));
sysTableLookup.addLookupfield(fieldNum(OMOperatingUnit,Name));
query = new Query();
qbds = query.addDataSource(tableNum(OMOperatingUnit));
qbds.addRange(fieldNum(OMOperatingUnit, OMOperatingUnitType)).value(queryvalue(OMOperatingUnitType::OMDepartment));
sysTableLookup.parmQuery(query);
sysTableLookup.parmUseLookupValue(False);
sysTableLookup.performFormLookup();
}
}
