Skip to content

RfcFunction Nested Objects #44

@muhammetsahin

Description

@muhammetsahin

Hi there,

How to get nested objects inf sharpsaprfc?

I have two objects. Product and productAddress

` public class Product
{

    private string _matirialNumber;
    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("MATNR")]
    public string MaterialNumber
    {
        get
        {
            return this._matirialNumber.RemoveZeros();
        }
        set
        {
            this._matirialNumber = value;
        }
    }

    /// <summary>
    ///
    /// </summary>
    [RfcStructureField("MAKTX")]
    public string MaterialShortText { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("EAN11")]
    public string Ean { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("LABST")]
    public decimal AmountOfStock { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("PROJE")]
    public string ProjectCode { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("LINK")]
    public string Link { get; set; }


    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("WERKS")]
    public string ProductionLocation { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("LGORT")]
    public string WarehouseLocation { get; set; }

    /// <summary>
    ///
    /// </summary>
    [RfcStructureField("MATKL")]
    public string MaterialGroup { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("EXTWG")]
    public string ExternalMaterialGroup { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("PRDHA")]
    public string PRDHA { get; set; }

    ///// <summary>
    ///// 
    ///// </summary>
    [RfcStructureField("ADR_TABLE")]
    public  IEnumerable<ProductAddress> ProductAddresses { get; set; }
}`

` public class ProductAddress
{
///


///
///

[RfcStructureField("RAF")]
public string Console { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("TRAVES")]
    public string Traves { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("KAT")]
    public string Stair { get; set; }

    /// <summary>
    /// 
    /// </summary>
    [RfcStructureField("BOLUM")]
    public string Section { get; set; }
}`

` public class SearchProductFunc : RfcFunctionObject<IEnumerable>
{

    #region Fields


    /// <summary>
    /// Sap Parameter Name : I_SEARCHTEXT
    /// </summary>
    public string SearchText { get; private set; }

    /// <summary>
    /// Sap Parameter Name : I_LGORT 
    /// </summary>
    public string WarehouseLocation { get; private set; }

    /// <summary>
    /// Sap Parameter Name : I_WERKS 
    /// </summary>
    public string ProductionLocation { get; private set; }

    /// <summary>
    /// Sap Parameter Name : E_COUNT
    /// </summary>
    public int Count { get; set; }

    /// <summary>
    /// Sap Name : TE_URUN
    /// </summary>
    public IEnumerable<Product> Products { get; private set; }


    #endregion

    #region Ctor


    /// <summary>
    /// 
    /// </summary>
    /// <param name="searchText"></param>
    /// <param name="warehouseLocation"></param>
    public SearchProductFunc(string searchText,string productionLocation, string warehouseLocation)
    {
        this.SearchText = searchText;
        this.ProductionLocation = productionLocation;
        this.WarehouseLocation = warehouseLocation;
        this.Count = 0;
    }

    #endregion

    public override string FunctionName
    {
        get { return "ZPN_F_ELTERM_SEARCH_MATNR"; }
    }

    public override IEnumerable<Product> GetOutput(RfcResult result)
    {

        this.Count = result.GetOutput<int>("E_COUNT");
        this.Products = result.GetTable<Product>("ET_LIST");

        return Products;
    }

    public override object Parameters
    {
        get
        {
            return new
            {
                I_SEARCHTEXT = this.SearchText,
                I_LGORT = this.WarehouseLocation,
                I_WERKS = this.ProductionLocation,
            };
        }
    }

}`

Than i called func.

` using (PlainSapRfcConnection conn = new PlainSapRfcConnection("KPD"))
{

            var result = conn.ExecuteFunction(new SearchProductFunc("210001559","0881","2001"));

            System.Console.WriteLine("Count:" + result.Count());

            System.Console.WriteLine(" ... done quick work DoGetWarehouseLocation() ... ");
        }`

But i've got an exception: "Object must implement IConvertible"

How can i handle nested objects ? Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions