![]() | ![]() Products ![]() ![]() ![]() ![]() |
Home » Technical Support » Elevate Web Builder Technical Support » Support Forums » Elevate Web Builder General » View Thread |
Messages 11 to 12 of 12 total |
![]() |
Fri, Aug 3 2012 4:08 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Uli,
<< I am just working on a JSON parser to for the update- and delete stuff. Would you like to share some code snippets that you are using in your integrated webserver? >> Sure, here you go: procedure ParseOperationsJSON(const Value: String; const User: String=''; const Password: String=''); var TempParser: TEWBJSONParser; TempDataSetName: String; TempDataSet: TIDEDataSet; TempInstances: TObjectList; TempInstance: TIDEDataSetInstance; TempOperationType: Integer; TempBeforeRow: TStrings; TempAfterRow: TStrings; function FindInstance(DataSet: TIDEDataSet): TIDEDataSetInstance; var I: Integer; begin Result:=nil; for I:=0 to TempInstances.Count-1 do begin if (TIDEDataSetInstance(TempInstances[I]).DataSet=DataSet) then begin Result:=TIDEDataSetInstance(TempInstances[I]); Break; end; end; if (Result=nil) then begin Result:=CreateDataSetInstance(DataSet); TempInstances.Add(Result); Result.Connect(User,Password,True); Result.StartTransaction; Result.OpenDataSet; end; end; procedure CommitInstances; var I: Integer; begin for I:=0 to TempInstances.Count-1 do TIDEDataSetInstance(TempInstances[I]).Commit; end; procedure RollbackInstances; var I: Integer; begin for I:=0 to TempInstances.Count-1 do TIDEDataSetInstance(TempInstances[I]).Rollback; end; procedure ParseRow(RowValues: TStrings); var TempColumnName: String; TempColumnValue: String; begin with TempParser do begin if (not SkipSymbol('null')) then begin ErrorIfNotSkipToken('{'); if (not CheckToken('}')) then begin while True do begin ErrorIfNotToken(ptString); TempColumnName:=TokenString; NextToken; ErrorIfNotSkipToken(':'); TempColumnValue:=TokenString; NextToken; RowValues.Add(TempColumnName+'='+TempColumnValue); if (not SkipToken(',')) then Break; end; end; ErrorIfNotSkipToken('}'); end; end; end; begin TempParser:=TEWBJSONParser.Create; try TempInstances:=TObjectList.Create; TempBeforeRow:=TStringList.Create; TempAfterRow:=TStringList.Create; try TempInstance:=nil; try with TempParser do begin Initialize(Value); ErrorIfNotSkipToken('{'); ErrorIfNotSkipString('operations'); ErrorIfNotSkipToken(':'); ErrorIfNotSkipToken('['); if CheckToken('{') then begin while True do begin ErrorIfNotSkipToken('{'); ErrorIfNotSkipString('dataset'); ErrorIfNotSkipToken(':'); ErrorIfNotToken(ptString); TempDataSetName:=TokenString; TempDataSet:=GetDataSetByName(TempDataSetName); if (TempDataSet <> nil) then TempInstance:=FindInstance(TempDataSet) else raise Exception.Create('Invalid dataset name '+TempDataSetName+ ' specified in the transaction operations'); NextToken; ErrorIfNotSkipToken(','); ErrorIfNotSkipString('operation'); ErrorIfNotSkipToken(':'); ErrorIfNotToken(ptInteger); TempOperationType:=StrToInt(TokenString); if (TempOperationType <= OPERATION_UNKNOWN) or (TempOperationType > OPERATION_DELETE) then raise Exception.Create('Invalid or unknown operation type '+IntToStr(TempOperationType)+ ' specified in the transaction operations'); NextToken; TempBeforeRow.Clear; TempAfterRow.Clear; ErrorIfNotSkipToken(','); ErrorIfNotSkipString('beforerow'); ErrorIfNotSkipToken(':'); ParseRow(TempBeforeRow); ErrorIfNotSkipToken(','); ErrorIfNotSkipString('afterrow'); ErrorIfNotSkipToken(':'); ParseRow(TempAfterRow); { Now execute the actual operation } case TempOperationType of OPERATION_INSERT: TempInstance.InsertRow(TempAfterRow); OPERATION_UPDATE: TempInstance.UpdateRow(TempBeforeRow,TempAfterRow); OPERATION_DELETE: TempInstance.DeleteRow(TempBeforeRow); end; ErrorIfNotSkipToken('}'); if (not SkipToken(',')) then Break; end; end; ErrorIfNotSkipToken(']'); ErrorIfNotSkipToken('}'); end; CommitInstances; except RollbackInstances; raise; end; finally FreeAndNil(TempBeforeRow); FreeAndNil(TempAfterRow); FreeAndNil(TempInstances); end; finally FreeAndNil(TempParser); end; end; If you have any other questions, please let me know. Tim Young Elevate Software www.elevatesoft.com |
Fri, Aug 3 2012 5:29 PM | Permanent Link |
Uli Becker | Tim,
> Sure, here you go: thanks a lot for this code! Uli |
« Previous Page | Page 2 of 2 | |
Jump to Page: 1 2 |
This web page was last updated on Thursday, March 30, 2023 at 10:19 AM | Privacy Policy![]() © 2023 Elevate Software, Inc. All Rights Reserved Questions or comments ? ![]() |