Programmierung
|
|
Programmierung
|
Administration •
Links •
Vorgehensmodelle •
NuGet •
Transformations •
MSBuild •
Raspberry •
Cheatsheets •
Git •
Mathematica
|
C♯
|
|
F♯
|
|
Python
|
Classes •
Loops •
Anonymous Types •
Lambda Expressions •
Queries (LINQ) •
Iterators (yield)
|
PHP
|
|
T-SQL / SQL Server
|
T-SQL Fundamantals
|
Select •
Programming •
Pitfalls •
Query from Multiple Tables •
Groups and Summaries •
Advanced Select •
Aggregation and Windowing •
Insert, Update, Delete •
Strings •
Date and Time •
Numbers •
Transactions, Locking, Blocking, Deadlock •
Tables •
Views •
Large Tables and Databases •
Indexes •
Stored Procedures •
User-Defined Functions and Types •
Triggers •
Error Handling •
Query Performance and Tuning •
Hints •
Index Tuning and Statistics •
XML •
Files, Filegroups, Integrity •
Backup •
Recovery •
Principals and Users •
Securables, Permissions, Auditing •
Objects and Dependencies
|
SQL Server Performance Tuning
|
Memory Performance Analysis •
Disk Performance Analysis •
CPU Performance Analysis •
Baseline Creation •
Query Performance Metrics •
Query Performance Analysis •
Index Architecture and Behavior •
Index Analysis •
Database Engine Tuning Advisor •
Key Lookups •
Statistics, Data Distributuon, and Cardinality •
Index Fragmentation •
Execution Plan Generation •
Execution Plan Cache Behavior •
Parameter Sniffing •
Query Recompilation •
Query Design Analysis •
Reduce Query Resource Use •
Blocking and Blocked Processes •
Causes and Solutions for Deadlocks •
Row-By-Row Processing •
Memory-Optimized OLTP Tables and Procedures •
Database Performance Testing •
Database Workload Optimization •
SQL Server Optimization Checklist
|
Service Broker
|
Message •
Contract •
Queue •
Service •
.NET Integration •
Route •
Security
|
|
Datatypes •
Unit Testing •
Dependency Injection •
Partitioning •
|
|
.NET
|
|
ASP.NET
|
|
Messaging
|
|
User Interface
|
|
Parallel Programming
|
|
ECMAScript
|
|
SharePoint
|
|
Microsoft CRM
|
Reporting and Dashboards •
SharePoint Integration •
Authentication •
Entity Handling •
Workflows •
Queries
|
Security
|
Forms Authentication •
Membership and Role Provider •
Zertifikate •
OAuth •
OpenID •
Windows Identity Foundation
|
Dateiformate
|
CSV •
Excel •
Word •
PDF •
Email
|
Azure
|
|
Muster
|
|
Powershell
|
|
Android
|
ROM Flashen •
Unit Testing •
Assistant
|
Machine Learning
|
|
Core Server
|
Hyper-V •
Active Directory User Groups •
Active Directory Domain Services •
Active Directory Federation Services •
DHCP •
IIS •
DNS •
RDP •
WSUS •
User Permissions •
IP •
SMB •
DHCP •
IPAM •
Sonstige
|
Bot Framework
|
Rich Messages •
|
Implement Business Connectivity Services (BCS)
Create External Content Types
External content types[1] are used to connect to:
- SQL data source
- WCF services (SOAP Web Service)
- OData Services
- custom sources using a .NET Connector
Create Content Type using SharePoint Designer
External Content Types
External Content Type (creates new external content type)
- name the connection
Add connection
SQL Connection
- uses the SQL Connection Wizard
- Create User Impersonation using the Secure Store Service[2]
- Create CRUD functionality
OData
OData[3][4] supports connections to
- SQL Server
- SharePoint
- Windows/SQL Azure
- Online Services
Use OData in SharePoint App
- open Visual Studio
- create
App for SharePoint 2013 project
- right click on the project →
Add → Content Types for an External Data Source...
- enter the URL to the OData service
- select the entities
- Visual Studio creates a Content Type that maps to the OData Service
- edit the content type
- create a filter to limit the max number of results
Create a Model
Optimize Queries for Performance and Throttling
- SharePoint limits to 5000 records by default; throws
ExceededLimitException
- Limit on external content type can be set
- Limit can be changed using
Set-SPBusinessDataCatalogThrottleConfig [5]
$BCSProxy = Get-SPServiceApplicationProxy | wehre { $_.GetType().FullName -eq ('Microsoft.SharePoint.BusineesData.SharedService.BDCServiceApplicationProxy') }
Get-SPBusinessDataCatalogThrottleConfig -Scope Database -ThrottleType Items -ServiceApplicationProxy $BCSProxy |
Set-SPBusinessCatalogThrottleConfig -Maximum 20000 -Default 25000
Use Naming Convention
Users should adhere to a naming convention.
Example User Account Names
User |
Meaning
|
SP_Admin |
SharePoint Administrator Account
|
SP_Farm |
SharePoint Farm Instance Account
|
SP_Crawl |
SharePoint Crawler Instance Account
|
SP_UserSync |
SharePoint User Profile Synchronization Account
|
BCS_SQL_AdventureWorks |
Connection to AdventureWorks database using SQL Connection
|
BCS_OData_Northwind |
Connection to Northwind OData Service
|
Use Batching
- Requires custom method created in Visual Studio
Create Filters
- Filter can be added to External Content Type (.ecs) file in Visual Studio
Implement Methods
- BCS Models define CRUD operations on external data source
- BCS Indexing Connector is used to support crawling and indexing of external data sources[6]
- Model File - Provide connection information to the external system and the structure of the data
- Connector - Contains the code that connects to the external system and parses data[7]
Create Associations
- Relationship between external data entities
- in SharePoint Designer
External Content Types
- select data source
- right-click table
New Association
- ...
- in Visual Studio
Implement Autorization and Authentication
BCS Supports the following authentication modes:
- Pass-through
- Revert to Self
- Windows Credentials
- Credentials
- RDB Credentials
- Digest Credentials
- Custom Authentication
Pass-through, BCS Identity and User Identity
Credential
|
Username and Password. Might include additional data based on system. Authentication can occur via:
- Windows Authentication
- Forms Based Authentication
- Digest
- Basic
|
Claims
|
SAML Token (see also: SAML 2.0) for claims-aware services with Single Sign-on[9]
|
Authentication Modes
Authentication Mode |
Description
|
Pass-Through (User's Identity)
|
passes the credentials of the current user
|
Revert to self
|
passes the credentials of the application pool
|
Windows Credentials (Impersonate Windows Identity)
|
uses the Secure Store Service to map the SharePoint User's Credentials to Windows Credentials
|
Credentials (Impersonate Custom Identity)
|
uses the Secure Store Service to map the SharePoint User's Credentials to Web Service Credentials (WCF)
|
RDB Credentials
|
uses the Secure Store Service to map the SharePoint User's Credentials to Database Credentials
|
Digest Credentials (Impersonate Custom Identity)
|
uses the Secure Store Service to map the SharePoint User's Credentials to Digest Credentials (Basic Authentication, Digest Access Authentication) siehe auch: HTTP-Authentifizierung
|
User Permission Levels
Permission Level |
Description
|
Edit
|
user can propagate permissions to child objects
|
Execute
|
user can execute operations on the external content types
|
Selectable in Clients
|
user can create lists based on the external content type
|
Set Permissions
|
user can set permissions on the external content type
|
Use a Custom Model
- Implement
ODataExtensionProvider :
using Microsoft.BusinessData.SystemSpecific.OData;
using System.Net;
public class MyBCSAuthenticationProvier : ODataExtensionProvider
{
public override void AfterReceiveResponse(HttpWebResponse response)
{
...
}
public override void BeforeSendRequest(HttpWebRequest request)
{
...
}
}
- Deploy to GAC
- Register Provider using
New-SPODataConnectionSetting in PowerShell.[10]
- Add
LobSystemInstance element to the BCS Model (.ect file)[11]
<LobSystemInstances>
<LobSystemInstance Name="Northwind BCS">
<Properties>
<Property Name="ODataServiceUrl" Type="System.String">http://services.odata.org/Northwind/Northwind.svc</Property>
<Property Name="ODataServiceAuthenticationMode" Type="System.String">PassThrough</Property>
<Property Name="ODataFormat" Type="System.String">application/atom+xml</Property>
<Property Name="HttpHeaderSetAcceptLanguage" Type="System.Boolean">true</Property>
</Properties>
</LobSystemInstance>
</LobSystemInstances>
Create Custom Connectors[12]
- Create BCS Model file in Visual Studio
- open the .bdcm file to view it in the designer
- add additional methods in the BDC explorer plane
- implement the methods
- (optional) implement Security Trimming[13] by implementing the
BinarySecurityDescriptorAccessor method
- (optional) implement Caching[14]
- (optional) implement External Event Receiver[15]. SharePoint requires the following components:
- Polling Service
- Subscription Store
- REST Notification Endpoints
Stereotyped Methods[16]
Method |
Description
|
Creator |
create a new entity
|
Deleter |
deletes an existing entitiy
|
Updater |
updates an existing entity
|
Finder (ReadList) |
returns a list of entities
|
Specific Finder (ReadItem) |
returns a single instance of an entity
|
EventSubscriber |
subscribe to an custom event source
|
EventUnsubscriber |
unsubscribe from an custom event source
|
Access BCS Data
Use BCS Web Parts
- BCS Web Parts
- Business Data List
- list of BCS items
- Business Data Item
- detail view of an item that is selected in the list
Connections → Get Item From → select list
- Business Data Actions
- Business Data Connectivity Filter
- filters the data in an connected list
- Business Data Item Builder
- URL with query string to retrieve a business data item; not visible to the end user
- Business Data Related List
- list of related items from an association
Use BCS Data in Workflows
- works like a normal list
- Workflow cannot be attached to BCS list, because the list is not in SharePoint and cannot notify the WF of changes
Use BCS CSOM[17]
- Namespaces
using Microsoft.SharePoint.Client;
using Microsoft.BusinessData.Runtime;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.MetadataModel.Collections;
- Create
using(var context = new ClientContext("http://<server>/<site>"))
{
var externalList = context.Web.Lists.GetByTitle("<list name>");
var newListItem = externalList.AddItem(new ListItemCreationInformation());
newItem["Key"] = "Key";
newItem["FirstName"] = "First";
newItem["LastName"] = "Last";
newItem.Update();
context.ExecuteQuery();
}
- Read
var siteUrl = "http://<server>/<site>/";
using(var context = new ClientContext(siteUrl))
{
// get reference to LOB object
var web = context.Web;
context.Load(web);
var entity = context.Web.GetEntity(siteUrl, "ListName");
context.Load(entity);
lobSystem = entity.GetLobSystem();
context.Load(lobSystem);
var lobSystemInstanceCollection = lobSystem.GetLobSystemInstances();
context.Load(lobSystemInstanceCollection);
context.ExecuteQuery();
// get BCS entity
var entityId = new EntityIdentity(context, new object[] { 11000 });
context.Load(entityId);
var entityInstance = entity.FindSpecific(identity, "Read Item", lobSystemInstanceCollection[0]);
context.Load(instance);
context.ExecuteQuery();
// read values from entity
Console.WriteLine("Customer Key: {0}", entityInstance["Customer Key"]);
Console.WriteLine("Name: {0} {1}", entityInstance["FirstName"], entityInstance["LastName"]);
Console.WriteLine("Birthday: {0}", entityInstance["BirthDate"]);
Console.WriteLine("Email Address: {0}", entityInstance["EmailAddress"]);
}
- Find information for the BCS Client Object Model[18]
- Model XML in Visual Studio
- names of methods and fields
- SharePoint Designer → Operations View
- Central Administration → Business Data Connectivity Service
- shows namespace and entity names
Use the BCS SSOM
- Namespaces
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.BusinessData.Runtime;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.SharePoint.BusinessData.SharedService;
- Query using SSOM
var list = SPContext.Current.Web.Lists.TryGetList("List Name");
if(list == null) return;
var query = new SPQuery();
query.ViewFields = @"<FieldRef Name='CustomerKey' /><FieldRef Name='Email Address' />";
query.RowLimit = 10;
var listItems = list.GetItems(query);
foreach(var item in listItems)
{
Console.WriteLine("{0}", item["EmailAddress"]);
}
- Query using BDC Object Model[19]
// get reference to LOB list
var siteUrl = "http://<server>/<site>/";
var bdcService = SPFarm.Local.Services.GetValue<BdcService>();
IMetadataCatalog catalog = bdcService.GetDatabaseBackedMetadataCatelog(SPServiceContext.Current);
IEntity entity = catalog.GetEntity(siteUrl);
// get entity
ILobSystem lobSystem = entity.GetLobSystem();
ILobSystemInstance lobSystemInstance = lobSystem.GetLobSystemInstances()[0].Value;
var identity = new Identity(11000);
IEntityInstance entityInstance = entity.FindSpecific(identity, lobSystemInstance);
// read entity properties
Console.WriteLine("Customer Key: {0}", entityInstance["CustomerKey"]);
Console.WriteLine("Name: {0} {1}", entityInstance["FirstName"], entityInstance["LastName"]);
Console.WriteLine("Birthday: {0}", entityInstance["BirthDate"]);
Console.WriteLine("Email Address: {0}", entityInstance["EmailAddress"]);
- Important Classes
- Entity
- LobSystem
- LobSystemInstance
- EntityIdentity, Identity
Use BCS REST
- Needs a BCS List
- Creating a BCS List ist not possible via REST
- Supported Verbs are:
GET , PUT , POST , DELETE
Access Data with REST Call
URL |
Description
|
_api/list/getbytitle('listname')
|
get the metadata for the list
|
_api/lists/getbytitle('listname')/items
|
get all items from the list
|
_api/lists/getbytitle('listname')?select=Title
|
get the title of the list
|
_api/lists/getbytitle('listname')/items?$select=Title
|
get the titles from the items in the list
|
_api/lists/getbytitle('listname')/items?$select=Title&$filter=ID eq 35
|
get the title of item with id 35
|
var url = "/sites/examprep/_api/lists/getbytitle('Adventure%20Works%20Customers')/items?"
+ "$select=CustomerKey,FirstName,LastName,BirthData,EmailAddress&Filter=CustomerKey eq 11000";
$(function(){
$.ajax({
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function(data) {
var results =
"Customer Key: " + data.d.results[0].CustomerKey + "<br />" +
"Name: " + data.d.results[0].FirstName + " " + data.d.results[0].LastName + "<br />" +
"Birthday: " + data.d.results[0].BirthData + "<br />" +
"Email Address: " + data.d.results[0].EmailAddress + "br />";
$("#BcsRestDiv").html(results);
}
});
});
See also:
Implement Client-side BCS
Use Microsoft Office Apps, Microsoft Visual Studio Tools for Office
- Microsoft Office App can access SharePoit Data via REST API or JavaScript Object Model (JSOM)[20]
- Microsoft Office can be extended via a add-in[21]
Use Caching, Use SQL Replication, Implement Authorization and Authentication
- BCS uses a client cache based on SQL Server Compact Edition.
- Will be installed with Microsoft Office.
BCSSync.exe is responsible for sync operations.
consider:
References
- ↑ External content types in SharePoint 2013. In: Office Dev Center. Microsoft, 16. Juli 2012, abgerufen am 17. Juni 2014 (englisch).
- ↑ Configure the Secure Store Service in SharePoint 2013. In: Technet. Microsoft, 30. April 2014, abgerufen am 17. Juni 2014 (englisch).
- ↑ Open Data Protocol by Example. In: MSDN. Microsoft, März 2010, abgerufen am 17. Juni 2014 (englisch).
- ↑ OData Ecosystem. Microsoft, abgerufen am 17. Juni 2014 (englisch).
- ↑ Set-SPBusinessDataCatalogThrottleConfig. 16. Juli 2012, abgerufen am 17. Juni 2014 (englisch).
- ↑ Enhancing the BDC model file for Search in SharePoint 2013. In: Office Dev Center. Microsoft, 16. Juli 2012, abgerufen am 17. Juni 2014 (englisch).
- ↑ SharePoint 2013: MyFileConnector custom BCS indexing connector sample. In: Office Dev Center. Microsoft, 20. März 2013, abgerufen am 17. Juni 2014 (englisch).
- ↑ SharePoint 2013: Create multiple external lists with associations. 6. Februar 2013, abgerufen am 17. Juni 2014 (englisch).
- ↑ Single Sign-on (SAML Protocol). In: Microsoft Azure Documentation. Microsoft, 1. April 2014, abgerufen am 17. Juni 2014 (englisch).
- ↑ New-SPODataConnectionSetting. 12. Juli 2012, abgerufen am 17. Juni 2014 (englisch).
- ↑ SharePoint 2013: Access external data using OData extension provider and OAuth. 14. Mai 2014, abgerufen am 17. Juni 2014 (englisch).
- ↑ Overview of Business Connectivity Services in SharePoint 2013. In: Technet. Microsoft, 11. Juni 2013, abgerufen am 17. Juni 2014 (englisch).
- ↑ How to: Configure item-level security in SharePoint 2013. In: Office Dev Center. Microsoft, 16. Juli 2012, abgerufen am 18. Juni 2014 (englisch).
- ↑ How to: Improve Business Connectivity Services Solution Performance When Using the Cache. In: Office Dev Center. Microsoft, 30. Juni 2010, abgerufen am 18. Juni 2014 (englisch).
- ↑ How to: Create external event receivers. In: Office Dev Center. Microsoft, 5. März 2013, abgerufen am 18. Juni 2014 (englisch).
- ↑ Implementing Stereotyped Operations in Your Methods. 14. März 2010, abgerufen am 18. Juni 2014 (englisch).
- ↑ Code Snippets: Using the SharePoint Client Object Model with External Lists. 5. März 2010, abgerufen am 18. Juni 2014 (englisch).
- ↑ BCS client object model reference for SharePoint 2013. In: Office Dev Center. Microsoft, 16. Juli 2012, abgerufen am 18. Juni 2014 (englisch).
- ↑ Using the BDC Object Model. In: MSDN. Microsoft, abgerufen am 18. Juni 2014 (englisch).
- ↑ Overview of apps for Office. In: Office Dev Center. Microsoft, 2. Mai 2014, abgerufen am 17. Juni 2014 (englisch).
- ↑ Create Add-ins and Customizations for Office by using Visual Studio. In: MSDN. Microsoft, abgerufen am 17. Juni 2014 (englisch).
- ↑ How to: Improve Business Connectivity Services Solution Performance When Using the Cache. 30. Juni 2010, abgerufen am 17. Juni 2014 (englisch).
- ↑ Privacy and security for apps for Office. In: Office Dev Center. Microsoft, 28. März 2014, abgerufen am 17. Juni 2014 (englisch).
|