Il catalogo prodotti si costruisce in un ordine preciso, e chi lo salta si blocca al primo salvataggio. In Sales Hub il punto d’ingresso è sempre lo stesso: Change area in basso a sinistra nella site map, poi App Settings, poi l’area Product Catalog. Da lì si raggiungono Unit Groups, Families and Products, Discount Lists, Price Lists e Product Catalog Settings.

Si comincia dai unit group, cioè le unità di misura in cui vendi. Un unit group ha un Name e una Primary Unit, che è l’unità più piccola (per esempio “Piece”) e non può essere eliminata; nella scheda RelatedUnits aggiungi le altre unità con Name, Quantity e Base Unit. Solo dopo puoi creare un product, perché i campi Unit Group e Default Unit sono richiesti sulla scheda prodotto insieme a Name, Product ID, Parent, Valid From/Valid To, Decimals Supported (un numero intero fra 0 e 5) e Subject. Il campo Default Price List è di sola lettura finché il record non è stato salvato la prima volta.

La product family è un contenitore gerarchico: raggruppa prodotti, bundle e altre family, e puoi annidare quanti livelli vuoi. La documentazione è esplicita su un limite di applicazione: «Product families are only supported in the Sales Hub app». La family fa una cosa che nessun altro oggetto del catalogo fa: trasmette le product properties ai figli. Le proprietà si aggiungono dalla scheda Product Properties con Add New Property, si dichiara un data type (per esempio Option Set con i valori delle taglie) e si possono creare solo quando il record è in stato Draft o Under Revision. Un figlio che eredita una proprietà la può ridefinire con Override; se la proprietà era già stata sovrascritta, o se stai modificando proprietà non ereditate di una family Under Revision, il comando che vedi è Overwrite. Impostando Hidden a Yes su una proprietà blocchi l’ereditarietà verso i figli. Attenzione: le proprietà descrivono, non prezzano. La pagina lo dice senza mezzi termini: non puoi assegnare prezzi diversi a proprietà diverse senza un motore di pricing personalizzato.

I record nascono in stato draft e diventano vendibili solo con Publish, che porta lo stato ad Active; per pubblicare in blocco una gerarchia si usa PublishPublish Hierarchy, e un prodotto con parent family si può pubblicare solo se la family padre è attiva.

Il product bundle è un’altra cosa

Qui si annida l’errore più frequente. La product family raggruppa e classifica; il product bundle vende insieme più prodotti come un’unica unità. Un bundle si crea con Add Bundle e ha gli stessi campi di un prodotto; le righe si aggiungono dalla scheda Bundle Products con Add New Product Association, indicando Product, Quantity, Required e Unit. Le regole da ricordare a memoria: non puoi aggiungere family, kit o altri bundle dentro un bundle; le associazioni si possono aggiungere o eliminare solo quando il bundle è in stato draft o retired (altrimenti si clona); e se il bundle contiene un prodotto opzionale, può essere aggiunto solo a una price list che contiene quel prodotto opzionale con la stessa unità.

Anche il calcolo del prezzo segue una logica sua: il prezzo del bundle è calcolato sui prodotti required, mentre gli opzionali si sommano sopra. Nell’esempio della documentazione, un bundle da 600 dollari con due opzionali venduti in 5 unità arriva a 1050. E i campi legati al prezzo di un prodotto required all’interno del bundle non sono modificabili, perché non partecipano al calcolo.

Price list, price list item, valute e sconti

La price list è l’oggetto che assegna i prezzi, e non ha nulla a che vedere con family e bundle. Ha Name, Start Date, End Date e Currency; la documentazione avverte che devi creare almeno una price list per ciascuna valuta in cui l’organizzazione fa business, e che la tabella Price list eredita i privilegi dalla tabella Product. Dentro, la scheda Price List Items con New Price List Item lega prodotto, unità e prezzo: Product, Unit, Currency (compilata in automatico dalla price list), Discount List e Quantity Selling Option, che stabilisce se il prodotto si vende in quantità intere, parziali o entrambe.

Nella scheda Pricing information si sceglie il Pricing Method fra sei valori: Currency Amount, Percent of List, Percent Markup - Current Cost, Percent Markup - Standard Cost, Percent Margin - Current Cost e Percent Margin - Standard Cost. Con Currency Amount compili Amount, con tutti gli altri compili Percentage e puoi impostare Rounding Policy (None, Up, Down, To Nearest), Rounding Option (Ends in oppure Multiple of) e Rounding Amount.

Le currency non si gestiscono in Sales ma nel Power Platform admin center, in SettingsBusinessCurrencies: Currency Type System o Custom, Currency Code, Currency Precision fra 0 e 4, Currency Name, Currency Symbol e Currency Conversion, che è il valore della valuta rispetto a un dollaro statunitense. Una valuta già usata da altri record non si elimina, si disattiva soltanto.

La discount list è ancora un altro oggetto: ha Name, Type (Percentage o Amount) e, se a importo fisso, Currency; le righe si creano in RelatedDiscounts con Begin quantity, End quantity e la percentuale o l’importo. Si collega al price list item, non al prodotto.

Che cosa verifica l’esame, e il ponte con l’AI

Le domande su quest’area raramente chiedono “che cos’è”: chiedono quale oggetto usare per ottenere un risultato. Tieni separati i tre piani: family = classificazione ed ereditarietà delle proprietà, bundle = vendita congiunta con required e optional, price list = prezzi per valuta e territorio; la discount list è una quarta cosa ancora. Sono altrettanto verificabili le impostazioni in Product Catalog Settings: Create product in active state, Allow selection of default pricelist, System pricing calculation, Make price list optional, Max number of products in a bundle (default 15), Max number of properties of a product or bundle (default 50) e Discount calculation method, che di default calcola per riga e che puoi portare a Per unit.

Il collegamento con la parte AI del percorso passa dal Sales Close Agent, la cui pagina di configurazione dei prodotti è dichiarata production-ready preview: l’esame verte soprattutto su funzionalità in general availability, quindi trattala come conoscenza di contesto. Quella pagina spiega che l’agente mostra il prezzo in base alla default price list indicata sul record prodotto, recupera il link alla pagina prodotto dal campo ProductURL della tabella Product e il prezzo dal campo Amount della tabella Price List, e che non supporta lo sconto dinamico: pricing complessi come sconti e bundle non sono supportati. La stessa pagina indica un limite di dieci prodotti aggiungibili all’agente e chiede di configurare la value proposition, i campi su cui cercare la knowledge di prodotto e il campo che contiene il nome commerciale. Sono impostazioni del Sales Close Agent: non attribuirle al Sales Qualification Agent, al Sales Opportunity Agent o al Sales Research Agent, che hanno pagine e opzioni proprie.