<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5439950764176009449</id><updated>2026-04-11T02:02:39.514+02:00</updated><category term="sharepoint"/><category term="search"/><category term="howto"/><category term="sharepoint online"/><category term="sp2013"/><category term="sp2010"/><category term="fs4sp"/><category term="office365"/><category term="fast for sharepoint"/><category term="sharepoint framework"/><category term="Office 365 Groups"/><category term="office 365"/><category term="code"/><category term="c#"/><category term="microsoft graph"/><category term="fast"/><category term="spfx"/><category term=".net"/><category term="microsoft flow"/><category term="microsoft 365"/><category term="microsoft search"/><category term="display templates"/><category term="modern"/><category term="powerapps"/><category term="powershell"/><category term="enterprise search"/><category term="flow"/><category term="javascript"/><category term="add-in"/><category term="copilot"/><category term="azure"/><category term="conference"/><category term="csom"/><category term="pnp"/><category term="teams"/><category term="jquery"/><category term="kql"/><category term="office graph"/><category term="optimize"/><category term="query rules"/><category term=".net 4.0"/><category term="REST"/><category term="community"/><category term="delve"/><category term="design"/><category term="groups"/><category term="outlook"/><category term="provisioing"/><category term="speaking"/><category term="troubleshooting"/><category term="video"/><category term="webpart"/><category term="api"/><category term="best practice"/><category term="configuration"/><category term="development"/><category term="license"/><category term="managed metadata"/><category term="security"/><category term="sql"/><category term="upgrade"/><category term="yammer"/><category term="array"/><category term="cisco"/><category term="communication sites"/><category term="css"/><category term="data structures"/><category term="deploy"/><category term="dictionary"/><category term="fql"/><category term="ignite"/><category term="jslink"/><category term="owa"/><category term="pointers"/><category term="readability"/><category term="unsafe"/><category term="user profile"/><category term="visual studio"/><category term="windows 7"/><category term="xslt"/><category term="32bit"/><category term="64bit"/><category term="AI"/><category term="aad"/><category term="adal"/><category term="autospinstaller"/><category term="b2b"/><category term="blog"/><category term="book"/><category term="branding"/><category term="cloud"/><category term="comparison"/><category term="control"/><category term="crawl"/><category term="date"/><category term="exif"/><category term="forms"/><category term="fun"/><category term="governance"/><category term="gql"/><category term="hub sites"/><category term="hybrid"/><category term="jsom"/><category term="lifehack"/><category term="list"/><category term="migration"/><category term="mvp"/><category term="navigation"/><category term="office 2010"/><category term="office 2013"/><category term="officepnp"/><category term="powerbi"/><category term="preview"/><category term="protip"/><category term="rank"/><category term="review"/><category term="rss"/><category term="sample"/><category term="sharing"/><category term="stackoverflow"/><category term="typescript"/><category term="ux"/><category term="vpn"/><category term="windows"/><category term="winform"/><category term="wpf"/><category term="wsp"/><category term="AIP"/><category term="WebDAV"/><category term="accidentally"/><category term="acpi"/><category term="ajax"/><category term="anyconnect"/><category term="app"/><category term="asp.net"/><category term="audio"/><category term="author"/><category term="azure functions"/><category term="backup"/><category term="best bets"/><category term="bluetooth"/><category term="boot"/><category term="break"/><category term="business"/><category term="calendar"/><category term="caml"/><category term="certificate"/><category term="charger"/><category term="citrix"/><category term="claims"/><category term="clickonce"/><category term="clipboard"/><category term="clone"/><category term="color"/><category term="communication"/><category term="concept"/><category term="consent"/><category term="convert"/><category term="core"/><category term="course"/><category term="crawl log"/><category term="crawllog"/><category term="daemon tools"/><category term="deep dive"/><category term="disable"/><category term="discovery"/><category term="disk"/><category term="dojo"/><category term="dynamics 365"/><category term="e6400"/><category term="encoding"/><category term="esx"/><category term="event"/><category term="exchange"/><category term="experience"/><category term="experiences"/><category term="external sharing"/><category term="fail"/><category term="fast forward"/><category term="features"/><category term="file"/><category term="framework"/><category term="freeze"/><category term="g4l"/><category term="google"/><category term="hackathon"/><category term="hardware"/><category term="http"/><category term="icy box"/><category term="ie"/><category term="ie8"/><category term="infopath"/><category term="ipad"/><category term="issues"/><category term="itunity"/><category term="kindle"/><category term="lan"/><category term="language"/><category term="latitude"/><category term="lazy"/><category term="lifecycle"/><category term="linq"/><category term="lync"/><category term="mac"/><category term="managed"/><category term="mapi"/><category term="master page"/><category term="meraki"/><category term="microsoft partner"/><category term="mmf"/><category term="naming"/><category term="ndepend"/><category term="network"/><category term="nokia"/><category term="office"/><category term="office 2007"/><category term="office web apps"/><category term="oldskool"/><category term="onli"/><category term="operations"/><category term="packaging"/><category term="patch"/><category term="planner"/><category term="player"/><category term="pointpub"/><category term="prov"/><category term="re-index"/><category term="recent"/><category term="recruitment"/><category term="requirements"/><category term="resources"/><category term="resx"/><category term="ribbon"/><category term="richtextbox"/><category term="rpc"/><category term="sass"/><category term="secure store"/><category term="serialization"/><category term="serializer"/><category term="sharepoint designer"/><category term="sharepoint;aid"/><category term="shrink"/><category term="signalR"/><category term="skydrive pro"/><category term="skype for business"/><category term="social"/><category term="spc12"/><category term="spd"/><category term="spservices"/><category term="spsmuc"/><category term="spsoslo"/><category term="ssd"/><category term="ssom"/><category term="sticky"/><category term="sticky keys"/><category term="swagger"/><category term="taxonomy"/><category term="technical office 365"/><category term="telme2"/><category term="thread safe"/><category term="timezone"/><category term="transfer"/><category term="tuple"/><category term="update"/><category term="upload"/><category term="usb"/><category term="user adoption"/><category term="validation"/><category term="vmware"/><category term="voting"/><category term="wave"/><category term="wcf"/><category term="wisdom"/><category term="word"/><category term="wspbuilder"/><category term="xml"/><category term="xrank"/><category term="zip"/><title type='text'>Tech and me</title><subtitle type='html'>My musings on Office 365, search, programming and technology.&#xa;&lt;br&gt;&#xa;(June 1st, 2019, I started as a full time employee of Microsoft, thus any post before that date are solely written on my own behalf)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.techmikael.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>580</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-7864249969284304641</id><published>2025-09-22T18:02:00.003+02:00</published><updated>2025-09-22T18:09:06.224+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="best practice"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="optimize"/><title type='text'>When Your Agent Writes Code Faster Than You Can Review</title><content type='html'>&lt;a href=&quot;https://lh3.googleusercontent.com/d/1d56Z7k2_1lagyJH919-IAtNch4WsMNs1&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;431&quot; src=&quot;https://lh3.googleusercontent.com/d/1-AwCVQvYCiTY8JTRURWttVwWOmt27dTg&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;   &lt;p&gt;Agentic coding has the promise to unlock a turbocharged workweek, cranking out pull requests faster than any keyboard warrior could manually manage. The real bottleneck isn’t how quickly code appears—it&#39;s how quickly humans can keep up with the reviews. If you’re thinking about coasting on those newly liberated hours, beware: the pace is relentless and those who snooze will get lapped. Adapt, hustle, and wield your extra time, or get comfortable watching the leaderboard from the bottom. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;PS! I continue to recommend human code reviews and remain open to updating my perspectives as AI evolves &lt;/em&gt;:)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Short take: review is the constraint; ship more anyway.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A PR takes ~6 hours to write and 15–20 minutes to review—per reviewer. Agentic coding (Copilot and friends) doesn’t cancel your review policy; it makes it matter. As adoption spreads, you spend more time reviewing and still ship more.    &lt;br /&gt;It does not matter if the agentic multiplier is 1.2x, 2x, 4x or more, your team will still benefit. However, when does that flip and review starts choking the flow? Read on.&lt;/p&gt;  &lt;a name=&quot;more&quot;&gt;&lt;/a&gt;  &lt;p&gt;It doesn’t “flip” mathematically, but in practice review starts choking the flow when &lt;var&gt;m&lt;/var&gt;&lt;var&gt;r&lt;/var&gt; ≈ 1 — about &lt;strong&gt;10×&lt;/strong&gt; coding speed with two reviewers (r≈0.097) or ~&lt;strong&gt;20×&lt;/strong&gt; with one (r≈0.049) given 6h/PR and 15–20m per reviewer.&lt;/p&gt;  &lt;h3&gt;Assumptions (and please argue my assumption data)&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;One author. We model one‑reviewer and two‑reviewer policies.&lt;/li&gt;    &lt;li&gt;Coding per PR ≈ 6h. Review per reviewer ≈ 15–20m. (Yes, short. Keep it that way.)&lt;/li&gt;    &lt;li&gt;That gives a review/coding ratio r per reviewer of ~0.042–0.056; we use ~0.049. Two reviewers ≈ double r.&lt;/li&gt;    &lt;li&gt;Agentic coding is a multiplier m on coding speed (1.2×, 1.5×, 2×, 3×, 4×).      &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Light math, heavy impact&lt;/h3&gt;  &lt;p&gt;Split the week between writing and reviewing. If writing gets m× faster, more PRs arrive, so review minutes go up. A back‑of‑napkin math formula for team throughput vs. today:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;gain ≈ m·(1+r) / (1+m·r)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;r is total human review time divided by authoring time for a PR. Bigger r → more RAT (Review-Added Tapering): the gains flatten as review effort eats into coding speedups.&lt;/p&gt;  &lt;h3&gt;Case A — One human reviewer&lt;/h3&gt;  &lt;p&gt;Throughput climbs, and review time takes a bigger slice of the week, but you have headroom at these review times.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1ZDf3t7W24_naFSIB_zdaVKQE7cLAQ1yb&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://lh3.googleusercontent.com/d/14w25tONoqiAgEU3hPIt98biyMBnfJVjd&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;465&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;Figure 1 — Team throughput vs. agentic multiplier (one reviewer; 15–20 min sensitivity band).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;    &lt;br /&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/15KM1m8b8o5mDG_DcOCJN29GU9o-aiySF&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://lh3.googleusercontent.com/d/1lgZts-0Le5OkaNJ1KR-oidMykE72JYh_&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;465&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;em&gt;Figure 2 — Share of team time spent on review (one reviewer).      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Case B — Two human reviewers&lt;/h3&gt;  &lt;p&gt;Two required approvals roughly double review time per PR, so you feel the constraint sooner.    &lt;br /&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://lh3.googleusercontent.com/d/1GkWBt003kQC-gdBRkpAcpJGwVFlHpq4S&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;465&quot; /&gt;&amp;nbsp; &lt;br /&gt;&lt;em&gt;Figure 3 — Team throughput vs. agentic multiplier (two reviewers; sensitivity band).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://lh3.googleusercontent.com/d/1oYt4_-zRzX7SeZMtThl42ihlVenJFPFg&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;465&quot; /&gt;     &lt;br /&gt;&lt;em&gt;Figure 4 — Share of team time spent on review (two reviewers).      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Clearer throughput tables&lt;/h3&gt;  &lt;p&gt;Two quick tables; both assume a team of eight and the same PR size/quality. &lt;/p&gt;  &lt;h4&gt;Table A — Adoption curve (8 people; each adopter is 1.2×)&lt;/h4&gt;  &lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th&gt;Adopters (of 8)&lt;/th&gt;        &lt;th&gt;Avg multiplier (m̄)&lt;/th&gt;        &lt;th&gt;Throughput × (1 reviewer)&lt;/th&gt;        &lt;th&gt;Throughput × (2 reviewers)&lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;0&lt;/td&gt;        &lt;td&gt;1.000&lt;/td&gt;        &lt;td&gt;1.00&lt;/td&gt;        &lt;td&gt;1.00&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;1.025&lt;/td&gt;        &lt;td&gt;1.02&lt;/td&gt;        &lt;td&gt;1.02&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;1.050&lt;/td&gt;        &lt;td&gt;1.05&lt;/td&gt;        &lt;td&gt;1.05&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;1.075&lt;/td&gt;        &lt;td&gt;1.07&lt;/td&gt;        &lt;td&gt;1.07&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4&lt;/td&gt;        &lt;td&gt;1.100&lt;/td&gt;        &lt;td&gt;1.09&lt;/td&gt;        &lt;td&gt;1.09&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;5&lt;/td&gt;        &lt;td&gt;1.125&lt;/td&gt;        &lt;td&gt;1.12&lt;/td&gt;        &lt;td&gt;1.11&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;6&lt;/td&gt;        &lt;td&gt;1.150&lt;/td&gt;        &lt;td&gt;1.14&lt;/td&gt;        &lt;td&gt;1.13&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;7&lt;/td&gt;        &lt;td&gt;1.175&lt;/td&gt;        &lt;td&gt;1.17&lt;/td&gt;        &lt;td&gt;1.16&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;8&lt;/td&gt;        &lt;td&gt;1.200&lt;/td&gt;        &lt;td&gt;1.19&lt;/td&gt;        &lt;td&gt;1.18&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Table B — Throughput as average team multiplier grows (to 4×)&lt;/strong&gt; &lt;/p&gt;  &lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th&gt;Avg multiplier (m̄)&lt;/th&gt;        &lt;th&gt;Throughput × (1 reviewer)&lt;/th&gt;        &lt;th&gt;Throughput × (2 reviewers)&lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;1.0×&lt;/td&gt;        &lt;td&gt;1.00×&lt;/td&gt;        &lt;td&gt;1.00×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1.2×&lt;/td&gt;        &lt;td&gt;1.19×&lt;/td&gt;        &lt;td&gt;1.18×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1.5×&lt;/td&gt;        &lt;td&gt;1.47×&lt;/td&gt;        &lt;td&gt;1.44×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2.0×&lt;/td&gt;        &lt;td&gt;1.91×&lt;/td&gt;        &lt;td&gt;1.84×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;3.0×&lt;/td&gt;        &lt;td&gt;2.75×&lt;/td&gt;        &lt;td&gt;2.55×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;4.0×&lt;/td&gt;        &lt;td&gt;3.51×&lt;/td&gt;        &lt;td&gt;3.16×&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;&amp;nbsp;&lt;/h3&gt;  &lt;h3&gt;About those “free” minutes&lt;/h3&gt;  &lt;p&gt;Agentic coding frees time. If it doesn’t become more (or better) PRs, it still has to land somewhere:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Best:&lt;/strong&gt; quality. More tests, tighter diffs, cleaner commits. Review gets faster when diffs are tidy.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Good:&lt;/strong&gt; non-code work. Specs, comms, reviews, mentoring—all the glue.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Worst:&lt;/strong&gt; Xbox/Netflix. Teams that reward shipped work will see the reinvestors lap the coasters.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Push the pivot out&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Keep PRs small—cheap to read is cheap to ship.&lt;/li&gt;    &lt;li&gt;Let CI and AI do pre-review: lint/tests/security, AI summaries and risk flags.&lt;/li&gt;    &lt;li&gt;Block time for review—don’t background it.&lt;/li&gt;    &lt;li&gt;Two approvals only when it truly buys risk down.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Bottom line&lt;/h3&gt;  &lt;p&gt; Manual review doesn’t kill agentic gains. With 6h write / 15–20m per reviewer, one-approval teams have plenty of headroom; two-approval teams still gain but meet the review wall sooner. Convert freed minutes into smaller, better PRs—or more of them— and the meter on shipped work keeps spinning faster. &lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/7864249969284304641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/7864249969284304641'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2025/09/when-your-agent-writes-code-faster-than.html' title='When Your Agent Writes Code Faster Than You Can Review'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1-AwCVQvYCiTY8JTRURWttVwWOmt27dTg=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-2269963486039762350</id><published>2025-08-13T22:02:00.002+02:00</published><updated>2025-08-14T09:28:27.352+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Governing Feedback Data Sharing in Microsoft 365 Apps and Copilot</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1imdghFUntlADDnXYKmUM5PGnF79nS8GD&quot;&gt;&lt;img alt=&quot;ComfyUI_00083_&quot; border=&quot;0&quot; height=&quot;367&quot; src=&quot;https://lh3.googleusercontent.com/d/14f4nx_JfpVoD-qbM54y1egFdINDr32Fn&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;ComfyUI_00083_&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Microsoft treats user feedback as confidential and uses it to improve the product experience. That does, however, involve real people reading what’s submitted. For many organizations that’s fine; for others it’s something they want to control—particularly when feedback is sent from Copilot chat, where a message might contain sensitive business context.&lt;/p&gt;  &lt;p&gt;Good news: you can govern what can (and cannot) be sent in the feedback dialog.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Note: Prompts and responses used inside a Copilot conversation are not viewed by Microsoft. What I’m covering here is only the &lt;strong&gt;optional&lt;/strong&gt; feedback form users can submit.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Where to configure Feedback policies&lt;/h3&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/16q9BC8YiiKb1z7ZF0txfj_dO1MaTRR_0&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://lh3.googleusercontent.com/d/1ZHN830YQsX0_BkVeQYC12pWbAGIUI_D7&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;   &lt;p&gt;These settings live in the &lt;strong&gt;Microsoft 365 Apps admin center&lt;/strong&gt; as Cloud Policy:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Go to &lt;strong&gt;config.office.com&lt;/strong&gt; → &lt;strong&gt;Customization&lt;/strong&gt; → &lt;strong&gt;Policy Management&lt;/strong&gt;.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create or edit a policy configuration for &lt;strong&gt;Microsoft 365 Apps&lt;/strong&gt; and scope it to the users/groups you want.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Search for &lt;strong&gt;Feedback&lt;/strong&gt; to find the policies below.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Official docs for Cloud Policy: &lt;a&gt;https://learn.microsoft.com/microsoft-365-apps/admin-center/overview-cloud-policy&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;These policies apply to apps and web experiences that use the standard “Send feedback to Microsoft” UX from Microsoft 365 Apps (including Copilot surfaces that use that dialog). &lt;strong&gt;Teams uses its own policy model for feedback&lt;/strong&gt;, so manage Teams separately.&lt;/p&gt;  &lt;p&gt;Also important: &lt;strong&gt;these settings are not “restrictive by default.”&lt;/strong&gt; If you don’t explicitly disable them, users can include logs and content samples by default.&lt;/p&gt;  &lt;p&gt;See &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-feedback-ms-org&quot; title=&quot;https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-feedback-ms-org&quot;&gt;https://learn.microsoft.com/en-us/microsoft-365/admin/manage/manage-feedback-ms-org&lt;/a&gt; for a list of products covered by feedback policies set at config.office.com&lt;/p&gt;  &lt;a name=&quot;more&quot;&gt;&lt;/a&gt;  &lt;h3&gt;The four knobs that matter (set to Disabled to restrict)&lt;/h3&gt;  &lt;p&gt;I’m listing them in the order I recommend you evaluate them.&lt;/p&gt;  &lt;h4&gt;1) &lt;strong&gt;Allow Microsoft to follow up on feedback submitted by users&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;What changes: the small text at the bottom of the dialog that says Microsoft may contact the user.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Why it matters: disables the consent for follow-up (no contact back). Many orgs prefer no outbound follow-ups to end users.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;2) &lt;strong&gt;Allow users to include screenshots and attachments when they submit feedback to Microsoft&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;What changes: hides the &lt;strong&gt;Include a screenshot&lt;/strong&gt; control in the form.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Why it matters: screenshots often contain customer content.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Gotcha: &lt;strong&gt;this does not cover log/content attachments&lt;/strong&gt; (that’s the next policy).&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;3) &lt;strong&gt;Allow users to include log files and relevant content samples when feedback is submitted to Microsoft&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;What changes: removes the option that shares the &lt;strong&gt;prompt, generated response, relevant content samples, and additional log files&lt;/strong&gt; with the feedback.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Why it matters: this is the big one for Copilot. When enabled, users can (and by default will) include parts of the conversation and context data. Setting it to &lt;strong&gt;Disabled&lt;/strong&gt; prevents those from being sent.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;4) &lt;strong&gt;Allow users to submit feedback to Microsoft&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;What changes: blocks the feedback dialog from appearing at all.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Why it matters: the nuclear option. If you don’t want any feedback sent from the product UI, turn this off.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;What users will see&lt;/h3&gt;  &lt;p&gt;Here’s how the UI shifts as you apply the policies:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;With default settings, users can add a screenshot and (by default) include prompt/response + logs/content samples.&lt;/p&gt;      &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1bYZvbTAFxqiiht3HNasG5xbZyBWHvGD8&quot;&gt;&lt;img alt=&quot;feedback-default&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;https://lh3.googleusercontent.com/d/1q2Jmw8QsqbaWVO05MwLlPzdInZa93pAa&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;feedback-default&quot; width=&quot;187&quot; /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Disable &lt;strong&gt;follow-up&lt;/strong&gt; → the small “Microsoft may contact you…” text is removed/changed.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;      &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/101Df_P66v1wCtB8B-Zx-seRF4Ysi70_u&quot;&gt;&lt;img alt=&quot;feedback-no-contact[1]&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;https://lh3.googleusercontent.com/d/1l7JiMCDP5_W1_anwl9scrRSJIKmrWWP0&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;feedback-no-contact[1]&quot; width=&quot;196&quot; /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Disable &lt;strong&gt;screenshots&lt;/strong&gt; → the screenshot checkbox/button disappears (users cannot attach images), but &lt;strong&gt;log/content sharing may still be available&lt;/strong&gt; unless you disable it too.&lt;/p&gt;      &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1_At2X02QuHyneG_-Y05TPEqgxMIvD9df&quot;&gt;&lt;img alt=&quot;feedback-noscreenshot[1]&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;https://lh3.googleusercontent.com/d/1sHRVt_1Wyshszo5Gwtsc0WrUe_7l6yAr&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;feedback-noscreenshot[1]&quot; width=&quot;211&quot; /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Disable &lt;strong&gt;log files and content samples&lt;/strong&gt; → the “Share prompt, generated response, … and additional log files” option is removed, so no conversation context is shared.&lt;/p&gt;      &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1ObNurHd6nI-rk8xX3sWFpRg_x3--faHZ&quot;&gt;&lt;img alt=&quot;feedback-nologs[1]&quot; border=&quot;0&quot; height=&quot;188&quot; src=&quot;https://lh3.googleusercontent.com/d/1_q4NC0exzDwGCDdyQQaoypf1AED02rrO&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;feedback-nologs[1]&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Disable &lt;strong&gt;submit feedback&lt;/strong&gt; → the dialog doesn’t show.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Recommended approaches&lt;/h3&gt;  &lt;p&gt;Pick the level that matches your risk tolerance:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;p&gt;&lt;strong&gt;Leave as is: &lt;/strong&gt;The default behavior allows Microsoft to capture valuable feedback to adjust products and experiences to the better for those using them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;     &lt;p&gt;&lt;strong&gt;Balanced:&lt;/strong&gt; Disable &lt;strong&gt;screenshots&lt;/strong&gt; and &lt;strong&gt;log files/content samples&lt;/strong&gt;, allow feedback, and optionally disable follow-ups.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;strong&gt;Strict:&lt;/strong&gt; Disable &lt;strong&gt;screenshots&lt;/strong&gt;, &lt;strong&gt;log files/content samples&lt;/strong&gt;, and &lt;strong&gt;follow-ups&lt;/strong&gt;.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;strong&gt;Locked down:&lt;/strong&gt; Disable &lt;strong&gt;submit feedback&lt;/strong&gt; entirely.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you do allow feedback, you may want to consider disabling the &lt;strong&gt;log files and relevant content samples&lt;/strong&gt; option for Copilot users. While this data is handled securely by Microsoft, turning it off can help ensure that no conversation snippets or contextual information are included in feedback—something some organizations prefer for peace of mind or to align with their internal data handling practices.&lt;/p&gt;  &lt;h3&gt;Final thoughts&lt;/h3&gt;  &lt;p&gt;I work at Microsoft, and I know there are actual people reading feedback to make our products better. That’s a feature, not a bug—but each organization has different requirements for customer data. With Cloud Policy you can decide what’s appropriate for your tenant, from light filtering to full lockdown.&lt;/p&gt;  &lt;p&gt;Again, this doesn’t change how Copilot processes prompts during normal use—those aren’t viewed by Microsoft. We’re only talking about the &lt;strong&gt;separate, optional&lt;/strong&gt; act of sending product feedback according to your level of comfort, and is why the options are there.&lt;/p&gt;  &lt;p&gt;If you’ve got a mixed environment (e.g., Teams), remember to set feedback controls where that app expects them.&lt;/p&gt;  &lt;p&gt;Happy governing!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2269963486039762350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2269963486039762350'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2025/08/governing-feedback-data-sharing-in.html' title='Governing Feedback Data Sharing in Microsoft 365 Apps and Copilot'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/14f4nx_JfpVoD-qbM54y1egFdINDr32Fn=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-6791706889036721810</id><published>2025-05-27T11:36:00.000+02:00</published><updated>2025-05-27T11:36:28.878+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><title type='text'>Taming the Context-Switch Hydra: How an AI Sidekick Saved My Sanity</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUP4SrWHbKO8GG25KBa4i2ErulKFsxE8OkWkvIfxEF7oVUkFjIf-tC6QbGasVTrHUrY8FmyXFrnx7HTqSsvOUkrB3TpEDyCKr3LNVVK8OhfwOAn1yMWYcsnfVysBu4QJhXJI-k-nHM2EnB2WSXopDYS2ybBKJzM6HH1I5m_3jSx6IY_wEWQB9UP7zV2mjh&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhUP4SrWHbKO8GG25KBa4i2ErulKFsxE8OkWkvIfxEF7oVUkFjIf-tC6QbGasVTrHUrY8FmyXFrnx7HTqSsvOUkrB3TpEDyCKr3LNVVK8OhfwOAn1yMWYcsnfVysBu4QJhXJI-k-nHM2EnB2WSXopDYS2ybBKJzM6HH1I5m_3jSx6IY_wEWQB9UP7zV2mjh=w640-h360&quot; width=&quot;640&quot;&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;br&gt;&lt;br&gt;TL;DR:&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;GitHub Copilot (in Agent mode with Codespaces) dramatically cuts down the cost of context switching, perfectly fitting my chaotic, multitasking workstyle. It lets me stay productive and in flow, even as I juggle coding, helping others, and specs—all while being 51 and still loving the craft.&lt;/p&gt;&lt;p&gt;For Those Who Prefer the Director’s Cut …keep on reading&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://www.techmikael.com/2025/05/taming-context-switch-hydra-how-ai.html#more&quot;&gt;Read more »&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6791706889036721810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6791706889036721810'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2025/05/taming-context-switch-hydra-how-ai.html' title='Taming the Context-Switch Hydra: How an AI Sidekick Saved My Sanity'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhUP4SrWHbKO8GG25KBa4i2ErulKFsxE8OkWkvIfxEF7oVUkFjIf-tC6QbGasVTrHUrY8FmyXFrnx7HTqSsvOUkrB3TpEDyCKr3LNVVK8OhfwOAn1yMWYcsnfVysBu4QJhXJI-k-nHM2EnB2WSXopDYS2ybBKJzM6HH1I5m_3jSx6IY_wEWQB9UP7zV2mjh=s72-w640-h360-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-8121423985474190194</id><published>2024-07-08T10:15:00.002+02:00</published><updated>2024-07-08T10:46:10.079+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><title type='text'>One small step for SharePoint intranets, one giant leap for news roll-up</title><content type='html'>&lt;a href=&quot;https://lh3.googleusercontent.com/d/1z-AjmPe2QgfwXo-vitugHB6KqEeU1Qa0&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1JOuBkqQui8JAAjuNVMh9DrPL-jdeUz6c&quot; width=&quot;644&quot; height=&quot;370&quot; /&gt;&lt;/a&gt;  &lt;p&gt;..well, not really, but it’s an improvement which makes news roll-up match multiple information architecture scenarios. I’ll leave it up to those setting up intranets to gage the usefulness, and I know there has been demand for this feature.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A shoutout to my old peeps at Puzzlepart for wanting this feature – adding to many other customers who have asked for this feature.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, what am I talking about? In the news web part, when you use “Select sites” or “Recommended for the current user”, a new option to either show or hide the site title will show below the sites you pick.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/11_bQNoXTCHeiApSWe2tAK7lPcJbuthe8&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: left; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1Tr7NAg-m7vHv3xWHJLxti9Qa7hICWzKp&quot; width=&quot;304&quot; align=&quot;left&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1RcQyJo7ktOFM2UTvHR2oINOOsi9wBvUh&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: left; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1ysYRH-Ne1DqvTFzfTw7JyaEpvZSshaZ5&quot; width=&quot;304&quot; align=&quot;left&quot; height=&quot;184&quot; /&gt;&lt;/a&gt;    &lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;  &lt;p&gt;When displaying news from one site, the site title is already hidden as you are on that one site anyways. If you pick more sites, you may want to hide the site title because content authoring happens in multiple sites because of information architecture, not because you need to show the site title.&lt;/p&gt;  &lt;p&gt;Here’s an example with and without site titles.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/10WHxyAyDpxS2lQK1ASFPFtA28aMZ8XQ8&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1J7jq0xrwmImO1-wpTdDjA1HsByOtNldj&quot; width=&quot;644&quot; height=&quot;141&quot; /&gt;&lt;/a&gt;  &lt;p&gt;Happy intranet authoring!&lt;/p&gt;  &lt;p&gt;What’s great at Microsoft, is that anyone can contribute anywhere. The above feature was implemented by yours sincerely as part of one of the yearly hackathons we have at Microsoft. It allowed me to look more closely at how web parts are built in SharePoint, and also solve a customer pain. Win-win!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/8121423985474190194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/8121423985474190194'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/07/one-small-step-for-sharepoint-intranets.html' title='One small step for SharePoint intranets, one giant leap for news roll-up'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1JOuBkqQui8JAAjuNVMh9DrPL-jdeUz6c=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-7004051770903646664</id><published>2024-06-25T09:15:00.001+02:00</published><updated>2024-06-25T09:15:37.439+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><title type='text'>Search nugget: The beauty of SharePoint Site Columns</title><content type='html'>&lt;a href=&quot;https://lh3.googleusercontent.com/d/1mfrg5JizSjSTRCWHNeOz1NXDEGrhDNN-&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;370&quot; src=&quot;https://lh3.googleusercontent.com/d/1Be24SILJWzjfth4AuEgPjtPPGztJuz84&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The scenario I’m sharing is not a new one, but (somewhat) recent changes to SharePoint indexing of items may make the scenario easier to solve.&lt;/p&gt;&lt;p&gt;Before we dig into the details, let&#39;s talk about &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/syntex/syntex-overview&quot; target=&quot;_blank&quot;&gt;Microsoft Syntex&lt;/a&gt;, as it has bearing on the nugget I will share. Microsoft Syntex is a service that uses AI and machine learning to automatically sort and classify documents across SharePoint, Microsoft Teams, OneDrive for Business, and Exchange.&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;Or simply put in terms for SharePoint: &lt;/b&gt;Pulling structured data out from unstructured data and store it as metadata for easier use and retrieval. Something we have done manually or via customized processed for the longest time in SharePoint lists and libraries.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Microsoft Syntex is licensed via a pay-as-uou go model, where you pay for items processed. See&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/syntex/syntex-pay-as-you-go-services&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/en-us/microsoft-365/syntex/syntex-pay-as-you-go-services&lt;/a&gt;&amp;nbsp;and&amp;nbsp; for more details and the offering currently includes these features:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Prebuilt document processing&lt;/li&gt;&lt;li&gt;Structured and freeform document processing&lt;/li&gt;&lt;li&gt;Unstructured document processing&lt;/li&gt;&lt;li&gt;Autofill columns&lt;/li&gt;&lt;li&gt;Content assembly&lt;/li&gt;&lt;li&gt;Image tagging&lt;/li&gt;&lt;li&gt;Taxonomy tagging&lt;/li&gt;&lt;li&gt;SharePoint eSignature&lt;/li&gt;&lt;li&gt;Document translation&lt;/li&gt;&lt;li&gt;Optical character recognition (OCR)&lt;/li&gt;&lt;li&gt;Microsoft 365 Archive&lt;/li&gt;&lt;li&gt;Microsoft 365 Backup (Preview)&lt;/li&gt;&lt;li&gt;Microsoft 365 Backup Storage (Preview)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;A Microsoft Syntex enabled library also enable a better context query user experience. See&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365/syntex/metadata-search&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/en-us/microsoft-365/syntex/metadata-search&lt;/a&gt; for details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhawe4gJgTuBcuiCbf9u5WY4st2fFoqa_PPraSpDrrkIZHi5tgxWP47Qkg4jdtnNT25dpCIQNbjPO4rNx5Z_XNBQ3JjSBEJEpdy1QimA5pZ1QlMq_P45QSalSjPJotET3o7cWIdOE2G1YhscmR6pBXjjS0pq7xQS7efQ4N594Q2W2BFjIJXpSYA8Akeqndh/s702/metadata-search-pane.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;422&quot; data-original-width=&quot;702&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhawe4gJgTuBcuiCbf9u5WY4st2fFoqa_PPraSpDrrkIZHi5tgxWP47Qkg4jdtnNT25dpCIQNbjPO4rNx5Z_XNBQ3JjSBEJEpdy1QimA5pZ1QlMq_P45QSalSjPJotET3o7cWIdOE2G1YhscmR6pBXjjS0pq7xQS7efQ4N594Q2W2BFjIJXpSYA8Akeqndh/w640-h384/metadata-search-pane.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Let&#39;s get to it!&lt;/h2&gt;  &lt;p&gt;Say you have a library where you add a new column. In this case a number column.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1gpaUI_8-kyB0x82xmLlSCqMYAgjIPSLP&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;89&quot; src=&quot;https://lh3.googleusercontent.com/d/17GzXo_WU9EkxqYntBdZfH5Ci-qJzarKA&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In a search scenario for the library you want to filter results based on the number value. One example being all items with a value above 100.&lt;/p&gt;  &lt;a name=&quot;more&quot;&gt;&lt;/a&gt;  &lt;p&gt;In my case the column has an internal name of &lt;em&gt;PnPNumberColumn&lt;/em&gt;. If the column was manually created at the library it would output a crawled property named &lt;em&gt;ows_PnPNumberColumn&lt;/em&gt;. This crawled property could be mapped to &lt;em&gt;RefinableInt00&lt;/em&gt; and after re-indexing you could use the below KQL query to list all items with a value above 100. If you add an alias to the managed property you could use this instead.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RefinableInt00&amp;gt;100&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now, let us go back to the site column scenario. Site columns will in addition to the default crawled property, create an additional crawled property and an automatic managed property. This is described at &lt;a href=&quot;https://learn.microsoft.com/en-us/sharepoint/technical-reference/automatically-created-managed-properties-in-sharepoint#how-site-columns-become-managed-properties&quot; target=&quot;_blank&quot;&gt;Automatically created managed properties in SharePoint Server&lt;/a&gt; which also apply to SharePoint Online despite what the article is tagged as.&lt;/p&gt;  &lt;p&gt;The caveat of the automatically created managed properties is that they are of type text, which is not very useful when it comes to numbers. The example column above yields an automatic managed property named &lt;em&gt;PnPNumberColumnOWSNMBR&lt;/em&gt;. This means I can query with:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;PnPNumberColumnOWSNMBR:500&lt;/em&gt; or&lt;strong&gt;&lt;em&gt; PnPNumberColumnOWSNMBR=500&lt;/em&gt;&lt;/strong&gt; and get a match, as it matches on text. &lt;em&gt;PnPNumberColumnOWSNMBR&amp;gt;500&lt;/em&gt; would however be invalid KQL.&lt;/p&gt;  &lt;p&gt;And here is the nugget. In addition to &lt;em&gt;PnPNumberColumnOWSNMBR&lt;/em&gt; we now also get an additional property &lt;em&gt;PnPNumberColumnOWS&lt;strong&gt;T&lt;/strong&gt;NMBR&lt;/em&gt;. Note the extra T.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;em&gt;A word from our sponsor: This tip was brought to you by indexing advancements made for Microsoft Syntex. Microsoft Syntex greatly automates creation of site column for the average user. What are you waiting for?&lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;And don’t be fooled by the schema admin page saying the property is of type text, as it is indeed of type number. A fact somewhat called out in a notice when you view the property settings, so you just have to trust me.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/16ZYMdlDMNe234aUarYm3bZA79NGR17gw&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;102&quot; src=&quot;https://lh3.googleusercontent.com/d/1p1YR49sGfGoHuZNpBGrlRchS_wYQ4d04&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1MZ0U_xfh8Tca4Iyei1zg-nuFutWhQ9DZ&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;77&quot; src=&quot;https://lh3.googleusercontent.com/d/1txex8H0MYZmQ9ondXIMo8TZCeRt1iM9Z&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;Below is screenshot showcasing the behavior where the query&lt;em&gt; PnPNumberColumnOWSTNMBR&amp;gt;499&lt;/em&gt; return the sample document. Easy as pie!&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1K-Svi1RYwrDyADmrkAtl6vJx2JCxVbhg&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;267&quot; src=&quot;https://lh3.googleusercontent.com/d/1T27-HsQ_lUwCyBQ7-pb7GwHlQYioeWq8&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;PS! The property is not refinable so you can not use it as refinement filter. If this is your case keep on as you always have and map to e.g RefinableInt00&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/7004051770903646664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/7004051770903646664'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/06/search-nugget-beauty-of-sharepoint-site.html' title='Search nugget: The beauty of SharePoint Site Columns'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1Be24SILJWzjfth4AuEgPjtPPGztJuz84=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-3041342688922284294</id><published>2024-06-06T15:09:00.001+02:00</published><updated>2024-06-06T15:11:33.924+02:00</updated><title type='text'>00000101 </title><content type='html'>&lt;p&gt;How time flies! I have now been 5 years at Microsoft. I started as a Program Manager, which changed into Product Manager, and now I’m an Engineer.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1KTgoIYHLajmsogkO3dVW83osZ1faa890&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1s9slvbNKshvoH-Dx0KUcZkbMKeK0fTg3&quot; width=&quot;644&quot; height=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;Despite the title changes the work I do has not changed much over these five years. I have always been a jack of many trades, and I enjoying doing many things at once. When everything is interesting and challenging, it is hard to cut something out. And I have been lucky to be allowed to work to my strengths while still learning – and I love to learn!&lt;/p&gt;  &lt;p&gt;What has changed over the years is that I have learned to appreciate process and governance more than before. Which is why I have onboarded to internal roles as privacy champ, compliance champ and responsible AI champ – the last one becoming increasingly important as Microsoft focus all energy on Copilot. Luckily for me loving search as a function and search tech, is that Microsoft Search plays an important role also in Copilot.&lt;/p&gt;  &lt;p&gt;What the next one or five years will bring I have no idea, and it’s not important. I’m still a day to day kind of person, with no long term plans. If what I do is fun, challenging and benefits Microsoft customers, I will keep doing it. And for those who know me, I’m not giving up om my long term mission to cut ties from classic SharePoint search features still having dependencies in the modern world of Microsoft Search. Some cuts are hard but still important to ensure the success of future experiences.&lt;/p&gt;  &lt;p&gt;Cake time!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3041342688922284294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3041342688922284294'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/06/00000101.html' title='00000101 '/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1s9slvbNKshvoH-Dx0KUcZkbMKeK0fTg3=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-8872554613649874261</id><published>2024-03-27T10:40:00.000+01:00</published><updated>2024-03-27T10:40:00.153+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Copilot Productivity Tip – Structured formatting in Word</title><content type='html'>&lt;p&gt;&lt;strong&gt;Time spent per day before: 15 minutes&lt;/strong&gt; per document     &lt;br /&gt;&lt;strong&gt;Time spent with Copilot: 5 minutes&lt;/strong&gt; per document &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/office/transform-your-content-with-copilot-in-word-923d9763-f896-4da7-8a3f-5b12c3bfc475&quot; target=&quot;_blank&quot;&gt;Transform your content with Copilot in Word&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hxc5t3AfpKo&quot; target=&quot;_blank&quot;&gt;Copilot in Word | Locate key information&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgQVqaqmiyEtmwmU_y5JG_DM2_wbhPFK87Nblsq0aAgzHhGPraU7WfeQVUZV2rnpy0tlyY995oHkYY_tcEibngyYvJuPOB2I8Yzw0i5x2GuRLoyZiRfTgFkcUq1KpVV69kEYMPM7L1WVQD2HQr_z_hFFwGmdW-oc_3692tpenitZV9qeNzsezK0OLdwAr3a&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgQVqaqmiyEtmwmU_y5JG_DM2_wbhPFK87Nblsq0aAgzHhGPraU7WfeQVUZV2rnpy0tlyY995oHkYY_tcEibngyYvJuPOB2I8Yzw0i5x2GuRLoyZiRfTgFkcUq1KpVV69kEYMPM7L1WVQD2HQr_z_hFFwGmdW-oc_3692tpenitZV9qeNzsezK0OLdwAr3a=w640-h640&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Taking my previous post about re-writing text in Word, we can prompt to have key points from the text pulled out and as an example formatted as a table for easier consumption.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1cke2qo3sgq36vqg3LU6LrGJ-nsBwztv7&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;484&quot; src=&quot;https://lh3.googleusercontent.com/d/1MJun-3JePVhNpaOhjdSW_IVQeRdUSmg2&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;639&quot; /&gt;&lt;/a&gt;   &lt;p&gt;The prompt used is &lt;em&gt;“Extract key points into a table with two columns for key point header and details”&lt;/em&gt;, and the output is the table below.&lt;/p&gt;  &lt;table aria-rowcount=&quot;3&quot; border=&quot;1&quot; class=&quot;Table Ltr TableWordWrap SCXW76454911 BCX8&quot; data-tablelook=&quot;1056&quot; data-tablestyle=&quot;MsoTableGrid&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; -webkit-user-drag: none; background: none; border-collapse: collapse; border-spacing: 0px; empty-cells: show; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; line-height: normal; margin: 0px; orphans: 2; overflow: visible; padding: 0px; position: relative; table-layout: fixed; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-transform: none; user-select: text; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;tbody class=&quot;SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;     &lt;tr aria-rowindex=&quot;1&quot; class=&quot;TableRow SCXW76454911 BCX8&quot; role=&quot;row&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; height: 20px; margin: 0px; overflow: visible; padding: 0px; user-select: text;&quot;&gt;       &lt;td class=&quot;FirstRow FirstCol AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedBlack SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; role=&quot;columnheader&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: whitesmoke; border-bottom: 1px solid rgb(240, 240, 240); border-image: initial; border-left: 1px solid rgb(209, 209, 209); border-right-style: none; border-right-width: 0px; border-top: 1px solid rgb(209, 209, 209); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot; width=&quot;300&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{116}&quot; paraid=&quot;1828763315&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun MacChromeBold SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Key point &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;        &lt;td class=&quot;FirstRow LastCol AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedBlack SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; role=&quot;columnheader&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: whitesmoke; border-bottom: 1px solid rgb(240, 240, 240); border-image: initial; border-left-style: none; border-left-width: 0px; border-right: 1px solid rgb(209, 209, 209); border-top: 1px solid rgb(209, 209, 209); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot; width=&quot;300&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{120}&quot; paraid=&quot;1906656356&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun MacChromeBold SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Details&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr aria-rowindex=&quot;2&quot; class=&quot;TableRow SCXW76454911 BCX8&quot; role=&quot;row&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; height: 20px; margin: 0px; overflow: visible; padding: 0px; user-select: text;&quot;&gt;       &lt;td class=&quot;FirstCol AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedLightMode SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: white; border-bottom: 1px solid rgb(240, 240, 240); border-image: initial; border-left: 1px solid rgb(209, 209, 209); border-right-style: none; border-right-width: 0px; border-top: 1px solid rgb(240, 240, 240); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{136}&quot; paraid=&quot;1300830354&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Copilot&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt; can rewrite the content&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;        &lt;td class=&quot;LastCol AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedLightMode SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: white; border-bottom: 1px solid rgb(240, 240, 240); border-image: initial; border-left-style: none; border-left-width: 0px; border-right: 1px solid rgb(209, 209, 209); border-top: 1px solid rgb(240, 240, 240); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{140}&quot; paraid=&quot;596572267&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Copilot can check and improve the tense, the passive voice, the readability, and the personal tone of the content.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr aria-rowindex=&quot;3&quot; class=&quot;TableRow SCXW76454911 BCX8&quot; role=&quot;row&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; height: 20px; margin: 0px; overflow: visible; padding: 0px; user-select: text;&quot;&gt;       &lt;td class=&quot;FirstCol LastRow AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedLightMode SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: white; border-bottom: 1px solid rgb(209, 209, 209); border-image: initial; border-left: 1px solid rgb(209, 209, 209); border-right-style: none; border-right-width: 0px; border-top: 1px solid rgb(240, 240, 240); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{172}&quot; paraid=&quot;362504789&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Copilot&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt; may or may not respect the writer&#39;s style&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;        &lt;td class=&quot;LastCol LastRow AdvancedProofingLightMode ContextualSpellingLightMode SpellingErrorLightMode SimilarityReviewedLightMode SimilarityUnreviewedLightMode AddInCritiqueRedLightMode AddInCritiqueGreenLightMode AddInCritiqueBlueLightMode AddInCritiqueLavenderLightMode AddInCritiqueBerryLightMode HighContrastShading SCXW76454911 BCX8&quot; data-celllook=&quot;69905&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-clip: padding-box; background-color: white; border-bottom: 1px solid rgb(209, 209, 209); border-image: initial; border-left-style: none; border-left-width: 0px; border-right: 1px solid rgb(209, 209, 209); border-top: 1px solid rgb(240, 240, 240); margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text; vertical-align: top;&quot;&gt;         &lt;div class=&quot;TableCellContent SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; overflow: visible; padding: 4px; user-select: text;&quot;&gt;           &lt;div class=&quot;OutlineElement Ltr SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;&quot;&gt;             &lt;p align=&quot;left&quot; class=&quot;Paragraph SCXW76454911 BCX8&quot; lang=&quot;EN-US&quot; paraeid=&quot;{8419a312-d777-450f-9228-e2c06d7a17c2}{176}&quot; paraid=&quot;1794936005&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; font-kerning: none; margin: 0px; overflow-wrap: break-word; padding: 0px; text-indent: 0px; user-select: text; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;TextRun SCXW76454911 BCX8&quot; data-contrast=&quot;auto&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-variant-ligatures: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;span class=&quot;NormalTextRun SCXW76454911 BCX8&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;Copilot&#39;s suggestions may vary depending on the instructions given by the writer. The writer can try to specify the style they want and see what Copilot does.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCXW76454911 BCX8&quot; data-ccp-props=&quot;{}&quot; style=&quot;-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; line-height: 17px; margin: 0px; padding: 0px; user-select: text;&quot;&gt;&lt;font style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/8872554613649874261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/8872554613649874261'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/copilot-productivity-tip-structured.html' title='Copilot Productivity Tip – Structured formatting in Word'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgQVqaqmiyEtmwmU_y5JG_DM2_wbhPFK87Nblsq0aAgzHhGPraU7WfeQVUZV2rnpy0tlyY995oHkYY_tcEibngyYvJuPOB2I8Yzw0i5x2GuRLoyZiRfTgFkcUq1KpVV69kEYMPM7L1WVQD2HQr_z_hFFwGmdW-oc_3692tpenitZV9qeNzsezK0OLdwAr3a=s72-w640-h640-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-1010861614473946973</id><published>2024-03-22T10:35:00.008+01:00</published><updated>2024-03-22T10:35:00.135+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Copilot Productivity Tip – Word re-write</title><content type='html'>&lt;p&gt;&lt;strong&gt;Time spent per day before: 30-60 minutes&lt;/strong&gt; per document     &lt;br /&gt;&lt;strong&gt;Time spent with Copilot: 5-10 minutes&lt;/strong&gt; per document&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/office/transform-your-content-with-copilot-in-word-923d9763-f896-4da7-8a3f-5b12c3bfc475&quot; target=&quot;_blank&quot;&gt;Transform your content with Copilot in Word&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=stqy1aGTDtc&quot; target=&quot;_blank&quot;&gt;Copilot in Word&lt;/a&gt; (video)&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW-SRBA_6DwOd0pm8KB5R_j0MlKvEbU6elGe5jm0SHnitEigjqR4slgY_YIwbnwczTBqoKGhX33qxqbaP3o3iJyjDt3IKvS44p2pI5NuykNhFDiK9JG3ByrdNLajtDp2Ltb4lWwocjsL2hZNGRBWbJRQphW_3F0FcgEtKmLVaIa6F5pvFfO031yFx9v9Dn/s1024/image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1024&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW-SRBA_6DwOd0pm8KB5R_j0MlKvEbU6elGe5jm0SHnitEigjqR4slgY_YIwbnwczTBqoKGhX33qxqbaP3o3iJyjDt3IKvS44p2pI5NuykNhFDiK9JG3ByrdNLajtDp2Ltb4lWwocjsL2hZNGRBWbJRQphW_3F0FcgEtKmLVaIa6F5pvFfO031yFx9v9Dn/w640-h480/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Writing in a language that is not one&#39;s own can be challenging. That is why Copilot can help rewrite the content to make it more consistent and clear. Copilot can correct the tense, the passive voice, the readability, and the personal tone of the content. This way readers can enjoy the content more and understand the main points better.&lt;/div&gt;  &lt;p&gt;Some writers may have a specific style that they want to use. Copilot in Word may or may not respect that style, depending on the instructions given. But one can always try to tell Copilot what kind of style they want and see what happens. Maybe Copilot will surprise them with some creative suggestions. Or maybe Copilot will ignore them and do whatever it wants. Who knows?&lt;/p&gt;  &lt;h3&gt;Original draft&lt;/h3&gt;  &lt;p&gt;Here’s the original blog-post I started out with before throwing Copilot at it.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Not everyone is a native writer of the language they produce content in. Thus, using Copilot to rewrite your content for consistency in terms of tense, passive language, readability, and personal flavor will ensure those consuming the content have a better experience and more clearly pick up on the points you want to come across in your argumentation.&lt;/p&gt;    &lt;p&gt;If you have a particular writing style, then Copilot in Word may or may not be able to assist, but you can try to add this as part of the prompting instructions and verify the outcome.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Automatic rewrite&lt;/h3&gt;  &lt;p&gt;When using the auto rewrite feature this is what I ended up with.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1BgZvmuLlp8s_0tBiRQsKvnSjfVjxXinA&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;192&quot; src=&quot;https://lh3.googleusercontent.com/d/1OT8rWLxnUsR0ct63v_OgEdBXIT_XMuzB&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;   &lt;blockquote&gt;   &lt;p&gt;Sometimes, people write content in a language that is not their native one. Therefore, using Copilot to edit your content for consistency in grammar, voice, clarity, and tone will help those who read the content have a better experience and understand the messages you want to convey in your reasoning.&lt;/p&gt;    &lt;p&gt;If you prefer a specific writing style, then Copilot in Word may or may not help you, but you can attempt to include this in the prompting instructions and check the result.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Manual prompt for rewrite&lt;/h3&gt;  &lt;p&gt;This time around I wanted to give more instructions to simplify my writing.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Rewrite the text using shorter sentences and language understood by an audience with little experience in Copilot or Word. Make instructions concise and relatable for beginners.“&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Do you write in a language that is not your first one? Then Copilot can help you make your writing better. It can fix grammar mistakes, make sentences easier to read, and use the right words for your message.&lt;/p&gt;    &lt;p&gt;Do you have a favorite way of writing? Copilot in Word might be able to copy it. Just tell it what you want and see what it does. You can always change it if you don&#39;t like it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Manual prompt with styling&lt;/h3&gt;  &lt;p&gt;And this is the prompt I ended up with for the final post, as it reflects some of my personal writing style. Maybe this will makes it way into Word eventually using writing samples for style.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Rewrite the text using shorter sentences and language understood by an audience with little experience in Copilot or Word. Make the text longer than the original, write in third-person tense and **DO NOT** use *I*, *You*, *Your* and *We*. Throw in some subtle irony and sarcasm.”&lt;/em&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1010861614473946973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1010861614473946973'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/copilot-productivity-tip-word-re-write.html' title='Copilot Productivity Tip – Word re-write'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW-SRBA_6DwOd0pm8KB5R_j0MlKvEbU6elGe5jm0SHnitEigjqR4slgY_YIwbnwczTBqoKGhX33qxqbaP3o3iJyjDt3IKvS44p2pI5NuykNhFDiK9JG3ByrdNLajtDp2Ltb4lWwocjsL2hZNGRBWbJRQphW_3F0FcgEtKmLVaIa6F5pvFfO031yFx9v9Dn/s72-w640-h480-c/image.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-1150041628655842928</id><published>2024-03-20T10:29:00.010+01:00</published><updated>2024-03-20T11:58:15.922+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Copilot Productivity Tip – Teams Message Rewrite</title><content type='html'>&lt;p&gt;&lt;strong&gt;Time spent per day before: 10 minutes&lt;/strong&gt;, rethinking the words to use     &lt;br /&gt;&lt;strong&gt;Time spent with Copilot: 1-2 minutes&lt;/strong&gt;, letting Copilot do the work &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/office/rewrite-and-adjust-your-messages-with-copilot-in-microsoft-teams-53315d9c-93be-45ab-9004-2f8205725cc7&quot; target=&quot;_blank&quot;&gt;Rewrite and adjust your messages with Copilot in Microsoft Teams&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd7xAtmr46YE1Rdqr23Jbr_reRjIrhSjNIiyozlhkFht_S2hGtBipHabg9jYoRZ_1rGBc96eHPzpx44kRu7xYftDmSCo8mlf1yyU6dNA-ycQCtJySlB1xyF5SOE0RR_5QKDZlrgTu9bIEiBXSPoUnCh0X_g-ww7ojtIiYlR4BANK_mgbD71l4aikBGo0uJ&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1024&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjd7xAtmr46YE1Rdqr23Jbr_reRjIrhSjNIiyozlhkFht_S2hGtBipHabg9jYoRZ_1rGBc96eHPzpx44kRu7xYftDmSCo8mlf1yyU6dNA-ycQCtJySlB1xyF5SOE0RR_5QKDZlrgTu9bIEiBXSPoUnCh0X_g-ww7ojtIiYlR4BANK_mgbD71l4aikBGo0uJ=w640-h480&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;One of the challenges when writing is to convey feelings or emotion on what you type. I like to be short and concise in my messaging, but sometimes this may not be the best way to communicate when talking to people you don&#39;t know, or even people you know.&lt;/div&gt;  &lt;p&gt;Let’s take the message&lt;em&gt; “I don’t agree with your points”&lt;/em&gt; and run it thru Copilot to make it longer and Enthusiastic.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1jAoEYFxVT2es0BdmXcCicQyR4zvid9VI&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;484&quot; src=&quot;https://lh3.googleusercontent.com/d/1QIuUTc1ZzprVsUNTbc5kZp3KpjmH7GSp&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;505&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The output can be something like: &lt;em&gt;“Thank you for sharing your perspective. However, I have a different view on the matter and I would like to explain why I disagree with some of the points you made.”&lt;/em&gt; which is less likely to piss Vesa off :)&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1j2d8g166CfqJaFGTSVO7dHM2elzHCmlC&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://lh3.googleusercontent.com/d/1UM0AWLYUWKoWaXoMxf72d9lnIoMvQJKy&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;604&quot; /&gt;&lt;/a&gt;   &lt;p&gt;You can even do a customized prompt for formatting:&lt;em&gt; “Make it sound like it was written by Super Mario”&lt;/em&gt;. The above prompt is actually a prompt hack to overcome Responsible AI to add some Paolo Italian flavor into the message.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1RUJ6Ha-xiU44KqqAZpRGRIT1fMtmkNaq&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://lh3.googleusercontent.com/d/1foZTPu2WNyTHOIiITwa6mFZaIk6sBasV&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;596&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1150041628655842928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1150041628655842928'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/copilot-productivity-tip-teams-message.html' title='Copilot Productivity Tip – Teams Message Rewrite'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjd7xAtmr46YE1Rdqr23Jbr_reRjIrhSjNIiyozlhkFht_S2hGtBipHabg9jYoRZ_1rGBc96eHPzpx44kRu7xYftDmSCo8mlf1yyU6dNA-ycQCtJySlB1xyF5SOE0RR_5QKDZlrgTu9bIEiBXSPoUnCh0X_g-ww7ojtIiYlR4BANK_mgbD71l4aikBGo0uJ=s72-w640-h480-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-139406259333991298</id><published>2024-03-18T10:28:00.014+01:00</published><updated>2024-03-19T14:50:45.595+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Copilot Productivity Tip – Teams Chat Catchup</title><content type='html'>&lt;p&gt;&lt;strong&gt;Time spent per day before: 30-60 minutes&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;Time spent with Copilot: 5-15 minutes&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/office/use-copilot-in-microsoft-teams-chat-and-channels-cccccca2-9dc8-49a9-ab76-b1a8ee21486c&quot; target=&quot;_blank&quot;&gt;Use Copilot in Microsoft Teams chat and channels&lt;/a&gt; (video)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg6TErLa0L32nojsSLvrdlE-G1WHN1t98NOuNppoOA8gP68TlmhptUasTrHbleLtV7XBN3F8ZCpSjsLMrHbI9KyCWJWqbtmmNVn6yMzUb4Dbo1R7E0jFqaJSPqe95-JkuSG7h6UhmrD9QBZSsyHEMKpyh_-WpVmvweiktFVxLqU4AUv2GLnYDF94-kLX_PW&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1024&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg6TErLa0L32nojsSLvrdlE-G1WHN1t98NOuNppoOA8gP68TlmhptUasTrHbleLtV7XBN3F8ZCpSjsLMrHbI9KyCWJWqbtmmNVn6yMzUb4Dbo1R7E0jFqaJSPqe95-JkuSG7h6UhmrD9QBZSsyHEMKpyh_-WpVmvweiktFVxLqU4AUv2GLnYDF94-kLX_PW=w640-h480&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;My workday at Microsoft involves communication with multiple teams spread around the globe, which means in-person communication is not always possible. This is why Teams has become the go-to tool for many conversations and discussions. When I start my day at 8am in the morning I know chats has happened in other time zones, and instead of reading everything right away I can use Copilot catchup for a summary, and then decide if I need to read it all.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3-UNBY82iDP32KhnijYG0UHe3CmjfpyRM6TTML05q50HyiZLjg8Vo5-cmOVuxEAjZTC3BQIfdbY1eJK_rlOSsMXeSsi8T6eFpgGTsdqrzQ4_cU1ts8ZqfFVHfqSAWOyA19ELZ4hnnlaGpg5F67uUsteQSpPja1NmSEP_NLItFD77JhWSK-AG8rIXj6YEW&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;95&quot; data-original-width=&quot;950&quot; height=&quot;64&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3-UNBY82iDP32KhnijYG0UHe3CmjfpyRM6TTML05q50HyiZLjg8Vo5-cmOVuxEAjZTC3BQIfdbY1eJK_rlOSsMXeSsi8T6eFpgGTsdqrzQ4_cU1ts8ZqfFVHfqSAWOyA19ELZ4hnnlaGpg5F67uUsteQSpPja1NmSEP_NLItFD77JhWSK-AG8rIXj6YEW=w640-h64&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;I typically use the “Summarize what I&#39;ve missed” Copilot suggested prompt inline in the chat which opens the Copilot pane, or I open the pane manually as seen below with prompts such as “Highlights from the past day” or “Highlights from the past 7 days”.&lt;/p&gt;  &lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;10&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1wsySXZDV3P9ECnwEfV8IxKUPR20jRjiA&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;634&quot; src=&quot;https://lh3.googleusercontent.com/d/14zNCGl3HdeGHnwnbvK3uLWRbXZI2O5TF&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;318&quot; /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1-__o7zleWBy0ldf8v18WINIrOHSxMIAT&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;830&quot; src=&quot;https://lh3.googleusercontent.com/d/1-8ojlrrNQBhNht6R-IRy8Tzv2O84u3Vl&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/139406259333991298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/139406259333991298'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/copilot-productivity-tip-teams-chat.html' title='Copilot Productivity Tip – Teams Chat Catchup'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg6TErLa0L32nojsSLvrdlE-G1WHN1t98NOuNppoOA8gP68TlmhptUasTrHbleLtV7XBN3F8ZCpSjsLMrHbI9KyCWJWqbtmmNVn6yMzUb4Dbo1R7E0jFqaJSPqe95-JkuSG7h6UhmrD9QBZSsyHEMKpyh_-WpVmvweiktFVxLqU4AUv2GLnYDF94-kLX_PW=s72-w640-h480-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-6173464108865287978</id><published>2024-03-15T10:42:00.000+01:00</published><updated>2024-03-15T10:42:31.211+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><title type='text'>Copilot Productivity Tip – Teams Meeting Insights</title><content type='html'>&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj90x9EgxJO7wt8jIIMW8_HGNb8Q9ywYoNui8rNOixW5eZ66xP3dyflv7KckctNZSzFl13K-QYoOY3n4ozmwPFadPy3L7Xd8llBhiDCGsb4PGZUHm4eZDkIWsF4NtmwNWACg1-5jnU0Sr7O5Oa_S0hIpR2i64-HPFZN6bNm6A68oOOE9cFVvmxdyetn5ZTk&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;729&quot; data-original-width=&quot;765&quot; height=&quot;610&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj90x9EgxJO7wt8jIIMW8_HGNb8Q9ywYoNui8rNOixW5eZ66xP3dyflv7KckctNZSzFl13K-QYoOY3n4ozmwPFadPy3L7Xd8llBhiDCGsb4PGZUHm4eZDkIWsF4NtmwNWACg1-5jnU0Sr7O5Oa_S0hIpR2i64-HPFZN6bNm6A68oOOE9cFVvmxdyetn5ZTk=w640-h610&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Time spent per day before: 0-120 minutes&lt;br /&gt;&lt;/strong&gt;&lt;div&gt;&lt;div&gt;&lt;strong&gt;Time spent with Copilot: 0-15 minutes&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;https://support.microsoft.com/en-au/office/get-started-with-copilot-in-microsoft-teams-meetings-0bf9dd3c-96f7-44e2-8bb8-790bedf066b1&quot; target=&quot;_blank&quot;&gt;Get started with Copilot in Microsoft Teams meetings&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rLC2frnUasw&quot; target=&quot;_blank&quot;&gt;Copilot in Teams and Intelligent recap | After the meeting&lt;/a&gt; (video)&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/videoplayer/embed/RW1chhn&quot; target=&quot;_blank&quot;&gt;Copilot in Teams | Catch up on meetings&lt;/a&gt; (video)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The beauty of online meetings with transcripts is the ability to quickly go back and find key points later without having to watch the recording or read thru the full transcript.&amp;nbsp;&lt;/p&gt;  &lt;p&gt;By default Teams provides an AI notes section with a quick summary, and using the Copilot pane you can ask more direct questions such as summarizing your talking points, or ask what your action items were for the meeting.&lt;/p&gt;  &lt;p&gt;My best example is a late night meeting where I forgot to take notes and the next morning I knew I was supposed to contact an “Andrew”, but had forgotten the full name. Requesting the name in the meetings Copilot quickly gave me the name, saving me around 15 minutes and some grief.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEim1fH-dpMBYnRep5PPXmyi6QGj5up2Pbi5Bq2KBccgv921XsAXX0u1xr0FDVFsYe80ljKcUe5z7AOrSVJ56mrp60tsoxqYhYos_UVIx5M9v84HYxYYxzBa52rH9D2W_3Qe-9we2nddIe4Nxz61rPLcObZl8VgqE8W05po-Cs4vxjECsi0hw9LAk6ZaS6yn&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;712&quot; data-original-width=&quot;1024&quot; height=&quot;446&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEim1fH-dpMBYnRep5PPXmyi6QGj5up2Pbi5Bq2KBccgv921XsAXX0u1xr0FDVFsYe80ljKcUe5z7AOrSVJ56mrp60tsoxqYhYos_UVIx5M9v84HYxYYxzBa52rH9D2W_3Qe-9we2nddIe4Nxz61rPLcObZl8VgqE8W05po-Cs4vxjECsi0hw9LAk6ZaS6yn=w640-h446&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6173464108865287978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6173464108865287978'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/copilot-productivity-tip-teams-meeting.html' title='Copilot Productivity Tip – Teams Meeting Insights'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEj90x9EgxJO7wt8jIIMW8_HGNb8Q9ywYoNui8rNOixW5eZ66xP3dyflv7KckctNZSzFl13K-QYoOY3n4ozmwPFadPy3L7Xd8llBhiDCGsb4PGZUHm4eZDkIWsF4NtmwNWACg1-5jnU0Sr7O5Oa_S0hIpR2i64-HPFZN6bNm6A68oOOE9cFVvmxdyetn5ZTk=s72-w640-h610-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-960790620387369622</id><published>2024-03-08T17:12:00.002+01:00</published><updated>2024-03-19T14:57:04.191+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint framework"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><category scheme="http://www.blogger.com/atom/ns#" term="spfx"/><title type='text'>Allowing arbitrary custom scripting in SharePoint Online, or not? – that is the question! (aka Stealing your data since 2001!)</title><content type='html'>&lt;p&gt;…and the answer is, as it always has been, NO!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhuuTsflU_GDd0QgZvDUNpcErgKwsUcqDZQSGE00Rtls75CCf-dkqY8O_PoEnatfDf9YNCpeEH0FpdjWMFN8lirMZM4Qm32589IFap_3c0d6QM5pLVxmrS5lkox3wI0fstmpziQiJQF5KB-P2Skk1UW6powxzi11S2-4_NHJ7tYwIoPjfS7fx-Hyfi3gSnc&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;630&quot; data-original-width=&quot;1024&quot; height=&quot;394&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhuuTsflU_GDd0QgZvDUNpcErgKwsUcqDZQSGE00Rtls75CCf-dkqY8O_PoEnatfDf9YNCpeEH0FpdjWMFN8lirMZM4Qm32589IFap_3c0d6QM5pLVxmrS5lkox3wI0fstmpziQiJQF5KB-P2Skk1UW6powxzi11S2-4_NHJ7tYwIoPjfS7fx-Hyfi3gSnc=w640-h394&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Disclaimer: the opinions of this post are mine entirely, and nothing to do with my work at Microsoft. I have not changed opinion on this matter in the past many many years.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Sparked by the recent message center post &lt;a href=&quot;https://admin.microsoft.com/Adminportal/Home?#/MessageCenter/:/messages/MC714186&quot; target=&quot;_blank&quot;&gt;MC714186 – Remove Custom Script setting in OneDrive and SharePoint web&lt;/a&gt;, I figured I’d write out my stance and my full support of the planned change.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Summary: The Custom Script setting in OneDrive and SharePoint web will be removed in March 2024. A new PowerShell command, &quot;DelayDenyAddAndCustomizePagesEnforcement&quot;, has been introduced to delay the change to custom script set on the Tenant until mid-November 2024. The NoScriptSite setting will be configured to True for all existing SharePoint sites and OneDrive sites except for specific site templates. Existing scripts in OneDrive and SharePoint sites will remain unaffected. Administrators can permit the execution of custom scripts on specific SharePoint sites using the Set-SPOSite command.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;In the above summary I want to point out that “existing scripts will remain unaffected” means classic page injections. Not SPFx solutions on with the setting requiresCustomScript=true.&lt;/strong&gt;&lt;/p&gt;  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;  &lt;h3&gt;The challenge&lt;/h3&gt;  &lt;p&gt;SharePoint by design is a JavaScript application and has always allowed for extensibility in the UX. In modern ways extensibility is achieved via the SharePoint Framework (SPFx), which you should use, and that is ok. Because by virtue of how SPFx is built any script or logic in a SPFx solution is governed and controlled by design.&lt;/p&gt;  &lt;p&gt;To explain what I mean. By arbitrary code I mean someone can insert and freely modify JavaScript that runs in a SharePoint site or page without anyone noticing. &lt;strong&gt;One example being a bad actor put script on a page which when a person visit the page then transfers all the persons OneDrive files to evil.corp in the background without the person ever knowing.&lt;/strong&gt; And this has been possible with SharePoint in classic experiences since always, and also with 3p modern webparts when allowing script to run, or by bypassing settings for a site.&lt;/p&gt;  &lt;p&gt;When writing code in a SPFx solution, it is no longer arbitrary. Someone wrote it, built it, and then handed the package over to a person with &lt;strong&gt;SharePoint admin role rights&lt;/strong&gt; to install it (or by an admin role proxy if a site has it’s own app catalog). How diligent the process is for code review and installation is up to each organization, but at least the setup allows for a governed process to help control what is installed into a tenants SharePoint Online experience.&lt;/p&gt;  &lt;p&gt;Arbitrary script on the other hand would be JavaScript added to SharePoint sites or pages by any regular user with edit rights or a site administrator. Every Team or Group creator is a site administrator of the associated site, and this is not very controlled in my opinion. With classic SharePoint, script can be injected or allowed via the Script Editor web part, via search display templates, and via something called custom actions. When Modern sites were introduced many years ago, allowing these features were by default turned by setting the “Allow and Customize Pages” permission to false. The feature is more commonly renamed in e.g. PnP PowerShell to NoScriptSite. Documentation on turning this on or off can be found at &lt;a href=&quot;https://learn.microsoft.com/en-us/sharepoint/allow-or-prevent-custom-script&quot; title=&quot;https://learn.microsoft.com/en-us/sharepoint/allow-or-prevent-custom-script&quot;&gt;https://learn.microsoft.com/en-us/sharepoint/allow-or-prevent-custom-script&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Back to the message center post and what changes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;In March, the SharePoint admin UX setting to allow custom script on OneDrive sites or self-service sites is going away, and is being replaced by a PowerShell cmdlet function &lt;strong&gt;Set-SPOTenant DelayDenyAddAndCustomizePagesEnforcement&lt;/strong&gt; which you can use until mid-November 2024.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;All new and existing sites will be set to block custom scripts unless they were created with any of these web templates: BLANKINTERNETCONTAINER#0, CMSPUBLISHING#0, BLANKINTERNET#0. GROUP#0, APPCATALOG#0, CSPCONTAINER#0.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;From mid-November 2024, custom script is disabled for your sites every 24 hours. You can manually re-enable it with for example &lt;em&gt;Set-SPOSite &amp;lt;SiteURL&amp;gt; –DenyAddAndCustomizePages&lt;/em&gt;. This means you need to set up a scheduled job every day to re-enable it where needed for SPFx solutions relying on this feature, unless you migrate your ungoverned script solutions to governed ones using SPFx.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Should you be worried?&lt;/h3&gt;  &lt;p&gt;If you are still on classic pages, then disregard as you are a lost cause anyways. It’s 2024 people! Modern is no longer modern. It is the new classic.&lt;/p&gt;  &lt;p&gt;Hopefully most customers have moved over to using SharePoint Framework for any custom JavaScript solution running in SharePoint Online by now. However, the elephant in the room is my infamous Modern Script Editor Web Part- &lt;a href=&quot;https://github.com/pnp/sp-dev-fx-webparts/blob/main/samples/react-script-editor/README.md&quot; title=&quot;https://github.com/pnp/sp-dev-fx-webparts/blob/main/samples/react-script-editor/README.md&quot;&gt;https://github.com/pnp/sp-dev-fx-webparts/blob/main/samples/react-script-editor/README.md&lt;/a&gt;. If built without changes then someone has changed the site settings to allow arbitrary script to run for the web part to work. When this is then flipped off every 24 hours by the service, the web part will stop running (which is good!).&lt;/p&gt;  &lt;p&gt;Instead of working the web part will render ugly white space instead.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1wQ3x06QZdiIwAVnNNh5XEUC2m60aI7ul&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;364&quot; src=&quot;https://lh3.googleusercontent.com/d/1pI3Pn9y-peAfmkhkeF93uxfOyAxyy2VG&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;    &lt;br /&gt;Alternatively you rebuild the web part bypassing the custom script check saying it does not rely on custom script (boooooo on you, and bad governance practice).&lt;/p&gt;  &lt;p&gt;It is no secret what my take is on usage of this web part. The sample modern script web part should NEVER be used, and I will argue to my death that there are no good scenarios for it. Sure, it’s quicker to use compared to always creating new SPFx extensions or web parts, but is this ease of use more important than security? My answer is still a big NO! Sure, you may reduce the attack vector by using site scoped app catalogs, and maybe you have the utter most control for who can edit pages in those sites. But is this a long term risk you are willing to take?&lt;/p&gt;  &lt;p&gt;Why not just build your scenario solutions in a governed way thus blocking someone from changing the code? If you have access to someone building the Modern Script Editor web part, then you also have access to someone who can do it the right way.&lt;/p&gt;  &lt;h3&gt;What now?&lt;/h3&gt;  &lt;p&gt;My hope is that people do not run a script every 24h to allow custom script, or that they cheat on building SPFx web parts to bypass scripting. Instead everyone should embrace this opportunity to get their solutions cleaned up – if they haven’t already.&lt;/p&gt;  &lt;p&gt;Happy coding governed solution, and preventing your files from being stolen!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/960790620387369622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/960790620387369622'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/03/allowing-arbitrary-custom-scripting-in.html' title='Allowing arbitrary custom scripting in SharePoint Online, or not? – that is the question! (aka Stealing your data since 2001!)'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhuuTsflU_GDd0QgZvDUNpcErgKwsUcqDZQSGE00Rtls75CCf-dkqY8O_PoEnatfDf9YNCpeEH0FpdjWMFN8lirMZM4Qm32589IFap_3c0d6QM5pLVxmrS5lkox3wI0fstmpziQiJQF5KB-P2Skk1UW6powxzi11S2-4_NHJ7tYwIoPjfS7fx-Hyfi3gSnc=s72-w640-h394-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-6794590908977439750</id><published>2024-01-18T15:34:00.004+01:00</published><updated>2024-01-18T15:34:25.356+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><title type='text'>Easier editing of Microsoft Search verticals in SharePoint sites (finally fixed!)</title><content type='html'>&lt;p&gt;This is perhaps a tiny one, but for the longest time search verticals in a SharePoint site or SharePoint hub site has been a bit of a mystery when you wanted to edit a vertical. To invoke edit, you had to double click the vertical, as there was no Edit button in the ribbon.&lt;/p&gt;&lt;p&gt;The issue has been known since the feature rolled out, but not addressed. I&#39;ll be as blunt to say I decided to take matters into my own hands and just fix it. So here you go, a gift from me to allow a more intuitive way of editing search verticals in SharePoint - as the Microsoft 365 Admin center has had the Edit button always.&lt;/p&gt;&lt;p&gt;At last the experience matches the documentation at&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#manage-site-level-verticals&quot;&gt;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#manage-site-level-verticals&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiqH5yomwXGHvFaGRwnP2zjf2GOTyPdTFDVQRqBYFEtrUchM8_a5vB5us8qguc9JYPANU7uDooqqLLX-y6IKgZGRd8mXKvH6BN9heQ-S-O-1QEu6Uel6K1nBV23Lrn2jAEUXzYo_PmQZ7PyoGygZLfrAW6wXgWTlVpR2ZYGBAQmkPCks3hiTS7uNZlmKpP6&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;620&quot; data-original-width=&quot;995&quot; height=&quot;399&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiqH5yomwXGHvFaGRwnP2zjf2GOTyPdTFDVQRqBYFEtrUchM8_a5vB5us8qguc9JYPANU7uDooqqLLX-y6IKgZGRd8mXKvH6BN9heQ-S-O-1QEu6Uel6K1nBV23Lrn2jAEUXzYo_PmQZ7PyoGygZLfrAW6wXgWTlVpR2ZYGBAQmkPCks3hiTS7uNZlmKpP6=w640-h399&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6794590908977439750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6794590908977439750'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/01/easier-editing-of-microsoft-search.html' title='Easier editing of Microsoft Search verticals in SharePoint sites (finally fixed!)'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiqH5yomwXGHvFaGRwnP2zjf2GOTyPdTFDVQRqBYFEtrUchM8_a5vB5us8qguc9JYPANU7uDooqqLLX-y6IKgZGRd8mXKvH6BN9heQ-S-O-1QEu6Uel6K1nBV23Lrn2jAEUXzYo_PmQZ7PyoGygZLfrAW6wXgWTlVpR2ZYGBAQmkPCks3hiTS7uNZlmKpP6=s72-w640-h399-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-2836601459594323405</id><published>2024-01-11T12:49:00.034+01:00</published><updated>2024-03-19T17:57:56.412+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enterprise search"/><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><title type='text'>Demystifying Author properties on files in SharePoint and search</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtQQWpH6Cl5IXE4i-eZ83sdkZ32IO3p6lzixRfGYDxHWZ8eyQ_go4vPkWi0qTIDmqYIeTKPT60_Y8Rqp0Xn1mFygPJx1oZpYkdnN3gmXU53itTEKxMldMg1Xqw6rP8Zo_mHywkTe2410PneYLtVZ9w85sC6EwE0w1zWFyD7nvxZ23imfE0bPpoDSGUg6bl/s512/demystify.jpg&quot;&gt;&lt;img alt=&quot;demystify&quot; border=&quot;0&quot; height=&quot;516&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtQQWpH6Cl5IXE4i-eZ83sdkZ32IO3p6lzixRfGYDxHWZ8eyQ_go4vPkWi0qTIDmqYIeTKPT60_Y8Rqp0Xn1mFygPJx1oZpYkdnN3gmXU53itTEKxMldMg1Xqw6rP8Zo_mHywkTe2410PneYLtVZ9w85sC6EwE0w1zWFyD7nvxZ23imfE0bPpoDSGUg6bl/s512/demystify.jpg&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;demystify&quot; width=&quot;516&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For as long as I have been doing SharePoint, figuring out what properties to use when filtering or displaying search results in regards to people has been a challenge as the documentation in this space is somewhat lacking. I’m not sure why I haven’t done this writeup earlier, but no time like the present.&lt;/p&gt;  &lt;a href=&quot;http://www.techmikael.com/2024/01/demystifying-author-properties-on-files.html#more&quot;&gt;Read more »&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2836601459594323405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2836601459594323405'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2024/01/demystifying-author-properties-on-files.html' title='Demystifying Author properties on files in SharePoint and search'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtQQWpH6Cl5IXE4i-eZ83sdkZ32IO3p6lzixRfGYDxHWZ8eyQ_go4vPkWi0qTIDmqYIeTKPT60_Y8Rqp0Xn1mFygPJx1oZpYkdnN3gmXU53itTEKxMldMg1Xqw6rP8Zo_mHywkTe2410PneYLtVZ9w85sC6EwE0w1zWFyD7nvxZ23imfE0bPpoDSGUg6bl/s72-c/demystify.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-808319007834452651</id><published>2023-12-08T13:40:00.003+01:00</published><updated>2024-01-12T09:34:37.735+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="copilot"/><title type='text'>AI model bias and why responsible technology matters – exemplified by image generation</title><content type='html'>&lt;p&gt;In this era of AI where ChatGPT with LLM’s has become the hottest topic in computer science since the Apple Macintosh and the IBM PC, I figured I’d do a small write-up on AI model bias and why paying attention to bias is important. This is especially true when it comes to enterprise scenarios where Microsoft is launching a long range of AI powered copilot experiences.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The author of this article works for Microsoft (December 2023) and is an internal champion for responsible ai and technology as well as internal champion for privacy and compliance.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;At Microsoft we have a high bar for delivering responsible AI solutions, which means there is a lot of work put in place to ensure the output from AI systems follow Microsoft’s AI principles to be fair, inclusive, reliable and safe, privacy and security is accounted for, and the systems are accountable.&lt;/p&gt;  &lt;p&gt;Any model, that be a large language model (LLM) or a model to generate image will inherently have bias built in due to the training data used. In smaller models you can manually verify the training data to counter some bias and balance the training set, but as models grow large this becomes inherently harder. I’m not saying there are not systems in place to counter training bias already, but to truly counter bias this has to be built into pre and post processing of input prompts and outputs from the models.&lt;/p&gt;  &lt;p&gt;I will use image generation as an example where I will show the difference between using image creator in Microsoft Designer (&lt;a href=&quot;https://designer.microsoft.com/&quot; title=&quot;https://designer.microsoft.com/&quot;&gt;https://designer.microsoft.com/&lt;/a&gt;) built on DALL·E 3 from OpenAI and Stable Diffusion XL, which is an open source model from Stability.AI (&lt;a href=&quot;https://stability.ai/&quot; title=&quot;https://stability.ai/&quot;&gt;https://stability.ai/&lt;/a&gt;). The Microsoft solution has guardrails in place, where the open source solution do not – unless you add them yourself via prompting. Not saying neither of them are perfect as examples will show.&lt;/p&gt;  &lt;p&gt;I want to call out that any bias shown is not statistically verified, and only based on generating a set of sample random images with the same prompt.&lt;/p&gt;  &lt;h4&gt;Example 1 - photo of correctional officer in a well lit hallway eating a donut&lt;/h4&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1vuxrBpF78lxuzhffvHgeDx169EX68UO9&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;323&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/18qEyIRngpAC2o7TNlaFgz8aPylu1b_a0&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The above eight images are from DALL·E 3. They are all close-up photos showing a fit, light skinned male with dark hair.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1Y_r00wOeM5XTIJA8YulC7yAj3UsowGOs&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;328&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1FH2qlAOd_lCvnYYuE7HiYq3LfK2A71nc&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;In comparison the SDXL images have a wider focal point showing the full body. It’s a mix of male and female people, and also a mix of light and dark skinned people. I would argue the SDXL model is more accurate to what people look like in 2023, while the DALL·E 3 model output “perfect” looking people. If this is due to the images the models are trained on, or the prompt being augmenting to have “perfect” looking people I do not know. &lt;/p&gt;  &lt;p&gt;The default color palette is also different where DALL·E 3 has more green and SDXL has more brownish colors.&lt;/p&gt;  &lt;p&gt;If I add “overweight” to the DALL·E 3 prompt, the Responsible AI filter kicks in and blocks the generation. If I add “fat”, then it works.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1Pp9SuNr2fJKVHEU098DAjbNQd0d9Cios&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;241&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/17vxV81QHb4THRrh6Rr4CwmLOaeGJ7UsV&quot; style=&quot;background-image: none; display: inline; margin: 0px;&quot; title=&quot;image&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With SDXL I can modify the prompt to &lt;em&gt;“&lt;strong&gt;closeup&lt;/strong&gt; photo of a &lt;strong&gt;slim white male&lt;/strong&gt; correctional officer in a well lit hallway eating a donut”&lt;/em&gt; to mimic what DALL·E 3 output by default – to counter the wide angle and real life looking people bias of the model.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1RvUOfm1MufcJyhlEXpPyLMaMLFpz1r8V&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;243&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1jVFsp6AJsRwVtBO5bGAhZaoO5hbOrgte&quot; style=&quot;background-image: none; display: inline; margin: 0px;&quot; title=&quot;image&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Example 2 – woman&lt;/h4&gt;  &lt;p&gt;Let’s try a simple prompt with the subject “woman”. For SDXL I added negative prompting to avoid any nsfw images – which is blocked as part of DALL·E 3 RAI principles.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1IFObD1h2va9w9UVRgqtwBsNVJIhE7k0u&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;339&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1Fh45_Oa4dBUH1Beg7nAnKOpD0CkyIW8m&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;DALL·E 3 seems to pivot towards portrait photo’s when no extra contextual information is given, as that is likely the intent with a simple input subject. They are also all dark haired and seem to be young women.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1LzjrFGHpjl6VMUToAvhD7Gfxa7IQSdbO&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;329&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1flZufK0A0eCoB6e42mbjEGaBhlC8_ENb&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;In comparison SDXL gives a wide variety of image types, pivoting to more art-like images instead of photos.&lt;/p&gt;  &lt;h4&gt;Example 3 – painting of a beautiful norwegian fjord with vikings, with a boing 737 in the sky, in the style of munch’s scream&lt;/h4&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1-prdX8utWW5ZZ7uH3vYxFXHGkAjmCLd3&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;239&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1aEPXGEs5SJERbs56Om6d9rlEdvlm1fkJ&quot; style=&quot;background-image: none; display: inline; margin: 0px;&quot; title=&quot;image&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The DALL·E 3 painting nails the airplane and pretty much the painting style of Edward Munch.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/u/0/d/1pkdY39Ksbhek04Sm7bbVh_qnm2PtR5Rl&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;243&quot; src=&quot;https://lh3.googleusercontent.com/u/0/d/1Mei_y41s5arRQG_AZcz30b3U4EGXvZEt&quot; style=&quot;background-image: none; display: inline; margin: 0px;&quot; title=&quot;image&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The SDXL one is not bad either, but the Munch style is not as visible for this one sample. And the scale of the plane vs. the viking ship and buildings is way off. &lt;/p&gt;  &lt;h4&gt;Learnings&lt;/h4&gt;  &lt;p&gt;These simple examples shows that articulating your intent in prompting is crucial. Either the system has to add guardrails and contextual information to the prompt, or the person prompting has to be articulate on what they want returned and what they do not want returned. And you have to generate many images to find that ONE you really like.&lt;/p&gt;  &lt;p&gt;For online services like Microsoft Designer going the safe route is the only approach as people using the service comes from a wide variety of backgrounds and age groups. Taking that extra measure to ensure everyone feels safe is important to trusting the service.&lt;/p&gt;  &lt;p&gt;Open source solutions you can run on your own PC/phone/table can allow for less guardrails as the individual running it likely has more skill and is using the tool themselves. Maybe the analogy of hiring a carpenter as a service vs. hammering yourself can be used. You trust a hired professional to meet a certain bar, while you are responsible yourself on anything you do.&lt;/p&gt;  &lt;p&gt;When it comes LLM’s we know they are largely based on English text today, and would favor input and output in this language. As they are built on public data, that will influence default writing style as well. fortunately ChatGPT and Microsoft Copilots put a lot of effort into the system prompts put around the user prompt, to counter any bias in the model. This is to ensure grounding in facts and avoid hallucinations. More on that for another post.&lt;/p&gt;  &lt;h4&gt;References&lt;/h4&gt;  &lt;p&gt;I used the service of &lt;a href=&quot;https://designer.microsoft.com/image-creator&quot; title=&quot;https://designer.microsoft.com/image-creator&quot;&gt;https://designer.microsoft.com/image-creator&lt;/a&gt; to create the DALL·E 3 images, and I used the &lt;a href=&quot;https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820&quot; target=&quot;_blank&quot;&gt;Draw Things app&lt;/a&gt; on a MacBook with an 8-bit quantized version of the default SDXL model. The Draw Things app also work on iOS devices.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/808319007834452651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/808319007834452651'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/12/ai-model-bias-and-why-responsible.html' title='AI model bias and why responsible technology matters – exemplified by image generation'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/u/0/d/18qEyIRngpAC2o7TNlaFgz8aPylu1b_a0=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-6796276841021254035</id><published>2023-08-10T12:29:00.006+02:00</published><updated>2023-08-10T12:29:59.942+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft graph"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>How to paginate large results sets for SharePoint items using the Microsoft Graph Search API</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo_T4_7fmuPo9AwHjj1N7RW97HVEBS-C-OldCzTSyWr9cVPG5dGU4_MqN2rEKbiuXfqbIrxySusLuPSXpjFhUXIpFc5ixA6xCxXhcCs1DsDUIybIpyr6IWRTSzv8fvNJeziEAx73FoIhyZI5lKg8rae97g2pqK_573HYTL6-FUjNN3AuJvh38JB4RqDhqE/s1024/_low_poly__many_documents_and_folders_swirling_around_in_the_air_with_large_numerics_speeding_by__office_space__people_working_2455214634.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;512&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo_T4_7fmuPo9AwHjj1N7RW97HVEBS-C-OldCzTSyWr9cVPG5dGU4_MqN2rEKbiuXfqbIrxySusLuPSXpjFhUXIpFc5ixA6xCxXhcCs1DsDUIybIpyr6IWRTSzv8fvNJeziEAx73FoIhyZI5lKg8rae97g2pqK_573HYTL6-FUjNN3AuJvh38JB4RqDhqE/w640-h320/_low_poly__many_documents_and_folders_swirling_around_in_the_air_with_large_numerics_speeding_by__office_space__people_working_2455214634.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;p style=&quot;clear: both;&quot;&gt;If you want to paginate over a large set of results for some reason using the Microsoft Graph Search API, you can employ the logic mentioned for the SharePoint API at&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/pagination-for-large-result-sets&quot; style=&quot;text-align: left;&quot;&gt;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/pagination-for-large-result-sets&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;. Note that this option applies to OneDrive and SharePoint items, not necessarily other content sources available via the Graph Search API (not tested).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Use a basic JSON template like below for your search requests, or modify to add other parameters needed for your request.&lt;/p&gt;&lt;div style=&quot;background-color: #fffffe; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;requests&quot;&lt;/span&gt;: [&lt;/div&gt;&lt;div&gt;        {&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;entityTypes&quot;&lt;/span&gt;: [&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;driveItem&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            ],&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;from&quot;&lt;/span&gt;: &lt;span style=&quot;color: #098658;&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;size&quot;&lt;/span&gt;: 5&lt;span style=&quot;color: #098658;&quot;&gt;00&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;query&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;queryString&quot;&lt;/span&gt;: &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;contoso indexdocid&amp;gt;**LASTID**&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            },&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;fields&quot;&lt;/span&gt;: [&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;indexdocid&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            ],&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;sortProperties&quot;&lt;/span&gt;: [&lt;/div&gt;&lt;div&gt;                {&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;[DocId]&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #a31515;&quot;&gt;&quot;isDescending&quot;&lt;/span&gt;: &lt;span style=&quot;color: #0451a5;&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                }&lt;/div&gt;&lt;div&gt;            ]&lt;/div&gt;&lt;div&gt;        }&lt;/div&gt;&lt;div&gt;    ]&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Times; font-size: medium; white-space: normal;&quot;&gt;Where &lt;b&gt;**LASTID**&lt;/b&gt; is 0 on the initial request. Once you get results back, pick the value of indexdocid of the last result, and use that as &lt;b&gt;**LASTID*&lt;/b&gt;* on the next request. In the below screenshot you would use 2377359 for the seconds request. Continue this logic until you stop getting results, and you should have iterated all files (driveItems) containing the term &lt;b&gt;contoso&lt;/b&gt; for the above sample.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Times; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Times; font-size: medium; white-space: normal;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhdpe9qKrkp6SOcI1oJZvCH85bXQoFKGJIKq5n25MmHlexFETV9nBXIZOvFAsHkWp9TUW0LmDsXw4s3JeiSd0VhsD_tasMy6GV8wDrvBUGBJlAH9mtLbsEkNhMbYX4kOv8c0JLsKvCUOyo8u2mXUu0265FFItz2HyQoSfXPczzsolZA_4IgRbbLHg4s9emy&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;434&quot; data-original-width=&quot;1320&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhdpe9qKrkp6SOcI1oJZvCH85bXQoFKGJIKq5n25MmHlexFETV9nBXIZOvFAsHkWp9TUW0LmDsXw4s3JeiSd0VhsD_tasMy6GV8wDrvBUGBJlAH9mtLbsEkNhMbYX4kOv8c0JLsKvCUOyo8u2mXUu0265FFItz2HyQoSfXPczzsolZA_4IgRbbLHg4s9emy=w640-h210&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6796276841021254035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/6796276841021254035'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/08/how-to-paginate-large-results-sets-for.html' title='How to paginate large results sets for SharePoint items using the Microsoft Graph Search API'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo_T4_7fmuPo9AwHjj1N7RW97HVEBS-C-OldCzTSyWr9cVPG5dGU4_MqN2rEKbiuXfqbIrxySusLuPSXpjFhUXIpFc5ixA6xCxXhcCs1DsDUIybIpyr6IWRTSzv8fvNJeziEAx73FoIhyZI5lKg8rae97g2pqK_573HYTL6-FUjNN3AuJvh38JB4RqDhqE/s72-w640-h320-c/_low_poly__many_documents_and_folders_swirling_around_in_the_air_with_large_numerics_speeding_by__office_space__people_working_2455214634.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-4623489249312602233</id><published>2023-07-03T15:04:00.000+02:00</published><updated>2023-07-03T15:04:05.799+02:00</updated><title type='text'>MacBook Pro M1 with 4K monitors on a ThinkPad USB-C dock</title><content type='html'>&lt;p&gt;I have a couple of 4K monitors at work via a ThinkPad dock. If I were running the native resolution of 3840x2160 pixels the fonts and icons were just too small for my aging eyes. The alternative native resolution was 1980x1080, and then things get too large.&lt;/p&gt;&lt;p&gt;The ideal for me is scaling to 2560x1440. Sure you can do this via the display system settings, but then everything is blurry. But there is a fix.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Install DisplayLink Manager from&amp;nbsp;&lt;a href=&quot;https://www.synaptics.com/products/displaylink-graphics/downloads/macos&quot;&gt;https://www.synaptics.com/products/displaylink-graphics/downloads/macos&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Check the experimental mode for 3008x and 2560x modes support&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKveFlO14MsDqY96rN9GL99TTFXHbdZYi2HWWRE76xUdQgzdsF15-C9HsAtYyDAk63BYc6bXrNW2kCcJEEQy-vvZLujwqLKrsVT8qQl6z6oK98zcmkKNSoh0iC85cHsqKefrgy0Kg1FqqQ9J86RC6xc9BhrlwtiVRilN4SPG6_c6a5u9idD0Zncs3GHPO2&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;636&quot; data-original-width=&quot;1378&quot; height=&quot;199&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKveFlO14MsDqY96rN9GL99TTFXHbdZYi2HWWRE76xUdQgzdsF15-C9HsAtYyDAk63BYc6bXrNW2kCcJEEQy-vvZLujwqLKrsVT8qQl6z6oK98zcmkKNSoh0iC85cHsqKefrgy0Kg1FqqQ9J86RC6xc9BhrlwtiVRilN4SPG6_c6a5u9idD0Zncs3GHPO2=w430-h199&quot; width=&quot;430&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Then pick scaled text in Display settings, getting you a nativ scaled 2560x1440 which is not blurry in HiDPI mode. See&amp;nbsp;&lt;a href=&quot;https://support.displaylink.com/knowledgebase/articles/1993915&quot;&gt;https://support.displaylink.com/knowledgebase/articles/1993915&lt;/a&gt;.&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHvr2HE6Feyo7dHnLgMZd-O1J-4cE79fhfsB7Ap_l4mbNCm3n78WRljv0UoDdfyMrBFTNN2pXLnJyYS7knvJH97CPcBhRlha9mtXlHRh8vch-aKkVUXf7vjt_c_XWiorHhF-mHDKpf8W0YUjQySp4RgyfzFTALuFp9XaKPN-H_lMFKZWRF3GvtVx5nCDHK&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;750&quot; data-original-width=&quot;958&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHvr2HE6Feyo7dHnLgMZd-O1J-4cE79fhfsB7Ap_l4mbNCm3n78WRljv0UoDdfyMrBFTNN2pXLnJyYS7knvJH97CPcBhRlha9mtXlHRh8vch-aKkVUXf7vjt_c_XWiorHhF-mHDKpf8W0YUjQySp4RgyfzFTALuFp9XaKPN-H_lMFKZWRF3GvtVx5nCDHK&quot; width=&quot;307&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4623489249312602233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4623489249312602233'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/07/macbook-pro-m1-with-4k-monitors-on.html' title='MacBook Pro M1 with 4K monitors on a ThinkPad USB-C dock'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhKveFlO14MsDqY96rN9GL99TTFXHbdZYi2HWWRE76xUdQgzdsF15-C9HsAtYyDAk63BYc6bXrNW2kCcJEEQy-vvZLujwqLKrsVT8qQl6z6oK98zcmkKNSoh0iC85cHsqKefrgy0Kg1FqqQ9J86RC6xc9BhrlwtiVRilN4SPG6_c6a5u9idD0Zncs3GHPO2=s72-w430-h199-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-1705340557741959210</id><published>2023-04-25T15:39:00.001+02:00</published><updated>2024-03-19T14:57:34.660+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>New useful managed properties to use in Microsoft Search</title><content type='html'>&lt;a href=&quot;https://lh3.googleusercontent.com/d/1ywLfq9mA5UbhtujUoXrtXYTZKy464_Th&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1VTqHU1S1sWYLZxo7Wg6cTVvkVJXKoLUN&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;  &lt;p&gt;For those working with hub sites in SharePoint you have for a long time used the managed property &lt;strong&gt;DepartmentId&lt;/strong&gt;, later accompanied by &lt;strong&gt;RelatedHubSites&lt;/strong&gt; when hub site hierarchies was enabled.&lt;/p&gt;  &lt;p&gt;Now the time has come to have these properties, and some more, added to the public documentation.&lt;/p&gt;  &lt;p&gt;Take a peek at &lt;a title=&quot;https://learn.microsoft.com/en-us/sharepoint/crawled-and-managed-properties-overview&quot; href=&quot;https://learn.microsoft.com/en-us/sharepoint/crawled-and-managed-properties-overview&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/en-us/sharepoint/crawled-and-managed-properties-overview&lt;/a&gt; which covers these new properties available for online experiences.&lt;/p&gt;  &lt;p&gt;The documentation UX is not ideal, so ensure you scroll the table of properties to the right to read the comments per property. Here’s a copy of the table for reference where I moved the comment for visibility.&lt;/p&gt;  &lt;p&gt;Note the (*) highlighting that it’s not guaranteed that each item has a value in the property.&lt;/p&gt;  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Property name&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Type&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Comment&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Multi-valued&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Queryable&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Searchable&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Retrievable&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Refinable&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Sortable&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;&lt;b&gt;Mapped crawled properties&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;DepartmentId&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Site ID of the hub of the immediate hub. Applies to all items in the hub/associated sites.&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ows_DepartmentId&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;RelatedHubSites&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Site IDs of associated hubs including hub hierarchies. Can be used instead of DepartmentId for most scenarios. Applies to all items in the hub/associated sites.&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ows_RelatedHubSites&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;IsHubSite&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes/No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Applies to the site result of a hub (contentclass=STS_Site)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ows_IsHubSite&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ModifierAADIDs&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of AADIDs for modifiers of a file or page ordered in date descending order. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ModifierDates&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Date and Time&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of modification dates for modifiers of a file or page ordered in date descending order. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ModifierNames&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of the names for modifiers of a file or page ordered in date descending order. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ModifierUPNs&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of UPNs for modifiers of a file or page ordered in date descending order. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ChapterTitle&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of &lt;a href=&quot;https://support.microsoft.com/en-us/office/auto-generated-chapters-on-teams-meeting-videos-7af781d3-ed33-4aae-bb66-0abd4c6c4c98&quot; target=&quot;_blank&quot;&gt;auto-generated chapters on Teams meeting videos&lt;/a&gt;. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ChapterTitle&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ChapterOffset&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Text&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Semi-colon separated list of time codes matching the chapter titles for &lt;a href=&quot;https://support.microsoft.com/office/auto-generated-chapters-on-teams-meeting-videos-7af781d3-ed33-4aae-bb66-0abd4c6c4c98&quot; target=&quot;_blank&quot;&gt;auto-generated chapters on Teams meeting videos&lt;/a&gt;. (*)&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;Yes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;No&lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;         &lt;p&gt;ChapterOffset&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;* Property is not guaranteed to contain data.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1705340557741959210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/1705340557741959210'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/04/new-useful-managed-properties-to-use-in.html' title='New useful managed properties to use in Microsoft Search'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1VTqHU1S1sWYLZxo7Wg6cTVvkVJXKoLUN=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-5375099711759599523</id><published>2023-04-25T14:57:00.002+02:00</published><updated>2024-03-19T14:57:35.547+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>Retirement of Dynamic Ordering feature in classic search experiences</title><content type='html'>&lt;p&gt;In &lt;a href=&quot;https://admin.microsoft.com/Adminportal/Home?ref=MessageCenter/:/messages/MC544789&quot; target=&quot;_blank&quot;&gt;MC44789&lt;/a&gt; post from April 22nd, 2023, Microsoft announced the retirement of the dynamic ordering feature experience in classic search.&lt;/p&gt;  &lt;p&gt;If you don’t know what the feature is, the below image highlights the feature seen in the query builder in classic search result sources, query rules and search web parts.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/10LatGirpJaCOg_GBQ2W_TkEoe9F7xHom&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/188CyYW2J0NlLBAAPOXMVEaGBG6svSk98&quot; width=&quot;644&quot; height=&quot;271&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The above screenshot show a rule which if it matches the term &lt;strong&gt;xrank&lt;/strong&gt; in the title results will be boosted to the top of the result list.&lt;/p&gt;  &lt;p&gt;Wait what?? So I will no longer be able to boost items per my own logic? Sure you can, and this is called out in the MC post – &lt;em&gt;&lt;strong&gt;“Functional parity may be achieved by adding XRANK clauses directly to the query template in the Query Builder dialog.”&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Previously when testing the query from the test tab you could see the output of the final query. However this is no longer the case and I’ll teach you how to transition dynamic rules over to manual XRANK.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1FmsuIIT3AzQamy2r7PTDrrOPjyJgQuWf&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1Gs1aR698mRO6M4abaDgBggEkyFUDhJfN&quot; width=&quot;615&quot; height=&quot;416&quot; /&gt;&lt;/a&gt;  &lt;p&gt;Today using the constant boost, or cb, parameter to rank is not the recommended approach. The reason is that the internal rank scale has changed over the years so the value 5,000 may or may not be required to move something to the top. The below example has a rank of –17921 so adding 5000 would not help.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1_Kv_e1QZj3zl5NbDM4Q5fNPy-i1IlFY9&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1VyJDKs1oWDUJO9Ktui2idl8sIRD5HdRr&quot; width=&quot;644&quot; height=&quot;334&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The recommended parameter to use today is to use standard deviation boost with the stdb parameter.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;em&gt;See &lt;a title=&quot;https://learn.microsoft.com/en-us/graph/search-concept-xrank&quot; href=&quot;https://learn.microsoft.com/en-us/graph/search-concept-xrank&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/en-us/graph/search-concept-xrank&lt;/a&gt; or &lt;/em&gt;&lt;a title=&quot;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#dynamic-ranking-operator&quot; href=&quot;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#dynamic-ranking-operator&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#dynamic-ranking-operator&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; for all parameters.&lt;/em&gt;&lt;/p&gt;    &lt;h3&gt;Manually writing dynamic ordering rules as XRANK&lt;/h3&gt;    &lt;p&gt;A query temple to boost a result to the top can then look like:&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;{?{searchTerms} XRANK(stdb=100) Title:xrank}&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Feel free to replace 100 with a smaller or larger number as needed.&lt;/p&gt;    &lt;p&gt;If you want to boost items with &lt;em&gt;title=foo&lt;/em&gt; pretty high, and less with &lt;em&gt;title=bar&lt;/em&gt; you can use a nested XRANK statement, similar to what multiple dynamic ordering rules will accomplish.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;{?({searchTerms} XRANK(stdb=5) Title:foo) XRANK(stdb=2) Title:bar}&lt;/strong&gt;      &lt;p&gt;If you want to demote results instead of promoting them, use a negative number.&lt;/p&gt;      &lt;p&gt;If you go for decimals instead of integers, I recommend reading &lt;a title=&quot;https://www.techmikael.com/2014/11/you-should-use-exponential-notation.html&quot; href=&quot;https://www.techmikael.com/2014/11/you-should-use-exponential-notation.html&quot;&gt;https://www.techmikael.com/2014/11/you-should-use-exponential-notation.html&lt;/a&gt; to ensure they always work.&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/5375099711759599523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/5375099711759599523'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/04/retirement-of-dynamic-ordering-feature.html' title='Retirement of Dynamic Ordering feature in classic search experiences'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/188CyYW2J0NlLBAAPOXMVEaGBG6svSk98=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-2952206225765680372</id><published>2023-04-25T13:20:00.004+02:00</published><updated>2024-03-19T14:57:36.597+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="howto"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>Filter on managed properties in search with or without values</title><content type='html'>&lt;p&gt;Back in 2014 I wrote the post &lt;a href=&quot;https://www.techmikael.com/2014/08/how-to-search-up-items-which-dont-have.html&quot; target=&quot;_blank&quot;&gt;How To: Search up items which don’t have a value set&lt;/a&gt;, which covers how to write keyword query syntax (KQL) filters to return or restrict items depending on if a specific managed property has a value or not. Recently Microsoft added support to more easily query if managed properties of type &lt;strong&gt;Text&lt;/strong&gt; contain or does not contain a value.&lt;/p&gt;  &lt;p&gt;Here’s a link to the updated documentation: &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#filter-on-items-where-a-text-property-is-empty-or-contains-a-value&quot; target=&quot;_blank&quot; title=&quot;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#filter-on-items-where-a-property-is-empty-or-contains-a-value&quot;&gt;https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference#filter-on-items-where-a-text-property-is-empty-or-contains-a-value&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: The new supported syntax only works for Microsoft 365 / Online&lt;/em&gt;&lt;/p&gt;&amp;nbsp; &lt;a href=&quot;https://lh3.googleusercontent.com/d/14uNHYBqRKA8vmKW7MY2QbqY1o7Y62obk&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;644&quot; src=&quot;https://lh3.googleusercontent.com/d/14yqo9t-Tc7rODkihQkhrEvSxTNGh2MF1&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Items missing or having a text value&lt;/h3&gt;  &lt;p&gt;The syntax is as follows:&lt;/p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;KQL Syntax&lt;/strong&gt;&lt;/td&gt;               &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT &amp;lt;Property Name&amp;gt;:*&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;Items where a property does not have a value&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&amp;lt;Property Name&amp;gt;:*&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;Items where a property does has a value&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;The documentation uses the following example to list SharePoint sites associated to a hub site.&lt;/p&gt;  &lt;p&gt;(&lt;strong&gt;DepartmentId:* OR RelatedHubSites:*&lt;/strong&gt;) AND contentclass:sts_site NOT IsHubSite:true&lt;/p&gt;  &lt;p&gt;Deciphering the query:&lt;/p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;KQL&lt;/strong&gt;&lt;/td&gt;               &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;(DepartmentId:* OR RelatedHubSites:*)&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items which has a value in the original DepartmentId managed property or in the successor RelatedHubSites property&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;contentclass:sts_site&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return only site items&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT IsHubSite:true&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;exclude hub site results&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Note that hubs connected to another hub will not be included in the above query. If you want those, then remove the &lt;strong&gt;NOT IsHubSite:true&lt;/strong&gt; part and post-process the results as needed.&lt;/p&gt;  &lt;p&gt;For completeness let’s cover how to accomplish the same for other types of managed properties.&lt;/p&gt;  &lt;h3&gt;Items missing or having a YesNo value&lt;/h3&gt;  &lt;p&gt;To find items missing a value in a date property the syntax shown in my 2014 seems to no longer work and should be replaced with the following where the date is some low non-used date.&lt;/p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;KQL&lt;/strong&gt;&lt;/td&gt;               &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT (RefinableYesNo00:true OR RefinableYesNo00:false)&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items not having a value in a YesNo property&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;(RefinableYesNo00:true OR RefinableYesNo00:false)&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items having a value in a YesNo property&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;&amp;nbsp;&lt;/h3&gt;  &lt;h3&gt;Items missing or having a date value&lt;/h3&gt;  &lt;p&gt;To find items missing a value in a date property the syntax shown in my 2014 seems to no longer work and should be replaced with the following where the date is some low non-used date.&lt;/p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;KQL&lt;/strong&gt;&lt;/td&gt;               &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT RefinableDate00&amp;gt;1900-01-01&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items not having a value in a date property&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;RefinableDate00&amp;gt;1900-01-01&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items having a value in a date property&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;&amp;nbsp;&lt;/h3&gt;  &lt;h3&gt;Items missing or having a number value&lt;/h3&gt;  &lt;p&gt;For number type managed properties it’s easier as you typically know the range of values.&lt;/p&gt;  &lt;strong&gt;&lt;/strong&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;KQL&lt;/strong&gt;&lt;/td&gt;               &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT Size&amp;gt;=0 &lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;if the managed property only contain positive values, then this will return all items with no value set&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;NOT RefinableDecimal00&amp;gt;=0 NOT RefinableDecimal00&amp;lt;0&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return items where the property RefinableDecimal00 has no value&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot;&gt;Size&amp;gt;=0&lt;/td&gt;        &lt;td valign=&quot;top&quot;&gt;return all items having a value which is greater than your smallest value&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2952206225765680372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2952206225765680372'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/04/filter-on-managed-properties-in-search.html' title='Filter on managed properties in search with or without values'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/14yqo9t-Tc7rODkihQkhrEvSxTNGh2MF1=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-2946927105120744275</id><published>2023-04-07T16:22:00.002+02:00</published><updated>2024-03-19T14:57:37.532+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><title type='text'>There are still new things to learn from the SharePoint Search API I won&#39;t share. I will NOT!</title><content type='html'>&lt;p&gt;…I will, just a tad bit late :)&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://twitter.com/mikaelsvenson/status/1583384288367501312&quot; target=&quot;_blank&quot;&gt;This was a tweet I made Friday October 21st&lt;/a&gt; once I understood the root cause of an API issue which has popped up in the last months. The issue affected PnP Modern Search web parts when query rules were enabled, and also the Search Query Tool with default settings.&lt;/p&gt;  &lt;p&gt;I thought it was a weird API issue which had been introduced as part of an ongoing service upgrade for Microsoft Search lately, but turns out everything was working as expected – except the expected part hasn’t been expected for the past many years. And a big thank you to engineers at Microsoft helping me understand what the root cause is.&lt;/p&gt;  &lt;p&gt;On the API side it manifests itself as follows with the following simple API REST query executed in the SharePoint Search Query Tool where you only get 2 main results where you would expect 10.&lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;https://techmikael.sharepoint.com/_api/search/query?querytext=&amp;#39;mikael&amp;#39;&amp;amp;enablequeryrules=true&amp;amp;enableinterleaving=true&amp;amp;rowlimit=10&amp;amp;clienttype=&amp;#39;ContentSearchHigh&amp;#39;&amp;amp;properties=&amp;#39;EnableMultiGeoSearch2:true&amp;#39;&quot; href=&quot;https://tenant.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;rowlimit=10&quot;&gt;https://tenant.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;rowlimit=10&lt;/a&gt;&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1Lk1CGz7GcbbgkgjFavcVh_mwqSENRw-J&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1jLmZzuqlyr0nC2PA38Qjz7TBelkHFyRg&quot; width=&quot;644&quot; height=&quot;327&quot; /&gt;&lt;/a&gt;   &lt;p&gt;Where are the rest of my 10 results? Well, they happen to be located in the Secondary Results, a place I never looked.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1SZGeuhFcato0XsyqqzfJQtidnsLaV4OB&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1CwPSG-HhCDVwG5uGfkDTA-WwVgOh7bco&quot; width=&quot;542&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;   &lt;p&gt;I’ll explain the behavior, and it is actually correct (sort of), and I will explain why this happens now in 2022.&lt;/p&gt;  &lt;h3&gt;A trip down memory lane&lt;/h3&gt;  &lt;p&gt;When SharePoint 2013 was released Microsoft released the feature of query rules, which allowed to bring in result blocks into the search results as seen below.&lt;/p&gt;  &lt;p&gt;The below screenshot triggers the rule “People Name in SharePoint” which bring in two result blocks.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/14aUv5qJ9VTRnOoLP1WtGsGNaK0_Tirk6&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1DVsQ_qhLY2AxgCyQDMxktpPQFF4QB7jx&quot; width=&quot;644&quot; height=&quot;704&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And the query rule definition&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1OP6oHrpAjVEQe88_s4HaUUAF0yDd13Ei&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1mIMyjZUeKiF4Am4_93wsvUK0g-5dg6MD&quot; width=&quot;644&quot; height=&quot;403&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The definition above says to always place people on top, and possible show documents authored by the person as a block within the results, or interleaved.&lt;/p&gt;  &lt;p&gt;The thing is that the logic/setting to have it ranked has changed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Todays logic – changed in October 2021&lt;/strong&gt;     &lt;br /&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1IjFGmMdLJoVO_DQnjir95l7DfJPsy-KS&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1Ba1GG60LxQLMJF8uGdEtFkxjnWH1miS-&quot; width=&quot;644&quot; height=&quot;198&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The old logic&lt;/strong&gt;&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1dsben_clovv9vCNnzK6kltbIS7ynJoVr&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1GjEa1INV8NvAtZzDhvO8oaLMNzVTEMwt&quot; width=&quot;644&quot; height=&quot;174&quot; /&gt;&lt;/a&gt;   &lt;p&gt;The old logic introduced with SharePoint 2013 would start the block high up, and if results in the block was not clicked it would move down the page, and eventually off the page, which is what has happened for most customers over the years.&lt;/p&gt;  &lt;p&gt;The new logic now introduced will ALWAYS interleave the block on the page 1 results, never moving it off the page.&lt;/p&gt;  &lt;h3&gt;So how does this affect the API?&lt;/h3&gt;  &lt;p&gt;By default an API query will invoke query rules unless explicitly turned off, e.g. the above query &lt;a title=&quot;https://techmikael.sharepoint.com/_api/search/query?querytext=&amp;#39;mikael&amp;#39;&amp;amp;enablequeryrules=true&amp;amp;enableinterleaving=true&amp;amp;rowlimit=10&amp;amp;clienttype=&amp;#39;ContentSearchHigh&amp;#39;&amp;amp;properties=&amp;#39;EnableMultiGeoSearch2:true&amp;#39;&quot; href=&quot;https://tenant.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;rowlimit=10&quot;&gt;https://tenant.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;rowlimit=10&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As Modern Search was introduced quite some time back this has greatly reducing the use of the classic search center. This means that people haven’t clicked results in result blocks from quite some time, no clicks are recorded and the block moved off the page – never appearing in API queries.&lt;/p&gt;  &lt;p&gt;Now as the logic has changed, the blocks come back, which is not a bug, but maybe not expected.&lt;/p&gt;  &lt;p&gt;Together with query rules there is another API setting available, one I have never thought about, but it’s been there all along. “Enable Interleaving” which by default is set to true documented at &lt;a title=&quot;https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/jj262234(v=office.15)&quot; href=&quot;https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/jj262234(v=office.15&quot;&gt;https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/jj262234(v=office.15)&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Of course, if you don’t need query rules for your scenario you should always disable them on the API call. Problem solved!&lt;/p&gt;  &lt;p&gt;Then again, using the PnP modern search web parts a common scenario is to use promoted results, and thus you need query rules enabled. Which leads to queries on people names triggering the original “People names rules” causing interleaving to happen and the results split into primary and secondary result tables in the response.&lt;/p&gt;  &lt;p&gt;The solution then is to set &lt;strong&gt;EnableInterleaving=false.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Changing the query to &lt;a title=&quot;https://techmikael.sharepoint.com/_api/search/query?querytext=&amp;#39;mikael&amp;#39;&amp;amp;enableinterleaving=false&amp;amp;rowlimit=10&amp;amp;clienttype=&amp;#39;ContentSearchHigh&amp;#39;&amp;amp;properties=&amp;#39;EnableMultiGeoSearch2:true&amp;#39;&quot; href=&quot;https://contoso.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;enableinterleaving=false&amp;amp;rowlimit=10&quot;&gt;https://contoso.sharepoint.com/_api/search/query?querytext=&#39;mikael&#39;&amp;amp;enableinterleaving=false&amp;amp;rowlimit=10&lt;/a&gt; ensure 10 results as expected in the primary result set.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1kQfZvsTVAU1tlMDTD0XR7Oa4lQCuT6ZU&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1WMhh0-aXDt0ClbbuwIO_l19YHcTThduM&quot; width=&quot;644&quot; height=&quot;444&quot; /&gt;&lt;/a&gt;   &lt;p&gt;I have released a fix to the Query Tool which by default will disable interleaving, or you can set it yourself.&lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;https://github.com/pnp/PnP-Tools/releases&quot; href=&quot;https://github.com/pnp/PnP-Tools/releases&quot;&gt;https://github.com/pnp/PnP-Tools/releases&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And I have made the same fix to the PnP Modern Search Web Parts v4.8, and any interleaving should be done manually at the template level if strictly needed.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2946927105120744275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/2946927105120744275'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/04/there-are-still-new-things-to-learn.html' title='There are still new things to learn from the SharePoint Search API I won&#39;t share. I will NOT!'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1jLmZzuqlyr0nC2PA38Qjz7TBelkHFyRg=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-3581866515525206466</id><published>2023-04-07T16:02:00.003+02:00</published><updated>2024-03-23T17:22:42.001+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>Query variable trick in Microsoft Search verticals (and classic)</title><content type='html'>&lt;p&gt;Microsoft has been working on both classic and modern scenarios for Microsoft Search, and evaluating existing solutions to determine the best way to support query variables. This post is not exclusive to Microsoft Search, and the same technique can be used with any SharePoint classic search experience. The only difference is the type of query variables that are supported for each experience.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;For supported query variables in Microsoft Search modern experiences see &lt;/em&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#profile-query-variables&quot; title=&quot;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#profile-query-variables&quot;&gt;&lt;em&gt;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#profile-query-variables&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;For supported query variables in classic search see &lt;/em&gt;&lt;a href=&quot;https://www.techmikael.com/2014/05/s15e03-query-variables-constant-trouble.html&quot; title=&quot;https://www.techmikael.com/2014/05/s15e03-query-variables-constant-trouble.html&quot;&gt;&lt;em&gt;https://www.techmikael.com/2014/05/s15e03-query-variables-constant-trouble.html&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Solution&lt;/h3&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1rpwPRCDWF6IexTm9iisRL2KXWwe96AHF&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;216&quot; src=&quot;https://lh3.googleusercontent.com/d/1MyWPXOrqBF_ewitJO78EPi0lhVeLrA-f&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;The sample case solution provide an option to filter search results down a city. All items are tagged with a managed property &lt;strong&gt;City&lt;/strong&gt; to allow for the filtering. On the SharePoint page of the solution the user can pick their own or a specific city. When picking their own, no query parameter is passed with the city. When picking a specific city the user is sent to a vertical in Microsoft Search passing the city value as a query string parameter:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;_/layouts/15/search.aspx/&lt;em&gt;verticalname&lt;/em&gt;?City=Helsinki&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;Which brings us to the query template to use:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;strong&gt;{searchTerms} {?City:{Request.City} NOT UNIQUESTRING}{?City:{Profile.positions.detail.company.address.city}}&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;To see what properties you can use for a Profile query variable, view the output of &lt;/em&gt;&lt;a href=&quot;https://graph.microsoft.com/beta/me/profile&quot; title=&quot;https://graph.microsoft.com/beta/me/profile&quot;&gt;&lt;em&gt;https://graph.microsoft.com/beta/me/profile&lt;/em&gt;&lt;/a&gt;&lt;em&gt; in e.g. Graph Explorer. For our test case the City location for a person is available via the query variable &lt;strong&gt;{Profile.positions.detail.company.address.city}&lt;/strong&gt;. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;What the above query template achieve is: If a query string parameter &lt;strong&gt;City&lt;/strong&gt; is present, this will be used as part of the query. If not present, the City value of the logged in users profile will be used instead. The &lt;strong&gt;{?}&lt;/strong&gt; notation means that if a query variable is missing, the part enclosed within the braces will be removed all together from the template on evaluation.&lt;/p&gt;  &lt;p&gt;I’m using a trick with &lt;strong&gt;UNIQUESTRING&lt;/strong&gt; (which could be any random unique string not present in the search index) to invalidate the last part of the query if we have a query string parameter in the URL. It adds invalid KQL sort of for a property which does not exist, and is thus ignored.&lt;/p&gt;  &lt;p&gt;Let’s add some examples to illustrate the evaluation where the ignored part of the query is highlighted in &lt;font style=&quot;background-color: yellow;&quot;&gt;yellow&lt;/font&gt;, and the inclusion part in &lt;font style=&quot;background-color: lime;&quot;&gt;green&lt;/font&gt;. The user’s profile value for city is &lt;strong&gt;Oslo&lt;/strong&gt;.&lt;/p&gt;  &lt;h4&gt;Scenario 1 – Click on Oslo&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;?City=Oslo&lt;/li&gt;    &lt;li&gt;Users City=Oslo&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ending query: &lt;font style=&quot;background-color: lime;&quot;&gt;City:Oslo&lt;/font&gt; &lt;font style=&quot;background-color: yellow;&quot;&gt;NOT UNIQUESTRINGCity:Oslo&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Scenario 2 – Click on Helsinki&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;?City=Helsinki&lt;/li&gt;    &lt;li&gt;Users City=Oslo&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ending query: &lt;font style=&quot;background-color: lime;&quot;&gt;City:Helsinki&lt;/font&gt; &lt;font style=&quot;background-color: yellow;&quot;&gt;NOT UNIQUESTRINGCity:Oslo&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Scenario 3 – Click on My City&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;?City=&amp;lt;missing&amp;gt;&lt;/li&gt;    &lt;li&gt;Users City=Oslo&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ending query: &lt;font style=&quot;background-color: lime;&quot;&gt;City:Oslo&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Scenario 4 – Click on Helsinki (and missing a city in the profile)&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;?City=Helsinki&lt;/li&gt;    &lt;li&gt; Users City=&amp;lt;missing&amp;gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ending query: &lt;font style=&quot;background-color: lime;&quot;&gt;City:Helsinki&lt;/font&gt; &lt;font style=&quot;background-color: yellow;&quot;&gt;NOT UNIQUESTRING&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Scenario 5 – Click on My City and missing a city in the profile&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;?City=&amp;lt;missing&amp;gt;&lt;/li&gt;    &lt;li&gt; Users City=&amp;lt;missing&amp;gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ending query: &amp;lt;empty&amp;gt; &lt;/p&gt;  &lt;p&gt;And that’s all there is to it. By matching values on a users profile with values on other data you can create quick navigation and filtering scenarios. By adding SPFx into the mix even more control and logic can be built around the search results pages and passing in values.   &lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3581866515525206466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3581866515525206466'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/04/query-variable-trick-in-microsoft.html' title='Query variable trick in Microsoft Search verticals (and classic)'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1MyWPXOrqBF_ewitJO78EPi0lhVeLrA-f=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-4234479344287572630</id><published>2023-03-14T14:58:00.002+01:00</published><updated>2024-03-19T14:57:39.438+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint online"/><title type='text'>Retirement of custom default result sources in Microsoft Search for modern search experiences</title><content type='html'>&lt;p&gt;In November 2021 I posted about bookmarks being the &lt;a href=&quot;https://www.techmikael.com/2021/11/phase-1-of-bookmarks-to-take-over-for.html&quot; target=&quot;_blank&quot;&gt;successor feature of promoted results for organizational scoped searches in Microsoft Search&lt;/a&gt;, which was the first step to modernize the Microsoft Search stack and remove dependencies on classic SharePoint search features and API’s.&lt;/p&gt;  &lt;p&gt;The next step is now under way, as announced by &lt;a href=&quot;https://admin.microsoft.com/Adminportal/Home?ref=MessageCenter/:/messages/MC526131&quot; target=&quot;_blank&quot;&gt;MC526131 - Retirement of custom default result sources in Microsoft Search for modern search experiences&lt;/a&gt;.&lt;/p&gt; &lt;a href=&quot;https://lh3.googleusercontent.com/d/1Awi67om43Uv_S-IgqU3_W4mDw8hb05vc&quot;&gt;&lt;img title=&quot;00049&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;00049&quot; src=&quot;https://lh3.googleusercontent.com/d/1elS88WEjZK8KvEzYR4HuUzPUoJOQCaRw&quot; width=&quot;644&quot; height=&quot;644&quot; /&gt;&lt;/a&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For most customers the change, which will start April 10th 2023, should have no impact. The way KQL rewrite works for a default result source was never intended for modern search experiences as any change was applied to all verticals showing SharePoint and OneDrive content. The ability for an admin to edit and add KQL per vertical in the modern experience is a better and more accurate feature – succeeding the result source feature which doesn’t really work well in modern search experiences in SharePoint. See &lt;a title=&quot;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#keyword-query-language-kql&quot; href=&quot;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#keyword-query-language-kql&quot;&gt;https://learn.microsoft.com/en-us/microsoftsearch/manage-verticals#keyword-query-language-kql&lt;/a&gt; for more information on vertical management.&lt;/p&gt;  &lt;p&gt;I want to be crystal clear that nothing happens to classic search experiences nor to experiences which are powered by the SharePoint Search API. Everything keeps on working as before – it’s just Microsoft Search in out-of-the-box modern experiences which retires reading the setup.&lt;/p&gt;  &lt;p&gt;I also want to point out that this does not effect query rule triggered promoted results on SharePoint sites or SharePoint hub-sites, as the modern experience will show a promoted result for these scopes regardless of the result source they may have been targeted towards.&lt;/p&gt;  &lt;p&gt;And as a last note, this only applies to environment where search vertical administration is rolled out.&lt;/p&gt;  &lt;p&gt;That’s it and you can likely ignore this post as it should not affect you &lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4234479344287572630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4234479344287572630'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2023/03/retirement-of-custom-default-result.html' title='Retirement of custom default result sources in Microsoft Search for modern search experiences'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1elS88WEjZK8KvEzYR4HuUzPUoJOQCaRw=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-3488724156841691784</id><published>2022-07-04T13:55:00.002+02:00</published><updated>2024-03-19T14:57:40.333+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dynamics 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft 365"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft search"/><title type='text'>Surface Dynamics 365 Data in Microsoft Search</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1kPs1T-SucGx_uiDe2OOMivx3__RAAYL4&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1J-K_BM1S8rJboApfzvD27Xd2GNZGjqHe&quot; width=&quot;644&quot; height=&quot;198&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’re a user of Dynamics 365 did you know that it’s now possible to surface search results from Dynamics 365 in Microsoft Search? &lt;/p&gt;  &lt;p&gt;Head over to &lt;a title=&quot;https://docs.microsoft.com/en-us/microsoftsearch/manage-dynamics365&quot; href=&quot;https://docs.microsoft.com/en-us/microsoftsearch/manage-dynamics365&quot;&gt;https://docs.microsoft.com/en-us/microsoftsearch/manage-dynamics365&lt;/a&gt;, or direct your admin to follow the directions on how to enable the experience.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Quick steps:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Navigate to &lt;a title=&quot;https://admin.microsoft.com/Adminportal/Home?#/MicrosoftSearch/connectors&quot; href=&quot;https://admin.microsoft.com/Adminportal/Home?#/MicrosoftSearch/connectors&quot;&gt;https://admin.microsoft.com/Adminportal/Home?#/MicrosoftSearch/connectors&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Click “add a new app or service”     &lt;br /&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1YAH-3taGm6A6XByWCbNMDLo0J2kMeT10&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1BEz7TwMThRfRDcgOHlWmGQnZTgyU8RrU&quot; width=&quot;644&quot; height=&quot;178&quot; /&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Pick D365 and follow the setup wizard     &lt;br /&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1S5YQibXC3PE19BonftdXhftHjrPDdVZb&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://lh3.googleusercontent.com/d/1I4cpHE37gqhrWRA45ApaPjODFsHvUUsW&quot; width=&quot;236&quot; height=&quot;159&quot; /&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3488724156841691784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/3488724156841691784'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2022/07/surface-dynamics-365-data-in-microsoft.html' title='Surface Dynamics 365 Data in Microsoft Search'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1J-K_BM1S8rJboApfzvD27Xd2GNZGjqHe=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-5439950764176009449.post-4001864417199484868</id><published>2022-01-20T10:38:00.005+01:00</published><updated>2024-03-19T14:57:41.223+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft graph"/><category scheme="http://www.blogger.com/atom/ns#" term="teams"/><title type='text'>Sensible defaults – avoiding error on first navigation to the Files tab in a Teams channel</title><content type='html'>&lt;p&gt;&lt;em&gt;I won’t take credit for the solution myself, as this was shared to me by the awesome &lt;/em&gt;&lt;a href=&quot;https://twitter.com/Remi749&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Remi Blom-Ohlsen&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, who is too timid to share great tips with the world himself :)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;We’ve all been there, and if you create solutions for customers involving Teams you are bound to have encountered the issue. After the team is created and you immediately navigate to the Files tab in a channel, you get an error message.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/1sfTaY5HFVYJNs2tY9nzNgH1wcrGrH44K&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;484&quot; src=&quot;https://lh3.googleusercontent.com/d/1iBEywaf8iZLWUmp-zSPZabI6vZs0Kg_H&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;589&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Navigate to the Posts tab and back, and all is working.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://lh3.googleusercontent.com/d/18TY-cxD9UGwuRVXRvVMtlSwKBt3u8LuC&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;484&quot; src=&quot;https://lh3.googleusercontent.com/d/17SaYxT4rJ3o6gXf296PnjIaZas_qpc48&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;image&quot; width=&quot;573&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When creating Teams using out of the box user interfaces you still have to live with this. If you however use a custom ordering and provisioning solution you can via code fix this nuance for your users :)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;If you are patient and wait a tiny bit, the folder will be created for you. For those who are impatient and want to ensure everything is the best way possible for end user, they can continue to read.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;If your provisioning solution is using C# you can ensure the channel folder is creating using code like this. And the crux here is the &lt;strong&gt;FilesFolder&lt;/strong&gt; property on the channel object.&lt;/p&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;public static async Task&amp;lt;DriveItem&amp;gt; InitTeamDrive(string GroupId, GraphServiceClient GraphClient = null)
{
	var graphClient = &amp;lt;get your client here&amp;gt;;
	var channels = await graphClient.Teams[GroupId].Channels.Request().GetAsync();

	foreach (var channel in channels)
	{
		if (channel.DisplayName == &quot;General&quot;)
		{
			var drive = await graphClient.Teams[GroupId].Channels[channel.Id].FilesFolder.Request().GetAsync();
			return drive;
		}
	}
	return null;
}&lt;/pre&gt;

The similar direct graph call would be.

&lt;pre class=&quot;brush: js;&quot;&gt;
GET https://graph.microsoft.com/v1.0/teams/&amp;lt;group id&amp;gt;/channels/&amp;lt;channel id&amp;gt;/filesFolder
&lt;/pre&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4001864417199484868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439950764176009449/posts/default/4001864417199484868'/><link rel='alternate' type='text/html' href='http://www.techmikael.com/2022/01/sensible-defaults-avoiding-error-on.html' title='Sensible defaults – avoiding error on first navigation to the Files tab in a Teams channel'/><author><name>Mikael Svenson</name><uri>http://www.blogger.com/profile/04135401463188945665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcsftWStZxxxPoISqg7f0ps_OHVHea-pZ0DAGMO3LPVgB0eTvwaAEloFg2EECxIjw-JSEa_r4mf5DtqRm96_xkqwbMkJtIKXLhLe6IUDZxDtRCU7TONv0Cy7Tw5FmIxeE/s100/avatar-torso-smile-bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/d/1iBEywaf8iZLWUmp-zSPZabI6vZs0Kg_H=s72-c" height="72" width="72"/></entry></feed>