Dynamic SRID

I am working with Oracle 8.1.7 and need to compute Lat/Long values from offsets (in feet) from a point (Lat/Long). Since spatial cannot handle distances using the geographic coord sys, it is suggested to convert to a "local" projection to calc location then convert back. Unfortunately my offset values are based on points in a 2.5 minute grid, which results in almost 8000 unique projections (too many to add to cs table in oracle).
Here's my question:
Is there a way to calc the location based on offsets and the Lat/Long point they offset into a Lat/Long value?
I can do it by creating a specific SRID for each grid point, but I need to convert in bulk. I was wondering if there is a SQL statement, function that can modify the SRID (wktext specifically) and transform using the modified SRID. Or is there a way to do a transform with a SRID not in the cs table but defined some other way.
Thanks in advance

Daniel-
You can convert lat/long into Albers meters space using SDO_CS.TRANSFORM and SRID=32775.
Perhaps you could transform a lat/long to Albers meters, then calculate a new location and finally transform the new location back to lat/long.
Other local coordinate systems might transform more accurately than 32775, but how accurate do you need to be 1m, 10m (rhetorical)? You might want to compare calculations using 32775 and one of the local coordinate systems to see if the difference is acceptable.
-Chris

Similar Messages

  • Can a Hyperlink be created based on the results of a Dynamic Theme Query?

    What I would like to do is create a link from the results of a dynamic theme. The following code displays the names of locations on my map, is there any way that the location name once placed on the map can be a hyperlink that will run a SQL statement that will show the status of that name. My map is based on 3 status levels identified by markers, green marker is up, red is down, amber is degraded. If the Marker is red I want to be able to click the name or the Marker that is on the map to find out what the problem actually is.
    Thanks in advance!
    <mv:addJDBCTheme
         name="Locations_Names"
         datasource="mvdemo"
         spatial_column="map_loc_data"
         srid="8307"
         label_style="T.CITY NAME"
         label_column="location"
         min_scale="7.05" max_scale="0">     
              select l.location, l.map_loc_data
              from resources.locations_test l
              where l.location_id IN
              (Select distinct d_loc_id
              from cii.devices
              HAVING max(d_ops_status) <= 2 GROUP BY d_loc_id)
    </mv:addJDBCTheme>

    LJ,
    Any chance you can see what is wrong with the following code. I have gone over it line by line with an example out of the Oracle Pro spatial Data book, but I can not see what the problem is.
    I know you will not be able to run it but the error I am getting is:
    500 Internal Server Error
    java.lang.NoSuchMethodError at Oracle.lbs.mapclient.MapViewer.getUserPoint(MapViewer.java:3512)
         at oracle.lbs.mapclient.MapViewer.identify(MapViewer.java:4560)
         at oracle.lbs.mapclient.taglib.MapViewerIdentifyTag.doEndTag(MapViewerIdentifyTag.java:171)
         at tnoscmaps.MapofUS._jspService(_MapofUS.java:286)
         [SRC:/TNOSCMAPS/MapofUS.jsp:130]
    To me this is pointing to the following section:
    <mv:identify
    id="identifyResults"
    datasource="mvdemo"
    table="locations_test"
    spatial_column="map_loc_data"
    srid="8307"
    x="<%= imgCX %>"
    y="<%= imgCY %>"
    >
    location, state
    </mv:identify>
    This is my complete set of code for this page:
    <%@ page contentType="text/html;charset=UTF-8" %>
    <%@ taglib uri="/WEB-INF/mvtaglib.tld" prefix="mv" %>
    <%@ page session="true" %>
    <%@ page import="oracle.lbs.mapclient.MapViewer" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>CONUS TNOSC SITES</title>
    </head>
    <body bgcolor="#FFFF00">
    <%
    // Name of this File
    String jspURL = response.encodeURL(request.getRequestURI());
    // URL of Mapviewer servlet
    String mapViewerURL =
    "http://"+ request.getServerName()+":"+request.getServerPort()+
    request.getContextPath()+"/omserver";
    String[][] featureInfo = null;
    if( request.getParameter("session-initialized") == null ||
    request.getParameter("new-session") == "true") {
    %>
    <!-- Initialize MapViewer handle.and save it in the session -->
    <mv:init
    url="<%=mapViewerURL%>"
    datasource="mvdemo"
    id="mvHandleSimpleViewerTags" />
    <!-- Set map format and size -->
    <mv:setParam
    title="CONUS TNOSC SITES"
    width="800"
    height="500"/>
    <!-- Add themes from the base map -->
    <mv:importBaseMap name="US_MAP"/>
    <!-- Dynamic Themes -->
    <mv:addJDBCTheme
         name="Locations_Names"
         datasource="mvdemo"
         spatial_column="map_loc_data"
         srid="8307"
         label_style="T.CITY NAME"
         label_column="location"
         min_scale="7.05" max_scale="0">     
              select l.location, l.map_loc_data
              from resources.locations_test l
              where l.location_id IN
              (Select distinct d_loc_id
              from cii.devices
              HAVING max(d_ops_status) <= 2 GROUP BY d_loc_id)
    </mv:addJDBCTheme>
    <mv:addJDBCTheme
         name="Locations_Green_Status"
         datasource="mvdemo"
         spatial_column="map_loc_data"
         srid="8307"
         render_style="M.GREEN"
         min_scale="50" max_scale="0">     
    SELECT l.map_loc_data, l.location_id
    FROM resources.locations_test l
    WHERE l.location_id IN (SELECT d_loc_id
    FROM cii.devices
         GROUP BY d_loc_id HAVING MAX(d_ops_status) = 0)
    </mv:addJDBCTheme>
    <mv:addJDBCTheme
         name="Locations_AMBER_Status"
         datasource="mvdemo"
         spatial_column="map_loc_data"
         srid="8307"
         render_style="M.AMBER"
         min_scale="50" max_scale="0">     
    SELECT l.map_loc_data, l.location_id
    FROM resources.locations_test l
    WHERE l.location_id IN (SELECT d_loc_id
    FROM cii.devices
         GROUP BY d_loc_id HAVING MAX(d_ops_status) = 1)
    </mv:addJDBCTheme>
    <mv:addJDBCTheme
         name="Locations_RED_Status"
         datasource="mvdemo"
         spatial_column="map_loc_data"
         srid="8307"
         render_style="M.RED"
         min_scale="50" max_scale="0">     
    SELECT l.map_loc_data, l.location_id
    FROM resources.locations_test l
    WHERE l.location_id IN (SELECT d_loc_id
    FROM cii.devices
         GROUP BY d_loc_id HAVING MAX(d_ops_status) = 2)
    </mv:addJDBCTheme>
    <!-- Set initial map center and size -->
    <mv:setParam
    centerX="-96.0"
    centerY="39.0"
    size="37" />
    <%
    MapViewer mvHandle = (MapViewer) session.getAttribute("mvHandleSimpleViewerTags");
    String userAction = request.getParameter("userAction");
    String imgCX = request.getParameter("userClick.x");
    String imgCY = request.getParameter("userClick.y");
    if("identify".equals(userAction)) {
    %>
    <mv:identify
    id="identifyResults"
    datasource="mvdemo"
    table="locations_test"
    spatial_column="map_loc_data"
    srid="8307"
    x="<%= imgCX %>"
    y="<%= imgCY %>"
    >
    location, state
    </mv:identify>
    <%
    featureInfo = identifyResults;
    else {
    %>
    <mv:run
    action="<%=userAction%>"
    x="<%= imgCX %>"
    y="<%= imgCY %>" />
    <%
    %>
    <!-- Output the HTML content -->
    <center><h1>CONUS TNOSC SITES</h1></center>
    <form name="viewerForm" method="post" action="<%= jspURL %>" >
    <center>
    <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" >
    <tr bgcolor="#FFFFFF">
    <td valign="top">
    <table border="0" cellpadding="0" cellspacing="0">
    <!-- Map display -->
    <tr>
    <td valign="top" align="center" >
    <input type="image"
    border="1"
    src="<mv:getMapURL />"
    name="userClick"
    alt="Click on the map for selected action"
    >
    </td>
    </tr>
    <!-- Map click action -->
    <tr>
    <td align="center">
    <input type="radio" name="userAction" value="recenter"
    <%= "recenter".equals(userAction)?"checked":""%> ><B>Re-center</B>
    <input type="radio" name="userAction" value="zoomin"
    <%= "zoomin".equals(userAction)?"checked":""%> ><B>Zoom In</B>
    <input type="radio" name="userAction" value="zoomout"
    <%= "zoomout".equals(userAction)?"checked":""%> ><B>Zoom Out</B>
    <input type="radio" name="userAction" value="identify"
    <%= "identify".equals(userAction)?"checked":""%> ><B>Identify Issue</B>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <!-- Current position -->
    <tr>
    <td align="center">
    <i>Center</i>[<b><%=mvHandle.getRequestCenter().getX()+","+
    mvHandle.getRequestCenter().getY()%></b>]  
    <i>Scale</i>[<b><%=mvHandle.getMapScale()%></b>]
    </td>
    </tr>
    <!-- Identification result -->
    <% if (featureInfo !=null && featureInfo.length>0) {%>
    <tr><td align="center">
    <table border="1">
    <% for (int i=0; i<featureInfo.length; i++) {%>
    <tr>
    <% String[] row = featureInfo;
    for (int k=0; k<row.length; k++) {%>
    <td><%= row[k] %></td>
    <% } %>
    </tr>
    <% } %>
    </table>
    </td></tr>
    <% } %>
    </table>
    </center>
    <input type="hidden" name="session-initialized" value="true" >
    </form>
    </body>
    </html>

  • Shape retrieval; finding all polygons in a huge grid;dynamic grid

    Hi.
    1) Is it possible to find (fast) all shapes (eg. polygons) in huge 2D grid? and if yes how can I do it? or do I have to cluster (or sort) my shapes first to make the search fast?
    2)Is it possible to define a dynamic Grid
    not like
    SDO_DIM_ARRAY( -- 20X20 grid
    SDO_DIM_ELEMENT('X', 0, 20, 0.005),
    SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
    but sthing like
    SDO_DIM_ARRAY( SDO_DIM_ELEMENT('X', 0, infinit, 0.05), SDO_DIM_ELEMENT('Y', 0, infinit, 0.05)
    thx

    no i am searching for something I haven't found neither in Oracle Spatial nor in Oracle spatial topology and network... documentation.
    Here is what I have:
    CREATE TABLE graphs ( id NUMBER PRIMARY KEY, name VARCHAR2(32), shape SDO_GEOMETRY, geom_id NUMBER);
    INSERT INTO Graphs VALUES( 1, 'OBJECT 1', SDO_GEOMETRY(
    2006, -- Multline string, 2 dimensions (X,Y),
    NULL, NULL,
    SDO_ELEM_INFO_ARRAY(1,1,8), SDO_ORDINATE_ARRAY(280,275, 208,168, 208,381, 280,275, 459,276, 90,168, 90,381)), 14);
    INSERT INTO Graphs VALUES(2, 'OBJECT 2',SDO_GEOMETRY(2006,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1,6), SDO_ORDINATE_ARRAY(15,17,10,16, 20,38, 28,27, 459,276, 90,168)), 15);
    INSERT INTO user_sdo_geom_metadata(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('Graphs','shape',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 600, 0.05),SDO_DIM_ELEMENT('Y', 0, 600,0.05)),NULL);
    CREATE INDEX Graphs_spatial_idx ON Graphs(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
    If I would like to know if another Multiline- object (geometry2) with the coordinates 280,275, 208,168, 208,381 is in "object 1" anywhere in my table I can use something like SDO_COVERS(geometry1, geometry2);
    AND NOW here is my problem. Supposed I don 't have the coordinates of geometry2 but an equal Multiline (equal in considering the shape for example like 180,175, 108,68, 108,281). Is there a way to search over all my geometrys in my table if geometry2 COVERS IN ANY WAY (any direction) the geometry in the table. I could code the problem in java but I would like to know if Oracle Spatial or Topology network has functions that support subgraph search.

  • SRID  and  new feature - ScaleBar

    Question #1
    ================================================
    How does ScaleBar calculate its length in meters?
    Where it takes SRID for this calculation?
    Assuming we have two points
    Point A:
    latitude 37.538476361386145 degrees
    longitude 55.66146534653465
    Point B:
    latitude 37.53901472772277
    longitude 55.66146534653465
    When i issue SQL query to Oracle Spatial:
    select SDO_GEOM.SDO_LENGTH(MDSYS.SDO_GEOMETRY(2003,8192,NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(37.538476361386145,55.66146534653465,37.53901472772277,55.66146534653465 )),0.0005,'unit=M') from dual
    It returns that there are about 33 meters between this points. When i looking on the map - it seems to be true.
    But Scale bar on the same map request says that there are 60 meters between these two points!
    Question #2
    ==============================================
    In mapViewerConfig.xml we have an option
    rendering allow_local_adjustment="true"
    Previous version of MapViewer have been correctly transforming base image theme according their SRID.
    New version of MapViewer seems to be render my image theme in rectangular projection and do not take into account that on this latitude: 1 degree of longitude twice smaller than 1 degree of latutude.
    As a result i have output image doubled by horisontal axis. And I don`t know how to make MapViewer render my image correctly :(
    Setting up rendering allow_local_adjustment="false" reveals absolutely no difference in output :(
    Can someone help me with this issue? I have all my map improperly transformed by horisontal axis and it looks very terrible ....
    May be first issue with Scale bar someway connected with second issue with incorrect horisontal transformation?

    Well, Im summarizing my two questions:
    1) Problems with Scale Bar length - it displays twice longer than distance obtained through SDO_GEOM.SDO_LENGTH function.
    2) Problem with incorrect horizontal scaling of my map image in 11 version of MapViewer (rendering allow_local_adjustment="true")
    and I will try to explain what I`m exactly doing concerning second question
    Test Data:
    1) I have all my spatial tables, and metadata views (user_sdo_geom._metadata) converted to SRID 8307 now. Rebuild all indexes.
    2) I have EMPTY USER_SDO_MAPS and USER_SDO_THEMES tables , coz I`m usually using only dynamic themes.
    GEO_RASTER table contains one square image (width=1064 and height=850 in pixels)
    MBR = MDSYS.SDO_GEOMETRY(3,8307,NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,3,1), MDSYS.SDO_ORDINATE_ARRAY(37,5368,55.6597, 37.5408,55.6615))
    ==================================================================
    TEST #1 ( MapViewer 10, allow_local_adjustment = true, dynamic image theme)
    Server startup output
    06/04/06 10:12:33 WARN [oracle.lbs.mapserver.core.MapperConfig] SDOVIS local adjustment on geodetic data: ON.
    Adding only one image theme to map request without specifying “master” SRID
    mv.deleteAllThemes();
    mv.addImageTheme(
    "devtest4030",
    "image_theme_test",
    "SELECT BASEMAP,GEO FROM geo_raster",
    "BASEMAP","GEO","GIF", "8307",false);
    mv.run();
    <map_request
    datasource="devtest4030"
    width="463"
    height="404"
    bgcolor="#a6caf0"
    antialiase="true"
    format="JAVA_IMAGE_COMPRESSED">
    <center size="0.0025">
    <geoFeature>
    <geometricProperty typeName="center">
    <Point>
    <coordinates>37.5383,55.6605</coordinates>
    </Point>
    </geometricProperty>
    </geoFeature>
    </center>
    <themes>
    <theme name="image_theme_test">
    <jdbc_image_query
    image_column="BASEMAP"
    image_mbr_column="GEO"
    image_format="GIF"
    jdbc_srid="8307"
    datasource="devtest4030"
    asis="false">SELECT BASEMAP,GEO FROM geo_raster </jdbc_image_query>
    </theme>
    </themes>
    </map_request>
    Test result: Redering OK. I receive correct map image. No horizontal distortion.
    ==============================================================
    TEST #2 (MapViewer 10. , allow_local_adjustment = FALSE, dynamic image theme)
    Same as above but allow_local_adjustment = FALSE
    Test result: I`m observing horizontal distortion of map image. Width of image nearly twice bigger than height.
    ==============================================================
    TEST #3 (MapViewer 10, allow_local_adjustment = FALSE, dynamic image theme, master SRID)
    Now in addition to TEST #2 I try to set up projected CS as was recommended by lqian.
    mv.deleteAllThemes();
    mv.setMapRequestSRID(32771);
    mv.addImageTheme(
    "devtest4030",
    "image_theme_test",
    "SELECT BASEMAP,GEO FROM geo_raster",
    "BASEMAP","GEO","GIF", "8307",false);
    mv.run();
    I received error in server output:
    06/04/06 10:34:38 INFO [oracle.sdovis.theme.itp] [ImageTheme] query: SELECT * FROM ( SELECT BASEMAP,GEO FROM geo_raster) WHERE MDSYS.SDO_FILTER(GEO, MDSYS.SDO_GEOMETRY(2003, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),MDSYS.SDO_ORDINATE_ARRAY(37.53599183168317,55.65925,37.54060816831683,55.66175)), 'querytype=WINDOW') = 'TRUE'
    06/04/06 10:34:39 INFO [oracle.sdovis.DBMapMaker] **** time spent on loading features: 937ms.
    06/04/06 10:34:40 INFO [oracle.sdovis.DBMapMaker] **** time spent on rendering: 219ms
    06/04/06 10:35:55 INFO [oracle.sdovis.SRS] loadding SRS information from MDSYS.cs_srs (srid=32771).
    06/04/06 10:35:55 WARN [oracle.sdovis.util.Util] Exception while transforming input MBR: java.sql.SQLException: ORA-13300: Single point transform error
    ORA-06512: at "MDSYS.SDO_CS", line 23
    ORA-06512: at "MDSYS.SDO_CS", line 43
    06/04/06 10:35:55 ERROR [oracle.sdovis.theme.itp] Conversion of SRIDs returned null.
    06/04/06 10:35:55 INFO [oracle.sdovis.DBMapMaker] **** time spent on loading features: 141ms.
    Map Request:
    <map_request
    datasource="devtest4030"
    srid="32771"
    width="463"
    height="404"
    bgcolor="#a6caf0"
    antialiase="true"
    format="JAVA_IMAGE_COMPRESSED">
    <center size="0.0025">
    <geoFeature>
    <geometricProperty typeName="center">
    <Point>
    <coordinates>37.5383,55.6605</coordinates>
    </Point>
    </geometricProperty>
    </geoFeature>
    </center>
    <themes>
    <theme name="image_theme_test">
    <jdbc_image_query
    image_column="BASEMAP"
    image_mbr_column="GEO"
    image_format="GIF"
    jdbc_srid="8307"
    datasource="devtest4030"
    asis="false">SELECT BASEMAP,GEO FROM geo_raster</jdbc_image_query>
    </theme>
    </themes>
    </map_request>
    Test Result: Error during transformation to projected coordinate system
    ==================================================================
    TEST#5 (MapViewer 10, predefined theme)
    Now I`m adding one predefined image theme
    <?xml version="1.0" standalone="yes"?>
    <styling_rules theme_type="image" image_column="BASEMAP" image_format="GIF" image_resolution="2" image_unit="M">
    <rule >
    <features style=""> n = 2 </features>
    </rule>
    </styling_rules>
    And trying to add it on my map
    mv.deleteAllThemes();
    mv.addPredefinedTheme("D2292C6");
    mv.run();
    Then I tried all Tests #1 - #4 with predefined theme. Results absolutely same as for dynamic theme.
    ==================================================================
    TEST #6 (MapViewer 11)
    Now I`m tried all above tests with MapViewer 11 version.
    Tests Result:
    1) When Im trying to set up projected CS (master SRID) – I receive similar error as in Test #3.
    2) Without trying to set up master SRID I cannot receive not distorted image.
    Generated image width twice bigger than height with any value of allow_local_adjustment
    As I mentioned above the size of one degree of latitude two times bigger than size of one degree of longitude (at 55 degree North latitude).
    May be this is the reason why MapViewer transform original map image stretching it by horisontal axis.
    My main question is How I can receive correct map picture wich takes into account differencies in sizes of 1 degree latitude and longitude?

  • Unable to capture data in an editable dynamic ALV.

    Hi ,
    I have created a dynamic editable ALV whose displayed structure can be changed at runtime based on the selection in a drop down list value selector.
    Im trying to capture the values entered in the ALV into an internal table before the user changes the structure of the ALV to a different structure.
    In the ON_SELECT event handler of the drop down list box , im rasing a data_check event to capture the ALV data.
    The problem is that the control is not entering the event handler for the data_check event.
    If i raise the data_check event in my save event handler or any other event handler , it works fine.
    Can someone please suggest a solution.
    Regards,
    Newton.

    Hi ,
    I have figured out that the problem is local to my machine , because the code works fine on other machines.
    I guess my internet explorer has some bug.
    Regards,
    Newton.

  • Dynamic mandatory field error message is not getting displayed in webui

    Hi,
    In Appointment if the importance is HIGH i made Location as mandatory.For this i enhanced BT126H_APPT/ApptDetails. In the get_p_location() method of BTACTIVITYYH i have written the code.
    Now the problem is Error message for this dynamic mandatory field is not getting displayed in webui.
    I debugged in DO_FINISH_INPUT error message is getting generated but it is not getting displayed in ui.
    Can anybody tell where the problem is?
    Thanks,
    Hari.

    Hi Hari,
    Really sorry do not know how to convert this nug file to text
    How ever quick solution for your problem would be just keep your validation in 'DO_VALIDATE_INPUT' method of the view controller.
    Means even if the User clicks on SAVE , Since it fails here , it would not allow you to go further.
    Thanks,
    Rajesh P

  • NULL and dynamic SQL

    If table testrh2 has the following columns and data
    col1 --> NULL
    col2 --> 2
    and table testrh has the following columsn and data
    col1 --> NULL
    How could I write a dynamic SQL statement to join on the nulls? I've written the following block as a starting point.
    declare
    cursor c1 is select col1 from isis.testrh;
    lval varchar2(1000);
    lval2 varchar2(1000);
    begin
    for r1 in c1 loop
    lval := 'select col2 from isis.testrh2 where col1 = '||r1.col1;
    execute immediate lval into lval2;
    dbms_output.put_line(lval2);
    end loop;
    end;

    You can't compare null values with '=' in Oracle SQL.
    Null can only be compared with <column> is null .
    You can see it when you try these two queries:
    select * from dual where null is null;  -- you will see one row
    select * from dual where null=null;  -- you will see no rowsThat's why you have to write something like
    (<column1>=<column1>   or   (<column1> is null and <column2> is null))This should also work with null:
    decode(<column1>,<column2>,1,0)=1By the way, why do you use dynamic sql?
    lval := 'select col2 from isis.testrh2 where col1 = '||r1.col1;
    I think you could replace your two lines ( lval:= ... AND execute immediate) by this:
    begin
      select col2
      into lval
      from isis.testrh2
      where decode(col1,r1.col1,1,0)=1;
      dbms_output.put_line('lval='||lval);
    exception
    when no_data_found then
      dbms_output.put_line('no data found'); -- or whatever you want
    end;Edited by: hartmutm on 02.10.2010 23:54

  • 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.

  • Dynamically set template for Print Quote report

    We need to customize "Print Quote" in Quoting
    As part of this we will be having 2 custom templates (will be related to data definition "Quote Printing", ASOPRT).
    These two templates have to be defaulted based on the quote status - one for status "Approved", and the other template for other non "Approved" statuses.
    How can this be achieved dynamically? (OAF CO customization / personilization)
    There doesn't seem to be any setup for assigning different templates based on status.
    Profile option "ASO: Default Layout Template" can be utilized to change the default template, but we need this template to be defaulted dynamically based on the Quote status.
    Thanks,
    Sumanth
    Edited by: user1131947 on Oct 25, 2011 3:51 AM

    If you want to create a custom report using concurrent program then refer:
    http://apps2fusion.com/apps/apps/63-xml-publisher-concurrent-program-xmlp
    If you want to create a custom report using OAF page then refer:
    http://apps2fusion.com/at/51-ps/260-integrating-xml-publisher-and-oa-framework
    -Anand

  • How to rename C00n generic column names in a Dynamic SQL report

    I have a an interface whereby the user can select 1 to 60 (upper limit) columns out of 90 possible columns (using a shuttle) from one table before running a report.
    To construct the SQL that will eventually execute, I'm using a "PLSQL function body returning SQL query" with dynamic SQL. The only problem is that I have to use "Generic Column Names" option to be able to compile the code and end up with c001 to c060 as the column names.
    How can I use the names of the selected columns as the report headings rather than c001, C002... etc?
    I do not know beforehand which columns, or how many columns or the order of the selected columns.
    I know Denes K has a demo called Pick Columns but I can't access his code. I have a hunch though that he may be just using conditions to hide/show the apropriate columns.
    thanks in advance
    PaulP

    Hi Paul
    I would change the Heading Type in the Report Details screen to PLSQL and use the shuttle item to return the column values. e.g.
    RETURN :p1_shuttle;
    I'm assuming the shuttle already has a colon separated list of the column headings in the correct order?
    I hope that helps
    Shunt

  • Inserting Dynamic Images in to a Crystal Report 10

    Hi all,
    I am trying to insert dynamic pictures into my report from repository, by getting the path for the picture from database fields. The version that I am using is Crystal Reports 10.
    Here is what I have done.
    I inserted an OLE object into the report, went to "Format Graphics" by right clicking on the OLE object, then to "Hyperlink" Tab (as I didn't see anything other than "Reset" button and picture dimension options under the "Picture" tab), and selected "File" Radio button (as I didn't want to display the picture as Hyperlink) and gave the @Filepath as the formula there. @Filepath is the formula that gives me the complete path for the JPEG that I need to insert in the report.
    filepath = field A + field B
    where field A is the location for the image and field B is the actual image name.
    the actual image is located in repository folder.
    I am not able to see the image in the report "Preview" section as it is showing it has an empty box and when I click on that empty OLE object, I am able to view the image in a separate window where as my requirement is to view the image within the report (not in a separate window).
    I didn't find anything useful under Format Graphics -> Picture tab.
    I appreciate any kind of help from you all.
    Thanks!

    That feature wasn't available nor was it supported in CR 10. You'll have to upgrade to CR Xi R2 or 2008 to allow using a database field as the location of the file.
    CR 10 would only load the picture when the report is opened, it will never update when clicking on the refresh button.

  • How can I insert data in different table dynamically?

    I have one requirement ,In these  I have transaction table in which payLoad contain data like employee record,PO record,SO record  in XML format.Now I have transfer the data from transaction table to particular table(Emp,SO,PO) dynamical ? how can I do it.. Give me your suggestion guys?? Thanks in Advance

    Hello,
    Still no luck.I am surely doing silly mistakes.Anyway,Here are my workings-
    1> student_mst (id(pk),studentname) and student_guard_mst(id(fk),guardianname)
    2> created EO from both of the tables,made id in both EO as DBSequence and an association was also generated.
    3> i made that association composite by clicking the checkbox
    4> i created 2 VO from 2 EO.
    5> put those VO in Application Module.
    6> dragged and dropped 2 VO on my jspx page and dropped them as ADF Form.
    Now what to do please?

  • How to use one dynamic connection managers for multiple parallel data flow tasks

    hi there:
       I have 6 databases residing on the same server. What I want to do is  call a store procedure with identical name on each database dbo schema and transport results to a centralized place. The key is to have those SPs run in parallel instead
    of in sequence as each SP may take around 10 mins to finish. 
    The simplest way is to create 6 OLE DB connection managers and create 6 DFT tasks. However, I do not want to maintain 6 OLE DB connection managers as there is a chance to have more connection  managers.
     What I did so far is to create a OLD DB connection manager and use expression to set up connectionString properties so that it will get populated by variables at run time. It is fine when running all SPs in a Foreach Loop Container. However, it takes
    around 60 mins to finish.
      When I try to run it in parallel ( basically created 6 DFTs but use only one Dynamic Connection Manager), the connection string gets confused therefore all DFT tasks failed.
       Does anyone here have some experience on this topic?
    Thanks
     hui
    --Currently using Reporting Service 2000; Visual Studio .NET 2003; Visual Source Safe SSIS 2008 SSAS 2008, SVN --

    Yes, basically, on the connectionString property of ONE OLEDB, you are using an expression to supply value and this expression is pointing to a variable. 
    In this case , you can update this variable from a table which contains many connection strings. It's good if you want to execute Store procedures in a sequential order. When in parallel mode, this will cause issues as connectionString gets overwritten. 
     I am thinking about using script task to exec sp.
     The whole idea is that I do not want to maintain a large number of Connection Managers. 
    Hope it helps
    --Currently using Reporting Service 2000; Visual Studio .NET 2003; Visual Source Safe SSIS 2008 SSAS 2008, SVN --
    So you are not able to run parallel executions using same conn mgmr, even with dynamic connectionstring, is that correct? Yes, script task will be a way to go if you wish to execute it in parallel, you may connect to SS and query the proper conn string with
    SELECT/WHERE clause in each script > pass it to a script variable > use that script variable and execute the proc. This will require only two things to change in each script, the WHERE condition to get the conn string and the proc name (you may even
    get the proc names the same way you get conn string) and everything else will be same. Let us know how that goes. 
    Hope no two or more procs doing insert/update/delete on the same tables.

  • Creating dynamic value range, one week at a time

    Every Monday, I query a table to get data for the past week, every Monday (last Monday) to Sunday. I do some calculations with the data and insert the data and dates into a table.
    I then use cfchart to create a graph using this data. The drilldown uses the same weekly date range to produce a report. So the record count for the chart and the report should be the same.
    What I just discovered is that more data can  be added to the query table after I have already obtained the data. Since the data for the chart is already in the table, it is static. But the report is dynamice since it uses the weekly date range everytime the drilldown is selected. This causes the count of the report to be different than the count of the chart.
    Instead of gathering data every Monday and inserting into a table, for the chart, how can I make the chart data dynamic ?
    I need to plot a rolling 12 weeks worth of data, always from Monday to Sunday, inclusive. So if I decide to run the chart on a Wednesday, how would I gather the twelve weeks worth of data, always from Monday to Sunday ? I need to make this dynamc.
    The reports always work because the drilldown is pasing it the dates, thats why the count is always correct. But I do not know how to do this with the chart, which needs to be dynamic also, since static will not work.
    Any help appreciated. Thanks

    Trojfn,
    For gathering the data and inserting the same in to a table, why can't you use the scheduled tasks?.

  • SSRS - Expression to color column value dynamically in Matrix

    Hi ,
    I have a matrix which looks like :
    The <<Expr>> value can be 1 /0 /"-" .
    The Expr value is being calculated dynamically.
    The data set query I am using has a column called due_days.
    In the color expression of the <<Exp>> box I am using the expression as :
    =IIf(Fields!Due_Days.Value>14  and Fields!Notes_Count.Value>0,"Blue",(Iif(Sum(Fields!Notes_Count.Value)=0 ,"Red","Black")))
    My requirement is if the Due_Days column value is >14 then I need to highlight the value as blue else black and if value is 0 then red. When I use the above query it is just highlighting the color blue for 1st column only. Eg: 4th row . Due days for month
    of Oct and Nov is > 14 but it shows blue only for month of oct.
    How can i resolve the issue?

    In select query i have 5 columns:
    Due days(Which is difference between 2 dates) ,
    Notes count (Which is just a count of notes  entered or not having value 0/1  and value '-' if another column CRD is greater than the matrix month and year.)Eg: below date 11/12/2014 is greater than Oct 2014 hence Oct 2014 should have "-"
    Month Name , Year , Month Nbr (last 6 months which I cross joined with the table to get counts for each month)
    The matrix has year and last 6 month  as column groups
    Color coding should be if notes count is 0 then red  ,if notes count is 1 and due_days> 14 then blue else black . When i try to use expression for color as i mentioned above, it colors only 1st colum.eg:  2nd row
    Nov 2014 is blue but for jan 2014 also it should show blue as due days>14 .
    Is there any way i can do that ??
    Eg: data set returns value as :
    Due Days        CRD                              Month         
    Month_Nbr    Year   Notes _Count
    5             2014-11-28 00:00:00.000    December          12         2014       
    0
    5               2014-11-28 00:00:00.000    February           2         2015        
    0
    5             2014-11-28 00:00:00.000    January              1           2015      
    0
    5            2014-11-28 00:00:00.000    November          11          2014       1
    5            2014-11-28 00:00:00.000    October              10          2014        0
    5            2014-11-28 00:00:00.000    September          9           2014         0
    Matrix is of the form :
                  YEAR
                  MONTH
    CRD        Notes_count

Maybe you are looking for

  • ENVY14, started getting, "this copy of windows is not genuine" message. Spoke with HP tech,

    ordered and received system recover DVD.  Backed up hard drive.  Now getting message, "windows has detected a hard disk problem."  System recover will not start, just receive the hard disk problem message. and continue to receive the windows not genu

  • DBMS_OUTPUT error with RAWTOHEX function

    The PL/SQL code declare x LONG RAW; y RAW(32767); -- RAW variable has higher maximum length than LONG RAW begin select ole_object_blob into x     --ole_object_blob is declared as LONG RAW from table; y := x; DBMS_OUTPUT.PUT_LINE(rawtohex(y)); end; pr

  • Business Rule Sequence issue

    Hi, We have our system on 9.3.0.1 and I am currently facing a strange issue. I have a set of rules that I have added to an existing sequence. Now I want these rules to execute in an order and I have set the order in the sequence. However when I save,

  • Shutting down inmediatedly

    Hello community! Well, I have an Mac mini 2011 2,5... all was working fine, but since one moment to another, I start to see, when I press the power botton, don't turn it on... I believe for that time, I was doing to faster. But not, since I use a wir

  • TS1372 I have an error code 1406 when trying to restore my ipod classic.

    I just had my ipod classic's battery replaced. I purchased this device in 2006 and the battery died in 2012 (approximately 11 months ago). What else can I do?