MDM Attributes Filter

Hello, this is my code
Table_1 - main table
TableId tid = RepositorySchema.getTableId("Table_1");
FieldId fid = RepositorySchema.getFieldId("Table_1","CLASSIFIER"); // getFieldId("Table_1","CLASSIFIER") the lookup id on table CLASSIFIER
TableId taxonomyTableId = RepositorySchema.getTableId("CLASSIFIER");
AttributeId aid = "My Attribute Id";
MdmValue[] recs = getAttributeValues(tid, fid, aid);
if(recs != null && recs.length != 0){
    for(int i=0; i<recs.length; i++){
         if(recs<i>.getType() == MdmValue.Type.MEASUREMENT){
               MeasurementValue meval = (MeasurementValue)recs<i>;                    
         if(recs<i>.getType() == MdmValue.Type.TEXT_ATTRIBUTE){
              TextAttributeValue taxval = (TextAttributeValue)recs<i>;
               TextAttributeValueProperties tprop = getTextAttributeValue(taxonomyTableId, wdContext.nodeResultsTable().currentResultsTableElement().getAttributeId(), taxval);
where
public MdmValue[] getAttributeValues(TableId tid, FieldId fid, AttributeId aid) throws CommandException{
     Search s = new Search(tid);
     RetrieveLimitedAttributeValuesCommand ratval = new RetrieveLimitedAttributeValuesCommand(connection);
     ratval.setSession(userSession);
     ratval.setAttributeId(aid);
     ratval.setTaxonomyFieldId(fid);
     ratval.setSearch(s);
     ratval.execute();
     MdmValue[] mval = ratval.getAttributeValues();
     return mval;
public TextAttributeValueProperties getTextAttributeValue(TableId tid, AttributeId aid, TextAttributeValue taxattr) throws CommandException{
          RetrieveAttributeCommand ret = new RetrieveAttributeCommand(this.connection);
          ret.setSession(this.userSession);
          ret.setAttributeId(aid);
          ret.setTaxonomyTableId(tid);
          ret.execute();
          AttributeProperties aprop = ret.getAttribute();
          TextAttributeProperties txprop = (TextAttributeProperties)ret.getAttribute();
          return txprop.getTextAttributeValue(taxattr.getId());
So this class return for me a full list of values, and what do i need to do, if i want get only values for current classifier element (like search in Data Manager)

Hello, this is my code
Table_1 - main table
TableId tid = RepositorySchema.getTableId("Table_1");
FieldId fid = RepositorySchema.getFieldId("Table_1","CLASSIFIER"); // getFieldId("Table_1","CLASSIFIER") the lookup id on table CLASSIFIER
TableId taxonomyTableId = RepositorySchema.getTableId("CLASSIFIER");
AttributeId aid = "My Attribute Id";
MdmValue[] recs = getAttributeValues(tid, fid, aid);
if(recs != null && recs.length != 0){
    for(int i=0; i<recs.length; i++){
         if(recs<i>.getType() == MdmValue.Type.MEASUREMENT){
               MeasurementValue meval = (MeasurementValue)recs<i>;                    
         if(recs<i>.getType() == MdmValue.Type.TEXT_ATTRIBUTE){
              TextAttributeValue taxval = (TextAttributeValue)recs<i>;
               TextAttributeValueProperties tprop = getTextAttributeValue(taxonomyTableId, wdContext.nodeResultsTable().currentResultsTableElement().getAttributeId(), taxval);
where
public MdmValue[] getAttributeValues(TableId tid, FieldId fid, AttributeId aid) throws CommandException{
     Search s = new Search(tid);
     RetrieveLimitedAttributeValuesCommand ratval = new RetrieveLimitedAttributeValuesCommand(connection);
     ratval.setSession(userSession);
     ratval.setAttributeId(aid);
     ratval.setTaxonomyFieldId(fid);
     ratval.setSearch(s);
     ratval.execute();
     MdmValue[] mval = ratval.getAttributeValues();
     return mval;
public TextAttributeValueProperties getTextAttributeValue(TableId tid, AttributeId aid, TextAttributeValue taxattr) throws CommandException{
          RetrieveAttributeCommand ret = new RetrieveAttributeCommand(this.connection);
          ret.setSession(this.userSession);
          ret.setAttributeId(aid);
          ret.setTaxonomyTableId(tid);
          ret.execute();
          AttributeProperties aprop = ret.getAttribute();
          TextAttributeProperties txprop = (TextAttributeProperties)ret.getAttribute();
          return txprop.getTextAttributeValue(taxattr.getId());
So this class return for me a full list of values, and what do i need to do, if i want get only values for current classifier element (like search in Data Manager)

Similar Messages

  • MDM attributes not showing in UWL

    Hello Experts,
    I am using MDM5.5 SP06. I want to integrate MDM Workflow with UWL in portal. For that I followed this link
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/771f1a61-0e01-0010-daa9-93a52905da09
    I did all steps in the document. Still I am able to see the MDM tasks in UWL. And also, MDM attributes like mdmStatus, stepId, stepName, jobId, userNames, workflowTable are not available in Personalization.
    To get MDM attributes and MDM tasks what are the steps I need to Do?.
    PS: I am able to see the task in MDM Workflow.
    Thanks,
    Rajee

    Hi Jitesh,
    I have done already. I have given main table as 'Business Partners'.
    1. Here, whether I need to give table code or table name?.
    2. Any config file changes need to do for this?. I am NOT able to see MDM tasks in UWL.
    Here I am pasting my config xml file.
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE UWLConfiguration PUBLIC '-//SAP//UWL1.0//EN' 'uwl_configuration.dtd'
      >
    <UWLConfiguration version="1.0">
      <ItemTypes>
        <ItemType name="uwl.completedtask.mdm.all.SAP_MDM_Repository_BuPa.MDM_BUSINESS_PARTNERS" connector="MdmUwlConnector" defaultView="MdmWorkItemsCompletedView" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="showMdmDetails" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.business_expert/com.sap.pct.mdm.appl.bupa_occ/com.sap.pct.mdm.appl.bupa.show_records_of_job"/>
              </Properties>
              <Descriptions default="Show Record Details"/>
            </Action>
            <Action name="showHistory"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="jobId" value="${item.jobId}"/>
                      <Property name="workflowTable" value="${item.workflowTable}"/>
                          <Property name="stepId" value="${item.stepId}"/>
                          <Property name="userId" value="${item.userNames}"/>
                          <Property name="systemId" value="${item.systemId}"/>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.taskhistory"/>
                   </Properties>
                   <Descriptions default="History"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
        <ItemType name="uwl.completedtask.mdm.all.SAP_MDM_Repository_Prod.MDM_PRODUCTS" connector="MdmUwlConnector" defaultView="MdmWorkItemsCompletedView" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="showMdmDetails" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.business_expert/com.sap.pct.mdm.appl.products_occ/com.sap.pct.mdm.appl.product.show_records_of_job"/>
              </Properties>
              <Descriptions default="Show Record Details"/>
            </Action>
            <Action name="showHistory"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="jobId" value="${item.jobId}"/>
                            <Property name="workflowTable" value="${item.workflowTable}"/>
                          <Property name="stepId" value="${item.stepId}"/>
                          <Property name="userId" value="${item.userNames}"/>
                          <Property name="systemId" value="${item.systemId}"/>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.taskhistory"/>
                   </Properties>
                   <Descriptions default="History"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
        <ItemType name="uwl.task.mdm.jobs.SAP_MDM_Repository_BuPa.MDM_BUSINESS_PARTNERS" connector="MdmUwlConnector" defaultView="MdmViewJobs" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="addRecordsToJob" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.master_data_expert/com.sap.pct.mdm.appl.bupa/com.sap.pct.mdm.appl.bupa.add_records_to_job"/>
                <Property name="mode" value="result_set"/>
              </Properties>
              <Descriptions default="Add/Remove Records"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
        <ItemType name="uwl.task.mdm.jobs.SAP_MDM_Repository_Prod.MDM_PRODUCTS" connector="MdmUwlConnector" defaultView="MdmViewJobs" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="addRecordsToJob" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.master_data_expert/com.sap.pct.mdm.appl.products/com.sap.pct.mdm.appl.product.add_records_to_job"/>
                <Property name="mode" value="result_set"/>
              </Properties>
              <Descriptions default="Add/Remove Records"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
        <ItemType name="uwl.task.mdm.tasks.SAP_MDM_Repository_BuPa.MDM_BUSINESS_PARTNERS" connector="MdmUwlConnector" defaultView="MdmViewTasks" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="showMdmDetails" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.business_expert/com.sap.pct.mdm.appl.bupa_occ/com.sap.pct.mdm.appl.bupa.show_records_of_job"/>
              </Properties>
              <Descriptions default="Show Record Details"/>
            </Action>
            <Action name="showHistory"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="jobId" value="${item.jobId}"/>
                      <Property name="workflowTable" value="${item.workflowTable}"/>
                          <Property name="stepId" value="${item.stepId}"/>
                          <Property name="userId" value="${item.userNames}"/>
                          <Property name="systemId" value="${item.systemId}"/>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.taskhistory"/>
                   </Properties>
                   <Descriptions default="History"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
        <ItemType name="uwl.task.mdm.tasks.SAP_MDM_Repository_Prod.MDM_PRODUCTS" connector="MdmUwlConnector" defaultView="MdmViewTasks" defaultAction="showMdmDetails" executionMode="default">
          <Actions>
            <Action name="showMdmDetails" groupAction="no" handler="IViewLauncher" returnToDetailViewAllowed="yes" launchInNewWindow="yes">
              <Properties>
                <Property name="taskId" value="${item.jobId}"/>
             <Property name="stepId" value="${item.stepId}"/>
                <Property name="userId" value="${item.userNames}"/>
                <Property name="workflowTable" value="${item.workflowTable}"/>
                <Property name="externalRequestEvent" value="com.sap.pct.mdm.appl.masteriviews.events.externals.ViewTaskRecordsHandler"/>
                <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.roles/com.sap.pct.mdm.appl.business_expert/com.sap.pct.mdm.appl.products_occ/com.sap.pct.mdm.appl.product.show_records_of_job"/>
              </Properties>
              <Descriptions default="Show Record Details"/>
            </Action>
            <Action name="showHistory"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="jobId" value="${item.jobId}"/>
                      <Property name="workflowTable" value="${item.workflowTable}"/>
                          <Property name="stepId" value="${item.stepId}"/>
                          <Property name="userId" value="${item.userNames}"/>
                          <Property name="systemId" value="${item.systemId}"/>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.taskhistory"/>
                   </Properties>
                   <Descriptions default="History"/>
            </Action>
            <Action name="createJob"
              handler="IViewLauncher"
                 launchInNewWindow="yes"
                 launchNewWindowFeatures="width=557,height=560,resizable=yes,scrollbars=yes,status=yes,toolbar=no,menubar=no,location=no,directories=no">
                   <Properties>
                          <Property name="iview" value="pcd:portal_content/com.sap.pct/specialist/com.sap.pct.mdm.appl.mdm_550/com.sap.pct.mdm.appl.iviews/com.sap.pct.mdm.appl.workflow.createjob"/>
                   </Properties>
                   <Descriptions default="Create Job"/>
            </Action>
          </Actions>
        </ItemType>
      </ItemTypes>
      <Views>
        <View name="MdmViewJobs" selectionMode="SINGLESELECT" width="98%" supportedItemTypes="uwl.task.mdm.jobs" columnOrder="mdmStatus, priority, subject, jobId, userNames, dueDate, creatorId, createdDate" sortby="priority:descend, dueDate:ascend, createdDate:descend" tableDesign="STANDARD" visibleRowCount="10" headerVisible="yes" queryRange="undefined" tableNavigationFooterVisible="yes" tableNavigationType="CUSTOMNAV" actionRef="" refresh="300" dueDateSevere="86400000" dueDateWarning="259200000" emphasizedItems="unread" displayOnlyDefinedAttributes="yes" dynamicCreationAllowed="yes" actionPosition="top">
          <Descriptions default="My Open MDM Jobs"/>
          <DisplayAttributes>
            <DisplayAttribute name="workflowTable" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Workflow Table">
                <ShortDescriptions>
                  <Description Language="en" Description="Workflow Table"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="userNames" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="User Names">
                <ShortDescriptions>
                  <Description Language="en" Description="User Names"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="mdmStatus" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="MDM Status">
                <ShortDescriptions>
                  <Description Language="en" Description="MDM Status"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="jobId" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Job ID">
                <ShortDescriptions>
                  <Description Language="en" Description="Job ID"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
          </DisplayAttributes>
          <Actions>
            <Action reference="refresh"/>
            <Action reference="defaultGlobalWizard"/>
            <Action reference="addToNavigation"/>
            <Action reference="removeFromNavigation"/>
            <Action reference="personalize"/>
          </Actions>
        </View>
        <View name="MdmViewTasks" selectionMode="SINGLESELECT" width="98%" supportedItemTypes="uwl.task.mdm.tasks" columnOrder="mdmStatus, priority, subject, jobId, userNames, dueDate, creatorId, createdDate" sortby="priority:descend, dueDate:ascend, createdDate:descend" tableDesign="STANDARD" visibleRowCount="10" headerVisible="yes" queryRange="undefined" tableNavigationFooterVisible="yes" tableNavigationType="CUSTOMNAV" actionRef="" refresh="300" dueDateSevere="86400000" dueDateWarning="259200000" emphasizedItems="unread" displayOnlyDefinedAttributes="yes" dynamicCreationAllowed="yes" actionPosition="top">
          <Descriptions default="My Open MDM Tasks"/>
          <DisplayAttributes>
            <DisplayAttribute name="workflowTable" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Workflow Table">
                <ShortDescriptions>
                  <Description Language="en" Description="Workflow Table"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="userNames" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="User Names">
                <ShortDescriptions>
                  <Description Language="en" Description="User Names"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="mdmStatus" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="MDM Status">
                <ShortDescriptions>
                  <Description Language="en" Description="MDM Status"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="stepId" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Step ID">
                <ShortDescriptions>
                  <Description Language="en" Description="Step ID"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="jobId" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Job ID">
                <ShortDescriptions>
                  <Description Language="en" Description="Job ID"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="stepName" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Step Name">
                <ShortDescriptions>
                  <Description Language="en" Description="Step Name"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
          </DisplayAttributes>
          <Actions>
            <Action reference="refresh"/>
            <Action reference="defaultGlobalWizard"/>
            <Action reference="addToNavigation"/>
            <Action reference="removeFromNavigation"/>
            <Action reference="personalize"/>
          </Actions>
        </View>
        <View name="MdmWorkItemsCompletedView" selectionMode="SINGLESELECT" width="98%" supportedItemTypes="uwl.completedtask.mdm.all" columnOrder="subject, jobId, userNames, creatorId, createdDate, status" sortby="creatorId:ascend, createdDate:descend" tableDesign="STANDARD" visibleRowCount="10" headerVisible="yes" queryRange="undefined" tableNavigationFooterVisible="yes" tableNavigationType="CUSTOMNAV" actionRef="" refresh="-1" dueDateSevere="0" dueDateWarning="0" emphasizedItems="unread" displayOnlyDefinedAttributes="yes" dynamicCreationAllowed="yes" actionPosition="top">
          <Descriptions default="Completed MDM Tasks"/>
          <DisplayAttributes>
            <DisplayAttribute name="workflowTable" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Workflow Table">
                <ShortDescriptions>
                  <Description Language="en" Description="Workflow Table"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="userNames" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="User Names">
                <ShortDescriptions>
                  <Description Language="en" Description="User Names"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
            <DisplayAttribute name="jobId" type="string" width="10" sortable="yes" format="default" hAlign="LEFT" vAlign="BASELINE" maxTextWidth="0" headerVisible="yes">
              <Descriptions default="Step Name">
                <ShortDescriptions>
                  <Description Language="en" Description="Job ID"/>
                </ShortDescriptions>
              </Descriptions>
            </DisplayAttribute>
          </DisplayAttributes>
          <Actions>
            <Action reference="refresh"/>
            <Action reference="defaultGlobalWizard"/>
            <Action reference="addToNavigation"/>
            <Action reference="removeFromNavigation"/>
            <Action reference="personalize"/>
          </Actions>
        </View>
      </Views>
    </UWLConfiguration>
    Thanks,
    Rajee

  • Dynamic calc account using an attribute filter

    Hi experts,
    I have an account member as a dynamic calc tagged as two-pass, Its formula is: StoreMember1 / (StoreMember2/StoreMember3->MEMBER_IN_SPARSE_DIM),
    When i'm using an attribute filter that´s linked to one of my sparse dimensions the values of the account is not correct because it´s a percentage and the attribute filter just SUM the percentage of the values.
    What i really need and i don't know if it´s possible, is a way to recalculate my dynamic calc member after the attribute aggregate the value.
    Product1 Tagged as (Atribute XYZ)
    Product2 Tagged as (Atribute XYZ)
    StoreMember1->Product1 = 80
    StoreMember2->Product1 = 100
    StoreMember3->MEMBER_IN_SPARSE_DIM->NA_PRODUCT = 10
    80 / (100/10) = 8
    Dynamic_%->Product1 = 8% (Correct)
    StoreMember1->Product2 = 80
    StoreMember2->Product2 = 100
    StoreMember3->MEMBER_IN_SPARSE_DIM->NA_PRODUCT = 10
    80 / (100/10) = 8
    Dynamic_%->Product2 = 8% (Correct)
    StoreMember1->(Atribute XYZ) = 160
    StoreMember2->(Atribute XYZ) = 200
    StoreMember3->MEMBER_IN_SPARSE_DIM->NA_PRODUCT = 10
    160 / (200/10) = 8
    But in My calc
    Dynamic_%->(Atribute XYZ) = 16%  (But i need 8%)
    I'm using Plannig\Essbase 11.1.2
    Thank you in advance for your help

    The numbers are just to illustrate what is happening, my real numbers are others, there are about thousands products more.
    StoreMember2->(Atribute XYZ) = 200 it´s probably ok
    Because is the sum of the Product1 Tagged as (Atribute XYZ) = 100 + Product2 Tagged as (Atribute XYZ) = 100
    What´s happened is that when i look in XYZ attribute its simply sum after my dynamic calc
    StoreMember1->Product1 = 80
    StoreMember1->Product2 = 80
    StoreMember1->(Atribute Filter XYZ) = 160 (Ok)
    StoreMember2->Product1 = 100
    StoreMember2->Product2 = 100
    StoreMember2->(Atribute Filter XYZ) = 200 (OK)
    StoreMember3->MEMBER_IN_SPARSE_DIM->NA_PRODUCT = 10 (OK)
    160 / (200/10) = 8
    DynamicCalc% = 16 (wrong probably the attribute is a dynamic dimension that sum after dynamic calc Member)

  • How to access Selection Attribute Filter Key on a TG through CRMD_MKTTG* ??

    Hello,
    We need to apply all the attributes filters on a TG (for instance city filter) for searching an address  that comply with the filters.
    To create a segment at CRMD_MKTSEG transaction for using it later in a campaign, it could be done by 3 ways:
    1. Create a simple profile
    2. Create a target group: create a profile and build the targe group
    3. Create a profile set: create a profile and build for profile set
    When creating first the profile, it is possible to apply attributes filters. This atributes filters are stored in BD tables of marketing. We are able to find the filters for the first and third case, but not for second case.
    I proceed to explain the first and third case:
    CRMD_MKTTG_TG_H: CRM Marketing: Target Group Header Data
         GUID: CRM Marketing: GUID of Target Group (this data I know beforehand)
         SET_H_GUID: CRM Marketing: GUID Profile Set
         SET_GUID: CRM Marketing: GUID Profile Set
         PROF_GUID: CRM Marketing: GUID of a Profile
    For the first case directly we do a select on CRMD_MKTTG_PF_S where  PF_GUID = CRMD_MKTTG_TG_H-PROF_GUID:
    CRMD_MKTTG_PF_S: CRM Marketing: Selection Criterion of a Profile
         GUID:CRM Marketing: GUID for a Target Group Selection Criterion
         PF_GUID: CRM Marketing: GUID of a Profile
    For the third case we do select on CRMD_MKTTG_PF_H where SET_GUID = CRMD_MKTTG_TG_H-SET_H_GUID and we retive GUID:
    CRMD_MKTTG_PF_H: CRM Marketing: Profile
    GUID: CRM Marketing: GUID of a Profile
    SET_GUID     :CRM Marketing: GUID Profile Set
    Then  we do select select on CRMD_MKTTG_PF_S where  PF_GUID = CRMD_MKTTG_PF_H-GUID.
    And we can obtain the filters through:
    .INCLUDE     CRMT_MKTTG_PF_S_RANGE:CRM Marketing: Selection Range
    SEL_SIGN: CRM Marketing: Component SIGN for Selection Criterion
    SEL_OPTION: CRM Marketing: Component "OPTION" for Selection Criterion
    SEL_LOW     : CRM Marketing: Component "LOW" for Selection Criterion
    SEL_HIGH     :CRM Marketing: Component "HIGH" for Selection Criterion
    But what about the second case that correspond to CRMD_MKTTG_TG_H-SET_GUID?
    Could somebody explain how to access the filters when the second case happen? ¿What relationship MKT tables is based on?
    I would appreciate any suggestion.
    Best regards,
    Rosa
    Edited by: Carlos de Cozar on Feb 15, 2008 12:13 PM
    Edited by: Rosa on Feb 20, 2008 9:42 AM

    Can you please let me know how I can find out the duplicate record.
    you need to split the records from flat file structure into your internal table ans use a delete ADJACENT duplicates comparing fields
    split flat_str into wa_f1 wa_f2 wa_f2 at tab_space.

  • Navigational Attribute Filter value selection not showing full name

    Hi Experts,
    We are having Navigational Attribute TM Responsible. We have created variable in BEX for it. When we are searching for value selection for this in RSRT, its showing only last name and key part. But If I dont pass any values, and display the result its showing full name. Please find the screen shots.
    Customer needs full name to be available for selection in filter in above picture 1.
    Please suggest what needs to be done.
    Thanks,
    Govind

    Hi All,
    The issue is resolved. Making display as Long text at Infoobject level and at Query display level was not working. Hence I tried to change the display at Multiprovider level as shown below. This fixed the issue.
    Right click Navigational attribute -> Provider specific properties
    Made the display as Long text.
    This setting resolved the problem.
    Thanks for help and replies.
    Thanks,
    Govind

  • NPS send additional attribute Filter-ID (0xb)

    Hello
    Our environment – Active Directory forest level 2003, users dial-in properties are ignored, NPS server MS Windows 2008 R2 Enterprise Edition patched with all updates and used only
    for authentication, Watchguard VPN server XTM 510, software version 11.8.1. I want to allow access to network resources based on group membership. For example – members of domain group A have access only to servers/services A, members of group B have access
    only to servers/services B, etc. I configured watchguard server:
    https://www.watchguard.com/help/docs/wsm/XTM_11/en-US/index.html#cshid=en-US/authentication/radius_how_works_c.html
    https://www.watchguard.com/help/docs/wsm/XTM_11/en-US/index.html#en-US/authentication/radius_server_auth_about_c.html%3FTocPath%3DAuthentication|Configure%20%20RADIUS%20Server%20Authentication|_____0
    First I create global domain group VPN_SSL_IT_Admins, then I create connection request policy and network policy, both policies have the same Filter-Id parameter, which was the
    same as group name VPN_SSL_IT_Admins, then I create packet filter rules in VPN server, then I create the next domain group, next NPS policies, etc.
    During testing I’ve found very strange problem – NPS server sends back to radius client (VPN server) two Filter ID attributes (hex code 0xb) in access accept message, although
    user is member only of one group. One filter ID attribute is correct, the other is always the same as the first policy (I didn’t test which policy need to be first – connection request or network policy). When I change the order of policies in NPS the Filter
    ID attribute is also changed.
    I think this is security flaw because user has access to two network resources. As a workaround I create empty domain global group (no members), one connection request and one
    network policy in NPS, both policies were first in processing order. NPS still send two filter-id (0xb) attributes but connected user has only access to allowed network resources/services.
    I've also prepared PDF document with pictures, if anyone is interested (NPS settings and network monitor captures).
    Regards Milan

    Hi
    I did as Greg suggested (configure Filter-Id attribute only in network policy) and radius (NPS) sends only one Filter-Id attribute. Maybe this is "behavior by design"?
    I must admit - I've never understood why we need Connection Request Policies and Network Policies.
    J
    PDF file:
    http://1drv.ms/1eucHrQ
    Regards Milan

  • Management of profiles and authorization of MDM Attributes.

    Hi everybody, in MDM 5.5 SP04 seems to be impossibile to have authorization management on specific attributes:
    Is it possible for every attribute have different authorisation ?
    For instance:
    USER A manages ATTRIBUTE 1 (Creation, modification of values, etc.) 
    USER B manages ATTRIBUTE 2.
    thank you very much, best regards
    Alessio Perboni

    Alessio,
    I don't believe you can set authorization down to the attribute level, even in SP05. Only down to the field level. One reason for this may be that everything down to field level is set up in the Console, where the authorizations are set. Attributes are assigned within the Data Manager itself so there is no recognition of them within the Console to set authorization.
    This obviously doesn't solve your situation, but I believe this to be the case.
    Thanks,
    Tim

  • Attribute filter in query

    in GL_Account having attribute
    Indicator: G/L Account (P&L)
    Indicator: G/L Account (Balance).
    and both are navigational attribute.
    now how to restrict values of both attribute in Query.
    let say
    Indicator: G/L Account (P&L) having values = X
    so in query only X vlues data is required in query.
    please give your inputs

    thanks venkat,
    these attributes are navigational but still not able to restrict it.
    i checked it.
    i can not drag attribute in char. restriction and free char. area.
    in rows not able to restrict also.

  • AAD Sync - updates to attribute and partition filter rules are not applied

    The first Attribute filter rules and/or Directory Partition filters we add with a new AAD Sync Installation work fine immediately.
    Any subsequent changes to the rules / new rules / removed rules / updated partition filters don't have an impact on the filtering behavior until we
    reboot the AAD Sync host.
    We've tried restarting the sync service, all sorts of Full Sync etc., nothing else helps.
    We don't have any duplicate rules (have those regularly due to the known bug, but always remove them).
    We're running AAD Sync build 1.0.0485.0222.
    Thanks for any suggestions.

    Thanks for your swift suggestions. We've set up a new environment now which finally works fine. We have the same issue at the customer's site where we'll verify next week (100k user accounts, filters are crucial there).
    Problem seems to have been the Full Import that we didn't do or didn't do in the right place (can no longer verify since the original test environment is now gone). We were probably doing Full Synchronization instead (as suggested in
    the documentation on MSDN).
    Still interesting that the reboots had helped every time - they don't imply a Full Import just by themselves I assume?
    Thanks again,
    René

  • LDAPX509IdentityAsserter, usage of User Filter Attributes

    Hi
    I have WLS up and running with X.509 Identity Asserter, see also this Thread "LDAPX509IdentityAsserter, AD and userCertificate issue".
    Now we discovered that the subject on some SmartCards are different, so I'd like to incorporate that in the User Filter Attributes configuration of the X.509 Identity Asserter.
    I tried a standard LDAP Filter, but that doesn't seem to work.
    Subjects on the SmartCard (SC) look like this
    SC 1: [email protected] (=userPrincipalName in AD)
    SC 2: username (= CN in AD)
    So currently with SC 1 one I got everything working by setting User Filter Attributes to userPrincipalName=$subj.cn
    Now with SC1 and SC2 in place I need something like this
    (|(userPrincipalName=$subj.cn)(cn=$subj.cn))
    But that somehow doesn't work.
    How would a correct User Attribute Filter look like to get this working?
    Thanks.
    Matthias

    Hi,
    I'm also looking for the solution, can you please share if you get to know how it is to be done.
    Thanks & Regards,
    Jagadeesh

  • Syndication of attributes in diff. languages is not working.

    Hi
    I have this huge problem with syndicating attributes
    We have a material rep. with a taxonomy containing of 2212 attributes mixed in numeric, text, range, logical
    The main language is English.
    When I set up a port to syndicate a material XML file with local attrib. lang. it can only be syndicated in English, so eventhoug all multilanguage fields are in local language, the taxonomy attributes are locked to English.
    We have raised it with SAP, but did not get an answer we can use so far, so I wondered if somebody in here has found a solution or workaround
    I know we can split attributes into languages, but not when they are mixed, only text attributes it seems.
    What I do today to solve this situation is the following:
    1.     log into the local language in syndicator
    2.     File > New
    3.     select the port
    4.     u201Cexecute syndicationu201D
    Thatu2019s all I do, but itu2019s manual.
    Is there a way to automate this u201Cworkflowu201D via API, Java, Clix, or PI ?
    All ports, PI and channels to legacy web portal are in place, I just need to trigger the port in the right language.
    MDM 7.01.03.53
    /Kurt

    Hi RDNPrasad,
    The attribute names are not same in both Norwegian and English layers. So in this case I need Norwegian attribute names in Norwegian.
    Here I want to add that Attribute name is nothing but just like Field name, if it is carrying the same values as you said I agree the values of numeric attributes are same in all languages.  I mean if you want Attribute name in Norwegian it does not matter what Source attribute Name you map whether its in English or Norwegian as here your Target Structure Attribute name really matters. So in this case you should give Attributes name at Target Side in all languages (English, Norwegian) etc  and for source you can map clone Attribute fields as i said in my above post. Further as you said, Because I have maintained attribute names in Norwegian language also So similarly you need to maintain attribute names in Norwegian language (and all other languages) in Target structure along with English language and when you get this file from MDM, thus will have attributes name in all languages. So you need to give attribute name in all languages at target side(Destination Items).
    e.g. I have two Attributes of Type Numeric languages Eng and Norwegian maintained in MDM.
    InMDM TagetStructure
    Color--Should map with>Target Attribute Name Color
    Color(Clone)-Should map with -->Target Attribute name Farge , So in this way you will have required Attribute name in different languages with same values as Values would be remain same as it is Numeric.
    suppose even if you get Attribute name of Type Numeric somehow Split, does it really matters..?
    InMDM TargetStructure
    Color--> Color
    Farge-->Color , So here you getting Attribute name in English language though you have MDM Attributes name available in both languages. So please try to understand since all in all what matters the attribute Values. For Type Text , you can get Attribute values in different language using Split Multi-lingual and for Numeric you can use Clone or not need at all since values will remain same. So if you want Attribute name in all languages then it should be Target Side(Destination Item) and for Values in different languages it matters at source side(MDM side). I hope you got my point.
    Kindly revert if you still have doubts else can mark thread as answered.
    Regards,
    Mandeep Saini

  • Reg: Colume filter

    HI All,
    please help me///
    i have 5 measures in the report and in that measures i wrote different case statments to get that measures.
    Now, i want to give individual filters based on dimension attributes for the 5 measure columns.
    How can i get this...
    thanks in advance

    Use filter function as
    FILTER(CASE WHEN 1 = 0 THEN 0 ELSE "Sales"."Amount" END USING ("DATE"."YEAR" = 2011))
    Replace the case statement here with the case statement of your measures and replace the Year filter above with your dimension attributes filter.
    Thanks

  • Filter on SAP ABAP Initial Loads

    Hi all,
    I'm trying to put a filter on the pass "ReadABAPuser" of an ABAP Initial Load. My SAP ABAP System has over 10000 users and I need only part of them.
    I tried so to add "FILTER" entry (as on ReadABAProle for example) on Source tab of the pass "ReadABAPuser" with value "A*".
    But seems the pass does not make attention of this FILTER and still request the full user list.
    Do you have met this issue ?
    Thanks for your help,
    Benjamin

    Hi Benjamin,
    well, I've never worked with the pass attribute FILTER for the pass type "FromSAP". Therefore, I'm not sure about the following -  but maybe it's a starting point for further investigation... 
    I believe that it works differently for different data types:
    Roles: simple filter value which filters for the role name (you can use *)
    Roles, if you connect to a CUA central system: not supported
    Users: it seems to work with a multivalue name=value syntax.
    Conclusion: I guess it is easier to filter users in the source tab of the ToPass "WriteABAPUsers".
    Kind regards
    Frank Buchholz

  • Size and duration of a MDM Project

    Hello,
    I have a difficult question (because I know that the answer depends on the situation), but I would appreciate to have some ideas based on real experience :
    1) what is the man-month effort for a typical MDM project? Say to put in place a repository for products + customers, so that at the end, we are able :
    - to maintain them centrally and distribute them to sevaral systems
    - to use the unduplication fonctionality
    The project should have the following steps : requirements gathering, specifications, customizing, tests, data migration and cutover.
    2) What profiles do we need for such a project ?
    3) Is it realistic to plan a MDM project in less than 6 months ?
    Thank you in advance for your answers.
    Best regards,
    Christophe.

    Hi Christoper,
    My experience of MDM Project for Resource estimation is as below.
      The most important thing to look at MDM project is to know what are the interfacing issues from source systems.  What are the final Attributes that need to be mapped in MDM.  what are the total no of mapping profiles that need to be build for Importing and Sysdicating.  what are the taxonomy, lookup or hirearchy that are required to customer?   Does RPCM is a required scenario?  What are ports that need to be required?  how many client systems are required for inbound/outbound and so on? 
    Note:  MDM implementation is driven more by architecture and its integration to other systems.  It is not a worry to know the no of records in MDM.  MDM Attribute list is something that shows the impact on the load of the project.
    Hope i gave you little insight.
    If you any futher queries you can write back here or can talk to me.
    Regards
    Verea

  • 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