如何使用RPGLE检索Sharepoint 2013文档?

如何使用RPGLE检索Sharepoint 2013文档?,sharepoint,sharepoint-2013,ibm-midrange,rpgle,rpg,Sharepoint,Sharepoint 2013,Ibm Midrange,Rpgle,Rpg,我需要以编程方式从Sharepoint 2013检索文档,以便在IBMi上运行的RPGLE程序中使用。有人做过类似的事情吗?至少,如果我能将文档从Sharepoint中取出并放到网络文件共享中,我知道如何从那里获取它。我已经探索了许多不同的可能性,但我不知道C#或.NET,我正在努力寻找适合我的东西。如果RPGLE支持,您可以通过REST API访问SharePoint 2013数据。 您可能需要为相同的设置正确的身份验证 REST API的文档可以在上找到假设您可以在RPG中解析文档,您可以使

我需要以编程方式从Sharepoint 2013检索文档,以便在IBMi上运行的RPGLE程序中使用。有人做过类似的事情吗?至少,如果我能将文档从Sharepoint中取出并放到网络文件共享中,我知道如何从那里获取它。我已经探索了许多不同的可能性,但我不知道C#或.NET,我正在努力寻找适合我的东西。

如果RPGLE支持,您可以通过REST API访问SharePoint 2013数据。 您可能需要为相同的设置正确的身份验证


REST API的文档可以在

上找到假设您可以在RPG中解析文档,您可以使用sql函数HTTPGETBLOB和sharepoint REST API GetFolderByServerRelativeUrl来

在SQLRPLE中使用HttpGetBlobSQL函数。例如,请确保在标题中传递sharepoint授权/令牌:

url: http://site url/_api/web/GetFileByServerRelativeUrl('/Folder Name/file name')/$value
method: GET
headers:
    Authorization: "Bearer " + accessToken
如果您的文档很长,您应该在IFS中编写,如前一链接所述,否则RPG变量长度可能不够。

更新: 通过在RPG程序中使用Scott Klement的开源HTTPAPI,我实现了我的目标:

   Ctl-opt DftActGrp(*No);
   Ctl-opt BndDir('HTTPAPI');

  /include libhttp/qrpglesrc,httpapi_h

   Dcl-s rc       Int(10);
   Dcl-s url      Varchar(300);
   Dcl-s ifs      Varchar(256);
   Dcl-s pwtype   Char(1);
   Dcl-s userid   Char(50);
   Dcl-s password Char(50);

  // Turn on debugging for troubleshooting. It will write a debug log file
  // to the IFS in /tmp/httpapi_debug.txt
   http_debug(*ON);

   url = 'http://sharepoint/path/to/file/thefile.pdf';
   ifs = '/temp/myfile.pdf';

  // Set password type for SharePoint's NTLM authentication requirement
   pwtype = HTTP_AUTH_NTLM;

  // Set user and password
   userid = 'theuser';
   password = 'thepassword';

  // Set credentials for authentication
   http_setAuth(pwtype: userid: password);

  // Call HTTPAPI's routine to download the file to the IFS
   rc = http_req('GET': url: ifs);

  // End gracefully if error
   if rc <> 1;
     http_crash();
   endif;

   *inlr = *on;
Ctl opt DftActGrp(*否);
Ctl opt BndDir(“HTTPAPI”);
/包括libhttp/qrpglesrc、httpapi_h
Dcl-src-Int(10);
Dcl-s url Varchar(300);
Dcl-s ifs Varchar(256);
Dcl-s PWS型字符(1);
Dcl-s用户标识字符(50);
Dcl-s密码字符(50);
//启用调试以进行故障排除。它将写入一个调试日志文件
//到/tmp/httpapi_debug.txt中的IFS
http_调试(*打开);
url='1〕http://sharepoint/path/to/file/thefile.pdf';
ifs='/temp/myfile.pdf';
//为SharePoint的NTLM身份验证要求设置密码类型
pwtype=HTTP\u AUTH\u NTLM;
//设置用户和密码
userid='theuser';
密码='密码';
//设置身份验证的凭据
http_setAuth(pwtype:userid:password);
//调用HTTPAPI的例程将文件下载到IFS
rc=http_-req('GET':url:ifs);
//如果出现错误,请优雅地结束
若为rc 1;
http_crash();
endif;
*inlr=*on;

可以找到更多详细信息。

这听起来是一个很好的解决方案,达姆。我会试一试,让你知道结果如何。谢谢Dam,知道如何在SQLRPGLE中获取授权头的accessToken吗?我已经成功地将此方法用于Alfresco,而不是Sharepoint。使用Alfresco很容易获得auth令牌。我目前不使用sharepoint,我认为它很简单,但获取令牌似乎很困难,我搜索了一些,但找不到明确的答案,请参见。即使在javascript中,这似乎也很困难,所以在RPG中。。。面对这样一个困难的过程,我个人会找到一个Java库来为我做这件事:在IFS中登录/检索文件,并从RPG调用它。我看了《JShareAPI》或《谢谢你,达姆》。在向您提出第二个问题之前,我做了很多搜索,并遇到了同样的绊脚石。我想还是回到绘图板上来吧。然而,您获取文档的总体技术确实很有用。我的工具箱里肯定有一个。