0.0.10 • Published 4 years ago

@floid-ng/rhetos v0.0.10

Weekly downloads
4
License
-
Repository
-
Last release
4 years ago

@floyd-ng/rhetos

Build Status

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.
0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago