首页 > 其他分享 >使用Power Automate上传附件到Dynamics 365集成的SharePoint

使用Power Automate上传附件到Dynamics 365集成的SharePoint

时间:2023-07-17 17:57:05浏览次数:37  
标签:文件 Power 文件名 SharePoint 获取 文档 Automate 附件

  在Dynamics 365中使用SharePoint集成做实体的附件管理,这里不像用Annotation实体存放附件可以直接用代码直接创建Annotation记录,如果想要对外部提供接口把附件上传到SharePoint,我们可以使用Power Automate中的SharePoint组件来生成文件,通过HTTP流供给外部系统调用。

 

 

下面是Power Automate的完整步骤

 

1.当收到HTTP请求时

method:POST

请求正文JSON架构:

{
    "type": "object",
    "properties": {
        "contractId": {
            "type": "string"
        },
        "fileList": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "fileName": {
                        "type": "string"
                    },
                    "fileBase64": {
                        "type": "string"
                    }
                },
                "required": [
                    "fileName",
                    "fileBase64"
                ]
            }
        }
    }
}

请求JSON示例:

{
  "contractId": "09101368-65EA-ED11-8848-002248EE98C7",
  "fileList": [
    {
      "fileName": "newpic.png",
      "fileBase64": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAOCAYAAAAbvf3sAAAAAXNSR0IArs4c6QAArkJggg=="
    },
    {
      "fileName": "测试文档V1.2.docx",
      "fileBase64": "UEsDBBQAAAAIAIdO4kCiCB42aAEAAHoCAAAQAAAAZG9jUHJvcHMvYXBwLnht..."
    }
  ]
}
contractId为D365中关联附件的实体id,用于获取实体的附件目录等信息,fileList为文件列表,接口可一次上传多个文件,fileBase64为文件的Base64字符串。  

2.初始化result变量

添加一个初始化变量的操作,result为变量名,类型为对象,这个对象用来作为http请求的返回结果。

 3.分析文件列表JSON

添加一个“数据操作”,选择“分析JSON”,内容选择入参里的fileList

 4.获取合同记录

选择Dataverse里的按ID获取行操作,根据入参的contractId获取合同的相关信息。

 5.获取id路径

这里初始化了一个字符串变量IdPath,用来存放附件的文档目录,后面的步骤会用,到下面的“值”可以不用管。

6.获取合同文档位置

 添加一个Dataverse操作,用来获取当前合同记录的文档位置,表名称选择“文档位置”。

 Fetch Xml查询的内容如下:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="sharepointdocumentlocation">
    <attribute name="name" />
    <attribute name="regardingobjectid" />
    <attribute name="parentsiteorlocation" />
    <attribute name="relativeurl" />
    <attribute name="absoluteurl" />
    <order attribute="name" descending="false" />
    <filter type="and">
      <condition attribute="locationtype" operator="eq" value="0" />
      <condition attribute="servicetype" operator="eq" value="0" />
    </filter>
    <link-entity name="new_contract" from="new_contractid" to="regardingobjectid" link-type="inner" alias="ae">
      <filter type="and">
        <condition attribute="new_contractid" operator="eq" value="@{outputs('获取合同记录')?['body/new_contractid']}" />
      </filter>
    </link-entity>
  </entity>
</fetch>

需要注意:单纯只创建一条合同记录,CRM后台是不会生成和它关联的sharepointdocumentlocation记录,在CRM窗体上打开“附件”选项卡后,后台就能查到sharepointdocumentlocation记录了,所以我们可以通过自动查询SharePoint文档的方式来触发生成sharepointdocumentlocation记录。我这里的在合同创建的后的自定义插件里执行对sharepointdocument的fetchxml查询,这样合同只要创建了,就会默认生成文档位置记录。

 7.遍历文档位置

添加一个变量操作,将上一步查询到的文档位置的“相对URL”字段赋值给IdPath变量,第6步返回的是一个结果集,所以指定赋值结果后,操作会“遍历每一个”包含起来,实际上只会有一条记录返回。

 8.初始化变量

初始化3个变量,FileFullName、FileName、FielExtension用来存放文件的文件名、不带后缀的文件名、文件后缀名。

9.遍历fileList

 将入参里的fileList“应用到每一个”,循环逐条创建文件。

 10.设置文件后缀名、文件名(无后缀)

通过文件名中的“.”分割获取文件的名称和后缀,表达式分别为last(split(items('应用到每一个')['fileName'],'.'))、replace(items('应用到每一个')['FileName'], variables('FielExtension'), '')

 11.获取文件夹是否存在

如果当前合同没有上传过附件,那么文档目录在SharePoint对应的路径是不存在的,需要先判断文件夹是否存在。这里使用SharePoint的“将HTTP请求发送到SharePoint”操作。站点地址选择存放文档的SharePoint站点,方法选择GET,Uri为_api/web/GetFolderByServerRelativeUrl('/new_contract/@{variables('IdPath')}')/Exists。Uri中的new_contract为合同实体的逻辑名,如果是其他实体就换成对应实体的逻辑名称,返回的结果为true或false。

 

 12.判断文件夹是否存在

表达式左侧为 body('获取文件夹是否存在')?['d']?['Exists']

13.获取文件(仅属性)

在“如果是”的分支,添加SharePoint操作“获取文件(仅属性)”,筛选查询添加文件名筛选条件FileLeafRef eq '@{items('应用到每一个')['fileName']}',结果会返回文件夹内符合文件名的文件属性。

 

14.检查文件名是否存在

 添加分支操作,表达式左侧为 empty(outputs('获取文件(仅属性)')?['body/value']),右侧为true,如果不存在,则可以正常按文件名上传,如果文件名已经存在,则直接上传会出现重名错误,这时需要将文件更名或者删除已有文件,这里我选择将文件名后面增加一个时间后缀,避免文件重复。

15.创建文件

选择SharePoint的创建文件操作,站点地址为SharePoint的地址,文件夹路径为new_contract/@{variables('IdPath')},文件名为FileFullName变量,文件内容需要通过base64表达式进行转换,这里的表达式为:base64ToBinary(items('应用到每一个')['fileBase64'])

 在第12步的“如果不是”分支,直接按原文件名创建就行。

16.响应

 将result变量作为响应的正文返回,这里result的内容没有做处理,如果有需要也可以对result结果进行自定义处理。

 

标签:文件,Power,文件名,SharePoint,获取,文档,Automate,附件
From: https://www.cnblogs.com/fieldty/p/17559475.html

相关文章

  • Power BI许可证分类介绍
     PowerBI许可证一般分为:免费许可证、Pro许可证或Premiumper-user许可证。三种许可证的定义这里就不再说明了。通过下面的三种许可证的功能对比,可以让你快速了解到,那种许可证适合你。 PowerBI订阅和许可证的配置策略:目前一种常见的情况是公司购买Premium订阅时,由......
  • 前N个公司(Power Query)
    问题:各国所属公司数量从多到少依次排列let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],按不同国家分别处理=Table.Group(源,{"国家"},{"公司",eachTable.AddIndexColumn(Table.Sort(Table.Group(_,{"公司"},{"计数",eachTable.R......
  • Power APP Canvas组件简单控制画布控件
    效果图:图中绿色部分是组件,通过组件控制画布中按钮的点击事件。具体实现:1、组件按钮中赋值一个变量比如左按钮给yyy赋值false右按钮赋值true;2、增加输出属性                          将其赋值为此变量,此处用布尔......
  • Windows11美化Powershell
    1.前言稍微美化了一下win11的powershell,在此记录下免得以后忘记了流程。美化方案是:PowerShell7+OhMyPosh时间:2023-07-132.安装PowerShell7PowerShell7是目前win下比较新的一个shell工具,个人感觉要比WindowsPowerShell(PowerShell5),命令提示符(cmd)这些好用......
  • POJ 2109 Power of Cryptography 数学题 double和float精度和范围
    PowerofCryptographyTimeLimit:1000MSMemoryLimit:30000KTotalSubmissions:21354Accepted:10799DescriptionCurrentworkincryptographyinvolves(amongotherthings)largeprimenumbersandcomputingpowersofnumbersamongtheseprimes.Workint......
  • USB C Power Delivery also support data transfer?
    https://www.ti.com/lit/ds/symlink/tps65987ddk.pdf?ts=1688854016963&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTPS65987DDK  ThepowerinputportonUSB-Cdockscanonlybeusedforpowerinput.ThereasonwhyUSB-Cpowerinputportscan......
  • 从钢铁行业数字化管控与超自动化融合,看华为WeAutomate能力进化
    文/王吉伟 钢铁行业的数字化转型,历来都是值得探讨的热点话题。2022年,我国粗钢产量10.13亿吨,占据了全球钢铁供给市场的半壁江山。这组数据可谓非常抢眼,但仍旧难掩诸多企业的各种经营问题。钢铁生产过程工序众多,大型设备集中,工艺流程极其复杂,更是典型的资源密集的高耗能产......
  • [PowerShell]设置笔记本亮度 -- CIM cmdlet
    如下:$monitor=Get-CimInstance-Namespaceroot/WMI-ClassNameWmiMonitorBrightnessMethodsInvoke-CimMethod-InputObject$monitor-MethodNamewmisetBrightness-Arguments@{Timeout='10';Brightness='25'}参考https://learn.microsoft.com......
  • Codeforces Round 882 (Div. 2) C. Vampiric Powers, anyone?
    由题目观察可得,a[m+1]=a[i]^...a[m],,结合异或的性质a^b^a=b,可得如果在末尾添加一个a[m+1],a[m+1]会和末尾几个抵消掉,求得i~k这一段的异或和,k<m,因此通过该操作实际上我就可以求得所有长度连续区间的异或和,求其最大值,n=1e5+10,如果暴力求解肯定会超时,我们观察发现a[i]的范围为0~2^8......
  • 记powerjob依赖的netty版本问题
    1.在使用powerjob的时候,启动项目有报netty相关ClassNotFoundException的问题<dependency><groupId>tech.powerjob</groupId><artifactId>powerjob-client</artifactId><version>4.3.1</version>......