@floid-ng/rhetos
v0.0.10
Published
[![Build Status](https://travis-ci.com/floid-ng/publish-integration.svg?branch=master)](https://travis-ci.com/floid-ng/publish-integration)
Downloads
5
Readme
@floyd-ng/rhetos
Package is an Angular library used for easier integration with Rhetos (https://github.com/Rhetos), DSL framework that enables you to create your own domain-specific language to build server applications.
It implements several services for data access and metadata by complementing Rhetos.FloydExtensions, a DSL plugin module that includes model generator and Rest endpoint for fetching model metadata.
Installation and Configuration
npm install @floyd-ng/rhetos --save
Load the module for your app (with global configuration):
RhetosModule should be loaded once in your root application module while providing configuration via forRoot() method.
...
RhetosModule.forRoot({
restUrl: 'http://localhost/Centrix2Rhetos/Rest/',
authentication: 'windows'
}),
...
Usage
Almost every service or method should be provided with a structure type and structure key consisting of module and structure name (e.g. "Common/Principal"). Best way of providing these is through interfaces and constants generated by Rhetos.FloydExtensions plugin.
export module Common {
...
export const PrincipalKey = 'Common/Principal';
export interface Principal {
ID?: string;
Name: string;
}
...
}
StructureMetadataService
Metadata can be fetched through StructureMetadataService. It uses GetStructureMetadata Rest endpoint provided by Rhetos.FloydExtensions plugin. Structure metadata is cached for the duration of a single session.
...
constructor(private structureMetadataService: StructureMetadataService) {
this.structureMetadataService.get(Common.PrincipalKey).subscribe(meta => ...)
}
...
StructureServices
Different structure services implement API's for different Rhetos concepts
Using services
Services can be defined explicitly:
@Injectable({providedIn: 'root'})
export class PrincipalService extends EntityService<Common.Principal> {
constructor(protected base: StructureServiceBase) {
super(Common.PrincipalKey, base);
}
}
...
constructor(private principalService: PrincipalService) { }
...
Or dynamically:
...
constructor(private structureServiceFactory: StructureServiceFactory) {
this.principalService = this.structureServiceFactory.createEntityService<Common.Principal>(Common.PrincipalKey);
}
...
And can be used like:
this.principalService.getAll().subscribe(...);
this.principalService.insert({Name: 'admin'}).subscribe(...)
QueryableService - used for structures that have fetchable data
this.drzavaBrowseService.getAll();
this.drzavaBrowseService.getById('BA3506FE-719C-4DBD-85E7-FD1F34506672');
this.drzavaBrowseService.getByQuery({
sort: 'KratkiNaziv desc',
top: 1,
skip: 3,
genericPropertyFilters: [createGenericPropertyFilter('KratkiNaziv', 'Contains', 'hr')],
specificFilters: [createSpecificFilter<Common.SmartSearch>(Common.SmartSearchKey, {Pattern: 'ad'})]
});
EntityService - provides CRUD functionality for entities, implements QueryableService
this.principalService.insert({Name: 'admin'});
this.principalService.update({
ID: 'BA3506FE-719C-4DBD-85E7-FD1F34506672',
Name: 'admin2'
});
this.principalService.delete('BA3506FE-719C-4DBD-85E7-FD1F34506672');
ActionService - single invoke method for executing actions
this.quickInsertNaseljeService.invoke({
PostanskiBroj: '10000',
NazivMjesta: 'Mjesto',
DrzavaID: 'BA3506FE-719C-4DBD-85E7-FD1F34506672',
NaseljeID: '070F3CC0-C35B-41CA-A066-24A59FF6EDDB'
});
FunctionService
// todo
ComplexEntityService
// todo
Extra
- All Datetime properties are automatically converted from MsDate to Javascript Date format and vice versa on every request
- By default, NULL values from server are returned as null values in Javascript objects. If you prefer to work with undefined only, configuration property replaceNullWithUndefined can be set to true.