1.0.1 • Published 4 years ago

@alvarolimajr/nestjs-sap-rfc v1.0.1

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

GitHub package.json version Commitizen friendly code style: prettier Conventional Commits GitHub Workflow Status codecov GitHub repo size GitHub GitHub package.json dependency version (prod)

📚 Description

NestJS SAP RFC Client, providing convenient ABAP business logic consumption from NestJS

🛠️ Installation

npm install @alvarolimajr/nestjs-sap-rfc --save

🏃 Getting Started

Register SapModule module in app.module.ts

Connection Pool

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    SapModule.createPool({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      connectionParameters: {
        /* see RfcConnectionParameters */
      },
      clientOptions: {
        /* see RfcClientOptions */
      },
      poolOptions: {
        /* see RfcPoolOptions */
      },
    }),
  ],
})
export class AppModule {}

Connection Pool (Async Module)

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    SapModule.createPoolAsync({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      useFactory: () => {
        return {
          connectionParameters: {
            /* see RfcConnectionParameters */
          },
          clientOptions: {
            /* see RfcClientOptions */
          },
          poolOptions: {
            /* see RfcPoolOptions */
          },
        };
      },
    }),
  ],
})
export class AppModule {}

Connection Pool (Async Module + ConfigService)

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Module({
  imports: [
    SapModule.createPoolAsync({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      useFactory: (config: ConfigService) => {
        return {
          connectionParameters: {
            /* see RfcConnectionParameters */
            /* config.get(...) */
          },
          clientOptions: {
            /* see RfcClientOptions */
            /* config.get(...) */
          },
          poolOptions: {
            /* see RfcPoolOptions */
            /* config.get(...) */
          },
        };
      },
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

Direct Client

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    SapModule.createClient({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      /* ...RfcConnectionParameters */
    }),
  ],
})
export class AppModule {}

Direct Client (Async Module)

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    SapModule.createClientAsync({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      useFactory: () => {
        return {
          /* ...RfcConnectionParameters */
        };
      },
    }),
  ],
})
export class AppModule {}

Direct Client (Async Module + ConfigService)

import { SapModule } from '@alvarolimajr/nestjs-sap-rfc';
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Module({
  imports: [
    SapModule.createClientAsync({
      isGlobal: true, // for global module
      name: 'service_name', // for multiple modules (OPTIONAL)
      useFactory: (config: ConfigService) => {
        return {
          /* ...RfcConnectionParameters */
        };
      },
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

Inject SapService

import { InjectSapService, SapService } from '@alvarolimajr/nestjs-sap-rfc';
import { Injectable } from '@nestjs/common';

@Injectable()
export class MyService {
  /**
   * @param {SapService} sapService
   */
  constructor(
    @InjectSapService()
    private readonly sapService: SapService,
  ) {}

  public async test(): MySapInterface {
    return this.sapService.execute<MySapInterface>('rfcName', {
      ...rfcParams,
    });
  }
}

Inject SapService by name

import { InjectSapService, SapService } from '@alvarolimajr/nestjs-sap-rfc';
import { Inject } from '@nestjs/common';

@Injectable()
export class MyService {
  /**
   * @param {SapService} sapService
   */
  constructor(
    @Inject('service_name')
    private readonly sapService: SapService,
  ) {}

  public async test(): MySapInterface {
    return this.sapService.execute<MySapInterface>('rfcName', {
      ...rfcParams,
    });
  }
}

✅ Test

# unit tests
$ npm run test

# test coverage
$ npm run test:cov

💡 Generate Docs

The docs can be generated on-demand. This will produce a documentation folder with the required front-end files.

# generate docs for code
$ npm run doc

# generate docs for code and serve on http://localhost:8080
$ npm run doc:serve

See documentation

⬆️ Commitizen

commitizen is a command line utility that makes it easier to create commit messages following the conventional commit format specification.

Use npm run commit instead of git commit to use commitizen.

👥 Stay in touch

🔨 Built With

✔️ Roadmap

The following improvements are currently in progress:

  • Dynamic Configuration
1.0.1

4 years ago