HTML component with PDF disappears on rotate/scale

I have a PDF loading into an <mx:HTML> source.  This works fine.  However, in my multi-touch application, I need to drag/rotate/scale its wrapping container.  Drag works fine.  However, when it rotates/scales, the PDF disappears.
From livedocs:
"If certain visual properties of an HTMLLoader object that contains a PDF document are changed, the PDF document will become invisible. These properties include the filters, alpha, rotation, and scaling
properties. Changing these properties renders the PDF content invisible until the properties are reset. The PDF content is also invisible if you change these properties of display object containers that contain the HTMLLoader object."
Is this still a limitation on Air 2/Hero?  Is there a workaround so the container/HTML/PDF can support rotating/scaling?
I want the multi-touch wall users to be able to make the PDF bigger, rotate the container/pdf, and drag it around the wall.  My drag/rotate/scale work very well on any other component, just not pdf.
Please explain why it disappears and if there is a workaround.
Thanks,
Don

I never did find a solution for this.  The Reader just doesn't support it.  What I ended up doing back then was to use ColdFusion's CFPDF tag to automatically convert each page in the PDF to an png, then do the touch gestures on the pngs.
Don Kerr

Similar Messages

  • Priority of pdf opened with in HTML Component with Menus

    Hi,
      We have a group of menus poistioned in sequence. Below the Menu one HTML component is there to display html files and pdf files. If any pdf is opened in html component and if I try to open drop dowm menu the menu is displaying below html component.
    Please reply me at the earliest.
    Thanks & Regards
    Pradeep

    Hi,
    When you say the entire content, do you mean some parts of the pdf are not getting displayed or is it going out of the screen?
    Please send a pdf you are having issues with on chmaheshatadobedotcom, it will help us investigating the problem.
    -Charu

  • Send email in html format with pdf attachment

    I am trying to send an email out of SAP using an abap program in the html format with a pdf attachment. I am using the function module -SO_DOCUMENT_SEND_API1. I noticed that when i specify the body type of the message as 'RAW' I get to see the pdf attachments however when i switch it to 'HTM' I loose the attachment in the email generated. Can anyone please help me in solving this problem. Thanks!

      ld_email                 = p_email. "All email IDs
      ld_mtitle                 = 'Bank Statement'.
      ld_format                = 'PDF'. "Attachment Format
      ld_attdescription      = 'Statement'.
      ld_attfilename          = p_filename. "Name of file
      ld_sender_address      = p_sender_address. "Sender mail address
      ld_sender_address_type = p_sender_addres_type. "INT - Internet
    * Fill the document data.
      w_doc_data-doc_size = 1.
    * Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle . "Description
      w_doc_data-sensitivty = 'F'.
    * Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle. "Description
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = it_attach[].
    * Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'HTM'. " THis is for BODY of mail RAW'.
      APPEND t_packing_list.
    * Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    * Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      t_receivers-receiver = ld_email.
      t_receivers-rec_type = 'U'.
      t_receivers-com_type = 'INT'.
      t_receivers-notif_del = 'X'.
      t_receivers-notif_ndel = 'X'.
      APPEND t_receivers.
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
                sender_address             = ld_sender_address
                sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_receivers
           EXCEPTIONS
                too_many_receivers         = 1
                document_not_sent          = 2
                document_type_not_exist    = 3
                operation_no_authorization = 4
                parameter_error            = 5
                x_error                    = 6
                enqueue_error              = 7
                OTHERS                     = 8.
    * Populate zerror return code
      ld_error = sy-subrc.

  • AIR HTML Component - URL problem

    Hi,
    We face the below mentioned problem. Attached herewith are code sample and simulation for the problem. Would be great if someone could help us.
    Due to problems with uploading the attachment here, please send a email to the following email-id ([email protected]) and I shall send the attachment in response.
    HTML Component provided in AIR is used to access different URLs one after another. When we switch from one URL to another, the previous link gets loaded prior to opening new link. Is there a way to trap events which is happening during loading of URLs.
    * Steps to Reproduce:
    1. Install  HTML_Component_TrapEvent.air and execute the code.
    2. Initially Home page is displayed.
    3. Click on anyone of the three buttons labeled: Yahoo, Google, Rediff.
    4. Respective website homepage is displayed. Wait till entire page is loaded. For example, assume Yahoo button is clicked, Yahoo website will be loaded.
    5. Click on Button labeled "Home". Home Page gets Loaded.
    6. Then click on Button labeled "Google". The HTML component with Previous web page (in this case Yahoo web page) is displayed until Google web page is loaded.
    * Expected Result:
    The HTML component last loaded should not be visible when the current component is loading. In other words, Yahoo website should not be visible when Google site is loaded.
    * Actual Result:
    The HTML component last loaded is displayed until the current component is loaded. Which means, Yahoo website is displayed until Google is loaded.
    * Any Workaround: NONE
    Thanks in advance.

    I might add that this is flex 3 Retail version, not the beta.
    Seems to work in the flex 3 milestone 4 beta.

  • Overlapping with html component

    Hi,
    Html component overlaps dropdown menu bar i.e when pdf is opened with in html componenet
    I have a problem with html component in flex...
    I have 12 drop down menus on top of the page...
    On click of item in dropdown the corressponding file opens in html component....
    There is no problem if its html file file....
    But  if pdf opens in html component the dropdown menu goes behind the pdf file....
    i.e  pdf file in html component overlaps drop down menus...
    Pls let me know how we can overcum this.....
    Thanks & Regards

    I never did find a solution for this.  The Reader just doesn't support it.  What I ended up doing back then was to use ColdFusion's CFPDF tag to automatically convert each page in the PDF to an png, then do the touch gestures on the pngs.
    Don Kerr

  • Tried to open a pdf document with Acrobat XI Pro Trial and sign in popped up , I keyed in my username and password but it doesnt respond its like grey with the four dots rotating forever. Any solution Please ?????

    Tried to open a pdf document with Acrobat XI Pro Trial and sign in popped up , I keyed in my username and password but it doesnt respond its like grey with the four dots rotating forever. Any solution Please ?????

    Hi higi97,
    How are you connected to the internet? Are you behind a particularly secure corporate firewall? Are you on Mac or Windows? Do you have any anti-malware software running on your machine that may be preventing applications other than your browser from connecting to the internet?
    You may try to follow the steps below:
    1.Close the Creative Cloud application.
    2.Navigate to the OOBE folder.
    Windows: [System drive]:\Users\[user name]\AppData\Local\Adobe\OOBE
    Mac OS: /Users/[user name]/Library/Application Support/Adobe/OOBE folder
    3.Delete the opm.db file.
    4.Launch Creative Cloud.
    Let us know if that helps,
    Regards,
    Rave

  • RichText with HTML markup in PDF

    Hello
    I've come to the point, when I need to display rich text with html markups in output PDF.
    PDF is going to be printed and I don't want anything to be editable.
    I've started with xsd schema for the xdp template, where particular element looks like this:
           <xs:element name="note">
                   <xs:complexType>
                          <xs:simpleContent>
                               <xs:extension base="xs:string">
                                    <xs:attribute ref="xfa:contentType" fixed="text/html"/>
                               </xs:extension>
                          </xs:simpleContent>
                   </xs:complexType>
           </xs:element>
    in xdp form, I am using TextField with RichText option switched on, value type: Read Only
    as a test, xml data, which I am passing into it, looks like this:
    <note>
         <body xmlns="http://www.w3.org/1999/xhtml">
              <b>Note</b>
              <a href='http://somepage.com'>homepage</a>
              <img src = 'pdficon.png'/>
         </body>
    </note>
    It comes from the html snippet, which is also displayed in java web application using the wicket framework, so no problem with that in web browser.
    In general, it works, I am not getting any parsing errors or other exceptions from LC.
    Now, my questions are:
    1.hyperlink is displayed correctly in blue color and underlined, but it is not clickable ... is it because of the ReadOnly option?
    2. Obviously, image is skipped. I don't expect that to be shown in textField, also there is not real path to that image, but I wonder, is it
    possible to display it in some other way? Or, to be more precise, is it possible to interpret <img src... correctly in PDF?
    3. I understand from some other thread in this forum, that it is not possible to paste html snippet into PDF directly?
    Many thanks
       Martin

    Hi Abhinav
    What my question your reply does apply to? Nr. 3?
       Martin

  • What does HTML have over PDFs when working with data?

    I'm doing some research for a client whose company is moving from PDFs to HTML for their in-house user interfaces.
    What does HTML have over PDFs when working with data?
    Thanks!
    Luke

    PDFs can indeed work with data and can be programmed with javascript. You can do some pretty interesting things with it. It is even possible to create interactive forms on the web using PDF, however it requires server-side support. As a general rule, though, PDFs are terrible as a web interface and it's far easier to work with HTML and PHP.
    HTML is lightweight and PDF isn't (in case that seems like a small thing, it's actually a big negative for PDFs). The success of your PDFs will depend on the versions of acrobat your users use, and getting data in and out of the PDFs will require learning far more about Acrobat's FDF format and XML implementation than you may want to know.

  • Help converting html/xhtml to pdf with bfo pdf lib or other tools?

    Hi,
    I need to convert from xhtml to pdf. I tried parsing it with xerces and crimson but wouldnt work. So the samples coming with big faceless pdf library dosent work. Is there any other method to convert html/xhtml to pdf - any libraries for direct conversion. BFO pdf report generator takes xml as i/p to convert to pdf.
    Thanks for any help

    Look here:
    http://www.adobe.com/sea/products/server/pdfgenerator/

  • Facebook API Login with the login window loaded in html component

    I am making an air app which utilises net based content such as bringing viewing their facebook photos within the app itself but I DON'T want my users to be able to browse to the internet or more specifically open up internet explorer. Problem is the facebook api requires the user to go to a facebook login page when the login for the facebook session is fired. Is there any way I can ghet this to open up in a html component rather than internet explorer? The facebooksession.login() seems to open up this window by default and doing the validatelogin without this seems to throw a null object reference error.
    Can anybody help please? Here's my code:-
    public function facebookLoginButtonClick():void{
    facebookSession = new FacebookSessionUtil("blah","blah",stage.loaderInfo);
    facebookSession.addEventListener(FacebookEvent.WAITING_FOR_LOGIN, facebookHandle_waitingForLogin);
    facebookSession.addEventListener(FacebookEvent.CONNECT, facebookHandle_connect);
    facebookSession.login();
    private function facebookHandle_waitingForLogin(event:FacebookEvent):void{
    var facebookAlert:Alert = Alert.show("Click OK After You've logged in to Facebook", "Logging In");
    facebookAlert.addEventListener(Event.CLOSE, facebookHandle_close);
    private function facebookHandle_close(event:Event):void{
    facebookSession.validateLogin();
    private function facebookHandle_connect(event:FacebookEvent):void{
    var facebookCall:FacebookCall = facebookSession.facebook.post(new GetInfo([facebookSession.facebook.uid],['name', 'pic_square']));
    facebookCall.addEventListener(FacebookEvent.COMPLETE, facebookHandle_getInfoComplete);
    private function facebookHandle_getInfoComplete(event:FacebookEvent):void{
    var facebookGetInfoData:GetInfoData = GetInfoData(event.data);
    var facebookUser:FacebookUser = FacebookUser(facebookGetInfoData.userCollection.getItemAt(0));
    facebookUserAvatar.source = facebookUser.pic_square;
    facebookUsername.text = facebookUser.name;

    Try this:
    public function FacebookInterOp(loaderInfo) {
                session = new FacebookSessionUtil(API_KEY, SECRET, loaderInfo);
                session.addEventListener(FacebookEvent.CONNECT, onConnect);
                fbook = session.facebook;
                if (loaderInfo.parameters.fb_sig_session_key) {
                    session.verifySession();
                else {
                    session.login();
    You'll still get the pop up when you load the program in the debugger, but when loading from Facebook it should be seamless. I hope that helps.

  • File does not begin with '%pdf' error with adobe reader 10.1.5 onwards

      In our web application we are using activePDF toolkit (3rd party component) to fill up carrier forms on the fly which are PDF files.
    The output file processed by the above library works fine when opened with adobe reader 8, 9 and10 on end user’s browser (IE); however, it gives below error when opening with adobe reader 11.
    Till now, we have tried different settings at IIS level, Internet explorer e.t.c. suggested on different internet posts. However, we are still facing the problem.
    While analyzing this we have come across following link
    http://helpx.adobe.com/acrobat/kb/pdf-error-1015-11001-update.html
    According to this adobe 10.1.5 onward file should only start with "%pdf". If file start with other than this we get file corrupted message.
    Before we can communicate this message to client we want to confirm this for experts. Please let me know my assumption is right?

    Rahti - i'm having the same issue but I not familiar with the steps outlined in the Adobe link below
    http://helpx.adobe.com/acrobat/kb/pdf-error-1015-11001-update.html
    Would you be able to help with how I can navigate to this on my PC to correct it for me.
    Thanks.

  • Oracle bi publisher PDF output changes chart scale

    I have created report which has charts - bar charts
    I able to run report in various formats including interactive, html, excel, powerpoint, pdf etc.
    Now the chart scale on all other format reports showing perfect e.g. 3.0 height on y axis. So its basically adjusting as the max height (value) for y axis. But for PDF output no matter weather it has less than 3.0 for all values in that page, but it shows height 4.0 (instead of 3.0 max as other output formats are showing). So its not adjusting dynamically as other output formats.
    How can I get PDF document display same as other output formats? Because if all values less than 0.5 height, still PDF output showing height as 4.0 , so graph is not visible or almost touching to the ground with straight line.
    Please help and appreciate your help.
    Thanks

    Has there been any update on this? I am running into the same problem, only it is only affecting one of my charts. The maximum keeps on dynamically setting to 4.0, though I have also seen it set its maximum to 5 and minimum to -5 given certain parameters.
    I have three other charts on the same report: one with a dynamic maximum that sets correctly, and two that have a static maximum. The problem is only when I view it as a PDF.

  • About Error in HTML component

    Hi,
    There is a question about HTML Component.
    As you know, you can load a Webpage in a HTML component by setting a URL in its location property.
    And when I write a wrong URL, which is not existing, the HTML component just continue loading forever.
    How do I know, if the written URL is correct at all? Is there eny error event handler for that?
    thanks

    I've got a hot water pipe that goes "gurgle" whenI
    hit it with a heavy book - can anyone help?Are you sure it's a gurgle?
    Could it be a rattle, or even a squeak?Pretty sure it's a gurgle. I'll check again
    Anyway, check for any of the following:
    - loose pipe straps
    - air leak in the pipe system
    Updating the pipe system would be a good idea at this
    point, unless you are able to ditch that book and get
    the equivalent electronic version.Thanks for your help. But I don't see how getting the electronic version will make things better, how am I supposed to hit a hot water pipe with a .pdf??

  • Text-input component with auto-complete functionality for mobile

    Hey guys,
    I wonder if there is a text-input component with auto-complete functionality optimized for mobile development with AIR like the one that Android provides natively as you can see here http://developer.android.com/reference/android/widget/AutoCompleteTextView.html and here http://developer.android.com/resources/tutorials/views/hello-autocomplete.html.
    At least I didn't find it in the latest SDK and I think such a component is pretty standard nowadays. Or did I simply overlook it?
    Thank you guys for any advice.
    Regards,
    Thilo

    Hi relaxtraja,
    thanks for your reply!
    I knew that there are a lot of auto-complete scripts on the web. What I was hoping was, that Adobe provides an officially supported auto-complete component optimized for mobile as part of the SDK (like in the Android SDK as I pointed out), but that doesn't seem to be the case. It's sad, because it's an essential part of modern UIs in mobile applications.
    I've already created an auto-complete component by myself based on Spark components and I will end up using it. But I will have to optimize it for mobile applications beforehands. I just think something this essential should be provided by the SDK.
    However, thanks for posting!
    Regards,
    Thilo

  • CRM ONLINE 2013: On Approval Of Quotation, Run Report, Generate PDF and Send an Email With PDF as attachment

    Hi,
    I am using CRM ONLINE 2013.
    How to automate below process?
    1. On Approval Of Quotation, Run Report.
    2. Generate PDF.
    3. Send an Email With PDF as attachment.
    As i have gone through many forums for this topic, but creating a plugin code for generating Report PDF is not possible in CRM ONLINE.
    So, What is the alternate way to do this..?
    Thanks.

    This is my entire code mentioned below:-
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
        <script type="text/javascript">
            if (typeof (SDK) == "undefined")
            { SDK = { __namespace: true }; }
            SDK.JScriptRESTDataOperations = {
                _context: function () {
                    if (typeof GetGlobalContext != "undefined")
                    { return GetGlobalContext(); }
                    else {
                        if (typeof Xrm != "undefined") {
                            return Xrm.Page.context;
                        else { return new Error("Context is not available."); }
                _getServerUrl: function () {
                    var serverUrl = this._context().getServerUrl()
                    if (serverUrl.match(/\/$/)) {
                        serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                    return serverUrl;
                _ODataPath: function () {
                    return this._getServerUrl() + "/XRMServices/2011/OrganizationData.svc/";
                _errorHandler: function (req) {
                    return new Error("Error : " +
      req.status + ": " +
      req.statusText + ": " +
      JSON.parse(req.responseText).error.message.value);
                _dateReviver: function (key, value) {
                    var a;
                    if (typeof value === 'string') {
                        a = /Date\(([-+]?\d+)\)/.exec(value);
                        if (a) {
                            return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
                    return value;
                Create: function (object, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 201) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send(JSON.stringify(object));
                Retrieve: function (id, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("GET", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 200) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                Update: function (id, object, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.setRequestHeader("X-HTTP-Method", "MERGE");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 204 || this.status == 1223) {
                                successCallback();
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send(JSON.stringify(object));
                Delete: function (id, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.setRequestHeader("X-HTTP-Method", "DELETE");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 204 || this.status == 1223) {
                                successCallback();
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                RetrieveMultiple: function (type, filter, successCallback, errorCallback) {
                    if (filter != null) {
                        filter = "?" + filter;
                    else { filter = ""; }
                    var req = new XMLHttpRequest();
                    req.open("GET", this._ODataPath() + type + "Set" + filter, true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 200) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d.results);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                __namespace: true
        </script>
        <script type="text/javascript">
            //Create Email and link it with Order as Regarding field
            var Xrm;
            var email = new Object();
            var ownerID = "";
            var CustomerId = "";
            if (window.opener) { Xrm = window.opener.Xrm; }
            else if (window.parent) { Xrm = window.parent.Xrm; }
            //Get ownerid who send email of quotation to customer
            function GetOwnerID() {
                var owner = Xrm.Page.getAttribute("ownerid").getValue();
                ownerID = owner[0].id;
                var ownerName = owner[0].name;
                var entityType = owner[0].entityType;
                GetToEmailGUID();
            //Get customerid who receive email of quotation from owner
            function GetToEmailGUID() {
                var Customer = Xrm.Page.getAttribute('customerid').getValue();
                CustomerId = Customer[0].id;
                var CustomerName = Customer[0].name;
                var entityType = Customer[0].entityType;
                //if CustomerId is type of "Account" then get Primary Contact id of that account
                if (entityType == "account") {
                    var contact = Xrm.Page.getAttribute("customerid").getValue();
                    if (contact === null) return;
                    var serverUrl = Xrm.Page.context.getClientUrl();
                    var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/AccountSet(guid'" + contact[0].id + "')?$select=PrimaryContactId";
                    var req = new XMLHttpRequest();
                    req.open("GET", oDataSelect, false);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json;charset=utf-8");
                    req.onreadystatechange = function () {
                        if (req.readyState === 4) {
                            if (req.status === 200) {
                                var retrieved = JSON.parse(req.responseText).d;
                                CustomerId = retrieved.PrimaryContactId.Id;
                            else {
                                alert(this.statusText);
                    req.send();
            function CreateEmail() {
                GetOwnerID();
                email.Subject = "Email with Report Attachment";
                //Set The current order as the Regarding object
                email.RegardingObjectId = {
                    Id: Xrm.Page.data.entity.getId(),    //Get the current entity Id , here OrderId
                    LogicalName: Xrm.Page.data.entity.getEntityName()//Get the current entity name, here it will be “salesOrder”
                //Create Email Activity
                SDK.JScriptRESTDataOperations.Create(email, "Email", EmailCallBack, function (error) { alert(error.message); });
            // Email Call Back function
            function EmailCallBack(result) {
                email = result; // Set the email to result to use it later in email attachment for retrieving activity Id
                var activityPartyFrom = new Object();
                // Set the From party of the ActivityParty to relate an entity with Email From field
                activityPartyFrom.PartyId = {
                    Id: CustomerId, //"79EBDD26-FDBE-E311-8986-D89D6765B238",  // id of entity you want to associate this activity with.        
                    LogicalName: "contact"
                // Set the "activity" of the ActivityParty
                activityPartyFrom.ActivityId = {
                    Id: result.ActivityId,
                    LogicalName: "email"
                // Now set the participation type that describes the role of the party on the activity).
                activityPartyFrom.ParticipationTypeMask = { Value: 2 }; // 2 means ToRecipients
                // Create the from ActivityParty for the email
                SDK.JScriptRESTDataOperations.Create(activityPartyFrom, "ActivityParty", ActivityPartyFromCallBack, function (error) { alert(error.message); });
                var activityPartyTo = new Object();
                // Set the From party of the ActivityParty to relate an entity with Email From field
                activityPartyTo.PartyId = {
                    Id: ownerID, //"79EBDD26-FDBE-E311-8986-D89D6765B238",  // id of entity you want to associate this activity with.        
                    LogicalName: "systemuser"
                // Set the "activity" of the ActivityParty  
                activityPartyTo.ActivityId = {
                    Id: result.ActivityId,
                    LogicalName: "email"
                // Now set the participation type that describes the role of the party on the activity).    
                activityPartyTo.ParticipationTypeMask = { Value: 1 }; // 1 means Sender
                // Create the from ActivityParty
                SDK.JScriptRESTDataOperations.Create(activityPartyTo, "ActivityParty", ActivityPartyToCallBack, function (error) { alert(error.message); });
            //ActivityParty From Callback
            function ActivityPartyFromCallBack(result) {
            //ActivityParty To Callback
            function ActivityPartyToCallBack(result) {
                GetReportId('ABM_Infotech_SalesQuote');
            //Create attachment for the created email
            function CreateEmailAttachment() {
                //get reporting session and use the params to convert a report in PDF
                var params = getReportingSession();
                //Email attachment parameters
                var activitymimeattachment = Object();
                activitymimeattachment.ObjectId = Object();
                activitymimeattachment.ObjectId.LogicalName = "email";
                activitymimeattachment.ObjectId.Id = email.ActivityId;
                activitymimeattachment.ObjectTypeCode = "email",
                    activitymimeattachment.Subject = "File Attachment";
                activitymimeattachment.Body = encodePdf(params);
                activitymimeattachment.FileName = "Report1.pdf";
                activitymimeattachment.MimeType = "application/pdf";
                //Attachment call
                SDK.JScriptRESTDataOperations.Create(activitymimeattachment, "ActivityMimeAttachment", ActivityMimeAttachmentCallBack, function (error) { alert(error.message); });
            //ActivityMimeAttachment CallBack function
            function ActivityMimeAttachmentCallBack(result) {
                var features = "location=no,menubar=no,status=no,toolbar=no,resizable=yes";
                var width = "800px";
                var height = "600px";
                window.open(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", features);
                // To open window which works in outlook and IE both
                //openStdWin(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", width,
    height, features);
            //This method will get the reportId based on a report name that will be used in            getReportingSession() function
            function GetReportId(reportName) {
                var oDataSetName = "ReportSet";
                var columns = "ReportId";
                var filter = "Name eq '" + reportName + "'";
                retrieveMultiple(oDataSetName, columns, filter, onSuccess);
            function retrieveMultiple(odataSetName, select, filter, successCallback) {
                var serverUrl = Xrm.Page.context.getServerUrl();
                var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
                var odataUri = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "?";
                if (select) {
                    odataUri += "$select=" + select + "&";
                if (filter) {
                    odataUri += "$filter=" + filter;
                $.ajax({
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",
                    url: odataUri,
                    beforeSend: function (XMLHttpRequest) {
                        XMLHttpRequest.setRequestHeader("Accept", "application/json");
                    success: function (data) {
                        if (successCallback) {
                            if (data && data.d && data.d.results) {
                                successCallback(data.d.results);
                            else if (data && data.d) {
                                successCallback(data.d);
                            else {
                                successCallback(data);
                    error: function (XmlHttpRequest, errorThrown) {
                        if (XmlHttpRequest && XmlHttpRequest.responseText) {
                            alert("Error while retrieval ; Error – " + XmlHttpRequest.responseText);
            function onSuccess(data) {
                reportId = data[0].ReportId.replace('{', ").replace('}', ");
                CreateEmailAttachment(); // Create Email Attachment
            //Gets the report contents
            function getReportingSession() {
                var pth = Xrm.Page.context.getServerUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
                var retrieveEntityReq = new XMLHttpRequest();
                var Id = Xrm.Page.data.entity.getId();
                var quotationGUID = Id.replace('{', ""); //set this to selected quotation GUID
                quotationGUID = quotationGUID.replace('}', "");
                var reportName = "ABM_Infotech_SalesQuote"; //set this to the report you are trying to download
                var reportID = "751089AA-74B8-E211-B52F-D8D3855B253B"; //set this to the guid of the report you are trying to download
                var rptPathString = ""; //set this to the CRMF_Filtered parameter
                var strParameterXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='quote'><all-attributes /><filter type='and'><condition
    attribute='quoteid' operator='eq' uitype='quote' value='" + quotationGUID + "' /> </filter></entity></fetch>";
                retrieveEntityReq.open("POST", pth, false);
                retrieveEntityReq.setRequestHeader("Accept", "*/*");
                retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                rptPathString = "id=%7B" + reportID + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName="
    +
                                reportName + "&isScheduledReport=false&p:ABMFilteredQuote=" + strParameterXML;
                //remove the part starting from &p:salesorderid if your report has no parameters
                retrieveEntityReq.send(rptPathString);
                var x = retrieveEntityReq.responseText.indexOf("ReportSession=");
                var ret = new Array();
                ret[0] = retrieveEntityReq.responseText.substr(x + 14, retrieveEntityReq.responseText.indexOf("&", x) - x - 14); //the session id
                x = retrieveEntityReq.responseText.indexOf("ControlID=");
                ret[1] = retrieveEntityReq.responseText.substr(x + 10, retrieveEntityReq.responseText.indexOf("&", x) - x - 10); //the control id
                return ret;
            var bdy = new Array();
            var bdyLen = 0;
            function concat2Bdy(x) {
                bdy[bdyLen] = x;
                bdyLen++;
            function encodePdf(params) {
                bdy = new Array();
                bdyLen = 0;
                var retrieveEntityReq = new XMLHttpRequest();
                var pth = Xrm.Page.context.getServerUrl() + "/Reserved.ReportViewerWebControl.axd?ReportSession=" + params[0] +
                "&Culture=1033&CultureOverrides=True&UICulture=1033&UICultureOverrides=True&ReportStack=1&ControlID=" + params[1] +
                "&OpType=Export&FileName=Public&ContentDisposition=OnlyHtmlInline&Format=PDF";
                retrieveEntityReq.open("GET", pth, false);
                retrieveEntityReq.setRequestHeader("Accept", "*/*");
                retrieveEntityReq.send();
                BinaryToArray(retrieveEntityReq.responseBody);
                return encode64(bdy);
            var StringMaker = function () {
                this.parts = [];
                this.length = 0;
                this.append = function (s) {
                    this.parts.push(s);
                    this.length += s.length;
                this.prepend = function (s) {
                    this.parts.unshift(s);
                    this.length += s.length;
                this.toString = function () {
                    return this.parts.join('');
            var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
            function encode64(input) {
                var output = new StringMaker();
                var chr1, chr2, chr3;
                var enc1, enc2, enc3, enc4;
                var i = 0;
                while (i < input.length) {
                    chr1 = input[i++];
                    chr2 = input[i++];
                    chr3 = input[i++];
                    enc1 = chr1 >> 2;
                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                    enc4 = chr3 & 63;
                    if (isNaN(chr2)) {
                        enc3 = enc4 = 64;
                    } else if (isNaN(chr3)) {
                        enc4 = 64;
                    output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4));
                return output.toString();
        </script>
        <script type="text/vbscript">
        Function BinaryToArray(Binary)
               Dim i
               ReDim byteArray(LenB(Binary))
               For i = 1 To LenB(Binary)
                     byteArray(i-1) = AscB(MidB(Binary, i, 1))
                     concat2Bdy(AscB(MidB(Binary, i, 1)))
             Next
              BinaryToArray = byteArray
       End Function     
        </script>
    </head>
    <body>
        <input type="button" onclick="CreateEmail();" value="Attach Report" />
    </body>
    </html>

Maybe you are looking for

  • Is It Possible To Run 2 Routers At The Same Time.

    This might be the dumbest question of all time but I am not computer savy. My two wireless PCs operate beautifully on my Linksys WRT54G. If, when I get the MacBook Pro, and for some strange reason I have connection proglems, can I get one of the airp

  • Allowing only one switch to be toggled at a time - is there a better way?

    I have an external device that I intend to control which will have a number of presets. It is critical that the user only be able to toggle one switch at a time thru LabVIEW. A switch must be un-toggled (is that even a word?) before another switch ca

  • Purchase order history for service entry sheet

    Hello All, I created 3 service entry sheets for service P.O. however I saved it with out accepting them. Why the Purchase order history is not updated after the service entry sheets were saved? When I created another service entry sheet for the same

  • How do i call web services from SAP ABAP

    Hello, Ian working with .net team. they are using sap .net Connector to connect SAP. But my job is In SAP side when Purchase Requisition is created, I have to call web services from ABAP and i have to pass the Purchase Requisition number to web servi

  • Mac: Upgrading PS CS2 to PS CS3; LR sees CS3 - what I did.

    After reading several threads asking about upgrading from CS2 to CS3 and how that impacts LR, I decided to bite the bullet and did things the way I wanted. Here are my results for a MacBookPro 2 GB ram, core duo: * I first deactived CS2, since I didn