domingo, 7 de novembro de 2021

P.U 46 - Erro: Invalid algorithm specified. Ao assinar XML da NF-e

Esse erro começou a surgir após a aplicação do update 46. O core utiliza o algoritimo SHA1 (Secure Hash Algorithm 1), na assinatura do XML da NF-e, no entanto ele já não é seguro e está sendo removido dos produtos Microsoft. Por conta disso, como solução paliativa é necessário abrir uma excessão no escopo da aplicação, para que este algoritmo possa continuar sendo usado. A Microsoft já está a par deste problema. Como Hotfix, adicione a seguinte extension ao seu ambiente:


[ExtensionOf(classStr(EFDocSignXmlDocument_BR))]

internal final class EFDocSignXmlDocument_BR_Extension

{

    public str signDocument(

        KeyVaultCertificateRef _keyVaultCertificateRef,

        DigitalCertificateSubject _certificateSubject,

        XmlElement _xmlDoc,

        str _elementToBeSignedName)

    {

        System.AppContext::SetSwitch("Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms", true);

        System.AppContext::SetSwitch("Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms", true);


        return next signDocument(_keyVaultCertificateRef, _certificateSubject, _xmlDoc, _elementToBeSignedName);

    }

}

domingo, 28 de março de 2021

Recuperar Label através do ID no D365 F&O

Há uma certa limitação na busca pelo texto das labels Core do D365 F&O. Quando tentamos utilizar a ferramenta própria para isso no Visual Studio, ela simplesmente trava e não trás nenhum resultado. Para contornar isso utilize o job abaixo, ele retornará o texto da label conforme Id passado na URL:

/?mi=SysClassRunner&cls=GetLabelTextById&args=@SYS338946

class GetLabelTextById

{

    /// <summary>

    /// Runs the class with the specified arguments.

    /// </summary>

    /// <param name = "_args">The specified arguments.</param>

    public static void main(Args _args)

    {

        URLUtility    urlUtility = new URLUtility();

        Str           argsStr    = urlUtility.getQueryParamValue('args');

        Info(Microsoft.Dynamics.Ax.Xpp.LabelHelper::GetLabel(argsStr));

    }

}