Quantcast
Channel: Microsoft Dynamics 365 Community
Viewing all 10657 articles
Browse latest View live

JUST RELEASED: 2017-R1 Payroll tax update for AX 2009, AX 2012 R2 and AX 2012 R3

$
0
0

The new 2017-R1 payroll tax updates are now available for 2009, 2012 R2, and 2012 R3 versions of Payroll for Microsoft Dynamics AX. The updates can each be downloaded from the following links:

 

CustomerSource

2009 - https://mbs.microsoft.com/customersource/northamerica/AX/downloads/tax-regulatory-updates/PayrollforMicrosoftDynamicsAX2009

2012 - https://mbs.microsoft.com/customersource/northamerica/AX/downloads/tax-regulatory-updates/MicrosoftDynamicsAX2012USPayrollTaxUpdates

 

PartnerSource

2009 - https://mbs.microsoft.com/partnersource/northamerica/deployment/downloads/tax-regulatory-updates/PayrollforMicrosoftDynamicsAX2009

2012 - https://mbs.microsoft.com/partnersource/northamerica/deployment/downloads/tax-regulatory-updates/MicrosoftDynamicsAX2012USPayrollTaxUpdates

 

Be sure to subscribe to email updates of our blog to be notified when new functionality and future updates are available.

 

The Dynamics AX HCM Team


Public Readiness for Dynamics 365 for Operations

$
0
0
Hi all, Please find below all public information related to Dynamics 365 for Operations available to customer and partner. This blog will be updated frequently as needed. Product information Roadmap: https://roadmap.dynamics.com/ Dynamics Online Services Support: https://www.microsoft.com/en-us/dynamics/dynamics-online-support.aspx Compliance: https://www.microsoft.com/en-us/trustcenter/compliance/default.aspx Product availability per country: https://ax.help.dynamics.com/en/wiki/country_region/ Localization: https://mbs.microsoft.com/customersource/northamerica/ax/support/support-news/GFMLocalizationPortalMC Wiki Help site: http://ax.help.dynamics.com/ Express Route Support : https://community.dynamics.com/ax/b/dax/archive/2016/11/21/use-azure-expressroute-to-get-a-dedicated-private-connection-to-microsoft-dynamics-365-for-operations ISV Portal:...

Inform Microsoft about country/region regulation changes and track the status of regulatory features

$
0
0
You can now Inform Microsoft about country/region regulation alerts and track the status of regulatory features by using Lifecycle Services (LCS).
The following article describes how to use LCS to submit alerts through the Localization and translation service. This article also explains how to track planned and released regulatory features through LCS Issue search.

2017 predictions for Microsoft Dynamics: Branding, leadership, upgrades, SMB partners, and more

$
0
0
The year 2016 has been a good one for Microsoft. The company's stock price soared 13 percent this year as the company's triple-digit cloud revenue growth, and its steadily growing subscription revenue base in the commercial space, impressed ...read more

Data Management Import Performance Issue with Cursor Fetch

$
0
0

I recently have a data import slowness issue reported taking days to process without finishing even in batch run in parallel.  This issue could occur with any entity import especially for new company go-living or with no data in the target entity.  The impact is exponentially worse when more data is imported, so I would like to share finding and possible solutions to the community.

The SQL statement with performance hit is emitted by Classes\DmfEntityWriter\processRecords() from the following call stack with the SQL pattern further in below.

QueryRun.next()
DmfEntityWriter.processRecords()
DmfEntityWriter.write()
DMFEntityWriterTasks.executeWrite()
DMFEntityWriterTasks.run()
BatchRun.runJobStaticCode()

Select …
from [Staging table]
Left outer join [Entity view]

WHERE ((T1.PARTITION=XXXXXXXXXX) AND (((T1.DEFINITIONGROUP=XXX) AND (T1.EXECUTIONID=XXX)) AND ((T1.RECID>=XXX) AND (T1.RECID<=XXX))

ORDER BY T1.RECID

The challenging part is that this SQL statement executes fast that could be easily missed in AX trace or SQL profiler trace.  The part with performance hit is the cursor fetch though that surfaces after a while when staging to target stage import starts, and keep growing at alerting alarm if you query the SQL query statistics DMV.  The characteristics is that the SQL text recorded is FETCH API_CURSORXXXXXXXX with alerting growing high logical read but very low execution count.  The elapsed time in aggregate are typically the highest like sample in below.

Select top 10 qs.total_elapsed_time /1000.0 as [total_elapsed_time_ms], qs.execution_count, (qs.total_elapsed_time/qs.execution_count)/1000.0 as [avg_elapsed_time_ms], qs.max_elapsed_time / 1000.0 as [max_elapsed_time_ms], qs.min_elapsed_time / 1000.0 as [min_elapsed_time_ms],
qs.total_logical_reads, qs.total_logical_reads/execution_count as [avg_logical_reads], qs.max_logical_reads, qs.min_logical_reads, st.text as Sql_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY qs.total_elapsed_time DESC
 cursorfetch_sized

The DmfEntityWriter.processRecords() executes this SQL statement in select-while loop which queries all related records from the staging table to insert into the target entity.  Therefore, each time the loop runs, the target table is going to have more record added or updated until the loop finishes.  The performance hit is from cursor fetch growing exponentially to the power of target entity record based on # of record with RecId range in staging table assigned to the particular batch task/thread.  The number is then multiply by number of tables defined in the entity view.

With no or virtually no statistical data in the target table, SQL optimizer tends to establish execution plan by (1) scanning cluster index (2) with the use of  nested loop join.  The SQL execution plan I got is to always start using cluster index scanning from EcoResProduct by its RecId index to nested join all the related tables defined in the EcoResProductEntity view and then finally nested loop join again to the EcoResProductStaging table by seeking RecId. 

executionplan1

executionplan2

executionplan3b

One option to address is to use set-based processing in the entity.  However, not all entity supports set-based process.  The 2nd option is to write SQL plan guide to use hash join hint instead.  You may want to work with your DBA to identify the exact SQL statement to write SQL plan guideI include the SQL plan guide used for your reference which reduces to about an hour from days of process.

execsp_create_plan_guide
@name =N’EcoResProductStaging_Import_Hash’,
@stmt =N’SELECT T1.AREIDENTICALCONFIGURATIONSALLOWED,T1.HARMONIZEDSYSTEMCODE,T1.ISAUTOMATICVARIANTGENERATIONENABLED,T1.ISCATCHWEIGHTPRODUCT,T1.ISPRODUCTKIT,T1.ISPRODUCTVARIANTUNITCONVERSIONENABLED,T1.NMFCCODE,T1.PRODUCTCOLORGROUPID,T1.PRODUCTDESCRIPTION,T1.PRODUCTDIMENSIONGROUPNAME,T1.PRODUCTNAME,T1.PRODUCTNUMBER,T1.PRODUCTSEARCHNAME,T1.PRODUCTSIZEGROUPID,T1.PRODUCTSTYLEGROUPID,T1.PRODUCTSUBTYPE,T1.PRODUCTTYPE,T1.RETAILPRODUCTCATEGORYNAME,T1.STCCCODE,T1.STORAGEDIMENSIONGROUPNAME,T1.TRACKINGDIMENSIONGROUPNAME,T1.VARIANTCONFIGURATIONTECHNOLOGY,T1.RECID,T2.PRODUCTTYPE,T2.PRODUCTSUBTYPE,T2.PRODUCTNUMBER,T2.PRODUCTNAME,T2.PRODUCTSEARCHNAME,T2.PRODUCTDESCRIPTION,T2.ISCATCHWEIGHTPRODUCT,T2.PRODUCTDIMENSIONGROUPNAME,T2.PRODUCTDIMENSIONGROUPRECID,T2.STORAGEDIMENSIONGROUPNAME,T2.STORAGEDIMENSIONGROUPRECID,T2.TRACKINGDIMENSIONGROUPNAME,T2.TRACKINGDIMENSIONGROUPRECID,T2.VARIANTCONFIGURATIONTECHNOLOGY,T2.AREIDENTICALCONFIGURATIONSALLOWED,T2.ISAUTOMATICVARIANTGENERATIONENABLED,T2.ISPRODUCTVARIANTUNITCONVERSIONENABLED,T2.RETAILPRODUCTCATEGORYNAME,T2.RETAILCATEGORYRECID,T2.PRODUCTCOLORGROUPID,T2.PRODUCTSIZEGROUPID,T2.PRODUCTSTYLEGROUPID,T2.ISPRODUCTKIT,T2.STCCCODE,T2.HARMONIZEDSYSTEMCODE,T2.NMFCCODE,T2.RECID#2,T2.RECVERSION#2,T2.RECID#3,T2.RECVERSION#3,T2.RECID#4,T2.RECVERSION#4,T2.RECID#5,T2.RECVERSION#5,T2.RECID#6,T2.RECVERSION#6,T2.RECID#7,T2.RECVERSION#7,T2.RECID#8,T2.RECVERSION#8,T2.RECID#9,T2.RECID#10,T2.RECVERSION#10,T2.RECID#11,T2.RECID#12,T2.RECVERSION#12,T2.RECID#13,T2.RECVERSION#13,T2.RECID#14,T2.RECVERSION#14,T2.RECID#15,T2.RECVERSION#15,T2.MODIFIEDBY,T2.RECVERSION,T2.PARTITION,T2.RECID FROM  ECORESPRODUCTSTAGING T1 LEFT OUTER JOIN ECORESPRODUCTENTITY T2 ON ((((((((((((((((T2.PARTITION=0123456789) AND ((T2.PARTITION#2=0123456789) OR (T2.PARTITION#2 IS NULL))) AND ((T2.PARTITION#3=0123456789) OR (T2.PARTITION#3 IS NULL))) AND ((T2.PARTITION#4=0123456789) OR (T2.PARTITION#4 IS NULL))) AND ((T2.PARTITION#5=0123456789) OR (T2.PARTITION#5 IS NULL))) AND ((T2.PARTITION#6=0123456789) OR (T2.PARTITION#6 IS NULL))) AND ((T2.PARTITION#7=0123456789) OR (T2.PARTITION#7 IS NULL))) AND ((T2.PARTITION#8=0123456789) OR (T2.PARTITION#8 IS NULL))) AND ((T2.PARTITION#9=0123456789) OR (T2.PARTITION#9 IS NULL))) AND ((T2.PARTITION#10=0123456789) OR (T2.PARTITION#10 IS NULL))) AND ((T2.PARTITION#11=0123456789) OR (T2.PARTITION#11 IS NULL))) AND ((T2.PARTITION#12=0123456789) OR (T2.PARTITION#12 IS NULL))) AND ((T2.PARTITION#13=0123456789) OR (T2.PARTITION#13 IS NULL))) AND ((T2.PARTITION#14=0123456789) OR (T2.PARTITION#14 IS NULL))) AND ((T2.PARTITION#15=0123456789) OR (T2.PARTITION#15 IS NULL))) AND (T1.PRODUCTNUMBER=T2.PRODUCTNUMBER)) WHERE ((T1.PARTITION=0123456789) AND (((T1.DEFINITIONGROUP=@P1) AND (T1.EXECUTIONID=@P2)) AND ((T1.RECID>=@P3) AND (T1.RECID<=@P4)))) ORDER BY T1.RECID’,
@type =N’SQL’,
@module_or_batch =NULL,
@params =N’@P1 nvarchar(61),@P2 nvarchar(91),@P3 bigint,@P4 bigint’,
@hints =N’OPTION(HASH JOIN)’

How EntireTable cache works in AX2012 R3

$
0
0
The description of EntireTable cache on msdn seems ambiguous. On the one hand, all the records in the table are placed in the cache after the first select . On the other hand, the SELECT statement WHERE...(read more)

Inventory value report doesn’t show some inventory dimensions.

$
0
0

Normally, we use inventory value report to view the inventory value and quantity. Sometimes, we cannot see some inventory dimensions in the report. To make the inventory dimensions showing in the report, you need to make sure:
1) Go to USMF/Inventory management/Setup/Inventory/Inventory value reports, select the inventory value report ID which you use to view the report and make sure the inventory dimensions are selected.
2) Check the item storage and tracking dimension groups. Only the dimensions that have the option ‘financial inventory’ enabled can be shown in the report.
For example, there is an item ‘test’. In the storage dimensions group, only site is financial inventory enabled. Site and warehouse are both physical inventory enabled. In the tracking dimension group, batch number is physical inventory enabled while financial inventory is disabled.
Now in the inventory value report ID settings, site, warehouse and batch number are all selected. If we view the report, we can only see site is shown in the report while warehouse and batch number columns are blank.
In conclusion, inventory value report can only show the inventory dimensions which are financial inventory enabled. This logic is also applied for Dynamics 365 for Operations.

Map functionality in AX 7

$
0
0
1. Craete Address field. 2. Write clicked method on Map button. public void clicked() { Objects objectsTable; str address; const str mapUrl = 'http://www.bing.com/maps/default.aspx?where1=\%1';...(read more)

Managing your Azure Subscriptions created through CSP portal

$
0
0
Let me start off with a disclaimer, as Microsoft may change the behavior, which would render this post obsolete. In which case I'll try to come back and make the necessary amendments. 

If you have worked with managing your Azure resources through PowerShell, you will notice that Azure Subscriptions created through the Cloud Solution Partner (CSP) portal behaves slightly different. This post from august 2016 goes into details on how to migrate from "traditional" Azure Subscriptions to "CSP" Subscriptions.

In my post, I want to just quickly show you some key points.

Azure Portal navigation

One thing you will quickly notice is that if you access the CSP portal and open the Azure Portal from there, all of the classic resource types in Azure are completely hidden. You can only create and operate on Azure Resource Manager (ARM) types of resources. So basically, this prevents you from using Azure Service Management API and any interface that assumes ASM, or "Classic Azure" as it is also named.

Another thing you'll notice is that if you try to navigate the Azure Portal directly (portal.azure.com) you do not necessarily see the Azure Subscriptions from your tenants in the list of Directories. I say "necessarily" because if your user has been explicitly granted "owner" role on the tenant, that is a different story. One of the core features of the CSP program, is that the partner already is "owner" through the Foreign Principal role, more specifically all users who have the AdminRights permissions within the CSP portal. You can read more about that here.

So on order to navigate to the customers Azure resources you need to explicitly go the the tenant through the URL. That will open the tenants context and off you go. The URL will typically be something like this: https://portal.azure.com/TENANTNAME.onmicrosoft.com (or the customers own domain, if it is fully setup.

Azure PowerShell management

What about PowerShell? Is that any different? YES!

If you run Login-AzureRmAccount without setting a context, you'll end up only seeing Azure Subscriptions you have access to explicitly. And even for Azure Subscriptions created through CSP will behave differently.

The solution is rather easy, even if you could argue it's a bit cumbersome.
You need to explicitly set the context.

Here are some options available:

  • You either explicit login to the tenant and subscription:
    Login-AzureRmAccount -TenantId TENANT-GUID -SubscriptionId SUBSCRIPTION-GUID
  • Or login "normally" and then run select with tenant and subscription:
    Select-AzureRmSubscription -TenantId TENANT-GUID -SubscriptionId SUBSCRIPTION-GUID
  • Or you could login and set context using the following command:
    Get-AzureRmSubscription -TenantId TENANT_GUID -SubscriptionId SUBSCRIPTION-GUID | Set-AzureRmContext

 If you do not set the context explicitly, you will not be able to operate over the Azure resources.

Now, some readers may have noticed Azure Subscriptions created through CSP is inaccessible in the old Classic Azure Portal, which in turn disconnects such the Subscription from being available on Lice Cycle Services (LCS). LCS does support ARM by now, so I believe the solution should be just around the corner. We're just missing one minor piece for all of this to work together properly.

Have a nice Christmas holiday, everyone!

Changing the Unit of Measure on an Item - It Can Be Done!

$
0
0
"Help! I selected the wrong unit of measure on my item!" It's more common than you know, and if you're new to AX or if you are just working quickly while setting up an item and you set...(read more)

Happy New Year 2016/2017

$
0
0
With the release of AX 7, the increased industry focus on IoT, AI and automation, release of Power Apps and Flow and the launch of Dynamics 365 it is probably safe to say that this is one of the most eventful...(read more)

Free Text Invoice correction in Microsoft Dynamics AX 2012

$
0
0
Hello everyone, Here is another learning from my side. In this post, I will walk you all through Free text invoice correction feature. This is newly added feature in Microsoft Dynamics AX 2012. Before...(read more)

The future of data integration with Microsoft Dynamics 365 for Operations

$
0
0
The Microsoft Dynamics AX world changed with the release of Dynamics 365 for Operations (formerly known as AX 7). The traditional methods of data integration are no longer the only way to approach today's challenges across the supply chain. Dynamics ...read more

Top Microsoft Dynamics AX / 365 for Operations news and features of 2016

$
0
0
As 2016 winds down, it is again time to look back at the most popular and important Microsoft Dynamics AX and 365 for Operations articles of the year. What follows is a list of ten articles that stood out as the most important. Articles were chosen ...read more

AX 2012 – How to move DMF Setup across Enviroments

$
0
0
Hi Guys

Often is necessary to move the DMF Setup, without include the DMF Staging tables, from one environment to another.

How to do it?

Out of the box there isn’t any standard feature that allow you to achieve this goal.
The steps are:

1-      Retrieve a list of the DMF Setup Tables
2-      Move to another environment without broken the relation by Recid

About the first step I have created a job in order to list the DMF Setup tables.
The trick is been exclude the tables that present the EXECUTIONID field, so the staging table!

static void DMFSetupTables(Args _args)
{
    utilIdElements  utilIdElements;
    DictTable       dictTable;
    SqlDictionary   SqlDictionary;
    Map             mapTable;

    mapTable = new Map(Types::Integer, Types::Integer);

    while select utilIdElements
    where utilIdElements.recordType == UtilElementType::Table
       && utilIdElements.name like "DMF*"
    {
        dictTable = new DictTable(utilIdElements.id);
        if ( dictTable.isView()
        ||   dictTable.isTempDb()
        ||   dictTable.isTmp()
        ||   dictTable.isMap()
        ||   mapTable.exists(utilIdElements.id)
           )
            continue;
       
        Select recid from SqlDictionary where SqlDictionary.tabId == utilIdElements.id && SqlDictionary.name == "EXECUTIONID";
        If ( SqlDictionary )
            continue;

        mapTable.insert(utilIdElements.id, utilIdElements.id);
        info ( queryValue(utilIdElements.id) + "-" + utilIdElements.name );
    }
}

About the second step, I used the Test Data Transfer Tool in order to export and import the DMF Setup tables.

Therefore, I created a txt file like below with the Tables list coming from the above Job and move in the ‘[Lists]’ Folder of the TDTT Package and run the Tool.

.*(?<!^DMFCodePageValue)(?<!^DMFComparison)(?<!^DMFComparisonEntityList)(?<!^DMFComparisonLegalEntityList)(?<!^DMFComparisonReport)(?<!^DMFComparisonResults)(?<!^DMFComparisonResultsDetails)(?<!^DMFConstraintTreeLines)(?<!^DMFDataSource)(?<!^DMFDataSourceProperties)(?<!^DMFDataTypeMapping)(?<!^DMFDefinationGroupAccess)(?<!^DMFDefinitionGroup)(?<!^DMFDefinitionGroupDataArea)(?<!^DMFDefinitionGroupEntity)(?<!^DMFDefinitionGroupEntityXMLFields)(?<!^DMFEntity)(?<!^DMFEntityBaseXML)(?<!^DMFEntityDbEntityVersion)(?<!^DMFEntityDbGroup)(?<!^DMFEntityDbGroupEntity)(?<!^DMFExcelSheetLookup)(?<!^DMFExtDBSyncGroupExecution)(?<!^DMFParameters)(?<!^DMFPublishedEntity)(?<!^DMFQueryCriteria)(?<!^DMFSourceXMLToEntityMap)(?<!^DMFStagingConversionTable)(?<!^DMFStagingErrorCode)(?<!^DMFStagingTargetLink)(?<!^DMFtargetCompanyName)(?<!^DMFTargetEntityHierarchy)(?<!^DMFTargetEntityHierarchyRelation)(?<!^DMFTargetSourceName)(?<!^DMFTargetXML)(?<!^DMFTargetXMLToEntityMap)

That’s it!

Happy Christmas!

Top Microsoft Dynamics AX expert articles of 2016

$
0
0
Throughout 2016, contributors to this site have reminded us that Microsoft Dynamics AX (inclusive of Dynamics 365 for Operations) is a deep and broad product that impacts not only the employees of an individual business that buys it, but customers ...read more

The MSDW Podcast, December 28, 2016: Six Predictions for Microsoft Dynamics in 2017

$
0
0
Get the MSDW Podcast RSS feed or subscribe on  iTunes ,  Stitcher , or YouTube . read more ...read more

Create Ledger dimension from main account (default account) and default dimension

$
0
0
The DimensionDefaultingService::serviceCreateLedgerDimension() method can be used to create ledger dimension  from main account and default dimension. JournalTrans.LedgerDimension = DimensionDefaultingService...(read more)

Configuration tip: Warehouse mobile devices portal Native application in Azure Active Directory

$
0
0
Setting up the Warehouse mobile devices portal is a relatively simple process, and is described in detail on the corresponding wiki: https://ax.help.dynamics.com/en/wiki/warehouse-mobile-devices-portal-for-microsoft-dynamics-ax/ However, now and again I would get complaints around the authorization process not working properly, or asking for interactive login, both of which shouldn't be

AX7 Form activate event handler to access form control

$
0
0
class CustTableFormEventHandler { [FormDataSourceEventHandler(formDataSourceStr(CustTable, CustTable), FormDataSourceEventType::Activated)] public static void CustTable_OnActivated(FormDataSource sender...(read more)
Viewing all 10657 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>