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"

[]

segunda-feira, 26 de janeiro de 2015

Empregar Powershell na análise de logs


Em um mundo perfeito teríamos sempre o ID da correlação, a data e o horário de um erro que facilitaria a análise de um determinado comportamento, porém a maioria dos erros de sistemas de informação tem origem em condições inesperadas pelos desenvolvedores.

Nesses casos, utilizamos logs, dumps e demais dados que foram capturados sobre esses eventos para descobrir a causa raiz do problema. A análise desses dados leva tempo, principalmente em sistemas distribuídos. O Powershell pode ajudar na filtragem dos logs, desde que você saiba o que está procurando.

SharePoint gera arquivos de logs do tipo "ULS" (Unified Logging System) a cada 30 minutos em todos os servidores no Farm com eventos categorizados por horário, severidade, processo, correlação, mensagem do evento, entre outros. 

Aqui podemos empregar Powershell na análise - suponhamos que temos uma pasta x com n logs do SharePoint, a execução do script abaixo filtrará o conteúdo a partir da palavra chave definida:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
## lugar dos logs.
$childs = get-childitem "C:\temp\logs
## o caminho dos logs
$logs = $childs.FullName

foreach ($log in $logs)
{
## a palavra chave, nesse caso acesso negado (0x80070005)
$content = Get-Content $log | ? { $_ -LIKE "*0x80070005*" }
## o log filtrado
add-content -path "C:\filtered.log" $content
}
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Obs.: O loop é necessário para não esgotar a memória do sistema.

Get-ChildItem
Get-Content

segunda-feira, 22 de dezembro de 2014

SharePoint 2013 - "The URL is invalid." na criação de subsites.


Os eventos abaixo ocorrem normalmente na criação de subsites caso que campos nativos foram modificados no pai do novo subsite.

1. O evento na interface do SharePoint:
Sorry, something went wrong The URL '<URL>/<SITE>.aspx' is invalid.  It may refer to a nonexistent file or folder, or refer to a valid file or folder that is not in the current Web.


2. No ULS: "The URL '<URL>/<SITE>.aspx' is invalid." 
System.Runtime.InteropServices.COMException: <nativehr>0x81020030</nativehr><nativestack></nativestack>The URL '<URL>/<SITE>.aspx' is invalid.  It may refer to a nonexistent file or folder, or refer to a valid file or folder th   at is not in the current Web., StackTrace:      at Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename, Boolean bPreserveItemUIVersion)       at Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename, Boolean bPreserveItemUIVersion)    

3. No ULS: "Parameter '@tp_Author' was supplied multiple times."
System.Data.SqlClient.SqlException (0x80131904): Parameter '@tp_Author' was supplied multiple times.             at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)             at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)             at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)             at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)             at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)             at System.Data.SqlClient.SqlDataReader.TryNextResult(Boolean& more)             at System.Data.SqlClient.SqlDataReader.NextResult()             at Microsoft.SharePoint.SPSqlClient.ExecuteQueryInternal(Boolean retryfordeadlock)             at Microsoft.SharePoint.SPSqlClient.ExecuteQuery(Boolean retryfordeadlock)

O seguinte script identifica o campo a partir da coluna identificada "tp_author" no evento 3.
## informe o url do pai do novo subsite
$web = get-spweb "http://url/pai"
## informe a coluna identificada 
$web.fields | where-object {$_.schemaxml -like "*tp_author*"} | select title


Os desenvolvedores do SharePoint introduziram no SharePoint 2013 um novo método para esse caso - Microsoft.SharePoint.SPField.RevertCustomizations() que nós podemos utilizar para reverter as customizações em campos nativos:

($web.fields | where-object {$_.schemaxml -like "*tp_author*"}).RevertCustomizations()

Observação: Não utilize o método update para concluir a atualização, isso adicionaria a infomação (indesejada) da versão no schema do campo:



[] 

quarta-feira, 17 de dezembro de 2014

Configurar SharePoint 2013 para usar o Servidor do Office Web Apps (OWA)


Quando usado juntamente com o SharePoint 2013, o Office Web Apps fornece versões atualizadas do Word Web App, Excel Web App, PowerPoint Web App e OneNote Web App. Os usuários podem exibir e dependendo da licença, editar documentos do Office no navegador em computadores e em vários dispositivos móveis, como Windows Phone, iPhone, iPad e Tablets sem depender da instalação local do Office.

Além dos novos recursos, a arquitetura e o método de implantação mudaram, o que permite que o Office Web Apps forneça as mesmas funcionalidades para o Exchange 2013 e o Lync Server 2013.

Modo de abertura padrão para documentos abertos a partir de bibliotecas de documentos do SharePoint 2013

É possível configurar se os arquivos do Word, do PowerPoint, do Excel e do OneNote são abertos em um aplicativo cliente (caso esteja instalado) ou no navegador. Por padrão, após a configuração do SharePoint 2013 para usar o Office Web Apps, os arquivos do Office são abertos no navegador.

Há duas formas de alterar o comportamento padrão a fim de permitir que aplicativos clientes abram os arquivos diretamente:

  1. Global: O comportamento pode ser ajustado usando os cmdlets New-SPWOPIBindingSet-SPWOPIBinding e Remove-SPWopibinding. Por exemplo: o comando Remove-SPWOPIBinding -Application "Excel" remove o binding do Excel do OWA.
  2. Em conjuntos de sites ou bibliotecas de documento: Os administradores e usuários de conjuntos de sites podem especificar se os arquivos do Office são abertos em aplicativos clientes. Usuários podem alterar essa configuração nas propriedades da biblioteca de documentos e os administradores do conjunto de sites podem alterar a configuração na parte administrativa do conjunto de sites.

Instalação do Office Web Apps

A instalação do produto é simples e possuiu requisitos ligeiramente diferentes dependendo da versão do servidor Windows. O seguinte KB contém todos os passos necessários para realizar a instalação.



Configurar o Office Web Apps para SharePoint 2013

O cmdlet New-OfficeWebAppsFarm cria o servidor / o farm do OWA. O seguinte exemplo criará um farm usando HTTP e habilitará a edição (recomendado é HTTPS):

New-OfficeWebAppsFarm -InternalURL "http://owa.contoso.com" -AllowHttp -EditingEnabled

Parâmetros:
  • –InternalURL: é um nome de domínio totalmente qualificado (FQDN) do servidor que executa o Servidor do Office Web Apps, como http://nomeservidor.contoso.com.
  • –ExternalURL: é o FQDN que pode ser acessado na Internet.
  • –CertificateName: é o nome amigável do certificado.
  • –EditingEnabled: é opcional e habilita a edição no Office Web Apps quando utilizado com o SharePoint 2013. Este parâmetro não é utilizado pelo Lync Server 2013 ou Exchange Server 2013 porque não suportam a edição.

Configurar o SharePoint 2013 para Office Web Apps

O cmdlet New-SPWOPIBinding conecta SharePoint com o OWA. O seguinte exemplo conectará o SharePoint com o farm do Office Web Apps "OWA" permitindo o HTTP:

New-SPWOPIBinding -ServerName owa -AllowHTTP


Importante: A utilização do HTTP requer adicionalmente que nós permitamos essa forma de comunicação, que não é recomendado, no serviço do Security Token por meio do script abaixo:


$config = (Get-SPSecurityTokenServiceConfig)
$config.AllowOAuthOverHttp = $true
$config.Update()


Atualizações do Office Web Apps

A instalação das atualizações nos servidores do OWA requer a recriação do farm do OWA. Execute o cmdlet Remove-OfficeWebAppsMachine antes da instalação e recrie o farm utilizando o cmdlet New-OfficeWebAppsFarm.

Importante: Também é recomendado a recriação da configuração no lado do SharePoint utilizando o cmdlet Remove-SPWOPIBinding -All:$true



Fontes adicionais: