Sage ist ein System zur Automatisierung von Managementlösungen für kleine und mittlere Unternehmen. Es wird in Branchen wie Buchhaltung, Lohnbuchhaltung, Fertigung, Vertrieb, Verkauf, Bildung und Finanzen eingesetzt. Sage hat viele Softwareprodukte, die nach Unternehmensgröße, Branche und Geschäftsanforderungen klassifiziert werden können. Die Software von Sage umfasst Finanzsoftwarelösungen, CRM-Systeme, HR-Lösungen und ERP-Systeme. Schauen wir uns eines davon genauer an.
Sage Evolution
Sage Evolution ist ein ERP-System, das eine komplette Business-Management-Lösung bietet und die Möglichkeit bietet, die finanzielle Situation sowie die Beziehungen zu Kunden, Lieferanten und Mitarbeitern zu kontrollieren. Alle Komponenten und Module, die als Teil des Sage Evolution Frameworks entwickelt wurden, sind vollständig integriert und haben eine gemeinsame Schnittstelle.
Wie es verwendet werden kann
Wir haben Sage Evolution ERP bei der Arbeit an einem Projekt verwendet, bei dem wir Kundenaufträge, Kunden und Lagerbestände erstellen/bearbeiten und Sage ERP mit einem anderen ERP synchronisieren mussten. Sage Evolution funktioniert nur unter dem Betriebssystem Windows. MS SQL Server wird als DBMS verwendet. Und obwohl Sie sich direkt mit der Sage Evolution Datenbank verbinden können, ist es besser, über das Sage Pastel SDK zu interagieren, da dies bequemer ist und die Datenintegrität gewährleistet.
Das Sage Evolution SDK ist als Microsoft .NET-Assembly verpackt und die ideale Plattform für die Verwendung von .NET Framework. Die Integration über COM ist jedoch nur mit Sprachen wie Visual Basic, C++ und Delphi möglich.
Wir haben Sage SDK verwendet, um die Daten von Kunden, Produkten, Transaktionen und Lagern des Unternehmens mit einem anderen System zu synchronisieren. Lassen Sie uns sehen, wie genau Sie das tun können.
Sage SDK verwenden
Stellen Sie zunächst sicher, dass Sie die gleichen Versionen von Sage SDK und Sage Evolution verwenden. Wenn Sie also Sage Evolution 7.00.210 verwenden, dann verwenden Sie Sage SDK 7.00.120.
Denken Sie außerdem daran, dass Sie eine Entwicklerlizenz (Seriennummer und Autorisierungscode) benötigen, um Sage SDK zu verwenden.
Wenn Sie nun alles vorbereitet haben, lassen Sie uns zu den konkreten Beispielen übergehen.
1. Verbindung mit der Datenbank
Zuerst müssen Sie eine Verbindung zur Datenbank herstellen. Wir haben zwei Datenbanken: Die Unternehmens-/Kundendatenbank, die Daten über das Unternehmen/den Kunden enthält, und die allgemeine Datenbank, die Registrierungsinformationen enthält. Wir stellen die Verbindung in dieser Reihenfolge her:
DatabaseContext.CreateCommonDBConnection(server, commonDatabase, String.Empty, String.Empty, true);
DatabaseContext.SetLicense(serialNumber, authKey);
DatabaseContext.CreateConnection(server, companyDatabase, login, password, true);
Dann schreiben wir Abfragen an die Datenbank, um die notwendigen Selektionen zu erhalten.
2. Kunden
Hier ist zum Beispiel eine Abfrage für alle Kunden, bei denen das Erstellungs-/Bearbeitungsdatum jünger ist als das Aktualisierungsdatum:
string criteria = $"Client_dModifiedDate > '{updatedDate}'";
var customers = Customer.List(criteria);
foreach (DataRow matchP in customers.Rows) {
Customer customer = new Customer(matchP["Account"].ToString());
}
Es ist besser, das Datum im Format yyyy-MM-dd HH: mm: ss.fff zu senden, damit kein Fehler „SQL Server: datetime out of range error“ auftritt.
Sie können einen Kunden über den Code finden. Wenn es keinen Kunden gibt, gibt die Methode null zurück.
Zum Beispiel:
Customer searchCustomer = Customer.GetByCode(code);
Sie können auch die Felder des Kunden aktualisieren:
Customer customer = Customer.GetByCode(item.code);
customer.Description = item.name;
customer.Telephone = item.telephone;
customer.IsOnHold = item.status;
customer.Save();
3. Produkte
Jetzt synchronisieren wir das InventoryItem. Sage SDK hat standardmäßig eine Filiale (Firma) Global (BranchId = 0), aber es kann auch andere Filialen geben.
Zum Beispiel können wir Produkte für eine bestimmte Branche auswählen:
var criteria = $"StkItem_iBranchID = {branchId}";
var inventories = InventoryItem.List(criteria);
foreach (DataRow matchP in inventories.Rows) {
InventoryItem inventory = new InventoryItem((Int32)matchP["StockLink"]);
}
Produkte haben einen Preis, und wir können sowohl die einzelnen Preise (SellingPrice1, SellingPrice2 und SellingPrice3) als auch die SellingPrices-Sammlung abrufen. Die Abfrage der Preise für einige Produkte kann Sekunden oder bis zu 5-10 Minuten dauern.
Die Abfrage des Produktpreises aus dem Lager sieht zum Beispiel so aus:
SellingPriceCollection sellingPrices = inventory.SellingPrices;
double sellingPrice = 0;
foreach (SellingPrice sp in sellingPrices) {
if (sp.Warehouse != null && sp.Warehouse.Code.Equals(defaultWarehouse)) {
sellingPrice = sp.PriceIncl;
break;
}
}
4. Vorgänge
Jetzt synchronisieren wir den SalesOrder. Über das Sage SDK können wir unbearbeitete, bearbeitete und archivierte Transaktionen empfangen.
Beispiel: Erhalten Sie einen verarbeiteten SalesOrder, DocState = 3 (PartiallyProcessed):
var criteria = $"DocState = {3} ORDER BY Client_dModifiedDate";
var orders = SalesOrder.List(criteria);
foreach (DataRow matchP in orders.Rows) {
SalesOrder order = new SalesOrder((Int32)matchP["AutoIndex"]);
}
Abrufen archivierter Transaktionen:
var criteria = $"DocState = {4} ORDER BY Client_dModifiedDate";
var orders = SalesOrder.ListArchived(criteria);
Suchen Sie die Transaktion anhand der Auftragsnummer:
var order = SalesOrder.List("ordernum = 'searchOrder'");
Bei der Bearbeitung von Transaktionen können Sie verschiedene Felder ändern, darunter Auftragsnummer, Kunde und Details. Sie können das Lager auf folgende Weise einstellen:
var order = new SalesOrder(id);
order.Customer = Customer.GetByCode(customerCode);
order.OrderNo = orderNumber;
order.Detail[i].InventoryItem = inventory;
order.Detail[i].Quantity = item.deals[i].sales_quantity;
order.Detail[i].Warehouse = warehouse;
order.Save();
5. Lagerhäuser
Wir haben InventoryTransaction verwendet, um festzustellen, wie viele Stücke zwischen den Lagern bewegt wurden:
var criteria = $"PostST_dModifiedDate > '{updatedDate}'";
var inventories = InventoryTransaction.List(criteria);
foreach (DataRow matchP in inventories.Rows) {
InventoryItem inventoryItem = new InventoryItem((Int32)matchP["AccountLink"]);
Warehouse warehouse = new Warehouse((Int32)matchP["WarehouseID"]);
WarehouseContext context = new WarehouseContext(inventoryItem, warehouse);
double warehouseQuantity = context.QtyOnHand;
}
Sollten Sie sich also für das Sage SDK entscheiden?
Es ist einfacher, das Sage SDK zu verwenden, als die gesamte Datenbank mit all ihren Beziehungen zu verstehen. Außerdem gewährleistet die Verwendung von Sage SDK die Datenintegrität.
Dennoch führt die Verwendung von Sage SDK dazu, dass Sie nicht reine SQL-Abfragen und Felder schreiben, die nicht mit den Sage SDK-Feldern übereinstimmen. Das bedeutet, dass Sie sich eine Liste aller Felder besorgen müssen, um zu verstehen, welche Felder Sie auswählen müssen. Außerdem kann man, wenn man einen Auftrag zur Ansicht in Sage UI geöffnet hat, diesen Auftrag weder über Sage SDK noch über Sage UI ändern. Das bedeutet, dass Sie nicht parallel arbeiten können.
Alles in allem bietet das Sage SDK Entwicklern von Drittanbietern Zugriff auf die Sage-Datenbankentitäten. Es gibt auch eine Sage SDK-Dokumentation. Deshalb empfehlen wir die Verwendung von Sage SDK, um Zeit zu sparen und die Datenintegrität zu gewährleisten.