Web Service, Inserting data

shettarvikas
shettarvikas Member Posts: 106
Hi,

I have a web service, from which I can read the data(eg. customers list) from navision. The output is in XML. Now I want to add some data to navision through this webserivce.

Through web I pass function name (as 'getcustomers') and a parameter (as No. or blank for all). Using the same logic, I have created a new function (as 'SetCustomer') and Parameter (a new Customer No.).
but I am not able to do it.
OBJECT Codeunit 80000 NavisionWebService
{
  OBJECT-PROPERTIES
  {
    Date=04/13/07;
    Time=[ 4:12:56 PM];
    Modified=Yes;
    Version List=NavisionWebService;
  }
  PROPERTIES
  {
    SingleInstance=Yes;
    OnRun=BEGIN
            IF ISCLEAR(ComCom) THEN
            CREATE(ComCom);

            IF ISCLEAR(MSMQ_BA) THEN
            CREATE(MSMQ_BA);

            Queue1Name := 'dgkkkh1s\private$\toNavision';
            Queue2Name :='dgkkkh1s\private$\fromNavision';

            ComCom.AddBusAdapter(MSMQ_BA,1);
            MSMQ_BA.OpenReceiveQueue(Queue1Name,0,0);
            MSMQ_BA.OpenReplyQueue(Queue2Name,0,0);
          END;

  }
  CODE
  {
    VAR
      ComCom@1450001 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{01018FA5-E4B4-413C-A47C-AD34B0CC2647}:'Navision Communication Component version 2'.CommunicationComponent" WITHEVENTS;
      MSMQ_BA@1450000 : Automation "{B8BD635A-E191-47EF-84A0-02921E2A44A6} 1.0:{CD49794B-0E84-4A2E-9522-C518C825D390}:'Navision MS-Message Queue Bus Adapter'.MSMQBusAdapter";
   
    LOCAL PROCEDURE ReturnOriginalMessage@1240002(OutMsg@1450002 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{6CB9762C-E61C-4F96-BA34-8B20D3A5B46E}:'Navision Communication Component version 2'.OutMessage";XMLDoc@1450000 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument");
    VAR
      OutStreamQueue@1450001 : OutStream;
    BEGIN
      OutStreamQueue := OutMsg.GetStream();
      XMLDoc.save(OutStreamQueue);
      OutMsg.Send(0);
      CLEAR(OutMsg);
    END;
 
    PROCEDURE PopulateResult@1450001(XMLDoc@1450000 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument";Result@1450001 : Text[250]);
    VAR
      XMLNode@1450003 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v3.0'.IXMLDOMNode";
      XMLDOMMgmt@1450002 : Codeunit 99008516;
    BEGIN
      IF XMLDOMMgmt.FindNode(XMLDoc,'/NavisionObject/Result',XMLNode) THEN
        XMLNode.text := Result;
    END;

    LOCAL PROCEDURE SendCustomer@1450002(CustomerNo@1450000 : Code[20];OutMsg@1450006 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{6CB9762C-E61C-4F96-BA34-8B20D3A5B46E}:'Navision Communication Component version 2'.OutMessage");
    VAR
      Customer@1450003 : Record 18;
      CustomerXMLPort@1450002 : XMLport 80000;
      OutStreamQueue@1450004 : OutStream;
      XMLDoc@1450001 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument";
    BEGIN
      OutStreamQueue := OutMsg.GetStream();
      Customer.SETFILTER("No.",CustomerNo);
      CustomerXMLPort.SETTABLEVIEW(Customer);
      CustomerXMLPort.SETDESTINATION(OutStreamQueue);
      CustomerXMLPort.EXPORT;
      CREATE(XMLDoc);
      XMLDoc.save(OutStreamQueue);
      OutMsg.Send(0);
      CLEAR(OutMsg);
    END;

    PROCEDURE InCustomer@1000000001(CustomerNo@1000000001 : Code[20];InMsg@1000000000 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{D184D0AC-61C9-4AC1-B537-0D28C277FEDE}:'Navision Communication Component version 2'.InMessage");
    VAR
      Customer@1000000005 : Record 18;
      CustomerXMLPort@1000000004 : XMLport 80000;
      InStreamQueue@1000000003 : InStream;
      XMLDoc@1000000002 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument";
    BEGIN

      MESSAGE('Entered function');
      InStreamQueue := InMsg.GetStream();
      Customer.SETFILTER("No.",CustomerNo);
      IF NOT Customer.FIND('-') THEN BEGIN
      MESSAGE('if Satement');
      MESSAGE('%1',CustomerNo);
        CustomerXMLPort.SETTABLEVIEW(Customer);
        CustomerXMLPort.SETSOURCE(InStreamQueue);
        CustomerXMLPort.IMPORT;
      CREATE(XMLDoc);
      XMLDoc.save(InStreamQueue);
      InMsg.CommitMessage;
      CLEAR(InMsg);
      END;
    END;

    LOCAL PROCEDURE FindNode@3(RootNode@1020 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v3.0'.IXMLDOMNode";NodePath@1000 : Text[250];VAR ReturnedNode@2030 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v3.0'.IXMLDOMNode") : Boolean;
    BEGIN
      ReturnedNode := RootNode.selectSingleNode(NodePath);
      IF ISCLEAR(ReturnedNode) THEN
        EXIT(FALSE)
      ELSE
        EXIT(TRUE);
    END;

    LOCAL PROCEDURE SendCustomers@1100353000(CustomerFilter@1450000 : Text[250];OutMsg@1450006 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{6CB9762C-E61C-4F96-BA34-8B20D3A5B46E}:'Navision Communication Component version 2'.OutMessage");
    VAR
      Customer@1450003 : Record 18;
      CustomersListXMLPort@1450002 : XMLport 80001;
      OutStreamQueue@1450004 : OutStream;
      XMLDoc@1450001 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument";
    BEGIN
      OutStreamQueue := OutMsg.GetStream();
      IF CustomerFilter <> '' THEN
        Customer.SETFILTER("No.",CustomerFilter);

      CustomersListXMLPort.SETTABLEVIEW(Customer);
      CustomersListXMLPort.SETDESTINATION(OutStreamQueue);
      CustomersListXMLPort.EXPORT;
      CREATE(XMLDoc);
      XMLDoc.save(OutStreamQueue);
      OutMsg.Send(0);
      CLEAR(OutMsg);
    END;

     
    EVENT ComCom@1450001::MessageReceived@1(VAR InMessage@1450000 : Automation ":{00020400-0000-0000-C000-000000000046}:''.IDISPATCH");
    VAR
      Item@1450012 : Record 27;
      SalesHeader@1450010 : Record 36;
      InMsg@1450003 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{D184D0AC-61C9-4AC1-B537-0D28C277FEDE}:'Navision Communication Component version 2'.InMessage";
      XMLDoc@1450006 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument";
      XMLNode@1450005 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v3.0'.IXMLDOMNode";
      InStreamQueue@1450002 : InStream;
      XMLChar@1450007 : Text[1];
      XMLText@1450004 : Text[1024];
      UserName@1450014 : Text[1024];
      CompanyName@1450013 : Text[1024];
      FunctionName@1450008 : Text[1024];
      ParameterList@1450009 : Text[1024];
      DocumentType@1450011 : Option;
      Company@1450016 : Record 2000000006;
      Salesperson@1100353000 : Record 13;
      Customer@1100353001 : Record 18;
    BEGIN
      MESSAGE('New MSMQ message received!');

      InMsg := InMessage;
      InStreamQueue := InMsg.GetStream();
      REPEAT
        InStreamQueue.READTEXT(XMLChar);
        XMLText := XMLText + XMLChar;
      UNTIL InStreamQueue.EOS;
      CREATE(XMLDoc);
      XMLDoc.loadXML(XMLText);
      IF FindNode(XMLDoc,'/NavisionObject/UserName',XMLNode) THEN
        UserName := XMLNode.text;
      IF FindNode(XMLDoc,'/NavisionObject/CompanyName',XMLNode) THEN
        CompanyName := XMLNode.text;
      IF FindNode(XMLDoc,'/NavisionObject/FunctionName',XMLNode) THEN
        FunctionName := XMLNode.text;
      IF FindNode(XMLDoc,'/NavisionObject/ParameterList',XMLNode) THEN
        ParameterList := XMLNode.text;

      CASE FunctionName OF
        'GetCustomer':
          BEGIN
            IF Customer.GET(SELECTSTR(1,ParameterList)) THEN
              SendCustomer(Customer."No.",InMsg.CreateReply)
            ELSE BEGIN
              PopulateResult(XMLDoc,Text007);
              ReturnOriginalMessage(InMsg.CreateReply,XMLDoc);
            END;
          END;
         'GetCustomersList':
          BEGIN
            SendCustomers(ParameterList,InMsg.CreateReply)
          END;
        'SetCustomersList':
          BEGIN
          MESSAGE('Entered Case Satement');
            InCustomer(ParameterList,InMsg.CreateReply);

          END;

        END;
      InMsg.CommitMessage;
      CLEAR(InMsg);
    END;

    BEGIN
    END.
  }
}


Please help me in doing this

Thanks & regards,
Vikas

Comments

  • ta5
    ta5 Member Posts: 1,164
    Hi Vikas
    What excactly does not work? Error messages?

    Regards
    Thomas
  • shettarvikas
    shettarvikas Member Posts: 106
    Hi,

    In the above code, MessageReceived function, there is 1 case called as 'SetCustomers', which in turn calls the "InCustomer" function. here i want to insert the customer no. into the nav db by using the parameter.

    But I am not able to insert the same.

    So i want to know, whtever i have written in "InCustomer" function, is correct or not. ie whether the code is correct or not.

    thanks in advance, for rectifying the same
  • ta5
    ta5 Member Posts: 1,164
    I cant test it at the moment. But does look quite ok. Do you receive an error msg?
  • shettarvikas
    shettarvikas Member Posts: 106
    PROCEDURE InCustomer@1000000001(CustomerNo@1000000001 : Code[20];InMsg@1000000000 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{D184D0AC-61C9-4AC1-B537-0D28C277FEDE}:'Navision Communication Component version 2'.InMessage"); 
        VAR 
          Customer@1000000005 : Record 18; 
          CustomerXMLPort@1000000004 : XMLport 80000; 
          InStreamQueue@1000000003 : InStream; 
          XMLDoc@1000000002 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 3.0:{F6D90F11-9C73-11D3-B32E-00C04F990BB4}:'Microsoft XML, v3.0'.DOMDocument"; 
        BEGIN 
    
          MESSAGE('Entered function'); 
          InStreamQueue := InMsg.GetStream(); 
          Customer.SETFILTER("No.",CustomerNo); 
          IF NOT Customer.FIND('-') THEN BEGIN 
          MESSAGE('if Satement'); 
          MESSAGE('%1',CustomerNo); 
            CustomerXMLPort.SETTABLEVIEW(Customer); 
            CustomerXMLPort.SETSOURCE(InStreamQueue); 
            CustomerXMLPort.IMPORT; 
          CREATE(XMLDoc); 
          XMLDoc.save(InStreamQueue); 
          InMsg.CommitMessage; 
          CLEAR(InMsg); 
          END; 
        END; 
    

    for this code, there are no messages displayed. error messages as such i get in web page saying tht 'Timeout expired for the operation'
    thts it.
    code is correct rt??
  • zzheng
    zzheng Member Posts: 30
    I use the code like :
    But that is not good.
    Can anyone know how can i get the T_InStreamQueue?
    That I dont need to save it as a xml file first,

    IF ISCLEAR(T_XMLDoc) THEN
    IF NOT CREATE(T_XMLDoc) THEN
    ERROR(Text003);

    IF ISCLEAR(T_XMLDoc2) THEN
    IF NOT CREATE(T_XMLDoc2) THEN
    ERROR(Text003);
    T_XMLDoc2.loadXML(inParameters);
    T_XMLDoc2.save('C:\XML_Customer.xml');
    CLEAR(T_XMLDoc2);

    TestFile.OPEN('C:\XML_Customer.xml');
    TestFile.CREATEINSTREAM(T_InStreamQueue);
    XMLPORT.IMPORT(50002, T_InStreamQueue);
    TestFile.CLOSE;

    T_OutStreamQueue := T_OutMsg.GetStream();

    T_XMLDoc.loadXML ('<?xml version="1.0"?><Success:description xmlns:Success="urn:Success"/>');
    T_XMLRoot := T_XMLDoc.documentElement;
    T_XMLRoot.text := 'OK';
    T_XMLDoc.save(T_OutStreamQueue);
    T_OutMsg.Send(0);
    CLEAR(T_OutMsg);
  • zzheng
    zzheng Member Posts: 30
    :)
    IF ISCLEAR(T_XMLDoc) THEN
    IF NOT CREATE(T_XMLDoc) THEN
    ERROR(Text003);

    IF ISCLEAR(T_XMLDoc2) THEN
    IF NOT CREATE(T_XMLDoc2) THEN
    ERROR(Text003);

    T_XMLDoc2.loadXML(inParameters);
    TempBlob.Blob.CREATEOUTSTREAM(xmlOutStream);
    T_XMLDoc2.save(xmlOutStream);

    TempBlob.Blob.CREATEINSTREAM(T_InStreamQueue);
    XMLPORT.IMPORT(xmlPortNumber, T_InStreamQueue);
    CLEAR(T_XMLDoc2);

    T_OutStreamQueue := T_OutMsg.GetStream();

    T_XMLDoc.loadXML ('<?xml version="1.0"?><Success:description xmlns:Success="urn:Success"/>');
    T_XMLRoot := T_XMLDoc.documentElement;
    T_XMLRoot.text := 'OK';
    T_XMLDoc.save(T_OutStreamQueue);
    T_OutMsg.Send(0);
    CLEAR(T_OutMsg);



    Name DataType Subtype Length
    T_OutStreamQueue OutStream
    T_XMLDoc2 Automation 'Microsoft XML, v3.0'.DOMDocument
    T_XMLDoc Automation 'Microsoft XML, v3.0'.DOMDocument
    T_InStreamQueue InStream
    XMLNode Automation 'Microsoft XML, v3.0'.IXMLDOMNode
    T_XMLRoot Automation 'Microsoft XML, v3.0'.IXMLDOMNode
    TempBlob Record TempBlob
    xmlOutStream OutStream