如何将 UAT 的数据在上线时部署到生产环境(How-to-deploy-UAT-data-to-production-server-in-D365FO)

前言 首先这次的操作并不是官方推荐的,但是在绝大多数上线的时候,主数据都是在UAT环境配置和测试,并且绝大多数的应用顾问或者用户都不希望做这种重复劳动,他们太忙了吧~ 然而系统并没有提供可以直接部署或者还原的功能,那么我们就创建一个Service Request给微软吧。 Service Request 登录 LCS,打开 Project Details ,创建一个新的Service request 如下图: 新建 如下图: 选择 Sandbox to production 如下图: 接下来需要选择 Sandbox source 、downtime 等等 提交 勾选所有选项后提交吧,提示说这个过程至少需要5个小时的停机时间,但是绝大多数情况1小时左右就能完成了。

DynamicsAX与第三方系统(Using-webservice-to-connect-with-Dynamics-AX)

Webservice 第三方接口调用AX内部程序 SystemConnector 在”Csharp”代码中,我们可以直接调用”Systemconnector”提供的接口从而实现执行AX内部程序的功能。 如:axServiceProvider.handleAgileData(“cig”, _XMLStr); 实际上 “axServiceProvider” 是通过内置函数 “CallStaticClassMethod” 来实现调用AX内部程序。 string returnStr = (string)op.CallStaticClassMethod(“AX Class”, “Class Method”, _legal, _XMLStr); 将第三方外部程序组织的XML数据主动传递给AX,AX内部只需要解析该XML数据即可执行相应的业务逻辑操作。 在 axServiceProvider 中我们可以设定AX2009的环境端口,用户,密码,公司等信息,同样可以构建更多的方法来调用Ax不同的功能。 下文是通过”Csharp”代码调用接口的样例: Consume SystemConnector in VS using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; using SystemConnector.DynamicsAX;   namespace CIG_WCF4AgileAX { public partial class WebForm1 …

Continue reading ‘DynamicsAX与第三方系统(Using-webservice-to-connect-with-Dynamics-AX)’ »

如何在 DynamicsAX 中处理CLR对象报错的问题(Working-with-CLR-exceptions-in-Dynamics AX)

CLR对象报错 在 Dynamics AX 中 无论版本是2009还是2012或者D365,总是会遇到下面这两个报错: 而且系统给出的日志实在是太简短了,让人摸不着头脑。不过一般出现这两个问题都是在AX中处理 .net 相关的 dll 或者在调用 web service、WCF。那么剩下的问题就是我们该怎么样得知在调用 .net 框架的时候究竟出了什么问题呢,一旦知道了具体原因就好办了。 好,那我们通过一个 Job 演示一下吧: static void RaiseCLRException(Args _args) { ; //Necessary if executed on the AOS new InteropPermission(InteropKind::ClrInterop).assert();   try { //This will cause an exception System.Int32::Parse("abc"); } catch(Exception::CLRError) { //Access the last CLR Exception info(CLRInterop::getLastException().ToString());   //See AifUtil::getClrErrorMessage for another …

Continue reading ‘如何在 DynamicsAX 中处理CLR对象报错的问题(Working-with-CLR-exceptions-in-Dynamics AX)’ »

如何安装和配置一台 Dynamics 365 FO的开发机(How-to-setup-a-d365fo-develop-machine)

配置开发机 以下是一些安装条件 从 Microsoft Dynamics Lifecycle Services 下载安装虚拟机文件 共用资产库 可下载的 VHD 此处略过如何挂载虚拟机… 远程桌面用户名密码: User name: Administrator Password: pass@word1 重命名开发机 在以下两种情况下需要重命名开发机: 在数据库中更新服务器名称 通过以下命令在 Microsoft SQL Server 2016 中更新: sp_dropserver [old_name];GOsp_addserver [new_name], local;GO 如果不记得了,可以通过以下命令得到老的服务器名称:select @@servername 更新报表服务器 需要在报表服务器配置中重新选择数据库 更新 Azure Storage Emulator 开始菜单,打开 Microsoft Azure,打开Microsoft Azure Storage Emulator 或者到路径 :C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Azure\Storage Emulator 执行命令:AzureStorageEmulator.exe startAzureStorageEmulator.exe statusAzureStorageEmulator.exe init -server …

Continue reading ‘如何安装和配置一台 Dynamics 365 FO的开发机(How-to-setup-a-d365fo-develop-machine)’ »

如何把Dynamics 365 FO UAT的数据库还原到开发环境(how-to-restore-d365fo-sandbox-db-to-dev)

还原数据库 以下是将 Sandbox DB 恢复到 DEV 的过程。 SqlPackage.exe /a:import /sf:D:\Exportedbacpac\my.bacpac /tsn:localhost /tdn:<target database name> /p:CommandTimeout=1200 Example Demo 1. SqlPackage.exe /a:import /sf:J:\MSSQL_BACKUP\Demo_PreProdbackup.bacpac /tsn:localhost /tdn:PreProd_20220712 /p:CommandTimeout=1200 Demo 2. SqlPackage.exe /a:import /sf:J:\MSSQL_BACKUP\Demo_uatbackup.bacpac /tsn:localhost /tdn:uat_20221028 /p:CommandTimeout=1200 ALTER DATABASE [uatbackup_20190401.bacpac] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 6 DAYS, AUTO_CLEANUP = ON)   — CREATE USER axdeployuser FROM LOGIN axdeployuser EXEC …

Continue reading ‘如何把Dynamics 365 FO UAT的数据库还原到开发环境(how-to-restore-d365fo-sandbox-db-to-dev)’ »

如何在D365FO创建SSRS报表(三)Contract Class(how-to-create-ssrs-report-in-d365fo-part3-contract-class)

Contract 存放报表打印时使用的参数 实现接口 SysOperationValidatable [ DataContractAttribute, SysOperationGroupAttribute(’Parameters’, "@SYS28007", ‘1’), SysOperationGroupAttribute(’ViewGroup’, "@SYS5252", ‘2’) ] public class Demo_InventJournalTransTransferContract implements SysOperationValidatable { TransDate fromDate,toDate; InventDimViewContract InventDimViewContract;     [ DataMemberAttribute("From date"), SysOperationLabelAttribute(literalstr("From date")), SysOperationDisplayOrderAttribute(’1’) ] public TransDate parmFromDate(TransDate _fromDate = fromDate) { fromDate = _fromDate; return fromDate; }   [ DataMemberAttribute("To date"), SysOperationLabelAttribute(literalstr("To date")), SysOperationDisplayOrderAttribute(’2’) ] public TransDate …

Continue reading ‘如何在D365FO创建SSRS报表(三)Contract Class(how-to-create-ssrs-report-in-d365fo-part3-contract-class)’ »

如何修改系统标准的SSRS报表(how-to-extend-standard-ssrs-report)

CustAccountStatementExt 演示如何向 Customer account statement report 添加新字段 1.添加新字段 主临时表是 CustAccountStatementExtTmp,右键单击并创建扩展;我将添加一个新的字符串字段 MaxTxT。 2. 复制这个报表 重命名为:CustAccountStatementExt 3.修改报告设计 右键单击报表数据集并选择恢复以刷新新字段,打开报表设计器并将该字段添加到表中 4. 创建一个新的扩展类来扩展标准报表Controller class class CustAccountStatementExtControllerExtextends CustAccountStatementExtController { //Add construct public static CustAccountStatementExtControllerExtconstruct() { return new CustAccountStatementExtControllerExt(); }   public static void main(Args _args) { SrsPrintMgmtFormLetterController controller = new CustAccountStatementExtControllerExt(); controller.parmReportName(PrintMgmtDocType::construct(PrintMgmtDocumentType::CustAccountStatement).getDefaultReportFormat()); controller.parmArgs(_args); CustAccountStatementExtControllerExt::startControllerOperation(controller, _args); }   protected static void startControllerOperation(SrsPrintMgmtFormLetterController _controller, Args …

Continue reading ‘如何修改系统标准的SSRS报表(how-to-extend-standard-ssrs-report)’ »

如何通过Print management 打印SSRS报表(how-to-print-ssrs-report-using-print-management)

报表打印管理Print management 添加一个新的Report format 如下图为Customer invoice添加两个新的Report format 图中的两个Report format可以通过添加一下代码可以实现 [ExtensionOf(classStr(PrintMgmtReportFormatPopulator))] public final class PrintMgmtReportFormatPopulator_Demo_Extension { #PrintMgmtSetup   protected void addDocuments() { // Add new customized reports this.addOther(PrintMgmtDocumentType::SalesOrderInvoice, ssrsReportStr(DocSalesInvoice, Report), ssrsReportStr(DocSalesInvoice, Report), #NoCountryRegionId); this.addOther(PrintMgmtDocumentType::SalesOrderInvoice, ssrsReportStr(DocSalesInvoiceExt, Report), ssrsReportStr(DocSalesInvoiceExt, Report), #NoCountryRegionId); // Add the standard report design, because of PrintMgmtDocType.getDefaultReportFormatDelegate() this.addOther(PrintMgmtDocumentType::SalesOrderInvoice, ssrsReportStr(SalesInvoice, Report), ssrsReportStr(Sal next addDocuments(); } } …

Continue reading ‘如何通过Print management 打印SSRS报表(how-to-print-ssrs-report-using-print-management)’ »

如何在D365FO创建SSRS报表(二)Controller Class(how-to-create-ssrs-report-in-d365fo-part2-controller-class)

Report controller 继承SrsReportRunController 如果没有特殊要求,以下代码就可以搞定。 public class Demo_InventJournalTransTransferController extends SrsReportRunController {   public static void main(Args _args) { Demo_InventJournalTransTransferController controller = new Demo_InventJournalTransTransferController();   controller.parmReportName(ssrsReportStr(Demo_InventJournalTransTransfer, Report)); controller.parmDialogCaption("@Demo954"); controller.parmArgs(_args); controller.startOperation(); } } 多选 如果需要打印用户所选的数据,多选需要用到 MultiSelectionHelper public class Demo_InventJournalTransTransferController extends SrsReportRunController { ……   public void preRunModifyContract() { Demo_InventJournalTransTransferContract contract = this.parmReportContract().parmRdpContract() as Demo_InventJournalTransTransferContract; }   public void …

Continue reading ‘如何在D365FO创建SSRS报表(二)Controller Class(how-to-create-ssrs-report-in-d365fo-part2-controller-class)’ »