Tutoriel étape par étape pour utiliser SAP. connecteur net avec VS 2008 [fermé]

j'ai trouvé de nombreux exemples sur Internet mais beaucoup sont anciens (VS 2003, SAP. Connecteur net 2.0 où le courant est de 3.0).

je me demande comment utiliser SAP. Connecteur NET.

Quels fichiers dois-je installer?

références qui ajoutent au projet?

comment ajouter le fournisseur pour créer une connexion dans L'Explorateur de serveur?

23
demandé sur ridermansb 2011-03-14 17:36:59

1 réponses

un exemple utilisant vs2010 et SAP. net Connector 3.0

Exigences:

  • Visual Studio .NET 2010 (la libre c# Express edition est très bien)
  • connecteur SAP .net 3.0 (vous pouvez habituellement l'obtenir de votre client pour le projet en cours)

Installation

identifiez la bonne version pour votre plateforme. Vous pourriez avoir quelque chose le long de la suivantes:

.. pour un Windows 7 64-bit installation, nous allons utiliser sapnco30dotnet40P_12-20007348.zip.

développez l'archive, et démarrez le .msi fichier d'installation.

.. suivez la procédure d'installation, en laissant toutes les options par défaut (suivant.. prochain.. prochain.. terminer.)

Référencement

ouvrez Visual Studio et créez un nouveau projet (ou ouvrez le vôtre).

Dans Solution Explorer panneau, habituellement à votre droite, clic droit sur References et choisissez Add Reference:

.. ensuite, sélectionnez le Browse onglet, naviguez vers le dossier D'installation du connecteur SAP, et sélectionnez les deux sapnco.dll et sapnco_utils.dll:

maintenant que vous avez correctement référencé le connecteur SAP .NET dans votre projet Visual Studio, vous pouvez écrire le code pour il.

Connexion

commencez par créer une classe de configuration de destination (remplacez les paramètres de connexion par ceux qui vous sont donnés par votre client):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAP.Middleware.Connector; // your sap connector

namespace WindowsFormsSapApplication1
{
    public class ECCDestinationConfig : IDestinationConfiguration
    {

        public bool ChangeEventsSupported()
        {
            return false;
        }

        public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;

        public RfcConfigParameters GetParameters(string destinationName)
        {

            RfcConfigParameters parms = new RfcConfigParameters();

            if (destinationName.Equals("mySAPdestination"))
            {
                parms.Add(RfcConfigParameters.AppServerHost, "sapnode.mycompany.net");
                parms.Add(RfcConfigParameters.SystemNumber, "21");
                parms.Add(RfcConfigParameters.SystemID, "CF1");
                parms.Add(RfcConfigParameters.User, "mySAPuser");
                parms.Add(RfcConfigParameters.Password, "mySAPpassword");
                parms.Add(RfcConfigParameters.Client, "100");
                parms.Add(RfcConfigParameters.Language, "EN"); 
                parms.Add(RfcConfigParameters.PoolSize, "5");
            }
            return parms;

        }
    }
}

.. Ensuite, connectez-vous à SAP et appelez une fonction. Supposons que vous voulez récupérer la liste des entreprises, en utilisant le BAPI_COMPANYCODE_GETLIST fonction SAP:

    public void GetCompanies() {

        ECCDestinationConfig cfg = new ECCDestinationConfig();

        RfcDestinationManager.RegisterDestinationConfiguration(cfg);

        RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination");

        RfcRepository repo = dest.Repository;

        IRfcFunction testfn = repo.CreateFunction("BAPI_COMPANYCODE_GETLIST");

        testfn.Invoke(dest);

        var companyCodeList = testfn.GetTable("COMPANYCODE_LIST");

        // companyCodeList now contains a table with companies and codes

    }

faciliter la vie

Dans l'exemple ci-dessus, le GetTable la fonction renvoie un SAP tableau que vous pouvez, ou non. Il ya une extension pratique qui transforme cette table dans un .net familier DataTable comme suit:

public static class IRfcTableExtentions
{
    /// <summary>
    /// Converts SAP table to .NET DataTable table
    /// </summary>
    /// <param name="sapTable">The SAP table to convert.</param>
    /// <returns></returns>
    public static DataTable ToDataTable(this IRfcTable sapTable, string name)
    {
        DataTable adoTable = new DataTable(name);
        //... Create ADO.Net table.
        for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
        {
            RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
            adoTable.Columns.Add(metadata.Name, GetDataType(metadata.DataType));
        }

        //Transfer rows from SAP Table ADO.Net table.
        foreach (IRfcStructure row in sapTable)
        {
            DataRow ldr = adoTable.NewRow();
            for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
            {
                RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);

                switch (metadata.DataType)
                {
                    case RfcDataType.DATE:
                        ldr[metadata.Name] = row.GetString(metadata.Name).Substring(0, 4) + row.GetString(metadata.Name).Substring(5, 2) + row.GetString(metadata.Name).Substring(8, 2);
                        break;
                    case RfcDataType.BCD:
                        ldr[metadata.Name] = row.GetDecimal(metadata.Name);
                        break;
                    case RfcDataType.CHAR:
                        ldr[metadata.Name] = row.GetString(metadata.Name);
                        break;
                    case RfcDataType.STRING:
                        ldr[metadata.Name] = row.GetString(metadata.Name);
                        break;
                    case RfcDataType.INT2:
                        ldr[metadata.Name] = row.GetInt(metadata.Name);
                        break;
                    case RfcDataType.INT4:
                        ldr[metadata.Name] = row.GetInt(metadata.Name);
                        break;
                    case RfcDataType.FLOAT:
                        ldr[metadata.Name] = row.GetDouble(metadata.Name);
                        break;
                    default:
                        ldr[metadata.Name] = row.GetString(metadata.Name);
                        break;
                }
            }
            adoTable.Rows.Add(ldr);
        }
        return adoTable;
    }

    private static Type GetDataType(RfcDataType rfcDataType)
    {
        switch (rfcDataType)
        {
            case RfcDataType.DATE:
                return typeof(string);
            case RfcDataType.CHAR:
                return typeof(string);
            case RfcDataType.STRING:
                return typeof(string);
            case RfcDataType.BCD:
                return typeof(decimal);
            case RfcDataType.INT2:
                return typeof(int);
            case RfcDataType.INT4:
                return typeof(int);
            case RfcDataType.FLOAT:
                return typeof(double);
            default:
                return typeof(string);
        }
    }
}

référence: http://antswift.wordpress.com/2011/12/22/irfctable-to-net-datatable-extention-method/

après avoir ajouté l'extension ci-dessus, vous pouvez maintenant transformer le résultat en un DataTable:

// get the regular SAP structured table..
var companyCodeList = testfn.GetTable("COMPANYCODE_LIST");

// turn it into a DataTable..
var companyDataTable = companyCodeList.ToDataTable();

// use it
SomeForm.DataGridView.DataSource=companyDataTable;

Notes

  • bien que cet exemple soit basé sur vs2010, d'autres Visual Studio les éditions devraient bien fonctionner.
  • que les noms des fonctions SAP dans le connecteur doivent toujours être en majuscules.
  • si vous vous trompez sur l'architecture du connecteur SAP, par exemple si vous installez la version 64bit et que vous essayez ensuite de compiler pour x86 32 bits, vous obtiendrez une erreur du type: "impossible de charger le fichier ou l'assembly 'sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23' ou une de ses dépendances. Une tentative a été faite pour charger une programme avec un format incorrect." C'est normal, il suffit d'installer la version correcte.

supplémentaire La lecture

73
répondu magma 2015-03-16 19:45:40