February 2024 News Digest

Welcome to the Virto Commerce February News Digest, your resource to explore the latest innovations and updates as of January 2024.

Highlights

  • :fire: Platform transitioning to .NET 8.
  • New File Experience API module.
  • Storefront and Marketplace updates.
  • Technical documentation reorganization.

Platform

:fire: 3.800.0 Virto Commerce is introducing a significant technical update by moving the platform to .NET 8. This update focuses on improving performance and stability while maintaining backwards compatibility. It includes updating the target framework to .NET 8 and integrating the latest LTS releases of third party libraries.

The release has been extensively tested, including unit, end-to-end, regression and performance testing to ensure a seamless transition to other stable releases.

We’re thrilled to present two stable releases, each accompanied by patches for ongoing improvements:

Download and install the Platform
Read more about upgrading to Virto Commerce on .NET 8

File Experience API

:fire: 3.800.0 A new module has been released to provide upload experience for client applications. The file upload functionality can be used in a variety of scenarios. For example, you now can attach new files to quotes and create quotes with attachments.

You now can:

  • Embrace a Security-First approach, ensuring a seamless download of files with enhanced security measures.
  • Extend the File Upload process, tailoring it to your specific needs with customizable validation rules such as extensions, file count, size limits, antivirus scans, permissions, and more.
  • Achieve greater Isolation, as scopes allow you to define settings for file uploads, making all upload operations an integral part of a designated scope. For example, you can manage Quote Attachments, Contracts Certificates, and more within specific scopes.
  • Leverage compatibility as the File Upload process seamlessly works with current Assets providers, ensuring a smooth integration with your existing systems.

The mechanism of uploading files from client applications is as follows:

  1. Register Upload Scope in appsettings.json:

    "FileUpload": {​
      "RootPath": "attachments",​
      "Scopes": [​
        {​
          "Scope": "quote-attachments",​
          "MaxFileSize": 1048576,​
          "AllowedExtensions": [ ".jpg", ".pdf", ".png", ".txt" ]​
        }​
      ]​
    }​
    
  2. Query Settings via GraphQL:

    query {​
      fileUploadOptions(scope: "quote-attachments"){​
        scope​
        maxFileSize​
        allowedExtensions​
      }​
    }
    
  3. Upload files as multipart/form-data and receive <safe-file-id>:

    POST https://<YOUR-DOMAIN>/api/files/quote-attachments
    Content-Type: multipart/form-data
    
  4. Save <safe-file-id> in <your entity>:

    1. Extend your XAPI Query and Mutations with File Attachments as an Array of String.​
    2. Implement Security Callback to control access to files.
  5. Download file:

    GET https://<YOUR-DOMAIN>/api/files/<safe-file-id>
    

The developer guide in the Platform documentation is currently being updated.

Getting Started with Quote Attahcments
Download and install the File Experience API module

xAPI

  • 3.802.0 The orders query has been extended with new arguments to request term facets. It is used to facilitate the categorization of orders based on their status, and the response is structured to provide a breakdown of the order count for each distinct status along with details of individual orders:

    {
      orders(cultureName: "en-US", facet: "status") {
        totalCount
        term_facets {
          name
          terms {
            term
            label
            count
          }
        }
        items {
          number
          status
        }
      }
    }
    
  • 3.802.0 A store query has been added to the GraphQL schema to return current store settings:

    query{
      store(storeId: "B2B-store", cultureName: "en-US") {
        userId
        userName
        storeId
        storeName
        catalogId
        storeUrl
        defaultLanguage {
          isInvariant
          cultureName
          nativeName
          threeLetterLanguageName
          threeLetterRegionName
          twoLetterLanguageName
          twoLetterRegionName
        }
        availableLanguages {
        }
        defaultCurrency {
          code
          symbol
        }
        availableCurrencies {
          code
          symbol
        }
        settings {
          quotesEnabled
          subscriptionEnabled
          taxCalculationEnabled
        }
      }
    }
    
  • 3.802.0 A validateCoupon query has been added to replace a mutation with similar purpose - querying whether the provided coupon is valid or not:

    query {
      validateCoupon(
        storeId: "B2B-store",
        userId: "123",
        currencyCode:"USD"
        cultureName:"en-US"
        cartName:"default"
        coupon:"123"
      )
    }
    

Download and install the xAPI module

Marketing

  • The Marketer role has been added to the roles that can be assigned to users. The marketer can now be associated with specific store(s). At the same time, the system will prevent the marketing promotion from being edited and display a message thereof if the marketer tries to modify the promotion of a store that is outside their scope.

  • 3.802.0 A more user-friendly interface has been applied to the user groups assigned to specific promotion conditions. You can now conveniently select a group from a dropdown list:

    image

    Download and install the Marketing module

New Unique Number Generator

3.803.0 A new implementation for IUniqueNumberGenerator has been added. The SequenceNumberGeneratorService class has been extended to support dynamic counter options within the number template. It supports the SequenceNumberGenerator for multi-instance configuration and fixes some issues.

If you are using IUniqueNumberGenerator, the new implementation is 100% compatible with current templates.

It allows users to define reset counter types: None, Daily, Weekly, Monthly, Yearly, start counter from a specific value and set counter increment, all within the number template itself. In addition, this feature includes improvements to error handling, retry policies for database operations, and code organisation for better maintainability.

To use this new feature, simply update your number template to include the desired counter options. The enhanced IUniqueNumberGenerator will automatically parse and apply these options during number generation. For tenant-specific scenarios, implement the ITenantUniqueNumberGenerator interface.

The templates can be as follows:

  • Basic template: PO{1:D5}
  • Daily template: PO{0:yyMMdd}-{1:D5} or PO{0:yyMMdd}-{1:D5}@Daily
  • Weekly reset, starting from 1, with a counter increment of 10: PO{0:yyMMdd}-{1:D5}@Weekly:1:10
  • No reset, starting from 1, with a counter increment of 1: PO{0:yyMMdd}-{1:D5}@None:1:1

Where:

  • {0} - date time in UTC format.
  • {1} - the counter.
  • {2} - tenantId or empty.

Storefront

  • The design of Storefront product page has been upgraded to become even more aesthetically pleasing:

  • The orders list now displays orders grouped by statuses. Now you can see all available statuses immediately, without having to apply filters:

View the enhancements on public demo site

Read more and install Storefront

Marketplace

  • Marketplace has been update to .NET 8 Platform/Storefront versions.

  • Offers can now be imported by product GTIN code known to a vendor.

  • A product can be imported together with its type (physical, digital, etc).

  • Users are now notified of unsaved changes when closing tabs:

For more information, request a demo

Documentation

The Virto Commerce documentation has been completely redesigned to be more illustrative and convenient and has been moved to docs.virtocommerce.org. The home page now shows all four Virto Commerce products: Platform, Storefront, Marketplace, and VC Shell. It also displays latest release notes. You can easily access the support, blog, comuunity, and github pages from here:

Each product navigation page is divided into User and Developer Guides and also displays other necessary links.
In addition, users can now easily navigate between all products from the top menu:

image

1 Like