{"id":3975,"date":"2017-05-17T11:12:04","date_gmt":"2017-05-17T09:12:04","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=3975"},"modified":"2023-08-29T10:40:30","modified_gmt":"2023-08-29T08:40:30","slug":"qs_bcs_filter","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/en\/qs_bcs_filter\/","title":{"rendered":"Query string filtering for BCS data"},"content":{"rendered":"\n<p>Nowadays companies very rarely keep their data in one centralized source. Data is usually dispersed into many smaller data sources, served by different engines, based on data type and purpose, company organization, complexity and relations. It was always a typical case in this type of enterprises to write custom applications that gather and analyse data from different sources and present them as they were in the same place.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>Since SharePoint 2010 we have Business Connectivity Services, which are very helpful in retrieving and presenting data from external sources, making it look like the data is actually kept in SharePoint database (through external list).<\/p>\n\n\n\n<p>When dealing with external data sources (especially large ones), we often experience performance issues. This is because SharePoint (by default) gets the whole amount of data from the data source every time user interacts with the external list. This means that we can filter the external list through UI, but filter operation occurs <strong>after<\/strong> the entire set of data is retrieved from the source. So what if we tell data source to pre-filter the result set before it is returned to SharePoint?<\/p>\n\n\n\n<p>In this article we reveal some theory and show clever, practical way to setup filtering for external data sources in SharePoint 2013 through query string parameters to achieve significant performance improvement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducing BDC<\/h2>\n\n\n\n<p>First of all let us explain what BDC actually is and what are its main goals and foundations.<br><em>Business Data Connectivity (often referred as BDC) is a service built into Microsoft SharePoint that enables to declaratively model external systems and to expose external data as a list in SharePoint sites.<\/em><\/p>\n\n\n\n<p>The core function of BDC is to provide connectivity to external systems of different kinds with very little effort. BDC has built-in support for connecting to most common data providers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Databases (in general)<\/li>\n\n\n\n<li>Web services<\/li>\n\n\n\n<li>.NET assemblies<\/li>\n<\/ul>\n\n\n\n<p>There is also a possibility to develop a custom connector plugin through Connector Framework (so in theory BDC service can connect to <strong>any<\/strong> data source).<\/p>\n\n\n\n<p>The following diagram presents general concept of BDC:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdc2.png\"><img decoding=\"async\" width=\"561\" height=\"284\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdc2.png\" alt=\"concept of BDC\" class=\"wp-image-3981\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdc2.png 561w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdc2-300x152.png 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/><\/a><\/figure>\n\n\n\n<p>At the foundation of Business Data Connectivity we have an object called <strong>BDC model<\/strong>, which is a bridge between SharePoint and external data source, describing how the connection is handled and what data is transferred between the two ends. In general, BDC model comprises of an <strong>entity<\/strong> and its <strong>methods<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BDC <strong>entity<\/strong> describes the structure of business entity which is mapped to the real life business object (like customer, order etc.).<\/li>\n\n\n\n<li><strong>Methods<\/strong> represent abstract descriptions of back-end API. A common task when working on BDC model is to create method instances that implement actual communication between external system and the model.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Method types<\/h2>\n\n\n\n<p>Full interface defining possible data operations for BDC model contains the following method types:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/methods2.png\"><img decoding=\"async\" width=\"869\" height=\"269\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/methods2.png\" alt=\"method types\" class=\"wp-image-23849\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/methods2.png 869w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/methods2-300x93.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/methods2-768x238.png 768w\" sizes=\"(max-width: 869px) 100vw, 869px\" \/><\/a><\/figure>\n\n\n\n<p>While complete two-directional communication between SharePoint and external data source will require implementing all methods, for simple one-way communication we will concentrate on Finder method, which returns list of all entities from external data source. We will configure this method to support filtering and to return only the subset of data we are interested in.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating sample BDC model<\/h2>\n\n\n\n<p>Visual Studio will make lots of work for us, so we can quickly setup a project and add model based on <strong>Business Data Connectivity Model<\/strong> template.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdctemplatevs.png\"><img decoding=\"async\" width=\"1024\" height=\"543\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdctemplatevs-1024x543.png\" alt=\"Visual Studio template\" class=\"wp-image-3985\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdctemplatevs-1024x543.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdctemplatevs-300x159.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/bdctemplatevs.png 1055w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>We make couple of quick changes in naming \u2013 feature name, Entity1 and Entity1Service should get more meaningful names (one thing to note \u2013 Visual Studio has already created Farm-scoped feature for us that will be used to deploy BDC model).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/entitynames2-300x254-1.png\"><img decoding=\"async\" width=\"300\" height=\"254\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/entitynames2-300x254-1.png\" alt=\"\" class=\"wp-image-23851\"\/><\/a><\/figure>\n\n\n\n<p>ExternalEntity class should be further changed to define set of metadata to be retrieved from external data source and to be presented to end users.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/externalentity2.png\"><img decoding=\"async\" width=\"340\" height=\"252\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/externalentity2.png\" alt=\"code\" class=\"wp-image-3989\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/externalentity2.png 340w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/externalentity2-300x222.png 300w\" sizes=\"(max-width: 340px) 100vw, 340px\" \/><\/a><\/figure>\n\n\n\n<p>We will also provide a code to return a list of dummy external entities in ReadList method instance.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/readlist1a.png\"><img decoding=\"async\" width=\"1053\" height=\"349\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/readlist1a.png\" alt=\"code\" class=\"wp-image-3990\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/readlist1a.png 1053w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/readlist1a-300x99.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/readlist1a-1024x339.png 1024w\" sizes=\"(max-width: 1053px) 100vw, 1053px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Testing BDC model<\/h2>\n\n\n\n<p>Now we can deploy our solution to SharePoint and test our BDC model.<br>To see the results we need to put Business Data List web part on the page and browse for our BDC model in web part settings.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/contenttypepicker2.png\"><img decoding=\"async\" width=\"927\" height=\"428\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/contenttypepicker2.png\" alt=\"Business Data List\" class=\"wp-image-3992\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/contenttypepicker2.png 927w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/contenttypepicker2-300x139.png 300w\" sizes=\"(max-width: 927px) 100vw, 927px\" \/><\/a><\/figure>\n\n\n\n<p>If you don\u2019t see your model in External Content Type Picker, most probably you\u2019ve made a mistake in model configuration (ULS will help you to track down the problem). If everything is configured correctly, we should see data pulled from external data source with possibility to filter and sort as in normal SharePoint list view (this kind of filtering however happens on SharePoint side, so no matter what filter we choose in a list view, a whole list of entities is retrieved from external data source).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results1a-1.png\"><img decoding=\"async\" width=\"656\" height=\"402\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results1a-1.png\" alt=\"BDC Model Test\" class=\"wp-image-23853\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results1a-1.png 656w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results1a-1-300x184.png 300w\" sizes=\"(max-width: 656px) 100vw, 656px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Making BDC model filterable<\/h2>\n\n\n\n<p>Now we will enable BDC model to be dynamically filtered on Category column.<br>First step is to define filter description for Category column (we can use Visual Studio designer to do that).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryFilter1a.png\"><img decoding=\"async\" width=\"818\" height=\"356\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryFilter1a.png\" alt=\"define filter description for Category column\" class=\"wp-image-3995\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryFilter1a.png 818w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryFilter1a-300x131.png 300w\" sizes=\"(max-width: 818px) 100vw, 818px\" \/><\/a><\/figure>\n\n\n\n<p>We give the filter descriptor a name (in our case it will be called <strong>categoryFilter<\/strong>). In Filter Field property we should say which property from ExternalEntity will be filtered (in our case it is called <strong>Category<\/strong>). We have different type of filters, but since we have a text property, we will use <strong>Wildcard<\/strong> filter.<\/p>\n\n\n\n<p>The second step is to add input parameter to our ReadList method.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryParam2.png\"><img decoding=\"async\" width=\"1084\" height=\"289\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryParam2.png\" alt=\"add input parameter\" class=\"wp-image-3996\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryParam2.png 1084w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryParam2-300x80.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/categoryParam2-1024x273.png 1024w\" sizes=\"(max-width: 1084px) 100vw, 1084px\" \/><\/a><\/figure>\n\n\n\n<p>It is crucial here to bind type descriptor for parameter to filter descriptor created in previous step through <strong>Associated Filter<\/strong> property.<\/p>\n\n\n\n<p>One last step is to adjust ReadList method to actually filter the results (note that <strong>category<\/strong> parameter has been added automatically to reflect changes made to the model).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/readlist2.png\"><img decoding=\"async\" width=\"1021\" height=\"597\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/readlist2.png\" alt=\"category parameter\" class=\"wp-image-23855\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/readlist2.png 1021w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/readlist2-300x175.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/readlist2-768x449.png 768w\" sizes=\"(max-width: 1021px) 100vw, 1021px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Setting up filtering on the page<\/h2>\n\n\n\n<p>Once we have the latest version of our model deployed to the server, we can make additional setup on our page to actually enable filtering with the use of value provided in query string. To achieve that, we should put <strong>Query String (URL) Filter<\/strong> web part on the page and edit its properties.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qswebpart1.png\"><img decoding=\"async\" width=\"265\" height=\"216\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qswebpart1.png\" alt=\"Query String (URL) Filter\" class=\"wp-image-3999\"\/><\/a><\/figure>\n\n\n\n<p><strong>Filter Name<\/strong> is the name of our choice, it is used only for identification. <strong>Query String Parameter Name<\/strong> is more important, because it says what key we will use in URL query string to provide value for filtering (for example <a href=\"http:\/\/siteurl\/home.aspx?category=Cat1\" rel=\"nofollow\" >http:\/\/pageUrl?<strong>category<\/strong>=Cat1<\/a>).<\/p>\n\n\n\n<p>Now we will connect <strong>Query String (URL) Filter<\/strong> web part to our <strong>Business Data List<\/strong> web part following these steps:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter1.png\"><img decoding=\"async\" width=\"897\" height=\"180\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter1.png\" alt=\"Connections - Send Filter Values To\" class=\"wp-image-4000\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter1.png 897w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter1-300x60.png 300w\" sizes=\"(max-width: 897px) 100vw, 897px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter2.png\"><img decoding=\"async\" width=\"478\" height=\"256\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter2.png\" alt=\"Connection Type - Get Query Values From\" class=\"wp-image-4001\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter2.png 478w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter2-300x161.png 300w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter3.png\"><img decoding=\"async\" width=\"477\" height=\"253\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter3.png\" alt=\"Consumer Field Name - categoryFilter\" class=\"wp-image-4002\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter3.png 477w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/05\/qsfilter3-300x159.png 300w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/><\/a><\/figure>\n\n\n\n<p>Our web parts are now connected, so we can append the query string to the page URL and see if filtering works as expected.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results2-1024x394-1.png\"><img decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results2-1024x394-1.png\" alt=\"Category column\" class=\"wp-image-23857\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results2-1024x394-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results2-1024x394-1-300x115.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/results2-1024x394-1-768x296.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Summary and considerations<\/h2>\n\n\n\n<p>In this article I have shown how to configure DBC model to support filtering and how to setup the filtering on the SharePoint page. In your scenarios you should take into account the following considerations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There can be multiple filters applied at the same time (in this case ReadList method will have additional parameters and multiple Query String filter web parts will be connected to external list web part)<\/li>\n\n\n\n<li>This scenario supports different type of filters (so instead of Query String filter web part we can put on the page Text filter, Date filter or some other filter web parts)<\/li>\n\n\n\n<li>In our example ReadList method creates objects on the spot, but in real life scenario, in this method we should place the code that connects to external database or makes parametrized call to web service in order to get the results<\/li>\n\n\n\n<li>Many steps required for proper BDC model configuration (for example defining identifiers or creating type descriptors for entities) are intentionally omitted. This article concentrates on steps important from filtering point of view<\/li>\n<\/ul>\n\n\n\n<p>Good luck with your external content types!<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;3975&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;2&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Query string filtering for BCS data&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nowadays companies very rarely keep their data in one centralized source. Data is usually dispersed into many smaller data sources, &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/en\/qs_bcs_filter\/\">Continued<\/a><\/p>\n","protected":false},"author":122,"featured_media":537,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1320],"tags":[1470,1468,1469,1411],"class_list":["post-3975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hard-development","tag-bcs-en","tag-bdc-en","tag-business-data-connectivity-en","tag-sharepoint-2013-en"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/10\/16_SharePoint_v2.jpg","category_names":["Hard development"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/3975"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/users\/122"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/comments?post=3975"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/3975\/revisions"}],"predecessor-version":[{"id":23859,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/3975\/revisions\/23859"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media\/537"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media?parent=3975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/categories?post=3975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/tags?post=3975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}