여기 내 해결책이 있습니다.
jQuery를 제외하고 FileSaver.js, Blob.js 및 base64-binary.js을 가져옵니다.
아래와 같이 사용자 고유의 download.js 파일을 만들고 addRequestDownloadLink-function을 양식의 OnLoad 이벤트에 추가하십시오.
원본 라이센스 데이터가 바이너리이기 때문에 atob() 대신 Base64-binary.js를 사용해야합니다.
function addRequestDownloadLink() {
$('#my_download').append('<div id="my_download_downloadcontainer"><a href="#" id="my_download_requestdownload">Request download of license file</a></div>');
}
$('body').on('click', '#my_download_downloadlink', function() {
var str_decoded = Base64Binary.decode($(this).attr('data-license'));
var blob = new Blob([str_decoded], {type: "license/binary"});
saveAs(blob, $(this).attr('data-filename'));
});
$('body').on('click', '#my_download_requestdownload', function() {
var guid = Xrm.Page.data.entity.getId();
guid = guid.replace("{", ""); guid = guid.replace("}", "");
var filename = Xrm.Page.getAttribute("my_name").getValue() + ".dat";
var organization = Xrm.Page.context.getOrgUniqueName();
var entity = "my_license";
var select = "?$select=my_DataSigned"
var oDataSelect = "/" + organization + "/XRMServices/2011/OrganizationData.svc/" + entity + "Set(guid'" + guid + "')" + select;
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: oDataSelect,
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
success: function (data, textStatus, XmlHttpRequest) {
if (data.d.my_DataSigned != null) {
$('#my_download_downloadcontainer').html('<a href="#" id="my_download_downloadlink" data-license="' + data.d.my_DataSigned + '" data-filename="' + filename + '">Download license file!</span>');
}
else {
alert("No license found!");
}
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus + "; ErrorThrown: " + errorThrown);
}
});
});
타다아! 이것이 동일한 이슈를 가진 누군가를 도울 수 있기를 바랍니다.
나는 외부 호출을 사용하지 않으면 불가능하다는 사실을 두려워했습니다. 당신이 제공 한 링크가 나를 위해해야 할 해결책 인 것 같습니다! – mufus
실버 라이트 컨트롤을 사용해 볼 수도 있습니다. – Scorpion