取消 ItemAdding 事件:使用函数 App

问题描述

我正在尝试使用 Function App 实现远程事件接收器。所以,我创建了一个 C# Http Trigger 函数。请在下面找到代码


using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Xml;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;

public static async Task<IActionResult> Run(HttpRequest req,ILogger log)
{

    log.Loginformation("C# HTTP trigger function processed a request.");
        string requestBody = String.Empty;
    using (StreamReader streamReader =  new  StreamReader(req.Body))
    {
        requestBody = await streamReader.ReadToEndAsync();
    }  
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(requestBody);
    XmlNodeList elemlist = doc.GetElementsByTagName("AfterUrl");
    string filename = elemlist[0].InnerXml.Split("/")[1];  
    if(filename.Contains("clientA")){
        log.Loginformation("it contains..");
        var tokenSource = new CancellationTokenSource();
        tokenSource.Cancel();
      
    }  
    string responseMessage = "triggered";
    return new OkObjectResult(responseMessage);
}

我使用下面的 PowerShell 脚本将上述函数作为远程事件接收器与 SharePoint 文档库相关联

$password= "Password"
$siteUrl= “Provide your siteurl”
 
$encpassword = convertto-securestring -String $password -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username,$encpassword  
 
Connect-PnPOnline -Url $siteUrl -Credentials $cred -ErrorAction Stop
$functionUrl= “Provide your Function URL copied in prevIoUs step”
 
Add-PnPEventReceiver -List "Site Pages" -Name HandbookEventReceiver -Url $functionUrl -EventReceiverType ItemAdding -Synchronization Synchronous

每当用户将任何文档添加到文档库时,都会触发功能。从上面的 C# 代码中,我正在获取用户将在文档库中上传/创建的文档的名称我想限制用户创建/上传文件名中包含特定文本的文档,例如“客户A”。

解决方法

SharePoint before event(同步)可以取消,因为它在完成操作之前被触发。可以应用任何验证,也可以使用事件属性取消事件。

public override void ItemAdding(SPItemEventProperties properties) {  
    base.ItemAdding(properties);  
    if (condition = true) {  
        properties.Cancel = True;  
    }  
}  

要取消ItemAdding事件,可以参考How to cancel the actions using Event Receiver?Using SharePoint Remote Event Receivers with Azure Functions and TypeScriptSharePoint Remote Event Receivers using Azure FunctionHandle events in SharePoint Add-ins