cancel
Showing results for 
Search instead for 
Did you mean: 

Bapi_Salesorder_Createfromdat2: not set an instance

Former Member
0 Kudos

Hello all,

I have a problem when I use the BAPI function :

Bapi_Salesorder_Createfromdat2

I code in C# in MS Visual Studio .Net 2003

In my code, I create all connector passed by argument in the BAPI function :

Ex :

protected PortalDevelopment.ConnecteurSAP.BAPISDHD1 OrderHeaderIn ;

...

OrderHeaderIn = new PortalDevelopment.ConnecteurSAP.BAPISDHD1() ;

...

I affecte :

OrderHeaderIn.Doc_Type = TextboxTypeCmdeClient.Text ;

OrderHeaderIn.Sales_Org = TextBoxOrgCom.Text ;

OrderHeaderIn.Distr_Chan = TextBoxCanalDistrib.Text ;

OrderHeaderIn.Division = TextboxSecteurActivite.Text ;

OrderHeaderIn.Purch_Date = "08.11.2005" ;

OrderHeaderIn.Purch_No_C = TextboxNumCmde.Text ;

NumCustomer.Partn_Numb = TextBoxDonneurOrdre.Text ;

NumCustomer.Partn_Role = "WE" ;

OrderPartners.Add(NumCustomer) ;

NumCustomer.Partn_Numb = TextBoxReceptionnaire.Text ;

OrderPartners.Add(NumCustomer) ;

ItemOrder.Material = "M-01" ;

OrderItemsIn.Add(ItemOrder) ;

OrderSchedulesIn0.Req_Qty = "1" ;

OrderSchedulesIn.Add(OrderSchedulesIn0) ;

But when I call Bapi_Salesorder_Createfromdat2 with all arguments, I receive a error message :

Object reference not set to an instance of an object.

I have forgot to create a "new" or I have forgot a obligatory attribut?

Everyone can help me?

thank you

Chris

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

I agree. Always test the function from SE37 prior to trying to invoke remotely.

Also, some of the data types passed to the call need to be initialized before the call. Specifically, look for types passed by ref and initialize them prior to the call.

ZBALANCEDETAILTable detailTable = new ZBALANCEDETAILTable();
					
proxy.Z_Rfc_Ar_Acc_Aging(companyCode, account, "X", "", "", "0000", rfcKeyDate, ref <b>detailTable</b>);

Thanks,

Eric

Former Member
0 Kudos

Eric Cadwell,

Thank you for your answer.

I have try the function from the single test from SE37 and the order was created.

In my code, I have created and initialized the type passed by reference and I have put the same value that my test.

Thanks,

Christophe Emery

Former Member
0 Kudos

That should have taken care of the null pointer error. Is it still not saving?

We had problems with dates not being sent it correctly. Certain dates required by the call must be initialized to "00000000" or set to a valid date.

Search google groups for an example:

http://groups.google.com/groups?hl=en&q=Bapi_Salesorder_Createfromdat2+cadwell&qt_s=Search

Former Member
0 Kudos

Hi Eric,

I have look the google groups and I have put the date at the good format. I have put values at all attibuts like example which to be in google groups.

For the "not set to an instance", I have put the creating connector in the same methods that creating order, just to test.

I think that I have not put value in all obligatory attributs in argument passed by reference but I don't know which. Are you one idea?

Thanks

Christophe Emery

Former Member
0 Kudos

Can you create a simple order as the example shows? This exmaple doesn't include partners, items, or schedule lines, just the required header data. Start simple and work up to the more complex scenario.

If you're getting "object reference not set to an instance" you should be able to break in debugger and see what's null.

-Eric

Former Member
0 Kudos

Hello Eric,

I have testing a simple order without partner, items and schedules lines like in the example. But I have always the error.

I have launched the application in debugger mode and the error occurs when the function BAPI_SALESORDER_CREATEFROMDAT2 is launched. But I have not details where is exactly the error. All values that I have fill is good in the debugger mode and others are null. Can I fill all values?

But I see that the function in the example is not same that mine. In the example, the function is BeginBapi_Salesorder_Createfromdat2 and the argument is not in same place.

Is possible that the error is in my SAP version?

Thanks

Christophe Emery

reiner_hille-doering
Active Contributor
0 Kudos

If I look at your code I can nowhere find a place where you assign a Connection to your proxy or create the connection implicitly using a connection string or Destination. Could this be the problem? (proxies without a connection may throw exceptions...).

Former Member
0 Kudos

Hello Reiner,

Thank you for your answer.

I have forgot to assign a connection... Now the problem of .Net error is resolved.

Thank you very much

Christophe Emery

Answers (1)

Answers (1)

Former Member
0 Kudos

I don't think I can give you a specific response, but I can give you some hints.

1) Write a simple ABAP program and attempt to run the FM in SAP with the data you are sending it in your program. Most of the time if it fails when you call it externally, it will fail when you call it internally.

2) Sometimes when you send a sales order number or a delivery or things like that - if you do not pad the zeros when you call up to SAP, it will fail with 'something doesn't exist'.

3) The error you are getting is a typical VS.NET error. This could be coming from a couple of places. When you declared your proxy variable - you did not declare it as new. You are using a separate sapConnection variable and it was not set to new when you set it to the connection property of the proxy. Any of the table type parameters going to the function module are not declared as new when they were created.

I'd need the whole methods code to see if you were committing any of those errors.

Thanks,

Alex Flynn

Former Member
0 Kudos

Alex Flynn,

Thank you for your answer.

I looked at the number of zero is good and is ok. Perhaps the date format is falls. In the transaction code BAPI, when I try de methods, I get de dd.mm.yyyy format. But in the order table, de format is yyyymmdd. In my code, I have get the dd.mm.yyyy format.

This is the whole methods code. I'm sorry but de comments is in french.


public class CreerCommande : System.Web.UI.Page
	{
		#region Variables
		// Connecteur
		protected PortalDevelopment.ConnecteurSAP.BAPIORDERS ordre ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDLS LogicSwitch ;
//protected PortalDevelopment.ConnecteurSAP.BAPISDLS LogicsSwitch0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDHD1 OrderHeaderIn ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDHD1X OrderHeaderInx ;
		protected PortalDevelopment.ConnecteurSAP.BAPI_SENDER Sender ;
		protected PortalDevelopment.ConnecteurSAP.BAPIPAREXTable Extension ;
//protected PortalDevelopment.ConnecteurSAP.BAPIPAREX Extension0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICCARDTable OrderCcard ;
//protected PortalDevelopment.ConnecteurSAP.BAPICCARD Card0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUBLBTable OrderCfgsBlob ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUBLB CfgsBlob0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUINSTable OrderCfgsInst ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUINS CfgsInst0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUPRTTable OrderCfgsPartOf ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUPRT CfgsPartOf0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUCFGTable OrderCfgsRef ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUCFG CfgsRef0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUREFTable OrderCfgsRefinst ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUREF CfgsRefinst0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUVALTable OrderCfgsValue ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUVAL CfgsValue0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICUVKTable OrderCfgsVk ;
//protected PortalDevelopment.ConnecteurSAP.BAPICUVK CfgsVk0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICONDTable OrderConditionsIn ;
//protected PortalDevelopment.ConnecteurSAP.BAPICOND ConditionsIn0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPICONDXTable OrderConditionsInx ;
//protected PortalDevelopment.ConnecteurSAP.BAPICONDX ConditionsInx0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDITMTable OrderItemsIn ;
//protected PortalDevelopment.ConnecteurSAP.BAPISDITM ItemsIn0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDITMXTable OrderItemsInx ;
//protected PortalDevelopment.ConnecteurSAP.BAPISDITMX ItemsInx0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDKEYTable OrderKeys ;
//protected PortalDevelopment.ConnecteurSAP.BAPISDKEY Keys0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPIPARNRTable OrderPartners ;
		protected PortalDevelopment.ConnecteurSAP.BAPIPARNR NumCustomer ;
		protected PortalDevelopment.ConnecteurSAP.BAPISCHDLTable OrderSchedulesIn ;
		protected PortalDevelopment.ConnecteurSAP.BAPISCHDL OrderSchedulesIn0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISCHDLXTable OrderSchedulesInx ;
		//protected PortalDevelopment.ConnecteurSAP.BAPISCHDLX OrderSchedulesInx0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDTEXTTable OrderText ;
//protected PortalDevelopment.ConnecteurSAP.BAPISDTEXT Text0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPIADDR1Table PartnerAddresses ;
		//protected PortalDevelopment.ConnecteurSAP.BAPIADDR1 PartnerAddresses0 ;
		protected PortalDevelopment.ConnecteurSAP.BAPIRET2Table Return ;
//protected PortalDevelopment.ConnecteurSAP.BAPIRET2 Return0 ;

		protected PortalDevelopment.ConnecteurSAP.BAPIRETURN1 Retour ;
		protected PortalDevelopment.ConnecteurSAP.BAPISDITM ItemOrder ;
		//protected PortalDevelopment.ConnecteurSAP.BAPISDITMX ItemOrderx ;
		// Session
		PortalDevelopment.Classes.Client client ;
		PortalDevelopment.Classes.Connexion connexion ;
		PortalDevelopment.Classes.Order orders ;
		PortalDevelopment.Classes.Facture facture;
		PortalDevelopment.Classes.Organisation organisation ;
		PortalDevelopment.Classes.Livraison livraison ;
		// File
		PortalDevelopment.Classes.FIFO Mat = new PortalDevelopment.Classes.FIFO() ;
		PortalDevelopment.Classes.FIFO Qty = new PortalDevelopment.Classes.FIFO() ;
		#endregion

private void Page_Load(object sender, System.EventArgs e)
		{
			try
			{
				// Initialise les sessions
				initSession() ;
				// Charge les sessions
				chargeSession() ;
				// Passe les sessions
				passeSession() ;

				// Redirige sur le formulaire Login si l'on s'est déloguer
				if (connexion.getUserName().ToString() == "")
					Response.Redirect("../Login.aspx") ;

				// Bloque les autorisations
				bloqueAutorisation() ;
				// Initialise la DataTable
				initTable() ;
				// Initialise les connecteurs
				initConnecteur();

				if (!IsPostBack)
				{
					// Remplissage des TextBox
					rempliTextBox() ;
					// Remplissage du DataGrid
					BindData() ;
				}
			}
			catch(NullReferenceException)
			{
				Response.Redirect("../Login.aspx") ;
			}
		}

/******************************************************************
		* Nom de la fonction	: initConnecteur
		* Auteur				: Christophe Emery
		* Date création			: Novembre 2005
		* Description			: Permet d'initialiser les connecteurs
		* Paramètre				: - 
		* Retour				: -
		* Environnement			: MS Visual Studio 2005
		* Langage				: C#
		* ****************************************************************/
		/// <summary>
		/// Permet d'initialiser les connecteurs
		/// </summary>
		private void initConnecteur()
		{
			ordre = new PortalDevelopment.ConnecteurSAP.BAPIORDERS() ;
			LogicSwitch = new PortalDevelopment.ConnecteurSAP.BAPISDLS() ;
			//LogicsSwitch0 = new PortalDevelopment.ConnecteurSAP.BAPISDLS() ;
			OrderHeaderIn = new PortalDevelopment.ConnecteurSAP.BAPISDHD1() ;
			OrderHeaderInx = new PortalDevelopment.ConnecteurSAP.BAPISDHD1X() ;
			Sender = new PortalDevelopment.ConnecteurSAP.BAPI_SENDER() ;
			Extension = new PortalDevelopment.ConnecteurSAP.BAPIPAREXTable() ;
			//Extension0 = new PortalDevelopment.ConnecteurSAP.BAPIPAREX() ;
			OrderCcard = new PortalDevelopment.ConnecteurSAP.BAPICCARDTable() ;
			//Card0 = new PortalDevelopment.ConnecteurSAP.BAPICCARD() ;
			OrderCfgsBlob = new PortalDevelopment.ConnecteurSAP.BAPICUBLBTable() ;
			//CfgsBlob0 = new PortalDevelopment.ConnecteurSAP.BAPICUBLB() ;
			OrderCfgsInst = new PortalDevelopment.ConnecteurSAP.BAPICUINSTable() ;
			//CfgsInst0 = new PortalDevelopment.ConnecteurSAP.BAPICUINS() ;
			OrderCfgsPartOf = new PortalDevelopment.ConnecteurSAP.BAPICUPRTTable() ;
			//CfgsPartOf0 = new PortalDevelopment.ConnecteurSAP.BAPICUPRT() ;
			OrderCfgsRef = new PortalDevelopment.ConnecteurSAP.BAPICUCFGTable() ;
			//CfgsRef0 = new PortalDevelopment.ConnecteurSAP.BAPICUCFG() ;
			OrderCfgsRefinst = new PortalDevelopment.ConnecteurSAP.BAPICUREFTable() ;
			//CfgsRefinst0 = new PortalDevelopment.ConnecteurSAP.BAPICUREF() ;
			OrderCfgsValue = new PortalDevelopment.ConnecteurSAP.BAPICUVALTable() ;
			//CfgsValue0 = new PortalDevelopment.ConnecteurSAP.BAPICUVAL() ;
			OrderCfgsVk = new PortalDevelopment.ConnecteurSAP.BAPICUVKTable() ;
			//CfgsVk0 = new PortalDevelopment.ConnecteurSAP.BAPICUVK() ;
			OrderConditionsIn = new PortalDevelopment.ConnecteurSAP.BAPICONDTable() ;
			//ConditionsIn0 = new PortalDevelopment.ConnecteurSAP.BAPICOND() ;
			OrderConditionsInx = new PortalDevelopment.ConnecteurSAP.BAPICONDXTable() ;
			//ConditionsInx0 = new PortalDevelopment.ConnecteurSAP.BAPICONDX() ;
			OrderItemsIn = new PortalDevelopment.ConnecteurSAP.BAPISDITMTable() ;
			//ItemsIn0 = new PortalDevelopment.ConnecteurSAP.BAPISDITM() ;
			OrderItemsInx = new PortalDevelopment.ConnecteurSAP.BAPISDITMXTable() ;
			//ItemsInx0 = new PortalDevelopment.ConnecteurSAP.BAPISDITMX() ;
			OrderKeys = new PortalDevelopment.ConnecteurSAP.BAPISDKEYTable() ;
			//Keys0 = new PortalDevelopment.ConnecteurSAP.BAPISDKEY() ;
			OrderPartners = new PortalDevelopment.ConnecteurSAP.BAPIPARNRTable() ;
			OrderSchedulesIn = new PortalDevelopment.ConnecteurSAP.BAPISCHDLTable() ;
			OrderSchedulesIn0 = new PortalDevelopment.ConnecteurSAP.BAPISCHDL() ;
			OrderSchedulesInx = new PortalDevelopment.ConnecteurSAP.BAPISCHDLXTable() ;
			//OrderSchedulesInx0 = new PortalDevelopment.ConnecteurSAP.BAPISCHDLX() ;
			OrderText = new PortalDevelopment.ConnecteurSAP.BAPISDTEXTTable() ;
			//Text0 = new PortalDevelopment.ConnecteurSAP.BAPISDTEXT() ;
			PartnerAddresses = new PortalDevelopment.ConnecteurSAP.BAPIADDR1Table() ;
			//PartnerAddresses0 = new PortalDevelopment.ConnecteurSAP.BAPIADDR1() ;
			Return = new PortalDevelopment.ConnecteurSAP.BAPIRET2Table() ;
			//Return0 = new PortalDevelopment.ConnecteurSAP.BAPIRET2() ;
			Retour = new PortalDevelopment.ConnecteurSAP.BAPIRETURN1() ;
			NumCustomer = new PortalDevelopment.ConnecteurSAP.BAPIPARNR() ;
			ItemOrder = new PortalDevelopment.ConnecteurSAP.BAPISDITM() ;
			//ItemOrderx = new PortalDevelopment.ConnecteurSAP.BAPISDITMX() ;
		}

/******************************************************************
		* Nom de la fonction	: rempliOrdre
		* Auteur				: Christophe Emery
		* Date création			: Novembre 2005
		* Description			: Permet d'affecter les attributs pour la 
		*						  création de la commande. L'entier passé
		*						  en argument désigne le numéro du neoud de la
		*						  file article et quantité à insérer dans la
		*						  commande
		* Paramètre				: - num (int)
		* Retour				: -
		* Environnement			: MS Visual Studio 2005
		* Langage				: C#
		* ****************************************************************/
		/// <summary>
		/// Permet d'affecter les attributs pour la création de la commande. 
		/// L'entier passé en argument désigne le numéro du noeud de la file 
		/// article et quantité à insérer dans la commande
		/// </summary>
		/// <param name="num"/>
		private void rempliOrdre(int num)
		{
			try
			{
				OrderHeaderIn.Doc_Type = TextboxTypeCmdeClient.Text ;
				OrderHeaderIn.Sales_Org = TextBoxOrgCom.Text ;
				OrderHeaderIn.Distr_Chan = TextBoxCanalDistrib.Text ;
				OrderHeaderIn.Division = TextboxSecteurActivite.Text ;
				OrderHeaderIn.Purch_Date = "08.11.2005" ;
				OrderHeaderIn.Purch_No_C = TextboxNumCmde.Text ;

				NumCustomer.Partn_Numb = TextBoxDonneurOrdre.Text ;
				NumCustomer.Partn_Role = "WE" ;
				OrderPartners.Add(NumCustomer) ;

				NumCustomer.Partn_Numb = TextBoxReceptionnaire.Text ;
				OrderPartners.Add(NumCustomer) ;
				
				for (int i=0; i<orders.getFileMat().getLongueur(); i++)
				{
					createFile() ;

					ItemOrder.Material = Mat.getPremier().getValeur().getInfo().ToString() ; 
					OrderItemsIn.Add(ItemOrder) ;
					
					OrderSchedulesIn0.Req_Qty = Convert.ToDecimal(orders.getFileQty().getPremier().getValeur().getInfo().ToString()) ;
					OrderSchedulesIn.Add(OrderSchedulesIn0) ;

					Mat.enfile(Mat.defile()) ;
					Qty.enfile(Qty.defile()) ;

					recupFile() ;
				}
			}
			catch(Exception ex)
			{
				LabelMessage.Text = "Erreur de remplissage : " + ex.Message ;
			}
		}

/******************************************************************
		* Nom de la fonction	: Imagebutton3_Click
		* Auteur				: Christophe Emery
		* Date création			: Novembre 2005
		* Description			: Permet de créer une commande
		* Paramètre				: - sender (object)
		*						  - e (System.Web.UI.ImageClickEventArgs)
		* Retour				: -
		* Environnement			: MS Visual Studio 2005
		* Langage				: C#
		* ****************************************************************/
		/// <summary>
		/// Permet de créer une commande
		/// </summary>
		/// <param name="sender"/>
		/// <param name="e"/>
		private void Imagebutton3_Click(object sender, System.Web.UI.ImageClickEventArgs e)
		{
			// Initialisation des connecteurs
			initConnecteur();

			// Affectation des attributs de la classe Order et Organisation
			rempliAttribut() ;

			LabelMessage.Text = "" ;
			// Création du connecteur
			PortalDevelopment.ConnecteurSAP.OrderCreate proxy = new PortalDevelopment.ConnecteurSAP.OrderCreate() ;

			for (int i=0; i<orders.getFileMat().getLongueur(); i++)
			{
				string BehaveWhenError = "" ;
				string BinaryRelationshipType = "" ;
				string Conv = ""  ;
				string IntNumberAssignment = "" ;
				string SalesDocumentIn = "" ;
				string TestRun = "" ;
				string SalesDocument = "" ;

				// Rempli les valeurs dans les variables des connecteurs pour la création d'une commande
				rempliOrdre(i) ;

				try
				{
					// Appel de la fonction qui permet de créer une commande
					proxy.Bapi_Salesorder_Createfromdat2(BehaveWhenError,BinaryRelationshipType,Conv,IntNumberAssignment, 
						LogicSwitch,OrderHeaderIn,OrderHeaderInx,SalesDocumentIn,Sender,TestRun,out SalesDocument,ref Extension, 
						ref OrderCcard,ref OrderCfgsBlob,ref OrderCfgsInst,ref OrderCfgsPartOf,ref OrderCfgsRef,ref OrderCfgsRefinst,
						ref OrderCfgsValue,ref OrderCfgsVk,ref OrderConditionsIn,ref OrderConditionsInx,ref OrderItemsIn,
						ref OrderItemsInx,ref OrderKeys,ref OrderPartners,ref OrderSchedulesIn,ref OrderSchedulesInx,ref OrderText,
						ref PartnerAddresses,ref Return) ;

					LabelMessage.Text = Return.ToString() ;
					LabelNumeroCommandeRes.Text = SalesDocument.ToString() ;
				}
				catch(SAP.Connector.RfcSystemException rfcEx)
				{
					if (rfcEx.Message == "connection closed without message (CM_NO_DATA_RECEIVED)")
					{
						Response.Redirect("../Login.aspx") ;
					}
				}
				catch(Exception ex)
				{
					LabelMessage.Text = "Erreur création commande : " + ex.Message ;
				}
			}
		}

If you want the complete code, give me your Email address and I send you the complete code.

p.s. I have use this architectur to use the other BAPI function and it goes.

Thanks

Christophe Emery