2013-08-09 3 views
0

라이센스 파일이 base64 인코딩 형식으로 저장되는 Dynamics CRM 2011에 엔티티가 있습니다.Dynamics CRM 2011 플러그인 내에서 파일 다운로드 트리거

지금까지 이메일에 수신자에게 라이센스가 전달되었습니다 (이메일 활동 생성 및 첨부 파일로 추가). 이제 Dynamics CRM 내에서 직접 파일을 다운로드 할 수있는 가능성을 추가하고 싶습니다.

CRM 2011 플러그인이 파일 (base64 인코딩 된 문자열)을 클라이언트 웹 브라우저로 다운로드하는 방법이 있습니까?

e.e. PostLicenseUpdate 클래스/ExecutePostLicenseUpdate 함수를 시작/파일 다운로드를 시작합니다.

A very similar 웹 서버에 별도의 .aspx를 생성하여 문제가 해결되었지만 CRM 기능이 내장되어있는 것이 더 좋았습니다.

답변

1

여기 내 해결책이 있습니다.

jQuery를 제외하고 FileSaver.js, Blob.jsbase64-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); 
     } 
    }); 

}); 

타다아! 이것이 동일한 이슈를 가진 누군가를 도울 수 있기를 바랍니다.

0

나는 플러그인을 사용하는 것이 가능하다고 생각하지 않습니다. JavaScript를 사용해보십시오.

리본에 맞춤 검색 버튼을 만들고 버튼 클릭시 자바 스크립트 기능을 실행하도록 편집하십시오. OData 호출을 사용하여 값을 검색하고 파일에 기록하십시오. 그런 다음 다운로드를 시작하십시오. this을보십시오.

참고 :이 방법을 사용하려면 CRM 2013에 리본이 없으므로 조심하십시오. 나중에 미래를 조정해야 할 수도 있습니다.

+0

나는 외부 호출을 사용하지 않으면 불가능하다는 사실을 두려워했습니다. 당신이 제공 한 링크가 나를 위해해야 ​​할 해결책 인 것 같습니다! – mufus

+0

실버 라이트 컨트롤을 사용해 볼 수도 있습니다. – Scorpion

관련 문제