vigneshrao
Programmer
Hi,
I have been working on a script that loops through multiple records and sends data (one record per call) to a WS.
I am supposed to make a new call for each record before sending the data.
The problem I have is the first record gets processed fine where as the second record always; reason being the EAI expects it to be a seperate call
Though I am creating/reseting a new service everytime within the foreach loop the data seems to be going as a single call.
If you see record 1 and 2 below it has 2 different namespace i.e. namesp1 and namesp2; The EAI is expection namesp1 for both.
Any suggestions on this would be greatly appreciated.
Please find the sample code below
Thanks,
Vignesh
<code>
Result:
----------Record 1--------------------
SOAP::Transport::HTTP::Client::send_receive: POST Accept: text/xml
Accept: multipart/*
Content-Length: 4174
Content-Type: text/xml; charset=iso-8859-1
SOAPAction: "
<?xml version="1.0" encoding="iso-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENC=" SOAP-ENV:encodingStyle=" xmlns:SOAP-ENV=" xmlns:xsi=" xmlns:xsd="<SOAP-ENV:Body><namesp1:MyService xmlns:namesp1="<eSparesMessage>
<Header>
<Basic>
<ServiceType xsi:type="xsd:string">Return for Repair</ServiceType>
<OrderType xsi:type="xsd:string">SO</OrderType>
<ServiceObjectiveType xsi:type="xsd:string">Deliver</ServiceObjectiveType>
</Header>
<LineItem>
<PartTrackingNumber xsi:type="xsd:string">5-0277051.001</PartTrackingNumber>
<ItemLineNumber xsi:type="xsd:int">1</ItemLineNumber>
</LineItem></eSparesMessage>
</namesp1:MyService></SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.0 200 OK
Connection: Close
Content-Length: 551
Content-Type: text/xml;charset=utf-8
Client-Date: Mon, 18 May 2009 13:45:52 GMT
Client-Peer: 139.54.50.110:6055
Client-Response-Num: 1
Set-Cookie: ssnid=607wTxHRjth3kUcEx81g2G648Lg4bA-6055110; path=/;
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=" xmlns:SOAP-ENC=" xmlns:xsd=" xmlns:xsi="<SOAP-ENV:Body>
<namesp1:ReturnCode xmlns:namesp1=" <Number>409</Number>
<Message>Error on SPT 5-0277051.001 RMA already exist</Message>
</namesp1:ReturnCode></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
-----------------Record 2-----------------------
SOAP::Transport::HTTP::Client::send_receive: POST Accept: text/xml
Accept: multipart/*
Content-Length: 4851
Content-Type: text/xml; charset=iso-8859-1
SOAPAction: "
<?xml version="1.0" encoding="iso-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENC=" SOAP-ENV:encodingStyle=" xmlns:SOAP-ENV=" xmlns:xsi=" xmlns:xsd="<SOAP-ENV:Body><namesp2:MyService xmlns:namesp2="<eSparesMessage>
<Header>
<Basic>
<ServiceType xsi:type="xsd:string">Return for Repair</ServiceType>
<OrderType xsi:type="xsd:string">SO</OrderType>
<ServiceObjectiveType xsi:type="xsd:string">Deliver</ServiceObjectiveType>
</Header>
<LineItem>
<PartTrackingNumber xsi:type="xsd:string">5-0277051.001</PartTrackingNumber>
<ItemLineNumber xsi:type="xsd:int">1</ItemLineNumber>
</LineItem></eSparesMessage>
</namesp1:MyService></SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.0 200 OK
Connection: Close
Content-Length: 483
Content-Type: text/xml;charset=utf-8
Client-Date: Mon, 18 May 2009 13:46:03 GMT
Client-Peer: 139.54.50.110:6055
Client-Response-Num: 1
Set-Cookie: ssnid=608VHK+hloKXk7KOxJLtI5+9F|Jh0U-6055110; path=/;
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=" xmlns:SOAP-ENC=" xmlns:xsd=" xmlns:xsi="<SOAP-ENV:Body>
<namesp1:ReturnCode xmlns:namesp1=" <Number>2</Number>
</namesp1:ReturnCode></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Script:
foreach $rank_temp (@temp_arr){
......Queries for rank to get corresponding records......
......Loop for each record......
foreach (keys %eSpares_entries){
$service = SOAP::Lite->uri($wsdl_path)
->proxy($proxy_path)
->encoding('iso-8859-1');
......Get required data to be sent through EAI......
foreach $prd_id (keys %prd_entries){
$lineitem++;
$lineitem_data = SOAP:
ata->name('LineItem' => \SOAP:
ata->value(SOAP:
ata
->name('PartTrackingNumber' => $prd_entries{$prdid}->{$prd_field_values{'Supplier Service Order'}}), SOAP:
ata
->name('ItemLineNumber' => $lineitem), SOAP:
ata
->name('MaterialCode' => '3AL01001PP'), SOAP:
ata
->name('SwapAllowed' => $swap_allowed), SOAP:
ata
->name('ScrapAllowed' => $scrap_allowed), SOAP:
ata
->name('ReturnWarrantyFlag' => $prd_entries{$prdid}->{$prd_field_values{'Return Warranty Flag'}}), SOAP:
ata
->name('WBSNumber' => $sae_entries{$sae_id}->{$wbs_field_name}), SOAP:
ata
->name('InventoryAccount' => $prd_entries{$prdid}->{$prd_field_values{'Inventory Account'}}), SOAP:
ata
->name('ProblemSummary' => $prd_entries{$prdid}->{$prd_field_values{'Problem Description'}}), SOAP:
ata
->name('SWRelease' => $prd_entries{$prdid}->{$prd_field_values{'Additional Info'}})));
push (@lineitem_arr, $lineitem_data);
}
$header_data = SOAP:
ata->name('eSparesMessage' => \SOAP:
ata->value(SOAP:
ata
->name('Header' => \SOAP:
ata->value(SOAP:
ata
->name('Basic' => \SOAP:
ata->value(SOAP:
ata
->name('ServiceType' => $supp_serv_ord_type), SOAP:
ata
->name('DirectShipmentIndicator' => 'Y'), SOAP:
ata
->name('OperationalFlowIndicator' => 'C'), SOAP:
ata
->name('CustomerRequestedDate' => $cust_req_date), SOAP:
ata
->name('IncotermsType' => 'DDP'), SOAP:
ata
->name('IncotermsCity' => $inc_city), SOAP:
ata
->name('PaymentTerm' => $pay_term), SOAP:
ata
->name('B2BAgreementNumber' => $b2b_agreement), SOAP:
ata
->name('ServiceSLA' => $service_sla), SOAP:
ata
->name('ReplenishmentFlag' => $rep_flag), SOAP:
ata
->name('RMANumber' => $rma_number), SOAP:
ata
->name('CustomerReference' => $customer_reference), SOAP:
ata
->name('DeliveryTimeLine' => $delivery_time_line),SOAP:
ata
->name('DirectShipmentIndicator' => 'Y'))
), SOAP:
ata
->name('lines' => @lineitem_arr))));
..... Send data to EAI......
$result = $service[$y]->MyService($header_data);
}
</code>
I have been working on a script that loops through multiple records and sends data (one record per call) to a WS.
I am supposed to make a new call for each record before sending the data.
The problem I have is the first record gets processed fine where as the second record always; reason being the EAI expects it to be a seperate call
Though I am creating/reseting a new service everytime within the foreach loop the data seems to be going as a single call.
If you see record 1 and 2 below it has 2 different namespace i.e. namesp1 and namesp2; The EAI is expection namesp1 for both.
Any suggestions on this would be greatly appreciated.
Please find the sample code below
Thanks,
Vignesh
<code>
Result:
----------Record 1--------------------
SOAP::Transport::HTTP::Client::send_receive: POST Accept: text/xml
Accept: multipart/*
Content-Length: 4174
Content-Type: text/xml; charset=iso-8859-1
SOAPAction: "
<?xml version="1.0" encoding="iso-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENC=" SOAP-ENV:encodingStyle=" xmlns:SOAP-ENV=" xmlns:xsi=" xmlns:xsd="<SOAP-ENV:Body><namesp1:MyService xmlns:namesp1="<eSparesMessage>
<Header>
<Basic>
<ServiceType xsi:type="xsd:string">Return for Repair</ServiceType>
<OrderType xsi:type="xsd:string">SO</OrderType>
<ServiceObjectiveType xsi:type="xsd:string">Deliver</ServiceObjectiveType>
</Header>
<LineItem>
<PartTrackingNumber xsi:type="xsd:string">5-0277051.001</PartTrackingNumber>
<ItemLineNumber xsi:type="xsd:int">1</ItemLineNumber>
</LineItem></eSparesMessage>
</namesp1:MyService></SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.0 200 OK
Connection: Close
Content-Length: 551
Content-Type: text/xml;charset=utf-8
Client-Date: Mon, 18 May 2009 13:45:52 GMT
Client-Peer: 139.54.50.110:6055
Client-Response-Num: 1
Set-Cookie: ssnid=607wTxHRjth3kUcEx81g2G648Lg4bA-6055110; path=/;
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=" xmlns:SOAP-ENC=" xmlns:xsd=" xmlns:xsi="<SOAP-ENV:Body>
<namesp1:ReturnCode xmlns:namesp1=" <Number>409</Number>
<Message>Error on SPT 5-0277051.001 RMA already exist</Message>
</namesp1:ReturnCode></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
-----------------Record 2-----------------------
SOAP::Transport::HTTP::Client::send_receive: POST Accept: text/xml
Accept: multipart/*
Content-Length: 4851
Content-Type: text/xml; charset=iso-8859-1
SOAPAction: "
<?xml version="1.0" encoding="iso-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENC=" SOAP-ENV:encodingStyle=" xmlns:SOAP-ENV=" xmlns:xsi=" xmlns:xsd="<SOAP-ENV:Body><namesp2:MyService xmlns:namesp2="<eSparesMessage>
<Header>
<Basic>
<ServiceType xsi:type="xsd:string">Return for Repair</ServiceType>
<OrderType xsi:type="xsd:string">SO</OrderType>
<ServiceObjectiveType xsi:type="xsd:string">Deliver</ServiceObjectiveType>
</Header>
<LineItem>
<PartTrackingNumber xsi:type="xsd:string">5-0277051.001</PartTrackingNumber>
<ItemLineNumber xsi:type="xsd:int">1</ItemLineNumber>
</LineItem></eSparesMessage>
</namesp1:MyService></SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.0 200 OK
Connection: Close
Content-Length: 483
Content-Type: text/xml;charset=utf-8
Client-Date: Mon, 18 May 2009 13:46:03 GMT
Client-Peer: 139.54.50.110:6055
Client-Response-Num: 1
Set-Cookie: ssnid=608VHK+hloKXk7KOxJLtI5+9F|Jh0U-6055110; path=/;
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=" xmlns:SOAP-ENC=" xmlns:xsd=" xmlns:xsi="<SOAP-ENV:Body>
<namesp1:ReturnCode xmlns:namesp1=" <Number>2</Number>
</namesp1:ReturnCode></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Script:
foreach $rank_temp (@temp_arr){
......Queries for rank to get corresponding records......
......Loop for each record......
foreach (keys %eSpares_entries){
$service = SOAP::Lite->uri($wsdl_path)
->proxy($proxy_path)
->encoding('iso-8859-1');
......Get required data to be sent through EAI......
foreach $prd_id (keys %prd_entries){
$lineitem++;
$lineitem_data = SOAP:



->name('PartTrackingNumber' => $prd_entries{$prdid}->{$prd_field_values{'Supplier Service Order'}}), SOAP:

->name('ItemLineNumber' => $lineitem), SOAP:

->name('MaterialCode' => '3AL01001PP'), SOAP:

->name('SwapAllowed' => $swap_allowed), SOAP:

->name('ScrapAllowed' => $scrap_allowed), SOAP:

->name('ReturnWarrantyFlag' => $prd_entries{$prdid}->{$prd_field_values{'Return Warranty Flag'}}), SOAP:

->name('WBSNumber' => $sae_entries{$sae_id}->{$wbs_field_name}), SOAP:

->name('InventoryAccount' => $prd_entries{$prdid}->{$prd_field_values{'Inventory Account'}}), SOAP:

->name('ProblemSummary' => $prd_entries{$prdid}->{$prd_field_values{'Problem Description'}}), SOAP:

->name('SWRelease' => $prd_entries{$prdid}->{$prd_field_values{'Additional Info'}})));
push (@lineitem_arr, $lineitem_data);
}
$header_data = SOAP:



->name('Header' => \SOAP:


->name('Basic' => \SOAP:


->name('ServiceType' => $supp_serv_ord_type), SOAP:

->name('DirectShipmentIndicator' => 'Y'), SOAP:

->name('OperationalFlowIndicator' => 'C'), SOAP:

->name('CustomerRequestedDate' => $cust_req_date), SOAP:

->name('IncotermsType' => 'DDP'), SOAP:

->name('IncotermsCity' => $inc_city), SOAP:

->name('PaymentTerm' => $pay_term), SOAP:

->name('B2BAgreementNumber' => $b2b_agreement), SOAP:

->name('ServiceSLA' => $service_sla), SOAP:

->name('ReplenishmentFlag' => $rep_flag), SOAP:

->name('RMANumber' => $rma_number), SOAP:

->name('CustomerReference' => $customer_reference), SOAP:

->name('DeliveryTimeLine' => $delivery_time_line),SOAP:

->name('DirectShipmentIndicator' => 'Y'))
), SOAP:

->name('lines' => @lineitem_arr))));
..... Send data to EAI......
$result = $service[$y]->MyService($header_data);
}
</code>