0

目前我们使用 SAP REST API 来上传和管理附件

我们想用 SDK 替换标准请求,因为我们在通过CloudConnector相应的代理设置获取连接时遇到问题,而且我们还使用 SDK 处理所有其他请求。

var attContentSetBuilder = AttachmentContentSet.builder();
attContentSetBuilder.documentInfoRecordDocNumber("10000000008");
attContentSetBuilder.documentInfoRecordDocPart("000");
attContentSetBuilder.documentInfoRecordDocType("YBO");
attContentSetBuilder.documentInfoRecordDocVersion("01");
attContentSetBuilder.businessObjectTypeName("DRAW");
attContentSetBuilder.fileName("TEST.pdf")
attContentSetBuilder.content(fileToBase64("C:\\TEST.pdf"));
var attContentSet = attContentSetBuilder.build();
var requestBuilder = new AttachmentContentSetRequestBuilder();
var contentSetRequester = requestBuilder.create(attContentSet);
contentSetRequester.withCustomHeaders({ key: 'slug', value: 'TEST.pdf' }).execute({XXX}).then ...

function fileToBase64(filename: string): string {
    var fs = require('fs');
    return fs.readFileSync(filename, 'utf8');
}

带有二进制数据的内容/正文会以这种方式设置吗?是否slug还必须设置标头值?附件服务是否也支持GOS?到目前为止,我们得到了错误:

“附件名称不能为空”

4

1 回答 1

3

错误消息读起来就像您从 S/4HANA API 获得的消息,因此您的请求似乎存在语义问题。不幸的是,API Business Hub 不能很好地传达请求的必填字段,但这里有一些提示:

  1. 如果您查看实体定义,则以下字段不可为空:
documentInfoRecordDocType: string;
documentInfoRecordDocNumber: string;
documentInfoRecordDocVersion: string;
documentInfoRecordDocPart: string;
logicalDocument: string;
archiveDocumentId: string;
linkedSapObjectKey: string;
businessObjectTypeName: string;

所以也许为你缺失的人提供价值可以解决问题

  1. 这里有更多关于这个 API 的文档(我通过转到 Business Hub 上的 API 页面,点击“详细信息”,然后点击页面底部的“业务文档”)

  2. 你的.withCustomHeaders眼神,我猜你想要做的是:.withCustomHeaders({ slug: 'TEST.pdf' })

奖励:构建器和请求构建器具有流畅的 API,因此您也可以像这样使用它:

const attContentSet = AttachmentContentSet.builder()
  .documentInfoRecordDocNumber("10000000008")
  .documentInfoRecordDocPart("000")
  .documentInfoRecordDocType("YBO")
  .documentInfoRecordDocVersion("01")
  .businessObjectTypeName("DRAW")
  .fileName("TEST.pdf")
  .content(fileToBase64("C:\\TEST.pdf"))
  .build();

当然,这是一个口味问题,我个人觉得这在精神上更容易解析。

于 2019-09-03T15:00:08.187 回答