ww12345678 的部落格 | AX Helper


如何在D365财务和运营中使用客户模板 / How to use Customer Template In D365 Finance and Operations

Filed under: 网络文摘 — 标签: — alirazazaidi @ 上午1:26
Hello friends, in todays video, we explore one of reusable feature of D365 And finance and operations. This feature is good for data entry guys, They can default some common fields. For Customer we can built template that have some default field setup. So here is some step by Step guide.
from list page select any customer and click on options and record info
from popup dialog select “User template”
Save its as as you want when you click on new customer on Customer list page
You found selection where you can select template
when you click on Ok button. You found a number of Employee fields automatically filed.
See you in another post


D365 –深入了解电子商务定价 / D365 – A deeper look into eCommerce pricing

Filed under: 网络文摘 — 标签: — William @ 上午7:29
Microsoft launched their B2C eCommerce offering in September 2019, and have now also announced the B2B eCommerce solution. This strengthen the omnichannel capabilities in Dynamics 365 and ensures customers have a full suite solution covering most needs. Microsoft have a public available price page, that shows a simplified view of the pricing, with a reference to their licensing guide: In the licensing guide the needed licenses are described as the following: What differs the eCommerce offering with the other pricing of Dynamics 365, is that the pricing depends on the number of sales orders generated through the eCommerce channels. If we look at the simplified steps, there are 3 price levels, and the ability to add additional overage capacity between these levels. In the pricing guide this is illustrated line this: This means that when you are planning your eCommerce solution, it will be priced on the number of sales orders going through the system. To illustrate, when the number of sales orders go up, the price goes up. As there are some tier levels, you get a small price change in the. The example below is only for the eCommerce without the recommendation and the “ratings and review”. If we take the same pricing, and look at what is the cost per sales order we get the following view: Here we see that there is a drastic fall in the beginning, illustrating that at 1000 eCommerce orders per month, the cost per sales order will be 5 USD. As we get to the 3000 sales order per month, the price per sales order falls to 1.6 USD per sales order. At 32.000 sales orders per month the cost would be 1.2 USD per sales order. As illustrated this way, we see that at yearly volumes above 36.000 sales orders, the cost is 1.6 USD per order. For a fully integrated and hosted eCommerce solution. The question is then, what is the alternative cost? Would this be cheaper to have a standalone solution? Other 3’rd party eCommerce solution does have costs for licensing, hosting and transactional fees. Unless you manually enter the orders into D365, you will also have to create or pay for integrations, that you would have to maintain. And trust me… Creating a full integrated external eCommerce solution is not cheap! Also keep in mind, that you must follow the rules as specified in the licensing guide related to multiplexing and import of sales order. You cannot just plug in another solution and then think it is “free of charge”. So, the alternative is to manually key in the sales order unless you also buy licenses/SKU’s for order lines in addition. (I think it is priced around 500 USD per 100K orderliness) My summary is that pricing of the Dynamics 365 Commerce with eCommerce B2C/B2B is OK! It scales, is ready and you can price it according to your requirement. Costs of between 1-3 USD per order seams acceptable when you compare the cost of the alternative’s costs, and also that you get a ready-to-go eCommerce that is fully integrated. It is also relevant to mention that the D365 eCommerce seams to be aimed compete against the enterprise level eCommerce solution you find in the marked with a decent volume ( >2000 orders per month) that need growth further and need a fully integrated solution that can be tailored towards their need. (*Prices and conclusion here are based on publicly available information, and my own understanding on how they work) If you want to learn more about eCommerce in D365, I suggest the following video’s: Announcing B2B e-Commerce capabilities for Dynamics 365 Commerce : https://www.youtube.com/watch?v=IQl4ucQNPb8 Accelerate your business with Dynamics 365 Commerce : https://www.youtube.com/watch?v=BwOQJ5VgLnU Dynamics 365 Commerce E-Commerce Architecture Deep-dive Tech Talk : https://www.youtube.com/watch?v=zkBKRzXer3E


日期时间自定义格式 / Date time custom formats

Filed under: 网络文摘 — 标签: — William @ 下午6:35

Sometime we have to deal with custom date formats, scenarios like you want to append any custom date format in the file name. In such case we can use DateTime.ParseExact() method through .NET Interop:

Ax example can be :

System.Globalization.CultureInfo culture
    = System.Globalization.CultureInfo::get_InvariantCulture();

utcDateTime dt = System.DateTime::ParseExact(
                            '10/17/2014 0:00',
                            'MM/dd/yyyy H:mm',
Parameters details about DateTime.ParseExact():

s String

A string that contains a date and time to convert. format String A format specifier that defines the required format of s. For more information, see the Remarks section. provider IFormatProvider An object that supplies culture-specific format information about s. Returns DateTime An object that is equivalent to the date and time contained in s, as specified by format and provider.

XSLT将XML转换为JSON D365FO数据管理 / XSLT Transformation XML to JSON D365FO Data Management

Filed under: 网络文摘 — 标签: — William @ 上午7:29
Recently i was exploring an option for Transformation in Data Management framework, we do have this option of transforming the export file in different format than the default one. One more thing that triggers, D365fo doesn’t export JSON by default. However, it does export XML file format. After some research I found this XSLT code that transformed XML to JSON. https://gist.github.com/bojanbjelic/1632534
 <?xml version="1.0" encoding="UTF-8" ?>  
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
      <xsl:output method="text" encoding="utf-8"/>  
      <xsl:template match="/node()">  
           <xsl:apply-templates select="." mode="detect" />  
      <xsl:template match="*" mode="detect">  
                <xsl:when test="name(preceding-sibling::*[1]) = name(current()) and name(following-sibling::*[1]) != name(current())">  
                          <xsl:apply-templates select="." mode="obj-content" />  
                     <xsl:if test="count(following-sibling::*[name() != name(current())]) &gt; 0">, </xsl:if>  
                <xsl:when test="name(preceding-sibling::*[1]) = name(current())">  
                          <xsl:apply-templates select="." mode="obj-content" />  
                          <xsl:if test="name(following-sibling::*) = name(current())">, </xsl:if>  
                <xsl:when test="following-sibling::*[1][name() = name(current())]">  
                     <xsl:text>"</xsl:text><xsl:value-of select="name()"/><xsl:text>" : [</xsl:text>  
                          <xsl:apply-templates select="." mode="obj-content" /><xsl:text>, </xsl:text>   
                <xsl:when test="count(./child::*) > 0 or count(@*) > 0">  
                     <xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : <xsl:apply-templates select="." mode="obj-content" />  
                     <xsl:if test="count(following-sibling::*) &gt; 0">, </xsl:if>  
                <xsl:when test="count(./child::*) = 0">  
                     <xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:apply-templates select="."/><xsl:text>"</xsl:text>  
                     <xsl:if test="count(following-sibling::*) &gt; 0">, </xsl:if>  
      <xsl:template match="*" mode="obj-content">  
                <xsl:apply-templates select="@*" mode="attr" />  
                <xsl:if test="count(@*) &gt; 0 and (count(child::*) &gt; 0 or text())">, </xsl:if>  
                <xsl:apply-templates select="./*" mode="detect" />  
                <xsl:if test="count(child::*) = 0 and text() and not(@*)">  
                     <xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:value-of select="text()"/><xsl:text>"</xsl:text>  
                <xsl:if test="count(child::*) = 0 and text() and @*">  
                     <xsl:text>"text" : "</xsl:text><xsl:value-of select="text()"/><xsl:text>"</xsl:text>  
           <xsl:if test="position() &lt; last()">, </xsl:if>  
      <xsl:template match="@*" mode="attr">  
           <xsl:text>"</xsl:text><xsl:value-of select="name()"/>" : "<xsl:value-of select="."/><xsl:text>"</xsl:text>  
           <xsl:if test="position() &lt; last()">,</xsl:if>  
      <xsl:template match="node/@TEXT | text()" name="removeBreaks">  
           <xsl:param name="pText" select="normalize-space(.)"/>  
                <xsl:when test="not(contains($pText, '
'))"><xsl:copy-of select="$pText"/></xsl:when>  
                     <xsl:value-of select="concat(substring-before($pText, '
'), ' ')"/>  
                     <xsl:call-template name="removeBreaks">  
                          <xsl:with-param name="pText" select="substring-after($pText, '
so now with the help of transformation we can convert default xml export file to json format during data management export process. Under the Data management workspace, open the Source data format form. Create new record called JSON and set the default extension to json.
  • File format = XML
  • XML Style = Attribute
  • Root element = Document (I left this as default)
Now click on the View map icon.Create a new Export and select your entity. In the Source data format, select JSON record that was created in the previous step. In the mapping form, click on the Transformations tab. Then upload the xslt file you downloaded from the github. Once we click export on data management project, it applies the transformation and you will get a JSON file like this. This works very nicely and no development or extra transformation at the target.This is interesting because we can build different types of integrations like sending purchase order confirmation as Json export to file share.

中止正在执行的批处理作业 / Abort an executing batch job

Filed under: 网络文摘 — 标签: — William @ 上午7:13
Sometimes canceling a batch job can take a long time then there is an option for abort the batch job for system administrator or batch job manager role. This provides a much faster mechanism to cancel a long running job that is impacting system usage elsewhere.
  1. Go to System administration > Inquiries > Batch jobs.
  2. Select a batch job that has a Status of Canceling.
  3. Switch to enhanced form
  4. On the Batch tasks tab, select Abort on the task, and then select OK.Abort Batch Task


扩展Dynamics 365双重写入解决方案 / Extend Dynamics 365 Dual Write Solution

Filed under: 网络文摘 — 标签: — William @ 下午4:00
Dual Write is a Power Platform based solution to synchronize Dynamics 365 Finance and Supply Chain with Dynamics 365 Customer Engagement in real time. I’ve uploaded a Youtube Video that shows Dual Write in Action. The default solution comes with a set of synchronization entities like Products, Customers, Vendors, Quotations, Sales Orders and Invoices. In a Dynamics 365 project you typically need to add additional information in both applications. In this example a customer shall have a preferred carrier. The carrier (e.g. UPS, DHL) will be stored in a main table. The customer entity will have a reference to set the carrier. The corresponding account entity in Dynamics 365 Sales will have the same lookup field and preferred carrier settings will be synchronized between Finance and Sales.
Carrier in Dynamics 365 Finance and Supply Chain Management
Carrier in Dynamics 365 Finance and Supply Chain Management

Extend Dynamics 365 Finance / SCM Data Model

For Dynamics 365 Finance / SCM create the necessary artifacts in Visual Studio:
  • A carrier table with a mandatory Name and Description field. Also create a primary index based on the Name.
  • An entity to make the carrier table accessible from external applications.
  • An extension of the CustTable with a Carrier field and a table reference from the CustTable to the Carrier table.
Dynamics 365 Finance / SCM Solution for customers preferred carrier
Dynamics 365 Finance / SCM Solution for customers preferred carrier
Save, compile and create a deployable package. Upload the package to your projects LCS asset library. After the package was validated, deploy the package to your target environment. After the package was deployed, go to Data Management Workspace > Framework Parameters > Entity settings and refresh the entity list.

Extend Dataverse (aka. Common Data Service) Entities

Navigate to https://make.powerapps.com and switch to your target environment. Go to Data > Tables and create a new table for the carrier. The table shall match the carrier table in Dynamics 365 FO. Make the Name field as mandatory primary field and add a second optional text field for the Description. Add a lookup field to the existing company table to match the DataAreaId that will come from Dynamics 365 Finance. Note that PowerApps will add a lot of other fields like owner, created, etc. as well.
Create a carrier entity in the Dataverse (CDS)
Create a carrier entity in the Dataverse (CDS)
Find the account entity that was created by the Dual Write solution. Add an addition lookup field called Carrier that references the newly created carrier table.
Carrier lookup in the account entity
Carrier lookup in the account entity

Customize the accounts form in Dynamics 365 sales

In PowerApps > Data go the accounts table and switch to the forms tab. There go to the Main form that is used in Dynamics 365 Sales to work with accounts. Click on the Name of the form, this will open the forms designer.
Dynamics 365 Dataverse Account entity
Dynamics 365 Dataverse Account entity
In the PowerApps designer add the Carrier field to the form. Save the change and publish the customized form.
Add carrier to Dynamics 365 Sales Account Form
Add carrier to Dynamics 365 Sales Account Form

Map the Carrier Entity from Dynamics 365 Finance to the Carrier table in Sales

In Dynamics 365 Finance open the Data Management Workspace and go to Dual Write. Create a new table mapping. Map the Carrier entity from Dynamics 365 FO with the Carrier table form the Dataverse.
Create a new table mapping in Dynamics 365 Dual Write
Next map the Carrier Name fields and the Carrier Description fields. Save and start the initial synchronization.
Map Dynamics 365 FO entity to Dynamics 365 Sales table
Check if the synchronization was successful. Open https://make.powerapps.com in a browser and switch to your target environment. At the left menu go to Data > Tables. Click on the Carrier table and switch to the Data tab. You should see the same carrier like in Dynamics 365 Finance.

Add the Carrier Lookup field to CustomverV3 mapping

Stop the synchronization of the CustomerV3 to account. Go to table mappings and refresh the tables. This will load the table schema from the Dataverse with the new carrier lookup field. Create a new mapping from the Carrier in Finance to the Carrier field in Dataverses entity. Save the mapping definition as a new version. Restart the synchronization and make sure there are no errors.
Mapping carrier fields in Dual Write
Mapping carrier fields in Dual Write
Now you should see and edit the Carrier in Dynamics 365 Finance as well in Dynamics 365 Sales. Changes made in any of the two products will be synchronized.
Preferred Carrier field in Dynamics 365 Finance and Supply Chain Management
Preferred Carrier field in Dynamics 365 Finance and Supply Chain Management
Mapped and synchronized Carrier field in Dynamics 365 Sales
Mapped and synchronized Carrier field in Dynamics 365 Sales


Dual Write has some limitations regarding the number of lookup fields. If you come across an error during the synchronization you may need to remove some of the lookup fields from the Dual Write table mapping.


获取元数据,数据实体的数据源D365FO/Get metadata, data sources of a data entity D365FO

Filed under: 网络文摘 — 标签: — William @ 上午1:32
this piece of code can be used for get the data sources involve in making the data entity.
  Microsoft.Dynamics.AX.Metadata.MetaModel.AxDataEntityView axDataEntity = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetDataEntityView("CustCustomerEntity");

        Microsoft.Dynamics.AX.Metadata.MetaModel.AxQuerySimple query = axDataEntity.ViewMetadata;
        var dataSources = query.DataSources;
        System.Collections.IEnumerator dataSourcesEnumerator = dataSources.GetEnumerator();

        while (dataSourcesEnumerator.moveNext())
            Microsoft.Dynamics.AX.Metadata.MetaModel.AxQuerySimpleDataSource dataSource = dataSourcesEnumerator.get_Current();


D365FO: Right click on any control at D365FO browser takes you directly to the control in AOT

Filed under: 网络文摘 — 标签: — William @ 下午5:25
Last week I explored very Interesting feature especially for developers where you right click on any field/control on the form and follow these steps.
This opens the visual studio in non admin mod, Opens the correct form, and takes you directly at the control in AOT.
NOTE: You can only get this feature within Development VM where your browser and Visual Studio are in same machine. I am at 10.0.14 but not sure when this great feature was available first :(


D365FO工具–自动化启动和停止环境 / D365FO Tool – Automating Start and Stop Environments

Filed under: 网络文摘 — 标签: — William @ 下午8:07
If you have Tier1 environments in your project and you would like to automate the starting and stopping of them then Use #d365fotools and get on with your work. two new commands Invoke-D365LcsEnvironmentStart and Invoke-D365LcsEnvironmentStop available in d365 tools (GitHub – richardsondev/d365fo.tools: Tools used for Dynamics 365 Finance and Operations) — Install d365fo.tools on power shell. Install-Module -Name d365fo.tools — Get LCS API Token and saveLCS API Config variables Get-D365LcsApiToken -ClientId “a56e047a-188c-xxxxxxxxxxx” -Username “serviceaccount@domain.onmicrosoft.com” -Password “strongPassword” -LcsApiUri “https://lcsapi.lcs.dynamics.com&#8221; | Set-D365LcsApiConfig -ProjectId 1350683 -Username, -Password : Service account that should have access to LCS project and MFA should be disabled and should not be Federated authentication account (this is to avoid error) -ClientId : link below is to create the app registration on azure portal, with permission set as shown in picture below. https://docs.microsoft.com/en-us/graph/auth-register-app-v2
-LcsApiUri – URI / URL to the LCS API you want to use Depending on whether your LCS project is located in europe or not, there is 2 valid URI’s / URL’s Valid options: “https://lcsapi.lcs.dynamics.com” “https://lcsapi.eu.lcs.dynamics.com” “https://lcsapi.fr.lcs.dynamics.com” “https://lcsapi.sa.lcs.dynamics.com” “https://lcsapi.uae.lcs.dynamics.com” “https://lcsapi.lcs.dynamics.cn— This is to stop the environment Invoke-D365LcsEnvironmentStop -ProjectId 1350683 -EnvironmentId “782f99fe-cad6-467b-860f-xxxxxxx” — This is to start the environment Invoke-D365LcsEnvironmentStart -ProjectId 1350683 -EnvironmentId “782f99fe-cad6-467b-860f-xxxxxx” -Projectid , -EncironmentId: This can get from LCS Project, Project settings page.

Building Azure Pipeline to Start and Stop the VM

You can create a build pipeline and just add a Powershell task and add the script to start the VM
 Install-PackageProvider nuget -Scope CurrentUser -Force -Confirm:$false  
 Install-Module -Name AZ -AllowClobber -Scope CurrentUser -Force -Confirm:$False -SkipPublisherCheck  
 Install-Module -Name d365fo.tools -AllowClobber -Scope CurrentUser -Force -Confirm:$false  
 Get-D365LcsApiToken -ClientId "a56e047a-188c-xxxx-xxxxxxxxxx" -Username "serviceaccount@domain.onmicrosoft.com" -Password "password" -LcsApiUri "https://lcsapi.lcs.dynamics.com" | Set-D365LcsApiConfig -ProjectId 1350683  
 Invoke-D365LcsEnvironmentStart -ProjectId 1350683 -EnvironmentId "782f99fe-cad6-467b-xxxxxxxxxxx"  
Scheduled can be defined on azure pipeline to start and stop the VM

QuickFix:数据实体上的错误 / QuickFix : Error on Data entity

Filed under: 网络文摘 — 标签: — William @ 下午2:55
Error message: 
Severity Code Description Project File Line Suppression State
Error Infolog diagnostic message: 'Datasource name <EntityName>not found in the view <EntityName>.' on category 'Error'. 0
Possible cause: Check if you are using any calculated field and that method for the field is calling the wrong entity. Also, check if it points to the wrong data entity method. 
Below is the syntax
 dataEntityName      = tablestr(<EntityName>);
        Filed1 = str2Int64(SysComputedColumn::returnField(DataEntityName, identifierStr(<Datasource name>), fieldstr(<Datasource name>, CustTransRecId)));
-Harry Follow us on Facebook to keep in rhythm with us. https:fb.com/theaxapta


An Introduction To Sustainability Accounting

Filed under: 网络文摘 — 标签: — William @ 下午3:36


反编译D365零售组件 / Decompiling D365 retail components

Filed under: 网络文摘 — 标签: — William @ 下午11:29
Today I got a very nice tip from a colleague on how to better understand and see the source code for the retail components. I was experiencing that I was not able to post a CPOS sales, and in the eventlog I got the following “Cryptical” error: Customer with RECID 5637158076 is non-chargeable account. at Microsoft.Dynamics.Commerce.Runtime.Services.CustomerPaymentService.ValidateCustomerForOnAccountPayment(Customer customerToPayWith, RequestContext context, Boolean isPositiveAmount) The thing with the retail server, is that we don’t have the source code on all the components. But luckily there are a way around it: JetBrains dotPeek (just google it, and download) This tool let you decompile all components, and have an advanced search capability. Just all the K:\RetailServer\WebRoot\bin\Microsoft.Dynamics * files, and then search for the term ValidateCustomerForOnAccountPayment: Solution to my problem, was that the InvoiceAccount on the customer record was blank. So now you know how to see all sourcecode in Dynamics 365 Commerce/RetailServer components Happy!


进一步靠近– Power Platform中的财务运营数据–虚拟实体/Another step closer – Finance Operations data in Power Platform – Virtual Entities

Filed under: 网络文摘 — 标签: — William @ 下午12:46
This post focuses on the integration technologies available to have the Microsoft Dynamics 365 Finance Operations data available in Dataverse/Common Data Services/CDS. What could be better then having The biggest ERP system's data in Power Platform. You can Power Portals, Power Apps, Power BI analytical reports, use power virtual agents for inventory closing and year end closing processes, manage expenses and employee/contractors time entry processes, most of these processes can be even without logging to MS ERP (Dynamics 365 Finance Operation) so can safe on license cost too.  Let's see what options are available to integrate F&O data with Power Platform however, this post is dedicated to Virtual Entities.  3 Options available out-the-box to integrate F&O data with Power Platform; 👉 Data Integrator - Click on link to read more 👉 Dual-Write - Click on link to read more 👉 Virtual Entities - MS Tech Talk on Virtual entities 
Before we jump to the installation and configuration part, let's see when were the virtual entities available and what features these have come up with compared to other two integrations technologies. Virtual Entities Generally available

✔️ Finance and Supply Chain Management App: 10.0.12 or later

✔️ Dataverse: Service update 189 or later

Virtual Entities features

✔️ Finance and Operations is available as a data source in Dataverse ✔️ No Finance and Operations data replication in Dataverse ✔️ Access all public data entities of Finance and Operations in Dataverse ✔️ Support all CRUD operations

Install Virtual Entities solution

Head to this link https://appsource.microsoft.com/en-us/product/dynamics-365/mscrm.finance_and_operations_virtual_entity and Get it Now
Enter your work or school account and Sign in
Choose the environment where you want to install this solution
Wait for finish to installing
Finance and Operations Virtual Entity solution shows as Enabled
Finance and Operations Virtual Entity solution is installed successfully - Hurray!! that was easy

Register an App in Azure Active Directory

The AAD application must be created on the same tenant as F&O.
  1. Log on to http://portal.azure.com
  2. Azure Active Directory > App registration
  3. New Registration
    Define these attributes
    1. Name
    2. Account type
    3. Redirect URI - leave blank
    4. Select Register
    5. Make note of the Application (Client) ID, you will need it later
Register an App Create a symmetric key for the application, Save and note it for later use.

Steps to follow in Dataverse environment 

Log on to Dataverse environment and click on Advance settings

Go to Administrator

Choose Virtual entity data sources

Finance and operations is available as of the data source in Dataverse

Click on Finance and Operations and following screen pops up, this is where the connections established

Configuration in Finance and Operations

  1. Log on to Finance and Operations and go to System Administration | Users | Users
  2. Create a new user and assign 'CDS virtual entity application' role to it - don't assign system admin role to this user - This user is used to look at the metadata of the data entities from the Dataverse instance.
  3. Enter Application Id in System Administration | Setup | Azure Active Directory applications screen with the User ID = <The user created in step 1>

Test Finance and Operations data in Dataverse

Log on to Dataverse instance and click on a little funnel to open advance find and look for 'Available Finance and Operations Entities' in the list of tables in Dataverse instance. 
By default not all the entities are enabled this is to avoid cluttering the user experience in Dataverse but individual entities can be enabled e.g. I enabled DataManagementDefinitionGroupEntity and mark visible to make this as a virtual entity in Dataverse.
To illustrate this example, I created an export data project in Finance and Operations under Data Management with the name 'CDSVirtualEntitiesExport' - The data entity behind this data export projects is DataManagementDefinitionGroupEntity which is marked as virtual entity in above step. 
Restart the Advance find in Dataverse instance and look for Definition Group (mserp) table map and Run to see the output
This is it for today, with next post I will explain how to do customization/extension in F&O and get data into Dataverse using Virtual Entities. 
Hope you may have enjoyed the post, please do provide your feedback. Enjoy your break!!

在Dynamics 365项目运营中管理保留协议/合同账单/Manage Retainer agreements/contract billing in Dynamics 365 Project Operations

Filed under: 网络文摘 — 标签: — William @ 上午1:06

For project based service organizations such as the Marketing agency, Legal and IT consulting world, it is very common to require their customers to partially or fully pay for professional services in advance of the work getting done. This type of billing agreement is called “Retainer agreement” or in simple terms you can call it as pre-billing. In some cases you may also need to define an automatic schedule for retainer billing. In this agreement, the service provider agrees to receive the cash in advance and commits to deliver the services when needed.

When retainers are billed, the revenue is typically deferred and when the actuals on the projects are reconciled against the retainers/advances monthly, revenue is recognized

The Project Management and accounting module of D365 F&O provides this functionality called “Customer advances”, which lets you bill retainers or advances to customers for projects. With the release of version, D365 Project Operations solution now has the Retainers and Advances functionality available to general public. This blog post highlights the capabilities of this functionality.

There are 2 ways you can create retainers and advances for a project contract in D365 Project Operations.
  1. Create an automated schedule of retainers to be billed for a certain period of time for a specific amount. System will automatically create the scheduled lines and if you have a automated batch job running for invoice creation, the retainer invoices will be automatically created based on the schedule.
2. You can create them manually as needed on an ad-hoc basis.

When you create the retainer/advance record on the Project contract, those amounts are just ready to be billed to the customers, once you have marked the lines as “Ready for invoicing”. Until you have billed the retainer, they are not available to be applied/reconciled against actuals.

You can create the retainer/advance invoice just like you create any other invoice in Project Operations. The retainer lines will appear under the Advances and Retainers section of the proforma invoice.

After you confirm the proforma invoice, the Project invoice proposal is created and is ready for review and posting. Note that the retainer/advance line is created as an on-account transaction on the project, on the in finance side of the solution.(Those who worked on D365 F&O project module can relate this how the customer advance functionality in the project accounting module of F&O works).

When you post the retainer/advance invoice, the revenue is deferred and AR is debited. (Note here that the ledger posting depends on the cost and revenue profile and project ledger posting setup you have in the entity. For my scenario here, I have it setup for deferring the revenue when i bill retainers. I will recognize the revenue when I reconcile my actuals against the retainers).

You can view and track all your available retainers and advances under the Available retainers and advances tab.
Let’s now go ahead and reconcile some actuals against the retainers and see what happens. I have some time entries and expenses entries already approved and ready to be reconciled against the retainers now.
Notice that when I create the invoice for the project contract now, the system automatically applies the available/not used retainer amounts against the actuals and produces a $0.00 invoice.

At this point, you can modify the amount you want to apply if needed or just confirm the reconciliation invoice as is. After you confirm the reconciliation($0.00) invoice, a project invoice proposal is created automatically on the finance side. This invoice contains the actuals for time and expenses you are reconciling and a deduction on-account line to offset those.

Let’s go ahead and post this reconciliation $0.00 invoice and validate the results. Below screenshot shows the posted invoice with all the hours, expenses and deduction on-account lines of the reconciliation invoice.

The voucher shows that the actual revenue accounts were credited and the Deferred revenue was debited and no posting to the AR account, since this was just a reconciliation invoice.

Back on the retainers tracking page, you will now see that the remaining amount available for reconciling is updated.
That’s it for today’s post. Till next time!!!


在Dynamics 365项目运营中轻松管理复杂的交易/合同结构–深入研究项目合同/Manage complex deals/contract structures with ease in Dynamics 365 Project Operations – Deep dive into project contracts

Filed under: 网络文摘 — 标签: — William @ 下午12:07

In today’s post, we are diving deep into managing complex project contracts/deals in Dynamics 365 Project Operations. We will break down the building blocks of project contracts and understand what each attribute of the contract represents and how it functions.

Negotiating contracts with customers and prospects can get complicated sometimes and often requires flexibility on how you structure the contract to best match the customer’s needs. With Dynamics 365 Project Operations, you have that flexibility right out of the box.

The Project contract captures the work commitments that are negotiated and agreed upon with the customer. It also contains the associated billing details such as billing frequency, schedule, customers and so on for all the work that will be delivered as part of the contract. The below infographic shows the basic structure of a contract in Project Operations.

Project Contracts data is stored in the Order table in Dataverse. You can create Project Contracts manually or the system can create a project contract automatically upon winning an Opportunity. If you are tracking opportunities in the system, then you can transfer over several details into the contract automatically. There are few key data fields that are required when you create a new contract.

Owning Company: This is the legal entity that owns the contract legally and is responsible for reporting the costs and revenues of the contract. This is the legal entity where the Project contract and project record lives on the D365 Finance side.

Contracting unit: This is the business unit/division of the legal entity that is responsible for the delivery of the project associated with the contract. The Contracting unit drives the resource costing. When you setup the Cost rate cards, you can setup resource costs for each Resourcing company and Resourcing units.

Cost & Sales currency: This is the currency in which costs are reported in the front end. Transactions can be recorded in multiple currencies, but are shown in the cost currency of the contracting unit. Sales currency is the currency used for billing. This is also the currency in which project estimates and actuals are shown.

Price list: This the base price list the contract is associated with. You can override the price list to define the contract specific sales prices/bill rates.

Contract Lines is where the details of the contracting models and financial information resides. Contract lines are the key part the forms the overall contract. Right now in the Resource/non-stocked deployment scenarios, you can only add Project work based contract lines. Product based lines is not supported yet in this deployment model. In the example contract shown below, I have a fixed price work component and the travel & other expenses are setup to be billed on T&M basis.

Contract Line Details contains the key details such as,

Billing method: There 2 billing methods to chose from. You can charge a Fixed price for the work component in the contract. This work component can be a project or a task within the project. It depends on how you have structured your projects and contract. You can also setup a contract line to be billed on a Time & Material basis. An example of this would be travel and misc. expenses on project, which you pass the cost to the client. You can add a mark up if needed as well.

Project : Each contract line is linked to a Project. The Project record is the heart of the overall Project Operations solution experience. The Project associated with the contract line is used for the management the work component associated with the contract line. We will dive deep into Project setup, project management in a future post soon.

Transaction types included: On each contract line, you define what type of transactions (Hours/Expenses/Fees) the line includes. You may have one line representing all 3 types, or 3 different lines representing each type or Hours and Fees represented by one line and expenses represented by another line.

Contract line item details: Each contract line has associated line details that sums up the the total value of the contract line. The lien details contains information about transaction class, resourcing unit, Role, category, dates, quantity etc. You can create these lines manually or you can import them from the Initial project estimates to make the job easier.

Chargeable roles and categories: You can define which roles on the contract line/work component will be Chargeable or Non-chargeable.
Invoice Schedule: The invoice schedule defines how frequently you will bill the customer and the milestone dates, and amounts. You can create milestone schedule manually or you can have the system create it for you based on invoice frequency and billing start date. You can associate each invoice milestone to a project task if needed.

Customers/funding sources paying for the contract line: You can split an overall contract between more than one customer or you can also split each contract line between multiple customers. This reminds me the funding source, funding limit and funding rules feature we have in the classic PMA module in D365 F&O.

You can split each contract line to be billed to more than one customers and you can set % of split for each customer and you can also setup Not-to exceed limit for each line.

That’s it for this post. This was a deep dive on Project contracts and what flexibilities you have to set these up in Project Operations.


编号规则用完警报/Alerts for Number sequence numbers running out

Filed under: 网络文摘 — 标签: — William @ 上午12:43
we recently faced a problem where a number sequence reached its limit, although it was a bug in configuration and number sequence should be set to range like 9 digits 999,999,999, but this query below can be used to identify the number sequence which are reaching to its limit.  One can setup some alerts or some batch job that may be run on monthly basis and produce number sequences that are reaching consumption to let say 70%
       ,100 * (NEXTREC - LOWEST)/(HIGHEST - LOWEST) as 'Percent Consumed'   
  where (NEXTREC - LOWEST) >= (HIGHEST - LOWEST) * 0.2  


通过Dynamics 365 Project Operations统一以项目为中心的业务–面向基于项目的组织的一个软件包中的所有Microsoft应用程序中的佼佼者/Unify your Project centric business with Dynamics 365 Project Operations – Best of all Microsoft applications in one package for project based organizations

Filed under: 网络文摘 — 标签:, — William @ 上午10:40

In an earlier post, I wrote about overview of the new Dynamics 365 Project Operations solution from Microsoft and the 3 different deployment modes available for customers today. I was finally able to free up some time to deploy the new general available build of Project Operations. I deployed the fully integrated mode for resource/non-stocked scenarios.

In this blog post, I wanted to dive into other “Fully integrated D365 Project operations with financials for resource/non-stocked product scenarios” and showcase the key capabilities. At this point, this deployment scenario is suitable for project based organizations who does not have inventory materials/production requirements. The support for inventory materials is coming soon on the deployment mode.

In this post, we will focus on reviewing the end to end lifecycle of a project from lead to invoicing. The objective is not to go granular on each of the functionalities, but rather to review all functionalities you can use from at each stage. We will review specific features in future posts and deep dive into those.

The infographic below shows the overall capabilities of Dynamics 365 Project Operations.
Deal management experience (Lead > Opportunity > Quote > Contract):

D365 Project Operations provides comprehensive Lead, Opportunity and Quote management features suitable for project based firms. It leverages the best of the industry leading D365 Sales solution in the Customer Engagement platform and lights up the experience right within the Project Operations app.

You can track all required Lead information and once you quality the Work based lead, an Opportunity record is automatically created, where you can add the building block of the work.

In the Resource/Non-stocked based scenarios deployment of Project Operations, you can only add Project based lines right now, but the support for service based items/products is coming soon. (Note: If you have the Lite deployment of Project Operations with no Finance integration, you can still add product based lines, just like you did in the old D365 PSA app).

You can assign a price list/rate card for the opportunity and you can now build the line items on the Opportunity and specify the details such as Billing method, amount, customer’s budget and so on.

Once the Opportunity details are fine tuned with the customer, you can build a proposal/quote directly from the Opportunity and all the line item details are carried over automatically. The Quote lines represent the discrete components of the work that you will present on the quote to the customers.

The Quote line details is where you identify and estimate the details of each quote line/work component such as, schedule, financials, contracting model and so on. This information on the quote line details helps you do profitability analysis on the quote.

If the Project is funded by more than one entities of the customer, you can add the customers/funding sources on the quote line and designate the amount/percent split of the amount for billing and you can also specify the “Not-to-exceed” limit for each customer. This reminds of the Funding sources, funding limits and funding rules functionality that we all know in the classic Project accounting module of D365 Finance 🙂

If the quote line is a Time & Material line, you can specify additional details such as “Chargeable Roles”, “Chargeable Categories”. You can also create the project to create the ground up estimates from the project tasks/plan and import those into the quote lines. After you have built the quote details, you can review profitability analysis info.
You can also how your quote compares to the customer’s expectations.
When you have won the quote, you can associate the Project ID to the quote/opportunity line and close the Quote as Won. As soon as a Quote is closed as Won, a Project contract is automatically created in Draft status and new project is associated with this contract.
Project and Resource management experience: Project managers can create detailed project WBS/plan using the capabilities of Project for the web(P4W) capabilities built right into project operations. I am not going to focus on discussing details of the individual functionalities around project management and resource management aspects in this post. We will save that for another post.
Time & Expense management experience:

Your resources can use the intuitive time entry UI to keep track of their daily time and submit periodically/weekly. You can also keep track of employee expenses with the robust expense management module of Project operations, with features such as expense policies, workflows and credit card integration. The expense management experience comes from the proven D365 Finance app and offers advanced expense management capabilities. They can also use the T&E mobile apps.

Managers can review timesheets and expenses in the Approvals work bench and process them in timely manner.
Project transaction corrections and Invoicing

Project finance/billing team can stay on top of their tasks with intuitive interfaces for transactions corrections/adjustments to make sure any adjustments to transactions are processed prior to billing.

The dedicated work benches for Time & Material, Fixed price milestone and advance & retainers billing backlogs are handy providing all the billing backlog information at one place . You can review details such as invoice status, Not to exceed limits and statuses of each transaction to make sure the customer invoices are accurate.

Creating invoices for project contracts is simple. It can be created manually for each contract or an automated batch job can be setup to run on automatic recurrence.

As soon as you confirm the Draft/Proforma invoice, a project invoice proposal is created, which is then ready to be posted. With the industry leading sales tax engine of D365 Finance solution, you don’t have to worry about complexities of sales tax calculations.

Project Operations also provides functionality for advances and retainers billing to customers. This is a new feature that was released in version This feature reminds me the good old customer advance functionality we have in the legacy project management and accounting module in D365 Finance.

Additional you can also setup an automatic retainer schedule to bill customers automatically based on a pre-defined schedule and invoice frequency. You can reconcile actuals against billed retainers and advances.

Revenue recognition, sales tax and financials management:

With the ” Fully integrated Resource/non-stocked scenario/deployment mode, you have full coverage of Revenue recognition, sales tax management and comprehensive industry leading project accounting and financials management. This part of the solution is built on the powerful Project management and accounting solution we all are familiar with in D365 F&O. The module is tailored and modified to work with the overall project operations solution. I am working on a separate blog post to explain the details of how the PMA module of D365 Finance is tailored to work with the Project operations solution. I will explain the key changes and how it works in that post.

That was a happy path blog post on Dynamics 365 Project Operations. This was my second post on the official D365 Project Operations solution on my blog and the idea was to showcase what the solution can do for project based organizations. I am pretty excited about how the different industry leading applications from Microsoft for the project based organizations (Dynamics 365 PSA, Dynamics 365 Finance, Project for the Web) came together powered by Microsoft Dataverse(CDS), providing a seamless application for project based organizations of all sizes

That’s it for this post! We will discuss specific topics on Project operations in future posts very soon.


你知道吗……如何打印带有文档附件的发票?/Do you know … how to print invoices with document attachments?

Filed under: 网络文摘 — 标签:, — William @ 下午7:18
For more information on electronic reporting check out MS Docs  

[已解决]表浏览器无法正常工作 /[Solved] Table browser not working

Filed under: 网络文摘 — 标签: — William @ 下午6:48

Hi Folks,

 Few days back I got a new dev box which was recently rolled out by one of a colleague.  All of a sudden it started behaving strangely. Whenever browsing a table I was getting below error.


Access Denied: You do not have sufficient permissions to open the menu item systablebrowser. Please contact your system administrator.

I double checked all the access, I got full admin access on this server but still same issue. This created more confusion when I was trying to run the debugger, I started getting below error. 

Access Denied: You do not have sufficient permissions to open the menu item sysclassrunner. Please contact your system administrator.

So to overcome this issue, double-check if the developer configuration key is enabled, in my case it was disabled and that was the root cause of these problems.


Now if you see the message on top of this form (Sysadmin > setup > License configuration) it is saying you cannot edit any record in the form until the server is in maintenance mode.

(See this link for how to enable maintenance mode in D365FO)

So first you need to enable maintenance mode on this server and then enable the development key.

Once than done, make sure you disable maintenance mode. And give it a try now, you should be able to browse a table. ( Also, the debugger is working fine as well 😊 )

Merry Christmas to all. Have a great holiday ahead.


Follow us on Facebook to keep in rhythm with us. https:fb.com/theaxapta


Dynamics 365 Dual Write in Action

Filed under: 网络文摘 — 标签: — William @ 下午4:00
Since the early days the integration of Dynamics AX ERP and Dynamics CRM was a painful challenge. Microsoft came up with may not so great working solutions. Dual Write is a Power Platform solution for Dynamics 365 Finance / SCM and Dynamics 365 CE. It supports the synchronization beween these two products almost in real time. I’ve made a short video to demonstrate the synchronization between Finance and CE. A customer is created in CE and becomes immediately a customer in FO. The quotation from CE is synchronized to FO where it is converted into a sales order. The sales order is visible in CE. The order is invoiced in FO and can be reviewed from within CE.
Dynamics 365 Finance – CE integration via Dual Write
Older Posts »

Powered by WordPress