1
- /*! camlsqj-js v0.5.1 | (c) dlid.se | https://camlsqljs.dlid.se/license */
1
+ /*! camlsqj-js v0.5.2 | (c) dlid.se | https://camlsqljs.dlid.se/license */
2
2
( function ( global , factory ) {
3
3
'use strict' ;
4
4
typeof exports === 'object' && typeof module !== 'undefined' ? ( module . exports = factory ( ) ) :
@@ -215,14 +215,14 @@ var CamlSqlDateParameter = {
215
215
stringValue : '' ,
216
216
add : function ( intervalString ) {
217
217
this . errstr ( ) ;
218
- var diff = getIntervalStringAsMs ( intervalString )
218
+ var diff = getIntervalStringAsMs ( intervalString ) ;
219
219
this . value = new Date ( this . value . getTime ( ) + diff ) ;
220
220
this . today = false ;
221
221
return this ;
222
222
} ,
223
223
sub : function ( intervalString ) {
224
224
this . errstr ( ) ;
225
- var diff = getIntervalStringAsMs ( intervalString )
225
+ var diff = getIntervalStringAsMs ( intervalString ) ;
226
226
this . value = new Date ( this . value . getTime ( ) - diff ) ;
227
227
this . today = false ;
228
228
return this ;
@@ -295,6 +295,9 @@ var CamlSqlDateParameter = {
295
295
296
296
297
297
function createGuidParameter ( value ) {
298
+ if ( typeof value === "undefined" ) {
299
+ throw "[camlsql] Missing parameter" ;
300
+ }
298
301
return {
299
302
type : 'Guid' ,
300
303
value : value
@@ -325,19 +328,19 @@ function createMembershipParameter(type, id) {
325
328
} ;
326
329
}
327
330
328
- function createMultiChoiceParameter ( value ) {
329
- return {
330
- type : 'MultiChoice' ,
331
- value : value
332
- } ;
333
- }
331
+ // function createMultiChoiceParameter(value) {
332
+ // return {
333
+ // type : 'MultiChoice',
334
+ // value : value
335
+ // };
336
+ // }
334
337
335
- function createChoiceParameter ( value ) {
336
- return {
337
- type : 'Choice' ,
338
- value : value
339
- } ;
340
- }
338
+ // function createChoiceParameter(value) {
339
+ // return {
340
+ // type : 'Choice',
341
+ // value : value
342
+ // };
343
+ // }
341
344
342
345
// function createUrlParameter(value) {
343
346
// return {
@@ -405,7 +408,7 @@ function executeSPQuery(options) {
405
408
console . log ( "[camlsql] Result" , rows ) ;
406
409
}
407
410
}
408
- }
411
+ } ;
409
412
}
410
413
411
414
if ( typeof SP !== "undefined" ) {
@@ -414,12 +417,12 @@ function executeSPQuery(options) {
414
417
SP . SOD . executeOrDelayUntilScriptLoaded ( function ( ) {
415
418
416
419
417
- console . warn ( "GET SERVER TIMEZOE" , _spPageContextInfo . webServerRelativeUrl + "/_api/web/RegionalSettings/TimeZone" ) ;
420
+ // console.warn("GET SERVER TIMEZOE", _spPageContextInfo.webServerRelativeUrl + "/_api/web/RegionalSettings/TimeZone");
418
421
419
422
420
- ajaxGet ( _spPageContextInfo . webServerRelativeUrl + "/_api/web/RegionalSettings/TimeZone" , function ( e , r ) {
421
- console . warn ( "TZ INFO" , e , r ) ;
422
- } ) ;
423
+ // ajaxGet(_spPageContextInfo.webServerRelativeUrl + "/_api/web/RegionalSettings/TimeZone", function(e,r) {
424
+ // console.warn("TZ INFO", e, r);
425
+ // });
423
426
424
427
clientContext = SP . ClientContext . get_current ( ) ;
425
428
if ( spWeb !== null ) {
@@ -428,7 +431,7 @@ function executeSPQuery(options) {
428
431
}
429
432
}
430
433
431
- if ( ! spWeb ) spWeb = clientContext . get_web ( ) ; ;
434
+ if ( ! spWeb ) spWeb = clientContext . get_web ( ) ;
432
435
433
436
// regionalSettings = spWeb.get_regionalSettings();
434
437
spList = spWeb . get_lists ( ) . getByTitle ( listName ) ;
@@ -506,7 +509,8 @@ function executeSPQuery(options) {
506
509
function camlQuerySuccess ( ) {
507
510
var listItemEnumerator = spListItems . getEnumerator ( ) ,
508
511
items = [ ] ,
509
- spListItem ;
512
+ spListItem ,
513
+ i ;
510
514
511
515
var listItemCollectionPosition = spListItems . get_listItemCollectionPosition ( ) ,
512
516
values , field , groupByValue ,
@@ -519,21 +523,31 @@ function executeSPQuery(options) {
519
523
// var info = timeZone.get_information();
520
524
// var offset = (info.get_bias() /*+ (info.get_daylightBias() )*/) / 60.0;
521
525
// console.log("TIMEZONE offset", info.get_bias(), info.get_daylightBias(), offset);
522
-
526
+
523
527
while ( listItemEnumerator . moveNext ( ) ) {
524
528
spListItem = listItemEnumerator . get_current ( ) ;
525
529
values = spListItem . get_fieldValues ( ) ;
526
530
if ( ! prevPage ) {
527
531
prevPage = "PagedPrev=TRUE&Paged=TRUE&p_ID=" + encodeURIComponent ( spListItem . get_id ( ) ) ;
528
532
}
529
533
530
- for ( var k in values ) {
531
- if ( values [ k ] && typeof values [ k ] . getTimezoneOffset == "function" ) {
532
- if ( k == "DateTime_x0020_field" ) {
533
- // var o = (values[k].getTimezoneOffset() / 60) * -1 ;
534
- // var d = new Date(values[k].getTime() - ((offset ) * 3600 * 1000));
535
- // console.log(k, "is a date", values[k], values[k].getUTCFullYear(), values[k].getUTCMonth(), values[k].getUTCDate(), values[k].getUTCHours(), values[k].getUTCMinutes(), values[k].getUTCSeconds() );
536
- // console.log(d, "is a date2", d, d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() );
534
+ // for(var k in values) {
535
+ // if (values[k] && typeof values[k].getTimezoneOffset == "function") {
536
+ // if (k == "DateTime_x0020_field") {
537
+ // // var o = (values[k].getTimezoneOffset() / 60) * -1 ;
538
+ // // var d = new Date(values[k].getTime() - ((offset ) * 3600 * 1000));
539
+ // // console.log(k, "is a date", values[k], values[k].getUTCFullYear(), values[k].getUTCMonth(), values[k].getUTCDate(), values[k].getUTCHours(), values[k].getUTCMinutes(), values[k].getUTCSeconds() );
540
+ // // console.log(d, "is a date2", d, d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() );
541
+ // }
542
+ // }
543
+ // }
544
+
545
+ var enc = options . query . $options . parsedQuery . encoded ,
546
+ encodedFields = Object . keys ( options . query . $options . parsedQuery . encoded ) ;
547
+ if ( encodedFields . length > 0 ) {
548
+ for ( i = 0 ; i < encodedFields . length ; i ++ ) {
549
+ if ( typeof values [ encodedFields [ i ] ] !== "undefined" ) {
550
+ values [ enc [ encodedFields [ i ] ] ] = values [ encodedFields [ i ] ] ;
537
551
}
538
552
}
539
553
}
@@ -562,7 +576,6 @@ function executeSPQuery(options) {
562
576
items [ groupIndexes [ groupByValue ] ] . items . push ( values ) ;
563
577
}
564
578
} else {
565
-
566
579
items . push ( values ) ;
567
580
}
568
581
}
@@ -574,22 +587,22 @@ function executeSPQuery(options) {
574
587
}
575
588
576
589
577
- function ajaxGet ( url , callback ) {
590
+ // function ajaxGet(url, callback) {
578
591
579
- var xhr = new XMLHttpRequest ( ) ;
580
- xhr . open ( 'GET' , url ) ;
581
- xhr . setRequestHeader ( 'Content-Type' , 'application/json' ) ;
582
- xhr . setRequestHeader ( 'Accept' , 'application/json; odata=verbose' ) ;
583
- xhr . onload = function ( ) {
584
- if ( xhr . status === 200 ) {
585
- callback ( null , xhr . responseText )
586
- } else {
587
- callback ( xhr , null ) ;
588
- }
589
- } ;
590
- xhr . send ( ) ;
592
+ // var xhr = new XMLHttpRequest();
593
+ // xhr.open('GET', url);
594
+ // xhr.setRequestHeader('Content-Type', 'application/json');
595
+ // xhr.setRequestHeader('Accept', 'application/json; odata=verbose');
596
+ // xhr.onload = function() {
597
+ // if (xhr.status === 200) {
598
+ // callback(null, xhr.responseText)
599
+ // } else {
600
+ // callback(xhr, null);
601
+ // }
602
+ // };
603
+ // xhr.send();
591
604
592
- }
605
+ // }
593
606
594
607
/**
595
608
* Add zero padding to a string
@@ -611,9 +624,7 @@ function encodeToInternalField(str) {
611
624
for ( i = 0 ; i < str . length ; i ++ ) {
612
625
c = encodeURIComponent ( str [ i ] ) ;
613
626
if ( c . indexOf ( '%' ) == 0 ) {
614
- n += "_x" + ( "0000" + str . charCodeAt ( i ) . toString ( 16 ) ) . slice ( - 4 ) + "_"
615
- } else if ( c == ' ' ) {
616
- n += "_x0020_" ;
627
+ n += "_x" + ( "0000" + str . charCodeAt ( i ) . toString ( 16 ) ) . slice ( - 4 ) + "_" ;
617
628
} else if ( c == '.' ) {
618
629
n += "_x002e_" ;
619
630
} else if ( c == '(' ) {
@@ -754,7 +765,7 @@ function parseParameters(param) {
754
765
}
755
766
} else if ( typeof param === "object" ) {
756
767
keys = Object . keys ( param ) ;
757
- for ( var i = 0 ; i < keys . length ; i ++ ) {
768
+ for ( i = 0 ; i < keys . length ; i ++ ) {
758
769
if ( keys [ i ] . indexOf ( '@' ) === 0 ) {
759
770
p = parseParameter ( param [ keys [ i ] ] ) ;
760
771
if ( p ) {
@@ -800,7 +811,7 @@ function extractGroupByPart(workingObject, quiet) {
800
811
workingObject . group = {
801
812
field : formatFieldName ( m [ 1 ] ) ,
802
813
collapse : false
803
- }
814
+ } ;
804
815
}
805
816
}
806
817
@@ -974,8 +985,6 @@ function extractListAndFieldNameParts(workingObject) {
974
985
}
975
986
976
987
workingObject . query = m [ 3 ] ;
977
- } else {
978
- workingObject . query = "" ;
979
988
}
980
989
}
981
990
}
@@ -1037,8 +1046,9 @@ function extractOrderByPart(workingObject, quiet) {
1037
1046
}
1038
1047
dataType = m [ 0 ] ;
1039
1048
match [ 1 ] = m [ 1 ] ;
1040
- } else
1041
- return [ ] ;
1049
+ }
1050
+ } else if ( ! match [ 1 ] . match ( / ^ [ a - z \d _ ] + $ / i) ) {
1051
+ throw "[camlsql] Wrap order by field name in brackets if it contains special characters" ;
1042
1052
}
1043
1053
fieldName = formatFieldName ( match [ 1 ] ) ;
1044
1054
if ( match . length == 3 ) {
@@ -1146,7 +1156,7 @@ function extractNamesToEncode(workingObject) {
1146
1156
counter -- ;
1147
1157
if ( counter == 0 ) {
1148
1158
match = query . substring ( startIndex , i + 1 ) ;
1149
- normalized = match . substring ( 1 , match . length - 1 ) ,
1159
+ normalized = match . substring ( 1 , match . length - 1 ) ;
1150
1160
encoded = encodeToInternalField ( normalized ) ;
1151
1161
newQuery = newQuery . replace ( match , encoded ) ;
1152
1162
startIndex = null ;
@@ -1392,11 +1402,7 @@ var WhereParser = function(whereString, quiet) {
1392
1402
if ( prevMacro == null )
1393
1403
prevMacro = m [ 3 ] [ 0 ] ;
1394
1404
else if ( prevMacro != m [ 3 ] [ 0 ] ) {
1395
-
1396
- console . log ( "prevMacro" , prevMacro , comparison ) ;
1397
-
1398
1405
throw "[camlsql] You can not mix named macros and ?" ;
1399
- return null ;
1400
1406
}
1401
1407
if ( m [ 3 ] [ 0 ] == "@" ) {
1402
1408
macro = m [ 3 ] ;
@@ -1455,7 +1461,7 @@ function CamlXmlBuilder(query, isExec) {
1455
1461
parsedQuery . uuid = function ( prefix ) {
1456
1462
n ++ ;
1457
1463
return prefix + n ;
1458
- }
1464
+ } ;
1459
1465
// remember https://yieldreturnpost.wordpress.com/2012/10/26/caml-query-utc-date-comparisons-in-sharepoint/
1460
1466
// <Value Type='DateTime' IncludeTimeValue='TRUE' StorageTZ='TRUE'>
1461
1467
// 2012-10-24T21:30:46Z
@@ -1528,6 +1534,8 @@ function createProjectedFieldsElement(projectedFields, joins) {
1528
1534
}
1529
1535
1530
1536
xml += xmlEndElement ( "ProjectedFields" ) ;
1537
+ } else if ( projectedFields . length > 0 && joins . length == 0 ) {
1538
+ throw "[camlsql] You must JOIN another list to use projected fields" ;
1531
1539
}
1532
1540
1533
1541
return xml ;
@@ -1642,8 +1650,8 @@ function createStatementXml(parsedQuery, statement, parameters, log) {
1642
1650
1643
1651
if ( param && param . type == "Membership" ) {
1644
1652
if ( statement . comparison != "eq" ) throw "[camlsql] Membership comparison must be =" ;
1645
- if ( param . value . toLowerCase ( ) == "spgroup" && ! param . id )
1646
- throw "[camlsql] Membership of type SPGroup requires a group id" ;
1653
+ // if (param.value.toLowerCase() == "spgroup" && !param.id)
1654
+ // throw "[camlsql] Membership of type SPGroup requires a group id";
1647
1655
xml += xmlBeginElement ( "Membership" , { Type : param . value , ID : param . id ? param . id : null } ) ;
1648
1656
xml += xmlBeginElement ( XML_FIELD_FIELDREF , { Name : statement . field } , true ) ;
1649
1657
xml += xmlEndElement ( "Membership" ) ;
@@ -1665,15 +1673,9 @@ function createStatementXml(parsedQuery, statement, parameters, log) {
1665
1673
xml += createFieldRefValue ( parsedQuery , statement ) ;
1666
1674
xml += xmlEndElement ( XML_ELEMENT_ISNOTNULL ) ;
1667
1675
} else if ( comparison == "like" ) {
1668
- if ( typeof param === "undefined" )
1669
- throw "[camlsql] Parameter is not defined " + statement . macro ;
1670
1676
var x = getXmlElementForLikeStatement ( param . value ) ;
1671
- //console.log("statement", statement);
1672
- //console.log("parameters", parameters);
1673
- //console.warn("X", param);
1674
1677
elementName = x [ 1 ] ;
1675
1678
param . overrideValue = x [ 0 ] ;
1676
-
1677
1679
xml += xmlBeginElement ( elementName ) ;
1678
1680
xml += createFieldRefValue ( parsedQuery , statement , param ) ;
1679
1681
xml += xmlEndElement ( elementName ) ;
@@ -1760,15 +1762,15 @@ function createFieldRefValue(parsedQuery, statement, parameter, isWhereClause) {
1760
1762
if ( ! parameter || parameter . constructor !== Array )
1761
1763
throw "[camlsql] IN parameter must be an array" ;
1762
1764
xml += '<Values>' ;
1763
- for ( var i = 0 ; i < parameter . length ; i ++ ) {
1765
+ for ( i = 0 ; i < parameter . length ; i ++ ) {
1764
1766
xml += creatValueElement ( statement , parameter [ i ] , parameter [ i ] . value ) ;
1765
1767
}
1766
1768
xml += '</Values>' ;
1767
1769
} else {
1768
1770
xml += creatValueElement ( statement , parameter ) ;
1769
1771
}
1770
1772
}
1771
- return xml ; ;
1773
+ return xml ;
1772
1774
}
1773
1775
1774
1776
function creatValueElement ( statement , parameter ) {
@@ -1790,8 +1792,8 @@ function createFieldRefValue(parsedQuery, statement, parameter, isWhereClause) {
1790
1792
}
1791
1793
if ( parameter . today === true ) {
1792
1794
innerXml = xmlBeginElement ( 'Today' , vAttr , true ) ;
1793
- } else if ( parameter . isNow === true ) {
1794
- innerXml = "<Now />" ;
1795
+ // } else if (parameter.isNow === true) {
1796
+ // innerXml = "<Now />";
1795
1797
} else {
1796
1798
valueAttributes . StorageTZ = parameter . _storageTZ ? 'True' : null ;
1797
1799
if ( parameter . stringValue ) {
@@ -1830,7 +1832,7 @@ function createFieldRefValue(parsedQuery, statement, parameter, isWhereClause) {
1830
1832
innerXml = parameterValue ? 1 : 0 ;
1831
1833
1832
1834
} else {
1833
- innerXml = xmlBeginElement ( 'NotImplemented' , { } , true ) ;
1835
+ throw "[camlsql] Parameter type is not not implemented " + parameter . type ;
1834
1836
}
1835
1837
1836
1838
xml += xmlBeginElement ( 'Value' , valueAttributes ) ;
0 commit comments