sexta-feira, 20 de fevereiro de 2015

SharePoint 2013: Exemplo do uso do "Call HTTP Web Service" em um fluxo de trabalho.

Os fluxos do trabalho do SharePoint 2013 podem chamar serviços web usando um novo recurso introduzido no SharePoint 2013 chamado "Call HTTP Web Service". Esta ação é flexível e permite que você faça chamadas simples para um serviço web com facilidade, ou se necessário, você pode criar as chamadas mais complexas usando verbos HTTP, bem como o que lhe permite adicionar cabeçalhos HTTP.

No seguinte tutorial vemos como consolidar as informações do serviço REST do SharePoint com a finalidade de contar os items em uma lista determinada.



01 - Criação do fluxo de trabalho

1. Crie um fluxo de trabalho (o tipo do fluxo não importa nesse exemplo) no SharePoint Designer e selecione SharePoint 2013 Workflow.



02 - Passo "Build Dictonary"

2. Adicione como primeira ação "Build Dictonary".

2.1.1 - Accept
2.1.2 - Content-Type
2.1 Clique em "this" e adicione dois items: 1. Name: Accept, Type: String, Valor: application/json;odata=verbose e 2. Name: Content-Type, Type: String, Valor: application/json;odata=verbose conforme imagem 2.1.1 e 2.1.2.


2.2.1 - Variável
2.2. Clique nesse passo em >"Variable Dictonary", escolha "Create a new variable..." e crie a variável conforme a imagem 2.2.1. 


3 - Passo "Call HTTP Web Service"
3. Adicione um passo do tipo "Call HTTP Web Service", digite como endereço http://<page>/_api/web/Lists/GetbyTitle(‘<list tiltle’)/items conforme imagem 3.


3.1 - Propriedades
3.1 Configure no "Request Header" a variável DJSONRequest e crie uma nova variável do tipo dictonary (aqui DJSONResult) no parâmetro "Response Content".


4 - Passo "Get an Item from a dictonary"
4. Adicione um novo passo do tipo "Get an Item from a dictonary", clique em "item by name or path" e digite d/results em seguida configure a variável DJSONResult (from) e configure uma nova variável do tipo "Dictonary" (aqui Dresults).


5 - Passo "Count Items in a dictonary"
5. Adicione um novo passo do tipo "Count Items in a dictonary" em "dictonary" e escolha a nossa variável DResults.


6 - Passo "Log to history list"
6. Adicione como último passo "Log to history list" e configure a variável conforme imagem número 6. 

7. Finalize o fluxo de trabalho.

O resultado:





How to: Complete basic operations using SharePoint 2013 REST endpoints
Understanding Dictionary actions in SharePoint Designer 2013
Working with Web Services in SharePoint 2013 Workflows using SharePoint Designer 2013

[]

quarta-feira, 18 de fevereiro de 2015

SharePoint 2013 - Workflow suspenso: HTTP 401: "An unhandled exception occurred during the execution of the workflow instance."




O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "An unhandled exception occurred during the execution of the workflow instance." para os usuários da FBA (usuários de declarações) devido a falta de mapeamento da propriedade "SPS-UserPrincipalName" com a propriedade "sAMAccountName".

Isso é "by design" devido a utilização do protocolo OAuth, utilizado na comunicação entre o Workflow Manager e o SharePoint, porque os tokens OAuth contém apenas o UPN por razões de segurança. 
O SharePoint utiliza essa informação (o UPN) para obter mais detalhes sobre o usuário no serviço "User Profile Service Application".

Resumindo: Os fluxos de trabalho do SharePoint 2013 requerem o serviço "User Profile Service Application" e das informações nele.

Mensagem de erro no interface::

RequestorId: <GUID>. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 401 {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPClientServiceRequestDuration":["50"],"SPRequestGuid":["<GUID>"],"request-id":["<GUID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4569"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],[...]


Mensagem de error nos logs do SharePoint:

Problem getting output claims identity. Exception: 'Microsoft.Office.Server.Security.UserProfileNoUserFoundException: 3001002;reason=The incoming identity is not mapped to any user profile account in SharePoint. Possible cause is that no user profiles are created in user profile database. Contact your administrator.     at Microsoft.Office.Server.Security.UserProfileIdentityClaimMapper.GetSingleUserProfileFromClaimsList(UserProfileManager upManager, IEnumerable`1 identityClaims)     at Microsoft.Office.Server.Security.UserProfileIdentityClaimMapper.<>


Solução:

1. Abre a propriedade "SPS-UserPrincipalName" (User Principal Name) no serviço de aplicação "User Profile Service Application".

2. Configure o mapeamento (direção import).


3. Execute a sincronização do User Profile (full).

SharePoint 2013 User Profile Sync for Claims Users

[]

segunda-feira, 16 de fevereiro de 2015

SharePoint 2013 - Workflow cancelado: HTTP 401 "There has been an error authenticating the request"


O fluxo de trabalho no SharePoint 2013 fica normalmente no estado cancelado com a mensagem de erro "There has been an error authenticating the request" se o usuário que iniciou o fluxo não possui um perfil no serviço de aplicação "User Profile Service Application".

Isso é "by design" devido a utilização do protocolo OAuth, utilizado na comunicação entre o Workflow Manager e o SharePoint, porque os tokens OAuth contém apenas o UPN (User Principal Name) por razões de segurança. 

O SharePoint utiliza essa informação (o UPN) para obter mais detalhes sobre o usuário no serviço "User Profile Service Application".

Resumindo: Os fluxos de trabalho do SharePoint 2013 requerem o serviço "User Profile Service Application" e das informações nele.



Mensagem de erro no interface:


RequestorId: <GUID>. Details: System.ApplicationException: HTTP 401 {“x-ms-diagnostics”:[“3001000;reason=\”There has been an error authenticating the request.\”;category=\”invalid_client\””],”SPRequestGuid”:[“<GUID>″],”request-id”:[“<GUID>″],”X-FRAME-OPTIONS”:[“SAMEORIGIN”],”SPRequestDuration”:[“61″],”SPIisLatency”:[“1″],”Server”:[“Microsoft-IIS\/8.0″],”WWW-Authenticate” [...]

Mensagens de error nos logs do SharePoint:



SPApplicationAuthenticationModule: Error authenticating request, Error details { Header: {0}, Body: {1} }. Available parameters: 3001000;reason="There has been an error authenticating the request.";category="invalid_client" {"error_description":"The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs."} .               \
The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.   at Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.ReadResponse(Message response)     at Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.Issue(RequestSecurityToken rst, RequestSecurityTokenResponse& rstr)   
SharePoint 2013 e OAuth - Uma visão geral

 []

SharePoint - Alterar a conta da farm (Farm Account)

Segue um passo a passo de como alterar a conta da farm do SharePoint.

1. Registrar a conta nova como conta gerenciada:

Managed Accounts

a.) Na administração central do SharePoint clique em >Application management, >Configure Manage Accounts.
b.) Clique em >Register Managed Accounts para registrar a conta e informe todos os dados necessários.

2. Atualize os grupos de segurança locais em todos os servidores da farm do SharePoint:
A nova conta deve ser membro dos seguintes grupos:
ADMINISTRATORS
WSS_ADMIN_WPG
WSS_WPG

3. Configurar sua conta nova nos serviços do SharePoint:

Service Accounts

Na administração central do SharePoint clique em >Security, >Configure Service Accounts. Os seguintes serviços precisam ser reconfigurados:
Farm Account
Windows Service - Microsoft SharePoint Foundation Sandboxed Code Service
Windows Service - User Profile Synchronization Service
Windows Service - Web Analytics Data Processing Service
Service Application Pool – SecurityTokenServiceApplicationPool

4. Executar STSADM:
a.) Execute o seguinte comando em todos os servidores do SharePoint, começando com o servidor que hospeda o serviço da administração central: STSADM -o updatefarmcredentials -userlogin "<domain\username>" -password "<password>"
b.) Execute iisreset /noforce


[]

quinta-feira, 12 de fevereiro de 2015

SharePoint - Erro na ativação do feature “Report Server Integration Feature”


O erro abaixo ocorre normalmente se houve algum problema na instalação dos features do Report Server. A ativação por meio do Powershell cmdlet Enable-SPFeature e do parâmetro force funciona, entretanto não habilita os tipos de conteúdo. 

Sorry, something went wrongThe content type with Id 0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B defined in feature {e8389ec7-70fd-4179-a1c4-6fcb4342d7a0} was found in the current site collection or in a subsite.

O content type ausente que causou esse evento foi Report Builder Report (0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B). 

Execute os seguintes comandos do stsadm para instalar os features e content types necessários para ativar o “Report Server Integration Feature”.



  1. stsadm -o installfeature -name ReportServer
  2. stsadm -o installfeature -name ReportServerCentralAdmin
  3. stsadm -o installfeature -name ReportServerItemSync
  4. stsadm -o installfeature -name ReportServerStapling


Em seguida, ative o feature por meio do Powershell:

Enable-SPFeature -Identity E8389EC7-70FD-4179-A1C4-6FCB4342D7A0 -Url http://<sua página>/

Isso ativará o feature e os tipos de conteúdo nas bibliotecas da página

Feature

Content Types



IDs dos content types:

Report Builder Model 
0x010100D8704AF8ED734F4088724751E0F2727D

Report Builder Report
0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B

Report Data Source
0x0101007DFDDF56F8A9492DAA9366B83A95B3A0

Enable-SPFeature

[]

sexta-feira, 6 de fevereiro de 2015

SharePoint: User Profile Synchronization - Redifinir a base SyncDB



As vezes, o serviço da sincronização dos perfil de usuários não inicia corretamente, está parado com o estado "starting" ou simplesmente permanece no estado "stale". Por isso, a maioria das pessoas recria o serviço inteiro a fim de normalizar o sincronização.

O serviço utiliza o banco de dados SyncDB como um banco de dados de estágio que serve como uma área de preparação das informações dos perfis de usuários. O banco contém informações sobre os mapeamentos dos atributos bem como também a configuração da conexão da sincronização.

A recriação do serviço utilizando os bancos antigos não garante a resolução desses problemas, visto que a origem, na maioria das vezes é uma informação inconsistente no banco SyncDB.

Por exemplo o seguinte evento que ocorreu no mapeamento da propriedade "Picture" (direção import):

1.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Log Name:      Application
Source:        FIMSynchronizationService
Date:          03/02/2015 11:18:46
Event ID:      6309
Task Category: Server
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      abc.contoso.com
Description:
The server encountered an unexpected error while performing an operation for a management agent.

 "BAIL: MMS(14148): cdext.cpp(412): 0x80070057 (The parameter is incorrect.): Invalid element: MAConfig [...]
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


2.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Log Name:      Application
Source:        Forefront Identity Manager
Date:          03/02/2015 11:18:46
Event ID:      3
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      abc.contoso.com
Description:
Microsoft.ResourceManagement.ResourceManagementException: Exception from HRESULT: 0x80230516 ---> System.Runtime.InteropServices.COMException (0x80230516): Exception from HRESULT: 0x80230516
   at MIISRCW.IMMSManagementAgent.ModifyMAData(String pszMADataXML, String& ppszUpdatedXML) [...]
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Nesses caso podemos executar um "reset" do banco e recuperar a configuração padrão. Os seguintes passos mostram como você deve prosseguir:

Obs.: O usuário que executa esses passos deve ser administrador local e do SharePoint (Farm Administrator).

1. Anote as configuração da sincronização e dos mapeamentos das propriedades dos usuários.

2. Desabilite o timer job "My Site cleanup timer job" se for configurado.

3. Desabilite o serviço "User Profile Synchronization Service" por meio do seguinte comando:

Get-SPServiceInstance | ? {$_.typename -eq "User Profile Synchronization Service" | Stop-SPServiceInstance

4. Execute o reset no base de dados SncDB:

net stop sptimerv4
## Identifique o ID a partir do comando Get-SPDatabase
$syncdb=Get-SPDatabase <GUID>
$syncdb.Unprovision()
$syncdb.Status='Offline'
## Identifique o ID a partir do comando Get-SPServiceApplication
$upa=Get-SPServiceApplication <GUID>
$upa.ResetSynchronizationMachine()
$upa.ResetSynchronizationDatabase()
$syncdb.Provision()
net start sptimerv4

5. Inicie o serviço "User Profile Synchronization Service" por meio do seguinte comando:

Get-SPServiceInstance | ? {$_.typename -eq "User Profile Synchronization Service" | Start-SPServiceInstance

SharePoint - User Profile Synchronization parado no estado "Starting"

[]