XPAGES : take the answer of user by the dropdownbutton - java

I try to recover the answer of the user but i can't.
I have a dropdownbutton, I recover the list and the value by default by a java class.
It's ok about this.
But when I try to push another text of the list : nothing append...
<xe:dropDownButton id="dropdownEtatDoc">
<xe:this.treeNodes>
<xe:basicContainerNode>
<!-- Affiche l'état du document par défaut-->
<xe:this.label id="labelEtatDoc">
<![CDATA[#{javascript:
etatDoc.nomEtatDoc;
}]]>
</xe:this.label>
<!-- affiche la liste des états du document-->
<xe:repeatTreeNode var="index" value="#{etatDoc.listEtatDoc}">
<xe:this.children>
<xe:basicLeafNode label="#{index}" submitValue="#{index}" />
</xe:this.children>
</xe:repeatTreeNode>
</xe:basicContainerNode>
</xe:this.treeNodes>
<!-- actualise la chaine sélectionnée-->
<xp:eventHandler event="onItemClick" submit="true"
refreshMode="complete">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
var montest = getComponent("dropdownEtatDoc").submittedValue();
etatDoc.nomEtatDoc = montest;
}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xe:dropDownButton>
An idea ? Thanks !
I use a combobox and it's ok, I don't know why...
My code for anyone has the same problem :
<xp:this.beforePageLoad>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
viewScope.etat = etatDoc.listEtatDoc;
viewScope.grdFam = chapitre.listChapitre1;
}]]></xp:this.script>
</xp:executeScript>
</xp:this.beforePageLoad>
<xp:div>
<!--**************** DEBUT CBXETATDOC *************************************************************-->
<xp:label value="Etat : " id="label1"></xp:label>
<xp:comboBox id="cbxEtat">
<xp:selectItem itemLabel="Tout" itemValue="" />
<xp:selectItems value="#{viewScope.etat}" />
<xp:eventHandler event="onchange" submit="true" refreshMode="complete" immediate="true">
<xp:this.action>
<xp:executeScript>
<xp:this.script>
<![CDATA[#{javascript:
var etat = getComponent("cbxEtat").submittedValue;
}]]>
</xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xp:comboBox>

Assuming "etatDoc" is a NotesXspDocument and not a bean.
1) If you are having trouble getting the submitted value, get it via the context:
var submitted = context.getSubmittedValue();
print("submitted: " + submitted); //check if it is there, delete afterward
switch(submitted){
case("btn1")
//doSomething(submitted);
break;
}
Since you are using the repeater node, it would not be practical to use the switch for all of it, but you could make a default where you do what ever you need to with the index value.
2) then I do not think you are setting the value properly. Try:
var montest = submitted;
etatDoc.replaceItemValue("nomEtatDoc", etatDoc.getItemValue("nomEtatDoc").add(montest))
//gets the current list (java.util.Vector) from the document
//add a value to the list
//replace the value with the new list
I am assuming that you are not using a self-made-bean for this.

Related

Selenium Webdriver (Java) - How to work around dynamic text and countdown timer?

I am working on automating a sign up that contains a counter.
So the thing is, I want to sign up to something that occurs every 7 minutes.
Here is what the web code looks like:
<class-countdown-timer _ngcontent-c19="" _nghost-c24="">
<!---->
<h2 _ngcontent-c24="" id="class-countdown-timer">Próxima clase en vivo en <span _ngcontent-c24="" class="countdown-timer">02:15</span>
<i _ngcontent-c24="" aria-hidden="true" class="icon-clock"></i>
</h2>
</class-countdown-timer>
My issue is that the "class-countdown-timer" text is dynamic and the "countdown-timer" its a countdown, from 07:00 to 00:00.
My cry for help is that I need to perform a certain action when the "class-countdown-timer" text is "Próxima clase en vivo en " and the counter is in between "05:00" and "02:00"
I can't get to work a fluent wait that waits until first, countdown text shows the above and the timer is between those times, any idea?
thanks :D
Try the below code :
// Count-down timer for looping upto 8 minutes
int countdown = 480;
while(countdown-->0) {
// Fetching the actual class-countdown-timer value
String actualTimerText = driver.findElement(By.id("class-countdown-timer")).getText().trim();
String expectedTimerText = "Próxima clase en vivo en ";
// Fetching the actual countdown-timer value
String countdownTimer = driver.findElement(By.xpath("//span[#class='countdown-timer']")).getText().trim();
// Converting the time for better comparing
SimpleDateFormat format = new SimpleDateFormat("hh:mm");
Date expectedFirstTime = format.parse("05:00"), expectedSecondTime = format.parse("02:00");
Date actualCountdownTimer = format.parse(countdownTimer);
// Checking the condition if the 'class-countdown-timer' text is 'Próxima clase en vivo ee' and counter is in between '05:00' and '02:00' or not?
if(actualTimerText.equals(expectedTimerText) && ((actualCountdownTimer.equals(expectedSecondTime) || actualCountdownTimer.after(expectedSecondTime)) && (actualCountdownTimer.equals(expectedFirstTime) || actualCountdownTimer.before(expectedFirstTime)))) {
System.out.println("Condition Satisfied...");
// Do something
break;
}
// Waiting for one second before finding the element and checking the condition
Thread.sleep(1000);
}
The above approach is using the looping concept, iterate up to 8 minutes(480 seconds) until the required condition get satisfied.

Selenium xpath for complex dynamic span

For complex site that has a step hierarchical structure (Region-Site-Zone-ZoneID), I'm trying to build a dynamic xpath for counting ZoneID (1..10)
Structure
<div class="aic-tree-branch-content VAD2" ng-click="events.selectZone(site.id, zone.id)">
<span class="new-sprite unimported selected" ng-class="{'imported': zone.zoneImported, 'unimported': !zone.zoneImported, 'selected': zone.zoneName === selecteds.zone}"></span>
<span class="aic-tree-branch-content-name ng-binding" ng-bind-html="zone.zoneName | highlightFilter: model.searchTerm" ng-click="ui.selectTreeNode(zone.zoneName, 'zone')">VAD2</span>
<span class="aic-tree-branch-content-type zone-type ng-binding" ng-bind="'('+zone.designTypeName+')'">(M)</span>
<span class="aic-tree-branch-content-icon new-sprite zone-state in-creation-small" ng-class="ui.getZoneStatusIcon(zone.zoneState, zone.zonePhase)"></span>
</div>
Code
public static void refreshAndOpenMultiZones(WebDriver driver, String SiteName, String zoneName) throws Exception {
driver.navigate().refresh();
for (int num=1; num<3; num++) {
logger.info("Open existing zone: " + SiteName + num + " in North America");
//Select desired zone in site
By ByZoneName = By.xpath("//span[.='"+zoneName+"']");
logger.info("Select Zone: "+ zoneName);
Utils.wait(5);
driver.findElement(ByZoneName).click();
logger.info("Wait for page to be loaded");
GeneralUtils.waitForElevationPage(driver, timeOutSec);
}
}
The problem: How to combine the code line
By ByZoneName = By.xpath("//span[.='"+zoneName+"']");
for dynamic zoneName id (for the same execution VAD1, VAD2, VAD3.... VAD10)
Actual:
This structure is executed correctly for zoneName=VAD1 and after this in the second curcle is failed with Exception
--- Unable to locate element: {"method":"xpath","selector":"//span[.'VAD']"}
Question:
How to create dynamic structure for xpath with zoneName?
i.e.
By ByZoneName = By.xpath("//span[.='"+zoneName.lastIndexOf(num)+"']");
is failed with Exception
Unable to locate element: {"method":"xpath","selector":"//span[.='-1']"}
Inside your loop you need to either initially establish the web page or alternatively, navigate BACK to that original page at the end of the loop before attempting to locate and click another web element.
It cannot locate the next zone because the page is not the same.

defining an object property in a compositeData on a custom control

I'm building an application where I have mainDoc which can have one or more related notes Documents. In the mainDoc there is a repeat control that is bound to Payments.getAllItems(WFSMainDoc.getValue("LinkKey")); The java class Payments has methods that manipulate and ArrayList of PaymentItems. The getAllItems method grabs all of the related NotesDocuments and loads them into an ArrayList. If the ArrayList already exists it just returns the previously built ArrayList. The button in the Repeat sets viewScope.vsRIndex = rIndex; and viewScope.vsShowPayment = true; which now displays the panelPaymentDetail and the custom control that has a custom property of type java.lang.Object and load pItem using pItem = Payments.getItem(rIndex); return pItem;
all of the above works and I have a couple sample controls below. I have two issues:
1. The compositeData.pItem is computed over and over again and as far as I can tell keeps returning the original values from the Payments.getAllItems() even though I'm editing them in the payment input 'form' -- the question then is how can I block this repeated calculation?
The save button in the Payment Input custom control does not appear to fire (none of the print statements occur when clicked) I think the reloading of the Object pItem gets in the way.
Test Main Document Control:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.data>
<xp:dominoDocument var="WFSMainDoc" formName="frmMainDoc"
computeWithForm="onsave" ignoreRequestParams="false">
<xp:this.documentId><![CDATA[${javascript:var UNID:String = sessionScope.get("ssUNID");
(UNID == null || UNID == "") ? "" : UNID}]]></xp:this.documentId>
<xp:this.action><![CDATA[${javascript:if (sessionScope.containsKey("ssUNID")){
if(sessionScope.get('ssUNID').length){
sessionScope.get('ssAction') == 'edit' ? 'editDocument':'openDocument'
} else {
return 'createDocument'
break;
}
}else{
return "createDocument";
break;
}}]]></xp:this.action>
<xp:this.databaseName><![CDATA[${appProps[sessionScope.ssApplication].appFilePath}]]></xp:this.databaseName>
</xp:dominoDocument>
</xp:this.data>
Main document
<xp:br></xp:br>
<xp:inputText id="inputText1" value="#{WFSMainDoc.LinkKey}"
defaultValue="#{javascript:#Unique}">
</xp:inputText>
<xp:br></xp:br>
Other Fields and controls
<xp:br></xp:br>
<xp:panel id="panelPaymentContainer">
<xp:repeat id="repeatData" rows="10" var="pItem"
indexVar="rIndex">
<xp:this.value><![CDATA[#{javascript:Payments.getAllItems(WFSMainDoc.getValue("LinkKey"));}]]></xp:this.value>
<xp:button id="buttonEditPayment"
rendered="#{javascript:(WFSMainDoc.isEditable())}">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="panelPaymentsContainer">
<xp:this.action><![CDATA[#{javascript:try{
viewScope.vsRIndex = rIndex;
viewScope.vsShowPayment = true;
break;
}catch(e){
WFSUtils.sysOut("Error in calling dialogPayment " + e.tostring)
}}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>
<br />
</xp:repeat>
<xp:panel id="panelPaymentInput">
<xp:this.styleClass><![CDATA[#{javascript:(viewScope.vsShowPayment) ? "" : "display=none";}]]></xp:this.styleClass>
<xc:ccTestPaymentInput rendered="#{javascript:(viewScope.vsShowPayment)}">
<xc:this.pItem><![CDATA[#{javascript:try{
var debug:Boolean = true;
if (debug) WFSUtils.sysOut("Open existing row = " + viewScope.vsRIndex)
rIndex = parseInt(viewScope.vsRIndex.toString());
if (debug) WFSUtils.sysOut("rIndex = " + rIndex);
pItem = Payments.getItem(rIndex);
return pItem;
}catch(e){
WFSUtils.sysOut("Failure in Custom Prop of add item " + e.toString());
return null;
}}]]></xc:this.pItem>
</xc:ccTestPaymentInput>
</xp:panel>
</xp:panel><!-- panelPaymentContainer -->
<xp:br></xp:br>
<xp:br></xp:br>
</xp:view>
payment Input Control
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:br></xp:br>
Actual Pay Date: 
<xp:inputText id="actualPayDate"
value="#{compositeData.pItem.actualPayDate}">
<xp:dateTimeHelper id="dateTimeHelper1"></xp:dateTimeHelper>
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
</xp:inputText>
<br /> <br />
<xp:button value="Save" id="button1">
<xp:eventHandler event="onclick"
submit="true" refreshMode="partial" refreshId="panelPayments">
<xp:this.action><![CDATA[#{javascript:try{
var debug:Boolean = true;
if (debug) print("Start Payment save");
var pos:Integer = parseInt(viewScope.vsRIndex.toString());
if (debug) print("Working with pos = " + pos + " Call saveThisItem");
if (Payments.saveThisItem(compositeData.pItem , pos)){
if (debug) print("save Payments Worked ");
}else{
if (debug) print("save Payments FAILED ");
}
}catch(e){
print("payment save Error " + e.tostring);
}finally{
viewScope.vsExpPayDate = "";
viewScope.remove("vsShowPayment");
viewScope.remove("vsRIndex");
viewScope.remove("vsGotItem")
}}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
This is all very complicated, and I'm far from understanding what you're trying to achieve here. But at least I found a few oddities in your code:
ad 1: there is a panel with id="panelPaymentContainer" containing a repeat. Inside that repeat is a button doing a partialRefresh on an id="panelPaymentsContainer" >> is this a typo (plural vs. singular forms in "Payment(s))? Should the button be refreshing the panel?
Assuming that this assumption is true: every time you click the button the panel is refreshed together with all its contents, thus also refreshing the repeat's datasource. And so pItem will always be pushed from "outside in" into the content of your repeat. - If the refreshId thing is NOT a typo, then what should it be? I tried hard to read the entire code, but there's a lot of it, so I might have missed something
ad 2: similar thing here: the save button tries to refresh something with an id="panelPayments", but I cannot see anything with this id. So no wonder it doesn't appear to do anything useful.
My recommendation for complicated tasks like these: try to strip everything down to the bare essentials; the more complicated your code is the harder it is to find its mistakes. Start with a panel, a repeat and a few simple controls like a button and a bunch of computed fields to display some test values. Then as soon as this very simple model is working you can start to add to it. - Simplifying also helps others to find mistakes in you concept, btw.

Recieving json with html tags fails in PHP

I have a website that sends and receives string in JSON format from my Java REST server with jersey. Everything works fine until I'm trying to receive a json object with html tags.
A println on my java server tells me that this data has ben sent:
data sent: {"text": "Wij zijn Pixel Apps, ook wel bekend als Groep 6.<br />
Samen met onze 6 groepsleden verzorgen wij het reilen en zijlen op Ford Lommel Proving Grounds.<br />
<br />
<b>Korte inleiding</b><br />
<p>Onze taak bestaat er uit een functionele applicatie te maken binnen Windows 8. De app bestaat er uit de chauffeurs te begeleiden op hun testritten.<br />De chauffeurs worden onder andere geholpen bij het bekijken van hun routineplan, het bijhouden van notities en het overzetten van de resultaten naar het hoofdgebouw.</p>
<b>Bijkomende hoort natuurlijk het onderhouden van deze website.</b>
<p>Zoals u kan zien vind u hierboven het navigatiemenu.<br />
Voor meer informatie over ons project kan u terecht bij <i>Over ons</i><br />
Wenst u contact op te nemen? U kan zich wenden naar het tabblad <i>Contact</i><br />
Indien u meer over de individuele groepsleden wil weten kan u terecht bij <i>Leden</i><br />
Als u meer informatie wenst over ons project, gelieve contact op te nemen met ons en wij verzorgen uw verzoek.</p>
<b>Happy browsing!</b>"}
It's basically a simple json with one variable "text" and as content some HTML formatted content. I've googled my issue and it seems that this should work fine.
Here's my java GET method that fails to send json with html tags in it's content:
#GET
#Path("gettext")
#Produces("application/json")
public String getJson(#QueryParam("id") String id, #QueryParam("taalcode") String taalcode) {
Connectie c = new Connectie();
try
{
c.openConnectie();
String content = c.getCms(id, taalcode);
if (content == null || content.equals("")) {
content = "{ \"text\" : \"Geen tekst gevonden.\" }";
}
System.out.println("data send: "+content);
return content;
}
catch(Exception e)
{
System.out.println("data send: { \"text\" : \"Server error, sorry.\" }");
return "{ \"text\" : \"Server error, sorry.\" }";
}
}
My put method successfully receives a json with html tags in it's content.
Here's how I receive my json objects in PHP (which again works if no html tags are present):
public function getCMS($id) {
$taalcode = '';
if($this->session->userdata('language') == 'nederlands') {
$taalcode = 'NL';
} else {
$taalcode = 'EN';
}
$curl_instance = curl_init();
curl_setopt($curl_instance, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_instance, CURLOPT_URL, 'http://192.168.0.251:8084/Groep1/webresources/cmspost/gettext?id='.$id.'&taalcode='.$taalcode);
try {
$data = json_decode(curl_exec($curl_instance), true);
if ($data == null) {
$data['text'] = "Altough I set a string in my java get method if it's null, this message is always printed";
}
return $data;
} catch (HttpException $ex) {
$data['text'] = $ex;
return $data;
}
}
In PHP I test if ($data == null) which is always true, even though I set a string manually in my GET method if appears to be null before sending the string.
What am I doing wrong?
The problem is not with HTML. The problem is that JSON does not allow multi-line strings. If you remove the line breaks, your JSON works fine.
NB that you really should use a JSON library for building JSON, rather than doing it yourself, because it will deal with this kind of issue.

Flex/Flash 4 datagrid displays raw xml

Problem: Flex/Flash4 client (built with FlashBuilder4) displays the xml sent from the server exactly as is - the datagrid keeps the format of the xml. I need the datagrid to parse the input and place the data in the correct rows and columns of the datagrid.
flow: click on a date in the tree and it makes a server request for batch information in xml form. Using a CallResponder I then update the datagrid's dataProvider.
[code]
<fx:Script>
<![CDATA[
import mx.controls.Alert;
[Bindable]public var selectedTreeNode:XML;
public function taskTreeChanged(event:Event):void {
selectedTreeNode=Tree(event.target).selectedItem as XML;
var searchHubId:String = selectedTreeNode.#hub;
var searchDate:String = selectedTreeNode.#lbl;
if((searchHubId == "") || (searchDate == "")){
return;
}
findShipmentBatches(searchDate,searchHubId);
}
protected function findShipmentBatches(searchDate:String, searchHubId:String):void{
findShipmentBatchesResult.token = actWs.findShipmentBatches(searchDate, searchHubId);
}
protected function updateBatchDataGridDP():void{
task_list_dg.dataProvider = findShipmentBatchesResult.lastResult;
}
]]>
</fx:Script>
<fx:Declarations>
<actws:ActWs id="actWs" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
<s:CallResponder id="findShipmentBatchesResult" result="updateBatchDataGridDP()"/>
</fx:Declarations>
<mx:AdvancedDataGrid id="task_list_dg" width="100%" height="95%" paddingLeft="0" paddingTop="0" paddingBottom="0">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="Receiving date" dataField="rd"/>
<mx:AdvancedDataGridColumn headerText="Msg type" dataField="mt"/>
<mx:AdvancedDataGridColumn headerText="SSD" dataField="ssd"/>
<mx:AdvancedDataGridColumn headerText="Shipping site" dataField="sss"/>
<mx:AdvancedDataGridColumn headerText="File name" dataField="fn"/>
<mx:AdvancedDataGridColumn headerText="Batch number" dataField="bn"/>
</mx:columns>
</mx:AdvancedDataGrid>
//xml example from server
<batches>
<batch>
<rd>2010-04-23 16:31:00.0</rd>
<mt>SC1REVISION01</mt>
<ssd>2010-02-18 00:00:00.0</ssd>
<sss>100000009</sss>
<fn>Revision 1-DF-Ocean-SC1SUM-Quanta-PACT-EMEA-Scheduled Ship Date 20100218.csv</fn>
<bn>10041</bn>
</batch>
<batches>
[/code]
and the xml is pretty much displayed exactly as is shown in the example above in the datagrid columns...
I would appreciate your assistance.
I tried a simplified version of your sample using a simple xml literal, and it works fine for me..
here's what I've got
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function onCreationCompleteHandler(event:FlexEvent):void
{
task_list_dg.dataProvider = data..batch;
}
private var data:XML = //xml example from server
<batches>
<batch>
<rd>2010-04-23 16:31:00.0</rd>
<mt>SC1REVISION01</mt>
<ssd>2010-02-18 00:00:00.0</ssd>
<sss>100000009</sss>
<fn>Revision 1-DF-Ocean-SC1SUM-Quanta-PACT-EMEA-Scheduled Ship Date 20100218.csv</fn>
<bn>10041</bn>
</batch>
</batches>;
]]>
</fx:Script>
<mx:AdvancedDataGrid id="task_list_dg" width="100%" height="95%" paddingLeft="0" paddingTop="0" paddingBottom="0">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="Receiving date" dataField="rd"/>
<mx:AdvancedDataGridColumn headerText="Msg type" dataField="mt"/>
<mx:AdvancedDataGridColumn headerText="SSD" dataField="ssd"/>
<mx:AdvancedDataGridColumn headerText="Shipping site" dataField="sss"/>
<mx:AdvancedDataGridColumn headerText="File name" dataField="fn"/>
<mx:AdvancedDataGridColumn headerText="Batch number" dataField="bn"/>
</mx:columns>
</mx:AdvancedDataGrid>
Are you sure your data is arriving in the format you're suggesting?
(check the Data/Services tab in FB)
What do you mean by "displays the xml sent from the server exactly as is - the datagrid keeps the format of the xml" ? does it dump xml content in the grid cells?
Edit: Have you tried doing this?
protected function updateBatchDataGridDP():void{
task_list_dg.dataProvider = findShipmentBatchesResult.lastResult..batch;
}
had to resort to this monstrosity ----> is there a better way???
protected function updateBatchDataGridDP():void{
var batches:XML = new XML(findShipmentBatchesResult.lastResult);
task_list_dg.dataProvider = batches.batch;
var task_list_col1:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col1.dataField = "#rd";
task_list_col1.headerText = "Receiving date";
var task_list_col2:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col2.dataField = "#mt";
task_list_col2.headerText = "Msg type";
var task_list_col3:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col3.dataField = "#ssd";
task_list_col3.headerText = "SSD";
var task_list_col4:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col4.dataField = "#sss";
task_list_col4.headerText = "Shipping site";
task_list_status.text = batches.batch.#sss;
var task_list_col5:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col5.dataField = "#fn";
task_list_col5.headerText = "File name";
var task_list_col6:AdvancedDataGridColumn = new AdvancedDataGridColumn();
task_list_col6.dataField = "#bn";
task_list_col6.headerText = "Batch number";
var myColumns:Array = new Array();
myColumns.push(task_list_col1);
myColumns.push(task_list_col2);
myColumns.push(task_list_col3);
myColumns.push(task_list_col4);
myColumns.push(task_list_col5);
myColumns.push(task_list_col6);
task_list_dg.columns = myColumns;
}
with this xml structure:
<batches>
<batch rd="2010-04-23 16:31:00.0" mt="SC1REVISION01" ssd="2010-02-18 00:00:00.0" sss="Quanta" fn="Revision 1-DF-Ocean-SC1SUM-Quanta-PACT-EMEA-Scheduled Ship Date 20100218.csv" bn="SHA201004230033" />
<batch rd="2010-04-23 16:32:14.0" mt="SC1" ssd="2010-02-11 00:00:00.0" sss="Quanta" fn="DF-Ocean-SC1SUM-Quanta-PACT-EMEA-Scheduled Ship Date 20100211.csv" bn="SHA201004230043" />
<batch rd="2010-04-23 16:35:51.0" mt="PRESHIP" ssd="2010-02-15 00:00:00.0" sss="Quanta" fn="DF-Ocean-PRESHIPSUM-Quanta-PACT-EMEA-Scheduled Ship Date 20100215.csv" bn="SHA201004230045" />
</batches>

Categories