<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>english &#8211; Kodono</title>
	<atom:link href="https://blog.kodono.info/wordpress/tag/english/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kodono.info/wordpress</link>
	<description>Pour tous les technophiles</description>
	<lastBuildDate>Sun, 15 Dec 2024 22:09:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>
	<item>
		<title>Remove lazy loading for a custom SPFx webpart</title>
		<link>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/</link>
					<comments>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 15 Dec 2024 22:09:45 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2344</guid>

					<description><![CDATA[SharePoint Online is doing lazy loading when we hit a page with webparts. If you created a SPFx webpart, and if it&#8217;s not visible right after the page load, then it will only be loaded once the user scrolls to it&#8230; To remove this behavior, and load the webpart as soon as possible, you must [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>SharePoint Online is doing lazy loading when we hit a page with webparts. If you created a SPFx webpart, and if it&#8217;s not visible right after the page load, then it will only be loaded once the user scrolls to it&#8230;</p>
<p>To remove this behavior, and load the webpart as soon as possible, <a href="https://github.com/SharePoint/sp-dev-docs/discussions/7918">you must declare your webpart as a dynamic data source</a>.</p>
<p>Here is the minimal code example (in pure JS, not in TS):</p>
<pre class="brush:javascript">
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
import { DisplayMode } from '@microsoft/sp-core-library';

export default class HtmlViewerWebPart extends BaseClientSideWebPart {
  constructor() {
    super();
    // the below is used by the dynamic data source to avoid lazy loading
    this._sourceId = 'my_webpart';
  }

  onInit() {
    // to avoid lazy loading of the webpart, we register it as a dynamic data source
    // we only need to do it during the Edit of the page
    if (this.isPageInEditMode() &#038;& this.context.dynamicDataSourceManager) {
      this.context.dynamicDataSourceManager.initializeSource(this);
      console.log('Dynamic Data Source initialized to avoid lazy loading.');
    }
    
    return Promise.resolve();
  }

  isPageInEditMode() {
    return this.displayMode === DisplayMode.Edit;
  }

  // we need to declare this method because it's used by the data source to avoid lazy loading
  getPropertyDefinitions() {
    return []
  }

  // we need to declare this method because it's used by the data source to avoid lazy loading
  getPropertyValue(propertyId) {
    return propertyId;
  }
}
</pre>
<p>Then, edit the page, which will trigger the dynamic data source registration, and publish it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/12/15/remove-lazy-loading-for-a-custom-spfx-webpart/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Determine an element `height` and `width` in CSS only and reuse it within another CSS rule</title>
		<link>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/</link>
					<comments>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 15:44:36 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2333</guid>

					<description><![CDATA[I found this technic on https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/ – it only works on modern browsers (mainly Chrome and Edge) Let&#8217;s define the properties: @property --_x { syntax: "&#60;number>"; inherits: true; initial-value: 0; } @property --_y { syntax: "&#60;number>"; inherits: true; initial-value: 0; } @property --w { syntax: "&#60;integer>"; inherits: true; initial-value: 0; } @property --h { syntax: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I found this technic on <a href="https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/">https://frontendmasters.com/blog/how-to-get-the-width-height-of-any-element-in-only-css/</a> – <strong>it only works on modern browsers (mainly Chrome and Edge)</strong></p>
<p>Let&#8217;s define the properties:</p>
<pre class="brush:css">
@property --_x {
  syntax: "&lt;number>";
  inherits: true;
  initial-value: 0; 
}
@property --_y {
  syntax: "&lt;number>";
  inherits: true;
  initial-value: 0; 
}
@property --w {
  syntax: "&lt;integer>";
  inherits: true;
  initial-value: 0; 
}
@property --h {
  syntax: "&lt;integer>";
  inherits: true;
  initial-value: 0; 
}
</pre>
<p>Then, let&#8217;s find an element that is a common parent for both the element where we&#8217;ll calculate the height/width, and the element that will use this height/width, and we apply some CSS:</p>
<pre class="brush:css">
.parent {
  timeline-scope: --cx,--cy;
  --w:calc(1/(1 - var(--_x)));
  --h:calc(1/(1 - var(--_y)));
  animation: x linear,y linear;
  animation-timeline: --cx,--cy !important;
  animation-range: entry 100% exit 100%;
}
</pre>
<p>We finish up with some additional CSS:</p>
<pre class="brush:css">
.get-dimension {
  overflow: hidden;
  position: relative;
}
.get-dimension:before {
  content:"";
  position: absolute;
  left: 0;
  top: 0;
  width: 1px;
  aspect-ratio: 1;
  view-timeline: --cx inline,--cy block;
}
@keyframes x {to{--_x:1}}
@keyframes y {to{--_y:1}}
</pre>
<p>And finally, we can use <code>--w</code> and <code>--h</code> in the other element:</p>
<pre class="brush:css">
.apply-dimension {
  height: calc(var(--h)*1px);
  width: calc(var(--w)*1px);
}
</pre>
<p>Here is a demo:<br />
<p class='codepen'  data-height='500' data-theme-id='1' data-slug-hash='vEByKod' data-default-tab='result' data-animations='run' data-editable='' data-embed-version='2'>

</p>
</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/12/13/determine-an-element-height-and-width-in-css-only-and-reuse-it-within-another-css-rule/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to remove an account / leave an organization in MS Teams?</title>
		<link>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/</link>
					<comments>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 11 Oct 2024 15:44:15 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2330</guid>

					<description><![CDATA[If in the top right corner of MS Teams, when you click on your profile picture, you see other organizations/accounts and you want to delete them: Go to the MS Teams Settings by clicking on the three dots next to your profile picture Go to Accounts and orgs Turn off or leave the org/account that [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If in the top right corner of MS Teams, when you click on your profile picture, you see other organizations/accounts and you want to delete them:</p>
<ol>
<li>Go to the MS Teams Settings by clicking on the three dots next to your profile picture</li>
<li>Go to <strong>Accounts and orgs</strong></li>
<li>Turn off or leave the org/account that is problematic</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/10/11/how-to-remove-an-account-leave-an-organization-in-ms-teams/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to run Android TV 9 on Windows</title>
		<link>https://blog.kodono.info/wordpress/2024/09/02/how-to-run-android-tv-9-on-windows/</link>
					<comments>https://blog.kodono.info/wordpress/2024/09/02/how-to-run-android-tv-9-on-windows/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 02 Sep 2024 09:34:00 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2311</guid>

					<description><![CDATA[I used to use Android Studio with the various emulators to test my Android apps, however for Android TV 9 it doesn&#8217;t work properly because it doesn&#8217;t have Google Play Store on it. To have a good version of Android TV 9: Downlad a VirtualBox image of it – I used the one shared in [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I used to use Android Studio with the various emulators to test my Android apps, however for Android TV 9 it doesn&#8217;t work properly because it doesn&#8217;t have Google Play Store on it.</p>
<p>To have a good version of Android TV 9:</p>
<ol>
<li><a href="https://mega.nz/file/XQ9zWaoC#PajlBLEU-43g239wAB0vpMsnpYpEU6seSqz36lXv5go">Downlad a VirtualBox image of it</a> – I used the one shared <a href="https://www.youtube.com/watch?v=_dfOESBBTHM">in this video</a>
<li>Install <a href="https://www.virtualbox.org/">VirtualBox</a> if you don&#8217;t have it yet</li>
<li>Load the downloaded image with VirtualBox</li>
<li>Configure it by going to the network section and select &#8220;Bridged Adapter&#8221; instead of &#8220;NAT&#8221;</li>
<li>Once Android TV is started, you&#8217;ll have to connect to your Google account, but using the keyboard might be challenging – you can right click on the USB cable icon that appears at the bottom right of the VirtualBox window, and select your keyboard (be aware it&#8217;s a QWERTY map that is used)</li>
</ol>
<p>After that, go to the Android TV settings, in the &#8220;About&#8221; section, and click several times on the Build Version to enable the Developer Mode. From the developer menu, you can enable the &#8220;Debug USB&#8221;.</p>
<p>Once everything is correctly configured, the Android TV should be visible on your local network, meaning you can use the ADB command to test your app.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/09/02/how-to-run-android-tv-9-on-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Manual Installation of ExplorerPatcher</title>
		<link>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/</link>
					<comments>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 08:59:15 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2288</guid>

					<description><![CDATA[ExplorerPatcher permits to change the behavior of the Windows taskbar. If for some reasons the automatic install doesn&#8217;t work, you can proceed manually: Install it on a computer where the automatic install works On the target computer, download ep_setup.exe from the official website Open a Terminal and extract the files from the setup using the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://github.com/valinet/ExplorerPatcher">ExplorerPatcher</a> permits to change the behavior of the Windows taskbar. If for some reasons the automatic install doesn&#8217;t work, you can proceed manually:</p>
<ol>
<li>Install it on a computer where the automatic install works</li>
<li>On the target computer, download <code>ep_setup.exe</code> from the official website</li>
<li>Open a Terminal and extract the files from the setup using the command <code>ep_setup.exe /extract</code></li>
<li>Several files have been extracted from the setup</li>
<li>Move all the files to <code>C:\Program Files\ExplorerPatcher</code></li>
<li>Kill Windows Explorer from the Task Manager</li>
<li>From the computer in step 1, copy the file <code>C:\Windows\dxgi.dll</code> and paste it to the target computer at the same location</li>
<li>Restart Windows Explorer from a Terminal by typing <code>explorer.exe</code></li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/03/21/manual-installation-of-explorerpatcher/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Automate: how to verify if a property belongs to an object (apply to SharePoint Date too)</title>
		<link>https://blog.kodono.info/wordpress/2024/01/16/power-automate-how-to-verify-if-a-property-belongs-to-an-object/</link>
					<comments>https://blog.kodono.info/wordpress/2024/01/16/power-automate-how-to-verify-if-a-property-belongs-to-an-object/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 16 Jan 2024 17:36:30 +0000</pubDate>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2282</guid>

					<description><![CDATA[We can use this kind of formula (notice the questionmark): if(empty(variables('params')?[variables('fieldName')]), 'fieldName is not part of the object params', variables('params')?[variables('fieldName')]) Then if it either returns &#8220;fieldName is not part of the object params&#8221; or the value. We can use it to check if a date field is empty in a SharePoint List, because when getting [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>We can use this kind of formula (notice the questionmark):<br />
<code>if(empty(variables('params')?[variables('fieldName')]), 'fieldName is not part of the object params', variables('params')?[variables('fieldName')])</code></p>
<p>Then if it either returns &#8220;fieldName is not part of the object params&#8221; or the value.</p>
<p>We can use it to check if a date field is empty in a SharePoint List, because when getting the data from the SP List, when the date field is empty, it&#8217;s not in the result returned – the below code will return <b>true</b> if the date field is empty:<br />
<code>empty(item()?['dateFieldNameId'])</code></p>
<p>For a Currency/Number field you need to use <code>string()</code> as well:<br />
<code>empty(string(item()?['floatFieldNameId']))</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/01/16/power-automate-how-to-verify-if-a-property-belongs-to-an-object/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Automate returns an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;</title>
		<link>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/</link>
					<comments>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 16 Jan 2024 14:42:28 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2278</guid>

					<description><![CDATA[While calling a &#8220;Run a Child Flow&#8221; from a Power Automate Flow, you could get an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;. After investigating, to resolve this issue you need to open the &#8220;details&#8221; view of your child flow, and click on the &#8220;Edit&#8221; button from the &#8220;Run only users&#8221; card: Then in the Connections Used [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>While calling a &#8220;Run a Child Flow&#8221; from a Power Automate Flow, you could get an error about &#8220;InvokerConnectionOverrideFailed&#8221; and &#8220;header.X-MS-APIM-Tokens&#8221;.</p>
<p>After investigating, to resolve this issue you need to open the &#8220;details&#8221; view of your child flow, and click on the &#8220;Edit&#8221; button from the <strong>&#8220;Run only users&#8221; card</strong>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png"><img fetchpriority="high" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png" alt="" width="501" height="423" class="aligncenter size-full wp-image-2279" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users.png 501w, https://blog.kodono.info/wordpress/wp-content/uploads/2024/01/run_only_users-300x253.png 300w" sizes="(max-width: 501px) 100vw, 501px" /></a></p>
<p>Then in the <strong>Connections Used</strong> section, make sure to select <strong>&#8220;Use this connection (your_username@domain.com)&#8221;</strong> instead of the default &#8220;Provided by run-only user&#8221;. It will permit to run this child flow with your rights.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2024/01/16/power-automate-returns-an-error-about-invokerconnectionoverridefailed-and-header-x-ms-apim-tokens/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Search and restore an item from a SharePoint Online Recycle Bin</title>
		<link>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/</link>
					<comments>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 07 Nov 2023 11:09:37 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2267</guid>

					<description><![CDATA[It might be difficult to search for an item in a SharePoint recycle bin. I was using the end point _api/site/RecycleBin as a Site Collection Administrator, but in some cases it returns an error &#8220;The attempted operation is prohibited because it exceeds the list view threshold.&#8221;. The solution is to use another end point _api/site/getrecyclebinitems [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It might be difficult to search for an item in a SharePoint recycle bin. I was using the end point <code>_api/site/RecycleBin</code> as a <b>Site Collection Administrator</b>, but in some cases it returns an error &#8220;The attempted operation is prohibited because it exceeds the list view threshold.&#8221;.</p>
<p>The solution is to use another end point <code>_api/site/getrecyclebinitems</code> (<a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.client.site.getrecyclebinitems?view=sharepoint-csom">see the documentation</a> for the various parameters):</p>
<pre class="brush:javascript">
fetch("https://tenant.sharepoint.com/sites/YourSite/_api/site/getrecyclebinitems?rowLimit=%2770000%27&#038;itemState=0&#038;orderby=3&#038;isAscending=false", {
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
    "x-requestdigest": document.querySelector("#__REQUESTDIGEST").value
  },
  "method": "GET",
})
.then(res => res.json())
.then(json => {
  console.log(json.value);
  // it will show an array with an object that contains several interesting properties:
  // AuthorEmail, AuthorName, DeletedByEmail, DeletedDate, DirName, Id, LeafName, Title, …
})
</pre>
<p>You can then filter the result to get what you need, for example if you&#8217;re looking for an item from the list “Projects” that has the ID 1981:</p>
<pre class="brush:javascript">
json.value.filter(item => item.DirName.includes("Lists/Projects") &#038;& item.LeafName === "1981_.000");
</pre>
<p>Then, to restore an item, we need the <code>Id</code> from the previous result. The famous endpoint to restore an item is <code>_api/site/RecycleBin('Id')/restore</code>, however it could also return the error &#8220;The attempted operation is prohibited because it exceeds the list view threshold&#8221;. In that case, we can use this other endpoint <code>_api/site/RecycleBin/RestoreByIds</code>:</p>
<pre class="brush:javascript">
fetch("https://tenant.sharepoint.com/sites/YourSite/_api/site/RecycleBin/RestoreByIds", {
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
    "x-requestdigest": document.querySelector("#__REQUESTDIGEST").value
  },
  "method": "POST",
  "body":JSON.stringify({
    "ids": [
      "4f855ee7-472b-414a-a482-4317a114c1a2" // Id to restore
    ],
    "bRenameExistingItems": true
  })
})
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2023/11/07/search-and-restore-an-item-from-a-sharepoint-online-recycle-bin/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Connect to SharePoint Online using an app clientId and clientSecret</title>
		<link>https://blog.kodono.info/wordpress/2023/03/21/connect-to-sharepoint-online-using-an-app-clientid-and-clientsecret/</link>
					<comments>https://blog.kodono.info/wordpress/2023/03/21/connect-to-sharepoint-online-using-an-app-clientid-and-clientsecret/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 21 Mar 2023 09:56:30 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2234</guid>

					<description><![CDATA[Get `clientId` and `clientSecret` (source) You&#8217;ll need credentials: `clientId` &#8211; required string, client id obtained when registering the addin `clientSecret` &#8211; required string, client secret obtained when registering the addin `realm` &#8211; your SharePoint Online tenant id. The easiest way to find tenant is to open SharePoint Online site collection, click Site Settings &#8594; Site [&#8230;]]]></description>
										<content:encoded><![CDATA[<h3>Get <code>`clientId`</code> and <code>`clientSecret`</code></h3>
<p>(<a href="https://github.com/s-KaiNet/node-sp-auth/wiki/SharePoint-Online-addin-only-authentication">source</a>)</p>
<p>You&#8217;ll need credentials: </p>
<ul>
<li><code>`clientId`</code> &#8211; required string, client id obtained when registering the addin</li>
<li><code>`clientSecret`</code> &#8211; required string, client secret obtained when registering the addin</li>
<li><code>`realm`</code> &#8211; your SharePoint Online tenant id. The easiest way to find tenant is to open SharePoint Online site collection, click <b>Site Settings</b> &rarr; <b>Site App Permissions</b>. Under this page you wll see at least one app &#8220;Microsoft.SharePoint&#8221;. The tenant id (realm) is highlighted in the image below:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm.png"><img decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm-1024x183.png" alt="" width="1024" height="183" class="aligncenter size-large wp-image-2236" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm-1024x183.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm-300x54.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm-768x137.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/realm.png 1286w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></li>
</ul>
<p>Example of the expected result: </p>
<pre class="brush:javascript">
{
  clientId: '28bq7e56-8c3a-487d-hbfb-ef1a74539cbe',
  clientSecret: 's6LZ4VvoeKOS+MyAhklcavsyJBF4XhWo06OgY6czYJ0=',
  realm: '85e5f09b-4c17-4d80-afea-260bb171c456'
}
</pre>
<p>To get the credentials, you need to register a new addin inside SharePoint Online, by fellowing these steps:</p>
<ol>
<li>Open SharePoint Online app registration page, e.g. <code>https://contoso.sharepoint.com/sites/dev/_layouts/15/appregnew.aspx</code></li>
<li>Click on <b>&#8220;Generate&#8221;</b> for Client id and Client Secret, fill in Title, App Domain, Redirect URI (you can type in any values you want)<br />
         <a href="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_reg.png"><img decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_reg.png" alt="" width="374" height="364" class="aligncenter size-full wp-image-2237" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_reg.png 374w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_reg-300x292.png 300w" sizes="(max-width: 374px) 100vw, 374px" /></a></li>
<li>Click on <b>&#8220;Create&#8221;</b> and save generated Client Id and Client Secret</li>
<li><strong>[IF YOU HAVE TENANT RIGHTS]</strong> Now you need to apply permissions to the newly registered app. If you want to register the app once and use it for any site collection, it&#8217;s better to apply <strong>tenant scope permissions</strong>, so you can use the credentials everywhere inside your SharePoint tenant. To apply tenant scoped permissions, open <code>AppInv.aspx</code> page under SharePoint adminstration web site, e.g. <code>https://[YOUR_ORGANIZATION]-admin.sharepoint.com/_layouts/15/appinv.aspx</code>, copy paste Client Id from step n°3 into App Id field and click <b>&#8220;Lookup&#8221;</b>.</li>
<li><strong>[IF YOU HAVE TENANT RIGHTS]</strong> You will see your registered app, paste in the following XML into the <b>&#8220;Permission Request XML&#8221;</b> field and click <b>&#8220;Create&#8221;</b>:
<pre class="rush:xml">
    &lt;AppPermissionRequests AllowAppOnlyPolicy="true">
      &lt;AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
    &lt;/AppPermissionRequests>
</pre>
<p><a href="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_permission.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_permission.png" alt="" width="614" height="580" class="aligncenter size-full wp-image-2238" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_permission.png 614w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_permission-300x283.png 300w" sizes="auto, (max-width: 614px) 100vw, 614px" /></a></li>
<li><strong>[IF YOU ARE NOT A TENANT]</strong> If you only want to give permissions on 1 site collection, you can register the app on a regular site collection by using url <code>https://contoso.sharepoint.com/sites/dev/_layouts/15/appinv.aspx</code>. In this case you are not able to use tenant scoped permissions and can only apply site collection permissions:
<pre class="rush:xml">
    &lt;AppPermissionRequests AllowAppOnlyPolicy="true">
      &lt;AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
    &lt;/AppPermissionRequests>
</pre>
<li>You will see addin &#8220;Trust&#8221; confirmation, click on <b>&#8220;Trust It&#8221;</b>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_trust.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_trust.png" alt="" width="767" height="322" class="aligncenter size-full wp-image-2239" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_trust.png 767w, https://blog.kodono.info/wordpress/wp-content/uploads/2023/03/online_addinonly_trust-300x126.png 300w" sizes="auto, (max-width: 767px) 100vw, 767px" /></a><br />
 <em>if trust-it button is not enabled and you get a red label saying tenant admin needs to trust the app, go back and try again in a few minutes.</em></li>
<li>Now you can use client id and client secret to send authenticated http requests.</li>
</ol>
<p>To know more about the XML permissions, you can check the <a href="http://(see https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/add-in-permissions-in-sharepoint)">Microsoft documentation</a>.</p>
<h3>Get Access Token</h3>
<p>(you can find a <a href="https://social.technet.microsoft.com/wiki/contents/articles/51982.sharepoint-read-online-list-data-from-c-console-application-using-access-token.aspx">C# code</a> as an example)</p>
<p>You need to do a <b>POST</b> request to <code>https://accounts.accesscontrol.windows.net/[YOUR_TENANT_REALM]/tokens/OAuth/2</code> with a <b>&#8220;Content-Type&#8221;</b> header that has the value <b>&#8220;application/x-www-form-urlencoded&#8221;</b>, and the body parameters that must be:</p>
<ul>
<li>&quot;grant_type&quot;:&quot;client_credentials&quot;</li>
<li>&quot;client_id&quot;:&quot;[YOUR_CLIENT_ID]@[YOUR_TENANT_REALM]&quot;</li>
<li>&quot;client_secret&quot;:&quot;[YOUR_CLIENT_SECRET]&quot;</li>
<li>&quot;resource&quot;:&quot;00000003-0000-0ff1-ce00-000000000000/dell.sharepoint.com@[YOUR_TENANT_REALM]&quot;</li>
</ul>
<p>See below an example in PHP:</p>
<pre class=brush:php">
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://accounts.accesscontrol.windows.net/[YOUR_TENANT_REALM]/tokens/OAuth/2");
curl_setopt($curl, CURLOPT_HTTPHEADER, [ "Content-Type: application/x-www-form-urlencoded" ]);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  "grant_type" => "client_credentials",
  "client_id" => "[YOUR_CLIENT_ID]@[YOUR_TENANT_REALM]",
  "client_secret" => "[YOUR_CLIENT_SECRET]",
  "resource" => "00000003-0000-0ff1-ce00-000000000000/dell.sharepoint.com@[YOUR_TENANT_REALM]"
]));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($curl));
curl_close($curl);

echo $response->access_token;
</pre>
<p>The response should contain an access token. Example:</p>
<pre class="brush:javascript">
{
  "token_type":"Bearer",
  "expires_in":"86399",
  "not_before":"1679393911",
  "expires_on":"1679480611",
  "resource":"00000003-0000-0ff1-ce00-000000000000/dell.sharepoint.com@[YOUR_TENANT_REALM]",
  "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSU[...]SxXA5Lqbk1OcOVdwQ"
}
</pre>
<p>Finally, you can do your REST API request to SharePoint Online with passing the header <b>&#8220;Authorization&#8221;</b> that has the value <b>&#8220;Bearer [YOUR_ACCESS_TOKEN]&#8221;</b>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2023/03/21/connect-to-sharepoint-online-using-an-app-clientid-and-clientsecret/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deploy a PCF NodeJS app as a scheduled task</title>
		<link>https://blog.kodono.info/wordpress/2022/12/27/deploy-a-pcf-nodejs-app-as-a-scheduled-task/</link>
					<comments>https://blog.kodono.info/wordpress/2022/12/27/deploy-a-pcf-nodejs-app-as-a-scheduled-task/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 27 Dec 2022 15:23:33 +0000</pubDate>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2222</guid>

					<description><![CDATA[I have a NodeJS app that runs as a process and that executes a task every 15 minutes using node-schedule. We first need a manifest.yml file that contains: --- applications: - name: APP-NAME buildpack: nodejs_buildpack no-route: true health-check-type: process env: OPTIMIZE_MEMORY: true The no-route parameter is true so that we don&#8217;t get a route assigned, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I have a NodeJS app that runs as a process and that executes a task every 15 minutes using <code>node-schedule</code>.</p>
<p>We first need a <b>manifest.yml</b> file that contains:</p>
<pre>
---
applications:
- name: APP-NAME
  buildpack: nodejs_buildpack
  no-route: true
  health-check-type: process
  env:
    OPTIMIZE_MEMORY: true
</pre>
<p>The <code>no-route</code> parameter is <b>true</b> so that we don&#8217;t get a route assigned, and the <code>health-check-type</code> is set to <b>process</b> so that the orchestrator monitors process availability and doesn&#8217;t try to ping a non-existent web endpoint. And <code>OPTIMIZE_MEMORY</code> in <a href="https://docs.cloudfoundry.org/devguide/deploy-apps/manifest-attributes.html#env-block">&#8220;env&#8221; section</a> is based on the <a href="https://docs.cloudfoundry.org/buildpacks/node/node-tips.html">Pivotal recommendations</a>.</p>
<p>If you need to use a local package in your app, you&#8217;ll have to pack it up first. To do it, go to your local module folder, and type <code>npm pack</code>. It will create a <code>.tgz</code> file that you&#8217;ll have to store in a <b>local_modules</b> folder for your app. Next, use <code>npm install .\local_modules\package-1.2.3.tgz</code>.</p>
<p>You can now deploy your app with <code>pcf push APP-NAME</code> and you can read the logs with <code>cf logs APP-NAME --recent</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/12/27/deploy-a-pcf-nodejs-app-as-a-scheduled-task/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Power Automate: execute a SQL Query via On-Promise Gateway</title>
		<link>https://blog.kodono.info/wordpress/2022/12/09/power-automate-execute-a-sql-query-via-on-promise-gateway/</link>
					<comments>https://blog.kodono.info/wordpress/2022/12/09/power-automate-execute-a-sql-query-via-on-promise-gateway/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 09 Dec 2022 13:28:26 +0000</pubDate>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2201</guid>

					<description><![CDATA[In Power Automate, when you want to connect to a SQL Server and if you have a On-Promise Gateway, then you cannot use the command &#8220;Execute a SQL Query&#8221; because it will say it&#8217;s not currently supported. There is a workaround with &#8220;Transform data using Power Query&#8221; (ATTENTION: you cannot load it from a flow [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In Power Automate, when you want to connect to a SQL Server and if you have a On-Promise Gateway, then you cannot use the command <b>&#8220;Execute a SQL Query&#8221;</b> because it will say it&#8217;s not currently supported.</p>
<p>There is a workaround with <b>&#8220;Transform data using Power Query&#8221;</b> (ATTENTION: you cannot load it from a flow from a Solution… you&#8217;ll have to go to your Flows and edit the flow from there):<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/sql_options.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/sql_options.png" alt="" width="603" height="669" class="aligncenter size-full wp-image-2203" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/sql_options.png 603w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/sql_options-270x300.png 270w" sizes="auto, (max-width: 603px) 100vw, 603px" /></a></p>
<p>Let&#8217;s say we have 3 tables: ITEM_CATALOG, CATALOG and CURRENCY. We want to join them and filter them based on a variable found previously in our flow.</p>
<p>First, we can define our <code>where</code>. Here I have several values that I want to test using a <code>IN</code>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/init_where.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/init_where.png" alt="" width="605" height="178" class="aligncenter size-full wp-image-2205" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/init_where.png 605w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/init_where-300x88.png 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></a></p>
<p>I create a string with my different values separated by a coma.</p>
<p>Next, we can open the Power Query editor:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/power_query.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/power_query.png" alt="" width="619" height="128" class="aligncenter size-full wp-image-2206" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/power_query.png 619w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/power_query-300x62.png 300w" sizes="auto, (max-width: 619px) 100vw, 619px" /></a></p>
<p>In the interface, we choose the 3 tables we need to merge and we add a parameter called &#8220;where&#8221;:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/new_parameter.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/new_parameter.png" alt="" width="250" height="352" class="aligncenter size-full wp-image-2207" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/new_parameter.png 250w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/new_parameter-213x300.png 213w" sizes="auto, (max-width: 250px) 100vw, 250px" /></a></p>
<p>We rename it to &#8220;where&#8221; and leave the default settings:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parameter_menu.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parameter_menu.png" alt="" width="652" height="637" class="aligncenter size-full wp-image-2208" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parameter_menu.png 652w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parameter_menu-300x293.png 300w" sizes="auto, (max-width: 652px) 100vw, 652px" /></a></p>
<p>Then we use the <b>&#8220;Advance Editor&#8221;</b>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/advanced_editor.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/advanced_editor.png" alt="" width="805" height="318" class="aligncenter size-full wp-image-2209" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/advanced_editor.png 805w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/advanced_editor-300x119.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/advanced_editor-768x303.png 768w" sizes="auto, (max-width: 805px) 100vw, 805px" /></a></p>
<p>And we wrote the below:</p>
<pre class="brush:javascript">
let
  where = Text.Split( "@{variables('where')}" , ",")
in
  where
</pre>
<p>It means we want to split the variable &#8220;where&#8221; coming from the flow, based on the coma separator:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/editor_value.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/editor_value.png" alt="" width="520" height="175" class="aligncenter size-full wp-image-2210" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/editor_value.png 520w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/editor_value-300x101.png 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></a></p>
<p>We can now merge the tables and add a filter:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons-1024x112.png" alt="" width="1024" height="112" class="aligncenter size-large wp-image-2211" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons-1024x112.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons-300x33.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons-768x84.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/buttons.png 1175w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>And when the step to filter is here, we select <b>&#8220;in&#8221;</b> and our query:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/filter_rows.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/filter_rows.png" alt="" width="609" height="301" class="aligncenter size-full wp-image-2212" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/filter_rows.png 609w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/filter_rows-300x148.png 300w" sizes="auto, (max-width: 609px) 100vw, 609px" /></a></p>
<p>Last step is to <b>&#8220;Enable Load&#8221;</b> to make sure this is what the operation will return to our flow:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/enable_load.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/enable_load.png" alt="" width="307" height="437" class="aligncenter size-full wp-image-2213" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/enable_load.png 307w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/enable_load-211x300.png 211w" sizes="auto, (max-width: 307px) 100vw, 307px" /></a></p>
<p>You can run it to test and see if it works.</p>
<p>Then, to get the output from it, we&#8217;ll use a <b>&#8220;Parse JSON&#8221;</b>… The schema is probably something like:</p>
<pre class="brush:json">
{
    "type": "object",
    "properties": {
        "resultType": {
            "type": "string"
        },
        "value": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "COLUMN_A": {
                        "type": "string"
                    },
                    "COLUMN_B": {
                        "type": "integer"
                    },
                    "COLUMN_C": {
                        "type": "string"
                    }
                },
                "required": [
                    "COLUMN_A",
                    "COLUMN_B",
                    "COLUMN_C"
                ]
            }
        }
    }
}
</pre>
<p>You may need to make several tries in order to find the correct schema. You can also use the <b>&#8220;Generate from sample&#8221;</b> by pasting the data from the previous step:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parse_json.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parse_json.png" alt="" width="629" height="437" class="aligncenter size-full wp-image-2214" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parse_json.png 629w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/parse_json-300x208.png 300w" sizes="auto, (max-width: 629px) 100vw, 629px" /></a></p>
<p>We use <b>&#8220;value&#8221;</b> in the loop:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/value.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/value.png" alt="" width="667" height="378" class="aligncenter size-full wp-image-2215" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/value.png 667w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/value-300x170.png 300w" sizes="auto, (max-width: 667px) 100vw, 667px" /></a></p>
<p>And then we can access our columns:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/applyeach.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/applyeach.png" alt="" width="670" height="376" class="aligncenter size-full wp-image-2216" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/applyeach.png 670w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/12/applyeach-300x168.png 300w" sizes="auto, (max-width: 670px) 100vw, 670px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/12/09/power-automate-execute-a-sql-query-via-on-promise-gateway/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pass an URL parameter to a SharePoint Online form&#8217;s field</title>
		<link>https://blog.kodono.info/wordpress/2022/11/30/pass-an-url-parameter-to-a-sharepoint-online-forms-field/</link>
					<comments>https://blog.kodono.info/wordpress/2022/11/30/pass-an-url-parameter-to-a-sharepoint-online-forms-field/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 30 Nov 2022 08:43:25 +0000</pubDate>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2170</guid>

					<description><![CDATA[The only way to pass a URL parameter to a SharePoint Online (modern design) form&#8217;s field is to use PowerApps (at least, if you cannot add any JS on your website!). Important warning: when you use PowerApps to manage your form, all edits to the list settings won&#8217;t reflect to the PowerApps form. For example, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The only way to pass a URL parameter to a SharePoint Online (modern design) form&#8217;s field is to use PowerApps (at least, if you cannot add any JS on your website!).</p>
<p><b style="color:red">Important warning</b>: when you use PowerApps to manage your form, all edits to the list settings won&#8217;t reflect to the PowerApps form. For example, if you add a field, it won&#8217;t show up, and you&#8217;ll have to manually update the PowerApps to add it (see at the bottom of this article).</p>
<p>From the list view, go to <code>Integrate</code> then <code>PowerApps</code> and <code>Customize forms</code>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/integrate.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/integrate.png" alt="" width="931" height="161" class="aligncenter size-full wp-image-2172" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/integrate.png 931w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/integrate-300x52.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/integrate-768x133.png 768w" sizes="auto, (max-width: 931px) 100vw, 931px" /></a></p>
<p>Once PowerApps has open the form, you need to do several things.</p>
<h2>1. Load the ID</h2>
<p>We first need to make sure the form will load the required item when we pass the <code>ID</code> URL parameter:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item-1024x442.png" alt="" width="1024" height="442" class="aligncenter size-large wp-image-2175" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item-1024x442.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item-300x130.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item-768x332.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item-1536x663.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_mode_item.png 1899w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>From the <b>SharepointForm Advanced Settings</b>, we change the <b>DefaultMode</b> to check if we have the <code>ID</code> parameter, and if we don&#8217;t have it, then it should be a New Form, otherwise an Edit Form:</p>
<pre class="brush:powershell">If(IsBlank(Param("ID")), FormMode.New, FormMode.Edit)</pre>
<p>From the <b>SharepointForm Advanced Settings</b>, we change the <b>Item</b> section to check if we have the <code>ID</code> parameter, and if we have it, then we do a lookup in our list to find the data:</p>
<pre class="brush:powershell">If(IsBlank(Param("ID")), SharePointIntegration.Selected, LookUp('NAME OF THE LIST', ID = Value(Param("ID"))))</pre>
<h2>Add a SUBMIT button</h2>
<p>With PowerApps, there is no button to save the changes! We&#8217;ll add a button in the form:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn-1024x274.png" alt="" width="1024" height="274" class="aligncenter size-large wp-image-2178" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn-1024x274.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn-300x80.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn-768x206.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn-1536x411.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/save_btn.png 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>In the button&#8217;s properties, we change the <b>onSelect</b> to be:</p>
<pre class="brush:powershell">SubmitForm(SharePointForm1)</pre>
<p>Be aware that the page will stay with the form after clicking on the button. You could want to close using the <a href="https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-exit">Exit()</a> function, but the user will be redirected on office.com … I&#8217;d recommend to use <a href="https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-param">Launch()</a> by redirecting your users to a page:</p>
<pre class="brush:powershell">SubmitForm(SharePointForm1); Launch("https://tenant.sharepoint.com/sites/MySite/");</pre>
<h2>Set field&#8217;s value based on URL parameter</h2>
<p>We can finally set the field&#8217;s value based on the parameter in the URL. Select the INPUT zone of the field, and in the <b>Default</b> section we use the below formula:</p>
<pre class="brush:powershell">If(IsBlank(Param("Title")), ThisItem.Title, Param("Title"))</pre>
<p><a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value-1024x281.png" alt="" width="1024" height="281" class="aligncenter size-large wp-image-2179" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value-1024x281.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value-300x82.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value-768x211.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value-1536x422.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/title_value.png 1903w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Here my field is called &#8220;Title&#8221; so I decided to use a parameter called &#8220;Title&#8221; as well.</p>
<h2>Link to the form</h2>
<p>We cannot use the <b>NewForm.aspx</b> or <b>EditForm.aspx</b> to access this form, but we need a special link.</p>
<p>Go to your <b>list settings</b>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/list_settings.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/list_settings.png" alt="" width="934" height="363" class="aligncenter size-full wp-image-2180" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/list_settings.png 934w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/list_settings-300x117.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/list_settings-768x298.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></a></p>
<p>Then go to the <b>form settings</b> (it&#8217;s from there that you can decide to keep PowerApps or use the original Sharepoint Forms), and click on <b>See versions and usage</b>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_settings.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_settings.png" alt="" width="980" height="274" class="aligncenter size-full wp-image-2181" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_settings.png 980w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_settings-300x84.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/form_settings-768x215.png 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /></a></p>
<p>You&#8217;ll get the <b>App Id</b> from this page:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/app_id.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/app_id.png" alt="" width="273" height="166" class="aligncenter size-full wp-image-2182" /></a></p>
<p>Next, you&#8217;ll use the <b>App Id</b> to forge the URL: <b>https://apps.powerapps.com/play/providers/Microsoft.PowerApps/apps/APP_ID</b><br />
With our example, the URL will be: <a href="https://apps.powerapps.com/play/providers/Microsoft.PowerApps/apps/c6f23ac1-dcbd-4daf-925e-2701ab241ca0">https://apps.powerapps.com/play/providers/Microsoft.PowerApps/apps/c6f23ac1-dcbd-4daf-925e-2701ab241ca0</a></p>
<p>You can now pass the URL parameter: <b>https://apps.powerapps.com/play/providers/Microsoft.PowerApps/apps/APP_ID?Title=Hello%20World</b><br />
And an ID to retrieve an existing item: <b>https://apps.powerapps.com/play/providers/Microsoft.PowerApps/apps/APP_ID?Title=Hello%20World&#038;ID=2</b></p>
<h2>How to use it with a LookUp column?</h2>
<p>If you want to auto-select a LookUp field using an URL parameter, you need to do a few things…</p>
<p>First, we need to add the related table. To do so, click on <b>Data</b> in the left navigation bar and search for <b>SharePoint</b>:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/datasource_sharepoint.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/datasource_sharepoint.png" alt="" width="351" height="512" class="aligncenter size-full wp-image-2188" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/datasource_sharepoint.png 351w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/datasource_sharepoint-206x300.png 206w" sizes="auto, (max-width: 351px) 100vw, 351px" /></a></p>
<p>Search for the table and add it.</p>
<p>Second (optional) step: click on the Lookup field in the form and change the <b>Items</b> to show a list of options – if no &#8220;Lookup&#8221; ID in the URL, then we use the default list of options:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options-1024x218.png" alt="" width="1024" height="218" class="aligncenter size-large wp-image-2192" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options-1024x218.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options-300x64.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options-768x163.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options-1536x327.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/items_options.png 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The below formula permits to retrieve the &#8220;ID&#8221; and &#8220;Title&#8221; from the distant list, base on the &#8220;Lookup&#8221; parameter, and to rename the result as <code>{Id:"ID", Value:"Title"}</code>:</p>
<pre class="brush:powershell">If(IsBlank(Param("Lookup")), Choices([@'CURRENT LIST NAME'].COLUMN_NAME), RenameColumns(ShowColumns(Filter('DISTANT LIST NAME', ID = Value(Param("Lookup"))), "ID", "Title"), "ID", "Id", "Title", "Value"))</pre>
<p>Third, click on the Lookup field in the form and change the <b>DefaultSelectedItems</b> to select the item from the list of options:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items-1024x204.png" alt="" width="1024" height="204" class="aligncenter size-large wp-image-2193" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items-1024x204.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items-300x60.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items-768x153.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items-1536x307.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/default_selected_items.png 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The below formula returns an empty selection with <code>{Id:"", Value:""}</code> when no URL param, otherwise it returns the first record for our lookup:</p>
<pre class="brush:plain">If(IsBlank(Param("Lookup")), {Id:"", Value:""}, First(RenameColumns(ShowColumns(Filter('DISTANT LIST NAME', ID = Value(Param("Lookup"))), "ID", "Title"), "ID", "Id", "Title", "Value")))</pre>
<p>And finally, we can pass <b>Lookup=ID</b> in the URL to select the related item in the other list</p>
<h2>How to deal with new fields?</h2>
<p>If you add a new field to your list&#8217;s settings, you&#8217;ll have to edit the form in PowerApps, and then edit the fields and add the new one:<br />
<a href="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field.png"><img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field-1024x239.png" alt="" width="1024" height="239" class="aligncenter size-large wp-image-2197" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field-1024x239.png 1024w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field-300x70.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field-768x179.png 768w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field-1536x359.png 1536w, https://blog.kodono.info/wordpress/wp-content/uploads/2022/11/add_field.png 1906w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></p>
<p>(I used <a href="https://www.about365.nl/2020/08/06/passing-parameters-to-your-power-apps-sharepoint-form/">this article</a> as a starting point)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/11/30/pass-an-url-parameter-to-a-sharepoint-online-forms-field/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Transfer an Alexa AWS Lambda function from the online editor to the ASK CLI</title>
		<link>https://blog.kodono.info/wordpress/2022/09/20/transfer-a-aws-lambda-function-from-the-online-editor-to-the-ask-cli/</link>
					<comments>https://blog.kodono.info/wordpress/2022/09/20/transfer-a-aws-lambda-function-from-the-online-editor-to-the-ask-cli/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Tue, 20 Sep 2022 17:59:44 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2163</guid>

					<description><![CDATA[When we follow the guide to build a new smarthome skill, it gives the steps to create a function in the online code editor. But if you prefer to use the ASK CLI, there is some steps to follow… I first create a fake skill with ask new (using the &#8220;hello world&#8221; and &#8220;AWS Lambda&#8221; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>When we follow <a href="https://developer.amazon.com/en-US/docs/alexa/smarthome/develop-smart-home-skills-in-multiple-languages.html">the guide to build a new smarthome skill</a>, it gives the steps to create a function in the online code editor.</p>
<p>But if you prefer to use the <a href="https://developer.amazon.com/en-US/docs/alexa/smapi/ask-cli-intro.html">ASK CLI</a>, there is some steps to follow…</p>
<p>I first create a fake skill with <code>ask new</code> (using the &#8220;hello world&#8221; and &#8220;AWS Lambda&#8221; options).</p>
<p>Once the folder structure and files are created, I edit the <code>.ask/ask-states.json</code> file to reflect the information from the skill I created during the guide.</p>
<p>Then in the folder <code>skill-package</code> I remove everything except <code>skill.json</code>. To find what to put into that file, use the command: <code>ask smapi get-skill-manifest -s &lt;SKILL ID&gt;</code> and copy/paste that code.</p>
<p>Finally, I force the deploy with <code>ask deploy --ignore-hash</code>.</p>
<p>The Lambda function can now be managed locally on your computer and deployed with ASK CLI. You can go to the different skill consoles to delete the fake skill &#8220;hello world&#8221; you created.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/09/20/transfer-a-aws-lambda-function-from-the-online-editor-to-the-ask-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Add a domain to a Let&#8217;s Encrypt certificate</title>
		<link>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/</link>
					<comments>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 07 Jul 2022 08:03:32 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2153</guid>

					<description><![CDATA[For Apache, in the folder sites-available, you need to create your the-new-one.your-domain.com.conf file. Then enable the new site with a2ensite the-new-one.your-domain.com. You can list all domains associated with a certificate: certbot certificates Now we add the SSL using certbot. You need to list all the existing domains and add the new one: certbot --apache --cert-name [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>For Apache, in the folder <code>sites-available</code>, you need to create your <code>the-new-one.your-domain.com.conf</code> file. Then enable the new site with <code>a2ensite the-new-one.your-domain.com</code>.</p>
<p>You can list all domains associated with a certificate:</p>
<pre class="brush:bash">certbot certificates</pre>
<p>Now we add the SSL using <code>certbot</code>. You need to list all the existing domains and add the new one:</p>
<pre class="brush:bash">certbot --apache --cert-name your-domain.com -d first.your-domain.com,second.your-domain.com,third.your-domain.com,the-new-one.your-domain.com</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/07/07/add-a-domain-to-a-lets-encrypt-certificate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Get email address from a Azure DevOps &#8220;by&#8221; field in Power Apps Flow</title>
		<link>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/</link>
					<comments>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 13 May 2022 07:59:24 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2146</guid>

					<description><![CDATA[If you need to get an email from an Azure DevOps work item (e.g. from the &#8220;Changed By&#8221; field), it might be tricky in Power Apps Flow because it will return &#8220;John Doe &#60;john@doe.com>&#8221;. To only extract the email from this string, you&#8217;ll have to use the below: first(split(last(split([YOUR_FIELD],''))]]></description>
										<content:encoded><![CDATA[<p>If you need to get an email from an Azure DevOps work item (e.g. from the &#8220;Changed By&#8221; field), it might be tricky in Power Apps Flow because it will return &#8220;John Doe &lt;john@doe.com>&#8221;.</p>
<p>To only extract the email from this string, you&#8217;ll have to use the below:</p>
<pre class="js">first(split(last(split([YOUR_FIELD],'<')),'>'))</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/05/13/get-email-address-from-a-azure-devops-by-field-in-power-apps-flow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Use CTRL and TAB to switch between two tabs in Chrome</title>
		<link>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/</link>
					<comments>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 18 Mar 2022 10:38:48 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2142</guid>

					<description><![CDATA[It&#8217;s super handy to be able to switch between two tabs in the web browser… But it&#8217;s tricky to set it up in Chrome! Install AutoControl: Keyboard shortcut, Mouse gesture Install the native component as the extension asks for Add a new action The trigger is LEFT CTRL and TAB The action is Switch to [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It&#8217;s super handy to be able to switch between two tabs in the web browser… But it&#8217;s tricky to set it up in Chrome!</p>
<ol>
<li>Install <a href="https://chrome.google.com/webstore/detail/autocontrol-keyboard-shor/lkaihdpfpifdlgoapbfocpmekbokmcfd">AutoControl: Keyboard shortcut, Mouse gesture</a></li>
<li>Install the native component as the extension asks for</li>
<li>Add a new action</li>
<li>The trigger is <code>LEFT CTRL</code> and <code>TAB</code></li>
<li>The action is <b>Switch to previous tab</b></li>
</ol>
<p>It should now work to switch between tabs using <code>LEFT CTRL</code> + <code>TAB</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/03/18/use-ctrl-and-tab-to-switch-between-two-tabs-in-chrome/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Portable version of NodeJS on Windows</title>
		<link>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/</link>
					<comments>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sat, 01 Jan 2022 20:19:11 +0000</pubDate>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2130</guid>

					<description><![CDATA[(This is a corrected version of this blog post) Install Cmder in your desired location. Download nvm-noinstall.zip from the latest release. Extract the contents of nvm-noinstall.zip (i.e.: nvm.exe …) into the bin folder inside of the portable Cmder folder. Navigate to the bin. Create a new file called install_fix.cmd that contains this code. Open a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>(This is a corrected version of this <a href="https://dev.to/yougotwill/portable-nodejs-without-administrator-access-1elk">blog post</a>)</p>
<ol>
<li>Install <a href="https://cmder.net/">Cmder</a> in your desired location.</li>
<li>Download <code>nvm-noinstall.zip</code> from the <a href="https://github.com/coreybutler/nvm-windows/releases/latest">latest release</a>.</li>
<li>Extract the contents of <code>nvm-noinstall.zip</code> (i.e.: <code>nvm.exe</code> …) into the <code>bin</code> folder inside of the portable Cmder folder.</li>
<li>Navigate to the <code>bin</code>.</li>
<li>Create a new file called <code>install_fix.cmd</code> that contains <a href="https://gist.github.com/Aymkdn/c02b50e7ed98e19add3ce5af0a40ee78">this code</a>.</li>
<li>Open a terminal in the <code>bin</code> folder and type <code>.\install_fix.cmd</code></li>
<li>When asked to enter the path use the full path to your Cmder <code>bin</code> folder.</li>
<li>If it worked, a file called <code>settings.txt</code> has been created in the your Cmder <code>bin</code> folder.</li>
<li>Close the terminal, and reopen it in the <code>bin</code> folder.</li>
<li>Install the version of Node you want, e.g. <code>nvm install latest</code>.</li>
<li>Wait until the installation is completed, then, inside the <code>bin</code> folder, there should be a new folder containing the latest Node version (e.g. <code>v17.3.0</code>).</li>
</ol>
<p>From there, you can use the full path to your Cmder <code>bin</code> + the Node version folder + <code>node.exe</code> to execute something with this version of Node using Powershell, CMD or other terminal.</p>
<p>For example:</p>
<pre class="brush: powershell">
PS D:\experiments\my-stuff\> D:\experiments\nodejs-portable\cmder_mini\bin\v17.3.0\node.exe index.js
</pre>
<p>You could use Cmder with the Node path in the Startup Settings of the app; e.g. <code>set "PATH=D:\experiments\nodejs-portable\cmder_mini\bin\v17.3.0;%PATH%"</code>. This way, in Cmder, when typing <code>node.exe</code> it&#8217;s the portable version that will be used.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2022/01/01/portable-version-of-nodejs-on-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Redirect non-www to www on a PHPBB Forum</title>
		<link>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/</link>
					<comments>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 29 Dec 2021 08:44:46 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2128</guid>

					<description><![CDATA[In the PHPBB directory, edit the file .htaccess and after RewriteRule ^(.*)$ app.php [QSA,L] you can enter: RewriteCond %{HTTPS} off # First rewrite to HTTPS: # Don't put www. here. If it is already there it will be included, if not # the subsequent rule will catch it. RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Now, rewrite [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In the PHPBB directory, edit the file <code>.htaccess</code> and after <code>RewriteRule ^(.*)$ app.php [QSA,L]</code> you can enter:</p>
<pre>
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/12/29/redirect-non-www-to-www-on-a-phpbb-forum/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Debug a third party Android APK</title>
		<link>https://blog.kodono.info/wordpress/2021/11/29/debug-a-third-party-android-apk/</link>
					<comments>https://blog.kodono.info/wordpress/2021/11/29/debug-a-third-party-android-apk/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 29 Nov 2021 15:14:42 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2097</guid>

					<description><![CDATA[(inspired by this blog post) 1) Install smalidea plugin Download the smalidea plugin (see also the related Github Repository). Open up Android Studio and you should see the welcome screen like the one on screenshot below (if not, close your current project by selecting File -> Close project), go to the Plugins section, and from [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>(inspired by <a href="https://malacupa.com/2018/11/11/debug-decompiled-smali-code-in-android-studio-3.2.html">this blog post</a>)</p>
<h2>1) Install smalidea plugin</h2>
<p>Download the <a href="https://bitbucket.org/JesusFreke/smalidea/downloads/">smalidea plugin</a> (see also the related <a href="https://github.com/JesusFreke/smalidea">Github Repository</a>).</p>
<p>Open up <a href="https://developer.android.com/studio">Android Studio</a> and you should see the welcome screen like the one on screenshot below (if not, close your current project by selecting <code>File -> Close project</code>), go to the <code>Plugins</code> section, and from the wheel icon, select <code>Install Plugin from Disk...</code>. Select the smalidea plugin (ZIP file) you downloaded.<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture.png" alt="Android Studio welcome screen" width="812" height="349" class="aligncenter size-full wp-image-2098" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture.png 812w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-300x129.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-768x330.png 768w" sizes="auto, (max-width: 812px) 100vw, 812px" /></p>
<h2>2) Get the third party APK</h2>
<p>You first need <strong>to know the type of platform</strong> where you&#8217;ll do your debug tests. To do so, make sure <b>your device is connected to your computer</b> (it could also be a virtual device started from the AVD Manager) with <code>adb devices</code>.<br />
Then, use the command <code>adb shell getprop ro.product.cpu.abi</code> to find the type of processor you have. When I use my phone, I got <b>arm64-v8a</b>.</p>
<p>Go to an APK platform, like <a href="https://apkcombo.com/">https://apkcombo.com/</a> and search for the Android app you want to debug. Download the <b>APK version</b> that fits to the type you found before:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-1.png" alt="screenshot of https://apkcombo.com/" width="992" height="667" class="aligncenter size-full wp-image-2100" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-1.png 992w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-1-300x202.png 300w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-1-768x516.png 768w" sizes="auto, (max-width: 992px) 100vw, 992px" /></p>
<h2>2bis) Have a look at the APK content</h2>
<p>You can use <a href="https://github.com/skylot/jadx">JADX</a> to open the APK and have a quick look at the code.</p>
<h2>3) Decompile APK</h2>
<p>With <a href="https://ibotpeaches.github.io/Apktool/">APKTool</a>, we&#8217;ll use the command: <code>.\apktool.bat d ".\the_original_app_from_apkcombo.com.apk" -o app_to_debug</code>.<br />
A folder called <b>app_to_debug</b> is created with the decompiled version of the application.</p>
<p>Next, we need to copy the source files: <b>create a folder called &#8220;src&#8221;</b> in the new <b>app_to_debug</b> folder, and type <code>cp -R smali*/* src/</code>.</p>
<h2>4) Import project in Android Studio</h2>
<p><b>Open an existing Android Studio project</b> and select the <code>app_to_debug</code> folder where you unpacked APK.</p>
<p>Once the project loads, you need to tell the IDE where is your source code. Make sure you&#8217;re using the &#8220;Project view&#8221; in the left side panel:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-2.png" alt="" width="201" height="143" class="aligncenter size-full wp-image-2105" /></p>
<p>Now you can see folder structure in your left panel. Find <code>src/</code> subfolder right click it and select <code>Mark Directory as -> Sources Root</code>.</p>
<h2>5) Prepare App for Debugging</h2>
<p>Open <code>AndroidManifest.xml</code> from the <code>app_to_debug</code> and find the XML element <code>&lt;application&gt;</code>. Add the attribute <code>android:debuggable</code> with value <b>&#8220;true&#8221;</b>. Example:</p>
<pre class="brush:xml">
&lt;application android:debuggable="true" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:largeHeap="true" android:name="org.horaapps.leafpic.App" android:theme="@style/Theme.AppCompat"&gt;
</pre>
<h2>6) Repack to APK</h2>
<p>You can now repack to APK with the command <code>.\apktool.bat b -d ".\app_to_debug\" -o app_unsigned.apk</code></p>
<h2>7) Sign the APK</h2>
<h3>7a) Create a keystore</h3>
<p>You first need a keystore using <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html">keytool</a> and type the below command:<br />
<code>keytool -genkeypair -v -keystore mykey.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000</code></p>
<p>Several questions you&#8217;ll be asked, as well as a password. Make sure to remember the password for later.</p>
<h3>7b) Validate the APK</h3>
<p>You then need <code>zipalign</code> that can be found in the Android SDK folder (e.g. <em>C:\Users\USERNAME\AppData\Local\Android\Sdk\build-tools\31.0.0\zipalign.exe</em>) to validate your APK:<br />
<code>.\Path\to\Android\Sdk\build-tools\31.0.0\zipalign.exe -f -v 4 .\app_unsigned.apk .\app_ready.apk</code></p>
<h3>7c) Sign the APK</h3>
<p>Finally you can sign the new created APK with <code>apksigner</code>:<br />
<code>.\Path\to\Android\Sdk\build-tools\31.0.0\apksigner.bat sign --ks .\mykey.keystore --ks-key-alias app_to_debug --out .\app_signed.apk .\app_ready.apk</code></p>
<h2>8) Install the APK</h2>
<p>You can install it using <code>adb install app_signed.apk</code></p>
<h2>9) Prepare the host</h2>
<p>On your Android device, go to <code>Settings -> Developer options</code> and set <code>USB debugging</code> and <code>Wait for debugger options on</code>. The latter is optional but useful as it allows you wait for debugger connection and not to run app yet.</p>
<p>Finally, you should tap on <code>Select debug app</code> and choose the app you just installed. After all of these, your Developer options menu should look somewhat like this:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-3.png" alt="" width="360" height="619" class="aligncenter size-full wp-image-2121" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-3.png 360w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-3-174x300.png 174w" sizes="auto, (max-width: 360px) 100vw, 360px" /></p>
<p>Now, <b>launch the app</b> on the Android device, and you&#8217;ll get the below message:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-4.png" alt="" width="360" height="234" class="aligncenter size-full wp-image-2122" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-4.png 360w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/11/Capture-4-300x195.png 300w" sizes="auto, (max-width: 360px) 100vw, 360px" /></p>
<h2>10) Forward debugger port</h2>
<p>You can use the adb&#8217;s port forwarding feature and forward JDWP service where application&#8217;s debug interface is listening.</p>
<p>Find the JDWP port with the command <code>adb jdwp</code>, then use this port with the command:<br />
<code>adb forward tcp:5005 jdwp:JDWP_PORT</code></p>
<h2>11) Connect Debugger</h2>
<p>Go to Android Studio and from its top menu bar choose <code>Run -> Debug…</code>, then a small message appears with one unique option that is <code>Edit Configurations...</code>. There, in the window, use a plus (+) button at the opt left, and add a new configuration of type <b>Remote</b>. Leave the default configuration as is. Click the Debug button and your app should be running with the attached debugger which means it will stop once a breakpoint is hit and you can investigate the content of app&#8217;s variables.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/11/29/debug-a-third-party-android-apk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Capacitor Plugin for HTTP requests with self-signed SSL certificates</title>
		<link>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/</link>
					<comments>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sat, 30 Oct 2021 13:26:01 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2094</guid>

					<description><![CDATA[I&#8217;m using CapacitorJS for easy development with Android. I needed a way to do an HTTPS request to a box that uses self-signed SSL certificate. To accomplish it, I created my own capacitor plugin. See this wiki page for details: https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m using CapacitorJS for easy development with Android. I needed a way to do an HTTPS request to a box that uses self-signed SSL certificate. To accomplish it, I created my own capacitor plugin.</p>
<p>See this wiki page for details: <a href="https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates">https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Capacitor-Plugin-for-HTTP-requests-with-self-signed-SSL-certificates</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/10/30/capacitor-plugin-for-http-requests-with-self-signed-ssl-certificates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enable CORS with IIS</title>
		<link>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/</link>
					<comments>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 13 Oct 2021 12:28:53 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2090</guid>

					<description><![CDATA[It&#8217;s as easy as editing the web.config file with the below: &#60;?xml version="1.0" encoding="UTF-8"?> &#60;configuration> &#60;system.webServer> &#60;httpProtocol> &#60;customHeaders> &#60;add name="Access-Control-Allow-Origin" value="https://my.site.com" /> &#60;add name="Access-Control-Allow-Headers" value="Authorization,Accept,Content-Type,X-Requested-With" /> &#60;add name="Access-Control-Allow-Credentials" value="true" /> &#60;/customHeaders> &#60;/httpProtocol> &#60;/system.webServer> &#60;/configuration>]]></description>
										<content:encoded><![CDATA[<p>It&#8217;s as easy as editing the <code>web.config</code> file with the below:</p>
<pre class="brush:xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;configuration>
  &lt;system.webServer>
    &lt;httpProtocol>
      &lt;customHeaders>
        &lt;add name="Access-Control-Allow-Origin" value="https://my.site.com" />
        &lt;add name="Access-Control-Allow-Headers" value="Authorization,Accept,Content-Type,X-Requested-With" />
        &lt;add name="Access-Control-Allow-Credentials" value="true" />
      &lt;/customHeaders>
    &lt;/httpProtocol>
  &lt;/system.webServer>
&lt;/configuration>
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/10/13/enable-cors-with-iis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Microsoft Sharepoint Migration Tool that works behind a proxy</title>
		<link>https://blog.kodono.info/wordpress/2021/05/06/microsoft-sharepoint-migration-tool-that-works-behind-a-proxy/</link>
					<comments>https://blog.kodono.info/wordpress/2021/05/06/microsoft-sharepoint-migration-tool-that-works-behind-a-proxy/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 06 May 2021 08:16:57 +0000</pubDate>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2079</guid>

					<description><![CDATA[It looks like the newer version of the Microsoft Sharepoint Migration Tool doesn&#8217;t accept to work behind a corporate network. A colleague has an older version (april 2020) that works correctly. Here is the link to download this version: SharepointMigrationToolSetup_April2020]]></description>
										<content:encoded><![CDATA[<p>It looks like the newer version of the <a href="https://docs.microsoft.com/en-us/sharepointmigration/introducing-the-sharepoint-migration-tool">Microsoft Sharepoint Migration Tool</a> doesn&#8217;t accept to work behind a corporate network.</p>
<p>A colleague has an older version (april 2020) that works correctly. Here is the link to download this version: <a href="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/SharepointMigrationToolSetup_April2020.zip">SharepointMigrationToolSetup_April2020</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/05/06/microsoft-sharepoint-migration-tool-that-works-behind-a-proxy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Access to Sharepoint Online with Windows Explorer</title>
		<link>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/</link>
					<comments>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 06 May 2021 07:21:03 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2071</guid>

					<description><![CDATA[If you want to access your Sharepoint online (https://[tenant].sharepoint.com), you first need to make sure the site is in the Trusted Website in Internet Explorer. Open Internet Explorer, navigate to the website, then open the Internet Options: Add your website to the Trusted Website zone: Next open Windows Explorer and right-click on &#8220;Your PC &#8220;, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If you want to access your Sharepoint online (https://[tenant].sharepoint.com), you first need to make sure the site is in the Trusted Website in Internet Explorer.<br />
<strong>Open Internet Explorer</strong>, navigate to the website, then open the <strong>Internet Options</strong>:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1.png" alt="" width="421" height="354" class="aligncenter size-full wp-image-2072" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1.png 421w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options1-300x252.png 300w" sizes="auto, (max-width: 421px) 100vw, 421px" /></p>
<p>Add your website to the <strong>Trusted Website zone</strong>:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2.png" alt="" width="482" height="272" class="aligncenter size-large wp-image-2073" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2.png 482w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/internet_options2-300x169.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></p>
<p>Next open Windows Explorer and <strong>right-click on &#8220;Your PC &#8220;, then select &#8220;Map network drive…&#8221;</strong>:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1.png" alt="" width="413" height="330" class="aligncenter size-full wp-image-2074" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1.png 413w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network1-300x240.png 300w" sizes="auto, (max-width: 413px) 100vw, 413px" /></p>
<p>You need to use a special path to your website. Let&#8217;s say your website is located at <a href="https://tenant.sharepoint.com/sites/Marketing">https://tenant.sharepoint.com/sites/Marketing</a> then the path to use is:<br />
<b>\\tenant.sharepoint.com@ssl\DavWWWRoot\sites\Marketing\</b></p>
<p>Note the <code>@ssl</code> and <code>DavWWWRoot</code> that are required.</p>
<p>Assign this path to a drive letter:<br />
<img loading="lazy" decoding="async" src="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2.png" alt="" width="614" height="455" class="aligncenter size-full wp-image-2077" srcset="https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2.png 614w, https://blog.kodono.info/wordpress/wp-content/uploads/2021/05/network2-300x222.png 300w" sizes="auto, (max-width: 614px) 100vw, 614px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2021/05/06/access-to-sharepoint-online-with-windows-explorer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Let&#8217;s Encrypt Certificate: how to remove a domain from a certname that contains several domains</title>
		<link>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/</link>
					<comments>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 17 Jul 2020 07:18:13 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[ssl]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2019</guid>

					<description><![CDATA[My server manages several websites with different domains using Apache. The first time I used Let&#8217;s Encrypt I followed the default command which has created one certname for ALL my domains. Now I want to remove just one domain from this certificate, and it becomes complicated to understand how to do it. The best solution [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My server manages several websites with different domains using Apache. The first time I used Let&#8217;s Encrypt I followed the default command which has created one certname for ALL my domains.</p>
<p>Now I want to remove just one domain from this certificate, and it becomes complicated to understand how to do it. The best solution is to create a new certificate for each of my domains, and then to delete the original certname.</p>
<p>Let&#8217;s say my certname is called <code>www.example.com</code> and it contains the below domains:</p>
<ul>
<li>www.example.com</li>
<li>example.com</li>
<li>blog.example.com</li>
<li>other-example.com</li>
<li>www.other-example.com</li>
<li>my-other-domain.com</li>
<li>www.my-other-domain.com</li>
<li>api.test.com</li>
</ul>
<p>The one I don&#8217;t need anymore is <code>*.my-other-domain.com</code>.</p>
<p>First, we create a certificate individually for each domain that we want to keep:</p>
<pre class="brush:python">
certbot --apache --cert-name example.com -d example.com,www.example.com,blog.example.com
certbot --apache --cert-name other-example.com -d other-example.com,www.other-example.com
certbot --apache --cert-name test.com -d api.test.com
</pre>
<p><code>--cert-name</code> permits to give our own name to the certificate, and <code>-d</code> indicates which domains should be added to this certificate.</p>
<p>Then we can list all our certificates:</p>
<pre class="brush:bash">
certbot certificates
</pre>
<p>Using the above command you can find the <code>Certificate Path</code> and now we can delete our original certificate:</p>
<pre class="brush:bash">
certbot revoke --cert-path /etc/letsencrypt/live/www.example.com/fullchain.pem
</pre>
<p>You&#8217;re all set! All your domains should still have a correct certificate, and you revoked the ones you don&#8217;t need anymore.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2020/07/17/lets-encrypt-certificate-how-to-remove-a-domain-from-a-certname-that-contains-several-domains/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Upgrade from MySQL (5.6.40 – Debian 9.12) to MariaDB</title>
		<link>https://blog.kodono.info/wordpress/2020/04/05/upgrade-from-mysql-5-6-40-debian-9-12-to-mariadb/</link>
					<comments>https://blog.kodono.info/wordpress/2020/04/05/upgrade-from-mysql-5-6-40-debian-9-12-to-mariadb/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Sun, 05 Apr 2020 16:24:43 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2016</guid>

					<description><![CDATA[(Source) A few steps: sudo apt-get install software-properties-common dirmngr wget -qO - https://mariadb.org/mariadb_release_signing_key.asc &#124; sudo apt-key add - nano /etc/apt/sources.list.d/mariadb.list In mariadb.list we add the two below lines: deb [arch=amd64,i386,ppc64el] http://mirror.23media.de/mariadb/repo/10.4/debian stretch main deb-src http://mirror.23media.de/mariadb/repo/10.4/debian stretch main Then: apt-get update apt-get install mariadb-server]]></description>
										<content:encoded><![CDATA[<p>(<a href="https://downloads.mariadb.org/mariadb/repositories/#distro=Debian&#038;distro_release=stretch--stretch&#038;mirror=23Media&#038;version=10.4">Source</a>)</p>
<p>A few steps:</p>
<pre class="brush:bash">
sudo apt-get install software-properties-common dirmngr
wget -qO - https://mariadb.org/mariadb_release_signing_key.asc | sudo apt-key add -
nano /etc/apt/sources.list.d/mariadb.list
</pre>
<p>In <code>mariadb.list</code> we add the two below lines:</p>
<pre class="brush:bash">
deb [arch=amd64,i386,ppc64el] http://mirror.23media.de/mariadb/repo/10.4/debian stretch main
deb-src http://mirror.23media.de/mariadb/repo/10.4/debian stretch main
</pre>
<p>Then:</p>
<pre class="brush:bash">
apt-get update
apt-get install mariadb-server
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2020/04/05/upgrade-from-mysql-5-6-40-debian-9-12-to-mariadb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sharepoint error message &#8220;Invalid URL argument&#8221; with WebPartPages</title>
		<link>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/</link>
					<comments>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Fri, 29 Nov 2019 17:10:07 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2005</guid>

					<description><![CDATA[For me the issue was this part of the XML request: &#60;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages/'&#62; (with a / at the end of the url) instead of &#60;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages'&#62;.]]></description>
										<content:encoded><![CDATA[<p>For me the issue was this part of the XML request: <code>&lt;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages/'&gt;</code> (with a <code>/</code> at the end of the url) instead of <code>&lt;AddWebPart xmlns='http://microsoft.com/sharepoint/webpartpages'&gt;</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/11/29/sharepoint-error-message-invalid-url-argument-with-webpartpages/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>chrome-search://local-ntp/local-ntp.html makes Chrome unresponsive</title>
		<link>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/</link>
					<comments>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Thu, 21 Nov 2019 14:55:43 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=2001</guid>

					<description><![CDATA[Sometimes, when I open a new tab in Chrome, it first tries to get chrome-search://local-ntp/local-ntp.html and while it&#8217;s doing it, I cannot enter any URL. Eventually it will popup a message asking me if I want to wait or exit the page&#8230; The way I found to fix it is to go to the page [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Sometimes, when I open a new tab in Chrome, it first tries to get <code>chrome-search://local-ntp/local-ntp.html</code> and while it&#8217;s doing it, I cannot enter any URL. Eventually it will popup a message asking me if I want to wait or exit the page&#8230;</p>
<p>The way I found to fix it is to go to the page <a href="chrome://flags/#use-google-local-ntp">chrome://flags/#use-google-local-ntp</a>, then I disabled <b>&#8220;Enable using the Google local NTP&#8221;</b></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/11/21/chrome-search-local-ntp-local-ntp-html-makes-chrome-unresponsive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Our system has detected an unusual rate of unsolicited mail originating from your IP address</title>
		<link>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/</link>
					<comments>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 30 Oct 2019 08:53:26 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[english]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1998</guid>

					<description><![CDATA[Gmail could report back this error message: &#8220;Our system has detected an unusual rate of unsolicited mail originating from your IP address&#8221; If your DKIM, SPF and DMARC are all set and your emails are correctly identified, then you may want to check the both links: Good links to get help on what to do: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Gmail could report back this error message: &#8220;Our system has detected an unusual rate of unsolicited mail originating from your IP address&#8221;</p>
<p>If your DKIM, SPF and DMARC are all set and your emails are correctly identified, then you may want to check the both links:</p>
<ul>
<li>Good links to get help on what to do: <a href="https://support.google.com/mail/thread/9191597?hl=en">https://support.google.com/mail/thread/9191597?hl=en</a></li>
<li>The form to be removed from GMail blacklist: <a href="https://support.google.com/mail/contact/bulk_send_new">https://support.google.com/mail/contact/bulk_send_new</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/10/30/our-system-has-detected-an-unusual-rate-of-unsolicited-mail-originating-from-your-ip-address/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sharepoint REST API to index a column or delete a column and more&#8230;</title>
		<link>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/</link>
					<comments>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Mon, 19 Aug 2019 09:16:50 +0000</pubDate>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1979</guid>

					<description><![CDATA[Due to the 5,000 items threshold limitation it can become very frustrating to administrate Sharepoint. For example, if your list has more than 5,000 items, you cannot add an index, delete a lookup/people column, delete the list or the website, and more ! Hopefully some of the operations can be done with REST API, and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Due to the 5,000 items threshold limitation it can become very frustrating to administrate Sharepoint. For example, if your list has more than 5,000 items, you cannot add an index, delete a lookup/people column, delete the list or the website, and more !</p>
<p>Hopefully some of the operations can be done with REST API, and in my organization the threshold limitation is removed during the night (1am to 4am). By combining a schedule service (like <a href="https://github.com/node-schedule/node-schedule">node-schedule</a>) with my library <a href="https://aymkdn.github.io/SharepointPlus/">SharepointPlus</a> I can run this admin tasks during the night while my virtual computer is running.</p>
<h2>To delete a column</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('My List')/fields/getbytitle('Column To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
});
</pre>
<h2>To index a column</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('My List')/fields/getbytitle('Column to Index')",
  method: "POST",
  body:JSON.stringify({
    "__metadata":{ type: "SP.Field" },
    "Indexed":true
  }),
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "MERGE"
  }
})
</pre>
<h2>To delete a list</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('List To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
<h2>To delete a list</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/_api/web/lists/getbytitle('List To Delete')",
  method: "POST",
  headers: {
    "IF-MATCH": "*",
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
<h2>To delete a site</h2>
<pre class="brush:javascript">
$SP().ajax({
  url:"https://company.com/sharepoint/team/sales/website_to_delete/_api/web/",
  method: "POST",
  headers: {
    "X-HTTP-Method": "DELETE"
  }
})
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/08/19/sharepoint-rest-api-to-index-a-column-or-delete-a-column-and-more/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SharePoint 2013 Search REST API options</title>
		<link>https://blog.kodono.info/wordpress/2019/07/24/sharepoint-2013-search-rest-api-options/</link>
					<comments>https://blog.kodono.info/wordpress/2019/07/24/sharepoint-2013-search-rest-api-options/#respond</comments>
		
		<dc:creator><![CDATA[Aymeric]]></dc:creator>
		<pubDate>Wed, 24 Jul 2019 08:23:37 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">https://blog.kodono.info/wordpress/?p=1973</guid>

					<description><![CDATA[Finding the documentation for the Search REST API of Sharepoint is difficult&#8230;. There is a very old blog post that I&#8217;m going to replicate here to give more visibility: &#160; Location of the Search Rest service The Search REST service is located at the following URI: http://host/site/_api/search &#160; The Search REST API The Search REST [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Finding the documentation for the Search REST API of Sharepoint is difficult&#8230;. There is a very <a href="https://blogs.msdn.microsoft.com/nadeemis/2012/08/24/sharepoint-2013-search-rest-api/">old blog post</a> that I&#8217;m going to replicate here to give more visibility:</p>
<p>&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="text-decoration: underline;">Location of the Search Rest service</span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">The Search REST service is located at the following URI: <a href="http://host/site/_api/search">http://host/site/_api/search</a></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="text-decoration: underline;">The Search REST API</span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">The Search REST service exposed by the URI specified above provides the following methods or entry points:</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<div style="direction: ltr;">
<table style="border: 1pt solid #a3a3a3; margin-left: 0.333in; border-collapse: collapse; direction: ltr;" valign="top" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">query</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 2.709in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><a href="http://host/site/_api/search/query">http://host/site/_api/search/query</a></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 8.953in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">Supports HTTP Get&nbsp;and is used to retrieve search results.</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">postquery</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 2.709in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><a href="http://host/site/_api/search/postquery">http://host/site/_api/search/postquery</a></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 8.953in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">Supports HTTP POST and is used to retrieve search results. This method can be used to overcome URI length restrictions when using the HTTP GET based method &#8220;<span style="font-weight: bold;">query</span>&#8220;.</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">suggest</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 2.709in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><a href="http://host/site/_api/search/suggest">http://host/site/_api/search/suggest</a></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 8.953in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">Supports HTTP GET and is used to retrieve query suggestions.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="margin: 0in 0in 0in 0.375in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="text-decoration: underline;">Query Parameters</span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">The following table lists the query parameters available for the <span style="font-weight: bold;">query </span>entry point:</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<div>
<table style="border: 1pt solid #a3a3a3; margin-left: 0.133in; border-collapse: collapse; direction: ltr;" valign="top" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Name</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Description</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Type</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Default</span></p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">querytext</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The text of the&nbsp;search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String &#8211; Maximum query text length allowed by the Keyword Query OM is 4096 characters.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;search is cool&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">querytemplate</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The query template text.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enableinterleaving</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies if the result sets which are generated by executing query rule actions to add result&nbsp; block should be mixed with the result set for the original query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enableinterleaving=false</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">sourceid</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the&nbsp;unique identifier of the Result Source to use for executing the search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;term&#8217;&amp;sourceid=&#8217;8413cd39-2156-4e00-b54d-11efd9abdb89&#8242;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">rankingmodelid</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The GUID of the Rank Model to be used for this search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">startrow</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">A zero-based index of the first search result to be returned.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer [ &gt;= 0]</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">0</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;startrow=11</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">rowlimit</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The maximum number of search results to be returned, starting at the index specified in&nbsp; startrow.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer&nbsp;[ &gt;= 0]</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">10</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;startrow=11&amp;rowlimit=3</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">rowsperpage</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The number of&nbsp;results to return per page.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer&nbsp;[ &gt;= 0]</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">0</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">selectproperties</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the list of managed properties to return for each search result item. For a managed property to be returned; the Retrievable flag must be set to &#8220;true&#8221; in the Search Schema.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;selectproperties=&#8217;Path,Url,Title,Author&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">culture</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the identifier of the language culture of the search query. If present, the value must be a valid LCID of a culture name. A list of LCIDs is available <a href="http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx">here</a>.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">-1</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;culture=1044</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">refiners</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies a list of refiners to return as a comma-separated list of strings.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 8pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;refiners=&#8217;companies,contentclass,ContentType,FileExtension,FileType&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">refinementfilters</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The list of refinement tokens for drilldown into search results. Refinement tokens are returned as part of the RefinementResults table for the search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;sharepoint&#8217;&amp;refiners=&#8217;filetype&#8217;&amp;refinementfilters=&#8217;filetype:equals(&#8220;pptx&#8221;)&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">hiddenconstraints</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies additional query terms that will be appended to the query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;hiddenconstraints=&#8217;powerpoint&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">sortlist</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the list of properties to sort the search results by.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;sortlist=&#8217;rank:ascending&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablestemming</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether stemming is enabled for the query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablestemming=false</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">trimduplicates</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether duplicate items should be removed from search results. This property can also<br />&nbsp;be used to collapse hits in the result set.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;trimduplicates=false</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">trimduplicatesincludeid</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the value associated with a collapse group, typically used when a user clicks the duplicates link of an item with duplicates.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">long</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">0L</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;trimduplicates=true&amp;trimduplicatesincludeid=47</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">timeout</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the amount of time, in milliseconds, before the query request times out.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">30000</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;timeout=50000</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablenicknames</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether the exact terms in the search query are used to find matches, or if nicknames<br />&nbsp;are used as well.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablenicknames=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablephonetic</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether the phonetic forms of the query terms are used to find matches.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablephonetic=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablefql</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether the query string is according to the FAST Query Language (FQL) syntax.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablefql=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">hithighlightedproperties</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the list of properties to include in the HitHighlightedProperties for each result item.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;hithighlightedproperties=&#8217;Title,Author&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bypassresulttypes</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies if the search result item type should be returned for the query results.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">processbestbets</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies if the search promoted results should be returned, if available, as a result set.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">clienttype</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Name of a client which issued query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">personalizationdata</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Gets or sets the unique identifier (GUID) for the current user who submitted the search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">resultsurl</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the URL for the page where the search results are going to be displayed.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">querytag</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Any custom tags to be used to identify the query. Multiple tags are separated by semicolons.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4">&nbsp;</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablequeryrules</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies if Query Rules are turned on for this query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablequeryrules=false</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">enablesorting</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Indicates whether results should be sorted.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/query?querytext=&#8217;terms&#8217;&amp;enablesorting=false</span></td>
</tr>
</tbody>
</table>
</div>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="text-decoration: underline;">Suggest Parameters</span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">The following table lists the query parameters available from the suggest entry point:</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;&nbsp;</p>
<div style="direction: ltr;">
<table style="border: 1pt solid #a3a3a3; margin-left: 0.133in; border-collapse: collapse; direction: ltr;" valign="top" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Name</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Description</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Type</span></p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; width: 0.837in; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-weight: bold;">Default</span></p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">querytext</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The text of the search query.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">String</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Empty</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">inumberofquerysuggestions</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The number of query suggestions to retrieve.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer&nbsp;[ &gt; 0]</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">5</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;inumberofquerysuggestions=6</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">inumberofresultsuggestions</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">The number of personal results to retrieve.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer&nbsp;[ &gt; 0]</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">5</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;inumberofresultsuggestions=6</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">fprequerysuggestions</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether to retrieve pre-query suggestions or post-query suggestions.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;fprequerysuggestions=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">fhithighlighting</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether the query suggestions should be highlighted. If &#8220;true&#8221;, the terms<br />&nbsp;in the returned query suggestions that match terms in the specified query are&nbsp; surrounded with &lt;B&gt; and &lt;/B&gt; HTML tags.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">True</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;fhithighlighting=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">fcapitalizefirstletters</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies whether to capitalize first letters in each term in query suggestions.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;fcapitalizefirstletters=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">showpeoplenamesuggestions</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies if people names should be included in query suggestions.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">bool</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">False</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;showpeoplenamesuggestions=true</span></td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">culture</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Specifies the identifier of the language culture of the search query. If present, the value must be a valid LCID of a culture name. A nice list of LCIDs is available <a href="http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx">here</a>.</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">Integer</p>
</td>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top;">
<p style="margin: 0in; font-family: Calibri; font-size: 9pt;">-1</p>
</td>
</tr>
<tr>
<td style="padding: 4pt; border: 1pt solid #a3a3a3; vertical-align: top; padding-bottom: 8pt;" colspan="4"><span style="color: #5499b9; text-decoration: underline;">http://host/site/_api/search/suggest?querytext=&#8217;nad&#8217;&amp;culture=1044</span></td>
</tr>
</tbody>
</table>
</div>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;References:</p>
<ul>
<li>
<div style="margin: 0in; font-family: Calibri; font-size: 11pt;"><a href="http://msdn.microsoft.com/en-us/library/hh659202(office.12).aspx">[MS-SRCHCSOM]: Search Client Query Protocol Specification</a></div>
</li>
<li>
<div style="margin: 0in; font-family: Calibri; font-size: 11pt;"><a href="http://msdn.microsoft.com/en-us/library/jj163300(office.15).aspx">Search in SharePoint 2013 on MSDN</a></div>
</li>
</ul>
<h2>Examples</h2>
<p>A <code>postquery</code> request will look like:</p>
<pre class="brush">
POST http://localhost/_api/search/postquery HTTP/1.1
Accept: application/json;odata=verbose
Content-Type: application/json;odata=verbose
Host: localhost
Content-Length: 419

{

 'request': {
     'Querytext': 'sharepoint',
     'StartRow':1,
     'RowLimit':8,
     'SelectProperties': {
          'results': ['Title','ContentSource','DisplayAuthor']
     },
     'TrimDuplicates':true,
     'Refiners':'companies,contentclass,ContentType(filter=7/0/*),FileExtension(filter=7/0/*),FileType(filter=6/0/*)',
     'RefinementFilters': {'results': ['filetype:equals("pptx")'] }
  }
}
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kodono.info/wordpress/2019/07/24/sharepoint-2013-search-rest-api-options/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
