How to update the daily exchange rate by consuming web services from any bank.


Financial management users have the daily task of updating the exchange rate with respect to any foreign currency, however, this task is often done manually. In the next post, I will explain the simple way to consume a central bank web service in this case of Mexico (It works for any country) and updates the exchange rate table.

It is important to know that for it to be done automatically, you simply need to expose a Job Queue that executes this update task daily.

Below the source code:

procedure GetRateforDateBanxico()
    var
        Client: HttpClient;
        Response: HttpResponseMessage;
        ContentTxt: Text;
        Root: JsonObject;
        CurRate: Decimal;
        CurRateTxt: text;
        CurDateTxT: Text;
        ExchangeRate: Record "Currency Exchange Rate";
        BMSetup: Record "GetCurrfromBM Setup";
        Pos: Integer;
        PosD: Integer;
    begin
        BMSetup.Get();
        if Client.Get('https://www.banxico.org.mx/SieAPIRest/service/v1/series/'   BMSetup."Bank Series to Use"   '/datos/oportuno?mediaType=json&token='   BMSetup.Token, Response) then begin
            if Response.IsSuccessStatusCode() then begin
                if Response.Content().ReadAs(ContentTxt) then begin
                    if Root.ReadFrom(ContentTxt) then begin
                        if ContentTxt.Contains('dato":"') then begin
                            Pos := StrPos(ContentTxt, 'dato":"')   7;
                            CurRateTxt := CopyStr(ContentTxt, Pos, 7);
                            PosD := StrPos(ContentTxt, 'fecha":"')   8;
                            CurDateTxT := CopyStr(ContentTxt, PosD, 10);
                            if Evaluate(CurRate, CurRateTxt) then begin
                                ExchangeRate.Init();
                                ExchangeRate."Currency Code" := BMSetup."Currency Code";
                                ExchangeRate."Starting Date" := ConvDate(CurDateTxT);
                                if ExchangeRate.Insert(true) then begin
                                    ExchangeRate.Validate("Exchange Rate Amount", 1);
                                    ExchangeRate.Validate("Relational Exch. Rate Amount", CurRate);
                                    ExchangeRate.Validate("Adjustment Exch. Rate Amount", 1);
                                    ExchangeRate.Validate("Relational Adjmt Exch Rate Amt", CurRate);
                                    ExchangeRate.Modify(true);
                                end;
                            end else
                                message('There´s no data to read');
                        end else
                            Error('Could not find "dato" in XML (%1)', ContentTxt);
                    end else
                        Error('Malformed XML (%1)', ContentTxt);
                end else
                    error('server did not return')
            end else begin
                if Response.Content().ReadAs(ContentTxt) then
                    Error('Fail call with code (%1) (Info %2', Response.HttpStatusCode(), ContentTxt)
                else
                    Error('Fail call with cod (%1)', Response.HttpStatusCode)
            end;
        end else
            Error('Cannot connect');
    end;

    local procedure ConvDate(curdatetxt: text): Date
    var
        finaldate: Date;
    begin
        if Evaluate(finaldate, curdatetxt) then
            exit(finaldate);
    end;
Source: https://community.dynamics.com/blogs/post/?postid=035a056f-415a-406c-9ef1-2b8f15a2e83e



Comentarios

Entradas populares de este blog

Join two or more PDFs into one in Business Central

Connect An External Database To Business Central

How to open any document in OneDrive from Business Central