0
votes

//Invalid Xquery content:line 89, column 44: {http://www.w3.org/2005/xqt-errors}XPST0003 [{http://xmlns.oracle.com/xdk/xquery/error}XPST0003c]: Syntax error. "/ns1:produ" is unexpected

Xquery after migrating to 1.0 V

xquery version "1.0";
(: Caring Included Logic Reset/@actioncode :)
(: Caring Fix#358 :)
(: Included CR for Project Caring :)
(: Added a xf:escape-dot function as a part of Jan - Break Fix :)
(: Included changes for Project Caring :)
(: Included mapping for accountGroups - CUG Migration :)
(: Included changes for Project AggregatedAlerts :)
(:: pragma bea:global-element-parameter parameter="$manageServiceOrder" element="ns3:manageServiceOrder" location="../../schemas/pf.bil.BillingProvisioning_3.0.xsd" ::)
(:: pragma bea:global-element-return element="ns0:CreateOrderCustomerRequest" location="../../../../resources_3.0/util/BRMAdapter/interfaces/InfranetUtilityCreate.xsd" ::)

declare namespace ns2 = "http://vodafone.com.au/ebo/vha/ProvisioningAndFulfilmentComponents/V3.0";
declare namespace ns1 = "http://vodafone.com.au/ebo/vha/CommonComponents/V3.0";
declare namespace ns3 = "http://vodafone.com.au/pf/bil/ebm/BillingProvisioning/V3.0";
declare namespace ns0 = "http://www.vodafone.co.au/infranetUtilityCreate/schema";
declare namespace xf = "http://tempuri.org/pf.bil_3.0/resources/billingProvisioning/BRM/EBO.SyncSubscription.billingProvisioning_xForm_BRM.createOrder/";
declare namespace temp = "http://www.w3.org/2001/XMLSchema";

declare xqse function xf:formatDateTimes($dateTime as element(*)*) as xs:dateTime?
{
    declare  $dateTimeValue :=data($dateTime);
   try
    {
        return value (xs:dateTime(replace(fn-bea:dateTime-to-string-with-format("yyyyMMddHHmmss",$dateTimeValue),"^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$","$1-$2-$3T$4:$5:$6")));
    }   
    catch (* into $err, $msg)
    { 
        return value (xs:dateTime(replace(fn-bea:date-to-string-with-format("yyyyMMdd",$dateTimeValue),"^(\d{4})(\d{2})(\d{2})$","$1-$2-$3T00:00:00")));
};  
};

declare xqse function xf:isValidChargeShareAtribute( $chargeShareLines as element(*)) as xs:boolean?
{
   try
    {
        iterate $attribute over $chargeShareLines/ns1:productService/ns1:attributes/ns1:attribute[fn:upper-case(ns1:name/text()) eq "CSG REFERENCE" or fn:upper-case(ns1:name/text()) eq "CSG SPONSORSHIP"]
        {
                if ( 
                        (   ($attribute/ns1:value ne "" and $chargeShareLines/@actionCode eq "New") 
                                or
                                 $chargeShareLines/@actionCode eq "Modified"
                                or
                            ($attribute/ns1:value ne "" and $chargeShareLines/@actionCode eq "Deleted") 
                        )

                    ) then return value (fn:boolean("true")) else return value( (fn:boolean("false")));
        };
    }   
    catch (* into $err, $msg)
    { return value (fn:boolean("false"));
};  
};

    declare function xf:lookupDVMWrapper($dvmName as xs:string, $sourceColumn as xs:string,$sourceValue as xs:string, $targetColumn as xs:string, $needAnException as xs:boolean)as element(*) 
 {
    let $dvmres :=(fn-bea:lookupDVM($dvmName,$sourceColumn,$sourceValue,$targetColumn,'NO DATA FOUND')) 
    return 
    if ((($dvmres='') or ($dvmres='NO DATA FOUND')) and $needAnException) 
    then 
    <dvmresp>
        <dvmexception>
    {
    concat($sourceValue,' for ',$sourceColumn,' in ',$dvmName,'.dvm', ' not found' )
    }
        </dvmexception>
    </dvmresp>
     else if((($dvmres='') or ($dvmres='NO DATA FOUND')) and not($needAnException)) 
      then 
      <dvmresp></dvmresp> 
      else 
      <dvmresp>
      {
      $dvmres
      }
      </dvmresp>
};  

declare  function xf:formatDate( $dateTime as element(*)*) as  xs:dateTime?
{
    let  $dateTimeValue :=data($dateTime)
        return xs:dateTime(replace(fn-bea:date-to-string-with-format("yyyyMMdd",$dateTimeValue),"^(\d{4})(\d{2})(\d{2})$","$1-$2-$3T00:00:00"))

};

declare  function xf:calculateVFPeriodEndDate($manageServiceOrder as element (*),$serviceLines as element(*))
    as xs:dateTime? {

  if ($serviceLines/@actionCode eq "Deleted" or $serviceLines/@actionCode eq "Suspended")
        then  xf:formatDateTimes(element{"billEffectiveDate"}{ $manageServiceOrder/ns3:serviceOrder/ns2:billingDetails/ns2:billEffectiveDate/text()})
    else if (fn:string-length(data($serviceLines/ns1:productService/ns1:periodEndDate)) >0 and data($serviceLines/ns1:productService/ns1:periodEndDate) ne "")
        then   xf:formatDate( element { "periodEndDate" } {if(fn:contains(data($serviceLines/ns1:productService/ns1:periodEndDate),"T"))then
        fn:substring-before(data($serviceLines/ns1:productService/ns1:periodEndDate),"T")
        else
        $serviceLines/ns1:productService/ns1:periodEndDate/text()})
    else if (
            for $expiryDate in $serviceLines/ns1:productService/ns1:attributes/ns1:attribute[ns1:name/text() eq "Expiry Date"]/ns1:value/text()
             return  
                if (fn:string-length($expiryDate) >0) then  xf:formatDateTimes( element { "expiryDate" } {$expiryDate}) else() )
        then 
            (
                for $expiryDate in $serviceLines/ns1:productService/ns1:attributes/ns1:attribute[fn:upper-case(ns1:name/text()) eq "EXPIRY DATE"]/ns1:value/text()
                 return  xf:formatDateTimes( element { "expiryDate" } {$expiryDate})
            )
    else () 
};
1
This is impossible to answer without seeing the actual query. - Leo Wörteler
This is the xquery after migration: - umesh
Hi Mads, still getting same error. - umesh

1 Answers

0
votes

There are several things here that aren't allowed in XQuery 1.0. The ones that stand out are:

declare  $dateTimeValue :=data($dateTime);

You can't declare local variables like that. You need let $v := expr return XXX.

return value (xs:dateTime(...);

The keyword return value is wrong and should be removed.

iterate $attribute over $chargeShareLines

I've no idea what the iterate expression does, but it's not XQuery. Looks like some variant of a for expression, but I don't know how it differs.

try {

requires XQuery 3.0/3.1, and the syntax is slightly different from yours.