Creating new type of barcode in D365FO

Hi. I need to create new type of barcode - EAN14. I’ve created new value in extension of enum BarcodeType - EAN14, new class BarcodeEAN14 which extends BarcodeEAN_UPC and implemented required methods from BarcodeEAN_UPC in BarcodeEAN14 class. When I would to create new BarcodeSetup from a job, constructor of Barcode class throws error. In debugger I see that, reflection by attribute BarcodeTypeFactory cannot resolve class with this attribute from cache. What I need to do next?

[BarcodeTypeFactory(BarcodeType::EAN14)]
public class BarcodeEAN14 extends BarcodeEAN_UPC
{
    public BarcodeType barcodeType()
    {
        return BarcodeType::EAN14;
    }

    BarCodeString encodeString(BarCodeString _stringIn)
    {
        BarCodeString   result;

        return result;
    }

    public Integer strlen()
    {
        return 14;
    }

    public static BarcodeEAN14 construct()
    {
        return new BarcodeEAN14();
    }

}
class EAN14BarcodeSetupInit
{
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        BarcodeSetup        barcodeSetup;
        #define.EAN14('EAN14')
        #define.length(14)
        #define.size(13)

        barcodeSetup.initValue();
        barcodeSetup.barcodeType = BarcodeType::EAN14;
        barcodeSetup.description = #EAN14;
        barcodeSetup.barcodeSetupId = #EAN14;
        barcodeSetup.fontSize = #size;
        barcodeSetup.minimumLength = #length;
        barcodeSetup.maximumLength = #length;
        barcodeSetup.defaultField(fieldNum(BarcodeSetup, fontName));

        try
        {
            barcodeSetup.insert();
        }
        catch(Exception::Error)
        {
            throw error(strFmt("@DTL:CreatingBarcodeEAN14Failed", barcodeSetup.barcodeSetupId));
        }

        info(strFmt("@DTL:CreatedBarcodeEAN14", barcodeSetup.barcodeSetupId));
    }

}

Problem resolved. I used SysExtensionCache::clearAllScopes() before barcodeSetup.initValue(). After that reflection resolved attribute value EAN14.

1 Like