Dynamics 365 Finance + Power Automate 自动化凭证审核

news2025/6/8 14:38:18

🚀 Dynamics 365 Finance + Power Automate 自动化凭证审核


📑 目录

  • 🚀 Dynamics 365 Finance + Power Automate 自动化凭证审核
    • 1. 依赖 🔧
    • 2. 目标 🎯
    • 3. 系统架构 🏗️
    • 4. 凭证审批全流程 🛠️
      • 4.1 在 D365 Finance 中配置工作流 ⚙️
      • 4.2 Power Automate 流程配置 🔄
      • 4.3 DocuSign 集成示例 ✒️
        • 4.3.1 JWT 验证与令牌获取 🔑
        • 4.3.2 创建 Envelope 📄
        • 4.3.3 Webhook 回调与下载签名文件 🔄
    • 5. 异常控制与统一补偿 🔁
    • 6. 安全与性能最佳实践 🔒
    • 7. Power Platform Solution 化部署 🗂️
    • 8. 可复现部署脚本示例(Bicep) 📝
    • 9. 监控与可视化 📊


1. 依赖 🔧

  • Dynamics 365 Finance: 10.0.x
  • Power Automate: Dataverse v2 连接器
  • DocuSign API: v2.1, scope=signature
  • Azure Key Vault: Managed Identity 支持

2. 目标 🎯

  • ⚙️ 自定义多级审批阶段与条件分支
  • 📬 基于 Power Automate 的异常触发、动态通知与重试
  • 🔐 DocuSign/Adobe Sign 电子签章集成(v2.1 API + JWT)
  • ♻️ 流程闭环:超时补偿、统一异常处理、自动归档、日志审计
  • 📈 可扩展监控与可视化(Power BI、Log Analytics)

3. 系统架构 🏗️

通知
签章服务
自动化层
企业系统
Microsoft Teams
Outlook 邮件
DocuSign API v2.1
Power Automate
Dataverse v2
Azure Key Vault
D365 Finance 10.0.x
SharePoint 存储
Power BI 仪表板

4. 凭证审批全流程 🛠️

4.1 在 D365 Finance 中配置工作流 ⚙️

  1. 登录 Dynamics 365 Finance 10.0.x模块 > 凭证工作流 > 新建工作流
  2. 添加三个“审批任务”节点,并在 条件分支 中配置:
    Expression: JournalAmount >= 100000  // 单位为基础货币,多币种场景下请乘以对应汇率字段。
    
  3. 指定节点流转:
    • < 10,000 → “直接通过” ✅
    • ≥ 10,000 且 < 100,000 → “财务经理审批” 👥
    • ≥ 100,000 → “CFO 审批 + 调用签章” ✒️

4.2 Power Automate 流程配置 🔄

  1. 触发器

    • 类型:当 Dynamics 365 Finance 中的记录被更新(Dataverse v2)
    • 表名:JournalHeader
    • 频率:默认 5 分钟 ⏱️
  2. 初始化变量

    Action: Initialize variable
    Name: approverEmail
    Type: String
    Value: triggerOutputs()?['body/ApproverEmail']
    
  3. 条件控制

    @equals(triggerOutputs()?['body/ApprovalStatus'], 'Rejected')
    
    • Option Set 场景下请改为 body/statuscode。⚠️
  4. 并发与重试

    • 并行度:在“Settings”中将并行度设为 1。
    • 重试策略(UI “Settings” → “Retry Policy”):
      {
        "type": "fixed",
        "interval": "PT10S",
        "count": 3
      }
      
  5. 流程:

    D365 PowerAutomate DocuSign TM SP OL 记录更新触发 条件检查 (Rejected?) Teams 通知 更新状态 'NeedReview' 日志存 SharePoint Create Envelope alt [Rejected] [Approved] Webhook 回调 附加签名 PDF 存档 发送邮件 D365 PowerAutomate DocuSign TM SP OL

4.3 DocuSign 集成示例 ✒️

4.3.1 JWT 验证与令牌获取 🔑
  1. 使用 Postman 或脚本执行 JWT Authorization Flow:
    POST https://account-d.docusign.com/oauth/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
    assertion=<Base64-Encoded-JWT>
    
  2. 返回字段 access_token,后续 API 请求携带 Authorization: Bearer <access_token>
4.3.2 创建 Envelope 📄
POST https://demo.docusign.net/restapi/v2.1/accounts/{accountId}/envelopes
Authorization: Bearer <access_token>
Content-Type: application/json

{
  "emailSubject": "请签署会计凭证",
  "status": "sent",
  "documents": [
    {
      "documentBase64": "<Base64PDF>",
      "name": "Voucher.pdf",
      "fileExtension": "pdf",
      "documentId": "1"
    }
  ],
  "recipients": {
    "signers": [
      {
        "email": "approver@example.com",
        "name": "财务经理",
        "recipientId": "1",
        "routingOrder": "1"
      }
    ]
  }
}
4.3.3 Webhook 回调与下载签名文件 🔄
  1. 在 Power Automate 中添加 “When a HTTP request is received”,粘贴 DocuSign Webhook JSON Schema,并在“高级选项”开启 X-DocuSign-Signature 验证。
  2. 成功回调后调用:
    GET /restapi/v2.1/accounts/{accountId}/envelopes/{envelopeId}/documents/combined
    Authorization: Bearer <access_token>
    
  3. 将返回 PDF 二进制通过 PATCH 更新到 D365:
    PATCH https://<your-d365>.api/data/v9.0/journalHeaders({id})/YourFileField
    Content-Type: application/json
    
    { "YourFileField@odata.mediaReadLink": "<BlobContent>" }
    

5. 异常控制与统一补偿 🔁

异常处理 (Scope)
主流程
failed
succeeded
Send Admin Alert 🚨
HasFailed?
Log to Analytics 📝
审批逻辑
Trigger
后续归档
  • 使用 Scope + Configure run after 捕获所有失败分支,统一发送告警并落日志。
  • 审批超时:采用 “Do until” + “Delay” 每 6 小时检查 Pending,超时发送重分配通知。

6. 安全与性能最佳实践 🔒

  • Key Vault 访问
    • 在 Azure Key Vault → Access policies 中,为 Power Automate 服务主体 授予 Get Secret 权限。
  • 并发控制:流程并行度设为 1;高峰期可拆分子流程分流。
  • 审计日志
    • 在 Power Automate → “Diagnostic settings” 将所有运行日志推送至 Azure Log Analytics
    {
      "logs": [
        {
          "category": "WorkflowRuntime",
          "enabled": true
        }
      ],
      "destination": {
        "workspaceId": "/subscriptions/.../resourceGroups/.../providers/Microsoft.OperationalInsights/workspaces/..."
      }
    }
    

7. Power Platform Solution 化部署 🗂️

  1. 在 Power Apps Portal 中创建 Solution,将自定义 Flow、环境变量、连接器绑定一同打包。
  2. 导出为 .zip,并在目标环境导入,保证 DEV/TEST/PROD 环境一致性。
  3. 可通过 PowerShell 脚本调用 Power Platform CLI:
    pac solution import --path ./MySolution.zip --environment <ENVIRONMENT_URL>
    

8. 可复现部署脚本示例(Bicep) 📝

targetScope = 'resourceGroup'

resource voucherFlow 'Microsoft.Logic/workflows@2019-05-01' = {
  name: 'VoucherApprovalFlow'
  properties: {
    definition: json(loadTextContent('voucher-flow-definition.json'))
    parameters: {}
    integrationServiceEnvironment: null
  }
}

确保 voucher-flow-definition.json 与 Bicep 文件同目录,CI/CD 管道中一并推送。


9. 监控与可视化 📊

  • Log Analytics → Power BI
    • Power BI Desktop 中新增数据源:Azure Log Analytics,示例 DAX:
      AverageApprovalTime =
        AVERAGEX(
          FILTER(
            'WorkflowRuns',
            'WorkflowRuns'[Status] = "Succeeded"
          ),
          'WorkflowRuns'[DurationSeconds]
        )
      
  • 实施仪表盘:展示平均审批时长、超时率、失败率,为持续优化提供依据。

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

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

相关文章

使用柏林噪声生成随机地图

简单介绍柏林噪声 柏林噪声&#xff08;Perlin Noise&#xff09;是一种由 Ken Perlin 在1983年提出的梯度噪声&#xff08;Gradient Noise&#xff09;算法&#xff0c;用于生成自然、连续的随机值。它被广泛用于计算机图形学中模拟自然现象&#xff08;如地形、云层、火焰等…

C++课设:实现简易文件加密工具(凯撒密码、异或加密、Base64编码)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《编程项目实战》 目录 一、初识文件加密&#xff1a;为什么需要…

H_Prj06_03 8088单板机串口读取8088ROM复位内存

1.8088CPU复位时&#xff0c;CSFFFFH,IP0000H,因此在ROM的逻辑地址FFFF&#xff1a;0000&#xff08;FFF0H&#xff09;处一般要防止一个长跳转指令LJMP&#xff08;机器码位EAH&#xff09; 2.写一个完整的8086汇编程序&#xff0c;通过查询方式检测串口接收符串‘r’&#x…

构建 MCP 服务器:第 3 部分 — 添加提示

这是我们构建 MCP 服务器的四部分教程的第三部分。在第一部分中&#xff0c;我们使用基本资源创建了第一个MCP 服务器&#xff1b;在第二部分中&#xff0c;我们添加了资源模板并改进了代码组织。现在&#xff0c;我们将进一步重构代码并添加提示功能。 什么是 MCP 提示&#…

基于React + FastAPI + LangChain + 通义千问的智能医疗问答系统

&#x1f4cc; 文章摘要&#xff1a; 本文详细介绍了如何在前端通过 Fetch 实现与 FastAPI 后端的 流式响应通信&#xff0c;并支持图文多模态数据上传。通过构建 multipart/form-data 请求&#xff0c;配合 ReadableStream 实时读取 AI 回复内容&#xff0c;实现类似 ChatGPT…

C# 中替换多层级数据的 Id 和 ParentId,保持主从或父子关系不变

在C#中替换多层级数据的Id和ParentId&#xff0c;同时保持父子关系不变&#xff0c;可以通过以下步骤实现&#xff1a; 创建旧Id到新Id的映射&#xff1a;遍历所有节点&#xff0c;为每个旧Id生成唯一的新Id&#xff0c;并存储在字典中。 替换节点的Id和ParentId&#xff1a;…

PG 分区表的缺陷

简介 好久没发文&#xff0c;是最近我实在不知道写点啥。随着国产化进程&#xff0c;很多 oracle 都在进行迁移&#xff0c;最近遇到了一个分区表迁移之后唯一性的问题。oracle 数据库中创建主键或者唯一索引&#xff0c;不需要引用分区键&#xff0c;但是 PG 就不行&#xff…

从Copilot到Agent,AI Coding是如何进化的?

编程原本是一项具有一定门槛的技能&#xff0c;但借助 AI Coding 产品&#xff0c;新手也能写出可运行的代码&#xff0c;非专业人员如业务分析师、产品经理&#xff0c;也能在 AI 帮助下直接生成简单应用。 这一演变对软件产业产生了深远影响。当 AI 逐步参与代码生成、调试乃…

Qt(part 2)1、Qwindow(菜单栏,工具栏,状态栏),铆接部件,核心部件 ,2、添加资源文件 3、对话框

1、Qwindow tips&#xff1a;1&#xff0c;首先为什么创建出的对象基本都是指针形式&#xff0c;个人觉得是对象树的原因&#xff08;自动释放内存&#xff09;&#xff0c;指针来访问成员函数->的形式。2&#xff0c;菜单栏只能一个的&#xff0c;放窗口基本Set&#xff0c…

【图片识别Excel】批量提取图片中的文字,图片设置识别区域,识别后将文字提取并保存Excel表格,基于WPF和OCR识别的应用

应用场景 在办公自动化、文档处理、数据录入等场景中&#xff0c;经常需要从大量图片中提取文字信息。例如&#xff1a; 批量处理扫描的表单、合同、发票等文档从图片集中提取特定区域的文字数据将纸质资料快速转换为电子文本并整理归档 通过设置识别区域&#xff0c;可以精…

Qt/C++学习系列之Excel使用记录

Qt/C学习系列之Excel使用记录 前言The process was ended forcefully.解决方式断点查语句问题 总结 前言 在项目中解析条目达50多条&#xff0c;并且都需要将对应的结果进行显示。为了将结果显示的更加清晰&#xff0c;考虑采用QTableWidget进行表格设置&#xff0c;而在使用过…

跳转指令四维全解:从【call/jmp 】的时空法则到内存迷宫导航术

一、核心概念&#xff1a;代码世界的空间定位法则 在汇编世界里&#xff0c;我们可以把内存想象成一栋巨大的图书馆&#xff1a; CS&#xff08;代码段寄存器&#xff09; 楼层编号 IP&#xff08;指令指针&#xff09; 房间编号 当前执行位置 CS:IP&#xff08;如3楼201…

LabVIEW实时系统数据监控与本地存储

基于LabVIEW Real-Time 模块&#xff0c;面向工业自动化、嵌入式测控等场景&#xff0c;提供实时数据采集、监控与本地存储的完整实现路径。通过分层任务调度、TDMS 文件格式应用及跨平台兼容性设计&#xff0c;确保系统在实时性、可靠性与数据管理效率间达到平衡。文中以 Comp…

从 Revit 到 3DTiles:GISBox RVT 切片器如何让建筑图元在 Web 端展示

在GIS&#xff08;地理信息系统&#xff09;行业蓬勃发展的当下&#xff0c;数据处理与展示的效率和精准度成为关键。GISBox作为一款功能强大的一站式三维GIS数据编辑、转换、发布平台&#xff0c;凭借其独特的“RVT切片器”功能&#xff0c;在RVT图元处理方面也有着不俗的表现…

Appium+python自动化(十二)- Android UIAutomator

Android团队在4.1版本&#xff08;API 16&#xff09;中推出了一款全新的UI自动化测试工具UiAutomator&#xff0c;用来帮助开发人员更有效率的完成App的Debug工作&#xff0c;同时对于测试人员也是一大福音&#xff0c;为什么这么说呢&#xff1f; UiAutomator提供了以下两种…

QQ邮箱发送验证码(Springboot)

一、邮箱发送服务准备 在qq邮箱的设置中选择账号下开启服务。 开启时可能会有短信验证&#xff0c;开启后显示验证码之类的一串英文&#xff0c;复制保存起来&#xff0c;在配置文件中会使用到。 二、后端依赖及配置 依赖 在pom.yml文件中添加相关依赖&#xff0c;redis的…

【EF Core】 EF Core并发控制:乐观锁与悲观锁的应用

文章目录 前言一、并发的风险二、EF Core中的并发控制方式2.1 开放式并发&#xff08;乐观锁&#xff09;2.1.1 应用程序管理的属性并发令牌2.1.2 数据库生成的并发令牌 2.2 悲观锁 总结 前言 实际的生产环境中&#xff0c;我们经常能遇到数据库由多个应用程序同时使用。每个程…

Harmony核心:动态方法修补与.NET游戏Mod开发

一、Harmony的核心定位与设计哲学 Harmony是一个运行时动态方法修补库&#xff0c;专为修改已编译的.NET/Mono应用程序而设计&#xff0c;尤其适用于游戏Mod开发。其核心创新在于&#xff1a; 非破坏性修改&#xff1a;保留原始方法完整性&#xff0c;避免直接替换或覆盖。多…

【Java开发日记】说一说 SpringBoot 中 CommandLineRunner

目录 1、CommandLineRunner SpringBoot中CommandLineRunner的作用 简单例子 多个类实现CommandLineRunner接口执行顺序的保证 通过实现Ordered接口实现控制执行顺序 通过Order注解实现控制执行顺序 Order 作用 2、ApplicationRunner 3、传递参数 4、源码跟踪 run()方…

全面理解 Linux 内核性能问题:分类、实战与调优策略

在 Linux 系统&#xff08;特别是嵌入式或服务器环境&#xff09;中&#xff0c;性能问题往往错综复杂、表象多变。只有对常见性能问题进行系统归类、理解其症状与根源&#xff0c;才能有效定位和解决。本文将围绕八大类核心性能问题&#xff0c;结合实战示例&#xff0c;逐类分…