<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5579339541755643792</id><updated>2026-07-23T22:54:11.123-07:00</updated><category term="SAP MDM Tutorials"/><category term="SAP MDM"/><category term="SAP MDM ABAP API"/><category term="SAP MDM TRAINING"/><category term="SAP MDM API"/><category term="SAP MDM Java API"/><category term="SAP MDM Tutorial Sample Data.zip"/><category term="Master Data Management Webinar - Part 1"/><category term="Master Data Management Webinar - Part 2"/><category term="Master Data Management Webinar - Part 3"/><category term="Master Data Management Webinar - Part 4"/><category term="Master data consolidation"/><category term="Master Data Assessment"/><category term="SAP MDM 7.1 Console Reference Guide"/><category term="SAP MDM History"/><category term="SAP MDM Jobs"/><category term="SAP MDM Tables"/><category term="SAP MDM XI Integration"/><category term="SAPMDM"/><category term="sap mdm 7.1 tutorials"/><category term="sap mdm books"/><category term="sap mdm clix"/><category term="sap mdm console"/><category term="MDM Repository"/><category term="Questions on MDM Certification"/><category term="Rich product content"/><category term="SAP MDM Components and Modules"/><category term="SAP MDM Scenarios"/><category term="SAP MDM integration with R/3 system"/><category term="free sap mdm books"/><category term="sap mdm 5.5"/><category term="sap mdm training banglore"/><category term="sap mdm traininig in hyderabad"/><category term="MDM Workflow Launch Problem version SAP MDM 7.1.2.59"/><category term="SAP MD"/><category term="SAP MDM Enrichment Adapter - more than just enrichment"/><category term="sap master data management"/><category term="sap mdm ebooks"/><category term="sap mdm workflow"/><category term="Downloads for Master Data Management - SAP MDM"/><category term="MDM Import Manager capability"/><category term="SAP MDM PI Integration"/><category term="SAP MDM Publishing"/><category term="sap  mdm online training"/><category term="sap mdm 7.1"/><category term="sap mdm data manager"/><category term="sap mdm import manager"/><category term="sap mdm installtion"/><category term="sap mdm xi r3 integration"/><category term="Benefit Now From Support Package 4 for SAP NetWeaver MDM 7.1"/><category term="Can we use SAP MDM for Central master data management?"/><category term="Centralized management of master data"/><category term="Continuously Assuring and Controlling Master Data Quality (Part One)"/><category term="Data to Intelligence via MDM"/><category term="Integrated customer data"/><category term="Investing in SDN Blogging"/><category term="SAP JAVA API"/><category term="SAP MDM Modes"/><category term="SAP MDM ONLINE TRAINING"/><category term="SAP MDM Project- Key stakeholders"/><category term="SAP MDM Repository"/><category term="SAP Master Data Governance"/><category term="SAP Netweaver MDM Trends and changing role of MDM consultants Part1."/><category term="Sap mdm Message Flow From MDM to PI"/><category term="Step by Step SAP MDM Tutorials"/><category term="Successful Transition to IFRS on SAP"/><category term="Synchronization and distribution of master data"/><category term="Using SAP MDM for number generation"/><category term="What is Master Data?"/><category term="What is sap master data management ?"/><category term="What is sap mdm ? what is master data management"/><category term="privacy policy"/><category term="sap dm protecting and unprotecting a mdm records"/><category term="sap free mdm software"/><category term="sap md testing"/><category term="sap mdm 5.5 installtion"/><category term="sap mdm 7.0 tutorials."/><category term="sap mdm Message Flow From PI to MDM"/><category term="sap mdm administration guides"/><category term="sap mdm business intelligence solutions"/><category term="sap mdm excellence award 2009"/><category term="sap mdm free books"/><category term="sap mdm software"/><category term="sap mdm workflow tools and usage"/><category term="sap mobile application workflow"/><category term="sap netweaver mdm 7.1"/><category term="sap netweaver mdm 8.8"/><category term="sap4india interview questions"/><category term="what is sap mdm"/><title type='text'>SAP MDM Training-SAP MDM Tutorials,SAP MDM Jobs,SAP MDM Resumes-SAP MDM</title><subtitle type='html'>SAP MDM Training , SAP MDM Tutorials,SAP MDM Interview Questions,SAP MDM Certification Questions,SAP MDM Jobs,SAP MDM Resumes,SAP MDM Best Practice,SAP MDM Data Manger,SAP MDM Syndicator,SAP MDM Consolidation,SAP MDM Print Publisher,SAP MDM GDS,SAP MDM Repositoris, SAP Master Data Management Tutorialsand Many More...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>398</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-653451414381006353</id><published>2012-02-22T08:19:00.001-08:00</published><updated>2012-02-22T08:19:53.547-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP Master Data Governance"/><title type='text'>Enterprise Master Data Management - A cross-system master data process for supplier</title><content type='html'>&lt;h5 align=&quot;justify&quot;&gt;Applies to:&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;ERP 6 EhP5 – Master Data Governance for Supplier&lt;/p&gt;  &lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;This article provides implementation details for a simplified cross system Supplier On-boarding scenario leveraging SAP’s Enterprise Master Data Management portfolio consisting of SAP NetWeaver Master Data Management (available since 2004) and SAP Master Data Governance (currently in Ramp-Up). The overarching process is modeled using SAP NetWeaver Business Process Management.&lt;/p&gt;  &lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-Author(s):&amp;amp;nbsp;&quot;&gt;&lt;/a&gt;Author(s):&amp;#160; &lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;Lars Rueter&amp;#160;&amp;#160; &lt;br /&gt;&lt;b&gt;Company :&lt;/b&gt;&amp;#160;&amp;#160;&amp;#160; SAP AG, Germany&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;b&gt;Created on:&lt;/b&gt;&amp;#160;&amp;#160;&amp;#160; 4. March 2011    &lt;br /&gt;&lt;b&gt;Author(s) Bio&lt;/b&gt;    &lt;br /&gt;Mr. Rüter works at SAP in the area of SAP Master Data Governance. In the past 11 years at SAP he has held different positions in Asia Pacific and EMEA. He has extensive experience in SAP&#39;s Master Data Management product portfolio, Java Development and SAP NetWeaver Portal. Mr Rüter has been involved in a large number of SAP implementations worldwide.&lt;/p&gt;  &lt;h4 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-Crosssystemcreatesupplierprocess&quot;&gt;&lt;/a&gt;Cross system create supplier process&lt;/h4&gt;  &lt;p align=&quot;justify&quot;&gt;In our example we will build a cross-system supplier self-service registration and approval process. A supplier registers via a website and enters some initial data such as company name, street, city and postal code. These global attributes are stored in NetWeaver MDM for further distribution to Non-SAP systems. When the supplier is approved by the master data specialist a change request is automatically generated in SAP Master Data Governance. A workflow in SAP Master Data governance ensures that all ERP specific attributes are maintained. After final approval in SAP Master Data Governance the new supplier is activated and distributed. After activation a notification is send to the original requester.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig1_700x500.jpg&quot; /&gt;    &lt;br /&gt;&lt;b&gt;Figure 1: High-level process overview&lt;/b&gt;&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;In figure 2 below you see which systems are part of the process:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(A) SAP Master Data Governance – maintenance and distribution of ERP specific attributes &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(B) SAP NetWeaver MDM - maintenance and distribution of global attributes &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(C) NetWeaver CE – process runtime, process specific UIs, process worklist, web service consumption and provisioning &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(D) NetWeaver Developer Studio – process designtime &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig3_700x500.jpg&quot; /&gt;    &lt;br /&gt;&lt;b&gt;Figure 2: System Landscape&lt;/b&gt;&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;As mentioned above the process was implemented using NetWeaver BPM for the design and execution of the cross-system process. But we also leverage the out-the-box governance process in Master Data Governance for maintenance of ERP specific attributes.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig2_700x500.jpg&quot; /&gt;    &lt;br /&gt;&lt;b&gt;Figure 3: Technical process overview&lt;/b&gt;&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;The figure above provides a more technical process overview using the Business Process Modeling Notation (BPMN) notation from SAP NetWeaver BPM:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(1) The initial supplier registration web page triggers the start web-service of the BPM process &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(2) The global attributes from the registration web-page are used to create a new supplier record in SAP NetWeaver MDM &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(3) In this human interaction step a new supplier is being approved &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(4) BPM calls a SAP Master Data Governance Web Service to create a change request with the initial supplier data. This also triggers a SAP Business Workflow in SAP Master Data Governance. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(5) This step in BPM is called an intermediate message event. The process waits for a message to come in from Master Data Governance before the flow commences. Early in the SAP Business Workflow process we have inserted a task to call BPM. In this call we transmit the ID of the change request. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(6) BPM uses the change request ID from SAP Master Data Governance to send an e-mail to the original requestor. The e-mail contains a link to the SAP Business Workflow log. Using this link the original requestor can monitor the status of the change request in MDG. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(7) After sending an e-mail the BPM process waits again for a message from SAP Master Data Governance. This time SAP Master Data Governance sends a message at the end of the SAP Business Workflow process and after the Supplier has been finally approved and activated. The message includes the final ID of the Business Partner in the primary persistence. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;(8) The last step in the BPM process informs the original requestor that the new Business Partner has been created and activated. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-ImplementationSteps&quot;&gt;&lt;/a&gt;Implementation Steps&lt;/h4&gt;  &lt;p align=&quot;justify&quot;&gt;Integration between NetWeaver MDM and BPM has already been sufficiently documented on SDN. In this section the focus is on the integration between SAP Master Data Governance and NetWeaver BPM. Therefore we look specifically at the three integration points numbered step 4, step 5 and step 7 in figure 3 above. In step 4 we show how the inbound communication to SAP Master Data Governance was realized using a standard Web Service. The steps 5 and 7 are technically very similar in the sense that they both use a web service client proxy to transmit process status information from the SAP Business Workflow back to SAP NetWeaver BPM. &lt;/p&gt;  &lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-UsingtheinboundBusinessPartnerWebService&quot;&gt;&lt;/a&gt;Using the inbound Business Partner Web Service&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;The ESR Web Service used to create a Business Partner in our scenario is called &lt;em&gt;BusinessPartnerSUITEBulkReplicateRequest_In&lt;/em&gt;. In order to leverage this Web Service to automatically create a change request and key-mapping in SAP Master Data Governance , the method INBOUND_PROCESSING of BAdI MDG_SE_BP_BULK_REPLRQ_IN in Enhancement Sport MDG_SE_SPOT_BPBUPA has to be implemented. &lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;&lt;b&gt;IF_MDG_SE_BP_BULK_REPLRQ_IN~INBOUND_PROCESSING&lt;/b&gt;&lt;/p&gt;  &lt;div align=&quot;justify&quot;&gt;   &lt;pre&gt;METHOD if_mdg_se_bp_bulk_replrq_in~inbound_processing.&lt;br /&gt;&lt;br /&gt;  DATA ls_user_setting TYPE mdg_user_proxy_setting.&lt;br /&gt;  DATA lt_user_setting TYPE mdg_user_proxy_setting_t.&lt;br /&gt;  DATA lv_crtype TYPE mdg_sup_change_req.&lt;br /&gt;&lt;br /&gt;  if in-message_header-business_scope-id-content = &#39;BPM&#39;.&lt;br /&gt;&lt;br /&gt;    ls_user_setting-field_name = &#39;PROXY_PERSISTANCE&#39;.&lt;br /&gt;    ls_user_setting-field_value = &#39;1&#39;.&lt;br /&gt;    APPEND ls_user_setting TO lt_user_setting.&lt;br /&gt;    ls_user_setting-field_name = &#39;SUPPLIER_CHANGE&#39;.&lt;br /&gt;&lt;br /&gt;    SELECT SINGLE usmd_creq_type INTO lv_crtype FROM usmd1601 WHERE usmd_process = &#39;SUP1&#39;.&lt;br /&gt;*&lt;br /&gt;    ls_user_setting-field_value = lv_crtype.&lt;br /&gt;    APPEND ls_user_setting TO lt_user_setting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    CALL METHOD cl_mdg_bp_bupa_si_in=&amp;gt;if_mdg_upload_proxy~setup_for_file_upload&lt;br /&gt;      EXPORTING&lt;br /&gt;        iv_instance      = 1&lt;br /&gt;*       IO_UPLOAD_DIALOG =&lt;br /&gt;        it_user_setting  = lt_user_setting.&lt;br /&gt;&lt;br /&gt;  endif.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENDMETHOD.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;The code first checks the &lt;em&gt;scope-id&lt;/em&gt;-element in the message header. The SAP Master Data Governance load will only continue if the &lt;em&gt;scope-id&lt;/em&gt;-element is set to &lt;em&gt;BPM&lt;/em&gt;. The proxy implementation of the inbound service uses the context of the SAP Master Data Governance-file-upload-framework to determine how the incoming data has to be processed. We use the enhancement spot to set the file upload framework context in such a way that the incoming data is stored in the SAP Master Data Governance staging area and a change request of type SUPPL01 (Create Supplier) is being created. If key-mapping information was send as part of the Web Service call, the key-mapping for the new supplier will automatically be updated. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;The ABAP code in the Enhancement Sport looks for the first process type &lt;em&gt;SUP1&lt;/em&gt; in table USMD1601 and takes the change request type from that line. In our example LRDEMO will be selected as change request type when the web service is called (refer to table USMD1601 in figure 4 below). You may have to adapt the ABAP code to ensure your custom change request type (as defined in the following section _ Customizing the governance process_) is correctly assigned in the Enhancement Spot.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig4_orig.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 4: Table USMD1601&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;An example XML document to test the web service is attached to this wiki. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; align=&quot;absMiddle&quot; src=&quot;http://wiki.sdn.sap.com/wiki/images/icons/emoticons/information.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Test your scenario – Inbound Web Service&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;You should now test if the implementation is working. Using a Web Service test tool such as the SAP Web Service Navigator you can call the Web Service. After successful execution you should find a new change request in the POWER -List (Personal Object Work Entity Repository). You can access the POWER-List via the supplier role in SAP Master Data Governance.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-Customizingthegovernanceprocess&quot;&gt;&lt;/a&gt;Customizing the governance process&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;Your Web Service is working? Good! Your inbound connection to SAP Master Data Governance is now ready. Next we need to establish the outbound connection to NetWeaver BPM. In our example we extend the governance process for create supplier by two additional SAP Business Workflow tasks. Each of the two tasks sends a message to NetWeaver BPM.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;Since we do not want to modify the SAP delivered workflow template and change request type, we first create a copies.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;div align=&quot;justify&quot;&gt;Look up the id of the workflow template for &lt;em&gt;Create Supplier&lt;/em&gt;: Open MDG IMG activity &lt;em&gt;Create Change Request Type&lt;/em&gt; and find the row with change request type SUPPL01 (Create Supplier). In the same row you find the workflow template id for this change request type. &lt;/div&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;div align=&quot;justify&quot;&gt;Open the &lt;em&gt;Workflow Builder&lt;/em&gt; (transaction swdd) and create a copy of the SAP delivered workflow template for &lt;em&gt;Create Supplier&lt;/em&gt; (use the workflow template id from the previous step). Do not forget to save and activate you new workflow template. &lt;/div&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;div align=&quot;justify&quot;&gt;In MDG IMG activity &lt;em&gt;Create Change Request Type&lt;/em&gt; create a copy of the SAP delivered change request type SUPPL01 (Create Supplier). Assign the new workflow template id from the previous step to the new change request. In our example we have created a custom change request type LRDEMO which is linked to workflow template WS99900008 (Firgure 5 below). &lt;/div&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig5_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 5: IMG activity Create Change Request Type&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;div align=&quot;justify&quot;&gt;In MDG IMG activity &lt;em&gt;Define workflow step numbers&lt;/em&gt; create a copy of the rows from the SAP delivered workflow template for the create supplier workflow template. In your copied rows change the workflow template id to the id of your custom workflow template. &lt;/div&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig6_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 6: IMG activity Define Workflow Step Numbers&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;br /&gt;    &lt;div align=&quot;justify&quot;&gt;To ensure the receiver determination will work for your new change request type enhance the BRF+ table GET_AGENT. Start transaction BRF+ and search for &lt;em&gt;MDG&lt;/em&gt; as shown in figure 7 below. &lt;/div&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig8_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 7: BRF+ Search&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;Navigate to the GET_AGENT table as shown in figure 8. Create one row in the table for each workflow step. In column CREQUEST_TYPE enter the name of your custom change request type. In columns OTYPE and OBJID enter the object type (eg. user / organization) and corresponding value respectively.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig7_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 8: BRF+ table get_agent&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; align=&quot;absMiddle&quot; src=&quot;http://wiki.sdn.sap.com/wiki/images/icons/emoticons/information.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Test your scenario – custom change request type&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;This a good point to test your new change request type and workflow template. From the supplier role menu in SAP Master Data Governance choose the &lt;em&gt;Create Supplier&lt;/em&gt; menu item. You should see your custom change request type in the drop down box of the create supplier screen. Select your custom change request type. Enter the new business partner details and approve the individual workflow steps until activation. At the end of the workflow you should have created a new Business Partner in the primary persistence. You can check by doing a search for the business partner id. You may have to change the receiver determination in BRF+ to ensure you can approve all the workflow steps.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; align=&quot;absMiddle&quot; src=&quot;http://wiki.sdn.sap.com/wiki/images/icons/emoticons/information.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Test your scenario – inbound web service with custom change request type&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;If you have confirmed that your new change request type and workflow template are working, repeat the test using the &lt;em&gt;BusinessPartnerSUITEBulkReplicateRequest_In&lt;/em&gt; web service. Verify that after calling the web service a change request is created and the associated custom workflow is started. You can use transaction swud to find the workflow instance.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-ExchangingprocesscontextinformationbetweenSAPBusinessWorkflowandNetWeaverBPM&quot;&gt;&lt;/a&gt;Exchanging process context information between SAP Business Workflow and NetWeaver BPM&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;In our example we decided to implement the exchange of process context information between NetWeaver BPM and SAP Business Workflow using asynchronous web services. In particular for exchanging the &lt;em&gt;MDG change request id&lt;/em&gt; and &lt;em&gt;business partner id&lt;/em&gt;. In NetWeaver BPM two &lt;em&gt;Trigger Events&lt;/em&gt; were created (wsdl1, wsdl2) for this purpose. The consumption side is technically realized by generating an ABAP proxy for each service and calling this proxy from a task in the SAP Business Workflow. In step 5 (figure 3) we are using the Web Service call to transfer the &lt;em&gt;change request-id&lt;/em&gt; to the SAP NetWeaver BPM context. In step 7 (figure 3) we transfer the &lt;em&gt;business partner id&lt;/em&gt; after activation in the back end. After transferring the &lt;em&gt;change request id&lt;/em&gt; step 5 (figure 3) we can use the &lt;em&gt;change request id&lt;/em&gt; in NetWeaver BPM to generate an URL to the SAP Business Workflow log for this change request. We use this URL in our BPM process to send an e-mail notification to the original requestor with the link to the workflow log. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; align=&quot;absMiddle&quot; src=&quot;http://wiki.sdn.sap.com/wiki/images/icons/emoticons/information.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Generating a SAP Business Workflow log URL from a change request id in SAP MDG&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;tt&gt;https://&lt;/tt&gt; &lt;tt&gt;&amp;lt;HOSTNAME&amp;gt;&lt;/tt&gt; &lt;tt&gt;:&lt;/tt&gt; &lt;tt&gt;&amp;lt;PORT&amp;gt;&lt;/tt&gt; &lt;tt&gt;/sap/bc/webdynpro/sap/usmd_crequest_protocol2?SAP-CLIENT=&lt;/tt&gt; &lt;tt&gt;&amp;lt;CLIENT&amp;gt;&lt;/tt&gt; &lt;tt&gt;&amp;amp;SAP-LANGUAGE=EN&amp;amp;CREQUEST=&lt;/tt&gt; &lt;tt&gt;&amp;lt;insert the change request number here&amp;gt;&lt;/tt&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;For sending the &lt;em&gt;change request id&lt;/em&gt; to NetWeaver BPM a task was added after the &lt;em&gt;Set Initial Status of Change Request&lt;/em&gt; task at the beginning of the workflow (figure 9). In the object method section of the task maintenance screen (figure 10) a custom class and method is selected. The called method calls the web service proxy to transmit the &lt;em&gt;change request id&lt;/em&gt;. To be able to select your custom class from the workflow task it must implement the interfaces BI_OBJECT, BI_PRESISTENT and IF_WORKFLOW (figure 13). You can find more information regarding ABAP OO for workflow in the references section at the bottom of the article.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig9_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 9: Create business partner workflow with custom task&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig9a_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 10: Custom task maintenance&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;For sending the &lt;em&gt;change request id&lt;/em&gt; to NetWeaver BPM a task was added after the &lt;em&gt;Set Initial Status of Change Request&lt;/em&gt; task at the beginning of the workflow (figure 9). In the object method section of the task maintenance screen (figure 10) a custom class and method is selected. The called method calls the web service proxy to transmit the &lt;em&gt;change request id&lt;/em&gt;. To be able to select your custom class from the workflow task it must implement the interfaces BI_OBJECT, BI_PRESISTENT and IF_WORKFLOW (figure 13). You can find more information regarding ABAP OO for workflow in the references section at the bottom of the article.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;After successful activation of the Business Partner we can send the &lt;em&gt;Business Partner Id&lt;/em&gt; to NetWeaver BPM. A new task was created after the &lt;em&gt;Set Status of Change Request&lt;/em&gt; close to the end of the process (figure 11). In the task maintenance (figure 12) we assign a custom method that in turn uses the web service proxy to call NetWeaver BPM.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig10_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 11: Create business partner workflow with custom task&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig10a_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 12: Custom task maintenance&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251934038/Fig11_700x500.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Figure 13: Interface tab of the class that gets called from the custom workflow task&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; align=&quot;absMiddle&quot; src=&quot;http://wiki.sdn.sap.com/wiki/images/icons/emoticons/information.gif&quot; width=&quot;16&quot; height=&quot;16&quot; /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;b&gt;Test your scenario – complete process&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;You can now call the inbound SAP Master Data Governance web service. In turn a change request will be created. The &lt;em&gt;change request id&lt;/em&gt; will be transmitted to NetWeaver BPM. After approval and activation of the Business Partner the &lt;em&gt;Business Partner id&lt;/em&gt; is transmitted to NetWeaver BPM. You can use transaction sxi_monitor to view incoming and outgoing messages.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-NetWeaverBPMimplementationconsiderations&quot;&gt;&lt;/a&gt;NetWeaver BPM implementation considerations&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;While the focus of this article is not so much on NetWeaver BPM, but more on the interfaces of SAP Master Data Governance one important aspect with regard to intermediate message events in NetWeaver BPM should be mentioned here. In NetWeaver BPM it is necessary to define a message correlation between the incoming messages from SAP Master Data Governance and the process instance in NetWeaver BPM. Any unique id (eg. process id) can be used for this purpose. The unique id can be send as part of the &lt;em&gt;BusinessPartnerSUITEBulkReplicateRequest_In&lt;/em&gt; web service call, for example in the message header. Subsequent calls from SAP Master Data Governance to NetWeaver BPM can then transmit this unique id as part of the message payload. NetWeaver BPM uses the unique id to find the right process instance for the incoming message.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4 align=&quot;justify&quot;&gt;&lt;a name=&quot;EnterpriseMasterDataManagement-Across-systemmasterdataprocessforsupplier-Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;In this article it was shown how SAP Master Data Governance can be used as part of a NetWeaver BPM cross-system master data process. The article also highlights how the capabilities of the build in governance processes can be easily extended using SAP NetWeaver BPM. The combination of SAP Master Data Governance with SAP NetWeaver BPM and SAP NetWeaver Master Data Management addresses a wide range of scenarios in the area of Enterprise Master Data Management.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/653451414381006353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/653451414381006353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/653451414381006353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/653451414381006353'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/enterprise-master-data-management-cross.html' title='Enterprise Master Data Management - A cross-system master data process for supplier'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-6415629093271328261</id><published>2012-02-08T10:28:00.001-08:00</published><updated>2012-02-08T10:28:53.940-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>Search In a MDM Repository</title><content type='html'>&lt;p&gt;Following code snippet shows the step to search inside MDM repository. It searches the string inside field Vendors in the table Vendors under repository Vendor1 . &lt;/p&gt;  &lt;pre&gt;public class Connection {&amp;#160;&amp;#160;&amp;#160;&amp;#160; private SimpleConnection simpleConnection;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String serverName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String repositoryName=&amp;quot;Vendor1&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String dbServerName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private DBMSType dbmsType = DBMSType.MS_SQL;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RegionProperties dataRegion = new RegionProperties();&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String userSession;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String repositorySession;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String userName=&amp;quot;Admin&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String password=&amp;quot;mdm&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RepositorySchema schema;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RepositoryIdentifier repositoryID;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getConnection() {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (simpleConnection == null) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; simpleConnection =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SimpleConnectionFactory.getInstance(serverName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (Exception e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void closeConnection( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin closeConnection()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(simpleConnection!=null){&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DestroySessionCommand destroySessionCommand=new DestroySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destroySessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destroySessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; simpleConnection.close();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(Exception e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getAuthenticatedUserSession( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getAuthenticatedUserSession()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Create and authenticate a new user session to an MDM repository&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositoryID=new RepositoryIdentifier(repositoryName,dbServerName,dbmsType);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateUserSessionCommand createUserSessionCommand=new CreateUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.setRepositoryIdentifier(repositoryID);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.setDataRegion(dataRegion);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=createUserSessionCommand.getUserSession();// Get the session identifier&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* Authenticate User Session */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TrustedUserSessionCommand trustedUserSessionCommand=new TrustedUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=trustedUserSessionCommand.getSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e1) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* Trusted Connection is not accepted */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateUserSessionCommand authenticateUserSessionCommand=new AuthenticateUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setUserPassword(password);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetUnicodeNormalizationCommand unicodeNormalizationCommand=new SetUnicodeNormalizationCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.setNormalizationType(SetUnicodeNormalizationCommand.NORMALIZATION_COMPOSED);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch (CommandException e2) {&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void setRegionProperties( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin setRegionProperties()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setRegionCode(&amp;quot;engUSA&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Set the locale on data region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setLocale(new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;));&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Set the name of data region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setName(&amp;quot;US&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void setRepositoryInfo( java.lang.String repositoryName, java.lang.String userID, java.lang.String password )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin setRepositoryInfo()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.repositoryName=repositoryName;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.userName=userID;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.password=password;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getAuthenticatedRepositorySession( )&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getAuthenticatedRepositorySession()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateRepositorySessionCommand repositorySessionCommand=new CreateRepositorySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySessionCommand.setRepositoryIdentifier(repositoryID);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySession=repositorySessionCommand.getRepositorySession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateRepositorySessionCommand authenticatedRepositorySession=new AuthenticateRepositorySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setSession(repositorySession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setUserPassword(password);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetRepositorySchemaCommand repositroySchemaCommand=new GetRepositorySchemaCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositroySchemaCommand.setSession(repositorySession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositroySchemaCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; schema=repositroySchemaCommand.getRepositorySchema();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(CommandException e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(Exception e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public com.sap.mdm.ids.FieldId getFieldID( java.lang.String tableName, java.lang.String fieldCode )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getFieldID()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return schema.getField(tableName,fieldCode).getId();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public com.sap.mdm.ids.TableId getTableID( java.lang.String tableName )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getTableID()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return schema.getTable(tableName).getId();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void searchRepository() {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin searchRepository()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ResultDefinition resultDef =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new ResultDefinition(schema.getTable(&amp;quot;Vendors&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; resultDef.addSelectField(schema.getField(&amp;quot;Vendors&amp;quot;, &amp;quot;Name&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //resultDef.addSelectField(new FieldId(15));&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FieldSearchDimension searchDimension =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new FieldSearchDimension(&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; schema.getField(&amp;quot;Vendors&amp;quot;, &amp;quot;Name&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TextSearchConstraint constraint =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new TextSearchConstraint(&amp;quot;ABC&amp;quot;, TextSearchConstraint.CONTAINS);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Search search = new Search(schema.getTable(&amp;quot;Vendors&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //search.addSearchItem(searchDimension,constraint);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RetrieveLimitedRecordsCommand limitedRecordsCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RetrieveLimitedRecordsCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setSearch(search);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setResultDefinition(resultDef);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //return limitedRecordsCommand.getRecords();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RecordResultSet recordSet = limitedRecordsCommand.getRecords();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String recordAsString = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String fieldValue = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; recordSet.getCount(); i++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordAsString = &amp;quot;&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FieldId[] returnedFields = recordSet.getRecord(i).getFields();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int j = 0; j &amp;lt; returnedFields.length; j++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (recordSet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .getRecord(i)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .getFieldValue(returnedFields[j])&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .isNull()) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fieldValue = &amp;quot; |&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fieldValue =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordSet.getRecord(i).getFieldValue(returnedFields[j])&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot;|&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordAsString += fieldValue;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(recordAsString);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main (String[] args)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Connection test=new Connection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getConnection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.setRegionProperties();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.setRepositoryInfo(&amp;quot;Vendor1&amp;quot;,&amp;quot;Admin&amp;quot;,&amp;quot;mdm&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getAuthenticatedUserSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getAuthenticatedRepositorySession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.searchRepository();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.closeconnection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/6415629093271328261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/6415629093271328261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6415629093271328261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6415629093271328261'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/search-in-mdm-repository_08.html' title='Search In a MDM Repository'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-7736921722997669639</id><published>2012-02-08T10:25:00.003-08:00</published><updated>2012-02-08T10:25:56.535-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>Code to Get List of Validation in a Table</title><content type='html'>&lt;p&gt;Following code snippet finds out the list of Validation from a Table. &lt;/p&gt;  &lt;pre&gt;package com.sap.infosys.mdm.validationcheck;&lt;br /&gt;&lt;br /&gt;import com.sap.mdm.commands.AuthenticateUserSessionCommand;&lt;br /&gt;import com.sap.mdm.commands.CommandException;&lt;br /&gt;import com.sap.mdm.commands.CreateUserSessionCommand;&lt;br /&gt;import com.sap.mdm.commands.DestroySessionCommand;&lt;br /&gt;import com.sap.mdm.commands.GetRepositoryRegionListCommand;&lt;br /&gt;import com.sap.mdm.data.RegionProperties;&lt;br /&gt;import com.sap.mdm.ids.TableId;&lt;br /&gt;import com.sap.mdm.net.ConnectionException;&lt;br /&gt;import com.sap.mdm.net.ConnectionPool;&lt;br /&gt;import com.sap.mdm.net.ConnectionPoolFactory;&lt;br /&gt;import com.sap.mdm.server.DBMSType;&lt;br /&gt;import com.sap.mdm.server.RepositoryIdentifier;&lt;br /&gt;import com.sap.mdm.validation.ValidationProperties;&lt;br /&gt;import com.sap.mdm.validation.ValidationPropertiesResult;&lt;br /&gt;import com.sap.mdm.validation.commands.RetrieveValidationsCommand;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class GetListOfValidations {&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main(String[] args) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // create connection pool to a MDM server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String serverName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConnectionPool connections = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; connections = ConnectionPoolFactory.getInstance(serverName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (ConnectionException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // specify the repository to use&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // alternatively, a repository identifier can be obtain from the GetMountedRepositoryListCommand&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String repositoryName = &amp;quot;Vendor1&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String dbmsName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RepositoryIdentifier reposId =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RepositoryIdentifier(repositoryName, dbmsName, DBMSType.MS_SQL);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // get list of available regions for the repository&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetRepositoryRegionListCommand regionListCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new GetRepositoryRegionListCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionListCommand.setRepositoryIdentifier(reposId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionListCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RegionProperties[] regions = regionListCommand.getRegions();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // create a user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateUserSessionCommand sessionCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new CreateUserSessionCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.setRepositoryIdentifier(reposId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.setDataRegion(regions[0]); // use the first region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String sessionId = sessionCommand.getUserSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // authenticate the user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String userName = &amp;quot;Admin&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String userPassword = &amp;quot;mdm&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateUserSessionCommand authCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new AuthenticateUserSessionCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setSession(sessionId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setUserPassword(userPassword);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // the main table, hard-coded&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TableId mainTableId = new TableId(1);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Get the list of validations&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RetrieveValidationsCommand objRtvVldCmd =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RetrieveValidationsCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // set the user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.setSession(sessionId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // get validation for the following tables.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.setTableId(mainTableId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ValidationPropertiesResult objVldPropRslt =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.getValidationPropertiesResult();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ValidationProperties[] validations = objVldPropRslt.getValidations();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //disply --&amp;gt; Validation ID | error/warning message | Validation Name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; validations.length; i++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; validations[i].getId()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot; | &amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + validations[i].getMessage()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot; | &amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + validations[i].getName());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/7736921722997669639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/7736921722997669639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7736921722997669639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7736921722997669639'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/code-to-get-list-of-validation-in-table_08.html' title='Code to Get List of Validation in a Table'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-47225180059994673</id><published>2012-02-08T10:25:00.001-08:00</published><updated>2012-02-08T10:25:15.316-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>A Class worth exploring for handling special characters in MDM</title><content type='html'>&lt;p&gt;While development was going at full pace ,a small hurdle in form of special characters turned out to be a real speed breaker.The situtaion was that in MDM repository some field say Name contained&amp;#160; special chracters(Õ , û&amp;#160; ,Û)&amp;#160; in&amp;#160; other language like Hungarian,German ,French etc.Problem was I&amp;#160; logged into the Repository with english language with MDM JAVA API and&amp;#160; API was retrieving undesired value(O??,u??,U??) from the data manager .Although the Name string seems absolutely fine in the Data Manager.In short -value in MDM Data Manager for field name was Õ û&amp;#160; Û and output from API was O??u??U??&lt;/p&gt;  &lt;p&gt;To my rescue came this class which is worth exploring when you have a situation like above&lt;/p&gt;  &lt;p&gt; Class SetUnicodeNormalizationCommand&lt;/p&gt;  &lt;p&gt; After you establish your connection to the server through API and Authenticate User Session ,you need to work with this class.&lt;/p&gt;  &lt;p&gt;Connection to server would return an object of type ConnectionPool (call it connection)and UserSession authentication would return a string (call it session).Now write this piece of code&lt;/p&gt;  &lt;p&gt;SetUnicodeNormalizationCommand cmd = new SetUnicodeNormalizationCommand(connection);&lt;/p&gt;  &lt;p&gt;cmd.setSession(session);&lt;/p&gt;  &lt;p&gt;cmd.setNormalizationType(SetUnicodeNormalizationCommand.NORMALIZATION_COMPOSED);&lt;/p&gt;  &lt;p&gt;cmd.execute();&lt;/p&gt;  &lt;p&gt;This class will keep the special characters retrieval intact. &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/47225180059994673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/47225180059994673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/47225180059994673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/47225180059994673'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/class-worth-exploring-for-handling_08.html' title='A Class worth exploring for handling special characters in MDM'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-2108498057912486654</id><published>2012-02-08T10:12:00.001-08:00</published><updated>2012-02-08T10:12:29.942-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM Java API"/><title type='text'>SRM-MDM Catalog version compatibility</title><content type='html'>&lt;h4&gt;Purpose&lt;/h4&gt;  &lt;p&gt;The main objective of this page is to explain the compatibility between &lt;b&gt;SRM-MDM Catalog&lt;/b&gt;, &lt;b&gt;Java API&lt;/b&gt; and &lt;b&gt;MDM Server&lt;/b&gt;. &lt;/p&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-Overview&quot;&gt;&lt;/a&gt;Overview&lt;/h4&gt;  &lt;p&gt;The application &lt;b&gt;SRM-MDM Catalog&lt;/b&gt; is dependent on other two main applications or components, which are &lt;b&gt;MDM Server&lt;/b&gt; and &lt;b&gt;MDM Java API&lt;/b&gt;. The &lt;b&gt;compatibility&lt;/b&gt; of these applications is informed in the &lt;b&gt;SRM-MDM Release Notes&lt;/b&gt; available in &lt;b&gt;SAP Service Marketplace (Software Download Center)&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://service.sap.com/swdc&quot;&gt;https://service.sap.com/swdc&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This document will present how to &lt;b&gt;check&lt;/b&gt; the &lt;b&gt;versions&lt;/b&gt; of each of these applications and it will also explain how to &lt;b&gt;correct&lt;/b&gt; the compatibility in case there is a version mismatch. &lt;/p&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-Identifyingtheversionsofyourapplications&quot;&gt;&lt;/a&gt;Identifying the versions of your applications&lt;/h4&gt;  &lt;p&gt;You can get this information by accessing the &lt;b&gt;J2EE component info&lt;/b&gt; page (http://&amp;lt;J2EE_SERVER&amp;gt;:&amp;lt;PORT&amp;gt;/sap/monitoring/ComponentInfo).&lt;/p&gt;  &lt;p&gt;The &lt;b&gt;Component name&lt;/b&gt; of SRM-MDM is &lt;b&gt;SRM_MDM_CAT&lt;/b&gt; and the &lt;b&gt;Component name&lt;/b&gt; of MDM Java API is &lt;b&gt;MDM_JAVA_API&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;In order to get the information of your &lt;b&gt;MDM Server&lt;/b&gt;, please follow the steps below:&lt;/p&gt;  &lt;p&gt;1) Open the &lt;b&gt;SRM MDM utilities&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;http://&amp;lt;J2EE_SERVER&amp;gt;:&amp;lt;PORT&amp;gt;/webdynpro/dispatcher/sap.com/tc~mdm~srmcat~uiutil/Utilities&lt;/p&gt;  &lt;p&gt;2) Choose &amp;quot;&lt;b&gt;Connection Test&lt;/b&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;3) Provide the host name or IP of your MDM server (MDM server)&lt;/p&gt;  &lt;p&gt;4) Click on &amp;quot;&lt;b&gt;Start Testing&lt;/b&gt;&amp;quot; button&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/257754671/conn+test.JPG?version=1&amp;amp;modificationDate=1321270683339&quot; /&gt;&lt;/p&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-Checkingthecompatibilityofyourapplications&quot;&gt;&lt;/a&gt;Checking the compatibility of your applications&lt;/h4&gt;  &lt;p&gt;Find the &lt;b&gt;latest release note&lt;/b&gt; according to your &lt;b&gt;SRM-MDM Support Package (SP)&lt;/b&gt; and open this note.&lt;/p&gt;  &lt;p&gt;You will find in the note the &lt;b&gt;SRM-MDM Catalog SP&lt;/b&gt; and Patch as well as the &lt;b&gt;MDM Server SP&lt;/b&gt;. The version of &lt;b&gt;MDM Java API&lt;/b&gt; should be the same as &lt;b&gt;MDM Server&lt;/b&gt; since they are distributed together, as part of the same release.&lt;/p&gt;  &lt;p&gt;See the image below for more information:&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/257754671/att1.png?version=1&amp;amp;modificationDate=1320856102209&quot; /&gt;&lt;/p&gt;  &lt;p&gt;If the version of these three components is not compatible then it is probable that you will face issues during the usage of &lt;b&gt;SRM-MDM Catalog&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Example of &lt;b&gt;compatible versions&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;SAP Note &lt;a href=&quot;https://service.sap.com/sap/support/notes/1505367&quot;&gt;1505367&lt;/a&gt; mention SRM-MDM Catalog 3.0 SP08 Patch 01 is compatible with MDM Server 7.1 SP05.&lt;/p&gt;  &lt;p&gt;Your &lt;b&gt;component versions&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;SRM_MDM_CAT:3.0 SP8 (1000.3.0.8.123.123456789)&lt;/p&gt;  &lt;p&gt;MDM_JAVA_API: 710 SP5 (1000.710.0.5.123.123456789)&lt;/p&gt;  &lt;p&gt;MDM Server: MDM Server 7.1 SP5 (Check)&lt;/p&gt;  &lt;p&gt;Example of &lt;b&gt;incompatible versions&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;SAP Note &lt;a href=&quot;https://service.sap.com/sap/support/notes/1642907&quot;&gt;1642907&lt;/a&gt; mention SRM-MDM Catalog 3.0 SP11 Patch 01 is compatible with MDM Server 7.1 SP07.&lt;/p&gt;  &lt;p&gt;Your &lt;b&gt;component versions&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;SRM_MDM_CAT:3.0 SP11 (1000.3.0.8.123.123456789)&lt;/p&gt;  &lt;p&gt;MDM_JAVA_API: 710 SP4 (1000.710.0.4.123.123456789)&lt;/p&gt;  &lt;p&gt;MDM Server: MDM Server 7.1 SP4 (Check)&lt;/p&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-Solvingtheincompatibilityofyourapplications&quot;&gt;&lt;/a&gt;Solving the incompatibility of your applications&lt;/h4&gt;  &lt;p&gt;In case you have a &lt;b&gt;version mismatch&lt;/b&gt; you should update your applications according to &lt;b&gt;the latest release note&lt;/b&gt; for &lt;b&gt;SRM-MDM&lt;/b&gt;. In case you don’t want to update your &lt;b&gt;MDM Server&lt;/b&gt; than use the latest release note according to your SRM-MDM SP. Note that &lt;b&gt;some errors&lt;/b&gt; are corrected in &lt;b&gt;higher releases&lt;/b&gt; so it is not guaranteed that your issue will be solved by updating to the latest release of your SP.&amp;#160; &lt;/p&gt;  &lt;p&gt;In order to update your application components go to Software Download Center, click on &amp;quot;&lt;b&gt;Support Packages and Patches&lt;/b&gt;&amp;quot; (top menu) and then click on &amp;quot;&lt;b&gt;Search for Support Packages and Patches&lt;/b&gt;&amp;quot; (left menu). Search for &amp;quot;&lt;b&gt;SAP MDM CATALOG&lt;/b&gt;&amp;quot; and click on oyr SRM-MDM version. For more information please check note &lt;a href=&quot;https://service.sap.com/sap/support/notes/1476694&quot;&gt;1476694&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-RelatedContent&quot;&gt;&lt;/a&gt;Related Content&lt;/h3&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-RelatedDocuments&quot;&gt;&lt;/a&gt;Related Documents&lt;/h4&gt;  &lt;h4&gt;&lt;a name=&quot;SRM-MDMCatalogversioncompatibility-RelatedNotes&quot;&gt;&lt;/a&gt;Related Notes&lt;/h4&gt;  &lt;p&gt;&lt;b&gt;SAP Note&lt;/b&gt;: &lt;a href=&quot;https://service.sap.com/sap/support/notes/1650896&quot;&gt;1650896&lt;/a&gt; - &lt;b&gt;SRM-MDM “Login Failed” error&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SAP Note&lt;/b&gt;: &lt;a href=&quot;https://service.sap.com/sap/support/notes/1476694&quot;&gt;1476694&lt;/a&gt; - &lt;b&gt;Change in SRM-MDM Catalog 3.0 components in SMP&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SAP Note&lt;/b&gt;: &lt;a href=&quot;https://service.sap.com/sap/support/notes/1663002&quot;&gt;1663002&lt;/a&gt; - &lt;b&gt;SRM-MDM Catalog &amp;quot;Repository Locked&amp;quot;&lt;/b&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/2108498057912486654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/2108498057912486654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2108498057912486654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2108498057912486654'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/srm-mdm-catalog-version-compatibility.html' title='SRM-MDM Catalog version compatibility'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-9148208183458659388</id><published>2012-02-08T10:11:00.003-08:00</published><updated>2012-02-08T10:11:35.084-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM Java API"/><title type='text'>Code to Get List of Validation in a Table</title><content type='html'>&lt;p&gt;Following code snippet finds out the list of Validation from a Table. &lt;/p&gt;  &lt;pre&gt;package com.sap.infosys.mdm.validationcheck;&lt;br /&gt;&lt;br /&gt;import com.sap.mdm.commands.AuthenticateUserSessionCommand;&lt;br /&gt;import com.sap.mdm.commands.CommandException;&lt;br /&gt;import com.sap.mdm.commands.CreateUserSessionCommand;&lt;br /&gt;import com.sap.mdm.commands.DestroySessionCommand;&lt;br /&gt;import com.sap.mdm.commands.GetRepositoryRegionListCommand;&lt;br /&gt;import com.sap.mdm.data.RegionProperties;&lt;br /&gt;import com.sap.mdm.ids.TableId;&lt;br /&gt;import com.sap.mdm.net.ConnectionException;&lt;br /&gt;import com.sap.mdm.net.ConnectionPool;&lt;br /&gt;import com.sap.mdm.net.ConnectionPoolFactory;&lt;br /&gt;import com.sap.mdm.server.DBMSType;&lt;br /&gt;import com.sap.mdm.server.RepositoryIdentifier;&lt;br /&gt;import com.sap.mdm.validation.ValidationProperties;&lt;br /&gt;import com.sap.mdm.validation.ValidationPropertiesResult;&lt;br /&gt;import com.sap.mdm.validation.commands.RetrieveValidationsCommand;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class GetListOfValidations {&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main(String[] args) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // create connection pool to a MDM server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String serverName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConnectionPool connections = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; connections = ConnectionPoolFactory.getInstance(serverName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (ConnectionException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // specify the repository to use&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // alternatively, a repository identifier can be obtain from the GetMountedRepositoryListCommand&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String repositoryName = &amp;quot;Vendor1&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String dbmsName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RepositoryIdentifier reposId =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RepositoryIdentifier(repositoryName, dbmsName, DBMSType.MS_SQL);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // get list of available regions for the repository&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetRepositoryRegionListCommand regionListCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new GetRepositoryRegionListCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionListCommand.setRepositoryIdentifier(reposId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionListCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RegionProperties[] regions = regionListCommand.getRegions();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // create a user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateUserSessionCommand sessionCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new CreateUserSessionCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.setRepositoryIdentifier(reposId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.setDataRegion(regions[0]); // use the first region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String sessionId = sessionCommand.getUserSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // authenticate the user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String userName = &amp;quot;Admin&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String userPassword = &amp;quot;mdm&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateUserSessionCommand authCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new AuthenticateUserSessionCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setSession(sessionId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.setUserPassword(userPassword);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // the main table, hard-coded&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TableId mainTableId = new TableId(1);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Get the list of validations&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RetrieveValidationsCommand objRtvVldCmd =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RetrieveValidationsCommand(connections);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // set the user session&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.setSession(sessionId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // get validation for the following tables.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.setTableId(mainTableId);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.printStackTrace();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ValidationPropertiesResult objVldPropRslt =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objRtvVldCmd.getValidationPropertiesResult();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ValidationProperties[] validations = objVldPropRslt.getValidations();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //disply --&amp;gt; Validation ID | error/warning message | Validation Name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; validations.length; i++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; validations[i].getId()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot; | &amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + validations[i].getMessage()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot; | &amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + validations[i].getName());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&lt;br /&gt;}&amp;#160; &lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/9148208183458659388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/9148208183458659388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/9148208183458659388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/9148208183458659388'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/code-to-get-list-of-validation-in-table.html' title='Code to Get List of Validation in a Table'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-665276946604843493</id><published>2012-02-08T10:11:00.001-08:00</published><updated>2012-02-08T10:11:03.261-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM Java API"/><title type='text'>CreateRecordCommand Vs CreateRecordsCommand</title><content type='html'>&lt;p&gt;Given the shortcomings of Import Manager of rejecting a complete input excel spreadsheet, in case of even a single spurious record and lack of comprehensive error reporting to track reasons for file rejection or all errors. All these and more combined together, gave me a reason to develop a prototype, which overcomes shortcomings of using Import Manager to import data into MDM repository using Excel spreadsheets&lt;/p&gt;  &lt;p&gt;In this blog I will discuss two important API classes, CreateRecordCommand and CreateRecordsCommand , and in following blogs will detail the complete design using which you can have your own customised Import Manager, capable of Importing data from excel spreadsheet into MDM repository with comprehensive error reporting.&lt;/p&gt;  &lt;p&gt;Browsing through the MDM Java API documentation I found two classes for creating records in the repository:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;CreateRecordCommand &amp;amp; &lt;/li&gt;    &lt;li&gt;CreateRecordsCommand &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; While the first command is used to create individual records in the repository, the following CreateRecordsCommand is used for mass record creation.&lt;/p&gt;  &lt;p&gt;It is a single Record Object which is a required parameter for CreateRecordCommand, we need to set an array of Record objects (records for mass creation) for CreateRecordsCommand. &lt;/p&gt;  &lt;p&gt;Using CreateRecordCommand you can get &#39;recordId&#39; of the newly created record but using CreateRecordsCommand the API provides us various methods to retrieve&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;FailedRecordMessages &lt;/li&gt;    &lt;li&gt;Succeeded Record recordIds &lt;/li&gt;    &lt;li&gt;Failed and Succeeded Record Arrays, containing corresponding indexes in the records array initially passed into CreateRecordsCommand &lt;/li&gt;    &lt;li&gt;Array of all records passed into CreateRecordsCommand &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Please use the link of MDM Java API javadoc link &lt;a href=&quot;http://help.sap.com/javadocs/MDM/SP06P2/index.html&quot;&gt;http://help.sap.com/javadocs/MDM/SP06P2/index.html&lt;/a&gt; to find out specific methods for CreateRecordsCommand, which can be used to retrieve specific information in order to generate better reports with exception/error messages.&lt;/p&gt;  &lt;p&gt;Signing off for now....... till my next page in this series.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/665276946604843493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/665276946604843493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/665276946604843493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/665276946604843493'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/createrecordcommand-vs.html' title='CreateRecordCommand Vs CreateRecordsCommand'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-7299173625666011373</id><published>2012-02-08T10:07:00.001-08:00</published><updated>2012-02-08T10:07:58.130-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM Java API"/><title type='text'>Search In a MDM Repository</title><content type='html'>&lt;p&gt;Following code snippet shows the step to search inside MDM repository. It searches the string inside field Vendors in the table Vendors under repository Vendor1 . &lt;/p&gt;  &lt;pre&gt;public class Connection {&amp;#160;&amp;#160;&amp;#160;&amp;#160; private SimpleConnection simpleConnection;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String serverName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String repositoryName=&amp;quot;Vendor1&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String dbServerName = &amp;quot; &amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private DBMSType dbmsType = DBMSType.MS_SQL;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RegionProperties dataRegion = new RegionProperties();&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String userSession;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String repositorySession;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String userName=&amp;quot;Admin&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private String password=&amp;quot;mdm&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RepositorySchema schema;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private RepositoryIdentifier repositoryID;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getConnection() {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (simpleConnection == null) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; simpleConnection =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SimpleConnectionFactory.getInstance(serverName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (Exception e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void closeConnection( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin closeConnection()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(simpleConnection!=null){&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DestroySessionCommand destroySessionCommand=new DestroySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destroySessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destroySessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; simpleConnection.close();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(Exception e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getAuthenticatedUserSession( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getAuthenticatedUserSession()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /*&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Create and authenticate a new user session to an MDM repository&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositoryID=new RepositoryIdentifier(repositoryName,dbServerName,dbmsType);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateUserSessionCommand createUserSessionCommand=new CreateUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.setRepositoryIdentifier(repositoryID);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.setDataRegion(dataRegion);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; createUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=createUserSessionCommand.getUserSession();// Get the session identifier&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* Authenticate User Session */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TrustedUserSessionCommand trustedUserSessionCommand=new TrustedUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustedUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; userSession=trustedUserSessionCommand.getSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e1) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* Trusted Connection is not accepted */&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateUserSessionCommand authenticateUserSessionCommand=new AuthenticateUserSessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.setUserPassword(password);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticateUserSessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetUnicodeNormalizationCommand unicodeNormalizationCommand=new SetUnicodeNormalizationCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.setNormalizationType(SetUnicodeNormalizationCommand.NORMALIZATION_COMPOSED);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; unicodeNormalizationCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch (CommandException e2) {&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void setRegionProperties( )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin setRegionProperties()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setRegionCode(&amp;quot;engUSA&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Set the locale on data region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setLocale(new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;));&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Set the name of data region&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataRegion.setName(&amp;quot;US&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void setRepositoryInfo( java.lang.String repositoryName, java.lang.String userID, java.lang.String password )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin setRepositoryInfo()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.repositoryName=repositoryName;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.userName=userID;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.password=password;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void getAuthenticatedRepositorySession( )&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getAuthenticatedRepositorySession()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateRepositorySessionCommand repositorySessionCommand=new CreateRepositorySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySessionCommand.setRepositoryIdentifier(repositoryID);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySessionCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositorySession=repositorySessionCommand.getRepositorySession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AuthenticateRepositorySessionCommand authenticatedRepositorySession=new AuthenticateRepositorySessionCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setSession(repositorySession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setUserName(userName);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.setUserPassword(password);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticatedRepositorySession.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetRepositorySchemaCommand repositroySchemaCommand=new GetRepositorySchemaCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositroySchemaCommand.setSession(repositorySession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; repositroySchemaCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; schema=repositroySchemaCommand.getRepositorySchema();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(CommandException e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }catch(Exception e){&lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public com.sap.mdm.ids.FieldId getFieldID( java.lang.String tableName, java.lang.String fieldCode )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getFieldID()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return schema.getField(tableName,fieldCode).getId();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public com.sap.mdm.ids.TableId getTableID( java.lang.String tableName )&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin getTableID()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return schema.getTable(tableName).getId();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void searchRepository() {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //@@begin searchRepository()&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ResultDefinition resultDef =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new ResultDefinition(schema.getTable(&amp;quot;Vendors&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; resultDef.addSelectField(schema.getField(&amp;quot;Vendors&amp;quot;, &amp;quot;Name&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //resultDef.addSelectField(new FieldId(15));&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FieldSearchDimension searchDimension =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new FieldSearchDimension(&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; schema.getField(&amp;quot;Vendors&amp;quot;, &amp;quot;Name&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TextSearchConstraint constraint =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new TextSearchConstraint(&amp;quot;ABC&amp;quot;, TextSearchConstraint.CONTAINS);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Search search = new Search(schema.getTable(&amp;quot;Vendors&amp;quot;).getId());&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //search.addSearchItem(searchDimension,constraint);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RetrieveLimitedRecordsCommand limitedRecordsCommand =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new RetrieveLimitedRecordsCommand(simpleConnection);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setSearch(search);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setSession(userSession);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.setResultDefinition(resultDef);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; limitedRecordsCommand.execute();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } catch (CommandException e) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //return limitedRecordsCommand.getRecords();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RecordResultSet recordSet = limitedRecordsCommand.getRecords();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String recordAsString = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String fieldValue = null;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; recordSet.getCount(); i++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordAsString = &amp;quot;&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FieldId[] returnedFields = recordSet.getRecord(i).getFields();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int j = 0; j &amp;lt; returnedFields.length; j++) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (recordSet&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .getRecord(i)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .getFieldValue(returnedFields[j])&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .isNull()) {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fieldValue = &amp;quot; |&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fieldValue =&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordSet.getRecord(i).getFieldValue(returnedFields[j])&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + &amp;quot;|&amp;quot;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; recordAsString += fieldValue;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(recordAsString);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main (String[] args)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Connection test=new Connection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getConnection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.setRegionProperties();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.setRepositoryInfo(&amp;quot;Vendor1&amp;quot;,&amp;quot;Admin&amp;quot;,&amp;quot;mdm&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getAuthenticatedUserSession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.getAuthenticatedRepositorySession();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.searchRepository();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.closeconnection();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/7299173625666011373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/7299173625666011373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7299173625666011373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7299173625666011373'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/search-in-mdm-repository.html' title='Search In a MDM Repository'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-7440766015613863927</id><published>2012-02-08T10:06:00.001-08:00</published><updated>2012-02-08T10:07:20.954-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP JAVA API"/><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>A Class worth exploring for handling special characters in MDM</title><content type='html'>&lt;p align=&quot;justify&quot;&gt;While development was going at full pace ,a small hurdle in form of special characters turned out to be a real speed breaker.The situtaion was that in MDM repository some field say Name contained&amp;#160; special chracters(Õ , û&amp;#160; ,Û)&amp;#160; in&amp;#160; other language like Hungarian,German ,French etc.Problem was I&amp;#160; logged into the Repository with english language with MDM JAVA API and&amp;#160; API was retrieving undesired value(O??,u??,U??) from the data manager .Although the Name string seems absolutely fine in the Data Manager.In short -value in MDM Data Manager for field name was Õ û&amp;#160; Û and output from API was O??u??U??&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;To my rescue came this class which is worth exploring when you have a situation like above&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt; Class SetUnicodeNormalizationCommand&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt; After you establish your connection to the server through API and Authenticate User Session ,you need to work with this class.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Connection to server would return an object of type ConnectionPool (call it connection)and UserSession authentication would return a string (call it session).Now write this piece of code&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;SetUnicodeNormalizationCommand cmd = new SetUnicodeNormalizationCommand(connection);&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;cmd.setSession(session);&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;cmd.setNormalizationType(SetUnicodeNormalizationCommand.NORMALIZATION_COMPOSED);&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;cmd.execute();&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;This class will keep the special characters retrieval intact. &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/7440766015613863927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/7440766015613863927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7440766015613863927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7440766015613863927'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/class-worth-exploring-for-handling.html' title='A Class worth exploring for handling special characters in MDM'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-4952209114833944415</id><published>2012-02-08T09:54:00.001-08:00</published><updated>2012-02-08T09:54:32.063-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>How do you implement a MDM Connection Help Class?</title><content type='html'>&lt;ul&gt;   &lt;li&gt;In the exmaple Master Data Data Read class we used another class, ZCL_MDM_CONN_POOL_ROOT, to establish the connection to MDM.&amp;#160; This is just a reusable utility class that caches the API connection and contains logic to map the SAP logon langauge to the MDM Language. &lt;/li&gt;    &lt;li&gt;The complete source code of this class can be &lt;a href=&quot;http://abap-sdn-examples-tpj.googlecode.com/files/CLAS_ZCL_MDM_CONN_POOL_ROOT.slnk&quot;&gt;downloaded here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Class Properties:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38676/MDM_Pool_Properties.jpg?version=1&amp;amp;modificationDate=1184696888603&quot; /&gt;&lt;/li&gt;    &lt;li&gt;Class Private Types:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38676/MDM_Pool_Private_Types.jpg?version=1&amp;amp;modificationDate=1184696888614&quot; /&gt;&lt;/li&gt;    &lt;li&gt;Class Attributes:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38676/MDM_Pool_Attributes.jpg?version=1&amp;amp;modificationDate=1184696865663&quot; /&gt;&lt;/li&gt;    &lt;li&gt;Class Methods:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38676/MDM_Pool_Methods.jpg?version=1&amp;amp;modificationDate=1184696888623&quot; /&gt;&lt;/li&gt;    &lt;li&gt;GET_MDM_CONNECTION      &lt;pre&gt;METHOD get_mdm_connection.&lt;br /&gt;*@78\QImporting@  LANGUAGE  TYPE SYLANGU  DEFAULT SY-LANGU&lt;br /&gt;*@78\QImporting@  UNAME TYPE SYUNAME  DEFAULT SY-UNAME&lt;br /&gt;*@78\QImporting@  REPOSITORY  TYPE MDM_LOG_OBJECT_NAME&lt;br /&gt;*@78\QImporting@  USE_CONNECTION_POOL TYPE BOOLEAN  DEFAULT ABAP_TRUE&lt;br /&gt;*@7B\QReturning@  VALUE( API )  TYPE REF TO CL_MDM_GENERIC_API&lt;br /&gt;*@03\QException@  CX_MDM_MAIN_EXCEPTION&lt;br /&gt;&lt;br /&gt;  IF use_connection_pool = abap_true.&lt;br /&gt;    DATA wa_api LIKE LINE OF api_cache.&lt;br /&gt;    READ TABLE api_cache INTO wa_api&lt;br /&gt;     WITH KEY language = language&lt;br /&gt;              uname    = uname&lt;br /&gt;              repository = repository.&lt;br /&gt;    IF sy-subrc = 0.&lt;br /&gt;****Cached Connection Record is found, make sure the API reference is bound&lt;br /&gt;      IF wa_api-api IS BOUND.&lt;br /&gt;        api = wa_api-api.&lt;br /&gt;        GET TIME STAMP FIELD wa_api-last_access.&lt;br /&gt;        MODIFY TABLE api_cache FROM wa_api.&lt;br /&gt;      ELSE.&lt;br /&gt;****Not bound - Delete the Connection Record and Create a New Instance&lt;br /&gt;        DELETE api_cache WHERE language   = language&lt;br /&gt;                           AND uname      = uname&lt;br /&gt;                           AND repository = repository.&lt;br /&gt;        api = zcl_mdm_conn_pool_root=&amp;gt;create_mdm_connection(&lt;br /&gt;             language            = language&lt;br /&gt;             uname               = uname&lt;br /&gt;             repository          = repository&lt;br /&gt;             use_connection_pool = use_connection_pool ).&lt;br /&gt;      ENDIF.&lt;br /&gt;    ELSE.&lt;br /&gt;****No Cached Record - Create a New Instance&lt;br /&gt;      api = zcl_mdm_conn_pool_root=&amp;gt;create_mdm_connection(&lt;br /&gt;           language            = language&lt;br /&gt;           uname               = uname&lt;br /&gt;           repository          = repository&lt;br /&gt;           use_connection_pool = use_connection_pool ).&lt;br /&gt;    ENDIF.&lt;br /&gt;  ELSE.&lt;br /&gt;****By Pass the Connection Pool and create a one-off Instance&lt;br /&gt;    api = zcl_mdm_conn_pool_root=&amp;gt;create_mdm_connection(&lt;br /&gt;         language            = language&lt;br /&gt;         uname               = uname&lt;br /&gt;         repository          = repository&lt;br /&gt;         use_connection_pool = use_connection_pool ).&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDMETHOD.&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;CREATE_MDM_CONNECTION &lt;br /&gt;    &lt;pre&gt;METHOD create_mdm_connection.&lt;br /&gt;*@78\QImporting@  LANGUAGE  TYPE SYLANGU  DEFAULT SY-LANGU&lt;br /&gt;*@78\QImporting@  UNAME TYPE SYUNAME  DEFAULT SY-UNAME&lt;br /&gt;*@78\QImporting@  REPOSITORY  TYPE MDM_LOG_OBJECT_NAME&lt;br /&gt;*@78\QImporting@  USE_CONNECTION_POOL TYPE BOOLEAN  DEFAULT ABAP_TRUE&lt;br /&gt;*@7B\QReturning@  VALUE( API )  TYPE REF TO CL_MDM_GENERIC_API&lt;br /&gt;*@03\QException@  CX_MDM_MAIN_EXCEPTION&lt;br /&gt;&lt;br /&gt;  DATA mdm_language                 TYPE mdm_cdt_language_code.&lt;br /&gt;  mdm_language =  zcl_mdm_conn_pool_root=&amp;gt;expand_mdm_language( language ).&lt;br /&gt;&lt;br /&gt;**** Instantiate the API with our repository key from the dialog&lt;br /&gt;  CREATE OBJECT api&lt;br /&gt;    EXPORTING&lt;br /&gt;      iv_log_object_name = repository.&lt;br /&gt;****Connect to the Repository&lt;br /&gt;  api-&amp;gt;mo_accessor-&amp;gt;connect( mdm_language ).&lt;br /&gt;&lt;br /&gt;  IF use_connection_pool = abap_true.&lt;br /&gt;    DATA wa_api LIKE LINE OF api_cache.&lt;br /&gt;    wa_api-api = api.&lt;br /&gt;    wa_api-language = language.&lt;br /&gt;    wa_api-uname    = uname.&lt;br /&gt;    wa_api-repository = repository.&lt;br /&gt;    GET TIME STAMP FIELD wa_api-last_access.&lt;br /&gt;    INSERT wa_api INTO TABLE api_cache.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDMETHOD.&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;EXPAND_MDM_LANGUAGE &lt;br /&gt;    &lt;pre&gt;METHOD expand_mdm_language.&lt;br /&gt;*@78\QImporting@  LANGUAGE  TYPE SYLANGU  DEFAULT SY-LANGU  Language Key of Current Text Environment&lt;br /&gt;*@7B\QReturning@  VALUE( MDM_LANGUAGE ) TYPE MDM_CDT_LANGUAGE_CODE  MDM: CDT language code&lt;br /&gt;&lt;br /&gt;  CASE language.&lt;br /&gt;    WHEN c_english.&lt;br /&gt;      mdm_language-language = &#39;eng&#39;.&lt;br /&gt;      mdm_language-country  = &#39;US&#39;.&lt;br /&gt;      mdm_language-region   = &#39;USA&#39;.&lt;br /&gt;    when c_german.&lt;br /&gt;      mdm_language-language = &#39;ger&#39;.&lt;br /&gt;      mdm_language-country  = &#39;DE&#39;.&lt;br /&gt;*     mdm_language-region   = &#39;USA&#39;.&lt;br /&gt;    WHEN OTHERS.&lt;br /&gt;****Use the repository Default&lt;br /&gt;      CLEAR mdm_language.&lt;br /&gt;  ENDCASE.&lt;br /&gt;&lt;br /&gt;ENDMETHOD.&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/4952209114833944415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/4952209114833944415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4952209114833944415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4952209114833944415'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-implement-mdm-connection.html' title='How do you implement a MDM Connection Help Class?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-5928318150467863182</id><published>2012-02-08T09:53:00.001-08:00</published><updated>2012-02-08T09:53:43.727-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>How do you implement the processing for Master Data Read Class Parameters?</title><content type='html'>&lt;ul&gt;   &lt;li&gt;In the example Master Data Read Class that we have been looking at, the processing is generic.&amp;#160; In other words there is no statement in the application coding that specifies the MDM Repository, Table or Field name.&amp;#160; The values are supplied via parameters so that this same class can be used for more than one Master Data Characteristic. &lt;/li&gt;    &lt;li&gt;You can see the area where you can supply these parameters in the following screen shot. It is the field labeled Master Data Read Class Parameters:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38675/Master_Data_Read_Class.jpg?version=1&amp;amp;modificationDate=1184690734582&quot; /&gt;&lt;/li&gt;    &lt;li&gt;Although this is a single field, it can hold more than one value.&amp;#160; This is done by associating a data dictionary structure with the parameter inside the coding o the Master Data Read Class.&amp;#160; For the purposes of MDM Integration, you probably want a structure something like the one used this example implementation:     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38675/ZRSMD_RS_S_MDM.jpg?version=1&amp;amp;modificationDate=1184690930923&quot; /&gt;&lt;/li&gt;    &lt;li&gt;This way when you click on the pencil icon next the parameter field, a dialog pops up with the individual field selections as defined by your structure.&amp;#160; This even supports value input help for the individual fields.     &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38675/Read_Parameters.jpg?version=1&amp;amp;modificationDate=1184691007824&quot; /&gt;&lt;/li&gt;    &lt;li&gt;So, how can this functionality be built into the Master Data Read Class?&amp;#160; It requires the implementation of another interface in your class - IF_RSMD_RS_GENERIC.&amp;#160; The sample Master Data Read Class, which can be &lt;a href=&quot;http://abap-sdn-examples-tpj.googlecode.com/files/CLAS_ZCL_RSMD_RS_GENERIC_MDM.slnk&quot;&gt;downloaded here&lt;/a&gt;, contains an implementation of this interface for the purposes of processing the MDM Repository, Table and Field as parameters. &lt;/li&gt;    &lt;li&gt;In the Method GET_STRUCTURE_NAME, you must specify the name of the data dictionary sturcture you are going to use:      &lt;pre&gt;method if_rsmd_rs_generic~get_structure_name.&lt;br /&gt;  e_struct_name =  &#39;ZRSMD_RS_S_MDM&#39;.&lt;br /&gt;endmethod.&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;But the most important processing are the GET and SET Methods. This is where you must supply the logic to map the data from the single parameter string into the individual fiels of your structure and vise versa: &lt;br /&gt;    &lt;pre&gt;method if_rsmd_rs_generic~get_parameter.&lt;br /&gt;  field-symbols: &amp;lt;l_s_struc&amp;gt; type zrsmd_rs_s_mdm.&lt;br /&gt;  assign e_r_struc-&amp;gt;* to &amp;lt;l_s_struc&amp;gt;.&lt;br /&gt;  &amp;lt;l_s_struc&amp;gt; = o_s_gendomain.&lt;br /&gt;endmethod.&lt;br /&gt;&lt;br /&gt;method if_rsmd_rs_generic~set_parameter.&lt;br /&gt;  field-symbols: &amp;lt;l_s_struc&amp;gt; type zrsmd_rs_s_mdm.&lt;br /&gt;  assign i_r_struc-&amp;gt;* to &amp;lt;l_s_struc&amp;gt;.&lt;br /&gt;  o_s_gendomain = &amp;lt;l_s_struc&amp;gt;.&lt;br /&gt;endmethod.&lt;br /&gt;&lt;br /&gt;method if_rsmd_rs_generic~get_parameterstring.&lt;br /&gt;  data: l_parameterstring type rsmdrclpa.&lt;br /&gt;&lt;br /&gt;*===Create the paramater string from the generic table structure===&lt;br /&gt;  l_parameterstring+0(32)  = o_s_gendomain-object_name.&lt;br /&gt;  l_parameterstring+32(34) = o_s_gendomain-table .&lt;br /&gt;  l_parameterstring+66(34) = o_s_gendomain-query_field.&lt;br /&gt;&lt;br /&gt;*===Export the parameter string====&lt;br /&gt;  e_parameterstring = l_parameterstring.&lt;br /&gt;endmethod.&lt;br /&gt;&lt;br /&gt;method if_rsmd_rs_generic~set_parameterstring.&lt;br /&gt;  data: l_parameterstring type rsmdrclpa.&lt;br /&gt;&lt;br /&gt;  l_parameterstring = i_parameterstring.&lt;br /&gt;*===Create the structure from the parameterstring===&lt;br /&gt;  o_s_gendomain-object_name = l_parameterstring+0(32).&lt;br /&gt;  o_s_gendomain-table       = l_parameterstring+32(34).&lt;br /&gt;  o_s_gendomain-query_field = l_parameterstring+66(34).&lt;br /&gt;endmethod.&lt;/pre&gt;&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/5928318150467863182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/5928318150467863182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5928318150467863182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5928318150467863182'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-implement-processing-for.html' title='How do you implement the processing for Master Data Read Class Parameters?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-8340841261359313254</id><published>2012-02-08T09:52:00.001-08:00</published><updated>2012-02-08T09:52:35.927-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>How do you implement the Master Data Read Class?</title><content type='html'>&lt;ul&gt;   &lt;li&gt;Master Data Read Classes have one basic requirement - They must implement the IF_RSMD_RS_ACCESS interface. &lt;/li&gt;    &lt;li&gt;There are several examples of how implement a Master Data Read Class provided by SAP - like CL_RSMD_RS_GENERIC_DOMAIN and CL_RSMD_RS_GENERIC_TABLE.&amp;#160; For creating your own custom Master Data Read Class, it probably makes sense to start by copying from one these existing classes and only adjusting for your specific processing. &lt;/li&gt;    &lt;li&gt;The complete source code (in SAPlink format) for an example implementation of a Master Data Read Class that uses MDM and the MDM ABAP APIs can be downloaded from &lt;a href=&quot;http://abap-sdn-examples-tpj.googlecode.com/files/CLAS_ZCL_RSMD_RS_GENERIC_MDM.slnk&quot;&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Of all the methods in the sample class the most important from the standpoint of the MDM integration is the GET_TEXT method. The example implementation supports the retrieval of STRING or INTEGER based supporting values for a given key from MDM: &lt;/li&gt; &lt;/ul&gt;  &lt;pre&gt;METHOD if_rsmd_rs_access~get_text.&lt;br /&gt;&lt;br /&gt;  DATA: object_name    TYPE mdm_log_object_name,&lt;br /&gt;        table          TYPE mdm_table_code,&lt;br /&gt;        query_field    TYPE mdm_field_code,&lt;br /&gt;        l_s_chavlinfo  TYPE rsdm_s_chavlinfo,&lt;br /&gt;        l_not_assigned TYPE rs_txtlg,&lt;br /&gt;        l_initial_val  TYPE rsd_chavl.&lt;br /&gt;&lt;br /&gt;  object_name = o_s_gendomain-object_name.&lt;br /&gt;  table       = o_s_gendomain-table.&lt;br /&gt;  query_field = o_s_gendomain-query_field.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  DATA lt_result_set_definition TYPE mdm_field_list_table.&lt;br /&gt;  DATA ls_result_set_definition LIKE LINE OF lt_result_set_definition.&lt;br /&gt;  DATA lt_result_set            TYPE mdm_result_set_table.&lt;br /&gt;  DATA ls_result_set            LIKE LINE OF lt_result_set.&lt;br /&gt;  DATA lt_result_set2            TYPE mdm_result_set_table.&lt;br /&gt;  DATA ls_result_set2            LIKE LINE OF lt_result_set2.&lt;br /&gt;  DATA ls_remote_key_filter     TYPE mdm_client_system_key_query.&lt;br /&gt;  DATA api                      TYPE REF TO cl_mdm_generic_api.&lt;br /&gt;  DATA language                 TYPE mdm_cdt_language_code.&lt;br /&gt;  DATA keys                     TYPE mdm_keys.&lt;br /&gt;  DATA exception                TYPE REF TO cx_mdm_main_exception.&lt;br /&gt;  FIELD-SYMBOLS &amp;lt;field_value&amp;gt;   TYPE ANY.&lt;br /&gt;  FIELD-SYMBOLS: &amp;lt;wa_field&amp;gt;      TYPE mdm_cdt_text,&lt;br /&gt;                 &amp;lt;wa_string&amp;gt;     TYPE string,&lt;br /&gt;                 &amp;lt;wa_integer&amp;gt;    TYPE mdm_gdt_integervalue,&lt;br /&gt;                 &amp;lt;wa_taxonomy&amp;gt;   TYPE mdm_taxonomy_entry,&lt;br /&gt;                 &amp;lt;wa_int&amp;gt;        TYPE mdm_gdt_integervalue.&lt;br /&gt;  TYPE-POOLS: mdmif.&lt;br /&gt;&lt;br /&gt;  TRY.&lt;br /&gt;&lt;br /&gt;    DATA wa_cache LIKE LINE OF me-&amp;gt;data_cache.&lt;br /&gt;    READ TABLE data_cache INTO wa_cache&lt;br /&gt;     WITH KEY object_name = object_name&lt;br /&gt;              table       = table&lt;br /&gt;              query_field = query_field.&lt;br /&gt;    IF sy-subrc = 0.&lt;br /&gt;      keys          = wa_cache-keys.&lt;br /&gt;      lt_result_set = wa_cache-lt_result_set.&lt;br /&gt;    ELSE.&lt;br /&gt;&lt;br /&gt;      api = zcl_mdm_conn_pool_root=&amp;gt;get_mdm_connection( repository = object_name ).&lt;br /&gt;&lt;br /&gt;      DATA: result_set TYPE mdm_search_result_table.&lt;br /&gt;      CALL METHOD api-&amp;gt;mo_core_service-&amp;gt;query&lt;br /&gt;        EXPORTING&lt;br /&gt;          iv_object_type_code = table&lt;br /&gt;*         iv_hits_max         = 1&lt;br /&gt;        IMPORTING&lt;br /&gt;          et_result_set       = result_set.&lt;br /&gt;&lt;br /&gt;****The results of a query only return the record keys - no details&lt;br /&gt;****We then have to use a call to the method RETRIEVE to read&lt;br /&gt;****the record details.&lt;br /&gt;      DATA: result TYPE mdm_search_result.&lt;br /&gt;      READ TABLE result_set INDEX 1 INTO result.&lt;br /&gt;      IF sy-subrc = 0.&lt;br /&gt;        keys = result-record_ids.&lt;br /&gt;      ENDIF.&lt;br /&gt;&lt;br /&gt;      CHECK keys IS NOT INITIAL.&lt;br /&gt;****We only need the output field we are interested read from MDM&lt;br /&gt;****By using the result_set_definition parameter, we can control this&lt;br /&gt;****and only retrieve that single column&lt;br /&gt;      ls_result_set_definition-field_name = query_field.&lt;br /&gt;      APPEND ls_result_set_definition TO lt_result_set_definition.&lt;br /&gt;      CALL METHOD api-&amp;gt;mo_core_service-&amp;gt;retrieve&lt;br /&gt;        EXPORTING&lt;br /&gt;          iv_object_type_code      = table&lt;br /&gt;          it_result_set_definition = lt_result_set_definition&lt;br /&gt;          it_keys                  = keys&lt;br /&gt;        IMPORTING&lt;br /&gt;          et_result_set            = lt_result_set.&lt;br /&gt;&lt;br /&gt;      CLEAR wa_cache.&lt;br /&gt;      wa_cache-object_name   = object_name.&lt;br /&gt;      wa_cache-table         = table.&lt;br /&gt;      wa_cache-query_field   = query_field.&lt;br /&gt;      wa_cache-keys          = keys.&lt;br /&gt;      wa_cache-lt_result_set = lt_result_set.&lt;br /&gt;      APPEND wa_cache TO data_cache.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;br /&gt;*===Get the Initial Value Text===&lt;br /&gt;    CALL METHOD _textpool_read&lt;br /&gt;      EXPORTING&lt;br /&gt;        i_repid = &#39;SAPLRSDM&#39;&lt;br /&gt;        i_key   = &#39;001&#39;&lt;br /&gt;      IMPORTING&lt;br /&gt;        e_text  = l_not_assigned.&lt;br /&gt;&lt;br /&gt;    FIELD-SYMBOLS: &amp;lt;wa_result&amp;gt; LIKE LINE OF lt_result_set.&lt;br /&gt;    FIELD-SYMBOLS: &amp;lt;wa_pair&amp;gt;   TYPE mdm_name_value_pair,&lt;br /&gt;                   &amp;lt;wa_key&amp;gt;    LIKE LINE OF keys.&lt;br /&gt;&lt;br /&gt;*===Append the text values in c_t_chavlinfo===&lt;br /&gt;    DATA: tabix TYPE sy-tabix.&lt;br /&gt;    DATA  l_integer TYPE mdm_gdt_integervalue.&lt;br /&gt;    FIELD-SYMBOLS: &amp;lt;l_s_chavlinfo&amp;gt; TYPE rsdm_s_chavlinfo.&lt;br /&gt;    LOOP AT c_t_chavlinfo ASSIGNING &amp;lt;l_s_chavlinfo&amp;gt;&lt;br /&gt;        WHERE i_read_mode = rsdm_c_read_mode-text.&lt;br /&gt;      CLEAR &amp;lt;l_s_chavlinfo&amp;gt;-c_rc.&lt;br /&gt;      IF &amp;lt;l_s_chavlinfo&amp;gt;-c_chavl IS INITIAL&lt;br /&gt;         OR &amp;lt;l_s_chavlinfo&amp;gt;-c_chavl EQ rsd_c_initial&lt;br /&gt;         OR &amp;lt;l_s_chavlinfo&amp;gt;-c_chavl &amp;lt; 1.&lt;br /&gt;        &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtsh = l_not_assigned.&lt;br /&gt;        &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtmd = l_not_assigned.&lt;br /&gt;        &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtlg = l_not_assigned.&lt;br /&gt;      ELSE.&lt;br /&gt;        l_integer = &amp;lt;l_s_chavlinfo&amp;gt;-c_chavl.&lt;br /&gt;        READ TABLE keys ASSIGNING &amp;lt;wa_key&amp;gt; FROM l_integer.&lt;br /&gt;        tabix = sy-tabix.&lt;br /&gt;        READ TABLE lt_result_set ASSIGNING &amp;lt;wa_result&amp;gt; INDEX tabix.&lt;br /&gt;        IF sy-subrc = 0.&lt;br /&gt;          READ TABLE &amp;lt;wa_result&amp;gt;-name_value_pairs ASSIGNING &amp;lt;wa_pair&amp;gt;&lt;br /&gt;            WITH KEY code = query_field.&lt;br /&gt;          IF sy-subrc = 0.&lt;br /&gt;****The data for the column could be one of various data types&lt;br /&gt;****The value itself is returned as TYPE REF TO DATA and must&lt;br /&gt;****be cast into a more specific data type before it can be processed.&lt;br /&gt;            CASE &amp;lt;wa_pair&amp;gt;-type.&lt;br /&gt;              WHEN &#39;STRING&#39;.&lt;br /&gt;                ASSIGN &amp;lt;wa_pair&amp;gt;-value-&amp;gt;* TO &amp;lt;wa_string&amp;gt;.&lt;br /&gt;                WRITE &amp;lt;wa_key&amp;gt; TO l_s_chavlinfo-c_chavl LEFT-JUSTIFIED.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtsh = &amp;lt;wa_string&amp;gt;.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtmd = &amp;lt;wa_string&amp;gt;.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtlg = &amp;lt;wa_string&amp;gt;.&lt;br /&gt;              WHEN &#39;INTEGER&#39;.&lt;br /&gt;                ASSIGN &amp;lt;wa_pair&amp;gt;-value-&amp;gt;* TO &amp;lt;wa_integer&amp;gt;.&lt;br /&gt;                WRITE &amp;lt;wa_key&amp;gt; TO l_s_chavlinfo-c_chavl LEFT-JUSTIFIED.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtsh = &amp;lt;wa_integer&amp;gt;.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtmd = &amp;lt;wa_integer&amp;gt;.&lt;br /&gt;                &amp;lt;l_s_chavlinfo&amp;gt;-e_chatexts-txtlg = &amp;lt;wa_integer&amp;gt;.&lt;br /&gt;            ENDCASE.&lt;br /&gt;          ENDIF.&lt;br /&gt;        ENDIF.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;  ENDTRY.&lt;br /&gt;ENDMETHOD.&lt;/pre&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/8340841261359313254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/8340841261359313254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/8340841261359313254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/8340841261359313254'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-implement-master-data-read.html' title='How do you implement the Master Data Read Class?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-3528148771670420162</id><published>2012-02-08T09:51:00.001-08:00</published><updated>2012-02-08T09:51:53.760-08:00</updated><title type='text'>Connectivity - BI-MDM Integration</title><content type='html'>&lt;h4&gt;BI/MDM Frequently Asked Questions&lt;/h4&gt;  &lt;h5&gt;&lt;a name=&quot;Connectivity-BI-MDMIntegration-GeneralQuestions&quot;&gt;&lt;/a&gt;General Questions&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;What types of BI/MDM Integration Scenarios are possible?      &lt;br /&gt;There are two main types of BI/MDM Integration Scenarios that are currently being rolled out to customers. The first scenario starts with existing data in BI and uses that as the starting point to generate and populate an MDM Repostiory. The second type is integration during the BI data staging. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How does the Data Staging scenario work?      &lt;br /&gt;There are actually two types of the data staging scenario. In each scenario, customers can use existing functionality with BI to access details from MDM to supplement the data that is being loaded into BI. An example might be a feed from an ERP system to a BI system. In this feed there might just be a master data key, like customer number. However using access to MDM, details about this customer, like their sales region, can be read and stored in the BI system or used at runtime inside BI queries. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;What technology is necessary for the Data Staging Scenario?      &lt;br /&gt;The data staging scenario utilizes the MDM ABAP API to be able to read directly from MDM (in realtime) using ABAP coding. A good overview of the &lt;a href=&quot;http://wiki.sdn.sap.com/wiki/display/SAPMDM/Connectivity+-+ABAP+API&quot;&gt;MDM ABAP API&lt;/a&gt; in general is a requirement for starting this scenario. Also anyone interested in implementing this scenario should study &lt;a href=&quot;https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/media/uuid/00c49ffb-e5e5-2910-73ba-c85af1da5b0a&quot;&gt;this video&lt;/a&gt;. The video shows the basics of setting up the MDM ABAP API all the way through implementing one of the data staging scenarios. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How do you use the MDM API during a Data Load?      &lt;br /&gt;For this situation you need to create an ABAP routine as the transformation rule type.       &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Rule_Type_Maintenance.jpg?version=1&amp;amp;modificationDate=1184618841924&quot; /&gt;       &lt;br /&gt;During the editing of the Rule Type, you can choose Routine. You then can custom code an ABAP Routine that reads data from MDM using the MDM ABAP API.       &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Rule_Type_Routine.jpg?version=1&amp;amp;modificationDate=1184619076050&quot; /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How do you use the MDM API for building a Remote Master Data Characteristic?      &lt;br /&gt;This scenario is a little less &amp;quot;free form&amp;quot; than the data loading routine. Here you use the existing BI functionality for &lt;a href=&quot;http://help.sap.com/saphelp_nw70/helpdata/en/58/a4513ce4af0a40e10000000a114084/frameset.htm&quot;&gt;master data characteristics&lt;/a&gt; and simply supply a custom implementation for the characteristic.       &lt;br /&gt;As you maintain the characteristic, from the Master data/texts tab, you can choose a &lt;a href=&quot;http://help.sap.com/saphelp_nw70/helpdata/en/71/f470375fbf307ee10000009b38f8cf/frameset.htm&quot;&gt;Master Data Read Class&lt;/a&gt;. For this you create and then use a class special suited to reading the master data values from MDM.       &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Master_Data_Read_Class.jpg?version=1&amp;amp;modificationDate=1184620532729&quot; /&gt; &lt;/li&gt; &lt;/ul&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/3528148771670420162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/3528148771670420162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/3528148771670420162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/3528148771670420162'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/connectivity-bi-mdm-integration_08.html' title='Connectivity - BI-MDM Integration'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-776773179693679162</id><published>2012-02-08T09:48:00.001-08:00</published><updated>2012-02-08T09:48:45.745-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM API"/><title type='text'>Connectivity - BI-MDM Integration</title><content type='html'>&lt;h4&gt;BI/MDM Frequently Asked Questions&lt;/h4&gt;  &lt;h5&gt;&lt;a name=&quot;Connectivity-BI-MDMIntegration-GeneralQuestions&quot;&gt;&lt;/a&gt;General Questions&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;What types of BI/MDM Integration Scenarios are possible?     &lt;br /&gt;There are two main types of BI/MDM Integration Scenarios that are currently being rolled out to customers. The first scenario starts with existing data in BI and uses that as the starting point to generate and populate an MDM Repostiory. The second type is integration during the BI data staging. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How does the Data Staging scenario work?     &lt;br /&gt;There are actually two types of the data staging scenario. In each scenario, customers can use existing functionality with BI to access details from MDM to supplement the data that is being loaded into BI. An example might be a feed from an ERP system to a BI system. In this feed there might just be a master data key, like customer number. However using access to MDM, details about this customer, like their sales region, can be read and stored in the BI system or used at runtime inside BI queries. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;What technology is necessary for the Data Staging Scenario?     &lt;br /&gt;The data staging scenario utilizes the MDM ABAP API to be able to read directly from MDM (in realtime) using ABAP coding. A good overview of the &lt;a href=&quot;http://wiki.sdn.sap.com/wiki/display/SAPMDM/Connectivity+-+ABAP+API&quot;&gt;MDM ABAP API&lt;/a&gt; in general is a requirement for starting this scenario. Also anyone interested in implementing this scenario should study &lt;a href=&quot;https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/media/uuid/00c49ffb-e5e5-2910-73ba-c85af1da5b0a&quot;&gt;this video&lt;/a&gt;. The video shows the basics of setting up the MDM ABAP API all the way through implementing one of the data staging scenarios. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How do you use the MDM API during a Data Load?     &lt;br /&gt;For this situation you need to create an ABAP routine as the transformation rule type.      &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Rule_Type_Maintenance.jpg?version=1&amp;amp;modificationDate=1184618841924&quot; /&gt;      &lt;br /&gt;During the editing of the Rule Type, you can choose Routine. You then can custom code an ABAP Routine that reads data from MDM using the MDM ABAP API.      &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Rule_Type_Routine.jpg?version=1&amp;amp;modificationDate=1184619076050&quot; /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;How do you use the MDM API for building a Remote Master Data Characteristic?     &lt;br /&gt;This scenario is a little less &amp;quot;free form&amp;quot; than the data loading routine. Here you use the existing BI functionality for &lt;a href=&quot;http://help.sap.com/saphelp_nw70/helpdata/en/58/a4513ce4af0a40e10000000a114084/frameset.htm&quot;&gt;master data characteristics&lt;/a&gt; and simply supply a custom implementation for the characteristic.      &lt;br /&gt;As you maintain the characteristic, from the Master data/texts tab, you can choose a &lt;a href=&quot;http://help.sap.com/saphelp_nw70/helpdata/en/71/f470375fbf307ee10000009b38f8cf/frameset.htm&quot;&gt;Master Data Read Class&lt;/a&gt;. For this you create and then use a class special suited to reading the master data values from MDM.      &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/38657/Master_Data_Read_Class.jpg?version=1&amp;amp;modificationDate=1184620532729&quot; /&gt;&lt;/li&gt; &lt;/ul&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/776773179693679162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/776773179693679162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/776773179693679162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/776773179693679162'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/connectivity-bi-mdm-integration.html' title='Connectivity - BI-MDM Integration'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-6334051036596344172</id><published>2012-02-08T09:44:00.001-08:00</published><updated>2012-02-08T09:44:32.535-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>What is the MDM ABAP API?</title><content type='html'>&lt;h5&gt;What is the MDM ABAP API?&lt;/h5&gt;  &lt;p&gt;Historically most ERP based master data resides in existing ABAP Systems. Also the majority of the business logic in that is consuming the master data also resides in ABAP based systems.&amp;#160; Therefore it makes sense to extend the accessiblity of SAP NetWeaver MDM to allow for easy accessiblity from ABAP.&lt;/p&gt;  &lt;p&gt;That is the goal of the MDM ABAP API (MDM4A).&amp;#160; MDM4A takes the same read, modify, search, and Administrative functionalities of the established COM and Java APIs (MDM4J) and brings them to the ABAP World.&lt;/p&gt;  &lt;p&gt;By using MDM4A, ABAP developers do not have to learn the SAP NetWeaver MDM specific data types.&amp;#160; MDM4A does the job of mapping all the data types and structures for the developer. It translates the structures such as data arrays into ABAP constructs like Internal Tables. &lt;/p&gt;  &lt;p&gt;MDM also takes a different approach to passing language specific data. It might be important to note that all the data is passed through MDM4A via Unicode (UTF-8) regardless of the settings in the AS-ABAP system (Unicode vs. Non-Unicode). The MDM4A layers also do all the work of translating this data into the code page of the current system. Even on Unicode systems, a translation from UTF-8 to UTF-16 must occur.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/6334051036596344172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/6334051036596344172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6334051036596344172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6334051036596344172'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/what-is-mdm-abap-api_08.html' title='What is the MDM ABAP API?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-2456772860758389673</id><published>2012-02-08T09:43:00.001-08:00</published><updated>2012-02-08T09:43:53.619-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>What is the Architecture of MDM4A?</title><content type='html'>&lt;h5 align=&quot;justify&quot;&gt;What is the Architecture of MDM4A?&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;MDM4A is made up of three major parts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;Generic API &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;Provider Framework &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align=&quot;justify&quot;&gt;C-Kernel &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align=&quot;justify&quot;&gt;The Generic API is a release independent interface into the SAP NetWeaver MDM API.&amp;#160; It is the only layer that application developers should ever directly interact with.&amp;#160; It is comprised of publically available Function Modules and Classes.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;The Provider Framework is the release specific implementation of the SAP NetWeaver MDM API.&amp;#160; As new releases or support packages of MDM are released, new matching version fo the provider framework will be created. &lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251694270/MDM_Architecture_Diagram.jpg&quot; /&gt;&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;However the features of the provider framework are always abastracted by the Generic API, causing the least amount of changes to the consuming applications as possible.&amp;#160; This protects the application developer from changes within MDM breaking their applications. The Provider Framework is not intended for direct access by SAP&#39;s Customers or Partners.&amp;#160; The MDM 5.5 SP4 class for the provider framework is CL_MDM_PROVIDER_SP4_PL00.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;The Generic API and the Provider Framework are both delivered as part of a SAINT Package (SAP Add-on installed into the system via transaction SAINT).   &lt;br /&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251694270/MDM_SP_Level.jpg&quot; /&gt;&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Finally there are new Kernel Libraries written in C that are an integrated part of the ABAP stack that provide the low level communication interface to MDM. The C-Kernel is an integrated part of the AS-ABAP Kernel. The file dw_mdm.dll is part of the core disp+work package of the Kernel and is installed into /usr/sap/&amp;lt;SID&amp;gt;/DVEBMGS&amp;lt;Instance Number&amp;gt;/exe just like the rest of the Kernel&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/2456772860758389673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/2456772860758389673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2456772860758389673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2456772860758389673'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/what-is-architecture-of-mdm4a_08.html' title='What is the Architecture of MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-7775270927904498370</id><published>2012-02-08T09:42:00.003-08:00</published><updated>2012-02-08T09:42:59.556-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>What Codepage is used by MDM4A?</title><content type='html'>&lt;h5 align=&quot;justify&quot;&gt;What Codepage is used by MDM4A?&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;MDM4A is always a Unicode based interface regardless of the codepage used by the ABAP system.&amp;#160; Althought a Unicode ABAP system is UTF-16, the MDM4A interface is UTF-8.&amp;#160; Therefore regardless of the ABAP system codepage, a codepage conversion must take place. The codepage conversion is done within the inner layers of the MDM4A.&amp;#160; However on non-Unicode ABAP systems if you attempt to process characters from MDM that are outside your current codepage, this will produce a CX_SY_CONVERSION_CODEPAGE shortdump.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;In non-Unicode ABAP systems, the best way to avoid such errors is to match the logon langauge of the ABAP system to the langauge used to connect to MDM. &lt;/p&gt;  &lt;div align=&quot;justify&quot;&gt;   &lt;pre&gt;DATA ls_language TYPE mdm_cdt_language_code.&lt;br /&gt;ls_language-language = &#39;eng&#39;.&lt;br /&gt;ls_language-country  = &#39;US&#39;.&lt;br /&gt;ls_language-region   = &#39;USA&#39;.&lt;br /&gt;lr_api-&amp;gt;mo_accessor-&amp;gt;connect( ls_language ).&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/7775270927904498370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/7775270927904498370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7775270927904498370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/7775270927904498370'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/what-codepage-is-used-by-mdm4a_08.html' title='What Codepage is used by MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-2592256181627045382</id><published>2012-02-08T09:42:00.001-08:00</published><updated>2012-02-08T09:42:10.219-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>What causes the CRC Check Error?</title><content type='html'>&lt;p&gt;What does it mean when I receive the following error message:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&amp;#160; Server return code 0x8002000E: File failed a crc check&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;This probably means that there is a mismatch between the release/patch level of the MDM Server and the ABAP API Add-In or Java API add-in (e.g MDMJAVAAPI04_0.sca).&lt;/p&gt;  &lt;p&gt;Although a single ABAP system with the MDM API Add-In could potentially interface with multiple MDM Servers on different release levels, the ABAP MDM API Add-In release level/patch level must always match at least that of the most release level of any MDM Server it connects to. In other words, the ABAP side the MDM APIs (provided via an ABAP Add-In) is backwards compatible, but not forwards compatible.&lt;/p&gt;  &lt;p&gt;Lets say for instance that you are running the MDM Server at 5.5 SP4 Patch 0. This would show up as something like 5.5.32.56 in the release level dialog on the MDM Server Console. Your ABAP system should have installed at least the same patch level. If you update your MDM Server to 5.5 SP4 Patch 1 (version 5.5.33.13), then patch one of the MDM ABAP API Add-on must be applied as well. Patches for the MDM ABAP API Add-on can be downloaded from the Service Marketplace.&lt;/p&gt;  &lt;p&gt;You also need to make sure that your have configured the correct MDM Provider for your particular repository in the MDM Configuration with the ABAP System (Transaction MDMAPIC). &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/2592256181627045382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/2592256181627045382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2592256181627045382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2592256181627045382'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/what-causes-crc-check-error_08.html' title='What causes the CRC Check Error?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-4298600540692177624</id><published>2012-02-08T09:40:00.001-08:00</published><updated>2012-02-08T09:40:23.495-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How do you use the Function Module-Based version of MDM4A?</title><content type='html'>&lt;h5&gt;How do you use the Function Module-Based version of MDM4A?&lt;/h5&gt;  &lt;p&gt;There are function groups that map directly to the main Interfaces of the provider class. The processing logic is the same (the class-based interface is called from within the Function Modules). Several of the Key Function Modules are &amp;quot;Remote Enabled&amp;quot;. Because they are remote enabled, they can also very quickly be generated into Web Services.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Function Group/Class Interface Mapping&lt;/b&gt;    &lt;br /&gt;FG_MDM_ACCESSOR = IF_MDM_ACCESSOR    &lt;br /&gt;FG_MDM_ADMIN_API = IF_MDM_ADMIN    &lt;br /&gt;FG_MDM_CONFIG_MONITOR = IF_MDM_API_CONFIG    &lt;br /&gt;FG_MDM_CORE_SERVICE_API = IF_MDM_CORE_SERVICES    &lt;br /&gt;FG_MDM_META_API = IF_MDM_META&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/4298600540692177624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/4298600540692177624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4298600540692177624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4298600540692177624'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-use-function-module-based_08.html' title='How do you use the Function Module-Based version of MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-1142751446939144441</id><published>2012-02-08T09:39:00.001-08:00</published><updated>2012-02-08T09:39:30.705-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How do you use the Class-Based version of MDM4A?</title><content type='html'>&lt;h5&gt;How do you use the Class-Based version of MDM4A?&lt;/h5&gt;  &lt;p&gt;For all class-based access to MDM4A you only interact with the object CL_MDM_GENERIC_API. Internally the Abstract Provider will be instantiated with the release specific provider. All access to the functionality of MDM4A is done through the instances of the main group of Interfaces exposed by the Generic API&lt;/p&gt;  &lt;p&gt;The object CL_MDM_GENERIC_API has attributes that hold object references to the 5 major parts of the API:   &lt;br /&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251694270/MDM_API_Class_API.jpg&quot; /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;IF_MDM_ACCESSOR&lt;/b&gt;    &lt;br /&gt;This interface controls the opening and closing of a connection to a repository.    &lt;br /&gt;For many of the other API Methods, you must first have created a connection to a repository via this interface.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;IF_MDM_ADMIN&lt;/b&gt;    &lt;br /&gt;This interface provides access to Admin functions similar to those available via the MDM Console. It includes User (creation, password set, role maintenance) and Repository (Mount or Load Repositories) Administration.&lt;/p&gt;  &lt;p&gt;The IF_MDM_ADMIN interface poses an interesting situation. Many of the functions here could be automated and then batch scheduled using the local ABAP Scheduler or the Netweaver Central Scheduler by Redwood. It would also be quite easy to use IF_MDM_ADMIN to batch create users (based upon their existence or role assignment in AS-ABAP) for the MDM Server.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;IF_MDM_API_CONFIG&lt;/b&gt;    &lt;br /&gt;This interface allows you to read the configuration entries from Transaction &lt;em&gt;MDMAPIC&lt;/em&gt; for one repository or all of them at once. See the Data Dictionary structures &lt;b&gt;MDM_REPOSITORY&lt;/b&gt;, &lt;b&gt;MDM_CONNECTION&lt;/b&gt;, &lt;b&gt;MDM_DBMS&lt;/b&gt;, and &lt;b&gt;MDM_PROVIDER&lt;/b&gt; for the data supplied by this Interface.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;IF_MDM_CORE_SERVICES&lt;/b&gt;    &lt;br /&gt;This is the main interface to directly manipulate the data within a repository.    &lt;br /&gt;It includes Check In/Out, Client System Keys, Update, Delete, Creation, and Query of data.&lt;/p&gt;  &lt;p&gt;Many of the Core Services have a second method that ends in _SIMPLE. For instance there is UPDATE and UPDATE_SIMPLE. The &amp;quot;Simple&amp;quot; methods accept data dictionary structures that match the format of the repository table that you want to manipulate. This provides an easier interface into the API but requires the creation of a matching structure in the ABAP Data Dictionary.&lt;/p&gt;  &lt;p&gt;The field names in the ABAP Data Dictionary Structure must be the same as the Name in the MDM Repository (case-sensitive). You are also restricted to only using the MDM API Data Types. Keep in mind that in ABAP there is no NULL state for a value. Any NULL value from MDM will be returned through the simple data types using the initial value for the underlying Data Dictionary Domain. Use of the specific methods instead of the SIMPLE ones will avoid this issue.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;IF_MDM_META&lt;/b&gt;    &lt;br /&gt;This interface provides methods that allow you to change the metadata of a repository. Many of these methods require that the repository be unloaded before they can be performed.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/1142751446939144441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/1142751446939144441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/1142751446939144441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/1142751446939144441'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-use-class-based-version-of_08.html' title='How do you use the Class-Based version of MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-6826096528661452828</id><published>2012-02-08T09:38:00.003-08:00</published><updated>2012-02-08T09:38:47.525-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How do you configure the connection to MDM from ABAP?</title><content type='html'>&lt;h5&gt;How do you configure the connection to MDM from ABAP?&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=3493#HowdoyouconfiguretheconnectiontoMDMfromABAP%3F-ServerConfiguration&quot;&gt;Server Configuration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=3493#HowdoyouconfiguretheconnectiontoMDMfromABAP%3F-DBMSConfiguration&quot;&gt;DBMS Configuration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=3493#HowdoyouconfiguretheconnectiontoMDMfromABAP%3F-ABAPImplementationforMDMVersion&quot;&gt;ABAP Implementation for MDM Version&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=3493#HowdoyouconfiguretheconnectiontoMDMfromABAP%3F-MDMRepository&quot;&gt;MDM Repository&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All Configuration is done from Transaction Code &lt;em&gt;MDMAPIC&lt;/em&gt; and is broken into 5 main sections:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MDM Repositories &lt;/li&gt;    &lt;li&gt;MDM Server Connections &lt;/li&gt;    &lt;li&gt;MDM DBMS Hosts &lt;/li&gt;    &lt;li&gt;ABAP Implementation for MDM Version Support &lt;/li&gt;    &lt;li&gt;MDM API Trace Configuration &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img src=&quot;https://weblogs.sdn.sap.com/weblogs/images/251694270/MDM_Config1.jpg&quot; /&gt;&lt;/p&gt;  &lt;p&gt;All access via MDM4A is always done for a particular repository. The class based API is instantiated for a particular repository. You can not switch to a different repository within an instance. You must create a separate instance to access a different repository.&lt;/p&gt;  &lt;p&gt;In all calls to the function module based API, the repository must be passed in through the mandatory parameter IV_LOG_OBJECT_NAME. Therefore all the configuration in MDMAPIC really revolves around the repository as its central object. Although we will create Server and Database configuration entries it is the Repository entry that drives all configuration through the API.&lt;/p&gt;  &lt;h6&gt;&lt;a name=&quot;HowdoyouconfiguretheconnectiontoMDMfromABAP?-ServerConfiguration&quot;&gt;&lt;/a&gt;Server Configuration&lt;/h6&gt;  &lt;p&gt;First define the TCP/IP communication settings for connection to the MDM Server. Then enter the Server Hostname and the Port for communications. Typically the MDM server runs on Port 20005. The name in the MDM Connection field is arbitrary and only know to the ABAP side of the interface.&lt;/p&gt;  &lt;p&gt;Be careful when defining the host name for systems that may have more than one hostname alias. During the connection to the repository via MDM4A, a list of all repositories and their hostname according to the MDM Server will be retrieved. The local customizing will be checked against this list. If the hostnames do not match, then the connection will be rejected. Therefore the use of IP addresses for the hostname is technically possible, but will always lead to a configuration mismatch and rejection.&lt;/p&gt;  &lt;h6&gt;&lt;a name=&quot;HowdoyouconfiguretheconnectiontoMDMfromABAP?-DBMSConfiguration&quot;&gt;&lt;/a&gt;DBMS Configuration&lt;/h6&gt;  &lt;p&gt;Repositories may reside on a DBMS that is a different physical system than the MDM server itself, therefore it needs its own configuration entry. The Drop Down Box for DB Type will show all support DBMS types. The name in the MDM DBMS field is arbitrary and only know to ABAP, much like the server name field in the Server Configuration.&lt;/p&gt;  &lt;h6&gt;&lt;a name=&quot;HowdoyouconfiguretheconnectiontoMDMfromABAP?-ABAPImplementationforMDMVersion&quot;&gt;&lt;/a&gt;ABAP Implementation for MDM Version&lt;/h6&gt;  &lt;p&gt;Different releases of SAP NetWeaver MDM may require technical differences in the Low Level Provider Class. This configuration will allow you to assign a provider class to a set of repository configuration settings. You must select a class that is derived from the Abstract class CL_MDM_ABSTRACT_PROVIDER. The class provided for SP04 is CL_MDM_PROVIDER_SP04_PL00.&lt;/p&gt;  &lt;p&gt;Remember as a developer you should only program against the Generic API and not this lower level provider framework. Otherwise incompatible changes may be introduced by SAP during version changes that break your application coding. The Generic API will use this configuration in order to call the correct logic for the version of MDM that it must connect with.&lt;/p&gt;  &lt;h6&gt;&lt;a name=&quot;HowdoyouconfiguretheconnectiontoMDMfromABAP?-MDMRepository&quot;&gt;&lt;/a&gt;MDM Repository&lt;/h6&gt;  &lt;p&gt;We tie all our config. together by specifying for a repository what server, DBMS, and Provider it should use. The Object name is arbitrary and only know to ABAP - although it is used as the key to read all the configuration. The MDM Repository must be the real repository name as it is displayed from the MDM Console.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/6826096528661452828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/6826096528661452828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6826096528661452828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/6826096528661452828'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-you-configure-connection-to-mdm_08.html' title='How do you configure the connection to MDM from ABAP?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-5534131352081966405</id><published>2012-02-08T09:38:00.001-08:00</published><updated>2012-02-08T09:38:00.855-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How do I connect to a Repository using the Class-Based MDM4A?</title><content type='html'>&lt;h5 align=&quot;justify&quot;&gt;How do I connect to a Repository using the Class-Based MDM4A?&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;This is a simple example that only focuses on a few things: Instantiating the MDM4A, making a connection to a repository and exception handling.&lt;/p&gt;  &lt;div align=&quot;justify&quot;&gt;   &lt;pre&gt;DATA api             TYPE REF TO cl_mdm_generic_api.&lt;br /&gt;DATA log_object_name TYPE mdm_log_object_name.&lt;br /&gt;DATA language        TYPE mdm_cdt_language_code.&lt;br /&gt;DATA exception       TYPE REF TO cx_mdm_main_exception.&lt;br /&gt;&lt;br /&gt;log_object_name = &#39;API_CRUD_1&#39;.&lt;br /&gt;language-language = &#39;eng&#39;.&lt;br /&gt;language-country  = &#39;US&#39;.  language-region   = &#39;USA&#39;.&lt;br /&gt;&lt;br /&gt;TRY.&lt;br /&gt;    CREATE OBJECT api&lt;br /&gt;      EXPORTING&lt;br /&gt;        iv_log_object_name = log_object_name.&lt;br /&gt;    api-&amp;gt;mo_accessor-&amp;gt;connect( language ).&lt;br /&gt;****Do Something&lt;br /&gt;    api-&amp;gt;mo_accessor-&amp;gt;disconnect( ).&lt;br /&gt;&lt;br /&gt;  CATCH cx_mdm_usage_error INTO exception.&lt;br /&gt;****Other Exceptions...&lt;br /&gt;  CLEANUP.&lt;br /&gt;    TRY.&lt;br /&gt;        api-&amp;gt;mo_accessor-&amp;gt;disconnect( ).&lt;br /&gt;      CATCH cx_root.&lt;br /&gt;    ENDTRY.&lt;br /&gt;ENDTRY.&lt;br /&gt;&lt;br /&gt;IF NOT exception IS INITIAL.&lt;br /&gt;  MESSAGE exception TYPE &#39;E&#39;.&lt;br /&gt;ENDIF.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;&lt;b&gt;LOG_OBJECT_NAME&lt;/b&gt; is initialized with the key for our repository customizing (from Transaction &lt;em&gt;MDMAPIC&lt;/em&gt;). That is only value you have to specify. All the other connection information will be looked up for you by the MDM4A.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;We create the instance of the MDM4A by calling the &lt;em&gt;CREATE OBJECT&lt;/em&gt; for our instance of &lt;b&gt;CL_MDM_GENERIC_API&lt;/b&gt;. We only must pass in the configuration key. You could still have configuration, authorization, or trusting errors; but these exceptions will not be thrown until we connect to the repository in the next step.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;Through the API we have access to instances of all 5 of the major interfaces (MO_ACCESSOR=IF_MDM_ACCESSOR, MO_CORE_SERVICE=IF_MDM_CORE_SERVICE, MO_ADMIN=IF_MDM_ADMIN, MO_META=IF_MDM_META, and MO_API_CONFIG=IF_MDM_API_CONFIG). We use &lt;em&gt;api-&amp;gt;mo_accessor&lt;/em&gt; to establish a connection to our repository. It is this point where the first communication connection is made.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;First a list of repositories is retrieved from the MDM Server. This list is matched against our configuration settings to make sure the configuration is correct. Next a connection to the repository is made. The current AS-ABAP User (&lt;b&gt;SY-UNAME&lt;/b&gt;) is passed through the interface call without specifying a password. At this point the Trusted Status of the AS-ABAP Server is also checked against the MDM Server allow.ip/deny.ip configuration files.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;All processing logic is left out of this example. At the point marked &amp;quot;Do Something&amp;quot; you would place the specific logic.&lt;br /&gt;  &lt;br /&gt;Once finished with processing, you should disconnect from the MDM server explicitly with a call to the Accessor method &lt;em&gt;DISCONNECT&lt;/em&gt;. If you end your application without disconnecting, the connection will remain open until it is cleaned up after its timeout. This will tie up system resources on the MDM Server unnecessarily.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;All of our logic is placed within a single &lt;em&gt;TRY...ENDTRY&lt;/em&gt; block. That way all errors will trigger into a single exception block. Only one Exception is shown here to save space. There is one super exception that can be caught to get all possible MDM4A specific exceptions - &lt;b&gt;CX_MDM_MAIN_EXCEPTION&lt;/b&gt;. Inheriting from this exception are 5 more specific exceptions: &lt;b&gt;CX_MDM_KERNEL&lt;/b&gt; (Exceptions within the Kernel layer for the MDM4A), &lt;b&gt;CX_MDM_NOT_SUPPORTED&lt;/b&gt; (Exceptions if a method is called that isn&#39;t supported by the current release-specific provider that you are using), &lt;b&gt;CX_MDM_PROVIDER&lt;/b&gt; (Exceptions generated within the Provider Layer of MDM4A), &lt;b&gt;CX_MDM_SERVER_RC_CODE&lt;/b&gt; (Exceptions generated on the MDM Server. The MDM Server specific Return Code and explanatory text are passed back through this exception), and &lt;b&gt;CX_MDM_USAGE_ERROR&lt;/b&gt; (Exceptions produced by incorrect usage of an MDM4A interface).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;It is important to note the use of the &lt;em&gt;CLEANUP&lt;/em&gt; event within the &lt;em&gt;TRY...CATCH&lt;/em&gt; Block. Regardless of what type of exception occurred, processing can not continue. However we still want to be sure to close the interface connection and free up the resources allocated to it. Therefore we also call the Accessor &lt;em&gt;DISCONNECT&lt;/em&gt; here. This logic path only occurs if an exception is caught. If errors occur within this Disconnect, there isn&#39;t really anything that can be done about it therefore the logic catches all exceptions (&lt;b&gt;CX_ROOT&lt;/b&gt;) and ignores them.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;justify&quot;&gt;Finally we process an error message with the text from the exception with the last block of coding.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/5534131352081966405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/5534131352081966405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5534131352081966405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5534131352081966405'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-do-i-connect-to-repository-using_5916.html' title='How do I connect to a Repository using the Class-Based MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-4892025687138092684</id><published>2012-02-08T09:37:00.001-08:00</published><updated>2012-02-08T09:37:07.350-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How does Authentication work in MDM4A?</title><content type='html'>&lt;h5 align=&quot;justify&quot;&gt;How does Authentication work in MDM4A?&lt;/h5&gt;  &lt;p align=&quot;justify&quot;&gt;All authentication between the MDM server and the ABAP system via the MDM4A requires a Server Trust relationship. The SAP NetWeaver MDM Server(s) must trust their AS-ABAP counterparts. Trusting is configured via two files on the SAP NetWeaver MDM server - allow.ip and deny.ip This files contain the IP addresses of the AS-ABAP systems that you want to control access from.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;The Files allow.ip and deny.ip should normally be placed directly into the same folder that holds your mds.ini (MDM Server Configuration) file. However if you need to place them in a different location (perhaps a centralized network share) you can configure their location in the mds.ini file. Use the entry TrustFiles Dir=&amp;lt;directory&amp;gt; to specify this location.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Allow.ip and deny.ip must be flat, text only files.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;It is possible to wildcard the entries in allow.ip and deny.ip using the * character. You can NOT just specify * to allow all possible IP addresses. You must at least specify one subnet --ie. at least 10.*&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Instead of listing each IP address directly, users will most likely take advantage of the wildcard. If you want to allow access from all but a few IP address you can combine the allow.ip and deny.ip entries. For instance you may wish to allow all servers from the 192.168.0.* range. However their may be a single &amp;quot;unsafe&amp;quot; machine in this subnet. You could then place the IP address of this &amp;quot;unsafe&amp;quot; machine within the deny.ip file. This can be useful to keep development or test servers from accidentally updating data in a production repository.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Any IP address not found in the allow.ip file (or if no allow.ip file can be read) will cause all requests will be refused.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Comments can be placed in the allow.ip and deny.ip files using the # character in the first column.&lt;/p&gt;  &lt;p align=&quot;justify&quot;&gt;Once the server trust relationship is established, authentication is quite simple. Because there is a trusting relationship, no passwords must be passed through MDM4A. The AS-ABAP user identity (SY-UNAME) will automatically be passed through the MDM4A interface. A repository user with the same ID must exist on the SAP NetWeaver MDM server side for a role to be assigned to the request. Alternatively, User Mapping is possible using the LDAP Connectivity of the SAP NetWeaver MDM Server.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/4892025687138092684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/4892025687138092684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4892025687138092684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/4892025687138092684'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-does-authentication-work-in-mdm4a_08.html' title='How does Authentication work in MDM4A?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-2647893498390860434</id><published>2012-02-08T09:36:00.001-08:00</published><updated>2012-02-08T09:36:27.398-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>How can I change the timeout parameter?</title><content type='html'>&lt;p&gt;You have exceeded the MDM ABAP API Communication timeout and recieved an error message, however your process does indeed take longer than the default time.&lt;/p&gt;  &lt;p&gt;The timeout parameter is set and controlled by the ABAP side of the communication. The default value of the timeout is 30000 milliseconds. The timeout parameter is controlled by the ABAP Profile Parameter mdm/network_timeout. For more details see &lt;a href=&quot;https://service.sap.com:443/sap/support/notes/HOME:968804&quot;&gt;OSS Note 968804&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/2647893498390860434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/2647893498390860434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2647893498390860434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/2647893498390860434'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/how-can-i-change-timeout-parameter_5657.html' title='How can I change the timeout parameter?'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5579339541755643792.post-5823981211870059906</id><published>2012-02-08T09:35:00.001-08:00</published><updated>2012-02-08T09:35:46.034-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAP MDM ABAP API"/><title type='text'>TIP ~ MDM ABAP-API ~ Things to Remember (for Starters)</title><content type='html'>&lt;p&gt;This is something I found with MDM ABAP APIs and thought to share. It will be quite old and small thing for experts but I guess still a little good for starters.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;b&gt;1.&amp;#160; The *Table code* is case sensitive in MDM ABAP API. If you add *CUSTOMERS* in your console, please use *CUSTOMERS* only in the ABAP API program. Please do not use *Customers* or *customers. Another example is *Customer_MDM* , so dont use *Customer_mdm* etc.*&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/1.jpg?version=1&amp;amp;modificationDate=1205132314967&quot; /&gt;    &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/Right.JPG?version=3&amp;amp;modificationDate=1205134653046&quot; /&gt; Works - Only Code of Table is case-sensitive: not Table Name.&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/2.jpg?version=1&amp;amp;modificationDate=1205132314951&quot; /&gt;    &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/Wrong.JPG?version=2&amp;amp;modificationDate=1205133843008&quot; /&gt; Not Works&amp;#160; -&amp;#160; Code needs to be exact, its case-sensitive.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;b&gt;2.&amp;#160;&amp;#160; The User-ID is always capital since ECC uses caps for user-Id. Please use *MDMUSER* as console and not *mdmuser&lt;/b&gt;. &lt;b&gt;*mdmuser* will give exception that *User is not found&lt;/b&gt;.**&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/3.jpg?version=1&amp;amp;modificationDate=1205132314940&quot; /&gt;    &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/Copy+of+Right.JPG?version=1&amp;amp;modificationDate=1205134696046&quot; /&gt; Works - Only Name of User is case-sensitive!    &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/4.jpg?version=1&amp;amp;modificationDate=1205132314930&quot; /&gt;    &lt;br /&gt;&lt;img src=&quot;http://wiki.sdn.sap.com/wiki/download/attachments/71281/Copy+of+Wrong.JPG?version=1&amp;amp;modificationDate=1205134696035&quot; /&gt; Not Works&amp;#160; -&amp;#160; Name needs to be in capital letters, its case-sensitive.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;b&gt;Same is true for Table Fields as well.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In the end, its also a tip that Please Use the &lt;b&gt;ABAP API How to Guides&lt;/b&gt; provided. I must admit that they are really helpful and even helped me in solving a simple customer requirement. Cheers !&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://sapmdmtutorials.blogspot.com/feeds/5823981211870059906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5579339541755643792/5823981211870059906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5823981211870059906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5579339541755643792/posts/default/5823981211870059906'/><link rel='alternate' type='text/html' href='http://sapmdmtutorials.blogspot.com/2012/02/tip-mdm-abap-api-things-to-remember-for.html' title='TIP ~ MDM ABAP-API ~ Things to Remember (for Starters)'/><author><name>SAP BPC Tutorials</name><uri>http://www.blogger.com/profile/03728936382387993855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>