Web Service, Inserting data
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.
Please help me in doing this
Thanks & regards,
Vikas
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
0
Comments
-
Hi Vikas
What excactly does not work? Error messages?
Regards
Thomas0 -
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 same0 -
I cant test it at the moment. But does look quite ok. Do you receive an error msg?0
-
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??0 -
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);0 -

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 OutStream0
Categories
- All Categories
- 75 General
- 75 Announcements
- 66.7K Microsoft Dynamics NAV
- 18.8K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 610 NAV Courses, Exams & Certification
- 1.9K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 250 Dynamics CRM
- 102 Dynamics GP
- 6 Dynamics SL
- 1.5K Other
- 991 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 28 Design Patterns (General & Best Practices)
- Architectural Patterns
- 9 Design Patterns
- 4 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1K General Chat
- 1.6K Website
- 77 Testing
- 1.2K Download section
- 23 How Tos section
- 249 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions