<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAP Integration Experts - DataXstream</title>
	<atom:link href="http://www.dataxstream.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dataxstream.com</link>
	<description>SAP Certified Consultants</description>
	<lastBuildDate>Thu, 11 Mar 2010 21:07:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Build an SAP RFC Server using the SAP .Net Connector</title>
		<link>http://www.dataxstream.com/2010/03/build-an-sap-rfc-server-using-the-sap-net-connector/</link>
		<comments>http://www.dataxstream.com/2010/03/build-an-sap-rfc-server-using-the-sap-net-connector/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 13:30:58 +0000</pubDate>
		<dc:creator>Terry DeBruicker</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP .Net Connector]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4054</guid>
		<description><![CDATA[This blog post describes step-by-step how to use the SAP .Net Connector and Microsoft C# to create an SAP RFC Server. This allows an SAP process to call your custom C# code, which can accept parameters and return values.
The SAP .Net Connector simplifies creating C# programs that can interoperate with an SAP host. The SAP [...]]]></description>
			<content:encoded><![CDATA[<p>This blog post describes step-by-step how to use the SAP .Net Connector and Microsoft C# to create an SAP RFC Server. This allows an SAP process to call your custom C# code, which can accept parameters and return values.</p>
<p>The SAP .Net Connector simplifies creating C# programs that can interoperate with an SAP host. The SAP .Net Connector is available from the <a href="http://service.sap.com/connectors" target="_blank">SAP Service Marketplace</a>. You must have access to the SAP Service Marketplace to be able to download the SAP .Net Connector. The SAP .Net Connector must be installed on your development machine before we begin.</p>
<p>RFC is a Remote Function Call. In this case, the SAP process is a ‘client’ that is making an RFC call to our custom ‘server’ code. Our code uses the SAP .Net Connector to register on an SAP Application Gateway.</p>
<p>The TLA system we have been creating exists solely to demonstrate certain programming techniques involving the SAP .Net Connector and C#.  We will cover three separate parts of the solution: defining the function to SAP, creating a proxy object used to access SAP, and creating our C# code to perform the RFC function.</p>
<h2><span id="more-4054"></span>Defining the Function in SAP</h2>
<p>Before we build our RFC server, we will define our RFC function in the SAP system. There are two parts we will need to create:  the Function Signature, and the RFC Destination.</p>
<h3>Defining the RFC Function Signature</h3>
<p>Open the SAP SE37 Function Builder screen. For the Function Module field, enter <strong>Z_RFC_TLA_HELLO_WORLD</strong> and click Create. For the Function group, press the browse button to the right of the field, then select an appropriate function Group. Enter a short text description and click Save to save the function signature.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0013.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0013_thumb.jpg" border="0" alt="Image-0013" width="244" height="187" /></a></p>
<p>On the Attributes tab, be sure to select the <em>Remote-enabled module</em> radio button.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0027.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0027_thumb.jpg" border="0" alt="Image-0027" width="244" height="164" /></a></p>
<p>Now we will be asked to define the parameters that are used. SAP refers to values passed to the RFC call as Import values. Values that are returned from the RFC call are called Export values.</p>
<p>In the Function Builder screen, on the Import tab, define a Parameter named <strong>Name</strong>. Fill in the appropriate Type and Associated Type values. Be sure to check the Pass Value check box.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0016.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0016_thumb.jpg" border="0" alt="Image-0016" width="244" height="69" /></a></p>
<p>On the Export tab, create a Parameter named Hello_World. This will end up storing the result of the RFC call. Define the field in the same way as the Name import field.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0017.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0017_thumb.jpg" border="0" alt="Image-0017" width="244" height="75" /></a></p>
<p>Save your RFC Function. Then you need to activate your RFC function. To do that, from the SE37 screen, enter the function module name. then click the <em>Activate</em> button.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0019.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0019_thumb.jpg" border="0" alt="Image-0019" width="244" height="186" /></a></p>
<h3>Defining the RFC Destination</h3>
<p>SAP can direct an RFC call to different destinations. We will create an RFC Destination using SAP function SM59. This RFC Destination is used by the SAP system to route an RFC call to our program, which previously registered itself on the SAP Application Gateway.</p>
<p>In the SM59 screen, click the Create button.  Enter RFC destination of <strong>TLARFCSERVER</strong>. The Connection type is <strong>T</strong> for TCP/IP. Enter a description.</p>
<p>On the Technical settings tab, select Activation Type of <em>Registered Server Program</em>.</p>
<p>For the Registered Server Program Program ID, enter <strong>TlaRfcSrv</strong>. The Program ID we use here must match the Program ID used when our server code connects to the SAP Application Gateway.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0010.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0010_thumb.jpg" border="0" alt="Image-0010" width="346" height="387" /></a></p>
<p>If you try the Test connection button, it will fail, since we have not yet registered our program on the Application Gateway. Later, we can come back to SM59 and test this and see that our RFC destination is available.</p>
<h2>C# Code</h2>
<p>We will create an application that can be called from an SAP host. The SAP host will pass in a name, as a string. Our application will return a hello greeting back to the calling program.</p>
<p>Our solution will consist of two parts.</p>
<ol>
<li>The first part is the SAP .Net Connector Proxy project, named TlaRfcServerSapProxy. This will produce a Dynamic Link Library that encapsulates what we need to know to interoperate with the SAP host.</li>
<li>The second part is is our custom code project, named TlaRfcServer. This contains the code which will execute when called from the SAP host via RFC. Save the RFC destination.</li>
</ol>
<h3>Creating the SAP Proxy Project</h3>
<p>We will use Visual Studio 2003 to create a DLL that manages the interactions with the SAP host. The SAP .Net Connector version 2.0 works with Visual Studio 2003 or 2005. To use the .Net Connector in our preferred environment of Visual Studio 2008, we will create the proxy DLL in 2003 and add that to our 2008 project. The techniques are described in our earlier post, <a title="How to Build an SAP .Net Connector Proxy" href="http://www.dataxstream.com/2009/08/using-the-sap-net-connector-in-visual-studio-2008/" target="_blank">Using the SAP .Net Connector in Visual Studio 2008</a>.</p>
<p>In Visual Studio 2003, start a new Class Library project named TlaRfcServerSapProxy. Delete the default Class1.cs file that is created automatically.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0020.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0020_thumb.jpg" border="0" alt="Image-0020" width="341" height="248" /></a></p>
<p>From the Solution Explorer, Right-click on References and choose Add New References. Under the .Net tab, highlight SAP.Connector.dll and SAP.Connector.RFC. Click the Select button, then OK to add the SAP .Net Connector references.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0021.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0021_thumb.jpg" border="0" alt="Image-0021" width="352" height="246" /></a></p>
<p>Now add the SAP Connector Proxy to our project. Right click on the project and choose Add / Add New Item. Under the templates, highlight SAP Connector Proxy. In the Name field, give our proxy the name TlaRfcServerSapProxy.sapwsdl. The name we use here will become the object type name for our SAP Server Proxy object we use when we build our RFC server code.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0005.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0005_thumb.jpg" border="0" alt="Image-0005" width="353" height="280" /></a></p>
<p>The TlaRfcSerfverSapProxy.sapwsdl file will be displayed in Design mode. Right click on the Design surface and choose properties. This displays properties of our SAP Connector Proxy. Change the Proxy Type to Server.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0022.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0022_thumb.jpg" border="0" alt="Image-0022" width="359" height="127" /></a></p>
<p>Now we need to add in a reference to our SAP host so that we can pull in the signature and object model for our RFC function. Open the Server Explorer windows and expand SAP / Application Servers. Right-click on Application Servers and choose add New Server. Enter in the connection information for your SAP host. Click OK.</p>
<p>Expand the newly added SAP Server and right-click on Functions. Choose Add New Function Filter. In the Name Filter field, enter *HELLO* . The * is used as a wild card. Click OK to display our Z_TLA_RFC_HELLO_WORLD function in the Server Explorer.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0007.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0007_thumb.jpg" border="0" alt="Image-0007" width="351" height="150" /></a></p>
<p>Highlight the Z_TLA_RFC_HELLO_WORLD function in the Server Explorer, and drag it onto the TlaRfcServerSapProxy.sapwsdl design surface. This will add the necessary function signatures and object type definitions to the project.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0028.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0028_thumb.jpg" border="0" alt="Image-0028" width="350" height="121" /></a></p>
<p>Now attempt to build the project. It will fail, as we have not yet created the code to implement our remote function. But, when we ran the build, the SAP Connector generated an implementation stub for our server method. A new class was automatically added to our project, named TlaRfcServerSapProxyImpl.cs.</p>
<p>However, we desire to implement our RFC server using Visual Studio 2008.</p>
<p>So, we will modify this code so it will build, and later we will override the implementation from our Visual Studio 2008 project.</p>
<p>If you double-click on the build error, it will take you to the offending line of code. All we need to do is set the result of Hello_World to some value.  To prevent confusion with our Visual Studio 2008 code, we will just return foo.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0029.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0029_thumb.jpg" border="0" alt="Image-0029" width="356" height="73" /></a></p>
<p>Now build the TlaRfcSapServerProxy project and it will create TlaRfcServerSapProxy.dll, which we will use in our Visual Studio 2008 project.</p>
<h3>Creating the RFC Server Project</h3>
<p>Using Visual Studio 2008, create a C# console project named TlaRfcServer. In the Solution Explorer, right-click on References and choose Add New Reference. Using the Browse tab, select both SAP.Connector.dll and Sap.Connector.Rfc.dll, typically found in C:\Program Files\SAP\SAP .Net Connector 2.0.</p>
<p>Add a reference to the TlaRfcServerSapProxy.dll created earlier, also using the Browse tab. Add a reference to System.Web.Services using the .Net tab.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0024.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0024_thumb.jpg" border="0" alt="Image-0024" width="352" height="375" /></a></p>
<p>In our C# code, we need to provide the code to implement our RFC function, which we do by inheriting from TlaRfcServerSapProxyImpl and overriding the Hello World function.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0030.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0030_thumb.jpg" border="0" alt="Image-0030" width="357" height="141" /></a></p>
<p>On Line 3, with have our ‘using’ directive to include our custom proxy.</p>
<p>On line 8, we are creating a new class named SAPProxy, which is derived from our TlaRfcServerSapProxyImpl class that was created in our Visual Studio 2003 class.</p>
<p>On line 12 is the override of the Z_Tla_Rfc_Hello_World call. We provide our functionality and place the result in the Hello_World variable.</p>
<p>That concludes our class that will implement the RFC functionality.</p>
<p>Now we will finish off our console program so that we can establish our code on the SAP Application Gateway and execute it.</p>
<p>To do this,we will pass in command line arguments to our Main routine. These arguments are passed to the SAPProxy constructor, which uses them to connect to the correct SAP Application Gateway.</p>
<p>Each of our SAP Proxy objects are hosted by an SAPServerHost object, which is part of the SAP .Net Connector. The SAPServerHost object governs the connection to the SAP host.</p>
<p>Once we create the SAPProxy object and attach it to an SAPServerHost, we can start the host and that will cause our program to register and be available on the SAP Application Gateway.</p>
<p>Our program will continue to be available on the SAP Application Gateway as long as we have it running (until we press the enter key, in our example).</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0031.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0031_thumb.jpg" border="0" alt="Image-0031" width="369" height="212" /></a></p>
<p>On lines 22-25, we instantiate our proxy and SAP host. Notice how we pass in the command line arguments to the SAPProxy constructor (line 25).</p>
<p>We start the proxy on line 29. After we have done that, we can go back to the SAP SM59 function and test our RFC destination. If things are working, that test will success.</p>
<p>Our code will continue to be available until we press enter at line 37, after which we stop the SAP host.</p>
<h4>Command Line Arguments</h4>
<p>The command line arguments consist of three parts, and are specified in the Visual Studio environment under the Debug tab of the Project Properties display.</p>
<p>The three parts are</p>
<p>-aProgram ID</p>
<p>-XPort</p>
<p>-GHost</p>
<p>The Program ID specified here must match the Program ID we used when creating the SAP RFC Destination. In our case this is specified as –aTlaRfcSrv.</p>
<p>The Port field tells SAP what TCP/IP port to use. This is specified by –XSAPGW00. The SAPGW part specifies port 3300, we add whatever the 00 is to get the actual port number. In our case we are using port number 3300, so we use –XSAPGW00. If we wanted port 3302, we would have used –XSAPGW02.</p>
<p>The Host field is the DNS name or IP address of the SAP server.</p>
<p>So, your parameters will be different but they will look something like –aTlaRfcSrv –XSAPGW00 –Ghostname</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0032.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0032_thumb.jpg" border="0" alt="Image-0032" width="359" height="214" /></a></p>
<p>Now build and run TlaRfcServer. A console window will appear.</p>
<p>Go back to SAP and bring up the SM59 screen. Expand the TCP/IP connections and find TLARFCSERVER. Double click that to display the definition. When you click the Test Connection button, you should see something like :</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0034.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0034_thumb.jpg" border="0" alt="Image-0034" width="359" height="316" /></a></p>
<p>which indicates a successful test of the RFC destination.</p>
<p>Now we need to test our actual RFC function. Bring up the SAP SE37 screen. In the Function Module name, enter Z_TLA_RFC_HELLO_WORLD, which matches the name of the function signature we created earlier.</p>
<p>Press the F8 key to test the function. The Test Function Module screen is displayed.</p>
<p>For the RFC Target sys, we use the RFC Function destination we created earlier, TLARFCSERVER.</p>
<p>For the name field, type WORLD. Press F8 to execute the RFC call.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0035.jpg" rel="shadowbox[post-4054];player=img;"><img style="border-width: 0px;" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Image0035_thumb.jpg" border="0" alt="Image-0035" width="360" height="213" /></a></p>
<p>This indicates a good test of our RFC function.</p>
<h4>Troubleshooting</h4>
<p>If things don’t work, check the following:</p>
<p>Program ID in RFC Destination matches –a parameter of TlaRfcServer command line.</p>
<p>Port number (SAPGW00) on TlaRfcSever comand line is set to correct port number.</p>
<p>Any firewalls in between the SAP host and the RFC Server program need to allow traffic in both directions over that port.</p>
<h2>Summary</h2>
<p>In this blog posting we have shown how you can call custom C# code from an SAP process.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/03/build-an-sap-rfc-server-using-the-sap-net-connector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Event Driven Batch Job</title>
		<link>http://www.dataxstream.com/2010/03/sap-event-driven-batch-job/</link>
		<comments>http://www.dataxstream.com/2010/03/sap-event-driven-batch-job/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 05:00:32 +0000</pubDate>
		<dc:creator>Steve Park</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP ABAP Performance]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[batch job]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[Steve Park]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=3839</guid>
		<description><![CDATA[When creating SAP batch jobs to run a program, most of the scheduling can be accomplished by setting a periodic time for when the job is executed.  For example, execute the job every 10min, 30min, or 1 hour.  But what if you needed more control of when a batch job was executed?

At one of my [...]]]></description>
			<content:encoded><![CDATA[<p>When creating SAP batch jobs to run a program, most of the scheduling can be accomplished by setting a periodic time for when the job is executed.  For example, execute the job every 10min, 30min, or 1 hour.  But what if you needed more control of when a batch job was executed?</p>
<p><span id="more-3839"></span></p>
<p>At one of my clients they had a requirement to run a batch job every 5 minutes.  Sometimes the batch job would take longer than 5 minutes to complete.  Thus, the same program would start in a new batch job before the previous batch job had time to finish.  The same program would collide with itself and cause issues.</p>
<p>It seems that SAP&#8217;s built-in job scheduler does not have a standard way of preventing overlapping job executions.  I was hoping to find a checkbox that would deny an execution of a job if it finds the same active job running, but that would be too easy.  However, SAP does have some different options in its toolbelt to satisfy this requirement.  The approach that I will demonstrate will use an event-driven approach to execute a SAP batch job.</p>
<p>First I will detail the High level overview of what needs to happen.  Then, after you understand the big picture, then I will go into more detail about how to code and configure this scenario.</p>
<h2>High level Overview</h2>
<p>Basically 2 SAP batch jobs are needed:</p>
<p>1) SAP Job #1</p>
<ul>
<li>This job will execute every 5min or so depending on your requirment and execute a simple custom program that will check the status of Job #2.
<ul>
<li>If the status of job Job #2 is <strong>not </strong>running, then the custom program will raise an event</li>
<li>If the status of Job #2 is running, then the custom program will do nothing</li>
</ul>
</li>
</ul>
<p>2) SAP Job #2</p>
<ul>
<li>This job is setup to start only when an event is raised
<ul>
<li>If an event is Raised from Job #1 then Job #2 will start.  Job #2 will contain the actual programs that you need to execute.</li>
</ul>
</li>
</ul>
<p>Sound easy enough?</p>
<h2>Step-By-Step Instructions</h2>
<p>Now let’s get to business and see what configuration and coding we need to do.</p>
<p>1)      First let’s define an Event.</p>
<p>Transaction SM64 – I defined my event as Z_JOB_START_XXXXX</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3850" title="pic1" src="http://www.dataxstream.com/wp-content/uploads/2010/01/pic1.png" alt="pic1" width="600" height="233" /></p>
<p style="text-align: center;">
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3851" title="2" src="http://www.dataxstream.com/wp-content/uploads/2010/01/2.png" alt="2" width="599" height="122" /></p>
<p>2)     Next,  Create simple Custom program ZJOB_CREATE_EVENT to Raise the Event.   This program will basically check if the specified job is currently running.  If it is not running then Raise an event which was created in the previous step above.   In my case, I will  raise event ‘Z_JOB_START_XXXXX’.   Create a variant here with the Event Name(Z_JOB_START_XXXXX) and the Job #2 name (ZJOB_XXXXX).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3852" title="3" src="http://www.dataxstream.com/wp-content/uploads/2010/01/3.png" alt="3" width="554" height="636" /></p>
<p style="text-align: center;">3)      For Job #1.  Basically set this job as Periodic Time driven job to run every 5 minutes or so with the custom program ZJOB_CREATE_EVENT.  Also make sure you include the variant with the Job #2 name and Event.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3853" title="4" src="http://www.dataxstream.com/wp-content/uploads/2010/01/4.png" alt="4" width="485" height="133" /></p>
<p>4)      For Job #2.  Define this job as an Event Driven batch job and define the actual program (I used test program ZSPTEST) that needs to be executed.  Specify the event Z_JOB_START_XXXXX that this job will be waiting for.  Also checkbox ‘Periodic job’ to schedule another event job.</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-3854" title="5" src="http://www.dataxstream.com/wp-content/uploads/2010/01/5-856x1024.png" alt="5" width="599" height="717" /></p>
<p style="text-align: center;">
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3855" title="6" src="http://www.dataxstream.com/wp-content/uploads/2010/01/6.png" alt="6" width="603" height="604" /></p>
<p>That’s it…Now the batch job will only execute if the same batch job is not running.</p>
<h2>Testing</h2>
<p>For testing purposes, I will demonstrate by manually execute program ZJOB_CREATE_EVENT to show that how this all works.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3856" title="7" src="http://www.dataxstream.com/wp-content/uploads/2010/01/7.png" alt="7" width="606" height="357" /></p>
<p>The event ZJOB_START_XXXXX has been raised by program ZJOB_CREATE_EVENT.  Now you can see the ZJOB_XXXXX is Active/Running</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3857" title="8" src="http://www.dataxstream.com/wp-content/uploads/2010/01/8.png" alt="8" width="391" height="145" /></p>
<p>During the time the job is active, I attempted to execute program ZJOB_CREATE_EVENT again.   This time, the program knows that the job is still active and, therefore, it does not raise the event.  The only time the event will be raised again is once the job is finished .</p>
<p>This is only one scenario in where an event driven batch job is needed.  Now you can see how you can utilize an event driven batch job to put some control around how some programs are executed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/03/sap-event-driven-batch-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Troubleshooting the Services Registry</title>
		<link>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/</link>
		<comments>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 02:07:45 +0000</pubDate>
		<dc:creator>Dave Morin</dc:creator>
				<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[David Morin]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[UDDI]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[XI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4441</guid>
		<description><![CDATA[Recently I set up the services registry for PI 7.1 EHP1 for a client of ours. Although it seemed like it would be a simple process, I ran into a 401 authorization issue and another issue where  web services were not publishing to the services registry. Looking online there are a lot of people who ran [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I set up the services registry for PI 7.1 EHP1 for a client of ours. Although it seemed like it would be a simple process, I ran into a 401 authorization issue and another issue where  web services were not publishing to the services registry. Looking online there are a lot of people who ran into the same issues as I did, so I am providing, here, the steps to perform if your services registry isn’t working.</p>
<p><span id="more-4441"></span></p>
<p>Please note that I was unable to find the wizard for setting it the Services registry in PI 7.1 EPH1, which means I did it manually.</p>
<h3><strong>Make sure everything is correct in the Services Registry Management </strong></h3>
<p>Go to the NWA (http://host:port/nwa).</p>
<p>Go to <em>SOA Management&gt; Technical Configuration&gt;Services Registry Management</em>.
In theory, there is nothing to do here, however I did specify the discovery URL api parameter as the hostname of the server (no port). If you have changed some settings, on the maintenance tab you can click reinitialize, which should reset any changes you have made back to the initial state.</p>
<h3><strong>Configure the ServicesRegistrySiPort</strong></h3>
<p>Go to <em>SOA Management&gt; Application and Scenario Communication&gt; Single Service Administration</em></p>
<p>Click the Consumer Proxies tab.</p>
<p>Search for &#8220;ServicesRegistrySi&#8221;.</p>
<p>Click on the result and click the Configuration Tab and click on ServicesRegistrySiPort.</p>
<p>The service endpoint name should be ServicesRegistrySiPort.  Don’t change it.</p>
<p>Click security.</p>
<p>You have to give it an http authentication. If you don&#8217;t give the authentication, you will eventually have problems like not being able to publish to the SR, even though you may be able to access the registry.</p>
<p>Click on the user ID/ password, click details, and input your http authentication parameters.</p>
<p style="text-align: center;"><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/ServiceRegistrySI1.png" rel="shadowbox[post-4441];player=img;"><img class="aligncenter size-full wp-image-4455" src="http://www.dataxstream.com/wp-content/uploads/2010/02/ServiceRegistrySI1.png" alt="" width="567" height="596" /></a></p>
<h3><strong>Configure the third party UDDI (Only if not using SAP’s UDDI)</strong></h3>
<p>If you are using a non-sap UDDI, you will need to go to <em>NWA&gt;Destination Template Management</em> and create a UDDI_DESTINATION and a CLASSIFICATION_DESTINATION to point to the respective urls of your uddi. Don’t forget to click security and select User ID/Password Authentication for both destinations. Otherwise, you will get a 401 not authorized error when you try to access the services registry&#8211;similar to if you mistyped your password at ServicesRegistrySiPort.</p>
<p style="text-align: center;"><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi.png" rel="shadowbox[post-4441];player=img;">
</a><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi.png" rel="shadowbox[post-4441];player=img;"></a><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi1.png" rel="shadowbox[post-4441];player=img;"><img class="aligncenter size-full wp-image-4453" src="http://www.dataxstream.com/wp-content/uploads/2010/02/3rd-party-uddi1.png" alt="" width="493" height="503" /></a></p>
<h3><strong>Security</strong></h3>
<p style="text-align: center;">Make sure that your user has  UDDI_TierN and SERVICES_REGISTRY_READ_WRITE authorizations or you will get a 401 not authorized error.  Of course. in your system you should use a technical user instead of your userid as which I did for the purposes of this blog.<a href="http://www.dataxstream.com/wp-content/uploads/2010/02/Security-Authorizations1.png" rel="shadowbox[post-4441];player=img;"><img class="aligncenter size-full  wp-image-4454" src="http://www.dataxstream.com/wp-content/uploads/2010/02/Security-Authorizations1.png" alt="" width="557" height="441" /></a></p>
<p>Please note, I did run into an issue where it suddenly stopped working a day everything was configured. All I can say is Gremlins. I switched the user to a technical user with the authorization listed above on the ServicesRegistrySiPort as well as on the destination templates and I haven’t had a problem since.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/troubleshooting-the-services-registry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP WM/IM Consultant</title>
		<link>http://www.dataxstream.com/2010/02/sap-wmim-consultant/</link>
		<comments>http://www.dataxstream.com/2010/02/sap-wmim-consultant/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:52:10 +0000</pubDate>
		<dc:creator>contentadmin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Jobs]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Inventory management]]></category>
		<category><![CDATA[SAP base solution]]></category>
		<category><![CDATA[SAP ECC 6.0]]></category>
		<category><![CDATA[SAP functional professional]]></category>
		<category><![CDATA[SAP WM/IM]]></category>
		<category><![CDATA[warehouse management]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4428</guid>
		<description><![CDATA[Location: Northern Virginia, USA
Start Date: April 2010
Duration: 7-8 months 
Description: 
DataXstream is searching for a highly qualified, experienced and deliverables focused SAP Functional Consultant with expertise in inventory management (IM) and warehouse management (IM) for a project starting in April 2010.  The position requires functional expertise with additional technical understanding and skills.  This position requires [...]]]></description>
			<content:encoded><![CDATA[<h2><strong>Location: Northern Virginia, USA</strong></h2>
<h3><strong>Start Date: April 2010</strong></h3>
<h4><strong>Duration: 7-8 months</strong><strong><strong> </strong></strong></h4>
<h4><strong><strong>Description</strong>: </strong></h4>
<p>DataXstream is searching for a highly qualified, experienced and deliverables focused SAP Functional Consultant with expertise in inventory management (IM) and warehouse management (IM) for a project starting in April 2010.  The position requires functional expertise with additional technical understanding and skills.  This position requires you to work with the client and the implementation team to design, configure, test and deploy an SAP-based solution.  The work will also identify and produce specifications for custom development objects.</p>
<p>The client expects to make informed decisions based on guidance from a proactive consultant who presents options for how to execute business processes and functions along with the pros and cons of those options.</p>
<p>The responsibilities of the position start after project inception and continue through go-live, user training and post go-live.  If you meet or exceed these standards and would like to be a part of a highly skilled SAP consulting team please attach your resume and your completed application form below.</p>
<p><span id="more-4428"></span></p>
<h4><strong>Required Qualifications:</strong></h4>
<ul>
<li>SAP functional professional with hands-on experience with SAP ECC 6.0 WM/IM implementations</li>
<li>At least 5 years implementation experience on medium to large scale SAP projects in complex, time-sensitive, global environments involving multiple countries and currencies, including US and Canada</li>
<li>At least three full SAP implementation lifecycles completed</li>
<li>Expertise in planning, organizing, implementing, and executing the following WM/IM functionalities:
<ul>
<li>SAP organizational element configuration (plant/site, company code, etc.)</li>
<li>End-to-end procure-to-pay process design, test and deployment</li>
<li>Goods movements (receipts and issues) and inter-company transfers</li>
<li>Cycle counting and physical inventory processes</li>
<li>International store-to-store transfers</li>
<li>Configuration of account determination procedures</li>
<li>Labeling requirements and processing</li>
<li>Experience with both lean WMS and full WMS functionality and recommending one over the other, including put away strategy, picking strategy, cross-docking, location strategy)</li>
<li> Import and export processing</li>
<li>Integration with sales order fulfillment processing</li>
<li>Integration with handheld devices</li>
<li>Master data creation and maintenance (especially materials/articles)</li>
<li>Experience creating and maintaining pricing procedures, including in accordance with international tax laws</li>
<li>Intercompany processing between company codes with different currencies and countries of operation</li>
<li>Experience with SAP Retail solution highly desirable</li>
<li>Project lifecycle experience: requirements gathering, blueprinting, construction, realization (including integration and regression testing), go-live and post-production support</li>
<li>Documenting use cases, requirements, activity diagrams, sequence diagrams, and data flow diagrams in a technical environment</li>
<li>Writing test plans and test cases</li>
<li>Assisting in identification, assessment, and resolution of complex problems within project scope</li>
<li>Bachelors degree in computing related field or 4 additional years relative work experience in lieu of degree</li>
<li>Excellent customer relationship skills</li>
<li>US citizens/permanent residents only</li>
</ul>
</li>
</ul>
<blockquote><p><strong>
<div class="mmf" id="mmf-f2-p4428-o1">
<form action="/feed/?p=4428#mmf-f2-p4428-o1" method="post" class="mmf-form" enctype="multipart/form-data"><input type="hidden" name="_mmf" value="2" /><input type="hidden" name="_mmf_success_url" value="http://www.dataxstream.com/dataxstream-job-submit-success/" /><input type="hidden" name="_mmf_failure_url" value="http://www.dataxstream.com/dataxstream-job-submit-failure/" /><input type="hidden" name="_mmf_unit_tag" value="mmf-f2-p4428-o1" /><input type="hidden" name="page_post_id" value="4428" /><input type="hidden" name="page_post_title" value="SAP WM/IM Consultant" /><input type="hidden" name="loggedin_user_email" value="" /><input type="hidden" name="loggedin_user_name" value="" />
<h2>Apply For This Job</h2>
<blockquote>
<h3>Personal Information</h3>
<ul>
<li><label for="name-first">First Name</label><span class="mmf-form-control-wrap name-first">&nbsp;<input type="text"  name="name-first" value="" id="NAME_FIRST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="name-last">Last Name</label><span class="mmf-form-control-wrap name-last">&nbsp;<input type="text"  name="name-last" value="" id="NAME_LAST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="city">City</label><span class="mmf-form-control-wrap city">&nbsp;<input type="text"  name="city" value="" id="CITY" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="state">State</label><span class="mmf-form-control-wrap state">&nbsp;<input type="text"  name="state" value="" id="REGION" class="mmf-validates-as-required" size="3" maxlength="3" /></span> *</li>
<li><label for="postal-code">Postal Code</label><span class="mmf-form-control-wrap postal-code">&nbsp;<input type="text"  name="postal-code" value="" id="POST_CODE1" class="mmf-validates-as-required" size="10" maxlength="10" /></span> *</li>
</ul>
<ul>
<h3>Contact Information</h3>
<li><label for="phone-number">Phone Number</label><span class="mmf-form-control-wrap phone-number">&nbsp;<input type="text"  name="phone-number" value="" id="TEL_NUMBER" class="mmf-validates-as-required" size="30" maxlength="30" /></span> *</li>
<li><label for="email2">Email</label><span class="mmf-form-control-wrap email2">&nbsp;<input type="text"  name="email2" value="" id="email2" class="mmf-validates-as-required" size="60" maxlength="80" /></span> *</li>
</ul>
<ul>
<h3>Online Information</h3>
<li><label for="website">Website</label><span class="mmf-form-control-wrap website">&nbsp;<input type="text"  name="website" value="" id="WEBSITE" size="60" maxlength="241" /></span></li>
<li><label for="blog">Blog</label><span class="mmf-form-control-wrap blog">&nbsp;<input type="text"  name="blog" value="" id="BLOG" size="60" maxlength="241" /></span></li>
<li><label for="linkedin">Linkedin Profile</label><span class="mmf-form-control-wrap linkedin-profile">&nbsp;<input type="text"  name="linkedin-profile" value="" id="LINKEDIN" size="60" maxlength="241" /></span></li>
</ul>
<ul>
<h3>Job Information</h3>
<li><label for="date-available-to-work">Date Available To Work* </label><span class="mmf-form-control-wrap date-available-to-work">&nbsp;<input type="text" id="date-available-to-work" name="date-available-to-work"  value="" length="10" /><img src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/calendar.png" class="calendarButton" onClick="displayDatePicker('date-available-to-work');" onMouseOver="this.style.cursor='pointer'" /> </span></li>
<li><label for="work-status">Work Status* </label><span class="mmf-form-control-wrap work-status"><select name="work-status" id="WORK_STATUS" class="mmf-validates-as-required"><option value="US Citizen">US Citizen</option><option value="Greencard Holder">Greencard Holder</option><option value="H1-B">H1-B</option><option value="Other">Other</option></select></span></li>
<li><label for="travel-preference">Travel Preference* </label><span class="mmf-form-control-wrap travel-preference"><select name="travel-preference" id="TRAVEL_PREFERENCE" class="mmf-validates-as-required"><option value="0%">0%</option><option value="25%">25%</option><option value="50%">50%</option><option value="75%">75%</option><option value="100%">100%</option></select></span></li>
<li><label for="willing-to-relocate">Willing To Relocate* </label><span class="mmf-form-control-wrap willing-to-relocate"><select name="willing-to-relocate" id="WILLING_TO_RELOCATE" class="mmf-validates-as-required"><option value="Yes">Yes</option><option value="No">No</option></select></span></li>
<li><label for="job-type">JobType*</label><span class="mmf-form-control-wrap job-type"><span id="JOB_TYPE" class="mmf-validates-as-required mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Full-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Full-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Part-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Part-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Full-time" />&nbsp;<span class="mmf-list-item-label">Full-time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Part-Time" />&nbsp;<span class="mmf-list-item-label">Part-Time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Contract" />&nbsp;<span class="mmf-list-item-label">Contract</span></span></span></span></li>
<h3>How Did You Hear About This Position?</h3>
<li><label for="candidate_source"></label><span class="mmf-form-control-wrap candidate_source"><span id="CANDIDATE_SOURCE" class="mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Twitter" />&nbsp;<span class="mmf-list-item-label">Twitter</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Facebook" />&nbsp;<span class="mmf-list-item-label">Facebook</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Linkedin" />&nbsp;<span class="mmf-list-item-label">Linkedin</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Craigslist" />&nbsp;<span class="mmf-list-item-label">Craigslist</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="DataXstream" />&nbsp;<span class="mmf-list-item-label">DataXstream</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Other" />&nbsp;<span class="mmf-list-item-label">Other</span></span></span></span>
<p><label for="candidate_source_other">Other</label><span class="mmf-form-control-wrap candidate_source_other">&nbsp;<input type="text"  name="candidate_source_other" value="" id="CANDIDATE_SOURCE_OTHER" size="40" maxlength="40" /></span></p>
</ul>
<h3>Additional Information</h3>
<p><label for="additional-information"></label><span class="mmf-form-control-wrap additional-information"><textarea name="additional-information" cols="40" rows="6"></textarea></span></p>
<h3>Submit Resume</h3>
<p><label for="submit-resume"></label><input type="hidden" id="uploaded-file-submit-resume" name="uploaded-file-submit-resume" value="none" />
				<input type="hidden" id="thumb_image-submit-resume">
				<iframe width="0" height="0" style="visibility: hidden">
						 </iframe>				
<iframe id="bfile" name="bfile" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/ajaxfileupload.php?ufiletypes=.doc, .pdf, .txt, .rtf&#038;maxfilesize=2000&#038;fieldname=submit-resume" scrolling="no" frameborder="0" width="350" height="30"></iframe>
* (Required Fields)
</p></blockquote>
<p><label for="submit-application"></label><input type="submit" value="Submit-Application" /> <img class="ajax-loader" style="visibility: hidden;" alt="ajax loader" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/ajax-loader.gif" /></p>
</form>
<div class="mmf-response-output"></div>
</div>
<p></strong></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/sap-wmim-consultant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BD53 Doesn’t Play Well With Others</title>
		<link>http://www.dataxstream.com/2010/02/bd53-doesn%e2%80%99t-play-well-with-others/</link>
		<comments>http://www.dataxstream.com/2010/02/bd53-doesn%e2%80%99t-play-well-with-others/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 16:03:32 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[Change Pointer]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4397</guid>
		<description><![CDATA[I recently posted a blog about how to implement field-level IDOC reduction for the HRMD_A message type.  In short, the standard SAP transaction to reduce IDOC segments and fields (transaction BD53) can&#8217;t be used because the field-level reduction is ignored by SAP.  My solution leveraged TVARV as a repository for the fields to clear.  Read the whole [...]]]></description>
			<content:encoded><![CDATA[<p>I recently posted a blog about how to implement field-level IDOC reduction for the HRMD_A message type.  In short, the standard SAP transaction to reduce IDOC segments and fields (transaction BD53) can&#8217;t be used because the field-level reduction is ignored by SAP.  My solution leveraged TVARV as a repository for the fields to clear.  Read the whole solution <a href="http://www.dataxstream.com/2010/02/how-to-implement-field-level-hrmd_a-reduction/" target="_blank">here</a>. A <a href="http://www.dataxstream.com/author/tyates/" target="_blank">colleague</a> of mine was very quick to point out that instead of using TVARV as the method for controlling which fields are cleared, I should have continued to leverage transaction BD53 for the IDOC reduction maintenance and changed my code to look up field level reductions in table TBD24.</p>
<p>What a great idea!  Too bad I hate this suggestion&#8230; and it&#8217;s all SAP&#8217;s fault!!</p>
<p><span id="more-4397"></span>You see, SAP transaction BD53 just does not play well with others.  My full HRMD_A solution used a custom filter object (transactions BD95 and BD59) and a custom outbound IDOC formatting function module to convert change pointers into IDOCs (transaction BD60).  The dirty little secret of transaction BD53 is that every time you save and update the IDOC reduction in transaction BD53, SAP goes and screws up a bunch of configuration  displaying a message that says <em>&#8220;Interface changed for message type &lt;your_message_type&gt;:  Settings reset&#8221;</em></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/00-Settings-Reset.jpg" rel="shadowbox[post-4397];player=img;"><img class="alignnone size-full wp-image-4398" title="00 Settings Reset" src="http://www.dataxstream.com/wp-content/uploads/2010/02/00-Settings-Reset.jpg" alt="" width="436" height="152" /></a></p>
<p><strong>Wait! What!?!</strong></p>
<p>What does that message even mean?  Well, that message is telling you in very cryptic language that SAP has gone and reset the settings in BD59 and BD60 to the SAP standard! So, every time the field reductions were updated, kiss your custom filter assignments and custom IDOC processing function goodbye!</p>
<p>Why couldn&#8217;t the message say:</p>
<blockquote><p>Hey Buddy! You know all that custom configuration you did to get your interface working just so? Well, its gone and you&#8217;re going to have to redo it all in the following transactions:
BD59
BD60
etc.</p></blockquote>
<p>I guess SAP is just far too polite.</p>
<p>So, be very cautious when you pair IDOC reduction with custom filter assignments and custom IDOC formatting function modules and be aware that <strong>every time</strong> the IDOC reduction is updated, you will need to go back in to reconfigure transactions BD59 and BD60.</p>
<p>For more information, see SAP <a href="https://service.sap.com/sap/bc/bsp/spn/sapnotes/index2.htm?numm=655321" target="_blank">OSS Note 655321</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/bd53-doesn%e2%80%99t-play-well-with-others/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Software Component</title>
		<link>http://www.dataxstream.com/2010/02/software-component/</link>
		<comments>http://www.dataxstream.com/2010/02/software-component/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:00:34 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ABAP development]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=3913</guid>
		<description><![CDATA[In my last blog entitled What’s in a Namespace, I discussed the value of developing deliverable custom solutions in a reserved unique namespace.    In this blog, I will discuss how a namespace is related to a software component.   I will also discuss the typical product lifecycle, the software component version, and the convention which we [...]]]></description>
			<content:encoded><![CDATA[<p>In my last blog entitled <a href="http://www.dataxstream.com/2010/01/namespace/">What’s in a Namespace</a>, I discussed the value of developing deliverable custom solutions in a reserved unique namespace.    In this blog, I will discuss how a namespace is related to a software component.   I will also discuss the typical product lifecycle, the software component version, and the convention which we use for establishing the software component version release increments.</p>
<p>DataXstream, an SAP Solution Partner, builds, packages, and distributes custom solutions for our clients.  We develop all of our custom add-on products in our own reserved and unique namespace /XSTREAM/.  But, we also need to reserve a separate unique namespace for each add-on product that we package and deliver using the SAP Add-on Assembly Kit.  So, we have a single development namespace /XSTREAM/ and a separate “packaging and delivery” namespace for each add-on product.  Why is that?</p>
<p><span id="more-3913"></span></p>
<h2>Software Component Name and Software Component Version</h2>
<p>Let’s begin with the software component name.  A software component name references a set of objects that are always delivered together.  It contains all of the programs, classes, function modules, tables, message classes, BADIs, basic types, transaction codes, … etc. – all of the objects which constitute a custom add-on product.   We try to make our software component names meaningful, so if we are building a product named PRODUCTA, we will try to create its software component name also as PRODUCTA.</p>
<p>This product has a product lifecycle which begins with its initial major release at version 1.0.  As bugs are discovered and fixed or as small enhancements are made, minor updates are released, let’s say at version 1.1, version 1.2, etc.  And after some serious product re-engineering, the product is then distributed as major release 2.0.  So, the software component name represents all of the objects which constitute the product, and the software component version represents the context of the product within its own product lifecycle.  The complete picture is provided by the combination of the software component name and the software component version.  For example, we might refer to PRODUCTA at release 1.3, which is different from PRODUCTA at release 1.2, which is different from PRODUCTB at release 2.5.</p>
<p>At DataXstream, we build and distribute several add-on products, so you can imagine that each product currently exists at a different release level within its own product lifecycle.  PRODUCTA may be at release level 1.3, while PRODUCTB may be at release level 2.5, and PRODUCTC may still be under construction and not yet released.  If we fix bugs in or make minor enhancements to PRODUCTA, then we need to bump the software component version of PRODUCTA (and only PRODUCTA) from release 1.3 to 1.4.</p>
<p>Let me add another degree of complexity to this picture.  We build and deliver the same add-on product to different SAP environments.  For example, we have clients who are running SAP in the 4.7, the ECC 5.0 and the ECC 6.0 environments.  Since these environments are different, it is possible that the same product may exist at different releases in its lifecycle across all of these three SAP environments.</p>
<p>To help us manage this complexity, the actual software component version release names that we actually use are a bit more descriptive than 1.0, 1.1, 2.5, etc.   This will be explained in detail later on in the section <strong>Maintaining the Software Component Version.</strong></p>
<h2>Maintaining the Software Component Name and its link to a Namespace</h2>
<p>The software component name is derived directly from a valid namespace that has already been registered on your SAP system.  It is, in fact, the namespace name without the two enclosing ‘/’ characters.  This establishes a relationship between the software component name and the namespace.  SAP checks and enforces this relationship when maintaining software component names.  We try to make our software component names meaningful, so if we are building an add-on product named PRODUCTA, we will reserve and register namespace /PRODUCTA/.   This allows us to then create the software component name PRODUCTA.</p>
<p>In SAP, we establish our software component name using transaction SSDC.  This is the Software Delivery Composer which is part of the SAP Add-on Assembly Kit.  From the initial screen in SSDC, the menu path is <strong>Environment -&gt; Create/Update Add-on Software Component</strong>.</p>
<p><img class="aligncenter size-full wp-image-4036" title="swcpic1" src="http://www.dataxstream.com/wp-content/uploads/2025/12/swcpic1.bmp" alt="swcpic1" /></p>
<p>On this next screen, you enter the software component name that you wish to maintain.  The software component name must be derived from an already-registered valid namespace.  For example, if you have already registered the namespace /ABCD/, then you can create a software component that is named ABCD.  SAP checks this relationship, and issues an error message if you try to create an invalid software component name that cannot be derived from an already existing namespace.</p>
<p><img class="aligncenter size-full wp-image-4033" title="swcpic2" src="http://www.dataxstream.com/wp-content/uploads/2010/01/swcpic2.bmp" alt="swcpic2" /></p>
<p>SAP allows as many as ten characters for the software component version or release name.  This allows us to build meaningful release names, which really helps to sort things out when you are dealing with many products over several SAP environments.  Here are a few demonstrative examples of how we build our release names:</p>
<table border="1" cellspacing="0" cellpadding="0" width="643">
<tbody>
<tr>
<td width="179" valign="top"><strong>Software Component Version or Release Name</strong></td>
<td width="86" valign="top"><strong>SAP Environment</strong></td>
<td width="378" valign="top"><strong>Description</strong></td>
</tr>
<tr>
<td width="179" valign="top">100_470</td>
<td width="86" valign="top">4.7</td>
<td width="378" valign="top">Version 1.0 first major release in SAP 4.7</td>
</tr>
<tr>
<td width="179" valign="top">101_470</td>
<td width="86" valign="top">4.7</td>
<td width="378" valign="top">Version 1.1 first  minor enhancement to version 1 in SAP 4.7</td>
</tr>
<tr>
<td width="179" valign="top">200_470</td>
<td width="86" valign="top">4.7</td>
<td width="378" valign="top">Version 2.0 second major release in SAP 4.7</td>
</tr>
<tr>
<td width="179" valign="top">103_500</td>
<td width="86" valign="top">ECC 5.0</td>
<td width="378" valign="top">Version 1.3 third minor enhancement to version 1 in SAP ECC 5.0</td>
</tr>
<tr>
<td width="179" valign="top">205_600</td>
<td width="86" valign="top">ECC 6.0</td>
<td width="378" valign="top">Version 2.5 fifth minor enhancement to version 2 in SAP ECC 6.0</td>
</tr>
</tbody>
</table>
<h2>Maintaining the Software Component Version</h2>
<p>On this screen, you enter the software component version or release name, and a description, then press the SAVE icon.</p>
<p><img class="aligncenter size-full wp-image-4034" title="swcpic3" src="http://www.dataxstream.com/wp-content/uploads/2010/01/swcpic3.bmp" alt="swcpic3" /></p>
<h2>Another Piece of the Puzzle – the Package</h2>
<p>We want each of our products to have its own unique software component, because each software component or product has its own unique set of objects and needs to exist at its own software component version within its own product lifecycle.  We need to allow all of the development objects for PRODUCTA to be at release 101_470 and all of the development objects for PRODUCTB to be at release 103_500. But, if we perform all of our development for all of our products in the /XSTREAM/ namespace, how do we assign all of the /XSTREAM/ development objects for PRODUCTA to software component PRODUCTA, and all of the /XSTREAM/ development objects for PRODUCTB to software component PRODUCTB?</p>
<p>The answer is in the package or development class.  When creating a package, you must specify the software component that the all of package objects will be assigned to.  The example below shows the creation of a package or development class /XSTREAM/PRODUCTA.  One of the parameters of the package is the software component.  We would assign software component PRODUCTA to this package.</p>
<p>So, when building the product PRODUCTA, we create many development objects (programs, classes, tables, etc.) in the /XSTREAM/ namespace, we assign those objects to the /XSTREAM/PRODUCTA package, which in turn, assigns those objects to the software component PRODUCTA which exists at a particular release level in its lifecycle.</p>
<p><img class="aligncenter size-full wp-image-4035" title="swcpic4" src="http://www.dataxstream.com/wp-content/uploads/2010/01/swcpic4.bmp" alt="swcpic4" /></p>
<h2>Summary</h2>
<p>To summarize, because of the dependencies between namespaces, software components, packages, and development objects, these actions must occur in the following order:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="50" valign="top"><strong>Order</strong></td>
<td width="449" valign="top"><strong>Action</strong></td>
<td width="139" valign="top"><strong>SAP Transaction</strong></td>
</tr>
<tr>
<td width="50" valign="top">1</td>
<td width="449" valign="top">Register the namespace on the development system</td>
<td width="139" valign="top">SE03</td>
</tr>
<tr>
<td width="50" valign="top">2</td>
<td width="449" valign="top">Maintain the software component and software component version</td>
<td width="139" valign="top">SSDC</td>
</tr>
<tr>
<td width="50" valign="top">3</td>
<td width="449" valign="top">Create a package</td>
<td width="139" valign="top">SPACKAGE or SE80</td>
</tr>
<tr>
<td width="50" valign="top">4</td>
<td width="449" valign="top">Develop objects and assign them to the package</td>
<td width="139" valign="top">Various</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/software-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Implement Field-Level HRMD_A Reduction</title>
		<link>http://www.dataxstream.com/2010/02/how-to-implement-field-level-hrmd_a-reduction/</link>
		<comments>http://www.dataxstream.com/2010/02/how-to-implement-field-level-hrmd_a-reduction/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 13:08:42 +0000</pubDate>
		<dc:creator>Craig Stasila</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[Craig Stasila]]></category>
		<category><![CDATA[HRMD_A]]></category>
		<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[SAP programming]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4289</guid>
		<description><![CDATA[I love ALE.  It is super-powerful and, once you get the hang of it, is a snap to configure.  Recently, I was setting up an HRMD_A interface for my client.  Everything was going smoothly until I ran into a requirement to filter out the social security number (PERID), birthdate (GBDAT), and gender (GESCH) for privacy [...]]]></description>
			<content:encoded><![CDATA[<p>I love ALE.  It is super-powerful and, once you get the hang of it, is a snap to configure.  Recently, I was setting up an HRMD_A interface for my client.  Everything was going smoothly until I ran into a requirement to filter out the social security number (PERID), birthdate (GBDAT), and gender (GESCH) for privacy reasons.  All of these fields are in segment E1P0002.  Initially, I thought that this requirement was easy enough to accomplish.  I just created a IDOC reduction in transaction BD53 and filtered out the three fields.  I soon found out that while entire segments were getting reduced from the IDOC as configured, the individually reduced fields were still showing up in the IDOC.  What&#8217;s going on?!?
<span id="more-4289"></span> Well, after some digging, I found <a href="https://service.sap.com/sap/bc/bsp/spn/sapnotes/index2.htm?numm=381766" target="_blank">OSS Note 381766</a>.  This note&#8217;s cause section states:</p>
<blockquote><p>The reduction at segment level (see also Note 301223) was facilitated in order to be able to copy message type HRMD_A. This involved setting the reduction at field level, which was not taken into account in the code because it is not possible to centrally determine which fields are mandatory and which are dependent for all country versions. In addition, for one info type there may several records for different periods of time, which may also cause a problem when you are reducing fields.</p></blockquote>
<p>So, in essence, field-level reduction isn&#8217;t supported for HRMD_A.  The solution supplied in the OSS note suggests creating user-exit code to filter out the unwanted fields.  I already have implemented BADI HRALE00OUTBOUND_IDOC to add some other processing logic (if you&#8217;re lucky I&#8217;ll cover that logic in this blog, too), so I have a module in which I can place the code. And while the code to loop through an IDOC and clear out all instances of E1P0002-PERID, E1P0002-GBDAT, and E1P0002-GESCH is very easy, I can&#8217;t help but think I can make the code more useful.  You see, I hate unitasking code.  I can see it now.  If I take the shortcut path and wrote the unitasking code to clear those 3 fields, the code won&#8217;t be in production for more than a month before the requirements change and now there is another field that needs to be filtered out as well.  With unitasking code, I would have to crack open the code, create a transport, unit test, transport to Q, integration test, wait for a transport window, blah, blah, blah.  Ugh!  What a waste of time for a minor change.  We can do better.</p>
<p>I decided to create a multi-tasking module that will work for HRMD_A message types.  The fields to be cleared will be stored in TVARV in the format &lt;SEGMENT&gt;-&lt;FIELD&gt; (e.g. E1P0002-PERID).  That way, whenever the HR functional team wanted to filter out a new field, all they had to do was to update a TVARV variable.</p>
<p>To implement the solution, I created a new method called CLEAR_IDOC_FIELDS in my class implementation for BADI HRALE00OUTBOUND_IDOC.  CLEAR_IDOC_FIELDS has the same method signature as IF_EX_HRALE00OUTBOUND_IDOC~IDOC_DATA_FOR_RECEIVER_MODIFY:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/00-Method-Signature.jpg" rel="shadowbox[post-4289];player=img;"><img class="alignnone size-full wp-image-4293" title="00 Method Signature" src="http://www.dataxstream.com/wp-content/uploads/2010/02/00-Method-Signature.jpg" alt="" width="605" height="163" /></a></p>
<p>The code is pretty straight forward.  To allow multiple interfaces to coexist in method CLEAR_IDOC_FIELDS, the TVARV variable that stores the fields to clear is in the format &#8216;ZHR_CLR_&#8217; concatenated with the IDOC message type.</p>
<pre style="background-color: #eaeaea; color: #222;">METHOD CLEAR_IDOC_FIELDS .
*----------------------------------------------------------------------*
* Class:     ZCL_IM_HRALE00OUTBOUNDIDOC                                *
* Method:    CLEAR_IDOC_FIELDS                                         *
* Author:    Craig Stasila                                             *
*----------------------------------------------------------------------*

  TYPES: BEGIN OF TY_FILTER,
           TABNAME   TYPE DFIES-TABNAME,
           FIELDNAME TYPE DFIES-FIELDNAME,
           POSITION  TYPE DFIES-POSITION,
           OFFSET    TYPE DFIES-OFFSET,
           LENG      TYPE DFIES-LENG,
        END OF TY_FILTER.

  DATA: WA_FILTER      TYPE TY_FILTER,
        LT_FILTER      TYPE TABLE OF TY_FILTER,
        LS_TABNAME     TYPE DDOBJNAME,
        LS_SAV_TABNAME TYPE DDOBJNAME.

  DATA: LS_NAME   TYPE TVARV-NAME,
        LT_TVARVC TYPE TABLE OF TVARVC,
        WA_TVARVC TYPE TVARVC.

  DATA: LT_DFIES TYPE TABLE OF DFIES,
        WA_DFIES TYPE DFIES.

  DATA: LR_SEGNAM TYPE RANGE OF EDIDD-SEGNAM,
        WR_SEGNAM LIKE LINE OF LR_SEGNAM.

  FIELD-SYMBOLS: &lt;FS&gt; TYPE LINE OF EDIDD_TT.

* Fields to clear are in variable
  CONCATENATE 'ZHR_CLR_' MESTYP INTO LS_NAME.

* Get list of fields to clear from TVARV
  SELECT * FROM TVARVC
    INTO TABLE LT_TVARVC
   WHERE NAME = LS_NAME
     AND TYPE = 'S'.

  CHECK SY-SUBRC = 0.

* Build list of fields to clear
  LOOP AT LT_TVARVC INTO WA_TVARVC.
    CLEAR WA_FILTER.
    SPLIT WA_TVARVC-LOW AT '-' INTO WA_FILTER-TABNAME WA_FILTER-FIELDNAME.
    CHECK SY-SUBRC = 0.

    COLLECT WA_FILTER INTO LT_FILTER.
  ENDLOOP.

  SORT LT_FILTER BY TABNAME.
  CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.

* Get field offsets
  LOOP AT LT_FILTER INTO WA_FILTER.
    LS_TABNAME = WA_FILTER-TABNAME.

    IF LS_TABNAME NE LS_SAV_TABNAME.

      CALL FUNCTION 'DDIF_NAMETAB_GET'
        EXPORTING
          TABNAME   = LS_TABNAME
        TABLES
          DFIES_TAB = LT_DFIES
        EXCEPTIONS
          NOT_FOUND = 1
          OTHERS    = 2.

      IF SY-SUBRC &lt;&gt; 0.
        CONTINUE.
      ENDIF.

      SORT LT_DFIES BY TABNAME FIELDNAME.

    ENDIF.

    LS_SAV_TABNAME = LS_TABNAME.

    READ TABLE LT_DFIES INTO WA_DFIES
         WITH KEY TABNAME   = WA_FILTER-TABNAME
                  FIELDNAME = WA_FILTER-FIELDNAME
         BINARY SEARCH.

    CHECK SY-SUBRC = 0.

    WA_FILTER-POSITION = WA_DFIES-POSITION.
    WA_FILTER-OFFSET   = WA_DFIES-OFFSET / CL_ABAP_CHAR_UTILITIES=&gt;CHARSIZE.
    WA_FILTER-LENG     = WA_DFIES-LENG.

    MODIFY LT_FILTER FROM WA_FILTER.

* Build segment name range
    IF SY-SUBRC = 0.
      WR_SEGNAM-SIGN   = 'I'.
      WR_SEGNAM-OPTION = 'EQ'.
      WR_SEGNAM-LOW    = WA_FILTER-TABNAME.
      COLLECT WR_SEGNAM INTO LR_SEGNAM.
    ENDIF.
  ENDLOOP.

* Loop at IDOC to clear fields
  LOOP AT IDOC_DATA ASSIGNING &lt;FS&gt;.
    IF &lt;FS&gt;-SEGNAM IN LR_SEGNAM.
      LOOP AT LT_FILTER INTO WA_FILTER WHERE TABNAME = &lt;FS&gt;-SEGNAM.
        CLEAR &lt;FS&gt;-SDATA+WA_FILTER-OFFSET(WA_FILTER-LENG).
      ENDLOOP.
    ENDIF.
  ENDLOOP.
ENDMETHOD.</pre>
<p>I also added the following code to IF_EX_HRALE00OUTBOUND_IDOC~IDOC_DATA_FOR_RECEIVER_MODIFY:</p>
<pre style="background-color: #eaeaea; color: #222;">* Clear IDOC fields
CALL METHOD ME-&gt;CLEAR_IDOC_FIELDS
  EXPORTING
     IDOC_CONTROL = IDOC_CONTROL
     RECEIVER     = RECEIVER
     MESTYP       = IDOC_CONTROL-MESTYP
  CHANGING
     IDOC_DATA    = IDOC_DATA.</pre>
<p>Finally, I maintained the following TVARV variable:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/02/01-TVARV-Variable.jpg" rel="shadowbox[post-4289];player=img;"><img class="alignnone size-full wp-image-4311" title="01 TVARV Variable" src="http://www.dataxstream.com/wp-content/uploads/2010/02/01-TVARV-Variable.jpg" alt="" width="611" height="362" /></a></p>
<p>That&#8217;s all it takes!  Now individual field values can be easily be filtered from outbound HRMD_A IDOCs!.</p>
<p><em>UPDATE: </em>My colleague informed me that instead of using TVARV, I should continue to use BD53 to manage the IDOC reduction and change my code to look up the field reductions in TBD24.  This would be a great idea, but my full HRMD_A solution uses custom filter objects and a custom IDOC formatting function module.  <a href="http://www.dataxstream.com/2010/02/bd53-doesn%E2%80%99t-play-well-with-others/" target="_self">And BD53 does not play well with these customizations.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/how-to-implement-field-level-hrmd_a-reduction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAP Upgrades &amp; Recycling Project Artifacts</title>
		<link>http://www.dataxstream.com/2010/02/sap-upgrades-recycling-project-artifacts/</link>
		<comments>http://www.dataxstream.com/2010/02/sap-upgrades-recycling-project-artifacts/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:47:34 +0000</pubDate>
		<dc:creator>Tim Cooper</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[SAP Testing]]></category>
		<category><![CDATA[SAP Upgrade Blog]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[sap upgrade]]></category>
		<category><![CDATA[Tim Cooper]]></category>
		<category><![CDATA[upgrade tips]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=3877</guid>
		<description><![CDATA[In my previous post on SAP upgrades I discussed how to get started on your project and to determine whether you are doing (ahem!) just a technical upgrade or intend to venture into deploying additional standard functionality, too.  In this post I’ll talk about how you can plan, anticipate and potentially accelerate some of the [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.dataxstream.com/2009/12/sap-upgrades-part1/">previous post</a> on SAP upgrades I discussed how to get started on your project and to determine whether you are doing (ahem!) <em>just</em> a technical upgrade or intend to venture into deploying additional standard functionality, too.  In this post I’ll talk about how you can plan, anticipate and potentially accelerate some of the execution activities to verify the upgrade is working.</p>
<p><span id="more-3877"></span></p>
<p>In short, if you have done a good job with your earlier implementation activities you should have a plethora of materials that can be reused.  Remember that after an upgrade your basic goal is to still be able to do what you could do on the previous release along with anything new you are introducing.  The way you execute business functions may be slightly different, but the underlying objective should be much the same.</p>
<blockquote><p><em>For more on SAP Upgrades download the white papers:</em></p>
<h3><a href="http://www.dataxstream.com/success-stories/whitepapers/white-paper-request/">SAP  Upgrade Checklist</a></h3>
<h3><strong><a href="http://www.dataxstream.com/success-stories/whitepapers/white-paper-request/">Customization  Risk Analysis in an SAP Upgrade Project</a></strong></h3>
</blockquote>
<h1>SAP Project Artifacts for Upgrades</h1>
<p>In short, don’t reinvent the proverbial wheel if you have one available to you already.</p>
<p>As you went through your initial SAP implementation and ongoing support work you probably generated piles of documentation and if you managed this well throughout the ongoing project lifecycle there is a good chance that you can reuse it.  In essence, the better job you have done identifying, capturing and testing the functionality used in your SAP system the easier it should be to reuse those artifacts to confirm continuity of business processes in the new release.  It sounds easy, but it is a rare project that consistently maintains and updates project documentation as functionality is introduced through point releases, production fixes, etc.</p>
<p>Whatever information you have is worth reviewing to see if it can be reused or at least used as a basis for building out the scope of testing for the upgrade.  In addition to the testing scope, you may have test plans, procedures and protocols that can be adapted.  Typical project artifacts for consideration include:</p>
<h2>Functional Scope</h2>
<p>Any SAP project starts with an initial functional scope which grows over time.  This is a great start point for defining what you need to test and circling back to find where you implemented non-standard functionality.  The standard functionality is likely to stand up to the upgrade and work straight away, whereas the non-standard stuff is where you want to pay special attention.  In this scope you want to make sure you capture any special periodic processing, e.g. daily, weekly, monthly, quarterly and annual processes to be tested</p>
<h2>Business Process Procedure Documents</h2>
<p>In conjunction with your functional scope, you probably have business process procedure documents that provide detailed step by step instructions on how to execute job functions.  You can use these as a tool to verify whether business process steps have changed.  In the event that the steps have changed it is clear what documentation needs to be updated.</p>
<h2>Technical Objects Scope</h2>
<p>Similar to the functional scope you should have a catalog of technical objects, e.g. reports, custom programs, user exits, SAP modifications (if you went down that path), etc.  This provides a list of objects to examine and evaluate as part of the upgrade.  This is a topic covered in depth in a <a href="http://www.dataxstream.com/2009/11/sap-upgrade-and-customizations-1/">separate blog posting</a>.</p>
<h2>Test Plans, Scripts, Procedures and Tracking</h2>
<p>Now that you have a functional and technical scope defined you can also revisit any test plans you have.  Testing comes in many flavors (click <a href="http://www.dataxstream.com/2009/10/sap-testing-terminology/">here</a> to discuss some flavors) and you probably have prior test artifacts for functional testing, end-to-end testing, security and authorizations testing, etc. which are worth a review.  On top of this any regression test scripts and automated test tools may be re-deployable in support of upgrade testing</p>
<p>On top of this most projects have established procedures for tracking issues, resolution steps, and progress reporting.</p>
<h2>Testing Organization</h2>
<p>In conjunction with your test plans you probably have documented roles and responsibilities, test team organization structure, escalation routes and sign-off procedures.  Again, reuse all that you can.</p>
<h2>Partner Systems, Interfaces, Batch Processing, Performance Metrics and System Outputs</h2>
<p>Very few SAP installations are islands of functionality, instead there are numerous partner systems that interface with SAP as well various outputs in both electronic and hardcopy forms.  An inventory of these items provides another checklist for testing and identifies both internal and external partner systems you need to include in your upgrade test cases.</p>
<p>System performance is often critical for interfaces and batch processing and any historical activity that identified and tested these elements provides a potential guide for ensuring no degradation of these things as a result of the upgrade.</p>
<h2>SAP Upgrade Go-Live</h2>
<p>Again the experience from other go-live events may form a good basis for building the upgrade production implementation plan.</p>
<p>Supplement these artifacts with additional content for new functionality and modify for anything that has changed because of the upgrade.</p>
<h1>Get Organized for Your SAP Upgrade</h1>
<p>By no means am I saying that everything you have built and accumulated over the lifetime of your SAP installation is going to lend itself easily to being recycled in support of your upgrade activities.  However, I am saying that you put in a lot of work to get to this point, you already have a good idea of how to test SAP, you know the quirks and nuances of your organization, so don’t feel like you need to start from scratch.  Cast a careful eye over what you have in your project inventory and see what make sense to apply and what to discard.</p>
<p>And if your SAP project inventory is not a robust as it could be, think about how to strengthen it ready for the next time you have go through an exercise like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/sap-upgrades-recycling-project-artifacts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Basis Consultant</title>
		<link>http://www.dataxstream.com/2010/02/sap-basis-consultant-job/</link>
		<comments>http://www.dataxstream.com/2010/02/sap-basis-consultant-job/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 15:00:21 +0000</pubDate>
		<dc:creator>contentadmin</dc:creator>
				<category><![CDATA[Jobs]]></category>
		<category><![CDATA[careers]]></category>
		<category><![CDATA[consulting career]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[IT consulting career]]></category>
		<category><![CDATA[IT consulting job]]></category>
		<category><![CDATA[IT jobs]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP career opportunities]]></category>
		<category><![CDATA[SAP careers]]></category>
		<category><![CDATA[sap consulting career]]></category>
		<category><![CDATA[SAP developer job]]></category>
		<category><![CDATA[SAP jobs]]></category>
		<category><![CDATA[SAP programming]]></category>
		<category><![CDATA[SAP programming job]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=2903</guid>
		<description><![CDATA[Location: US-Multiple Locations
Essential Duties and Responsibilities:

Responsible for      the installation, technical administration, tuning, and monitoring of SAP      ERP (&#38; related) software including R/3 4.7, ECC 5.0 &#38; 6.0,      BW, XI 3.0/PI 7.0 &#38; Solution Manager.  Also Oracle and Microsoft  [...]]]></description>
			<content:encoded><![CDATA[<h3>Location: US-Multiple Locations</h3>
<h3>Essential Duties and Responsibilities:</h3>
<ul>
<li>Responsible for      the installation, technical administration, tuning, and monitoring of SAP      ERP (&amp; related) software including R/3 4.7, ECC 5.0 &amp; 6.0,      BW, XI 3.0/PI 7.0 &amp; Solution Manager.  Also Oracle and Microsoft      SQL Server implementations on Windows platform</li>
<li>Expertise in      providing primary support for SAP R/3 related systems</li>
<li>Apply support      packages, and add-ons</li>
<li>Provide 24&#215;7      hour support for mission critical system software, possible on call      schedule</li>
<li>Effectively      communicate and interact with technical personnel in solving complex      business and technical problems</li>
<li>Ability to      complete tasks within critical timelines and work well in a high-energy      environment</li>
</ul>
<ul>
<li>Prepare status      reports and attend status meetings</li>
<li>Research and      provide directions for SAP      software corrections including SAP      OSS notes and SAP support      packages</li>
<li>Manage the SAP router configuration for SAP support</li>
<li>Design and      document security administration policies and procedures (SOP) for the      production environment and train the Helpdesk to perform basic operations      tasks on SAP</li>
<li>Creation of      client landscapes and client copies</li>
<li>Create and      maintain RFC connections</li>
</ul>
<p><span id="more-2903"></span></p>
<h3>Qualifications:</h3>
<ul>
<li>Bachelors degree      in computing related field</li>
<li>3+ years Basis      administration experience working in a complex SAP environment. R/3 and      middleware experience preferred</li>
<li>Experience      supporting and working in a project development and support environment      with ability to diagnose and solve problems quickly</li>
<li>Thorough      understanding and skill in database concepts (Oracle preferred)</li>
<li>Good coding,      testing, and documentation skills required</li>
<li>Have an      analytical mind and the ability to delve into detail, but also have an      interest in broader business issues</li>
<li>Exceptional communications      (written and oral), change leadership and customer service skills</li>
</ul>
<ul>
<li>Experience in      managing SAP environment      changes and upgrades</li>
<li>Forward looking      approach that anticipates overall project and engagement needs</li>
<li>Demonstrated      customer service skills/attitude</li>
<li>Demonstrated      value added expertise in special areas of SAP technology</li>
<li>Demonstrated      ability to author technical specifications, presentations, and other      documentation</li>
</ul>
<h3>Additional Requirements:</h3>
<ul>
<li>100% travel to      client sites may be required</li>
<li>US      citizens/permanent residents only</li>
</ul>
<div class="mmf" id="mmf-f2-p2903-o1">
<form action="/feed/?p=2903#mmf-f2-p2903-o1" method="post" class="mmf-form" enctype="multipart/form-data"><input type="hidden" name="_mmf" value="2" /><input type="hidden" name="_mmf_success_url" value="http://www.dataxstream.com/dataxstream-job-submit-success/" /><input type="hidden" name="_mmf_failure_url" value="http://www.dataxstream.com/dataxstream-job-submit-failure/" /><input type="hidden" name="_mmf_unit_tag" value="mmf-f2-p2903-o1" /><input type="hidden" name="page_post_id" value="2903" /><input type="hidden" name="page_post_title" value="SAP Basis Consultant" /><input type="hidden" name="loggedin_user_email" value="" /><input type="hidden" name="loggedin_user_name" value="" />
<h2>Apply For This Job</h2>
<blockquote>
<h3>Personal Information</h3>
<ul>
<li><label for="name-first">First Name</label><span class="mmf-form-control-wrap name-first">&nbsp;<input type="text"  name="name-first" value="" id="NAME_FIRST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="name-last">Last Name</label><span class="mmf-form-control-wrap name-last">&nbsp;<input type="text"  name="name-last" value="" id="NAME_LAST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="city">City</label><span class="mmf-form-control-wrap city">&nbsp;<input type="text"  name="city" value="" id="CITY" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="state">State</label><span class="mmf-form-control-wrap state">&nbsp;<input type="text"  name="state" value="" id="REGION" class="mmf-validates-as-required" size="3" maxlength="3" /></span> *</li>
<li><label for="postal-code">Postal Code</label><span class="mmf-form-control-wrap postal-code">&nbsp;<input type="text"  name="postal-code" value="" id="POST_CODE1" class="mmf-validates-as-required" size="10" maxlength="10" /></span> *</li>
</ul>
<ul>
<h3>Contact Information</h3>
<li><label for="phone-number">Phone Number</label><span class="mmf-form-control-wrap phone-number">&nbsp;<input type="text"  name="phone-number" value="" id="TEL_NUMBER" class="mmf-validates-as-required" size="30" maxlength="30" /></span> *</li>
<li><label for="email2">Email</label><span class="mmf-form-control-wrap email2">&nbsp;<input type="text"  name="email2" value="" id="email2" class="mmf-validates-as-required" size="60" maxlength="80" /></span> *</li>
</ul>
<ul>
<h3>Online Information</h3>
<li><label for="website">Website</label><span class="mmf-form-control-wrap website">&nbsp;<input type="text"  name="website" value="" id="WEBSITE" size="60" maxlength="241" /></span></li>
<li><label for="blog">Blog</label><span class="mmf-form-control-wrap blog">&nbsp;<input type="text"  name="blog" value="" id="BLOG" size="60" maxlength="241" /></span></li>
<li><label for="linkedin">Linkedin Profile</label><span class="mmf-form-control-wrap linkedin-profile">&nbsp;<input type="text"  name="linkedin-profile" value="" id="LINKEDIN" size="60" maxlength="241" /></span></li>
</ul>
<ul>
<h3>Job Information</h3>
<li><label for="date-available-to-work">Date Available To Work* </label><span class="mmf-form-control-wrap date-available-to-work">&nbsp;<input type="text" id="date-available-to-work" name="date-available-to-work"  value="" length="10" /><img src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/calendar.png" class="calendarButton" onClick="displayDatePicker('date-available-to-work');" onMouseOver="this.style.cursor='pointer'" /> </span></li>
<li><label for="work-status">Work Status* </label><span class="mmf-form-control-wrap work-status"><select name="work-status" id="WORK_STATUS" class="mmf-validates-as-required"><option value="US Citizen">US Citizen</option><option value="Greencard Holder">Greencard Holder</option><option value="H1-B">H1-B</option><option value="Other">Other</option></select></span></li>
<li><label for="travel-preference">Travel Preference* </label><span class="mmf-form-control-wrap travel-preference"><select name="travel-preference" id="TRAVEL_PREFERENCE" class="mmf-validates-as-required"><option value="0%">0%</option><option value="25%">25%</option><option value="50%">50%</option><option value="75%">75%</option><option value="100%">100%</option></select></span></li>
<li><label for="willing-to-relocate">Willing To Relocate* </label><span class="mmf-form-control-wrap willing-to-relocate"><select name="willing-to-relocate" id="WILLING_TO_RELOCATE" class="mmf-validates-as-required"><option value="Yes">Yes</option><option value="No">No</option></select></span></li>
<li><label for="job-type">JobType*</label><span class="mmf-form-control-wrap job-type"><span id="JOB_TYPE" class="mmf-validates-as-required mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Full-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Full-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Part-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Part-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Full-time" />&nbsp;<span class="mmf-list-item-label">Full-time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Part-Time" />&nbsp;<span class="mmf-list-item-label">Part-Time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Contract" />&nbsp;<span class="mmf-list-item-label">Contract</span></span></span></span></li>
<h3>How Did You Hear About This Position?</h3>
<li><label for="candidate_source"></label><span class="mmf-form-control-wrap candidate_source"><span id="CANDIDATE_SOURCE" class="mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Twitter" />&nbsp;<span class="mmf-list-item-label">Twitter</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Facebook" />&nbsp;<span class="mmf-list-item-label">Facebook</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Linkedin" />&nbsp;<span class="mmf-list-item-label">Linkedin</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Craigslist" />&nbsp;<span class="mmf-list-item-label">Craigslist</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="DataXstream" />&nbsp;<span class="mmf-list-item-label">DataXstream</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Other" />&nbsp;<span class="mmf-list-item-label">Other</span></span></span></span>
<p><label for="candidate_source_other">Other</label><span class="mmf-form-control-wrap candidate_source_other">&nbsp;<input type="text"  name="candidate_source_other" value="" id="CANDIDATE_SOURCE_OTHER" size="40" maxlength="40" /></span></p>
</ul>
<h3>Additional Information</h3>
<p><label for="additional-information"></label><span class="mmf-form-control-wrap additional-information"><textarea name="additional-information" cols="40" rows="6"></textarea></span></p>
<h3>Submit Resume</h3>
<p><label for="submit-resume"></label><input type="hidden" id="uploaded-file-submit-resume" name="uploaded-file-submit-resume" value="none" />
				<input type="hidden" id="thumb_image-submit-resume">
				<iframe width="0" height="0" style="visibility: hidden">
						 </iframe>				
<iframe id="bfile" name="bfile" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/ajaxfileupload.php?ufiletypes=.doc, .pdf, .txt, .rtf&#038;maxfilesize=2000&#038;fieldname=submit-resume" scrolling="no" frameborder="0" width="350" height="30"></iframe>
* (Required Fields)
</p></blockquote>
<p><label for="submit-application"></label><input type="submit" value="Submit-Application" /> <img class="ajax-loader" style="visibility: hidden;" alt="ajax loader" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/ajax-loader.gif" /></p>
</form>
<div class="mmf-response-output"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/sap-basis-consultant-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP SD Functional Consultant</title>
		<link>http://www.dataxstream.com/2010/02/sap-sd-functional-consultant/</link>
		<comments>http://www.dataxstream.com/2010/02/sap-sd-functional-consultant/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:51:40 +0000</pubDate>
		<dc:creator>contentadmin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Career Opportunity]]></category>
		<category><![CDATA[SAP ECC]]></category>
		<category><![CDATA[SAP ECC 6.0 SD Impletmenations]]></category>
		<category><![CDATA[SAP Functional Consultant]]></category>
		<category><![CDATA[SD]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4192</guid>
		<description><![CDATA[Location: Northern Virginia, USA
Start Date: April 2010
Duration: 7-8 months
Description:
DataXstream is searching for a highly qualified, experienced and deliverables focused SAP Functional Consultant with expertise in SD for an upcoming project in April 2010.  The position requires functional expertise with additional technical understanding and skills.  This position requires you to work with the client and the [...]]]></description>
			<content:encoded><![CDATA[<h2 style="text-align: left;"><strong>Location: Northern Virginia, USA</strong></h2>
<h3 style="text-align: left;"><strong>Start Date: April 2010</strong></h3>
<h4 style="text-align: left;"><strong>Duration: 7-8 months</strong></h4>
<h3><strong>Description</strong>:</h3>
<p>DataXstream is searching for a highly qualified, experienced and deliverables focused SAP Functional Consultant with expertise in SD for an upcoming project in April 2010.  The position requires functional expertise with additional technical understanding and skills.  This position requires you to work with the client and the implementation team to design, configure, test and deploy an SAP based solution.  The work will also identify and produce specifications for custom development objects.</p>
<p>The client expects to make informed decisions based on guidance from a proactive consultant who presents options for how to execute business processes and functions along with the pros and cons of those options.</p>
<p>The responsibilities of the position start at project inception and continue through go-live, user training and post go-live.  If you meet or exceed these standards and would like to be a part of a highly skilled SAP consulting team please attach your resume and your completed application form below.</p>
<p><span id="more-4192"></span><strong>Required Qualifications:</strong></p>
<ul>
<li>SAP functional professional with hands on experience with SAP ECC 6.0 SD implementations</li>
<li>At least 5 years SD configuration experience on medium to large scale SAP ECC projects in complex, time-sensitive, global environments involving multiple countries and currencies, including US and Canada</li>
<li>At least three full SAP implementation lifecycles completed</li>
<li>Expertise in planning, organizing, implementing, and executing the following SD functionalities:
<ul>
<li>SAP organizational element configuration (sales organization, company code, etc.)</li>
<li>Sales order fulfillment processing, including but not limited to: quotes, customer orders, intercompany orders, transfer orders (store-to-store, site -to-site), samples, returns</li>
<li>Sales tracking by associate and commissions processing</li>
<li>Available to promise processing</li>
<li>Integration with logistics processing, e.g. delivery processing</li>
<li>Invoicing processing and integration with FI</li>
<li>Payment card processing (credit and debit cards)</li>
<li>Master data creation and maintenance (customers and materials/articles)</li>
<li>Configuration of account determination procedures</li>
<li>Creation and maintenance of access sequences</li>
<li>Retail pricing procedure maintenance</li>
<li>Output determination</li>
<li>Intercompany processing between company codes with different currencies and countries of operation</li>
<li>US and Canadian tax processing</li>
<li>Experience with SAP Retail solution highly desirable</li>
<li>Project lifecycle experience: requirements gathering, blueprinting, construction, realization (including testing), go-live and post-production support</li>
<li>Documenting Use Cases, Requirements, Activity Diagrams, Sequence Diagrams, and Data Flow Diagrams in a technical environment</li>
<li>Writing test plans and test cases</li>
<li>Assisting in identification, assessment, and resolution of complex problems within project scope</li>
<li>Bachelors degree in computing related field or 4 additional years relative work experience in lieu of degree</li>
<li>Excellent customer relationship skills</li>
<li>US citizens/permanent residents only</li>
</ul>
</li>
</ul>
<div class="mmf" id="mmf-f2-p4192-o1">
<form action="/feed/?p=4192#mmf-f2-p4192-o1" method="post" class="mmf-form" enctype="multipart/form-data"><input type="hidden" name="_mmf" value="2" /><input type="hidden" name="_mmf_success_url" value="http://www.dataxstream.com/dataxstream-job-submit-success/" /><input type="hidden" name="_mmf_failure_url" value="http://www.dataxstream.com/dataxstream-job-submit-failure/" /><input type="hidden" name="_mmf_unit_tag" value="mmf-f2-p4192-o1" /><input type="hidden" name="page_post_id" value="4192" /><input type="hidden" name="page_post_title" value="SAP SD Functional Consultant" /><input type="hidden" name="loggedin_user_email" value="" /><input type="hidden" name="loggedin_user_name" value="" />
<h2>Apply For This Job</h2>
<blockquote>
<h3>Personal Information</h3>
<ul>
<li><label for="name-first">First Name</label><span class="mmf-form-control-wrap name-first">&nbsp;<input type="text"  name="name-first" value="" id="NAME_FIRST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="name-last">Last Name</label><span class="mmf-form-control-wrap name-last">&nbsp;<input type="text"  name="name-last" value="" id="NAME_LAST" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="city">City</label><span class="mmf-form-control-wrap city">&nbsp;<input type="text"  name="city" value="" id="CITY" class="mmf-validates-as-required" size="40" maxlength="40" /></span> *</li>
<li><label for="state">State</label><span class="mmf-form-control-wrap state">&nbsp;<input type="text"  name="state" value="" id="REGION" class="mmf-validates-as-required" size="3" maxlength="3" /></span> *</li>
<li><label for="postal-code">Postal Code</label><span class="mmf-form-control-wrap postal-code">&nbsp;<input type="text"  name="postal-code" value="" id="POST_CODE1" class="mmf-validates-as-required" size="10" maxlength="10" /></span> *</li>
</ul>
<ul>
<h3>Contact Information</h3>
<li><label for="phone-number">Phone Number</label><span class="mmf-form-control-wrap phone-number">&nbsp;<input type="text"  name="phone-number" value="" id="TEL_NUMBER" class="mmf-validates-as-required" size="30" maxlength="30" /></span> *</li>
<li><label for="email2">Email</label><span class="mmf-form-control-wrap email2">&nbsp;<input type="text"  name="email2" value="" id="email2" class="mmf-validates-as-required" size="60" maxlength="80" /></span> *</li>
</ul>
<ul>
<h3>Online Information</h3>
<li><label for="website">Website</label><span class="mmf-form-control-wrap website">&nbsp;<input type="text"  name="website" value="" id="WEBSITE" size="60" maxlength="241" /></span></li>
<li><label for="blog">Blog</label><span class="mmf-form-control-wrap blog">&nbsp;<input type="text"  name="blog" value="" id="BLOG" size="60" maxlength="241" /></span></li>
<li><label for="linkedin">Linkedin Profile</label><span class="mmf-form-control-wrap linkedin-profile">&nbsp;<input type="text"  name="linkedin-profile" value="" id="LINKEDIN" size="60" maxlength="241" /></span></li>
</ul>
<ul>
<h3>Job Information</h3>
<li><label for="date-available-to-work">Date Available To Work* </label><span class="mmf-form-control-wrap date-available-to-work">&nbsp;<input type="text" id="date-available-to-work" name="date-available-to-work"  value="" length="10" /><img src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/calendar.png" class="calendarButton" onClick="displayDatePicker('date-available-to-work');" onMouseOver="this.style.cursor='pointer'" /> </span></li>
<li><label for="work-status">Work Status* </label><span class="mmf-form-control-wrap work-status"><select name="work-status" id="WORK_STATUS" class="mmf-validates-as-required"><option value="US Citizen">US Citizen</option><option value="Greencard Holder">Greencard Holder</option><option value="H1-B">H1-B</option><option value="Other">Other</option></select></span></li>
<li><label for="travel-preference">Travel Preference* </label><span class="mmf-form-control-wrap travel-preference"><select name="travel-preference" id="TRAVEL_PREFERENCE" class="mmf-validates-as-required"><option value="0%">0%</option><option value="25%">25%</option><option value="50%">50%</option><option value="75%">75%</option><option value="100%">100%</option></select></span></li>
<li><label for="willing-to-relocate">Willing To Relocate* </label><span class="mmf-form-control-wrap willing-to-relocate"><select name="willing-to-relocate" id="WILLING_TO_RELOCATE" class="mmf-validates-as-required"><option value="Yes">Yes</option><option value="No">No</option></select></span></li>
<li><label for="job-type">JobType*</label><span class="mmf-form-control-wrap job-type"><span id="JOB_TYPE" class="mmf-validates-as-required mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Full-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Full-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Intern (Part-Time)" />&nbsp;<span class="mmf-list-item-label">Intern (Part-Time)</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Full-time" />&nbsp;<span class="mmf-list-item-label">Full-time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Part-Time" />&nbsp;<span class="mmf-list-item-label">Part-Time</span></span><span class="mmf-list-item"><input type="checkbox" name="job-type[]" value="Contract" />&nbsp;<span class="mmf-list-item-label">Contract</span></span></span></span></li>
<h3>How Did You Hear About This Position?</h3>
<li><label for="candidate_source"></label><span class="mmf-form-control-wrap candidate_source"><span id="CANDIDATE_SOURCE" class="mmf-checkbox"><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Twitter" />&nbsp;<span class="mmf-list-item-label">Twitter</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Facebook" />&nbsp;<span class="mmf-list-item-label">Facebook</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Linkedin" />&nbsp;<span class="mmf-list-item-label">Linkedin</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Craigslist" />&nbsp;<span class="mmf-list-item-label">Craigslist</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="DataXstream" />&nbsp;<span class="mmf-list-item-label">DataXstream</span></span><span class="mmf-list-item"><input type="checkbox" name="candidate_source[]" value="Other" />&nbsp;<span class="mmf-list-item-label">Other</span></span></span></span>
<p><label for="candidate_source_other">Other</label><span class="mmf-form-control-wrap candidate_source_other">&nbsp;<input type="text"  name="candidate_source_other" value="" id="CANDIDATE_SOURCE_OTHER" size="40" maxlength="40" /></span></p>
</ul>
<h3>Additional Information</h3>
<p><label for="additional-information"></label><span class="mmf-form-control-wrap additional-information"><textarea name="additional-information" cols="40" rows="6"></textarea></span></p>
<h3>Submit Resume</h3>
<p><label for="submit-resume"></label><input type="hidden" id="uploaded-file-submit-resume" name="uploaded-file-submit-resume" value="none" />
				<input type="hidden" id="thumb_image-submit-resume">
				<iframe width="0" height="0" style="visibility: hidden">
						 </iframe>				
<iframe id="bfile" name="bfile" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/ajaxfileupload.php?ufiletypes=.doc, .pdf, .txt, .rtf&#038;maxfilesize=2000&#038;fieldname=submit-resume" scrolling="no" frameborder="0" width="350" height="30"></iframe>
* (Required Fields)
</p></blockquote>
<p><label for="submit-application"></label><input type="submit" value="Submit-Application" /> <img class="ajax-loader" style="visibility: hidden;" alt="ajax loader" src="http://www.dataxstream.com/wp-content/plugins/mm-forms/images/ajax-loader.gif" /></p>
</form>
<div class="mmf-response-output"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/02/sap-sd-functional-consultant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
