Articoli

how to

Business Central offre di default l’integrazione al Common Data Service, come tutte le sue funzionalità però si può estendere, vediamo in che modo.

Oggigiorno l’integrazione tra sistemi è sempre più importante, app e servizi diversi si integrano sempre più tra loro formando un’unica rete al servizio dell’utente. Business Central si integra con la suite di Office365 tramite il Common Data Service (Cds), una base dati comune a tutti i servizi che vengono utilizzati da Office365, alla base standard di dati esposti sul Cds, è possibile come molte altre funzionalità, aggiungere le proprie personalizzazioni per modellare al meglio l’utilizzo del prodotto alle proprie esigenze.

Ipotizziamo quindi di dover integrare nel common data service una nuova tabella di business central che servirà nell’esecuzione di un Flow di Power Automate basato su Planner in modo che ad ogni nuova task venga generato e assegnato un numero di serie definito in Business Central.

Il primo passo è quindi la creazione di una normalissima tabella:

table 89100 "VAR Projects Planner Teams"
{
    Caption = 'Projects Planner Teams Setup';
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Project Code"; Code[50])
        {
            DataClassification = CustomerContent;
        }
        field(15; "Planner Id"; text[100])
        {
            DataClassification = CustomerContent;
        }
        field(20; "Planner Task No. Series"; Code[50])
        {
            DataClassification = CustomerContent;
            TableRelation = "No. Series";
        }
    }
keys
    {
        key(PK; "Project Code")
        {
            Clustered = true;
        }
    }
}

Seguita dalla sua page per l’inserimento dei dati

page 89100 "VAR Project Planner Teams"
{
    PageType = List;
    ApplicationArea = All;
    UsageCategory = Administration;
    SourceTable = "VAR Projects Planner Teams";

    layout
    {
        area(Content)
        {
            repeater(GroupName)
            {
                field("Project Code"; "Project Code")
                {
                    ApplicationArea = All;

                }
                field("Planner Id"; "Planner Id")
                {
                    ApplicationArea = All;
                }
                field("Planner Task No. Series"; "Planner Task No. Series")
                {
                    ApplicationArea = All;
                }
            }
        }
    }

Fin qua nulla di particolare, passiamo ora alla parte che serve all’esposizione sul Common Data Service.
Come detto inizialmente servono alcune cose:

    • Una pagina esposta sul Cds contenente le info di setup.
    • Una Procedura esposta anch’essa sul cds che stacchi un nuovo numero di serie alla creazione del task planner.

Iniziamo con la creazione della page esposta sul common data service, per fare questo basta creare una pagina di tipo API della tabella creata poco prima:

page 89101 "VAR Project Planner Teams API"
{
    PageType = API;
    Caption = 'VARProjectPlannerTeamsAPI';
    APIPublisher = 'VRP';
    APIVersion = 'v2.0';
    APIGroup = 'PRIMECDSDT';
    EntityName = 'VRPProjectPlannerTeams';
    EntitySetName = 'PPTSetup';
    DelayedInsert = true;
    SourceTable = "VAR Projects Planner Teams";

    layout
    {
        area(Content)
        {
            repeater(GroupName)
            {
                field(ProjectCode; "Project Code")
                {
                    applicationarea = all;
                }
                field(PlannerId; "Planner Id")
                {
                    applicationarea = all;
                }
                field(PlannerTaskNoSeries; "Planner Task No. Series")
                {
                    applicationarea = all;
                }
            }
        }
    }
}

E quindi creiamo anche la Codeunit contenente la funzione riguardante il nr. di serie da staccare.

codeunit 89100 "VAR CDS Connector"
{
    procedure GetNextNoSeries(plannerid: text): Text[50]
    var
        ProjectPlannerTeamsSetup: Record "VAR Projects Planner Teams";
        NoSeriesMgt: Codeunit NoSeriesManagement;
        JsonArray: JsonArray;
        JsonToken: JsonToken;
    begin
        ProjectPlannerTeamsSetup.Reset();
        ProjectPlannerTeamsSetup.SetRange("Planner Id", PlannerId);
        if not ProjectPlannerTeamsSetup.FindFirst() then exit('');

        exit(NoSeriesMgt.GetNextNo(ProjectPlannerTeamsSetup."Planner Task No. Series", WorkDate(), true));
    end;
}

Questa codeunit dovrà essere esposta come servizio web nel webclient di Business Central.

A questo punto l’app di Business Central è pronta e può essere pubblicata.

Si passa ora su PowerAutomate (ma potrebbe valere la stessa cosa anche per PowerApp).

La page e la codeunit sono esposte dal servizio di Business Central ma non sono ancora visibili nel common data service, per poterle vedere è necessario creare un connettore personalizzato.

Un connettore personalizzato si crea accedendo alla sezione dati e selezionando “connettori personalizzati”

Si accede così alla pagina dove è possibile creare o gestire i vari connettori di dati, dove si dovrà creare un nuovo connettore da zero.

A questo punto basterà seguire i passaggi per configurare il connettore.

La configurazione avviene tramite 4 passi più uno di test in cui si definiscono url di collegamento, credenziali che devono essere richieste, le chiamate che il connettore deve fare e le risposte che il connettore riceve.

Nel primo passo si definisce il nome che il connettore avrà e l’host con l’indirizzo che espone le API, nel nostro caso essendo le api esposte da un Business Central Saas inseriremo l’endpoint generale della API di Business Central (api.businesscentral.dynamics.com)

Il secondo passo consiste nella definizione dei criteri di autenticazione al servizio. Quindi definiremo per semplicità l’autenticazione di Base (traduzione italiana per la Basic Authentication), con i due parametri che dovranno essere richiesti dal connettore al momento dell’utilizzo nel flow nel nostro caso inseriremo il parametro di username (nome utente) e password.

N.B. in questa scheda si definiscono solo i parametri e non vanno immessi dati sensibili.

Arriviamo al terzo passo, in questa scheda vengono definiti le azioni e i trigger che il connettore deve eseguire. Le azioni sono le operazioni che il connettore esegue e nel nostro caso sono due chiamate ai webservice di Business Central. I trigger invece sono le operazioni, eseguite da Business Central che possono fare scattare il flow, questi trigger vengono creati con i webhook ma nel nostro caso non ne abbiamo bisogno.

Definiremo quindi due azioni: GetProjectData che recupera le informazioni di setup come l’Id del planner e il nr. di serie da utilizzare e GetPlannerTaskNo che stacca il nr. di serie da assegnare al Task di Planner.

Le azioni si creano cliccando su “Nuova Azione” e compilando le varie schede che vengono proposte, nella prima si definiscono i nomi dell’azione, nella seconda si definisce qual è la richiesta da fare al servizio web, è possibile inserire dei parametri in modo che possano variare a richiesta nel Flow inserendoli tra due parantesi graffe {}.

La creazione delle azioni può avvenire in maniera manuale o in maniera semi automatica cliccando su “Importa da esempio”, in questo caso utilizzando un software esterno come Insomnia è possibile copiare la chiamata al webservice e la risposta che il webservice restituisce. Leggendo i Json in automatico verranno impostati i nomi dei valori che il webservice restituisce.

A questo punto passiamo a creare anche la seconda azione nello stesso modo, una volta ultimato è possibile passare al quarto step e testare il connettore.

Una volta testato è possibile salvarlo e a questo punto il connettore è pronto ad essere utilizzato.

Passiamo quindi alla creazione del flow.

Il nostro connettore lo troviamo tra i connettori personalizzati:

E il suo utilizzo è identico a tutti gli altri connettori standard di Power Automate.

Creiamo quindi il nostro flow:

Una volta salvato e attivato sarà pronto all’utilizzo.

Andiamo nel nostro planner per verificare se funziona, creiamo un task e attendiamo qualche secondo per l’esecuzione del flow.

Dopo qualche secondo il titolo del task prende il nr. di serie staccato da Business Central.

Questo è solo un esempio dei numerosi modi in cui Business Central può essere integrato al meglio all’interno della suite di Office365 al fine di rispecchiare al meglio i flussi aziendali dei clienti.

 

Semplifica i processi, prendi decisioni più informate e accelera la crescita con Dynamics 365 Business Central, una soluzione di gestione aziendale completa progettata per le piccole e medie imprese.

Dynamics 365 Developer

 

Azure Shared Disk

Azure Shared Disk è una nuova funzionalità che permette di usare lo stesso disco gestito da più Virtual Machines sia con sistema operativo Windows che con sistema operativo Linux.

Il grosso vantaggio è che è possibile migrare tutte quelle applicazioni ancora presenti sulle infrastrutture on premises che dipendono dai servizi cluster e che sono sensibili a livello di latenza, senza compromettere l’alta affidabilità e il fast failover.

Queste includono database in cluster, scale-out File Server, SAP Workload, containers persistenti e applicazioni di Machine Learning.

Fatta questa promessa, andremo ora a configurare Windows Failover Cluster usando gli Azure Shared Disk.

Prerequisiti:

  • Sottoscrizione attiva Azure
  • Un dominio Active Directory già creato in precedenza
  • Proximity Placement Group

La scelta del disco deve ricadere su uno di tipo Premium o Ultra SSD, gli unici subset attualmente disponibili e ogni tipo di disco ha le sue limitazioni che potete trovare sulle docs di Microsoft (Share an Azure managed disk across VMs – Azure Virtual Machines | Microsoft Docs)

Durante la creazione del disco, nelle opzioni avanzate, ci verrà chiesto se si tratta di uno shared disk.

inoltre, dobbiamo indicare anche il numero massimo di shares (in poche parole il numero delle Virtual Machines che condivideranno il disco) questo valore varia in base al tipo di disco: più il disco è prestante più è possibile condividerlo con più Virtual Machines.

Ora possiamo procedere con l’aggiunta del disco a due nodi (precedentemente creati), al momento dell’aggiunta i nodi devono essere spenti.

Una volta aggiunto il disco, possiamo procedere con la semplice formattazione dal disk management di Windows.

In questo momento abbiamo entrambe le VM con il disco condiviso, ma ognuna di esse non condivide nessuna informazione con l’altra.

Procediamo quindi con l’installazione del ruolo Failover Cluster in entrambi i nodi che comporranno il cluster.

Per fare questo lanciamo tramite PowerShell il seguente comando e successivamente procediamo con il riavvio di ogni singolo nodo:

Una volta ripartite le VM, procediamo con la creazione del cluster tramite questo comando PowerShell in cui verrà anche specificato l’indirizzo Ip assegnato al cluster stesso (nel mio caso ho creato un ILB Azure).

Collegandoci al Failover Cluster Manager, possiamo verificare che il cluster sia correttamente configurato, In particolare, nella sezione storage, possiamo vedere che il nostro Shared Disk precedentemente creato:

Per rendere il cluster più stabile, possiamo procedere con la configurazione del Quorum, configurandolo in uno storage account:

Quando richiesto, andremo ad impostare il nome dello storage account e la Key di autenticazione che possiamo trovare nei settings dello storage account.

Il cluster è ora online e disponibile per installazioni quali SQL Server Failover Cluster necessarie per installazioni di applicazioni legate al mondo delle SAN on premise che hanno necessità di bassissima latenza pur conservando tutti i dogmi dell’alta affidabilità.

 

Fonti e approfondimenti:

Share an Azure managed disk across VMs – Azure Virtual Machines | Microsoft DocsEnable

shared disks for Azure managed disks – Azure Virtual Machines | Microsoft Docs

 

Microsoft Azure è una piattaforma di Cloud Computing accessibile tramite un portale online che consente di accedere e gestire i servizi e le risorse cloud forniti da Microsoft

 

Azure Engineer

 

How to

Trello, uno strumento online per la gestione dei progetti e dei task personali.

Una delle richieste sempre più comuni è quella di integrare Business Central con altri software e portali. Oggi riportiamo l’esempio di un integrazione con il sito web di Trello.

Trello (https://trello.com/it) è uno strumento di base gratuito, formato da tre elementi chiave: la board, le list e le card.

  • Le board (possono essere private o pubbliche) sono il contenitore principale di tutti i task.
  • Le card, che contengono i vari task, sono organizzati all’interno di liste e rappresentano l’unità base.

L’obiettivo che ci siamo dati all’inizio di questo sviluppo è provare ad integrare Business Central con una bacheca creata su Trello per inviare verso il loro sito delle anagrafiche clienti (per esempio dei soggetti da contattare per campagne promozionali) e fornitori.

Per prima cosa abbiamo creato su Trello una bacheca con due list (Clienti\ Fornitori) seguendo la loro guida: https://trello.com/it/guide/trello-101.html

Sempre da Trello abbiamo poi preso alcune informazioni che ci serviranno per l’integrazione: la chiave API ed il Token: https://trello.com/app-key

Trello

A questo punto abbiamo consultato la documentazione sulle API di Trello che potete trovare a questo link: https://developer.atlassian.com/cloud/trello/rest/ ed abbiamo estratto da l’ultima informazione fondamentale: l’id della nostra board e list.

Per fare questo abbiamo creato una card di test ed abbiamo esportato il Json.

Le informazioni sono contenute nell’idBoard e l’idList.

A questo punto abbiamo tutte le informazioni per fare l’integrazione.

Ci spostiamo in Visual Studio Code, creiamo una page extension della customer card e un action che ci permette di inviare il cliente nella nostra bacheca su Trello

action(SENDTRELLO)
            {
                Caption = 'Send Customer To Trello';
               Visible = true;
               Image= Sendto;
               ApplicationArea = All;
                
                trigger OnAction()
                var
                    client: HttpClient;
                    Path: Text;
                    RequestContent: HttpContent;
                    ResponseMessage: HttpResponseMessage;
                    StatusCode: text;
                    AuthHeaderValue: HttpHeaders;
                    Content: HttpContent;
                    Result: Text;
                begin
  Path :='https://api.trello.com/1/cards?key=20fb8653332….&token=a1fca508d75689ba5f…&name=' + rec."No." + ' - ' + rec.Name + '&idList=5fe21834211dab1e01c005a2';
                    Client.SetBaseAddress(path);
                    Client.DefaultRequestHeaders.Add('User-Agent', 'Dynamics 365');

                    if Client.Post(path, RequestContent, ResponseMessage) then begin
                        if ResponseMessage.IsSuccessStatusCode then begin
                            StatusCode := '00';
                            AuthHeaderValue := ResponseMessage.Headers;
                            Content := ResponseMessage.Content;
                            Content.ReadAs(Result);
                        end else begin
                            AuthHeaderValue := ResponseMessage.Headers;
                            Content := ResponseMessage.Content;
                            Content.ReadAs(Result);
                            StatusCode := Format(ResponseMessage.HttpStatusCode);
                            Error(format(ResponseMessage.HttpStatusCode) + Result)
                        end;
                    end;
                end;
}

Pubblichiamo la page ext e ci troviamo la nostra azione sulla customer card

Clicchiamo sull’azione e sulla nostra bacheca ecco arrivare il cliente

Ripetendo la cosa per i fornitori (cambiando solo id della lista) raggiungiamo il nostro obiettivo.

Questo ovviamente è solo un esempio e un primo passo dell’integrazione e delle possibilità che offre Trello e delle potenzialità che Business Central ha per integrarsi con numerosi software disponibili su web.

 

Semplifica i processi, prendi decisioni più informate e accelera la crescita con Dynamics 365 Business Central, una soluzione di gestione aziendale completa progettata per le piccole e medie imprese.

Dynamics 365 Developer

 

La nostra selezione di migliori extension del Marketplace VSCode, per sviluppare in codice AL

Tra le tante sfide che il passaggio da Dynamics NAV a Dynamics 365 Business Central ha presentato, quella che ha coinvolto gli sviluppatori, (oltre al cambio di linguaggio) è stato anche il cambio di front-end.

Per sviluppare in Business Central, infatti, gli sviluppatori hanno dovuto prendere confidenza con il linguaggio AL nuovo linguaggio di programmazione utilizzato per sviluppare in un database Dynamics 365 Business Cental in sostituzione di C/AL.

Il nuovo front end adottato è Visual Studio code, editor di codice sorgente sviluppato da Microsoft che può essere usato con vari linguaggi di programmazione.

Quello che ci siamo chiesti nel team developer Var Prime, in questi mesi (in realtà fin dai primi corsi in Microsoft) è stato: come possiamo sfruttare al massimo le potenzialità di questo strumento con il nuovo codice AL?

Da qui è nata la nostra “raccolta” di Extension (aggiornata ad aprile 2020) preferite trovate sul MarketPlace.

Le nostre extension consigliate

Per prima cosa abbiamo installato l’extension che ci permette di sviluppare in AL.

AZ AL DEV Tools/AL Code Outline

AZ AL DEV Tools - AL Code Outline

A questo punto ci siamo domandati: ma il vecchio e caro editor che mi permetteva di costruire una tabella senza scrivere l’intera struttura a mano non c’è più?

La risposta ufficiale è no ma grazie a Andrzej Zwierzchowski è nata AZ AL DEV Tools/AL Code Outline

La versione corrente dell’estensione è una raccolta di diversi strumenti di sviluppo.
L’extension è nata come un wizard per costruire oggetti in AL , ma nel tempo son state aggiunte tantissime funzionalità: dalla gestione dei commenti, alla visualizzazione ad albero degli oggetti, alla possibilità di vedere le immagini delle pageaction o di sfruttare delle codeaction per organizzare , modificare o inserire codice in maniera veloce.

Il punto di forza sicuramente è l’editor che permette la costruzione di una tabella o di altri oggetti simulando quanto conoscevamo già nel vecchio ambiente

Ve la consigliamo davvero perché è un tool molto comodo e che aiuta tantissimo nel velocizzare operazioni che spesso portano via tempo e sono ripetitive.

Potete scaricare l’estensione e trovare tutte le informazioni qui:
https://marketplace.visualstudio.com/items?itemName=andrzejzwierzchowski.al-code-outline 

 

L’AL Object Designer

AL Object Designer

Un altro strumento particolarmente utile è L’AL Object Designer di Marton Sagì

L’idea di base è quella di simulare l’object designer e quindi permette di vedere gli oggetti standard, il loro sorgente e gli eventi che mette a disposizione ogni singolo oggetto

Inoltre, si integra perfettamente con AZ AL DEV Tools/AL Code Outline, permettendo di richiamare il wizard direttamente dal suo menu.

Per tutte le informazioni e per scaricare questo utilissimo tool, potete visitare il marketplace
https://marketplace.visualstudio.com/items?itemName=martonsagi.al-object-designer

 

NAB AL Tools

NAB AL Tools

Tra le varie sfide che il cambiamento al linguaggio AL comporta una piuttosto onerosa per non dire piuttosto noiosa è la gestione dei file.xlf delle traduzioni delle app che si stanno creando.

Fortunatamente in nostro soccorso arriva un’estensione creata principalmente per la gestione di questa tipologia di file: suo nome è NAB AL Tools

Una volta installata sarà possibile aggiornare il file di traduzione rispetto al file.g con un semplice comando “NAB: Refresh XLF files from g.xlf”. Tutte le eventuali aggiunte vengono marcate con un prefisso specifico in modo da essere facilmente trovate e tradotte.

Il comando poi è in grado di trovare traduzioni simili e di tradurre in maniera semi automatica le caption dell’app.

Oltre alla gestione delle traduzioni sono contenute anche alcune funzionalità di gestione delle test codeunit e degli snippet aggiuntivi.

È possibile trovare maggiori informazioni nel git dell’extension: https://github.com/jwikman/nab-al-tools

O direttamente al link dello store: https://marketplace.visualstudio.com/items?itemName=nabsolutions.nab-al-tools

 

GitLens

GitLens

Un altro grosso cambiamento che ci ha portato questo nuovo linguaggio è il passaggio da gestione ad oggetto a gestione a file.

La gestione dei file contenuti in locale sull’app che si sta sviluppando potrebbe creare alla lunga dei problemi, specie se si vuole recuperare un oggetto allo stato che aveva giorni o mesi prima una determinata modifica.

Su VSCode può tornare utile l’addin GitLens.

Questo addin contiene alcune funzionalità utili a reperire le modifiche fatte in precedenza di qualunque parte dell’oggetto.

Non solo con un semplice click sarà possibile consultare le modifiche effettuate precedentemente senza dover entrare su altri siti ma tutto direttamente da VsCode.

Potete trovare questa estensione a questo indirizzo: https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens

 

Waldo

Waldo

In una recensione delle migliori estensioni per Vs Code non può mancare infine quella di Waldo.

Le caratteristiche principali dell’estensione sono:

  • Esecuzione di oggetti nel client Windows e nel client Web

Sembrava scontato in C\AL ma ora non è così, l’esecuzione degli oggetti senza utility specifica, diventa un impresa macchinosa, vale a dire, essere in grado di eseguire un oggetto senza dover modificare e salvare launch.json . Il modo più semplice per trovare la funzionalità è nell’elenco comandi. Cerca “> crs: run” e ti darà tutte le opzioni utili per fare il run dell’oggetto.

  • Gestire automaticamente i nomi dei file (e le posizioni, se lo si desidera)
    Questa feature consente di far risparmiare tempo agli sviluppatori nella gestione di nomi e organizzazioni in cartelle,
    I due comandi principali sono :
    Rinomina
    Riorganizza

Basterà infatti scrivere CRS.OnSaveAlFileAction che eseguirà il Rename o il Reoganize al posto nostro in fase di salvataggio!

Ancora una volta possiamo dire che il grande Waldo ci viene incontro!

Di seguito il link dell’extension:
https://marketplace.visualstudio.com/items?itemName=waldo.crs-al-language-extension

 

Semplifica i processi, prendi decisioni più informate e accelera la crescita con Dynamics 365 Business Central, una soluzione di gestione aziendale completa progettata per le piccole e medie imprese.

&

Dynamics 365 Developer

Dynamics 365 Developer

Dynamics 365 Developer