11using System ;
22using System . Collections . Generic ;
33using System . Data ;
4+ using System . Globalization ;
45using System . Linq ;
56using System . Text . Json . Nodes ;
67using GeneXus . Data . NTier ;
@@ -10,6 +11,7 @@ namespace GeneXus.Data.Cosmos
1011{
1112 internal class CosmosDBHelper
1213 {
14+ internal const string ISO_DATE_FORMAT = "yyyy-MM-ddTHH:mm:ss:fffK" ;
1315 internal static PartitionKey ToPartitionKey ( object value )
1416 {
1517 if ( value is double )
@@ -54,7 +56,7 @@ internal static PartitionKey ToPartitionKey(object value)
5456 throw new Exception ( "Partitionkey can be double, bool or string." ) ;
5557 }
5658 internal static bool AddItemValue ( string parmName , string fromName , Dictionary < string , object > values , IDataParameterCollection parms , IEnumerable < VarValue > queryVars , ref JsonObject jsonObject )
57- {
59+ {
5860 if ( ! AddItemValue ( parmName , values , parms [ fromName ] as ServiceParameter , ref jsonObject ) )
5961 {
6062 VarValue varValue = queryVars . FirstOrDefault ( v => v . Name == $ ":{ fromName } ") ;
@@ -66,20 +68,36 @@ internal static bool AddItemValue(string parmName, string fromName, Dictionary<s
6668 jsonObject . Add ( keyvalue ) ;
6769 }
6870 else
69- jsonObject . Add ( parmName , JsonValue . Create ( varValue . Value ) ) ;
71+ if ( FormattedAsStringDateGXType ( varValue . Type ) )
72+ {
73+ DateTime dt = DateTime . SpecifyKind ( ( DateTime ) varValue . Value , DateTimeKind . Utc ) ;
74+ jsonObject . Add ( parmName , dt . ToString ( ISO_DATE_FORMAT ) ) ;
75+ }
76+ else
77+ jsonObject . Add ( parmName , JsonValue . Create ( varValue . Value ) ) ;
7078 values [ parmName ] = varValue . Value ;
7179 }
7280 return varValue != null ;
7381 }
7482 return true ;
7583 }
76- public static bool FormattedAsStringGXType ( GXType gXType )
84+
85+ internal static bool FormattedAsStringDateGXType ( GXType gXType )
86+ {
87+ return ( gXType == GXType . Date || gXType == GXType . DateTime || gXType == GXType . DateTime2 ) ;
88+ }
89+ internal static bool FormattedAsStringGXType ( GXType gXType )
90+ {
91+ return ( gXType == GXType . VarChar || gXType == GXType . DateAsChar || gXType == GXType . NVarChar || gXType == GXType . LongVarChar || gXType == GXType . NChar || gXType == GXType . Char || gXType == GXType . Text || gXType == GXType . NText ) ;
92+ }
93+
94+ internal static bool FormattedAsStringDateDbType ( DbType dbType )
7795 {
78- return ( gXType == GXType . Date || gXType == GXType . DateTime || gXType == GXType . DateTime2 || gXType == GXType . VarChar || gXType == GXType . DateAsChar || gXType == GXType . NVarChar || gXType == GXType . LongVarChar || gXType == GXType . NChar || gXType == GXType . Char || gXType == GXType . Text || gXType == GXType . NText ) ;
96+ return ( dbType == DbType . Date || dbType == DbType . DateTime || dbType == DbType . DateTime2 || dbType == DbType . DateTimeOffset || dbType == DbType . Time ) ;
7997 }
8098 internal static bool FormattedAsStringDbType ( DbType dbType )
8199 {
82- return ( dbType == DbType . String || dbType == DbType . Date || dbType == DbType . DateTime || dbType == DbType . DateTime2 || dbType == DbType . DateTimeOffset || dbType == DbType . StringFixedLength || dbType == DbType . AnsiString || dbType == DbType . AnsiStringFixedLength || dbType == DbType . Guid || dbType == DbType . Time ) ;
100+ return ( dbType == DbType . String || dbType == DbType . StringFixedLength || dbType == DbType . AnsiString || dbType == DbType . AnsiStringFixedLength || dbType == DbType . Guid ) ;
83101 }
84102 internal static string FormatExceptionMessage ( string statusCode , string message )
85103 {
@@ -97,7 +115,13 @@ internal static bool AddItemValue(string parmName, Dictionary<string, object> dy
97115 jsonObject . Add ( keyvalue ) ;
98116 }
99117 else
100- jsonObject . Add ( parmName , JsonValue . Create ( parm . Value ) ) ;
118+ if ( FormattedAsStringDateDbType ( parm . DbType ) )
119+ {
120+ DateTime dt = DateTime . SpecifyKind ( ( DateTime ) parm . Value , DateTimeKind . Utc ) ;
121+ jsonObject . Add ( parmName , dt . ToString ( ISO_DATE_FORMAT ) ) ;
122+ }
123+ else
124+ jsonObject . Add ( parmName , JsonValue . Create ( parm . Value ) ) ;
101125 dynParm [ parmName ] = parm . Value ;
102126 return true ;
103127 }
0 commit comments