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

news2024/12/25 9:17:28

在本章中,您将了解开发环境的结构以及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.coloradmin.cn/o/1310700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python-docx 深入word源码 自定义字符间距

代码和实现效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 调整pt设置字间距 def SetParagraphCharSpaceByPt(run, pt1):通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距…

软件设计中如何画各类图之七了解组件图:系统架构的关键视角

目录 1 前言2 组件图基本介绍3 画组件图的步骤4 组件图的用途5 场景及实际场景举例6 结语 1 前言 组件图是一种UML的图形化表示工具,为系统架构提供了重要视角。它描述了系统中各个组件以及它们之间的依赖关系和连接。用于展示系统中的组件、软件模块、以及它们之间…

成绩分级 C语言xdoj53

问题描述 给出一个百分制的成绩&#xff0c;要求输出成绩等级A,B,C,D,E。90分以上为A&#xff0c;80~89分为B,70~79分为C,60~69分为D&#xff0c;60分以下为E。 输入说明 输入一个正整数m&#xff08;0<m<100&#xff09; 输出说明 输出一个字符 输入样例 …

麦肯锡:2023年最被关注的科技趋势

1 近期&#xff0c;麦肯锡咨询公司公布了颇具影响力的《McKinsey Technology Trends Outlook 2023》报告&#xff0c;旨在通过其技术委员会的洞察力&#xff0c;揭示2023年可能改变商业舞台的15个技术趋势。报告的编撰不仅为企业和投资者提供了宝贵的方向指引&#xff0c;同时…

『 Linux 』重新理解挂起状态

文章目录 &#x1f984; 前言新建状态 &#x1f40b;挂起状态 &#x1f40b;唤入唤出 &#x1f40b;进程与操作系统间的联系 &#x1f40b; &#x1f984; 前言 『 Linux 』使用fork函数创建进程与进程状态的查看中提到了对挂起状态的一个理解&#xff1b; ​ 挂起状态相比于其…

【计算机组成体系结构】只读存储器ROM

一、ROM分类 二、计算机中重要的ROM 运行时操作系统在主存中&#xff0c;但是由于RAM断电后数据会丢失&#xff0c;所以操作系统都存储在辅存中&#xff0c;在开机时由CPU读入主存&#xff0c;而BIOS芯片就是用来存储自举装入程序的&#xff0c;它用于开机时引导把操作系统装入…

VS2022 将项目打包,导出为exe运行

我有一个在 VS2022 上开发的程序&#xff0c;基于.net 6框架, 想打包成 .exe程序&#xff0c;以在另一个没有安装VS的机器上运行&#xff0c;另一个机器是Win7系统&#xff0c;上面安装了.net 6框架。 虽然网上很多教程&#xff0c;需要安装Project Installer&#xff0c;配置A…

element日历组件只显示月和日,把年份隐藏掉

最终效果&#xff1a; 把年份和旁边的两个小标志小标去掉&#xff0c; 也就是把这红色框框内的内容隐藏掉 我们先用控制台看看里面具体的样式 1、可以看到 class “el-date-picker__header” 的 div是控制日历组件的标题的&#xff0c;div里面的button和span就是对应标题里面…

k8s部署nacos

先决条件: 这里的存储使用的是storageClass,所以要预先将storageClass(nfs)部署完成详情参见: k8s-StoargClass的使用-基于nfs-CSDN博客 因为nacos数据存储依赖于mysql.所以要预先部署MySQL,然后再部署nacos 部署mysql使用的pvc [rootmaster /devops/nacos/mysql]$cat mysql…

平头哥玄铁系列 RISC-V 芯片及开发板

1、玄铁 9 系列概述 玄铁 8 系列 基于C-SKY架构&#xff0c;玄铁 9 系列基于 RISC-V 架构。E 系列为 RISC-V 32 位&#xff0c;C 系列为 RISC-V 64 位。 E902&#xff1a;超低功耗 RSIC-V 架构处理器 E902 采用 2 级极简流水线兼容 RISC-V 架构且对执行效率等方面进行了增强&a…

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模块在某些ISP主控中叫做sharpness或者sharpen&#xff0c;这些名称指代的模块是同一个&#xff0c;不用再纠结。主要就是在YUV域内弥补成像过程中图像的锐度损失&#xff0c;对边缘和细节进行加强&#xff0c;从而恢复场景本应具有的自然锐度。 锐度…

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现

0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞&#xff0c;攻击者可通过该漏洞在服务器端任意执行代码&#xff0c;写入后门&#xff0c;获取服务器权限&#…

电子元器件介绍——电阻(一)

电子元器件 文章目录 电子元器件前言1.1电阻基本知识1.2电阻的作用1.3电阻的分类1.4 贴片电阻贴片电阻的规范、尺寸、封装 1.5 技术参数噪声&#xff1a; 1.6 电阻的失效 总结 前言 接下来我们就把常用的电子元器件全部介绍给大家&#xff0c;这一节是电阻&#xff0c;电容电感…

springboot使用EasyExcel导出数据

springboot使用EasyExcel导出数据 简介&#xff1a;本文主要描述使用EasyExcel导出数据的简单流程&#xff0c;事实上企业需求一般都比较简单&#xff0c;就是表单数据输出到Excel即可&#xff0c;如果数据量大的话&#xff0c;为了避免占用内存过高或者OOM&#xff0c;使用多…

网工内推 | IT经理,50k*14薪,NP以上即可,七险一金

01 海天瑞声 招聘岗位&#xff1a;IT经理 职责描述&#xff1a; 1、IT基础架构的方案制定、实施和日常维护&#xff0c;包括机房建设运维、服务器配置及运维、网络规划及运维、上网行为管理、电话、电话、监控、门禁等各类弱电系统搭建及运维 2、负责公司环境及网络安全防御体…

RabbitMQ 如何保证消息可靠性

RabbitMQ 如何保证消息可靠性 1. 保证生产者可靠1.1 生产者确认机制1.2 实现生产者确认1.2.1 开启生产者确认机制1.2.2 定义ReturnCallback1.3.3.定义ConfirmCallback 1.3 注意 2. 保证MQ可靠2.1 数据持久化2.1.1 交换机持久化2.1.2.队列持久化2.1.3 消息持久化2.1.4 注意 3. 保…

ThingWorx/Vuforia—工业物联网和AR平台

产品概述 ThingWorx是美国PTC公司旗下的一款物联网和AR平台&#xff0c;它提供了适用于IoT的开发工具和能力&#xff0c;使开发者可以为工业物联网快速构建和部署变革性的智能互联解决方案&#xff0c;使创新者能够快速为当今的智能互联世界提供优异的应用程序、解决方案和用户…

自动机器学习是什么?概念及应用

自动机器学习 (Auto Machine Learning) 的应用和方法 随着众多企业在大量场景中开始采用机器学习&#xff0c;前后期处理和优化的数据量及规模指数级增长。企业很难雇用充足的人手来完成与高级机器学习模型相关的所有工作&#xff0c;因此机器学习自动化工具是未来人工智能 (A…

装机DIY-配件价格比较

计算机配件价格比较 &#x1f680;&#x1f680;&#x1f680;&#x1f680;最近无事总刷到DIY装机视频&#xff0c;自己也有兴趣&#xff0c;同时这段时间也在学前端&#xff0c;发现每次比较价格都有重新搜&#xff0c;重新计算&#xff0c;且不同配置也不好比较&#xff0c…

【毕业设计】基于STM32的智能衣柜设计

1、功能说明 功能如下: 1、用stm32控制ds18b20采集温度 2、然后按键可以设置上下限温度&#xff0c; 3、采集的温度低于下限温度时候 打开加热片开始加热&#xff0c; 4、加热到上限温度关闭加热片停止加热&#xff0c; 5、采集的温度可以在oled显示&#xff0c; 6、然后弄个按…