Recherche…


Introduction

Cette rubrique explique comment exporter des enregistrements à partir d'Acumatica ERP via l'API Screen-Based. L'API basée sur écran de Acumatica ERP ne fournit que l'interface SOAP. Si votre plate-forme de développement dispose d'une prise en charge limitée des services Web SOAP, considérez l'API basée sur le contrat fournissant à la fois les interfaces SOAP et REST. Pour plus d'informations sur l'API basée sur écran, consultez la documentation Acumatica ERP.

Remarques

Tous les exemples fournis dans cette rubrique ont été créés avec le wrapper API basé sur écran. Si vous souhaitez que votre application cliente ne dépende pas des modifications de l'interface utilisateur dans l'application Acumatica ERP, vous devez utiliser l'encapsuleur API basé sur l'écran, décrit dans la documentation Acumatica ERP.

Exportation de données à partir d'un formulaire de saisie avec une clé primaire unique

L'écran Stock Items (IN.20.25.00) est l'un des formulaires de saisie de données les plus utilisés par Acumatica ERP pour exporter des données. L'ID d'inventaire est la seule clé primaire sur l'écran Stock articles : entrer la description de l'image ici

Pour exporter des enregistrements à partir d'un formulaire de saisie de données, votre demande SOAP doit toujours commencer par la commande ServiceCommands.Every[Key] , où [Key] doit être remplacé par le nom de la clé primaire.

Pour exporter tous les articles en stock dans un seul appel de service Web:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/IN202500.asmx";
context.Login(username, password);
try
{
    Content stockItemsSchema = PX.Soap.Helper.GetSchema<Content>(context);
    Field lastModifiedField = new Field
    {
        ObjectName = stockItemsSchema.StockItemSummary.InventoryID.ObjectName,
        FieldName = "LastModifiedDateTime"
    };
    var commands = new Command[]
    {
        stockItemsSchema.StockItemSummary.ServiceCommands.EveryInventoryID,
        stockItemsSchema.StockItemSummary.InventoryID,
        stockItemsSchema.StockItemSummary.Description,
        stockItemsSchema.GeneralSettingsItemDefaults.ItemClass,
        stockItemsSchema.GeneralSettingsUnitOfMeasureBaseUnit.BaseUnit,
        lastModifiedField
    };
    var items = context.Export(commands, null, 0, false, false);
}
finally
{
    context.Logout();
}

Avec le temps, la quantité de données de toute application ERP a tendance à augmenter. Si vous exportez tous les enregistrements de votre instance Acumatica ERP dans un seul appel de service Web, vous remarquerez très vite des erreurs de dépassement de délai. L'augmentation du délai d'attente est une solution possible à long terme, mais pas très efficace. Votre meilleure option pour relever ce défi consiste à exporter des articles en stock par lots de plusieurs enregistrements.

Pour exporter des articles en stock par lots de 10 enregistrements:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/IN202500.asmx";
context.Login(username, password);
try
{
    Content stockItemsSchema = PX.Soap.Helper.GetSchema<Content>(context);
    Field lastModifiedField = new Field
    {
        ObjectName = stockItemsSchema.StockItemSummary.InventoryID.ObjectName,
        FieldName = "LastModifiedDateTime"
    };
    var commands = new Command[]
    {
        stockItemsSchema.StockItemSummary.ServiceCommands.EveryInventoryID,
        stockItemsSchema.StockItemSummary.InventoryID,
        stockItemsSchema.StockItemSummary.Description,
        stockItemsSchema.GeneralSettingsItemDefaults.ItemClass,
        stockItemsSchema.GeneralSettingsUnitOfMeasureBaseUnit.BaseUnit,
        lastModifiedField
    };
    var items = context.Export(commands, null, 10, false, false);

    while (items.Length == 10)
    {
        var filters = new Filter[]
        {
            new Filter
            {
                Field = stockItemsSchema.StockItemSummary.InventoryID,
                Condition = FilterCondition.Greater,
                Value = items[items.Length - 1][0]
            }
        };
        items = context.Export(commands, filters, 10, false, false);
    }
}
finally
{
    context.Logout();
}

Il existe deux différences principales entre l’approche à appel unique et l’exportation par lots:

  • Le paramètre topCount de la commande Export a toujours été défini sur 0 dans l'approche à appel unique

  • Lors de l'exportation des enregistrements par lots, la taille d'un lot est configurée via le paramètre topCount complété par le tableau Filter pour demander le prochain jeu de résultats.

Exportation de données à partir d'un formulaire de saisie avec une clé primaire composite

L'écran Commandes clients (SO.30.10.00) est un exemple parfait d'un formulaire de saisie de données avec une clé primaire composite. La clé primaire de l'écran Commandes clients se compose du type de commande et du numéro de commande : entrer la description de l'image ici

La stratégie en deux étapes recommandée pour exporter des données depuis l'écran Commandes clients ou tout autre formulaire de saisie de données avec une clé primaire composite via l'API basée sur écran:

  • à l'étape 1, vous demandez tous les types de commandes précédemment créés dans votre application Acumatica ERP

  • La deuxième étape consiste à exporter les commandes de chaque type indépendamment, que ce soit en un seul appel ou par lots.

Pour demander tous les types de commandes existantes:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        orderSchema.OrderSummary.ServiceCommands.EveryOrderType,
        orderSchema.OrderSummary.OrderType,
    };

    var types = context.Export(commands, null, 1, false, false);
}
finally
{
    context.Logout();
}

Dans l'appel SOAP ci-dessus, notez le paramètre topCount de la commande Exporter à 1 . Cette demande vise uniquement à obtenir tous les types de commandes précédemment créés dans votre application Acumatica ERP, et non à exporter des données.

Pour exporter des enregistrements de chaque type indépendamment par lots:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        orderSchema.OrderSummary.ServiceCommands.EveryOrderType,
        orderSchema.OrderSummary.OrderType,
    };
    var types = context.Export(commands, null, 1, false, false);

    for (int i = 0; i < types.Length; i++)
    {
        commands = new Command[]
        {
            new Value
            {
                LinkedCommand = orderSchema.OrderSummary.OrderType,
                Value = types[i][0]
            },
            orderSchema.OrderSummary.ServiceCommands.EveryOrderNbr,
            orderSchema.OrderSummary.OrderType,
            orderSchema.OrderSummary.OrderNbr,
            orderSchema.OrderSummary.Customer,
            orderSchema.OrderSummary.CustomerOrder,
            orderSchema.OrderSummary.Date,
            orderSchema.OrderSummary.OrderedQty,
            orderSchema.OrderSummary.OrderTotal
        };
        var orders = context.Export(commands, null, 100, false, false);
        while (orders.Length == 100)
        {
            var filters = new Filter[]
            {
                new Filter
                {
                    Field = orderSchema.OrderSummary.OrderNbr,
                    Condition = FilterCondition.Greater,
                    Value = orders[orders.Length - 1][1]
                }
            };
            orders = context.Export(commands, filters, 100, false, false);
        }
    }
}
finally
{
    context.Logout();
}

L’exemple ci-dessus montre comment exporter toutes les commandes de vente d’ACumatica ERP par lots de 100 enregistrements. Pour exporter les commandes client de chaque type indépendamment, votre demande SOAP doit toujours commencer par la commande Value , qui détermine le type de commandes à exporter. Une fois que la commande Value utilisée pour définir la première valeur de clé passe dans la commande ServiceCommands.Every[Key] , où [Key] doit être remplacé par le nom de la deuxième clé.

Pour exporter des enregistrements d'un type spécifique:

Si vous avez besoin d'exporter des commandes client d'un type spécifique, il est possible de définir explicitement le type d'ordres avec la commande Value au début de votre demande SOAP suivie de l'approche à appel unique ou de l'exportation par lots.

Pour exporter toute la commande client du type IN en un seul appel:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        new Value
        {
            LinkedCommand = orderSchema.OrderSummary.OrderType,
            Value = "IN"
        },
        orderSchema.OrderSummary.ServiceCommands.EveryOrderNbr,
        orderSchema.OrderSummary.OrderType,
        orderSchema.OrderSummary.OrderNbr,
        orderSchema.OrderSummary.Customer,
        orderSchema.OrderSummary.CustomerOrder,
        orderSchema.OrderSummary.Date,
        orderSchema.OrderSummary.OrderedQty,
        orderSchema.OrderSummary.OrderTotal
    };
    var orders = context.Export(commands, null, 0, false, false);
}
finally
{
    context.Logout();
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow