【问题标题】:Create a document using CMIS in Javascript在 Javascript 中使用 CMIS 创建文档
【发布时间】:2017-06-13 08:32:02
【问题描述】:

我正在尝试使用 Javascript 在 HCP 的 SAP 文档中心创建一个文档,但我做不到。 SAP Document Center 使用 CMIS 协议与其他应用程序进行通信。我已经能够从我的 SAPUI5 应用程序连接到 SAP 文档中心。我还设法创建了一个文件夹,如下所示:

createFolder: function(repositoryId, parentFolderId, folderName) {
        var data = {
            objectId: parentFolderId,
            cmisaction: "createFolder",
            "propertyId[0]": "cmis:name",
            "propertyValue[0]": folderName,
            "propertyId[1]": "cmis:objectTypeId",
            "propertyValue[1]": "cmis:folder"
        };

        $.ajax("/destination/document/mcm/json/" + repositoryId + "/root", {
            type: "POST",
            data: data
        }).done(function() {
            MessageBox.show("Folder with name " + folderName + " successfully created.");
        }).fail(function(jqXHR) {
            MessageBox.show("Creation of folder with name " + folderName + " failed. XHR response message: " + jqXHR.responseJSON.message);
        });
    },

但是,我发现创建文档是不可能的。我找不到 CMIS“createDocument”方法的 Internet 示例。 Java 有很多示例,但与 Javascript 无关。我不知道要发送的数据结构是什么。代码如下:

createDocument: function(repositoryId, parentFolderId, documentName, content) {
            /** 
             * 'content' contains the whole document converted to a base64 string like this:
             * "data:application/pdf;base64,JVBERi0xLjUNJeLjz9MNCjIxNCAwIG9iag08P..."
             */
            var data = {
                objectId: parentFolderId,
                cmisaction: "createDocument",
                contentStream: content,
                "propertyId[0]": "cmis:name",
                "propertyValue[0]": documentName,
                "propertyId[1]": "cmis:objectTypeId",
                "propertyValue[1]": "cmis:document"
            };

            $.ajax("/destination/document/mcm/json/" + repositoryId + "/root", {
                type: "POST",
                data: data
            }).done(function() {
                MessageBox.show("Document with name " + documentName + " successfully created.");
            }).fail(function(jqXHR) {
                MessageBox.show("Creation of document with name " + documentName + " failed. XHR response message: " + jqXHR.responseJSON.message);
            });
        },

有了这个,我在 SAP Document Center 中创建了一个文件记录,但它不获取数据。一个未格式化的文件被创建,它应该发送格式(PDF、txt、Excel、Doc、...)。

有人知道怎么做吗?

问候。

感兴趣的链接:

CMIS 标准 http://docs.oasis-open.org/cmis/CMIS/v1.1/os/CMIS-v1.1-os.html#x1-1710002

Java 的使用示例(不是 Javascript) http://chemistry.apache.org/java/developing/guide.html

【问题讨论】:

  • 您是否尝试将内容类型设置为“multipart/form-data”?

标签: sapui5 cmis opencmis


【解决方案1】:

我也遇到过类似的问题。我的解决方案是将其从 base64 更改为 FormData 方法,因此我得到了文件输入值而不是内容 base64 字符串。效果很好。

 this.createObject = function (fileInput, objectName,folderId, cbOk, cbError) {

        if (!folderId) {
            folderId = _this.metadata.rootFolderId;
        }

        var documentData = {
            'propertyId[1]': 'cmis:objectTypeId',
            'propertyValue[1]': 'cmis:document',
            'propertyId[0]': 'cmis:name',
            'propertyValue[0]': objectName,
            'objectId': folderId,
            'cmisaction': 'createDocument',
            'content' : fileInput
        };

        var formData = new FormData();

        jQuery.each(documentData, function(key, value){
            formData.append(key, value);
        });


        $.ajax({
            url: _this.metadata.actionsUrl,
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function(data){
                cbOk(data);
            },
            error: function(err){
                cbError(err);
            }
        });
    };

【讨论】:

    【解决方案2】:

    在 view.xml 中添加以下行。

    <FileUploader id="fileUploader" 
                  name="myFileUpload" 
                  uploadUrl="/cmis/root"
                  width="400px" 
                  tooltip="Upload your file to the local server" 
                  uploadComplete="handleUploadComplete" 
                  change='onChangeDoc'/>
    

    上传 url 将是 neo 目标的 url。在 neo.app.json 中添加以下行。

    {
        "path": "/cmis",
        "target": {
            "type": "destination",
            "name": "documentservice"
        },
        "description": "documentservice"
    }
    

    controller.js 中添加以下代码行。

    if (!oFileUploader.getValue()) {
        sap.m.MessageToast.show("Choose a file first");
        return;
    }
    
    var data = {
        'propertyId[0]': 'cmis:objectTypeId',
        'propertyValue[0]': 'cmis:document',
        'propertyId[1]': 'cmis:name',
        'propertyValue[1]': file.name,
        'cmisaction': 'createDocument'
    };
    
    var formData = new FormData();
    formData.append('datafile', new Blob([file]));
    jQuery.each(data, function(key, value) {
        formData.append(key, value);
    });
    
    $.ajax('/cmis/root', {
        type: 'POST',
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
        success: function(response) {
            sap.m.MessageToast.show("File Uploaded Successfully");              
        }.bind(this),
        error: function(error) {
            sap.m.MessageBox.error("File Uploaded Unsuccessfully. Save is not possible. " + error.responseJSON.message);
        }
    });
    

    在 Neo 云中,在目标选项卡中维护以下配置的 url。 https://testdaasi328160trial.hanatrial.ondemand.com/TestDaaS/cmis/json/repo-id

    repo-id 将是您的存储库密钥。

    这将解决问题。您将能够上传文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多