Zum Hauptinhalt springen

Konfiguration

In vielen Fällen ist es erforderlich, dass der Anwender Zugangsdaten, API Keys oder andere Einstellungen hinterlegen muss.

Damit Nutzer diese Daten eingeben können und du darauf zugreifen kannst, musst du die Konfigurations-Felder registrieren.

 // src/index.ts
import {AppVersion, SdkVersion} from "@soda-sync/app-sdk";
import {MyIntegration} from "./my-integration";

export function factory() {
return new MyIntegration();
}

declare const __VERSION__: AppVersion;

SodaSync.registerApp({
sdkVersion: SdkVersion,
name: "Meine App",
packageId: "com.example.my_app",
description: "Meine tolle App",
version: __VERSION__,
author: {
name: "Max Muster",
email: "support@muster.tld",
},
supportedFeatures: ["orders-provide"],
accessedUrls: [
/https:\/\/dummyjson\.com\/.+/
],
factory,
+ configuration: {
+ fields: {
+ taxRate: {
+ type: "text",
+ caption: "Steuersatz",
+ required: false,
+ validator: (value) => {
+ if (isNaN(parseFloat(value))) {
+ return "Bitte einen gültigen Steuersatz eingeben!";
+ }
+ return null;
+ },
+ },
+ },
+ },
});

Um auf den Wert der Konfiguration zuzugreifen, kannst du den SodaSync context verwenden:

 import {Integration, OrderProvider, QueryOrdersRequest, QueryOrdersResult} from "@soda-sync/app-sdk";

type FakeProduct = {id: number, title: string, price: number, quantity: number};
type FakeOrder = {
id: number,
products: FakeProduct[],
total: number,
discountedTotal: number,
userId: number,
};

export class MyIntegration implements Integration, OrderProvider {
public checkConfiguration(): Promise<void> {
return Promise.resolve();
}

public async queryOrders(request: QueryOrdersRequest): Promise<QueryOrdersResult> {
const result = await SodaSync.http.request("GET", "https://dummyjson.com/carts");
+
+ const taxRate = parseFloat(SodaSync.context.config.get("taxRate") ?? "0.00");
+ const taxFactor = taxRate / 100 + 1;
+
const orders: FakeOrder[] = JSON.parse(result.body!).carts;
return {
pageSize: request.pageSize,
pageToken: request.pageToken,
nextPageToken: "123",
data: orders.map(order => ({
id: order.id.toString(),
orderNumber: order.id.toString(),
orderDate: new Date().toISOString(),
status: "OPEN",
items: order.products.map(product => ({
id: product.id.toString(),
name: product.title,
amount: 1,
singleNetPrice: {value: product.price * 100, divisor: 100},
- singleGrossPrice: {value: product.price * 100, divisor: 100},
- taxRate: 0,
+ singleGrossPrice: {value: product.price * 100 * taxFactor, divisor: 100},
+ taxRate: taxRate,
})),
shipments: [],
transactions: [],
})),
};
}

}

Um mit verschiedenen Werten zu testen, kannst du in der app-devkit.proj.json (Projektdatei) einfach die Konfiguration festlegen:

 {
"buildOutput": "./dist",
- "config": {},
+ "config": {
+ "taxRate": "19.0"
+ },
"connectionConfig": {},
"secrets": {}
}

Beim Aufruf der Testseite siehst du nun, dass die taxRate immer 19 ist.

Secrets

Es gibt manchmal den Fall, dass du als App-Entwickler ein App-Schlüssel o.ä. hast und dieser für alle Nutzer der App identisch ist. In solchen Fällen sollte mit secrets gearbeitet werden. Secrets werden nicht in die App eingebettet, sondern können im Entwicklerbereich der Platform jederzeit geändert werden. Beim lokalen Testen kannst du die Werte einfach in das "secrets" Objekt in der Projektdatei schreiben.

Der Zugriff auf Secrets erfolgt über SodaSync.context.secrets.