如何通过LotusScript将文件保存至SharePoint目录?
方案1:利用SharePoint REST API(推荐)
LotusScript可通过NotesHTTPRequest对象发送HTTP请求调用SharePoint REST API,实现文件上传,核心步骤如下:
- 获取访问令牌:
- SharePoint Online:通过Azure AD的OAuth 2.0流程获取Bearer令牌,在LotusScript中构造POST请求到Azure token端点,传入客户端ID、密钥、租户ID等参数即可。
- SharePoint On-Prem:使用NTLM认证,通过
NotesHTTPRequest的SetCredentials方法设置对应凭据。
- 构造上传请求:调用
/_api/web/getfolderbyserverrelativeurl('<文件夹路径>')/files/add(overwrite=true,url='<文件名>')接口,将CSV二进制内容作为请求体发送。 - LotusScript代码片段:
Dim http As NotesHTTPRequest Dim token As String Dim csvData As Variant Dim folderUrl As String Dim fileName As String ' 初始化HTTP请求对象 Set http = CreateObject("Notes.HTTPRequest") http.PreemptiveAuth = True ' 1. 获取认证令牌(SharePoint Online场景,需自行实现令牌获取逻辑) ' token = "获取到的Bearer令牌" ' 2. 读取本地生成的CSV二进制数据 Dim stream As NotesStream Set stream = session.CreateStream() If stream.Open("<本地临时CSV路径>") Then csvData = stream.Read() stream.Close() End If ' 3. 发起上传请求 folderUrl = "/sites/你的站点名/Shared Documents/报告目录" fileName = "report_" & CStr(Now()) & ".csv" Dim url As String url = "https://你的租户.sharepoint.com" & folderUrl & "/_api/web/getfolderbyserverrelativeurl('" & folderUrl & "')/files/add(overwrite=true,url='" & fileName & "')" http.SetHeader "Authorization", "Bearer " & token http.SetHeader "Content-Type", "text/csv" Dim response As String response = http.Post(url, csvData) ' 校验上传结果 If http.StatusCode = 200 Then ' 上传成功处理逻辑 Else ' 错误处理逻辑 End If
方案2:映射SharePoint文档库为网络驱动器(原生方式)
若Domino服务器可访问SharePoint,可将文档库映射为本地网络驱动器,完全复用原有写入共享目录的逻辑:
- 操作步骤:在Domino服务器上,通过Windows“映射网络驱动器”功能,将SharePoint文档库路径(如
\\你的租户.sharepoint.com@SSL\DavWWWRoot\sites\你的站点名\Shared Documents)映射为盘符(如Z:)。 - 使用方式:LotusScript生成CSV后,直接写入该映射盘符的对应路径即可,无需修改原有代码。
- 注意事项:确保Domino运行账号拥有文档库写入权限,且网络连接稳定,避免映射驱动器断开导致上传失败。
方案3:调用SharePoint Client Object Model(COM组件)
若Domino服务器安装了SharePoint Client Components SDK,可通过COM调用Client Object Model上传文件:
- 操作前提:注册
Microsoft.SharePoint.Client.dll等相关COM组件,确保版本与SharePoint环境匹配。 - LotusScript代码片段:
Dim ctx As Object Dim web As Object Dim folder As Object Dim fileCreationInfo As Object Dim csvData As Variant ' 初始化ClientContext Set ctx = CreateObject("Microsoft.SharePoint.Client.ClientContext") ctx.Url = "https://你的租户.sharepoint.com/sites/你的站点名" ' 设置SharePoint Online凭据 Dim creds As Object Set creds = CreateObject("Microsoft.SharePoint.Client.SharePointOnlineCredentials") creds.Initialize "<账号>", "<密码>" ctx.Credentials = creds ' 获取目标文件夹 Set web = ctx.Web Set folder = web.GetFolderByServerRelativeUrl("/sites/你的站点名/Shared Documents/报告目录") ctx.Load folder ctx.ExecuteQuery() ' 准备上传信息 Set fileCreationInfo = CreateObject("Microsoft.SharePoint.Client.FileCreationInformation") fileCreationInfo.Content = csvData ' CSV二进制数据 fileCreationInfo.Url = "report.csv" fileCreationInfo.Overwrite = True Dim file As Object Set file = folder.Files.Add(fileCreationInfo) ctx.Load file ctx.ExecuteQuery() - 注意事项:该方式依赖服务器SDK安装,维护成本较高,适合对稳定性要求高且有运维支持的场景。
内容的提问来源于stack exchange,提问作者Chris Richards
相关产品推荐
相关产品推荐

