From c0935e765c93fbf6cd9149810282778ad1d3ce92 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 26 Sep 2025 18:10:57 -0700 Subject: [PATCH 1/4] [Excel] Map existing snippets to ref docs --- snippet-extractor-metadata/excel.xlsx | Bin 29305 -> 29704 bytes snippet-extractor-output/snippets.yaml | 766 +++++++++++++++++++++++++ 2 files changed, 766 insertions(+) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index ab89b7460a3921f4fdf8d7f326b0467ec25cc7ac..b89d6dc406edb13647b2a6e783342a1bc6902e77 100644 GIT binary patch delta 18962 zcmX`SWmp|e(>2OQLU5M^3+^7=-2w!63-0bRxVr}1B)Ge~6GCuz3-0c4cJBB2&Y!ui znVPPyu3A;Sx_jo~FDQH;RGk42o12gwp9F>{0yY)%Sg_yxhF{R~*D-$6z-)asj?Rks zmy?z(Dmwf*5Ni(RMuLn|NXexg6cg<%dc

4By!g$&u!egm^SU{Wzeq_^C?3r;x_1Dc?pu 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 k^fTM|KgrLn)CU*{)&t3112~AfpiO@OOO#?_C;Y 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + + + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.shoppingBag + }, + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category. + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete. + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.branch + }, + } + }; + + // Add nested product category to the card layout. + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier. + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.boxMultiple + }, + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title" + ] + }, + ] + } + } + }; + + // Add nested product supplier to the card layout. + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } +Excel.CellBorder:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Creating the SettableCellProperties objects to use for the range. + // In your add-in, these should be created once, outside the function. + const topHeaderProps: Excel.SettableCellProperties = { + // The style property takes a string matching the name of an Excel style. + // Built-in style names are listed in the `BuiltInStyle` enum. + // Note that a style will overwrite any formatting, + // so do not use the format property with the style property. + style: "Heading1" + }; + + const headerProps: Excel.SettableCellProperties = { + // Any subproperties of format that are not set will not be changed when these cell properties are set. + format: { + fill: { + color: "Blue" + }, + font: { + color: "White", + bold: true + } + } + }; + + const nonApplicableProps: Excel.SettableCellProperties = { + format: { + fill: { + pattern: Excel.FillPattern.gray25 + }, + font: { + color: "Gray", + italic: true + } + } + }; + + const matchupScoreProps: Excel.SettableCellProperties = { + format: { + borders: { + bottom: { + style: Excel.BorderLineStyle.continuous + }, + left: { + style: Excel.BorderLineStyle.continuous + }, + right: { + style: Excel.BorderLineStyle.continuous + }, + top: { + style: Excel.BorderLineStyle.continuous + } + } + } + }; + + const range = sheet.getRange("A1:E5"); + + // You can use empty JSON objects to avoid changing a cell's properties. + range.setCellProperties([ + [topHeaderProps, {}, {}, {}, {}], + [{}, {}, headerProps, headerProps, headerProps], + [{}, headerProps, nonApplicableProps, matchupScoreProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, nonApplicableProps, matchupScoreProps], + [{}, headerProps, matchupScoreProps, matchupScoreProps, nonApplicableProps] + ]); + + sheet.getUsedRange().format.autofitColumns(); + await context.sync(); + }); Excel.CellControl:type: - >- // Link to full sample: @@ -3490,6 +3730,43 @@ Excel.DataPivotHierarchy#name:member: dataHierarchies.items[0].name = "Farm Sales"; dataHierarchies.items[1].name = "Wholesale"; + await context.sync(); + }); +Excel.DataValidationErrorAlert:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Decision"); + const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); + + // When you are developing, it is a good practice to + // clear the dataValidation object with each run of your code. + rankingRange.dataValidation.clear(); + + let greaterThanZeroRule = { + wholeNumber: { + formula1: 0, + operator: Excel.DataValidationOperator.greaterThan + } + }; + rankingRange.dataValidation.rule = greaterThanZeroRule; + + rankingRange.dataValidation.prompt = { + message: "Please enter a positive number.", + showPrompt: true, + title: "Positive numbers only." + }; + + rankingRange.dataValidation.errorAlert = { + message: "Sorry, only positive numbers are allowed", + showAlert: true, + style: "Stop", + title: "Negative Number Entered" + }; + await context.sync(); }); Excel.DataValidation#errorAlert:member: @@ -3835,6 +4112,169 @@ Excel.DynamicFilterCriteria:enum: await context.sync(); }); +Excel.EntityCardLayout:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + + + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.shoppingBag + }, + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category. + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete. + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.branch + }, + } + }; + + // Add nested product category to the card layout. + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier. + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.boxMultiple + }, + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title" + ] + }, + ] + } + } + }; + + // Add nested product supplier to the card layout. + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } Excel.EntityCompactLayoutIcons:enum: - >- // Link to full sample: @@ -3864,6 +4304,332 @@ Excel.EntityCompactLayoutIcons:enum: }); return entities; } +Excel.EntityPropertyType:type: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + + + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.shoppingBag + }, + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category. + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete. + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.branch + }, + } + }; + + // Add nested product category to the card layout. + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier. + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.boxMultiple + }, + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title" + ] + }, + ] + } + } + }; + + // Add nested product supplier to the card layout. + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } +Excel.EntityViewLayouts:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + + + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "Product ID": { + type: Excel.CellValueType.string, + basicValue: productID.toString() || "" + }, + "Product Name": { + type: Excel.CellValueType.string, + basicValue: productName || "" + }, + "Quantity Per Unit": { + type: Excel.CellValueType.string, + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.shoppingBag + }, + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category. + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete. + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.branch + }, + } + }; + + // Add nested product category to the card layout. + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier. + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.boxMultiple + }, + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title" + ] + }, + ] + } + } + }; + + // Add nested product supplier to the card layout. + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } Excel.ErrorCellValue:type: - >- // Link to full sample: From 7bfac25601db1cd84721b7fcb0be9ba9886d06c2 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 29 Sep 2025 11:04:13 -0700 Subject: [PATCH 2/4] Map CardLayoutSection to different snippet --- snippet-extractor-metadata/excel.xlsx | Bin 29704 -> 29732 bytes snippet-extractor-output/snippets.yaml | 121 ++----------------------- 2 files changed, 8 insertions(+), 113 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index b89d6dc406edb13647b2a6e783342a1bc6902e77..d0ed1266dbbf44fd1934f6a999e3bc80b24cc537 100644 GIT binary patch delta 18899 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 B-f{o{ delta 18852 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¨!uUr8Cj@=w6Im{q^mn`u$j9pw`3|fXlG) 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 CEwJ7I diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index f6e4fe5b5..4fd877241 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -448,15 +448,11 @@ Excel.CalculationType:enum: Excel.CardLayoutSection:type: - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml - function makeProductEntity( - productID: number, - productName: string, - product?: any, - category?: any, - supplier?: any) { + function makeProductEntity(productID: number, productName: string, product?: + any) { const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, @@ -478,16 +474,9 @@ Excel.CardLayoutSection:type: type: Excel.CellValueType.formattedNumber, basicValue: product.unitPrice, numberFormat: "$* #,##0.00" - }, - Discontinued: { - type: Excel.CellValueType.boolean, - basicValue: product.discontinued || false } }, layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.shoppingBag - }, card: { title: { property: "Product Name" }, sections: [ @@ -501,111 +490,17 @@ Excel.CardLayoutSection:type: collapsible: true, collapsed: false, properties: ["Quantity Per Unit", "Unit Price"] - }, - { - layout: "List", - title: "Additional information", - collapsed: true, - properties: ["Discontinued"] } ] } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. } }; - // Add image property to the entity and then add it to the card layout. - if (product.productImage) { - entity.properties["Image"] = { - type: Excel.CellValueType.webImage, - address: product.productImage || "" - }; - entity.layouts.card.mainImage = { property: "Image" }; - } - - // Add a nested entity for the product category. - if (category) { - entity.properties["Category"] = { - type: Excel.CellValueType.entity, - text: category.categoryName, - properties: { - "Category ID": { - type: Excel.CellValueType.double, - basicValue: category.categoryID, - propertyMetadata: { - // Exclude the category ID property from the card view and auto complete. - excludeFrom: { - cardView: true, - autoComplete: true - } - } - }, - "Category Name": { - type: Excel.CellValueType.string, - basicValue: category.categoryName || "" - }, - "Description": { - type: Excel.CellValueType.string, - basicValue: category.description || "" - } - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.branch - }, - } - }; - - // Add nested product category to the card layout. - entity.layouts.card.sections[0].properties.push("Category"); - } - - // Add a nested entity for the supplier. - if (supplier) { - entity.properties["Supplier"] = { - type: Excel.CellValueType.entity, - text: supplier.companyName, - properties: { - "Supplier ID": { - type: Excel.CellValueType.double, - basicValue: supplier.supplierID, - }, - "Company Name": { - type: Excel.CellValueType.string, - basicValue: supplier.companyName || "" - }, - "Contact Name": { - type: Excel.CellValueType.string, - basicValue: supplier.contactName || "" - }, - "Contact Title": { - type: Excel.CellValueType.string, - basicValue: supplier.contactTitle || "" - }, - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.boxMultiple - }, - card: { - title: { property: "Company Name" }, - sections: [ - { - layout: "List", - properties: [ - "Supplier ID", - "Company Name", - "Contact Name", - "Contact Title" - ] - }, - ] - } - } - }; - - // Add nested product supplier to the card layout. - entity.layouts.card.sections[2].properties.push("Supplier"); - } return entity; } Excel.CellBorder:interface: From 29246a3541c331a84f1874019a42745fb61660a9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 29 Sep 2025 11:10:56 -0700 Subject: [PATCH 3/4] Map EntityPropertyType and EntityViewLayouts to shorter snippet --- snippet-extractor-metadata/excel.xlsx | Bin 29732 -> 29736 bytes snippet-extractor-output/snippets.yaml | 242 ++----------------------- 2 files changed, 16 insertions(+), 226 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index d0ed1266dbbf44fd1934f6a999e3bc80b24cc537..9ecfa731ee88eb4260ae46854898e2ca7b866318 100644 GIT binary patch delta 12652 zcmY*=byQo;);CtHc!5fAEmok#-Cc^Ncw5|qCdC2;in}`n3Z=MHybwZhg1ZEY6blQf9$KNqKlQP&4fXK1%<*`UkQr zNfxbjzlhJ7#fW$e#`j0z8pyX%EU`3U)QtBxl}p84>BW&e4ttm8H<#JIRZBhVUV0|l z8t10>^Nz3)e6%M*720NIgdWeu-VF zewv7u1-Fs>4K|_%N-dERPi(-KOsch_sx%nTpYGt$=dsjf|I!tK%b0NUKKuvr(Vzmq zK)C^ctl!~BU_j@FnRJ0*uM~(lB~IS*!s_VHV}RB|ixj4~$CWGSt$+m#_Iq zPvpKm9yGJs>$3Ohx9EJzNoYNWA^#`Ft0z3U9|&vJ3=v-qXWq`Qe|b;(d6wB{->Fd;{Z||Nfj;@2B1$LykEgtLgl>BBEnV$>byRU}gG>UX}jC7s~lyUfEl!U-o z9y_nZNiOt_4IR-0U)m*(fHb=2hN|6`5&U4hvDfWWnSK@xZM*58gI&wTU?2hO0&oI5 z>vUwc+XvZQtk>n@Nm0*Q&C6}88^rcgb}D4u8SwpVzXEO=ThqxF;sW1qXiNAW*e-t# ziE>Jy$f1S$->^QclLU%&vplad7@X)uGBSIHkfSs{! zs{BNagV-<2>MA5eB#Sqk;~TLNPvd%6$VCN5(%*mc35^0te8Kq*~&^XSSnb$8;~=z&St&r zp*f@9n$jGz;}h|}^K)-^2kvTpVx6jvA9gj*AZClsCUj_V9vVc#@>tx`6;Ke!mDxcD zhJ|anvZ+^$L>YLz;+W}C&gE`wWo3=E8ihkyT)b3V9piza4Qy`IJ!Ba7gs{y9BillcQFIj`j0 z*akH^w9g=xQEMK`p&l7ruDRyfV&yL z)6O{CKIoOl?Zd@u_M1&wlr8m?EHtG|Io> z`r_9<`>#S7kc1A=qJrBe1VCPnXkKIwU_tqgjC+rlEm~cQ;muW!CfH?HOs}>m6f;*STh7nAZi8 zA9S=~1-bZ$kl!XjzaieTINMPgMBpeNCh9YVa5jbI|0p1nRj%|eQ8Me6*{}Lf)eg3N zS-ZaB6zb^n0Mu!heX+{Lnw9%x&R=14%D6;S=$cdh9Q)``q9>5c9xoEl%*57&D>WYf zsZsI)vzS$clBBvo<}kQ|iD9#+tfL+@mNrKA^h&rT4lbW+H(6&@Xfep3?4)Q`-_V9Z zQ(ccpi~9SWoVK=JXQ@u1uxifND1pwoLJ}jYxfwG#0P2U4{Pp&i#obS~+B!~(!U{p$ z54^+9^?6+6{@Gf&>rEy?=bVWJ6@rh}HqE~_{E+d4f<5!OmXnB;%kZPFjvTr%78l!^ zrm5{D^0B=V#!G)kHBLVb$?`p$A(SsLI3>7k0G%wAhDSFVJ`c$vlWsp`uOfG#|_9frvu+!Tub~<3$mPYDUeoQKt!4uWJFPWAAOb0=BvNomBWo<41BSzdUAwJaa=D6C27ZxyX_Hc=r zZd&L3WE9Kqu~QBMO^Z_zyOj&#tln47sdw!wHZ&=Si~ZJXv-RYBfqdtP-<6rrO73L^ zjsFd*t5;k}q^bv=_V__k3>&KpyWc+#CCz7BJIY>>4lLH^{FqMO`uMB#MF9?otDk{pwDfbnhdK2s%(%`jntb~)E@Qon7=&Su~EYpt9& zW%W~_{OXt}u8mnRNVaFUy$2@G-q)A(Y&%sO{71~w6>%Z4bV7zFx9^#u*<+$yav!AH z(g`tq#R4U1Bc>yaSFLQsxjv$a1;HLTGveXrdYJE}>j<*Xv=q6s9cwT|wrK&hV_zph z?eZcSb0d+Q>7-RYcv(=|JFrsOxGzQr-H#fAtQHb#iDXVXAy(3N&4TLz;yky-0Nnhi zITunmBVr{?gd+_vG5nw?r|R;&mOYhv&bL8t#He&Ym5P|Ffh4J3Nt1rBl1L-GJ)h+u zO2a>U@DO6)d4jG%Zr=m~@7^VzvWQN>lAx`7@+T zXF$K8{#<$0iO5g@W?jLEfyeE9TDlN%6Ha3EdZ32oHpQVk>)bej`edzl3}?>>t7E&( zogM_!E%3DcExiL}kbcrMQhB|mxi-@*X3~#Fp#ed&-JYpw2 zjB)Om+4Vdp5(zQmBI%MX;s5m2>qR)pHlJ9bo(@fwV=tyizP#$!n@DqhB-L!1uwHN<3sY(EmZiT6T_%t?>kx6xjJpZzA1fRW)w|E_T^2FW{QIPyoyesqUg=8^oWRnx68f)QO7e!~d9 z&}YOGRer~g5!MdtV1hn>niu~k^#+hFhSX@6|F+&%gtp=p znjPY!qe&%v*I15BN}m9eHm03w;%};M$QxEE*=#MNe^%4kxh}kV} zsC{~9fGRco;F7^bzA_LJ8fy+So*(T2=+{MS?nqhAzAC;@J;HW5ru0ft4bJXUhXZLs^sX)M|3D4Fp zf}Ey*`tWXJbo{-6K7F@C=6!ZRk+WC0%!&08o!Qv$O2Whof}vTxV^4XFb-PxiC@@im z$_ZarSFft`7h_OxHvwpV=3iZVAJ5NQ@#PLXTewkITw9RP_|DPaHFvm9q9)# z8N}-{B_$mU? zE@|&kG#73TKhR>sloDJ!Wdzll_*A_NM;k_Bcmh<$Bb2iqw-bjZs$TX7vOr%m8G!a$iN~*Dw193Uj9aqm5L$YBiIW3J>2{b< zo;k%wLph5Va46nAt(|nfRhIA!vAy!KE`rQis=X+rhoHT;7nC&g@Zb+CBtDym#cc&w z7BI~Z8Y__jtG;K2ltste9lC#^*Vacg%bUOUFnJtd>nQEZ$6(cCb``1MD;KVHez594~~d^2RITTry<4$f2fP zf1~GQ$C`9)wp)8^>}kNcd_8-}w$%*6!7!CC)^F-F0xD%_`z`S6ju@E~7DxZL}Uqahd|ZOr$d+ zcFqb&TDjm`$pB)JrW+6E8!GpN3%FHTmF03658Djx5F0VH=rDO^PQF=`?Szfa5LngWW%NR3Z#{p= zbUrp2o^;=GAhG zoo!)yEzn`e|T4Eo^Q(|uTc?efiXm((75ncf^2vS z$G61XSrMQR(xsAl50BR2jRd0=U#(`pXUOfnX%niFX3Bq)XToDRtIK#nL*$vKokZ4F zaiLYvn3CYwlJ1=eJb&RkF0v!esrfmyb}==Xh20cZxEh>&W|;HroyFLIT2QUT?T;V5UvD+ zm7qe}*`-wBI%6cCHYJFyK@A$4;cS_qYWhZC-7KUw{?JxaU^4LQ8S6&j9%-5V{HYj%7CMB%jzJ!f{N@Lz^Gh}16o zxKyiQIJ6EE+~E?^Fy?b=XUaHGov-{gr8aq8V1oN}Tj_6C<{Jiwo+YR<>wI|ZicZKC zm=ZKy$T~REh}vU0h+tYYQW@QjNAJ3Ix;YSu81v1aNT9~tCD*KaT?e&Xh3yb)Pw#w5 z9+6II1>t~P;>)#HTLcFkm!-|i%7zjP^=TTCVH}6XlNfO-bC>c_lzqa@fxBS^aNFi* zd5N3^fM-s)JG`sF255DQF!F#|07iPZJ;-1!ID|@M?J9P&`Ecnx&Q-l8aT-ULr&fmw zYu)99$Pl77#S4ZMHNeAI95h*%!A=k_r6Pt`ex+3F*t%~OK53^+_QMbAFymBYm%f*V zgy3a6U4D?t=cYBFU;>PeDlH!3+U@SV`OsAe9B_#3Rmo>eDo7(PiddwwZq?ZGo!7BAn~ianB9vEv z8;X>3H-3Egewr>(jfqs-Cp%N3FWTh{9+T*1>AhGDqjn(H4ezvZbnU;Yb1s*T$UBGv z!~Ct;GD+P(K|kB-di%Ijo0n=v;1SE56&zP!c8V~+Kmx%AMyS&i&Yg&u$9C8O#42Ca zdj8b0ES4Jmnh^fM!Y*W(AJaU)8!PPKVa|-orQC?lF!_0!dMmR4CriFGxci02ksR(L zsBT(e4j1@^HN`C{WhVHzYI3tp$w}VKn;atWwa~x)9LldkKI$Dl(Of6vkOT`P-kv&K zj<^9vHqf{{ozE(}lT)Q#x@L@}WwQLUe6alj`yN2`DXiU+}#pK6*G!&s%7KA)-c zr4%1a{N-4zyK#=>T`#!ZQzUhCxpQp0s)Sxb$pfK#(NrHp7POvZnu>DMub?c6?**HDm zViZNik+pYrjSV>^VY2u-*I0w|t}V;Ackfr?BfAAiAYrA_7cdf&qaJ!q)UZ0|+__VA zbvNg}jw99q|B~yDg#%F_1e*ALc)mW|pMR>a8su~CjjqOH`@{cZBgNqX zvq5B;-Z4ymIAmr2SHYuC38}oPL~;vo#$<>LHR>)odDR~tX7zllU#-n59=K1mU3I#%Z-te%`) zuDk&EO>Ry~iax*5Uo{pxVwBFEj?}gsJ*;{Pcs!14`fMru`g(_)<|1cG7*nTfu0^Cm z`muy?#FJ+cKDk2kD{BhXD+^>JI7a=U_0CQz5oPVvI>5Du9l5{U&yKQWo4yY8ly@)g zC;O=^z{8U-rxt%a3^l!mN;+? zbNeD}1s+w8u10IGoIRG`P#mfWq-sSRo|paf}7R;|k|b3V_U zK1o?rTYy)h)$^y-M&1>Lp9f#bA8{KA=g2*#Z5FKxI{eP;<=C~9DKysn5buD}`*!P~ z*1)19^re^>qCnMTY})7-(r2opP61-gwKh_-DREx+R+B(F7=$)`S0&PJFnTbbw>e=2 zwS1xea>RBe2PM^o?#qC#3h6Z^G^Rw%P~2Cq+vU+A^D$Jb2$O>acv^76ptzXCl$$e> zQm(ZC-%Wc& zAeCVdn+W)Ovct+zB!{I7JJYnh=_tVw{%GLygXu#oG=`oN^}Qti*v`0y0VS)=xNN%p zL^owV(Q-XPO@b+OKE4>3X6si!tJ;b=S8m2=g5c}(1e%ekM=4uH><&mR#Pu`1Vi@#J zYDc`hAZmV5AMdFW*Yg22h#3cByhwLA_P>KYb2;p}tF>Q5ey8 zIDcIozJET%wDs~+nN*(nIm5wN$B&&{Elq))|uEfKt<8=b4&sPb{THHgT|r9|%6 zEV6STbM;^F7IF5cxczaJ9nJF3Q>EW#d_Ccd6~_9J$|>*Zt5p14bc zm^xOeZH{_ZWT?JshEtm!>1v62YzIf>h;-zxGkb4RU0>lw(zTzDpibA;DX5q@S~`1Y z8`fi#urDTz?JO)BE3QWJkPH7^kZCYTLGSc1`6HFIx6aGCB{RUc)89!#KSCK= zRQ_2cr{pF&&NtpIpqWBDk|8#+3GFUxQsY152@RK}=EH?}5x%-_g)%r!bdG`kQtd3( zR0;}&e>gKcXp8b?K7Z)H+`u?XPb~@k@Uz3~#A%;>CprQ~bHnhj!b$2<4);`0gSNapz&LleOQd-Y6GSm0&xp<;-u$td_h;s6`$4T|Qew z72#t(LFXCG91UyM^wtCyCKg~ioa<2}-BI1$ckJhRJIF-M-FN;o0LN8w4tz3jlv5-9 z1;cuF2<*^&h=6q~B{3AbI}54k$0GfW)p@BY^AS0KexYU0v2P=3^4d*Oh^-RFTx<9) zS~%gPUmkh4OxY=o3wFwdBomqBX;&@FK5IndAE(pmd#MG|Fs^xjgPc1?D9}*HGg$-O zfVY1tm z)Ra0o3`d+X9K7BOxpTCy<2`thB#=8I@NIDb-g1`jRdy&&8S_08aA=iiEL#VJN+>U8 zyA4q2Qb>So&(8humP{mpTpE>?n;C25>~Pz;Vf%_}fAS`N2g$%PO=P-F`KzDT*zQPK zX@04Ny%Y%}C@G{;=`I8ocF6wwiDph*FR69I$e9XCBQSLj7#DNL>9(Sc-?=^8I(h_> zjTdREQCaxoE99)%Da|HKQjT{N$Ti}t!Ea z1>FoW#B8qL%V)Pv^yIatucX{_v6=`im-obvZL%&xZ}2V)4riW~ML<57c2S9@?;Tw7 zYrcJK>7|z^r*1GxWz8~z?Rd}c);TW%y?RhZmiS2w-@Ljrrr-sAB;GU-Yw)T3{>tqO zULStkPoze_>m{mA(!*Fx4Yz8v1bCf=Tan8Z>z!@c>m;=~AR@g&F)Cy@QQE-wML2@y zy2GauDnjn#h4oL(cGE4gF1Mr`nNQ(29Tx{k&jtrn=5mpI&Nka4iu?ImOUNpi>u4|X zh(E^Y@m)**;n?PsN2mtjwV>)@^_(z|bU@;zm<*rd%e|RI-@O{QIM#z1U`U=OZ|2BR zwFT?QS=nj^HFw4U9YD_ri3!yID<06PcBHGaopOdd9o8UC&nH<^KMM(bEyrs^#O)3rgV z7<8b}dj!tLYUVbZ5CCM|YGi*W5OjAh(dJez8Hi_^Fon4C{HJSXyT}aJ{a)`a)I_B- z^;j0bzOc60HhCYYT@{8$*I6~D_?P<)oX<-y)%NA{MLIyR2~xHbng93i-y`J{eju#9 z^e*wX-0dnkfMt0~c@r8=Hvwvh3vx%$@&@)fH^s`^XW@pyaU>m`F_j>e}ccg=GxxhZg(xvz)F)<#XB# zy6#E8Pp5RKXnPK~dbbVq3~N-xqe4-60c{6t941qX^Y0^V>WoY5J#YL8I&0P?122S) z@LXXzCd_L+B^pInp4rgUae2VZQgCzZ_ZktIDv@@Hc(ELi=R9rAueXZHd~?vSaXEyXqU6 zbcaIX%jm?b16dCYXg!n|x&$f8n67HGKvJtYf9}QR8C@_Og>$RafU}1t#cv2K|DEYPEOvW|E!hdDa9Ah=`ZqQ zc6~fAey!|pZfpHcea+6-65~VGClX*U;|EsSQ~uZ`{&15fY^0D1X)H}o{kftY?@9#e z!;7AFlsc;H{Xz;yFXX1#=!0m{eL6si84>|%kSlRKb|jkF;Ku6&Bv`jXGZHzB_UWp- zW4>@DEAg3r%4ELwiq{-4I%*|1YRp;^1rvt8j|tG-Lt z-;uGk{DlrGcB&tWk7f=Rhc6-Cq3*}-v25*g&a3=ARBYK>6H&C%ZrZ7kPP@N0NOGeH zkJs7@nl>~1BkEQ&16y;@d7x^;uF8$vPy|M`;u-z7h(b{cp&F9Mv3YTp$XN2PO9CS>K;FL^!#QtGUv zU!kM37OH1@0(=tJFNeZ8&eA#F>uQijbNmvn9KQZe;q2i!HMbYIG3ATDNp+VDwv4R5oqte{W3btxG;!i1QtS1iN86Cc9Sw+5fs~%m_QrBHtSi`j-5-EhyLwr#%>3*Kk-s@7YyhcM)?(#!}Z4=mXhe z_91?$?!Y6qE^?0K2AraN!%2<9W#t=GwSs9ie(h3Gc5&KJFnV%J3~2~U6CTo?-@aOR z2%!XXDk0z48@?u>d$h5u7|-@Am-49i<`>?A>!!o~R<%`|XvtbNcLrvhd=N1Q%`r|9 z15ltuTm_R<1#?t2WrI-j(^79BG(oKK4A)`am;L^))U3v0mK$O268&G+3ADq?zz&V) zPv}=HCrjxd;6Y>L^y2y;19yc0;UpGwz1FIflfn-oy#a~=@D7$x9 zXq`g(;pxtj zqrC*HzSxWT*&FXwOX%Nm11(U+a3*Svg~QEf*a#}DE{l%k8~6nfWQ(OJp)y$D|A111 z=gooXZcaz;?q4_YU-~!N#C|Y)6{OW3u#Zc(S9f)zWaEK+DSG8Ca)#R~y!tfdr!X9^ z?klX7m>6}6;n=c7?c>0#vYG=x@0|v&5Uh(Ha>VM(I;=}j%-yB$h2^j8S_GfbKDsRc zx=@0*{!rviy2KuT(^YnMc>DefAVE$}p|f4Whft7nbC5PqT>Dqu{^@BcPjp92SKzL* z0wESNLoe)$xPDQY%a2U8$`;!5M#NDaArq4|>g2R1u9-dnR+q~;w{;%lj|Oy<$gqiw z#rz!9TILW`#MZB8g|_iyO{om;)fO7qIM=OJ0TLPrV)Vdnq>c347EaQd5oyux%8yRO z2C*fWtkZUg&W%(Ws=oz`MmA<>xx@2SSO z0T+@rg)|p?YF5t0OzEIidq6@jK};qQQEh)eNjubiYW~l9KXS{_lYbd7UdQ?iJwg8p zDIoaG_MFn^2-nKFb^VpP5P3@S5S+USJMMQuJZw&QZ8idW&w+D^+xo9@JKVP;r*ZD>HrU*TS6QC=d5}1HGMJ0d69MRRZRBDvSwZ> z^=4jL%aggMc{iRFclY(Rs4oA;a}QN0iO5&(-i%FENLK{P=+C?U{YKYC7c^4LcbW9M zVqD9F(OJf!=0xB2PkAp|m`Ax?kGBx9e_&>oE(72I<+1K>GoDkN+7p;O^A)K?u~+h? z6JPg#$-`tv<~~7{gP@t6)FRHcuc{M?MHqLGC+VI)1O=V*RG+SXve)eY(dY^-cR&vo zucxD4hms<{@DN3DM@bD^Jie>{d4bI}7x<*|4ktU@R}1!rQOEtqKA^-HEx21-b9>1a z^8Jo=B!cZ%-KlPWS7Xlyq1kRM(&qUPb)e?i`;%XigaRvXwo0TVKm4;-#cdp&rgr4- z4i?B??a0g59_oB9sMp`+4K)pVS7p)_93bZ(>7kiE+-FJQCiOTxk5=iSKfu$cpZeN0 z$uQ`Rb5{!3!_@IoU5LgmQmY~;5W*C_@gFlQjwbNDKCpe2HCO$ah+Qo4}q5o>PYMLXz_#K z%pe-FN9B#fZ^Ylx6a_{*Ck`9~yVL{@{!j&)Zwy-2Jh%j27=Gb_S2hj$#R?xa1v>MDSPE1LBA0 zQ*wE%&4u92w2;ZV=9cwCRW^9@xQk5czRd-TI=tE6@*k6<79-3LXnI7T{r#(8lYf}v zU5OuDR-SEg9yrmF(d)Nj)3g2H1U?#V3}m%j?BIv9E^FA2ZAC~Uv#S26M7zzoyj||{ zp3v(^t>*Trk1mpnqc^Fiw$3W>#?MD}AeT(BXd0Y8cdvMdBSopL zYM>QAVjtDY63R>mUP?pV!wFCb-q$9amFit9|K~32L)~{VcJ4>F_pD&8x=EXtn9y!M z%Fq?fTT=Cvrb=v_OlKAcNFq!j8s0Q-{=UUq(}d>Mx0QHPCET_BB0E6xqId_%Ft~~r z&BK|(NYVQeqnAtPyYmJb#meB$@jR{&*-gTOd5`MLSg}^kr20=;rUv zH(Eh%{W>m^m)eg?ydSO}E&k!4qrM*^<^yJEZ9ncrBpNjx53W!$9K@M-jz3Xq%P9;F z#P@qWKkR0>tV9~O%Q}#ht|2eiZPliwB#<%QzgO7r?$)U~FSxO@294-viQf9~+9K&W zD?jTxCW>g=-Qqs>_Gz80y(jK}zgK8+)y3>hA_nmQ{{Izib4-k9=u64}`&}j(fD|#6 zlCnTDm=j5hATdnIq^EAOSlgya52g%BK5m>?ROU(C<}67A=*KS>NjVm*NdR|F%={!J zcSFpQq#SpBOu?jMcUi1L>!cQIK+;F|KDKfCwP*thZLrIQj3Qq QCRx&@2OBQ0>puuevq}vnOBcINTG)=@-;<*0vh(Io~{Nk!Xn+*lm8B z)wuKCnIrO{<@ymvO1M3kV{7xQ8y-LDFilmSK%AXpxAYZ}ceqSqpd+=Uak+&dJE=LY zvnz~j<+C_W^TMn73lRINmpB%_E(W(&>Sa(bCU}?`WW~X@rk)GhhkYszd}3`BoiS#! zG}Ai4NY)1}3<>&9&m$j-dDmg4;^TaYt1tgvv`bWDP%yaE?Ip;U&vCl0@;NI5*J80TNFtjrq! zK3tz9Ap7TwkZyq5A5)&C<?RF`+|N6KF?tt1Q+N&E1d9job^52`qP4CKfC1M++M{n(O}xs^Na%$#NBUAN0cYEzdg=YT{Y-NL7W{xBaxfm>sPb>(H!O5`kCroWJY@2; zg~xOpYpej*j&)!G^it(LM^C+@A>Wr@GtqzJ-03ZjpV=@aO)8Te1-=k2fJLitd?KoO zGSTar_8~-L^CLNYFd%uNkJ0E+$ITi+j8sdSz#dtxx}An!n1Cqx{kB%>w4E|QlG;^5 z2qwV?nt+E?d>9x3iKN8ZSQ6e#iB`mFcs`CL*g~k{#9HEEx+XjOccjEmu;?IcONmKq zS=#=-+MzB|l8MPA>;PY+%9qtR_lT;$`APk%uP+vro;JRMUSd}a|Atsg8E)M3Gqb8} zX~q!j%8V9g<_%f8U-|{TZGAhlqxB9l_3hJ$oB0=Fj*rsN;_Zf~{2wWSgx=Q_eTdg5 zEenC5_9a80aVO1JpD8(qeu=w0^pJ4GIt+xIpaY!}tB$z9| zimtBc&&^1v@y5kJ{~Ttiar()3O@(t%qPvcE&6gr}jN*+eA6qOZD=xsPGfm{ahl4n| zeeK_9FM7Vlev-I~u~enA!hJ`Y7*9$~^O7=(ho)&-z;>r}O=?crrJ+N=X1_YIm6Q%x zzPq}RxxbmYjRS6xam#lnz};cT?dCGz&~dY0b$>Ph+z8#xbhOgdH;TabEu!l5 zzEO^NpO5BCd@+HBb>!FI{uq>X03@z51Yn#{gptA#Rj90mdDIfG-vp2mp%k|ij%#vv zg@+Mu&hjkFjI4SK_Aar#W^1-yB=Uz$H{SS(6IJk_(f`VdIp0hS>)nkUZhFuS2m9qH zF-0>wBb@?*mkMOvBwKRqv|q$+wLBQmP$hjD3m%`zzvyR2?h{x^0xdasr+>Mzd3KgL zKc4edGb?u7IgG!U!Hh@lh2oFX?h}0UW1~4!jO0*UB2?_JC1R7cuzu5M@|&`{m{VSm z_4t2{1I<|rHUDeenq6mJ4dVqgndyx83u;PZBWPdQn#imMc|oDCzl*{~7EWAR2NS2t?2~_Zo;){`axq?}wGT(2?%nqE9haG?P5PtDY*ZZ{vh!hJM zpZg0S`~I(!sD+Y*RIVMLEB_7RVm}~ADsfbjo6uUibdIL z-2|D4;)Rb+b}djV@~^oLZ^sx9{~DP9{Nwt`9Wn3%ea4qplOR!@@!U$@xugTB*F zEm7=mvAjTLO_bP2T2-)OI4K_}|Bjbq>lyh)6R4p-ZazVJvZ`l1+Z{_7WKS)3RGjo zdaqLyh-$B(Jth z|9{n31RVa^vg8haeiR0Gm)|VM55GKm!;P`GjdAYDZp`TzlK5r6JTm+eIEp42B{w}} znR|f~eEXBbeOiLL+P$(5b0x>e*;6(`r{|1h)!J49T52iXy2Ipr=XJVFU!i^oLirW< zb2#sa8y>wZ_5G71X}LNbbG=`8lVT64qnmM=(N8^qAqksYOLE;o{fBuWkyX8g42g@D9)>> zC?1G22dSPKki?)-B}%C`#0Ze8n~R-j_i;v;r`8~|GQbwxZ(d8c`uPAn0aG`lnP}{C zGe?zAg$n-LVWIBLH7-h!Ynz#14Wz=Q8})0BIi&Wf;RIPq{RfPP-|8lcTsaROiCYgn z9!NMcC?#;4b5b(?89}Q+`OS_1m3#6du#;RP>Q^S~eSS)LYIClr`AjsHdnd&Ne{%zR zr-CH)w^$7+3joQ~tjEnXY{5*!5_yY)SbwSSYP^+T5=i*LCOOmiKg|BCR(3$yLg>YfEZSivhG=%{b4AfU{*Eky!c|kD4w}Yn zFDmyIxvnW zJ6WBw#0pTY+=|@_j)hAvewJ0tb{k4w|Br~8iHJFky@T~?{87ktaNcFQHs2(>dxAr= zeo|k6Z{M$OkOn(6t#En*wYr@HON9Qt9f+=Jto)3#;%z^~ZfQWn*VR10;!Htgts74^ zQ~w@gfkaaYOCR*K(;dK&mu?y_sc!!k?)Y4bPf5zcT#DOLSyg zW`YkQNnB|ZEL!c=K)|&scCU$&EP5e5F_``IuqQxF0OR5rGa{@bkR5vPUlGsV9t&N0 zfsU-%BA-=lh(0-~n-dbFad+9{k+W;mov0U9z)tHu>jZsfw7RcJ8FnW+DPfC!YmZy8 zhsdXc)aGpg%^yWe+;eCLX9%JpQDy7O@w=90$mUt3vd_azz8T3Ey{pLO`WIg`00|m- z!NfnCgY4xEP}IIarU3WxstYeOhELlk0BbLReXWPQ7u(GCKF75Zu7KOFCx~A1DH|FR zQMQUBZn3X;3^JL8EY5;Yw^|MUiRAFU6=5}si3dwDb_FFPRgzRp-OqycSpi z#lZ7)J}qg9!^_1IkI~XmKBPAL#|%hl-z~1NHA{TKM*V(28PPf9y4{w`f}WYU;fMu# zo5BCAmbb6UvC4^+a5EHRtt8u8g@e5kG~tvH?A6C)IT#O=%71UOKNb|j;M1noL$>Qv z2fs*3A~TF5B}ixg5ohuklT)qzB03nI`}zyQm)FPISpS$k!rc+pm#rm=-!I4oXT9Jb zB=d2`X9OK7bW(T+fBKb^18cGUvm!}C7 zB%G%-v^{|4v-|rC@;Kq&PLwiPq|MRM_WVxta;9y$t`wEe4PM-l@KKFhJL#6 zvS(G??sWx!BKG+UrPwE66`yVSo)VqlE8X_+t-c2K`iw_^JgJDSq?byP zbt(0JEMPME#)BEi+yz-~Vrk#GPCV&YQHs=iDI6$|$GDE(3^L<4m(HS-~TDc!oXk>p9n z8d=Xg#Vx@SyT-6+IO#e+>;-{Lc2t=Ii&0LUmXlzb(GH3G%TRrokzkh;q&U7VMcvVQ z(@t%{tjxYM&s=_|S8Pn+PH2Apdm2#kcXWyZ)uR7V64=}1er>8C^PMY_q)??y@)=Q) z@FE)#mRp|WmXre_ILH+5-QCNnBg+kA*?C5!C!2w%0=i^vJCuR6F^Rz|bIc<(=jj1ObQkl?e5LtX(tEIP%W zjYssJAt-x5jP!)}U~(TyQ8-jr9U@f?t90&NG*$USD*oHnSANjaIz3?<|MIrU6=5b; zdi~R+a5GILq`u*c`;)D4U*R!Ll_AWpaL1gMf~)T_a^JOydjpwg-36?hc)92e8{lCD zD}L1PUdjuz`Np}ou2w!1Xio=BsN_qNs{Wu1h1U*taFMcvtaqN9STQoS@{_{6>_lO1 zc@HgB-|ZO9`(`@dl-QY&_MJUYL9XYNYUT}LmYg*W)YfMcRnHZZY7I&js}ZkSMt_?q zX@}CAG{9>i$jQ$wWIoq76Mi>pSY-xUo9`<+(lVo;%M2Y}EcRd4fM$U1WyaS&YR=tH z^`IQB?R{~!%WwvpK}c?TEd|{xTt)4|?c>%cu8kA78?jTYTzesZMvcl;g#4)SIVNdj z?yH^>Mdg;uaCi0Md|BcCRAOJ*LB~kGU1Xs0fCAO)tj8mXne-|6ew))G^?+-0;>UHEy9eMaChmTjvRWy<_T@bTs3zSNYwV$$p30Cb7V!7{ib0MHQ z*vZ4YIzz29jl$qX8v|v3O7JoFr_vBT3gIVz9{jTCta5zq<<`5XVjszTHIX9s!!Z>B z(FoQ={OmrO&o=-pd){p^OG$sWMUeW;=p6-9t&R97e)*VskcOipDvZRNJ=%#;l`}=@ zK>P9Xb0UwkxJwe@i*{Jx_|Rr;T>=79(b=P(09hmPQg%h*tZaDWGV%EIq+NHgN>$R- z!;c1~?Bc?s*~F-?(Qd6e`pgfTHJB5bk8+A4?b0*1OD}<214qQY*bVbOM`t2i<#%Id zibFNE0O8Be&t>QPabCIC<2O^rwO0*(d|Y#JX?b&*wm{a z>?Gy=&5%z9j7%>joY>790u(Zfw1<(`Kb{LRuODNN!3u&Y z3-(qWl-2-i+fcn`)oP;=t~Z@GWG7Sxf7)iyTAwPyZRqt)~& zYW!SRr=Tz~{I#%mLH)6yo@BE`QlID>f}WYi^JL)FB~jMmdHP-2ayGAsRu00+d5en^2vNy*ukWKxe!7(LK>fvMs=42P+*-F5}%Jw^-g zTQK*wal8;e@O={N4I_lQS)xNCw#dy*Pk5dKB1Wd6gNot6G{wXuxf2-@>wjr!)L{Ank zUlMN67Aa#PK(Aec;lfDza&0j%UmfNJsAu^We>rNAGOT0a|8?A#AZI@>`ksPxkgYvC zfueN`^@#@|Y2+YMR>L(L(EtY?BO`f!Xxw`H*D)vB7?tYwpj!OS|E}pjqYad96E_dR zvR6zN%6H8cShK2$B=Sq%w~b0jIJ2Mkjic~+n=lcSO=zltC%rx}X^eE(ySzOE-dM@a z1ry~lYFo%ig(BK(uQ*r;MNMdn&g?=qIbfKNw8tiuuO%|@&;1#@zpy}?J~hCJxzItu zw!?iRW2TykgB2vOCH(4Ls$ObKW&)|hJY76RN1Dl5_N9J5-r>Vovka!%hHPrm=PhI1 zmJ1JuJ0*X|GgM{5FOt1`t3X@;BcQnpQ$NphLCB~}vW0t42Yv)IRQ1nB+ezs?V|8Jq z)mZ~^^;#_WI0-Gq%il}|KtCM*7R0!{JDT^67hWOf$`}^hlzN2BqFS5$RpP*A%u?UP zf~D~*G6{a6F^f-{^2}k{qkhDE(yu+i#9{u=XNr#IDuh~VHq}JX696B`g6tOR+JD6o z*%Ufr^2&E5ZZw(1Ww>D0;SDNHvd}C^?j7tOuLH#uujzjrPL4ZDg*vKXR`%BNXbkPu zxh!Z!shC!j9?=Lzt(FMyE^Ev?w_|I~jCYeQv0H4(?Nl-0^8u%MQ4u8!MbIpWMWK&< z$ZzHH@hCx-@bzeOPcV=l>95mUJK2;l<$zAH6op?#iHly1|w|m zr|uq$eU;8OcOH-OSzK74nlTGmiB0O~to@<=RsoGXd-y9=+33c02j}IBq!s0I^%r{V zKdX@n5bzn54pkgeAQmY7J%B zNIfVWe(ivEGML${-StzWUL5OL*BTK9ocr+bRWxnod8K|tf;m$aEAuDll;oMT5ncaO z3`NP=*YVnV{$D$p?wkj443X&YoZ(Tjt3a3d!Z6^M#fwk@D`@TK* zO$yM-eo@6ih{^zu)`cJ=1eh{?MWHojo3=Uo90M?wA-Oa3VwCIQlN-INbu?NF+s`(h zI{xb0P^oD!>2~-%4j#dcj7-uaD?0JaM#4y+jglIysgd_;AM2yh+LJ4jWUHZ(nJRk+ zoU*`P5dPp0u#r~3D@D`m{PNI9)vu;Xli$Ors8pZu&}To)0Z$&+J>i-8?uw@W>`drn zpF&&l%PQcs@+-Ao+ z-o1&nlMY9A_7Gsh&~^{os;~|Kbwa$K%$TnwO-vG$>dQE;z%g;EPo?MIYgzrqEU7me ze1cJ(GJMNMaYEQIG{Dx_>pr2*g7Ne6Ke6J*w^(|of>y0#wsDB6_C*iZ3ltsbJNQfT7KSw z#d13hj>>`l-p{^@(}ciBB*$CncdD(+>1!7QE3qS#aS5+?PqwEd@O!2ssoulE)5~_( ztL{oIRi(8u>xVzMqhk{s&>ujIt`ehA9Z${UbU7Jx&04amr>c#{uIkyXguN@#rC-DZ zb+&ia!Fx`mhfS^a_qBDd!|8pVH6x~X%VZ?>)>A# zR<6KvuUC6G88Zbj0A#f!w>bOl(%TX^cR^!Q#o3=wN4MDTa!XFCQD4iao4{OI1mg*} zJJr<|kb`RiV3n51|AHROhflF7OykfJFjiQxeKD}!A998PcJF%^SJHR)oR#(FxARZD zbeYL=^`ZA?e^S3ukczT$y%BcLrq7=USO6kDeEd+gv?ndUfCB5`{&X)oin-SJ{`VLb zr?(7NLgf50M2&2CiHl4!g#?bT%UySL?Mrr=a$|bm0hS{&90vxBoBa1OYBx!7Memji zEHu_|w930$)r<7UsHY&KM=NxzPYp7-E{SD=8q&SPoz!MJgN4?jV`4U=^O!abVKEz4 zl`$tLyhvv&p-f{UE8oPyuZLxu(Ue~eI6GB*e^PTQ8TX5Ctd^T?&m=6(qPoDR9%rU7 zvh}?;fSvEp&#)R+M$-^GgZFU`KaIC$G=n09tFoZhI^$Jpei0+>4wuNp-WgCRm;CFF z*>A%0L&PmNtkME!tj==i)%l;)9~7jGxjHlSr6cG}f%vTxDl=a@ zU#BwUbbfitO)6hyDDna1)0X0qJu+ab-MG689RBjQd642c*&lk20X~IVe?Bn5olz92 zHmYE_{gf@l_pQ4=Ki!g-vAn7it8!c>E%>1+qbxw4aL}atz95296O7aL57|y3-_vPt_lJpu$g`pMT z{14p%1?d$vo}Ph0giKmo6PuQ%G@e02x8PiSI+AYX~#4^sA zeFyc{GL)$#Cp9NOonN0E^-En~fC2aVtD;M`XYWOP=#xf7JYst<8`iV@ofkZ!@G{Cr zCs=*5Ctw$>&u=}Y*9|6@pe1?mf&-AGC85{4RPpa1--RR17+4A*T|ISU}R3I4d zdA#m%Q#UzS*CvAjax%7K8^@0Lo)5RL+8quI#xsR=%`rtzm>TTb_KVi90zFDHyX^_s zbE${mPAv78syo9%d59&2)HHt5(q4hWg5HV#c(k2Q>gD@r`++NDb9%nBo`+KySK5eU zX5oa(>+NsikNhCKOUu?wtxVshyjHLDFOz6;H@H`-^U0 zssDD4@gZFSaYDJ%#Gc#_iB{#P;v}rqb%1a^o zFJF5Rz#@BU|F+z}a}f`OBchU&q5EHrzT>))hX)d*0@9}BWV9$sf-H!>244%pZdwXo zlI^33X8Vy%?|?P^CKWLtq9+KsSi}-;>~aK2vJt6Gn$b`r@A9Z`Ze4|0pP6ddi87`y zV)-f($}1LZ2lfw0*&~|4i-AWzEn+}3Wlh0Pf*994a2*AN?c)iZU2hOOZtF=0@Geow zI?66R+TqLfE%s%9uunjzecJ}sp|LZ{5}oe*`nFvv5+)C-VRLAfnL{mZmS|zs$YCdj zT8!kGA4z&X7{bVqBI zjM;fF#3wUw;C;`(V=PuC9On=eknyURhT62lLj-{UzkhrDHkPAp)@8-~*(#bt{XtS* zSVvuaEOg}n$A1>(JgHl>_GaSudhPv>4ikm1`6VN*TKEWJqXw*JeyGfAa^zO$Bo9^+ z+hRuH%SQbdm4|!1 zRy8jbT|<9)Prf$QRt&V-&}iKqy3>S>SZGRe5cN^E)^^rb81a9(L^Jer9+HsXA3YxE zCf}9@a~>##u5Gs%sqM$u1UBJNnksd(*dT73)fTGK=YkR(AL;;QrzDk!GEyejJ8D8? zO!@BdL)7wQaeg}{gm%6gDXJA7qGQwTs@pu`s;kO6vV{A)v<5PDx9qi|H)$IA(_$HR zP9KsiHm4!b7-kak1R8zGp@y>rheI@jQ3UBOu12!dz>z&lvO1B`5<0(v&b2ht7Z0nP z7$=uVTAk!jnt(e~&_z^)Zd+YhRG^E9$xLCJYsj8*b!WKnywx}Yh3xyz-+n?S+mas|(Yq$P> zpa**>8ID)}weL@75jqF_B5j*%kD^j5W#|w?ZP;T$v^AjVFVI%aQ_s>;8)rU)__4 zbYR7pNpST@FOTUPwCj^C972=QnZV?}{0BrC*O;57f0!gmcL?3j57f;#Y#Eb=8yQ&pGNa>B&(l6X4^;tO`jO|WedEMw-3~hHI-l3ue}h&l_%InF zumXGhjWt{$E0}6MdczZsYX!u$B36=M`jxAyh3<*YK*N%(rvG8D#UfsMl)r#hSM9Yz zoAuRofZv(c$aK&e!aqiQ3JW-NHPSEzE^EmRu4`w0idMZ~UOL>27q09Wn@%?U3cacM zaGqxXM;ZnBi679Yy1a!R9k%UE?U~>mbWjT+-Ek~iMr}Xuo1aV=ixbTm-h2BU?VK$m z3DE2**!=Dt zL34B!!tG6NXZQz7bcm6CdZT^y+0XFH!(wYerea`n1>3Od2ZcAuJVhoG>E{fz7hR?_ za`w9Wh$>=PG&!EL!i(Okt0*w~FOvj3H*5YuP+4yzAf3Su(W(;LJ+$T8N;q^|M%@t} zJkN>5b1u96b6X~}x&{A)MH5lVeI#eANitRNKm zMNgdXv@Ya&p}l$xg09=$xQkC>PWH;A?E4`YyL6)rkH_{I?@iapjncQT?Nl^S2KEPDw}X_%H35$s=ZCc|}I@xbwY zmmlYZh--$LV(ZEp!jD@HjmUp^e&zjC|0UY8JEX`(k%m)n=d0Kt2dBj84?U-piQ0z6 zkI1D@S-b?vaD)G7AlH-?9?BUH6Jc?hXYv7Tg0$S_8}hA%ZJU^U6=}lRN84fj1BX0_ z1&Xj`COZiIY(n>J<6rL;^oe=s%2Ve}%CL7EEOPA&`nu}xIoym7X)6swAqZPnx}Ipo zhHjxbs++l|UKws+`&u7A{B;wfJT z>)-Fh(keE9Sp+1zTZs2>)bdMTY#Uz(a(zQ~1~!~~$bjADjiLoc5|4r@5w$<66Xso( z8yC^1Ho3*(-D8Drp(v?-FrwBY2iT@E*(%bU3vaLE>rwkNI5@V0+jaJ1uTk3N9MjHL zb-W1T95T7FL;AorEU0GHt~07}Q&AGSkiAibqm^DxRBnx>rP_>=28!@Z3*g&LL1ZP~MLa&9HAo!_EC&5{n zG>?@3>+{W4=by6Ezkuj#Kh-6ZbY2PmbPO7z`N+((&|0%XPV z#ki|T1wNk`0yu{Y@S!VJ)U4!Okx9W+h+5;41S0exD-?06t1-%E;C=}kB=WOl=4BtA zh^{&0(E{>a(%BE<1&bfKFI=BoxxYfR240?wh#I&jWP4XH8<;bW%_B!>B!+f5#qmY# z02RqJj+c`Ofx6#QT3ygZwI36!nvAEEufj&ztoGzEy|5F+ctK@}d}2?4Mk8EgMbnSj zUJQe|vpy?_mJDqT+(v}e$gUnHIyPyer&#aM`$NQ&dE!CaeZtvaU8DVUJ^`BZ2RUI` zIIi4_(u+(KR;K^0W@>y%fj>ou{25Q>0m?ri>S<*i<0qSzS*f9fr|8H-P{a+g`Q)ZZ z3_Q_#`wX>6^9eu;NxoU9&Wn6#ik3*n>&2To=!}Re{h`-Y%WFAA_uVZ97A2y~aQbd7 z4z=MVh90VcF-hdx;%QQqbHODt-{N5XaaE#gqC^XKOhErI2 zUtj$4E;Fk^^|x&v!48OL1Nh5U@M3tKK0l)9dyLWNq+O~RYi{t-JsNX2m7=_qdVLFn zX5`~;S&Y*UC#+83*>N;r)6GNwY zBX7MsH0MOtk*h$|5POW>>t`nMTyWjAQRQCBoUy<=iD-*N||Nb4J-AxD7 zn@H}?%lQ9(eQgfHpu_mT&qbn>?LNp<$vU3mUM~UZ@EFaiC^Eo!hG^3QTq)|BC!WIW|mE2 xhYe$5y*nA>e{cq2U^rr8V37acu`#+50S{@AN@BZ*6zD- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml - function makeProductEntity( - productID: number, - productName: string, - product?: any, - category?: any, - supplier?: any) { + function makeProductEntity(productID: number, productName: string, product?: + any) { const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, @@ -4232,16 +4228,9 @@ Excel.EntityPropertyType:type: type: Excel.CellValueType.formattedNumber, basicValue: product.unitPrice, numberFormat: "$* #,##0.00" - }, - Discontinued: { - type: Excel.CellValueType.boolean, - basicValue: product.discontinued || false } }, layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.shoppingBag - }, card: { title: { property: "Product Name" }, sections: [ @@ -4255,125 +4244,27 @@ Excel.EntityPropertyType:type: collapsible: true, collapsed: false, properties: ["Quantity Per Unit", "Unit Price"] - }, - { - layout: "List", - title: "Additional information", - collapsed: true, - properties: ["Discontinued"] } ] } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. } }; - // Add image property to the entity and then add it to the card layout. - if (product.productImage) { - entity.properties["Image"] = { - type: Excel.CellValueType.webImage, - address: product.productImage || "" - }; - entity.layouts.card.mainImage = { property: "Image" }; - } - - // Add a nested entity for the product category. - if (category) { - entity.properties["Category"] = { - type: Excel.CellValueType.entity, - text: category.categoryName, - properties: { - "Category ID": { - type: Excel.CellValueType.double, - basicValue: category.categoryID, - propertyMetadata: { - // Exclude the category ID property from the card view and auto complete. - excludeFrom: { - cardView: true, - autoComplete: true - } - } - }, - "Category Name": { - type: Excel.CellValueType.string, - basicValue: category.categoryName || "" - }, - "Description": { - type: Excel.CellValueType.string, - basicValue: category.description || "" - } - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.branch - }, - } - }; - - // Add nested product category to the card layout. - entity.layouts.card.sections[0].properties.push("Category"); - } - - // Add a nested entity for the supplier. - if (supplier) { - entity.properties["Supplier"] = { - type: Excel.CellValueType.entity, - text: supplier.companyName, - properties: { - "Supplier ID": { - type: Excel.CellValueType.double, - basicValue: supplier.supplierID, - }, - "Company Name": { - type: Excel.CellValueType.string, - basicValue: supplier.companyName || "" - }, - "Contact Name": { - type: Excel.CellValueType.string, - basicValue: supplier.contactName || "" - }, - "Contact Title": { - type: Excel.CellValueType.string, - basicValue: supplier.contactTitle || "" - }, - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.boxMultiple - }, - card: { - title: { property: "Company Name" }, - sections: [ - { - layout: "List", - properties: [ - "Supplier ID", - "Company Name", - "Contact Name", - "Contact Title" - ] - }, - ] - } - } - }; - - // Add nested product supplier to the card layout. - entity.layouts.card.sections[2].properties.push("Supplier"); - } return entity; } Excel.EntityViewLayouts:interface: - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml - function makeProductEntity( - productID: number, - productName: string, - product?: any, - category?: any, - supplier?: any) { + function makeProductEntity(productID: number, productName: string, product?: + any) { const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, @@ -4395,16 +4286,9 @@ Excel.EntityViewLayouts:interface: type: Excel.CellValueType.formattedNumber, basicValue: product.unitPrice, numberFormat: "$* #,##0.00" - }, - Discontinued: { - type: Excel.CellValueType.boolean, - basicValue: product.discontinued || false } }, layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.shoppingBag - }, card: { title: { property: "Product Name" }, sections: [ @@ -4418,111 +4302,17 @@ Excel.EntityViewLayouts:interface: collapsible: true, collapsed: false, properties: ["Quantity Per Unit", "Unit Price"] - }, - { - layout: "List", - title: "Additional information", - collapsed: true, - properties: ["Discontinued"] } ] } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. } }; - // Add image property to the entity and then add it to the card layout. - if (product.productImage) { - entity.properties["Image"] = { - type: Excel.CellValueType.webImage, - address: product.productImage || "" - }; - entity.layouts.card.mainImage = { property: "Image" }; - } - - // Add a nested entity for the product category. - if (category) { - entity.properties["Category"] = { - type: Excel.CellValueType.entity, - text: category.categoryName, - properties: { - "Category ID": { - type: Excel.CellValueType.double, - basicValue: category.categoryID, - propertyMetadata: { - // Exclude the category ID property from the card view and auto complete. - excludeFrom: { - cardView: true, - autoComplete: true - } - } - }, - "Category Name": { - type: Excel.CellValueType.string, - basicValue: category.categoryName || "" - }, - "Description": { - type: Excel.CellValueType.string, - basicValue: category.description || "" - } - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.branch - }, - } - }; - - // Add nested product category to the card layout. - entity.layouts.card.sections[0].properties.push("Category"); - } - - // Add a nested entity for the supplier. - if (supplier) { - entity.properties["Supplier"] = { - type: Excel.CellValueType.entity, - text: supplier.companyName, - properties: { - "Supplier ID": { - type: Excel.CellValueType.double, - basicValue: supplier.supplierID, - }, - "Company Name": { - type: Excel.CellValueType.string, - basicValue: supplier.companyName || "" - }, - "Contact Name": { - type: Excel.CellValueType.string, - basicValue: supplier.contactName || "" - }, - "Contact Title": { - type: Excel.CellValueType.string, - basicValue: supplier.contactTitle || "" - }, - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.boxMultiple - }, - card: { - title: { property: "Company Name" }, - sections: [ - { - layout: "List", - properties: [ - "Supplier ID", - "Company Name", - "Contact Name", - "Contact Title" - ] - }, - ] - } - } - }; - - // Add nested product supplier to the card layout. - entity.layouts.card.sections[2].properties.push("Supplier"); - } return entity; } Excel.ErrorCellValue:type: From e15d5279e138505f9af41fe2b6f1d71c598be648 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 1 Oct 2025 17:24:10 -0700 Subject: [PATCH 4/4] Add explicit types as comments --- .../data-types-entity-attribution.yaml | 8 +- snippet-extractor-metadata/excel.xlsx | Bin 29736 -> 29716 bytes snippet-extractor-output/snippets.yaml | 153 +++--------------- 3 files changed, 28 insertions(+), 133 deletions(-) diff --git a/samples/excel/20-data-types/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml index 93ceb5e26..984bb7ab7 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -50,7 +50,7 @@ script: const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, - properties: { + properties: { /* Excel.EntityPropertyType */ "Product ID": { type: Excel.CellValueType.string, basicValue: productID.toString() || "" @@ -70,10 +70,10 @@ script: numberFormat: "$* #,##0.00" } }, - layouts: { - card: { + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ title: { property: "Product Name" }, - sections: [ + sections: [ /* Excel.CardLayoutSection */ { layout: "List", properties: ["Product ID"] diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 9ecfa731ee88eb4260ae46854898e2ca7b866318..60920aee9bfe58d34f918f9d4850ad3d39f0759d 100644 GIT binary patch delta 16740 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml - function makeProductEntity( - productID: number, - productName: string, - product?: any, - category?: any, - supplier?: any) { + function makeProductEntity(productID: number, productName: string, product?: + any) { const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, - properties: { + properties: { /* Excel.EntityPropertyType */ "Product ID": { type: Excel.CellValueType.string, basicValue: productID.toString() || "" @@ -4040,19 +4036,12 @@ Excel.EntityCardLayout:interface: type: Excel.CellValueType.formattedNumber, basicValue: product.unitPrice, numberFormat: "$* #,##0.00" - }, - Discontinued: { - type: Excel.CellValueType.boolean, - basicValue: product.discontinued || false } }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.shoppingBag - }, - card: { + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ title: { property: "Product Name" }, - sections: [ + sections: [ /* Excel.CardLayoutSection */ { layout: "List", properties: ["Product ID"] @@ -4063,111 +4052,17 @@ Excel.EntityCardLayout:interface: collapsible: true, collapsed: false, properties: ["Quantity Per Unit", "Unit Price"] - }, - { - layout: "List", - title: "Additional information", - collapsed: true, - properties: ["Discontinued"] } ] } + }, + provider: { + description: product.providerName, // Name of the data provider. Displays as a tooltip when hovering over the logo. Also displays as a fallback if the source address for the image is broken. + logoSourceAddress: product.sourceAddress, // Source URL of the logo to display. + logoTargetAddress: product.targetAddress // Destination URL that the logo navigates to when clicked. } }; - // Add image property to the entity and then add it to the card layout. - if (product.productImage) { - entity.properties["Image"] = { - type: Excel.CellValueType.webImage, - address: product.productImage || "" - }; - entity.layouts.card.mainImage = { property: "Image" }; - } - - // Add a nested entity for the product category. - if (category) { - entity.properties["Category"] = { - type: Excel.CellValueType.entity, - text: category.categoryName, - properties: { - "Category ID": { - type: Excel.CellValueType.double, - basicValue: category.categoryID, - propertyMetadata: { - // Exclude the category ID property from the card view and auto complete. - excludeFrom: { - cardView: true, - autoComplete: true - } - } - }, - "Category Name": { - type: Excel.CellValueType.string, - basicValue: category.categoryName || "" - }, - "Description": { - type: Excel.CellValueType.string, - basicValue: category.description || "" - } - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.branch - }, - } - }; - - // Add nested product category to the card layout. - entity.layouts.card.sections[0].properties.push("Category"); - } - - // Add a nested entity for the supplier. - if (supplier) { - entity.properties["Supplier"] = { - type: Excel.CellValueType.entity, - text: supplier.companyName, - properties: { - "Supplier ID": { - type: Excel.CellValueType.double, - basicValue: supplier.supplierID, - }, - "Company Name": { - type: Excel.CellValueType.string, - basicValue: supplier.companyName || "" - }, - "Contact Name": { - type: Excel.CellValueType.string, - basicValue: supplier.contactName || "" - }, - "Contact Title": { - type: Excel.CellValueType.string, - basicValue: supplier.contactTitle || "" - }, - }, - layouts: { - compact: { - icon: Excel.EntityCompactLayoutIcons.boxMultiple - }, - card: { - title: { property: "Company Name" }, - sections: [ - { - layout: "List", - properties: [ - "Supplier ID", - "Company Name", - "Contact Name", - "Contact Title" - ] - }, - ] - } - } - }; - - // Add nested product supplier to the card layout. - entity.layouts.card.sections[2].properties.push("Supplier"); - } return entity; } Excel.EntityCompactLayoutIcons:enum: @@ -4210,7 +4105,7 @@ Excel.EntityPropertyType:type: const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, - properties: { + properties: { /* Excel.EntityPropertyType */ "Product ID": { type: Excel.CellValueType.string, basicValue: productID.toString() || "" @@ -4230,10 +4125,10 @@ Excel.EntityPropertyType:type: numberFormat: "$* #,##0.00" } }, - layouts: { - card: { + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ title: { property: "Product Name" }, - sections: [ + sections: [ /* Excel.CardLayoutSection */ { layout: "List", properties: ["Product ID"] @@ -4268,7 +4163,7 @@ Excel.EntityViewLayouts:interface: const entity: Excel.EntityCellValue = { type: Excel.CellValueType.entity, text: productName, - properties: { + properties: { /* Excel.EntityPropertyType */ "Product ID": { type: Excel.CellValueType.string, basicValue: productID.toString() || "" @@ -4288,10 +4183,10 @@ Excel.EntityViewLayouts:interface: numberFormat: "$* #,##0.00" } }, - layouts: { - card: { + layouts: { /* Excel.EntityViewLayouts */ + card: { /* Excel.EntityCardLayout */ title: { property: "Product Name" }, - sections: [ + sections: [ /* Excel.CardLayoutSection */ { layout: "List", properties: ["Product ID"]