Options

Webservice Codeunit Array - Parameter

stonystony Member Posts: 122
edited 2015-07-09 in NAV Three Tier
Hello ,
can I pass in Navision to a function of a codeunit, which is used as a web service, an array as a parameter.

Thanks,
stony

Comments

  • Options
    thegunzothegunzo Member Posts: 274
    You just need to move the Array into JSon or Xml and then ship it over to NAV.

    Example c# code
    string[] strings = { "1", "2", "3" };
                
                XDocument doc = new XDocument();
                doc.Add(new XElement("root", strings.Select(x => new XElement("item", x))));
    
                string ReturnMessage = "";
                int i = api.ArrayTest(doc.ToString(),ref ReturnMessage);
    
                Console.WriteLine("No of lines: {0}, returned {1}",i, ReturnMessage);
    

    Example NAV code
    PROCEDURE ArrayTest@1(OuterXml@1000 : Text;VAR ResultMessage@1007 : Text) : Integer;
        VAR
          DotNetArray@1005 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array";
          String@1006 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String";
          XmlDoc@1002 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
          XmlNodeList@1003 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNodeList";
          XmlNode@1001 : DotNet "'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
          NodeIndex@1004 : Integer;
        BEGIN
          XmlDoc := XmlDoc.XmlDocument;
          XmlDoc.LoadXml(OuterXml);
          XmlNodeList := XmlDoc.GetElementsByTagName('item');
          IF NOT ISNULL(XmlNodeList) THEN BEGIN
            DotNetArray := DotNetArray.CreateInstance(GETDOTNETTYPE(String),XmlNodeList.Count);
            FOR NodeIndex := 1 TO XmlNodeList.Count DO BEGIN
              XmlNode := XmlNodeList.ItemOf(NodeIndex - 1);
              DotNetArray.SetValue(XmlNode.InnerText,NodeIndex - 1);
              IF ResultMessage = '' THEN
                ResultMessage += XmlNode.InnerText
              ELSE
                ResultMessage += ',' + XmlNode.InnerText;
            END;
          END;
    
          EXIT(DotNetArray.Length);
        END;
    
    ________________________________
    Gunnar Gestsson
    Microsoft Certified IT Professional
    Dynamics NAV MVP
    http://www.dynamics.is
    http://Objects4NAV.com
Sign In or Register to comment.