|
<ejs-grid #grid [dataSource]='data' (actionFailure)='actionFailure($event)' allowPaging='true' [pageSettings]='pageSettings'>
<e-columns>
. . .
</e-columns>
</ejs-grid>
[ts file]
actionFailure(args:any){
console.log(args);
}} |
|
class SerialNoAdaptor extends JsonAdaptor {
batchRequest(dm: DataManager, changes: CrudOptions, e: RemoteArgs): CrudOptions {
let i: number;
try {
throw new TypeError("Error message");
//here we can handle the exception
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
. . .
return changes;
}
} |
class SerialNoAdaptor extends JsonAdaptor { batchRequest(dm: DataManager, changes: CrudOptions, e: RemoteArgs): CrudOptions { let i: number; let success: boolean = false; try { doSomething(changes); success = true; } catch (e) { console.log((<Error>e).message); } if (success) { for (i = 0; i < changes.addedRecords.length; i++) { this.insert(dm, changes.addedRecords[i]); } for (i = 0; i < changes.changedRecords.length; i++) { this.update(dm, e.key, changes.changedRecords[i]); } for (i = 0; i < changes.deletedRecords.length; i++) { this.remove(dm, e.key, changes.deletedRecords[i]); } } return changes; } }
|
class SerialNoAdaptor extends JsonAdaptor {
batchRequest(dm: DataManager, changes: CrudOptions, e: RemoteArgs): CrudOptions {
let i: number;
let success: boolean = false;
try {
doSomething(changes);
success = true;
}
catch (e) {
this.batchRequest = true
console.log((<Error>e).message);
this.mdata = changes; //place the changes in any of the global variable
}
...
@Component({
selector: 'app-container',
...
})
export class AppComponent implements OnInit {
public data: DataManager;
public editSettings: EditSettingsModel;
public toolbar: ToolbarItems[];
public mdata: any;
public batchRequest: boolean;
ngOnInit(): void {
...
}
dataBound(args:any){ //method that triggers after any failure happens. Here we have used a dataBound event in grid since the data get refreshed and triggers here.
if(this.data.adaptor.batchRequest === true){
let grid = document.getElementById("grid").ej2_instances[0];
for(let i: number = 0; i<this.data.adaptor.mdata.changedRecords.length; i++){
for(let j:number =0 ;j< grid.currentViewData.length; j++){
if(this.data.adaptor.mdata.changedRecords[i].OrderID === grid.currentViewData[j].OrderID){
grid.editModule.updateRow(j,this.data.adaptor.mdata.changedRecords[i]); //undo the modified data
}
}
}
for(let i: number = 0; i<this.data.adaptor.mdata.addedRecords.length; i++){
grid.editModule.addRecord(this.data.adaptor.mdata.changedRecords[i],j); //undo added record
}
for(let i: number = 0; i<this.data.adaptor.mdata.deletedRecords.length; i++){
for(let j:number =0 ;j< grid.currentViewData.length; j++){
if(this.data.adaptor.mdata.deletedRecords[i].OrderID === grid.currentViewData[j].OrderID){
grid.editModule.deleteRow(grid.getRowByIndex(i)); //undo deleted record
}
}
}
this.data.adaptor.mdata = null;
}
}
} |
batchRequest(dm: DataManager, changes: CrudOptions, e: RemoteArgs): CrudOptions { let i: number; let updateModel = this.newUpdateModel(); try { // extract data from delete and update collections this.fromBatchDelete(updateModel, changes); this.fromBatchUpdate(updateModel, changes); // update data on the server this.dataService.batchUpdate(updateModel).subscribe(() => { console.log('done with server updates.'); for (i = 0; i < changes.addedRecords.length; i++) { this.insert(dm, changes.addedRecords[i]); } for (i = 0; i < changes.changedRecords.length; i++) { this.update(dm, e.key, changes.changedRecords[i]); } for (i = 0; i < changes.deletedRecords.length; i++) { this.remove(dm, e.key, changes.deletedRecords[i]); } //-> here is where we should tell the grid //-> all changes were successfully commited }); } catch (e) { //-> handle exception, leave grid state as is } return changes; }