学习MS Dynamics AX 2012编程开发 1. 了解Dynamics AX 2012

在本章中,您将了解开发环境的结构以及Microsoft Dynamics AX中的开发人员可以访问哪些工具。在本书的第一步演练之后,您将很容易理解著名的Hello World代码,您将知道应用程序对象树中的不同节点代表什么。

以下是您将在本章中学习的一些主题:

  • 开发环境之旅
  • 查看可用的工具
  • 创建一个在屏幕上打印内容的作业
  • AX体系结构概述

了解开发环境

让我们来看看Dynamics AX开发模型的主要功能:

  • AX编程语言
  • 应用程序对象树(Application Object Tree)
  • X++代码编辑器
  • 编译器
  • 标签

编程语言

AX中的编程语言称为X++,其语法与Java和C#相似。除了是一种面向对象的编程语言外,它还包括嵌入式SQL。这意味着在AX中编写SQL语句非常容易,因为作为开发人员,您不需要创建到数据库的连接,然后创建在连接上执行的语句,以此类推。相反,您可以将SQL语句直接写入X++代码中,就像现在.NET使用的语言集成查询(LINQ)一样。

您将在下一章“X++语言”中了解语法、功能以及X++语言的工作原理。

MorphX

除了编程语言之外,Dynamics AX还提供了一个名为MorphX的集成开发环境。这一切都是关于AX中的可视化开发,它允许开发人员以图形化的方式创建代码元素,就像visual Studio一样,通过拖放和设置元素的属性。在大多数情况下,这也是建议的开发方法。大多数AX元素都可以使用MorphX进行编辑。

应用程序对象树(AOT)

应用程序对象树(AOT)是AX中所有代码元素的位置。

您可以从顶部菜单中单击AOT图标打开它,如以下屏幕截图所示,也可以从AX中的任何位置按Ctrl+D;这将启动开发工作区。

然后,您将看到树视图中显示的AOT,如以下屏幕截图中右侧所示:

数据字典(Data Dictionary)

AOT被组织为在一个名为数据字典的节点下具有与数据在数据库中的存储方式相关的所有元素,以及与安全相关的元素,如安全密钥、配置密钥和许可证代码。在此节点下,您将找到表、Map、视图、扩展数据类型、基本枚举、许可证代码、配置密钥、安全密钥、表集合和透视。

宏(Macros)

宏是整个解决方案中使用的预定义值,它们只是在代码中默认值(一点字符串)的机制,因此不必对值进行硬编码。

类(Classes)

在开发世界中,对象是一个自包含的组件,它包含使某种类型的数据有用所需的属性和方法。对象的属性是它所知道的,它的方法是它所能做的。

从面向对象的角度来看,对象是应用程序的基本构建块。您将在开发的任何AX函数中使用许多不同类型的许多对象。每种不同类型的对象都来自该类型的特定类。

类是构建特定类型对象的蓝图、模板或指令集,每个对象都是从类构建的。

表单(Forms)

表单是Dynamics AX的UI元素。他们可以打开窗口搜索数据、查看数据、更改数据、创建新记录或删除记录。此外,表单通常包含链接到执行业务逻辑的其他表单、报表和类的按钮(不建议在表单中编写业务逻辑;类是执行此操作的正确位置)。

数据集(Datasets)

数据集由VisualStudio组件使用,如ReportingServices报表和AX用户控件,您将在后面的章节中看到。数据集通过将表添加到数据集中来定义这些Visual Studio组件使用哪些表,这与处理数据源中的表非常相似。

SSRS报表(SSRS Reports)

所有AX 2012报表都是使用SQL Server Reporting Services执行和呈现的。此节点保存将在AX中使用的所有SSRS报表。

报表(Reports)

报告是标准的AX报表,以报表的形式向用户显示数据或将数据写入打印机或文件。此节点仅可用于管理旧报表,不建议使用此方法创建新报表。

报表库(Report Libraries)

报表库是指向Visual Studio中的报表项目的链接。不能直接从AX创建报表库。您必须先在VS中创建一个报表项目,然后将其导入AX。然后它就变成了一个报表库。此节点仅可用于管理旧报表,而不是创建新报表的推荐方法。

查询(Queries)

AOT中的查询是预定义的静态查询,可以在整个应用程序中重用。查询包含数据源的层次结构,该层次结构定义了哪些数据应可用于查询。AX中的其他元素也可以使用查询,例如窗体、报表和类。

作业(Jobs)

作业是用于直接执行一小段代码的静态方法。它们适用于本应只执行一次的代码,但不打算成为解决方案的一部分。作业通常用于更正/更新在数据迁移过程中可能被错误修改的特定表/记录。

菜单(Menus)

 菜单为最终用户提供了打开最常用的表单和报告以及启动定期任务的选项。菜单实际上是形式的分组;最终用户通常将菜单视为模块(即功能区)。

菜单项(Menu Items)

菜单项是指向窗体、报表和类的指针。有三种不同类型的菜单项,即显示、输出和操作。显示菜单项用于打开窗体,输出用于打开报表,操作用于执行具有主方法(startpoint)的类。

Web

Web节点由子节点组成,子节点又包含与Web应用程序(如企业门户(EP))开发相关的不同类型的元素。

服务(Services)

服务用于设置web服务,让其他应用程序通过应用程序集成框架(AIF)使用AX类。AIF用于与贸易伙伴或应用程序进行电子通信。

工作流(Workflow)

AX中的工作流框架允许开发人员创建工作流,根据特定事件定义特定的执行流。在AX中使用工作流的典型场景是一名员工输入采购订单的采购申请。如果采购订单超过一定的限额,则必须得到经理的批准。如果经理拒绝,则会向创建订单的员工发送消息。如果获得批准,订单将自动发送给供应商。

资源(Resources)

资源是导入到AX数据库中的文件,可以在代码中从AOT中的资源节点引用,而不是使用磁盘中的目录和文件名。这些文件通常是图像、图标、级联样式表和XML文件。您可以通过在AOT中选择“资源”节点,右键单击该节点,然后选择“打开”来预览文件。

系统文档(System Documentation)

在AOT的底部,您可以找到系统文档形式的帮助。它包含有关AX核心的文档。此处找到的元素不是开源的。这意味着,作为开发人员,您必须将这些元素作为黑盒来关联。这意味着只有你知道该在方法中投入什么,以及你能期望得到什么。您可以在这里找到有关全局函数的信息,例如strlen()。该函数和大多数其他函数都记录了输入参数、返回值的说明以及如何使用该函数的示例。

核心类及其方法也是如此。典型的核心类有Map、Array、AsciiIo、FormRun和XppCompiler,仅举几例。

应用程序开发人员文档

Application Developer文档包括有关标准AX表和类的文档。此文档基本上只是显示信息的另一种方式,作为开发人员,您应该能够通过浏览AOT、读取代码和查看属性来找到这些信息。

属性

你可能会问,我该如何看待属性。好吧,在AOT中的任何时候,您都可以按Alt+Enter键或右键单击并选择属性以打开“属性”窗口,如以下屏幕截图所示:

AOT中的每个元素类型都有一组固定的属性,开发人员可以更改这些属性。用粗体文本标记的特性已专门针对选定图元进行了更改。您可以在前面的屏幕截图中的Name属性中看到粉红色的背景,这意味着它是强制性的。黄色背景意味着最好在该属性中包含一些内容。其余属性由系统默认设置。

默认情况下,属性是根据它们所代表的元素的相关性来组织的。但是,可以从用户选项窗体中将此排序设置为字母顺序。单击Microsoft Dynamics AX按钮(Alt+F)并导航到“工具”|“选项”,打开用户选项窗体。在“开发”选项卡下,可以启用“按字母顺序排序”复选框,按字母顺序对属性进行排序,如以下屏幕截图所示:

X++代码编辑器

AX 2012附带的X++代码编辑器基于Visual Studio的代码编辑器,因此,它支持颜色编码、单词补全、自动缩进、脚本、缩放、多行编辑以及Visual Studio中提供的许多其他功能。这是所有X++代码的编写位置。

X++代码编辑器由三个部分组成;方法列表、菜单栏和代码窗口。

如果双击某个元素,方法列表将显示选定元素中的所有方法。如果双击元素中的方法,则只能在方法列表中看到该方法。如果双击同一元素中的另一个方法,则可以在方法列表中看到两个选定的方法。更改方法时,它会在方法列表中的方法名称后显示一个星号,以显示尚未保存的已更改方法。

代码窗口明显显示了方法列表中所选方法的X++代码:

前面屏幕截图中显示的菜单栏具有以下选项,从左到右依次列出:

可用选项解释如下:

• New:此选项在所选元素中创建一个新方法。
• Save:此选项保存方法列表中打开的所有方法。
• Run:如果方法/类是可执行的,则此选项将执行该方法/类。
• Breakpoint:此选项在光标所在的行设置断点。
• Enable/Disable breakpoint:此选项启用或禁用断点。
• Remove all breakpoints:此选项将删除当前用户的所有断点。
• Compile:此选项编译并检查代码中的错误。
• Lookup properties/methods:如果光标位于核心函数/方法上,则此选项显示所选文本的帮助;例如,列出类的方法、枚举的可用值等等。
• Lookup label/text:此选项打开标签编辑器并搜索所选文本。
• Scripts:此选项打开一个上下文菜单,该菜单由小代码片段组成,如do-wile循环、头注释等。
您也可以通过在EditorScripts类中创建新方法来创建自己的脚本。
• Source Code Controls:以下五个选项用于管理源代码(版本控制):
        ° 添加到源代码管理:此选项启用对象的版本控制
        ° 结账
        ° 报到
        ° 撤消签出
        ° 历史

• Help:此选项在代码窗口中显示所选文本的帮助文件(如果存在此类帮助文件)。如果没有,它将显示X++代码编辑器的帮助文件。
• Display Changes:此选项类似于Visual Studio的同名选项,其中更改将在编辑器中进行颜色编码。
• Display Line numbers:此选项在代码编辑器的左侧显示行号。

编译

AX中的编译器在许多方面与其他编译器一样;它检查语法错误,如果有任何语法错误,就会向开发人员显示错误消息。如果它发现任何代码放错地方或没有按照最佳实践遵循的规则编写,它也可以发出警告。

AX编译器与其他编译器(如Visual Studio的.NET编译器)之间的一个主要区别是,AX编译器只需要编译已更改的代码。这样做的问题是,您更改的代码可能会使使用更改代码的类停止编译。
如果它们没有重新编译,并且可能也发生了更改,用户将遇到运行时错误。

为了决定编译器在编译代码时应该如何操作,您可以查看在更改编译器参数时提供给您的一些选项。

首先,要更改编译器参数,必须打开用户选项窗体(单击Microsoft Dynamics AX按钮(Alt+F),然后选择“工具”|“选项”)。在用户选项窗体的“开发”选项卡中,单击“编译器”选项以打开“编译器”设置窗体,如以下屏幕截图所示:

在这里,你检查了交叉参考标志,就可以出发了。请记住,当必须更新交叉引用时,在AX中编译代码将花费更多的时间。有关交叉引用的更多信息,请参阅交叉引用部分。此表单中的字段控制X++编译器的操作方式。通过更改“诊断级别”选项,可以将代码设置为在不同级别发出编译器警告。您可以选择不接收任何关于外观奇怪的代码的警告(例如在方法中的return语句后面有一行代码)。当然,编译器错误仍然会显示出来。级别4意味着编译器还将运行最佳实践检查。

输出定义编译器消息应该出现的位置。它们可以出现在编译器输出形式中,如以下屏幕截图所示:

或者,消息可以显示在打印窗口中:

编译器输出表单被设置为默认值,因为它包含更多信息,并且具有更标准化的外观,并划分为以下选项卡页:

• 状态:此页面允许您查看所编译内容的总体状态
• 错误和警告:此页面显示任何错误或警告,具体取决于编译器设置窗体中设置的诊断级别
• 最佳实践:此页面显示最佳实践参数表单中指定的最佳实践警告
• 任务:通过编写包含TODO语句的注释,将任务添加到代码中:

标签

Dynamics AX中的标签是通过仅引用代码中的标签ID来翻译所有用户可见文本的一种方式。每种语言都由一个特定于语言的标签文件表示,文件本身与AX模型一起存储在数据库中。这些标签文件由标签ID和该特定语言的标签文本组成。在文本编辑器中打开标签文件时,可以看到列出的标签,例如:

@SYS390 Quantity that is not yet cost accounted in the BOM unit.
@SYS400 Create and compose serial numbers automatically.
@SYS403 Finish must be greater than start.
@SYS418 Transfer customer information?

这意味着,如果在AX中某个字段的label属性中写入@SYS403,它将显示Finish。如果用户使用的语言代码为en-gb(因为这是从标签文件AxSYSen-gb.ald中获取的),则对于在窗体或报表中查看该字段的用户,Finish必须大于start

要创建新的标签文件,只需从Microsoft Dynamics AX按钮(Alt+M)启动标签文件向导,然后导航到“工具”|“开发工具”|标签文件向导,并运行该向导的三个不言自明的步骤。

然后,您的标签文件将命名为AxXXXen-gb.ald,其中XXX是在浏览向导时选择的三个字母的缩写。

创建您的第一个AX程序

为了制作Hello World示例,我们只需从Dynamics AX主窗口的任何位置按Ctrl+D,或按顶部菜单中的AOT按钮即可打开AOT,如本章的第一张屏幕截图所示。然后执行以下步骤:

  1. 转到AOT中的“Job”节点,右键单击它并选择“新建Job”。
  2. 检查作业是否自动打开。
  3. 将打开一个新的X++编辑器窗口,显示一个新Job:
    static void Job1(Args _args)
    {
    }
    由于Job是静态的,并且具有Args类的输入参数,因此可以直接运行。
    显然,前面的示例没有任何作用,但在单击Go按钮或按F5键运行作业后,如以下代码所示简单地编辑作业将在打印窗口中显示HelloWorld消息。
    static void HelloWorld(Args _args)
    {
    print "HelloWorld";
    pause;
    }

    pause语句将停止程序的执行,并询问您是否要继续。此示例中使用了它,以便您可以看到打印窗口中的内容。如果暂停语句没有放在这里,打印窗口将打印HelloWorld,并在眨眼之间再次关闭。

利用不同的开发工具

AX提供了许多不同的工具,可以帮助开发人员更高效地完成工作。然而,其中一些工具很少使用,因为它们几乎没有价值。现在,我们将了解您在AX中编程时每天使用的一些工具。您需要了解的一些工具如下:

  • Cross-references
  • MorphX version control
  • Debugger

Cross-references

交叉引用允许开发人员在AOT中选择一个元素,并询问系统该元素在哪里使用。结果以表格形式列出,并显示该元素是用于读取还是写入、从中调用它的元素的名称、使用它的方法以及它在方法中的使用位置(行/列)。交叉引用还使开发人员能够查看所选元素使用的所有元素。当然,交互参考工具的最佳用途是能够查看特定元素的使用位置。

为了能够看到交叉引用的数据,您需要定期更新交叉引用,至少如果您希望在进行更改的时间点在开发环境中看到它。这可以通过将交叉引用更新设置为在批处理中运行来完成,也可以将交叉引用设置为每次更改元素时更新。要将其设置为每次更改元素时都进行更新,需要更改编译参数。

首先,您必须运行一个完整的交叉引用更新。这是通过选择Microsoft Dynamics AX按钮(Alt+F)并导航到“工具”来完成的|开发工具|交叉引用|定期|更新。您将看到以下窗口:

您可以选择在重新创建之前删除所有现有的交叉引用,更新AOT中所有元素的交叉引用或通过选择“选定”并单击“选择”按钮来选择要更新的元素。然后,您将获得一个查询,在该查询中您可以筛选要更新交叉引用的元素类型。

此外,还有两种其他有用类型的交叉引用可以从该表单中更新。更新数据模型将使最终用户不仅可以筛选查询中正在运行的字段,还可以筛选其他相关表中的字段。一个例子是当最终用户想要打印报告Cust时,该报告列出了客户。假设他们希望将报告限制为仅显示创建过订单的客户。然后,他必须将SalesTable添加到报告的结构中,以便在CustTable和SalesTable之间创建一个内部关联。

更新类型层次结构将使开发人员能够查看类或扩展数据类型,并查看它是否属于层次结构,如以下屏幕截图所示:

应用程序层次结构树的左侧显示SalesFormLetter_Conform类属于哪个类层次结构。AX中的所有类都会自动扩展Object类,如您在树的顶部所见。表单的右侧部分将向您展示SalesFormLetter_Conform的所有方法,以及它们在类层次结构中的实现位置。

MorphX版本控制

如果您已经在Visual Studio中与多个开发人员一起对项目进行了开发,那么您很可能已经使用了版本控制工具,并了解其要点。基本上,它是一个存储库,您可以在其中签入和签出元素,并跟踪随着时间的推移对元素所做的更改。如果出于某种原因想要使用元素的旧版本,则版本控制也允许您这样做。

当您签出一个元素时,它会被其他开发人员锁定,因此只有您才能对其进行更改。当您对该元素进行了更改后,只需将其签入并评论您所做的更改类型。然后,它将可供其他开发人员再次更改。如果由于某种原因,对元素所做的某个更改造成了不需要的情况,您可以简单地将元素恢复到进行特定更改之前的状态。

设置MorphX版本控制

要在AX中设置MorphX版本控制系统(VCS),只需单击Microsoft Dynamics AX按钮(Alt+F),然后导航到“工具”|“开发工具”|版本控制|安装程序|参数。

然后,您应该设置此表单,如前面的屏幕截图所示。首先,您必须在源代码管理状态下选择“启用”。然后,您需要选择要使用的版本控制类型。本内容仅涵盖MorphX VCS,因为它是拥有五名或更少开发人员的小型项目的最佳选择。这样做的主要原因是,它不需要每个开发人员都像Visual Source Safe和Team Foundation Server那样在本地安装完整的AX。

如果正在为AX创建新模块,或者已经在使用Team Foundation Server,则选择Team Foundation Server作为AX的版本控制可能是更好的选择。

使用MorphX VCS时,存储库实际上位于AX数据库中,因此只要您登录到AX解决方案,就可以始终访问它。

您还可以根据VCS状态选择对AOT元素进行颜色编码,并在恢复对象时收到警告,如以下屏幕截图所示:

设置这些参数后,您可以通过单击Microsoft Dynamics AX按钮(Alt+F)选择创建存储库,然后导航到“工具”|“开发工具”|《版本控制》|“安装程序”|“创建存储库”。

这基本上会在AOT中的所有元素中使用共享注释进行检查。如果您有一个未对标准AX进行任何修改的新解决方案,则不需要这样做,因为您始终可以选择在系统层中返回到原始版本。

您还可以通过单击Microsoft Dynamics AX按钮(Alt+F)并导航到工具|开发工具|版本控制|安装程序|系统设置,设置一些规则,以确定在尝试将元素签入VCS时应允许或拒绝哪些内容。

在这种界面中,您可以选择设置规则,这样开发人员就不会检查未编译或存在最佳实践错误的代码。

您还可以设置一个测试项目,并在能够签入代码之前成功地通过该测试项目运行代码。

使用MorphX版本控制

设置MorphX VCS后,可以在开始处理元素时开始向VCS添加元素。

要将元素添加到VCS,只需在AOT中选择元素,然后从AOT菜单栏中单击“添加到版本控制”按钮,或者右键单击元素并选择“添加到版本控制”。

将元素添加到版本控制后,您将能够签入该元素以将您的更改添加到存储库中。这可以通过单击AOT菜单栏中的“签入”按钮,点击Alt+I,或右键单击元素并选择“签入。

然后,您将看到一个由已检出(或添加到VCS但尚未检出)的所有元素组成的表单。在单击“确定”之前,您必须键入对元素所做操作的描述。然后,该元素将被检入存储库。

要查看一段时间以来对此元素所做操作的历史记录,您可以在AOT中选择该元素并单击“历史记录”按钮,或者右键单击该元素并选择“历史记录。

历史记录窗体将显示AOT中特定元素的历史记录。历史记录包括所有带有注释、用户ID、日期、时间和版本ID的签入。

您也可以通过单击“查看文件”按钮从历史记录窗体打开.xpo文件。

XPO是AX用于导出和导入代码的导出格式。它可用于将代码从一个AX解决方案传输到另一个解决方案。.xpo文件是文本格式的,可以在文本编辑器中打开进行验证。

要在AOT窗口中打开元素的选定版本,请单击“打开新窗口”按钮。如果您打开的版本不是当前版本或由其他人签出的版本,则只能读取代码(不允许更改)。

选择同一元素的两个版本将启用“比较”按钮,您可以在其中比较两个不同的版本以跟踪更改。

调试器

最重要的开发工具是调试器。如果你是那些编写代码无法按预期工作的开发人员之一,这个工具可以帮助你在搜索中找到代码的错误。即使你从来没有写过有bug的代码,你也可能很幸运地发现了其他开发人员的bug,然后调试器有望让你少咒骂一点。

调试器包含两个主要部分,顶部的代码部分和底部的信息部分。

代码部分是您看到正在执行的活动代码的地方。您可以逐步执行代码,从您所在的位置运行它,停止代码的执行,在活动方法中逐步进入、逐步超越(甚至倒退),设置断点、切换断点和删除断点。

信息部分包含用于调用堆栈、本地、全局和类变量以及断点、输出和变量监视的单独窗口。

剖析AX体系结构

现在您已经了解了AX中的一些开发工具,让我们从技术角度来看看AX是如何构建的。

我们将研究以下概念:

  • 应用程序对象层
  • 网络层

应用程序对象层

Dynamics AX 2012由16个应用程序对象层组成,其中包含您在AOT中看到的所有元素。这16层基本上由8个核心应用层和每个核心层的补片层形成。

这些层可以看作是一个有多层的洋葱;最底层或核心应用层是SYS层,最外层是用户层USR。

因此,当任何应用程序元素被执行时,系统将首先查看最外层的代码层,看看是否有该元素的代码。如果没有,它会从洋葱上剥下一层,然后尝试下一层。当它到达元素所在的层时,它将使用该层的代码,并且不会继续剥离层以在最内层中找到该元素的代码。Dynamics AX 2012的16个层如下所示:

以下列表取自Dynamics AX 2012 MSDN网站,提供了对每一层的解释:

层级描述
USR用户层用于用户修改,例如报告。
CUS客户层用于特定于公司的修改。
VAR增值经销商(VAR)可以根据客户的指定,或作为创建特定行业解决方案的策略,对VAR层进行修改或新开发。
ISV当独立软件供应商(ISV)创建自己的解决方案时,所做的修改将保存在ISV层中。
SLN分销商使用解决方案层来实施垂直合作伙伴解决方案。
FPKFPK层是Microsoft为将来的修补或其他更新保留的应用程序对象修补层。
GLS当修改应用程序以满足国家或地区特定的法律要求时,修改将保存在GLS层中。
SYS标准应用程序是在最低级别SYS层实现的。标准应用程序中的应用程序对象永远无法删除。

网络层

AX 2012是作为一个三层解决方案构建的。这意味着它有一个存储数据的数据层,一个执行所有业务逻辑的逻辑层,以及一个向用户呈现信息并接收用户输入的表示层。

作为AX开发人员,您可以选择让正在编写的代码段在客户端或服务器上运行。客户端将代表表示层,服务器将代表逻辑层。AX服务器也称为应用程序对象服务器(AOS)。数据层托管在MS SQL Server上。

AX中还有两个完全不同的客户端。当我们谈论AX客户端时,大多数用户会想到常规的Windows客户端,也称为富客户端;但也有一个业务连接器客户端。第三方应用程序可以使用业务连接器客户端与AX集成,企业门户也可以使用它。

除了这三层之外,我们还经常讨论层模型中的第四个组件,即文件服务器。文件服务器本身并不是一个真正的层,因为它不执行任何代码,只存储代码。

案例研究——Carz股份有限公司。

本书中的大多数例子都与一个案例研究有关,在该案例研究中,您被指派为汽车租赁公司Carz股份有限公司开发AX中的模块。

Carz股份有限公司出租汽车,并在达到一定里程后出售。

该公司需要存储有关他们的汽车和客户的信息,他们需要Dynamics AX中的预订系统,使他们能够查看不同汽车组中哪些汽车可用/出租。

客户还应该能够从企业门户网站看到可用性。

示例将逐步向您展示如何创建扩展数据类型、表、表单、报告,以及使整个模块根据最佳实践规则和Carz股份有限公司设置的要求工作所需的一切。

总结

现在,您已经完成了本系列的第一章,希望您有一个良好的基础来学习如何在AX中编程。

本章向您展示了如何在AX中编写著名的Hello World程序。它带您了解了开发环境,在那里您了解了AOT中的不同元素。

您已经看到了一些最重要的开发工具,一旦开始AX开发,您将非常熟悉这些工具。

应用程序对象层和网络层已经向您展示了AX技术体系结构背后的主要概念,您已经阅读了一些关于案例研究的内容,我们将在整本系列中继续使用这些内容。

在下一章节中,您将通过查看可以在X++中使用的不同数据类型、如何编写语句和循环(如if/else和while循环)、如何使用不同的运算符以及如何创建和使用类和方法来学习X++语言的语法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/245381.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10、ble_mesh_node服务节点示例

1。手机APP选择名字,点击provisioner App keys,识别,配网。 2。初始化流程, board_init()初始化IO,初始化存储, bluetooth_init()蓝牙初始化,ble_mesh_get_dev_uuid(dev_uuid)蓝牙组网初始化, 3、蓝牙组网初…

MyBatis缓存机制流程分析

前言 在进行分析之前,建议快速浏览之前写的理解MyBatis原理、思想,这样更容易阅读、理解本篇内容。 验证一级缓存 MyBatis的缓存有两级,一级缓存默认开启,二级缓存需要手动开启。 重复读取跑缓存 可以看到,第二次…

[MySQL] MySQL中的索引

文章目录 一、初识索引 1、1 索引的概念 1、2 索引案例 二、认识磁盘 2、1 磁盘结构 2、2 操作系统与磁盘的数据交互 2、3 磁盘随机访问与连续访问 2、4 MySQL与磁盘的数据交互 三、索引的理解 3、1 建立测试表 3、2 为何MySQL与磁盘IO交互是 Page 3、3 理解Page 3、3、1 页目录…

【WSL】Windows下的Linux子系统使用方法指南

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ WSL安装启用或关闭windows功能安装分发命令行启动Linux 2️⃣ WSL 的基本命令显示帮助列出可用的 Linux 发行版列出已安装的 Linux 发行版检查 WSL 版本更新 WSL通过 PowerShell 或 CMD 运行特定的 Linux 发行版关闭WSL全部服…

Centos7防火墙及端口开启

1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后,默认没有开…

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.共生生物算法4.实验参数设定5.算法结果6.…

1、springboot项目运行报错

问题1:获取不到配置文件的参数 我的配置文件获取的参数如下: public class Configures{Value("${configmdm.apk.apkName}")private static String apkName;private void setApkName(String apkName) {Configures.apkName apkName;}private …

【亚马逊云科技】通过高性能低延迟对象存储 S3实现网站资源托管

本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言1 S3 介绍1.1 优点 2 使用步骤2.1 注册账户2.2 创建存储桶2.2.1 打开控制…

C/C++常见面试题(二)

接前面C/C常见面试题(一),继续巩固 目录 1 sizeof和strlen的区别 2 宏定义的陷阱 3 不使用sizeof计算出类型或者变量所占的内存的字节数 4 给定一个数判断是否其是2的N次幂 5 C/C打印所在文件、行号、函数、日期,时间、遵循的…

每日分享,以元旦为题的诗词

元旦佳节即将来临,相信大家都会在朋友圈表达一下自己的情感,不管大家以前是怎么表达的,今天小编给你分享几首以元旦为题的几首诗,喜欢的朋友可以自取,想要更多免费的诗词,请自行百度或小程序搜索&#xff1…

智能守护,数据安全稳中求胜!上海迅软DSE助力家具家电行业引领潮流!

随着中国经济的蓬勃发展,家具家电企业正迎来“精品制造”的时代,业内竞争日益激烈。为了提升产品竞争力、扩大市场占有率,企业亟需加强对自主品牌的安全建设,确保品牌的自主知识产权、产品生产资料以及销售信息等核心数据不受泄漏…

C++二维数组(2)

图形相似度 题目描述: 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素…

为什么阿里云不能免费帮用户无限抵御DDoS攻击

DDoS防御需要成本,其中最大的成本就是带宽费用。带宽是阿里云向电信、联通、移动等运营商购买,运营商计算带宽费用时不会把DDoS攻击流量清洗掉,而是直接收取阿里云的带宽费用。阿里云云盾在控制成本的情况下会尽量为阿里云用户免费防御 DDoS攻…

PXI总线测试模块-6935B 微波本振源

6935B 微波本振源 PXI总线测试模块 650MHz~10GHz 01 产品综述 6935B微波本振源采用3U 2槽PXIe结构形式,具有频率范围宽、相位噪声低、频率分辨力高、体积小等优点。其优异的性能使其可适用于通信以及导航设备等众多领域产品的研发、生产、检测与维护中&#xff0c…

neuq-acm预备队训练week 9 P3367 【模板】并查集

题目描述 如题&#xff0c;现在有一个并查集&#xff0c;你需要完成合并和查询操作。 输入格式 解题思路 并查集的用法 AC代码 #include <bits/stdc.h> using namespace std; #define Max 1000001 int zi,xi[Max],yi[Max],Fa[Max]; int find(int x); bool qu(int u,…

垃圾回收 (GC) 在 .NET Core 中是如何工作的?

提起GC大家肯定不陌生&#xff0c;但是让大家是说一下GC是怎么运行的&#xff0c;可能大多数人都不太清楚&#xff0c;这也很正常&#xff0c;因为GC这东西在.NET基本不用开发者关注&#xff0c;它是依靠程序自动判断来释放托管堆的&#xff0c;我们基本不需要主动调用Collect(…

【十】python复合模式

10.1 复合模式简介 在前面的栏目中我们了解了各种设计模式。正如我们所看到的&#xff0c;设计模式可分为三大类:结构型、创建型和行为型设计模式。同时&#xff0c;我们还给出了每种类型的相应示例。然而&#xff0c;在软件实现中&#xff0c;模式并是不孤立地工作的。对于所…

智能故障诊断期刊推荐【中文期刊】

控制与决策 http://kzyjc.alljournals.cn/kzyjc/home 兵工学报 http://www.co-journal.com/CN/1000-1093/home.shtml 计算机集成制造系统 http://jsjjc.soripan.net/ 机械工程学报 http://www.cjmenet.com.cn/CN/0577-6686/home.shtml 太阳能学报 https://www.tynxb.org.c…

EM的理论基础

1 EM定义​ 电迁移(Electro-Migration)是指在外加电场下,电子和金属原子之间的动量转移导致材料的运动。这种动量传递导致金属原子(比如Cu原子)从其原始位置移位,如图7-1。这种效应随着导线中电流密度的增加而增加,并且在更高的温度下,动量传递变得更加严重。因此,在先…

TSINGSEE青犀城市道路积水AI检测算法视频智能监管解决方案

近年来&#xff0c;由于城市区域内涝频发&#xff0c;遇到强降水天气出现路面严重积水的情况时有发生&#xff0c;影响交通通行甚至引发事故。所以&#xff0c;对下穿隧道、下沉式道路等路面积水情况的监测显得尤为重要。传统的监管方式很难及时发现道路积水情况&#xff0c;那…
最新文章