on 12-02-2005 10:28 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
User | Count |
---|---|
92 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.