将文档存储在CRM中,应该可供所有用户访问

时间:2016-06-23 09:22:28

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-2013 microsoft-dynamics dynamics-crm-2016

我在案例的笔记中保存了一些文档模板。 我需要获取文档的下载URL,我将在另一个需要的插件中使用它。

现在的问题是, 我上传了一份文件到笔记部分, 我通过下载并检查下载URL获得了它的下载URL。

当我将此作为输入提供给插件时,它仅适用于上传它的用户。

其他用户无法访问,

enter image description here

现在我可以在哪里上传CRM中的文档,以便所有用户都可以查看和下载文档?

2 个答案:

答案 0 :(得分:2)

您需要获得有效的WRPCTokenUrl。您可以存储Note的guid,然后在需要时获取有效的URL,而不是存储用于获取文档的直接URL(不包含其他用户的有效WRPCTokenUrl)。

Note guid可用于提取有效的下载URL,如Extending Microsoft Dynamics CRM 2011: Build Attachment Download URL Links with JQuery中所述。该页面中的相关代码段可以在此处看到:

function getDocumentUrl(annotId) {
    var URL = urlbase + '/userdefined/edit.aspx?etc=5&id={' + annotId + '}';
    var docUrl;

    // get the security token to build the href link. if the token cannot be found,
    // a null value is returned
    $.get(URL, function (data) {
        // get the form data via the 'URL'
        data = $.parseHTML(data);

        // locate the security element
        var securityTokenElement = $(data).find("[WRPCTokenUrl]");

        if (securityTokenElement) { // if the security element was found on the Note form
            // locate the security token within the security element
            var securityTokenUrl = SecurityTokenElement.attr("WRPCTokenUrl");

            // if the security token is located, build the url
            if (securityTokenUrl) {
                docUrl = urlbase + "/Activities/Attachment/download.aspx?AttachmentType=5&AttachmentId={" +
                         annotId + "}&IsNotesTabAttachment=undefined" + SecurityTokenUrl;
            }
        }
    });

    return docUrl;
}

答案 1 :(得分:2)

如果您正在尝试使用简单的Web服务调用,则可以更轻松地访问文档数据。我不会尝试通过URL访问文档数据,我认为这不是真正的意思。

查看Sample: Upload, retrieve, and download an attachment

// Retrieve the annotation record.
Annotation retrievedAnnotation =  (Annotation)_serviceProxy.Retrieve("annotation", _annotationId, cols);
_fileName = retrievedAnnotation.FileName;

// Download the attachment in the current execution folder.
using (FileStream fileStream = new FileStream(retrievedAnnotation.FileName, FileMode.OpenOrCreate))
{
    byte[] fileContent = Convert.FromBase64String(retrievedAnnotation.DocumentBody);
    fileStream.Write(fileContent, 0, fileContent.Length);
}