Portal, WorkFlow and Email

Hi,
Has anyone sucessfully implemented email notification through Workflow in Portal Release 2?
I logged a TAR and support claim they cannot track down any documentation.
Any help is much appreciated.
Thanks,
Sonny

mail has to send to user's portal inbox and email id assigned to user
Not sure if you want a email or SAP mail. Can you clarify the above statement?
If you want to send a notification mail which needs to be displayed in UWL
Search for keyword SONIC in this forum and blogs section. You will get the solution
If you want to send a notification email to the email id of the user
You need to determine the email id of the user and use the sendmail step to send email (your SCOT settings need to be condigured by your BASIS team)
Thanks,
Prasath N

Similar Messages

  • How to send mail to portal inbox and user email id in  ESS leave workflow ?

    Hi
    currently i am working on sap ess workflows . i have customized standard workflow (ws12300111) where when manager approvesor rejects the leave in portal, mail has to send to user's portal inbox and  email id assigned to user .
    in workflow level - i have used 'sendmail' step and given agent as initiator . now mail is going to sap inbox .
            can you please guide me (step by step if Posiible) how should i do it.
    Regards,
    Sreeharsha. 
    Points will be rewarded.

    mail has to send to user's portal inbox and email id assigned to user
    Not sure if you want a email or SAP mail. Can you clarify the above statement?
    If you want to send a notification mail which needs to be displayed in UWL
    Search for keyword SONIC in this forum and blogs section. You will get the solution
    If you want to send a notification email to the email id of the user
    You need to determine the email id of the user and use the sendmail step to send email (your SCOT settings need to be condigured by your BASIS team)
    Thanks,
    Prasath N

  • Auto-included link to list item not working in Workflow or email notification

    I made a workflow straight from my SharePoint site--NOT from SharePoint Designer. (My computer is still running on Windows XP, so I can't download Designer until my boss upgrades me to a newer system.) When creating the workflow, you have the option to include
    a link to the list item by clicking a checkbox. The links don't work in either the email notification or in the workflow properties. Extra characters are being added for some weird reason. (For example, the correct link looks like "https://www.w14b.comcast.net/sites/<yada
    yada>.docx" and the links in the workflow and email look like "http://www.w14spw-po-b1.com/sites/<yada yada>.docx")  I see no place to edit the URL. How do I fix the links???

    Hi,
    Please check if the http://www.w14spw-po-b1.com/sites/ is the url of default zone of the web application where this site resides.
    Here is a similar thread for your reference:
    https://social.technet.microsoft.com/Forums/sharepoint/en-US/d17ad498-0b6f-4b12-9885-b8057fa04d88/sharepoint-2010-workflow-inserting-link-to-list-item?forum=sharepointgeneralprevious
    In addition, Windows XP SP3 is supported for SharePoint designer 2010:
    http://www.microsoft.com/en-in/download/details.aspx?id=16573
    Regards,
    Rebecca Tu
    TechNet Community Support
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact
    [email protected]

  • I recently signed on with iCloud. I find that the prompts interrupt my workflow and the costs of this feature for someone with 200 gigs of data is not competitive. I want to cancel the mail, contacts, email, etc. without Removing data from my Mac. How?

    I recently signed on for iCloud service, but find that it interrupts my workflow too often (which I know I can reset), but will soon exceed my free storage space. I have 200 gigs of data on my local drive and frankly the cost and benefit of having ICloud access to all of it is not competitive. This particular iCloud offering is overpriced for me. I want to cancel all iCloud services but can't seem to find an easy way to do it without removing the data on my local drive, which would be disaster. Need the communities help. Thanks to all.

    Tried this, but unfortunately there was no way to cancel it even when disconnected from the NET. I'm on WIFI which I turned off.
    I keep getting a pop-up that says:
    The same message comes up when you want to cancel or remove any of the other iCloud storage functions including Contacts and Emails. This is obviously a scary thought. Why would APPLE program in this type of message? I'm already at 50% of my FREE storage on iCloud after only 2 weeks. There is no way I'm going to be held hostage by this clearly unacceptable "pay or die" programming lapse when I get to 100%. I know APPLE loves making money. Who doesn't, but this makes no sense to this devoted "Since 1984" Apple fan.

  • Create a workflow that pulls data from a list based on a person in the list and emails that person

    I am trying to create a workflow in SharePoint 2010 using SharePoint Designer. 
    I have a list [ExceptionList] of users each associated with a sponsor.  A sponsor can have multiple users aligned to them.  I need to create a workflow which emails the sponsor with their associated users.
    Example:
    John, Bill, and Kelly are listed with Bob as their sponsor.  I'd like an email sent that will pull the names of John, Bill, and Kelly into the email so that Bob can validate that he is still their sponsor.
    I know how to create the basic workflow email, but am not sure how to pull in the related names into the body of the email.  I assume I will need to build a string.
    Anyone know how to achieve this?
    Thanks in advance!

    Hi,
    According to your description, my understanding is that you want to use workflow to send an email to the sponsor with the users’ names who are belonging to the sponsor.
    I recommend to create another list to store the users’ names who are belonging to the sponsor and then email the sponsor with the values in the list.
    In my test, I created another list called test list and created two columns: user(store users’ names) and Sponsor(store sponsor’s name). Fill the list with all the sponsors and leave user field as blank.
    After that, create another workflow associated with the ExceptionList to get all the users’ names who are belonging to a sponsor to fill in the user field in the test list and set the workflow to start when an item is created.
    And then you can send email with the value in the user field in test list to the sponsor.
    Best regards.
    Thanks
    Victoria Xia
    TechNet Community Support

  • Using workflow to email and fax output documents

    The requirement is that everytime an output is triggered for a document, the document should be emailed and/or faxed to certain contacts that are maintained on the customer master. Currently you can only email or fax to one contact at a time but we would like to do it for multiple contacts.
    Can this be achieved using workflow? I am relatively novice in workflow but would like to implement it if possible.
    The solution we have right now, which works by the way:
    Add a function module in every driver program to extract the contact information and populate a database table
    Run a batch job ever 5 mins that reads the database table and emails/fax using the contact information.
    Am looking for some ideas for a more efficient way of doing it. Thank you.

    yes you can sedn the mail to multiple recipients  by using ythe workflows and even you can attach the Document to the mail as a ATTACHMENT
    by using differnet Fm that are available  just go to se 37 and SAP_WAPI click f4 you will find all the FM that are required.
    Important: You have to use a step ACTIVITY and make it as background step because there is no need of any sort of interaction with the user while determining the Agents and after getting the result  i mean the reposible users  store them ina internal table of type SWHACTOR and
    in the mail step use EXPRESSION and assign these determined agents
    For this you have to bind the Task conatiner elements and workflow conatiner elements ok

  • Portal integration with workflow and contracts

    gurus,
    are there any whitepapers on the integration of the portal with oracle workflow and oracle contracts.
    it would be great help ...
    has anyone done this before ...?
    pls reply ...
    thanx a bunch ...

    reposted for attention ...
    has anyone done this ??
    oracle contracts integrated with oracle portal ...

  • Portal and Email

    Hi,
    has anyone out there integrated Portal with the Email Center that is included in CRM?
    We have a requirement to email users with approval notifications and thought it may make sense to use the Email Center as we are already using CRM.
    I would also be interested to hear of any other ways that you have managed to send emails from Portal.
    Many thanks
    Julie

    You can use the same instance. But since email server uses database heavily for its message store, you might want
    to consider a dedicated db instance for email server for performance reasons in a production environment.
    Infact, that is how it is done within Oracle itself.
    Regards
    Pavna Jain
    Oracle9iAS Product Management

  • Workflow, Form Manager and email question...

    Hi All,
    We have a client with 36,000 world-wide users of Form Manager. They need all 36,000 users to default to getting an email when a work item hits their worklist. The default is normally that this option be "un-checked"
    until each an every user goes to the Form Manager site, chooses
    "Preferences" and then "Workflow" and then places a check-mark beside
    "Send me an email when assigned a task".
    They can't depend on getting all 36,000 employees to go to Form Manager
    and do this, so a work item will surely get assigned to someone who
    hasn't done this, and will never know they got a work item in their
    worklist.
    Does anyone know how we can change the default for everyone so that this
    option is automatically "checked" for each of the 36,000 users?
    Thanks.

    Hello -
    Firstly you should go into the AdminUI component and make sure the email settings are correctly set there - the settings in the admin for email notifications will be applied to a new user. A new user is either a user who logs in for the first time or who is assigned work in a user qpac.
    Secondly for users who have already logged in you could write a simple db update statement to change all of the user's preferences. STMT would look like this:
    UPDATE tb_workflow_user SET email_task_assigned = 1
    There are other columns for the user preferences in that table as well. Also note that these fields may be of type boolean on databases which support it, others use a bit or short type.
    Good luck!
    Will@Adobe

  • Workflow Task Number and Email Description Can't be seen in QA Server

    Dear All,
                I have created a workflow; in which I want to send an email to management personnel, when someone change the quantity of Purchase requisition. It is working quite fine in Development server, but when this workflow is transported to test server, I cannot see the title, task and email description of that wokflow in SWDD. It is transported in 600, but task number description of email and title dissappeared. What can be the problem? What I have to do in this regards.
    Thanks.
    Sohail

    Hi,
    you should've send this to the appropriate forum (the workflow forum)
    I would first start by checking the transport logs to see if indeed everything is present in the QA server.
    Then I would check if everything is up and running in the QA server, espescially the workflow customizing.
    Then I would check if the appropriate background jobs for handling emails is running correctly.
    Then I would test if you can create a simple message in S00 or System-->short message and send that to you.
    If this doesn't solve it or give you directions I would create a message in the workflow forum explaining your situation.
    Kind regards, Rob Dielemans

  • Vendors for e-workflow and Portal

    Hi All,
    I would like to know SAP partner vendors for e-Workflow and Portal.
    Thanks.

    I can't get the short URL to work within a workflow.  There is something with the combination of letters and numbers and other characters that when the link gets created, it fails. 
    Short URL just comes from the Portal.
    Refer to this link
    http://scn.sap.com/thread/3615332
    Kevin

  • Time mismatch between BSP workflow and UWL in portal

    Hi All,
    I am using a portal application where ,for the same work iteam ,BSP workflow and UWL in portal are displaying two different date and time.
    Has anybody come accross the same issue?
    Need your help.
    Regards
    Rajib

    Hello,
    There might be some mismatch of attributes between BSP workflow and UWL configuration.Please check the UWL configuration file and check the display attribute name. Please check UWL configuration guide for more details
    Jojo

  • Email:  Workflow and Task List Notification

    Hi,
    I am wondering whether the setting 'Workflow and Task List Notification' in application settings is functionality that I can use: I would like to setup the e-mail notifications for planning. One of the tasks on a standard task list that we would like end users to be able to do is to inform a particular user/group that a particular task has been completed. I would not like this task to be a workflow task, can e-mail notifications be sent for standard task list items?
    Options that I have reviewed:
    - Custom button on a dataform - not sure whether I can send parameters through to this, however I could use the form name as a description.
    - A *.jsp page that accepts two parameters 'Description / form name' and 'e-mail address' and the page then sends off an e-mail (Lotus Notes from WebLogic 9)
    - Workflow - although this inform task is not entity driven. Also the notifications are across plan types i.e. one cube enters in Information and then informs users of the second cube that figures are required - which we then import using xref.
    Any advice would be much appreciated. I know it can be done, I am just looking for the easiest way to implement this using standard planning functionality where possible.
    Kind Regards,
    FC
    Edited by: user11212320 on Sep 21, 2010 10:32 AM
    Edited by: user11212320 on Sep 21, 2010 10:36 AM

    The default email solutions in planning are using workflow or task lists, though the task lists are based on due dates.
    If you wanted a solution where an email is sent out when a task list is complete, then one route could be to have a business rule attached to a task list and then the business rule uses a custom CDF to send out email notication.
    If you are interested in sending emails from business rules then I did write a blog on the subject a while back.
    Cheers
    John
    http://john-goodwin.blogspot.com/

  • URL links for Workflow Approval Email per user & others

    Hi all, we have upgraded to SRM7 and understand that we have to switch to using program /SAPSRM/OFFLINEAPPROVALSEND to generate the workflow notification emails. We have maintained the portal information in the SRM configuration to build the link. However, we have 2 issues here
    1. We currently output collective email so emails are sent out at specific timing on a per user rather than per work item basis. The URL link does not seem to work in this case (for shopping cart approval example) and we get an object GUID error. The URL looks something like this
    http://sap-ped.dev.xyz.com/irj/portal/?navigationtarget=obn://BOSystemAlias=SAP_SRM/BOTechnicalName=sc/Operation=detailprof&NavMode=3
    Also, even if I run the program for a PO approval example, the BOTechnicalName is still pointing to sc.
    However, if I do it on a per work item basis, the URL works.
    Does anyone know where the control this setting?
    2. External and internal portal
    We have some users connecting to the portal through more secured channel (external portal). In this case, I couldn't find a way to generate the appropriate URL for the external. In the past in the older SRM version, the program was using the attribute ITS_DEST in PPOPMA_BBP to build the URL link. Now, I do not know how the system knows which portal URL to take if the control is no longer at user level.
    Has anyone ever had this requirement before?
    My worse case scenario to resolve the above issues would be to use the BADI to alter the content of the email notification. The purpose of posting this message here is to ensure that I am not missing out any standard SAP functionality which could meet our requirements.
    Cheers!
    SF

    Hello,
    See hyper-links below:
    [How-To: Offline approval - Logon link does not work|http://wiki.sdn.sap.com/wiki/display/SRM/Offlineapproval-Logonlinkdoesnot+work]
    [KBA 1511180 - The hyperlink in the offline approval email is incorrect|https://service.sap.com/sap/support/notes/1511180]
    Regards.
    Laurent.

  • Dynamic CRM 2013 Online how to execute Report, generate PDF and email

    Dear All,
    I am using Dynamic CRM 2013 online. For quote, I have workflow and Dialogue processes for review process. On approval, I want the system to generate a PDF of quote report, attach the PDF and email it to the Customer.
    Better I would like, When approver, clicks on the approve button, the system should auto generate a PDF of quote report, attach the PDF and email it to the Customer, without any further input from the user. If its not possible, I may have to put button on
    quote form.
    I am using the attached code, but facing various issues.
    1. Under prepare the SOAP Message coding part, I am not sure what should be the below URL for CRM 2013 Online?
    xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    2. What should be the emailid here? Is it Recepient Contact id(Guid) ?
    var emailid = resultXml.selectSingleNode("//CreateResult").nodeTypedValue;
    alert("emailid" + emailid.toString());
    3. Using this code, not able to create Entity for "ActivityMimeAttachment", I am getting newEntity as undefined.
    Below is the code I am using. Please check and help me out, where I am going wrong. Let me know if any better way to implement it. At present, I have put one button on quote form, on click event, below code will get executed.
    <!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">
    var Xrm;
    if (window.opener) { Xrm = window.opener.Xrm; }
    else if (window.parent) { Xrm = window.parent.Xrm; }
    function getReportingSession() {
    var reportName = "Quotation_Report"; //set this to the report you are trying to download
    var reportId = "7C39D18F-1DC6-E311-8986-D89D6765B238"; //set this to the guid of the report you are trying to download
    var recordid = Xrm.Page.data.entity.getId();
    // recordid = recordid.substring(1, 37); //getting rid of curly brackets
    alert(recordid);
    var pth = Xrm.Page.context.getServerUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
    var retrieveEntityReq = new XMLHttpRequest();
    retrieveEntityReq.open("POST", pth, false);
    retrieveEntityReq.setRequestHeader("Accept", "*/*");
    retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieveEntityReq.send("id=%7B" + reportId + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName + "&isScheduledReport=false");
    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;
    function createEntity(ent, entName, upd) {
    var jsonEntity = JSON.stringify(ent);
    var createEntityReq = new XMLHttpRequest();
    var ODataPath = Xrm.Page.context.getServerUrl() + "XRMServices/2011/OrganizationData.svc";
    createEntityReq.open("POST", ODataPath + "/" + entName + "Set" + upd, false);
    createEntityReq.setRequestHeader("Accept", "application/json");
    createEntityReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    createEntityReq.send(jsonEntity);
    var newEntity = JSON.parse(createEntityReq.responseText).d;
    alert("new entity" + newEntity);
    return newEntity;
    function createAttachment() {
    var params = getReportingSession();
    var recordid = Xrm.Page.data.entity.getId();
    alert("recordid " + recordid);
    var orgName = Xrm.Page.context.getOrgUniqueName();
    var userID = Xrm.Page.context.getUserId();
    //create email record
    // Prepare the SOAP message.
    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'>" +
    "<soap:Header>" +
    "</soap:Header>" +
    "<soap:Body>" +
    "<Create xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>" +
    "<entity xsi:type='email'>" +
    "<regardingobjectid type='quote'>" + recordid + "</regardingobjectid>" +
    "<subject>" + "Email with Attachment4" + "</subject>" +
    "</entity>" +
    "</Create>" +
    "</soap:Body>" +
    "</soap:Envelope>";
    // Prepare the xmlHttpObject and send the request.
    var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
    xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Create");
    xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xHReq.setRequestHeader("Content-Length", xml.length);
    xHReq.send(xml);
    // Capture the result
    var resultXml = xHReq.responseXML;
    // alert("resultXml " + resultXml);
    // Check for errors.
    var errorCount = resultXml.selectNodes('//error').length;
    if (errorCount != 0) {
    alert("ERROR");
    var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
    alert(msg);
    var emailid = resultXml.selectSingleNode("//CreateResult").nodeTypedValue;
    alert("emailid" + emailid.toString());
    //var emailid = userID;
    var post = Object();
    post.Body = encodePdf(params);
    var email = new Array();
    email[0] =new Object();
    email[0].id = emailid;
    email[0].entityType ='email';
    post.Subject ="File Attachment";
    post.AttachmentNumber = 1;
    post.FileName ="Report.pdf";
    post.MimeType ="application/pdf";
    post.ObjectId = Object();
    post.ObjectId.LogicalName ="email";
    post.ObjectId.Id = email[0].id;
    post.ObjectTypeCode ="email";
    alert(post.ObjectId.Id);
    createEntity(post,"ActivityMimeAttachment", "");
    alert("created successfully");
    email.Subject = "Your Order";
    //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, // 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, // 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) {
    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();
    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);
    </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="createAttachment();" value="Attach Report" />
    </body>
    </html>
    Thanks. and waiting for your valuable comments.
    - Mittal

    Hello,
    Yes, I was able to make my code working as below. Tested on CRM online 2013.
    <!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 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('Quotation');
    //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 = "Report.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 = "Quotation"; //set this to the report you are trying to download
    var reportID = "7C39D18F-1DC6-E311-8986-D89D6765B238"; //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:CRMAF_Filteredquote=" + 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>
    Thank you,
    Mittal.

Maybe you are looking for