NCo 3.0 Error: Could not load file or assembly ‘sapnco_utils.dll’ or one of its dependencies

Recently I was deploying a Windows Service that uses SAP .NET Connector 3.0 on a fresh install of Windows (the specific version isn’t important, but it was Windows Server 2003).  I built my installer package, installed .NET Framework 4, and installed my program.  When it came time to execute my service, I received the following error message.

System.TypeInitializationException: The type initializer for
  'SAP.Middleware.Connector.RfcServerManager' threw an exception.
  ---> System.TypeInitializationException: The type initializer for
  'SAP.Middleware.Connector.RfcConfigParameters' threw an exception.
  ---> System.IO.FileNotFoundException: Could not load file or
  assembly 'sapnco_utils.dll' or one of its dependencies.
  The specified module could not be found.
at SAP.Middleware.Connector.RfcConfigParameters..cctor()
--- End of inner exception stack trace ---
at SAP.Middleware.Connector.RfcConfigParameters.Initialize()
at SAP.Middleware.Connector.RfcServerManager..cctor()
--- End of inner exception stack trace ---
at SAP.Middleware.Connector.RfcServerManager
.GetServer(String serverName, Type[] rfcFunctionHandlers)
at DataXstream.AwesomeProduct.InitializeSap()

What was really confounding was that the Fusion Log reported no .NET binding errors! So, what was going on?

[Read more...]

Five Tools all Junior SAP ABAP Developers Should Know

For those of you new to SAP, be you technical or functional, her are a five tools you need to know to successfully navigate through the SAP landscape.

*Disclaimer* These tools will not provide the answer to your problems, but they should give you insight and the ability to solve your problem.

[Read more...]

SAP NCo 3.0: How-to Pass Table Parameters to SAP RFC

Since I posted step-by-step instructions on how to build an NCo RFC client, the  request I most often get is how to populate and pass a table of data as a parameter to an SAP RFC.  In this blog, I will walk through the steps to pass a table parameter to from a .NET program to SAP via NCo 3.0.  I will not be covering the basics of how to set up NCo 3.0 as a RFC client as I have already covered that.

[Read more...]

SAP Tip Quick Hit: Location of saplogon.ini in Windows 7

Ugh.  I spent the last 10 minutes searching for saplogon.ini!!

I need to copy it to a Virtual Machine so I don’t have to type in all of the SAP system information.  As many of you know, SAP saves SAP Logon Pad entries in a file called saplogon.ini.  For many releases, this file resided in the C:\Windows directory.  Since Microsoft has began enforcing their improved security model, SAP has adapted and, therefore, moved the location of saplogon.ini to a directory that I can never seem to remember.  I have SAPGUI 7.20 running on Windows 7 (x64) and I find myself scouring my hard drive in search of saplogon.ini!  I have 38 versions of the file, but which is the right version? Don’t worry, I finally found the right one. But I have performed this search at least three times in the past year! I seem to never make a point to note the location of saplogon.ini.  I can’t be alone in this search.

So for future me and you, dear internet community, here is the location of saplogon.ini file in Windows 7 for SAPGUI 720:

[Read more...]

Web Dynpro Basics: Context and Binding

This is for those who are new to Web Dynpro programming. Here is an explanation of how to set up a Web Dynpro application using the context and binding the context to User Interface (UI) elements of the application. This is only a basic explanation to help set a foundation for understanding Web Dynpro programming. The 3 basic elements of a Web Dynpro application are windows, views and the context. The window is simply a container for a view. To assign a view to a window expand the views and windows under the section labeled ‘Object Name.’ Double click on a window and then drag and drop the view into the window. [Read more...]

It’s SAP Upgrade Time! Do You Know Where Your Customizations Are? Part 3.

In my final post on this topic, I will discuss some of the techniques that I use to “discover” information about customizations in an SAP system, even in the absence of any documentation.  The information available to be discovered may include such details as the object name, object type, user name of the person who made the last modification, date and time of the last modification, usage statistics, where-used, and for code-based objects, even the versions and their code differences.

[Read more...]

It’s SAP Upgrade Time! Do You Know Where Your Customizations Are? Part 2.

In my last post on this topic, I discussed two negative effects of customizations in an upgrade project – risk and cost.  I also discussed an obvious reason to eliminate unnecessary customization – the mitigation of risk and cost.

In this post, we will look at some of the customization areas which add risk and the cost to an upgrade project.

[Read more...]

Build an RFC Client with NCo 3.0 – A Step-By-Step Guide

The SAP .Net Connector 3.0 (NCo 3.0) offers many improvements over the 2.0 version of that product. Unfortunately, SAP no longer offers example .NET code.  This blog attempts to fill that gap by describing how to build a simple RFC Client using SAP .Net Connector (NCo) 3.0.  Click here to request a .zip file containing a copy of the source code.

The sample program displays details about companies defined by SAP. There are two BAPI calls involved, BAPI_COMPANY_GETLIST and BAPI_COMPANY_GETDETAIL.
Along with the SAP .Net Connector 3.0, we are using Microsoft Visual Studio 2010 and the Microsoft .Net Framework 4.0 to build our sample.  Prior to starting, you will have to download and install NCo 3.0 (OSS login required).
[Read more...]

SAP Data Migration – Dealing With Fallout (Part 3)

One of the inevitable aspects of data migration is dealing with fallout from automated data loads.  Typically, this process includes identifying the data that will not load, analyzing the error messages to determine the root cause, formatting a readable report that can be used as a tool in the cleanup process, and fixing the root cause of the problem so that it does not happen again.

Why the data will not load correctly.

There is a litany of reasons why some data records will load correctly while others will not.  Here is a list of some common root causes:


  1. Poor quality legacy data.
    Legacy systems which are not as tightly integrated as SAP, and are not under master data control allow the end user a bit of freedom when entering data.  A zip code may contain too little or too many characters; the email address is not properly formatted; numeric fields have transposed digits; various forms of abbreviations (especially in the city field), a quantity of zero (0) permitted by the legacy system and uploaded into a field where SAP will not accept a quantity of 0 and even simple misspellings  all can cause stringent validation checks to trigger an error and prevent the record from loading at all.  A more sinister type of error occurs when the data is functionally incorrect, but good enough to pass all of the SAP validity checks.  In this case, the data record will technically load into SAP, but will not be functionally correct.  Duplicate customers, duplicate vendors, and the data entry error for a quantity of 1000 instead of 100, and the wrong pricing condition applied to a sales order line are examples of this scenario.



  1. Functional configuration and supporting data effects.
    Many times I have watched the load statistics for a data object plummet from near 100% in the cycle two test load to near 0% in the cycle three test load.  This is very unnerving to the client because the cycle three test load is getting rather close to the go-live date, and “by the way, shouldn’t the statistics be getting better rather than worse?”  Functional configuration changes can wreak havoc on any data load.  Flipping the switch on a data field from optional to required; turning on batch management or serialization for materials for the first time; changes in the handling of tax, tax codes, and tax jurisdiction codes; that account determination entry that is missing or not set up correctly; a missing unit of measure or unit or measure conversion factor; the storage location in the upload file which does not exist in SAP – any of these can cause a load to drop mostly or completely onto the floor.While change is inevitable on any project, it is important to control and communicate the change so that the downstream impact can be recognized and understood.   Controlled change and communication always works better than total surprise.  Perhaps if we all know ahead of time about that data field that is now required, we can impose a requirement on the data extract side to make sure that the data field is populated before it enters the upload file.
  2. Additional data in the upload file.
    Inserting a new field in the middle of the upload file data structure might be necessary for the business to close a gap, but if that change is not communicated to the technical team so that appropriate adjustments can be made to the load object’s input structures and processing logic, the new data will surely never load, and may cause misalignment of the data fields which follow it in the upload structure.

[Read more...]

Coming Soon: SAP .NET Connector (NCo) 3.0

SAP is announcing a new version of SAP Connector for Microsoft .NET 3.0 (now called “NCo 3.0″). A beta program for selected customers and partners is currently underway (Q3, 2010) with the general release of the software coming soon thereafter.  I will highlight some of the major differences between the SAP Connector for Microsoft .NET 2.0 and NCo 3.0 (besides the obvious, and much-needed name-shortening).

EDITOR’S NOTE: NCo 3.0 has now been released.  Read more details here.

[Read more...]