能否在UiPath中创建自定义GraphServiceClient?如何实现?
在UiPath里自定义Microsoft Graph连接实现Office 365扩展功能
问题背景
UiPath自带的Office 365包搞不定标记邮件已读/未读、修改共享邮箱邮件主题这类操作,尝试用Microsoft Graph的代码实现时,UiPath一直报错说需要netstandard 2.0.0.0程序集,还没法直接把这个程序集加到项目里。下面是解决这个问题的实操方案:
解决步骤
1. 制作自定义NuGet包封装Graph操作
- 本地新建一个.NET类库项目,目标框架选.NET Framework 4.6.2或更高(UiPath兼容的版本即可)
- 安装NuGet包:
Microsoft.Graph、Microsoft.Graph.Auth、Microsoft.Identity.Client,选兼容.NET Framework的版本(比如Microsoft.Graph v4.x及以上) - 编写封装Graph邮件操作的代码:
using Microsoft.Graph; using Microsoft.Identity.Client; using System.Threading.Tasks; public class GraphMailTools { private readonly GraphServiceClient _graphClient; public GraphMailTools(string clientId, string tenantId, string clientSecret) { var clientApp = ConfidentialClientApplicationBuilder .Create(clientId) .WithTenantId(tenantId) .WithClientSecret(clientSecret) .Build(); var authProvider = new ClientCredentialProvider(clientApp); _graphClient = new GraphServiceClient(authProvider); } // 标记共享邮箱邮件为已读 public async Task MarkMailRead(string mailId, string sharedMailbox) { await _graphClient.Users[sharedMailbox].Messages[mailId] .Request() .UpdateAsync(new Message { IsRead = true }); } // 修改共享邮箱邮件主题 public async Task UpdateMailSubject(string mailId, string sharedMailbox, string newSubject) { await _graphClient.Users[sharedMailbox].Messages[mailId] .Request() .UpdateAsync(new Message { Subject = newSubject }); } }
- 将类库打包成NuGet包(.nupkg),然后在UiPath Studio中导入:管理包 > 本地 > 浏览选择打包好的文件
2. 在UiPath流程中调用自定义工具类
- 拖拽Invoke Code活动到流程中,引用自定义类
- 使用VB.NET编写调用代码(UiPath默认语言),记得勾选异步代码选项:
Dim mailTools As New GraphMailTools("你的ClientID", "你的租户ID", "你的客户端密钥") Await mailTools.MarkMailRead("目标邮件ID", "共享邮箱地址@xxx.com")
- 需在Invoke Code的属性 > 导入中添加自定义类的命名空间,避免类找不到的报错
3. 解决netstandard依赖冲突
UiPath基于.NET Framework,直接引用.NET Standard库易出现版本冲突,可按以下方式处理:
- 自定义类库选择的NuGet包需确保兼容.NET Framework,避免使用仅支持.NET Standard的版本
- 若仍存在冲突,手动修改UiPath项目中的
packages.config,添加绑定重定向:
<dependentAssembly> <assemblyIdentity name="netstandard" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly>
4. 配置Azure AD应用权限
在Azure AD中注册应用,添加以下应用权限(需管理员完成权限同意):
Mail.ReadWrite(针对共享邮箱的读写权限)- 确保注册的应用已获得目标共享邮箱的访问权限,必要时在Azure中为应用分配邮箱权限
测试验证
先在本地测试自定义类库的功能,确保能正常调用Graph API修改邮件状态,再放到UiPath流程中运行,检查共享邮箱内的邮件是否符合预期。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

