D365 :使用OData编写Web API


前言

OData配置


一、注册AAD应用程序

  1. 使用https://portal.azure.com链接浏览到 Azure 门户

  2. 使用管理员权限登录门户

  3. 导航到 Azure 应用程序 → 应用程序注册 → 新应用程序注册。

  4. 在“创建”表单中输入以下提到的详细信息,然后单击“创建”按钮。
    名称:<您的应用程序名称>

    应用程序类型:Web App / API

    登录 URL:<您的 Dynamics 365 URL>/data

  5. 系统将创建一个新应用程序。复制应用程序 ID

  6. 导航到设置 → 密钥并生成客户端密钥

  7. 在密码选项卡中插入以下详细信息,然后单击“保存”。

    关键描述:OData
    持续时间:永不过期

  8. 系统将创建一个新密钥。复制客户端 Secret 的值,如图所示。请注意,您以后将无法检索此信息

二、向 Azure 应用程序添加权限

  1. 在应用程序页面上,转到设置并单击“所需权限”

  2. 在所需权限表​​单上,单击“添加新”,然后选择 API。在 API 列表中,选择 Microsoft Dynamics ERP ( Microsoft.ERP ) API,然后单击“选择”

  3. 选择API后,需要添加权限。为此,请单击“选择权限”。添加委派权限下提到的所有权限,然后单击“选择”。选择权限后,单击“完成”。

  4. 接下来,在“所需权限”表单上,单击“授予权限”,然后单击“是”以同意该应用程序。

  5. 接下来,在“所需权限”表单上,单击“授予权限”,然后单击“是”以同意该应用程序。

三、在 D365FO 中注册服务

使用 OData 服务成功创建新应用程序后,您必须在 D365 中添加此应用程序。这将允许应用程序访问驻留在 D365 中的数据。请注意,如果您错过了这一步,您可能会在调用服务时收到 Forbidden 错误。请按照以下步骤在 D365 中添加应用程序:

  1. 打开您的 D365 环境。
  2. 导航到系统管理 → 设置 → Azure Active Directory 应用程序。
  3. 输入应用程序的应用程序 ID 和名称。
  4. 分配具有管理员权限的用户来访问数据。

四、创建 OData 服务的 Visual Studio 项目

创建 OData 实用程序

  1. 在您的 Visual Studio 环境中下载并安装 OData 客户端代码生成器。导航到工具 → 扩展和更新,然后在搜索选项卡中查找 OData client code generator。
    该工具在 Visual Studio 项目中生成一个 .tt 文件,该文件将通过从 D365 元数据架构读取元数据 XML 文件来生成一个类。

  2. 创建一个名为 ODataUtility 的类库类型的新 C# 项目。将此项目添加到名为 ODataServices 的新解决方案中。

  3. 您可以删除创建的默认类(class1)。

  4. 右键单击​​项目,然后单击“新建项目”。在 Add New Item 对话框中,搜索“OData Client”,这将是类类型。这将从 OData v4 服务生成代理类。类的名称将为 ODataClient.tt

  5. 当您收到以下消息框时,单击取消。
    在这里插入图片描述

  6. 打开ODataClient.tt文件,找到代码public const string MetadataDocumentUri = “”; 并将“”替换为您的 /data/$metadata。接下来,转到代码public const string TempFilePath = “”;。在此处传递任何临时路径(例如@”C:\Temp\Edmx.xml”)。此路径将用于导航到处理 tt 文件时生成的 Edmx xml 文件。请注意,这仅在 OData 客户端代码生成器 7.5.1 版本中可用。在编译使用 tt 文件生成的 .cs 文件时引入它来解决字符串缓冲区超出错误。保存文件,您将再次获得相同的消息框(如步骤 5)。单击确定。

  7. 一段时间后,您会发现所有 D365FO OData 服务端点都出现在 ODataClient 下。如果您使用的是 Update 15,则在运行 .tt 文件时可能会出现歧义错误。这是因为有一个名为“ItemType”的实体和一个同名的枚举。因此,在生成类时,它会感到困惑并引发歧义错误。
    要解决此问题,您需要先打开 URL /data/$metadata 并保存生成的 XML 模式。

    在记事本中打开该 XML 文件,找到 并将其替换为 find <EntityType Name=”ItemType s ”>。您需要添加 s 作为后缀,以便枚举和实体可以不同地工作。

    现在在 MetadataDocumentUri 中,您必须指定此文件名而不是 D365 URL。.tt 文件的目的是读取 XML 并生成一个 .cs 文件,其中包含可在您的代码中使用的类。它将为 XML 模式中指定的所有实体和枚举创建类。因此,您可以输入 XML 文件或 D365 元数据 URL,因为两者是相同的。

  8. 过程完成后,验证生成的.cs 文件是否正确。展开 .tt 文件,然后展开 .cs 文件。您将看到从 .tt 文件生成的所有类。
    在这里插入图片描述

  9. 右键单击​​项目并单击构建。
    创建身份验证实用程序

  10. 创建一个名为 AuthenticationUtility 的类库类型的新 C# 项目。将此项目添加到现有的 ODataServices 解决方案。

  11. 安装以下 NuGet 包:
    Microsoft.IdentityModel.Clients.ActiveDirector
    牛顿软件
    Microsoft.OData.Client(这会自动安装更多的依赖包)

  12. 您可以删除创建的默认类(class1)。

  13. 右键单击​​项目并单击新建项目。在 Add New Item 对话框中,选择 Code → Class 并创建一个名为 ClientConfiguration.cs 的新类。

  14. 右键单击​​项目并单击新建项目。在 Add New Item 对话框中,选择 Code → Class 并创建一个名为 OAuthHelper.cs 的新类。

  15. 右键单击​​项目并单击构建。这是身份验证实用程序,它将获取参数并为您提供可以在标头中传递的不记名访问令牌。

创建控制台应用程序

  1. 创建一个名为 ODataConsoleApplication 的类型为 Console Application 的新 C# 项目。将此项目添加到现有的 ODataServices 解决方案。
    2.安装以下NuGet包
    Microsoft.IdentityModel.Clients.ActiveDirectory
    牛顿软件
    Microsoft.OData.Client(这会自动安装更多的依赖包)
    3.从解决方案中安装以下参考:
    数据工具
    身份验证实用程序
  2. 打开控制台应用程序中生成的 program.cs 类。
  3. 右击项目并点击“Build”。
  4. 右键单击​​“ODataConsoleApplication”,然后单击“设置为启动项目”。
  5. 构建项目并单击“执行”。

这将创建一个具有地址和联系信息的新客户。

请注意,每当您在 DataServiceCollection 对象中添加实体时,它都会开始更改跟踪您的实体。这意味着它将尝试仅更新那些已更改的属性。

请注意,您在保存更改上下文中传递 SaveChangesOptions.PostOnlySetProperties。它实际上只会发布那些已定义的对象。如果你不传递这个属性,它可能会抛出错误,因为实体中的某些字段无法设置,因此你的请求将在该字段中传递一个空值。因此,在调用保存的更改时设置 SaveChangesOptions.PostOnlySetProperties 是一个很好的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值