2012-12-13 44 views
3

我從Notes選項卡獲得了一定的結果。如何使用JavaScript將base64文件保存到客戶端?

您在iframe中看到的鏈接是文件的名稱。

我有一些看起來像base64的格式的註解中的DocumentBody。

如何下載?

感謝, 法比奧

+0

如果您發佈了一些HTML,我們可以更好地理解 – freedev

+0

可能的重複? http://stackoverflow.com/questions/4274456/how-to-create-a-text-file-on-a-client-machine-using-javascript-or-jquery –

+0

@GregOwens,你的問題的答案是否定的,這不是一個騙局。即使解決方案是相同的。使用的關鍵字不一樣。因此,尋找這些關鍵字的人永遠不會找到其他問題。此外,問題不一樣(即使答案會)。嘗試做出貢獻,而不是試圖通過尋找其他類似問題來尋找智能。杜佩綜合徵是這個網站唯一的問題。 –

回答

0

我已經提取了base64文檔體字符串,如下所示:

function getSla() { 
    // Define SOAP message 
    var objectId; 
    if (typeof crmForm === "undefined") { 
     objectId = parent.crmForm.ObjectId; 
    } 
    else { 
     objectId = crmForm.ObjectId; 
    } 

    var xml = 
     [ 
     "<?xml version='1.0' encoding='utf-8'?>", 
     "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" ", 
     "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ", 
     "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", 
     GenerateAuthenticationHeader(), 
     "<soap:Body>", 
     "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>", 
     "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' ", 
     "xsi:type='q1:QueryExpression'>", 
     "<q1:EntityName>annotation</q1:EntityName>", 
     "<q1:ColumnSet xsi:type='q1:AllColumns' />", 
     "<q1:Distinct>false</q1:Distinct><q1:Criteria><q1:FilterOperator>And</q1:FilterOperator>", 
     "<q1:Conditions><q1:Condition><q1:AttributeName>objectid</q1:AttributeName><q1:Operator>Equal</q1:Operator>", 
     "<q1:Values><q1:Value xsi:type=\"xsd:string\">", 
     objectId, 
     "</q1:Value></q1:Values></q1:Condition></q1:Conditions></q1:Criteria>", 
     "</query>", 
     "</RetrieveMultiple>", 
     "</soap:Body>", 
     "</soap:Envelope>" 
     ].join(""); 
    var resultXml = executeSoapRequest("RetrieveMultiple", xml); 

    var result = filter(resultXml.getElementsByTagName("q1:filename"), function (element) { 
     return /master.*sla/i.test(element.text); 
    }); 

    if (result.length == 0) { 
     return null; 
    } 
    else { 
     return result[0].parentNode; 
    } 
} 

function getSlaDocumentBody(sla) { 
    return sla.getElementsByTagName("q1:documentbody")[0].text; 
} 

window.open("data:application/pdf;base64," + getSlaDocumentBody(sla)); 

它在地址欄中用字符串data:application/pdf ..........打開了一個新窗口,但什麼也沒做。我更喜歡這個解決方案。

結束在這裏使用srasmussen解決方案:http://social.microsoft.com/Forums/en/crm/thread/05134277-dd76-4fbb-8f6e-89b1a2a45af1

var URL = serverUrl + "/userdefined/edit.aspx?etc=5&id=" + slaId; 

$.get(URL, function (data) { 
    var WRPCTokenElement = $(data).find("[WRPCTokenUrl]"); 
    if (WRPCTokenElement) { 
     var WRPCTokenUrl = WRPCTokenElement.attr("WRPCTokenUrl"); 
     if (WRPCTokenUrl) { 
      URL = "/Activities/Attachment/download.aspx?AttachmentType=5&AttachmentId=" + slaId + "&IsNotesTabAttachment=undefined" + WRPCTokenUrl; 
      window.open(URL); 
     } 
    } 

    return false; 
}); 
+0

我正在忙於處理類似的問題,以保留電子郵件活動響應中的內嵌圖像。我會在正確解決問題時發佈。我有Base64 PNG,可以顯示它。你在變量中是否有Base64 pdf文本? – Bvrce

+0

是@Bvrce,我擁有它。我從q1:documentbody中得到它,就像你在我的答案中看到的那樣。謝謝!期待您的洞察力。 –

1

執行一個jQuery請求一個URL這樣

Xrm.Page.context.getServerUrl() + "XRMServices/2011/OrganizationData.svc/ActivityMimeAttachmentSet(guid'abc...')?$select=Body" 

通過指定選擇你只會你想要的要求。

結果分配給一個變量,在前面加上

data:application/pdf;base64, 



從那裏,你可以內嵌顯示爲一個HTML對象或嘗試打開它作爲一個新的窗口

window.location or window.open or document.location.href 
+0

是否在ActivityMimeAttachmentSet pdf位於何處?你有PDF的GUID嗎?您可以使用Document.body.all.tags('a')並檢查href屬性以查找鏈接指向的位置。 – Bvrce

+0

我相當肯定他的意思是**預先**'data:application/pdf; base64,'看到尾隨的逗號? – DigitalDesignDj

+0

@DigitalDesignDj是對的。我已編輯附加前置。 – Bvrce

相關問題