Mostrando postagens com marcador SharePoint 2013. Mostrar todas as postagens
Mostrando postagens com marcador SharePoint 2013. Mostrar todas as postagens

quarta-feira, 30 de dezembro de 2015

SharePoint 2013: ScopeNotFoundException: Workflow publicado não é exibido


O evento abaixo ocorre, se o (sub)escopo do subsite no Workflow Manager não foi criado. Isso pode ocorrer após a importação de um subsite.

Maiores detalhes sobre o escopo do fluxo de trabalho:
"A scope is a named and securable container for Activities, Workflows, Instances, configuration and child Scopes.. It also provides a boundary for multi-tenancy and messaging (notifications). Scopes can be created and modified using the Workflow Client API. It is represented in the Client API by the T:Microsoft.Workflow.Client.ScopeInfo class."

Evento no log do SharePoint:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Microsoft.Workflow.Client.ScopeNotFoundException: Scope '/SharePoint/default/<site collection GUID>/<subsite GUID>' was not found. HTTP headers received from the server - ActivityId: <GUID>. NodeId: <Server name>. Scope: /SharePoint/default/<site collection GUID>/<subsite GUID>. Client ActivityId : <GUID>. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.
at Microsoft.Workflow.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
at Microsoft.Workflow.Client.HttpGetResponseAsyncResult`1.End(IAsyncResult result)
at Microsoft.Workflow.Client.ClientHelpers.SendRequest[T](HttpWebRequest request, T content) -
-- End of inner exception stack trace ---
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Solução:

Execute os dois comandos abaixo para desabilitar e habilitar o feature oculto "WorkflowServiceStore" para forçar a cria do escopo, em seguida publique os fluxos de trabalhos.
1. Disable-SPFeature WorkflowServiceStore -Url <endereço do subsite>
2. Enable-SPFeature WorkflowServiceStore -Url <endereço do subsite>

quarta-feira, 23 de dezembro de 2015

Office Web Apps 2013: Impossível abrir arquivos com a extensão XLS



Eu trabelhei esses dias na análise de um caso interessante: o OWA (Office Web Apps 2013) não abriu arquivos com a extensão XLS. O problema estava limitada a extensão XLS e não ocorreu com a versão mais recente (XLSX).

A resolução final foi habilitar o serviço do Firewall do Windows (MpsSvc), pois alguns produtos como por exemplo o Excel utilizam o serviço.

“If you tried to install Windows Essentials, but received error code 0x800706d9 or 0x80070643, you may need to turn on Windows Firewall. Windows Firewall is a program included with Windows XP, Windows Vista, and Windows 7 that monitors all of the data coming into and going out of your computer. Some programs included in Windows Essentials can only be installed if Windows Firewall is turned on.” 


Evento na interface:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
“Não sabemos o que aconteceu, mas houve algum erro. Você poderia tentar novamente?”
("We don't know what happened, but something went wrong. Could you please try that again?")
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Os eventos encontrados no log do OWA:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1.
Failed to create AppContainer profile: 0x800706d9

2.
ExcelService.PostProcessRequest: Excel Server Exception: System.InvalidOperationException: Failed to create XLS converter process, Hr=-2147467259
at Microsoft.Office.Excel.Server.CalculationServer.BaseWorkbook.<LoadWorkbookJobAsync>d__18.MoveNext()
at Microsoft.Office.Excel.Server.AsyncManager.Continue(Object ar) System.InvalidOperationException: Failed to create XLS converter process, Hr=-2147467259
at Microsoft.Office.Excel.Server.CalculationServer.BaseWorkbook.<LoadWorkbookJobAsync>d__18.MoveNext()
at Microsoft.Office.Excel.Server.AsyncManager.Continue(Object ar) StackTrace:
at uls.native.dll: (sig=53fdbc46-a3b4-42e3-b44b-f74a4e17fa48|2|uls.native.pdb, offset=26EA2)
at uls.native.dll: (offset=1F865)

3.
Watson bucket parameters: Uninitialized ULS, ULSException14, 86423e32 "excel web app", 0f0011a5 "15.0.4517.0", e6cb4d65 "microsoft.office.excel.server.calculationserver", 0f0011a5 "15.0.4517.0", 51a73998 "thu may 30 04:35:52 2013", 0000121a "0000121a", 00000252 "00000252", 54e7243f "invalidoperationexception", 65636931 "eci1"
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

quinta-feira, 22 de outubro de 2015

SharePoint 2013 - Workflow suspenso: HTTP 401 You do not have permission to perform this action or access this resource.


O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "
You do not have permission to perform this action or access this resource." se o fluxo está configurado para enviar e-mail(s) e para iniciar automaticamente.

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 {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied. You do not have permission to perform this action or access this resource."}}} {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPRequestGuid":["<GUID>"],"request-id":["<GUID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4675"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":["<DATE>"],"Set-Cookie":["WSS_KeepSessionAuthenticated={<GUID>}; path=\/"],"Server":["Microsoft-IIS\/7.5"],"WWW-Authenticate":["NTLM"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]} at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Mensagem de error no log do SharePoint:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
It’s app only request, but the app <identity> is not allowed to use app only policy.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Solução: Ativar o feature “Workflows can use app permissions” na página OU desativar e ativar o feature novamente.

[]

domingo, 28 de junho de 2015

SharePoint 2013: Visão geral das vantagens, configurações e da manutenção do RBS com Filestream.

Visão Geral

No SharePoint, um objeto binário grande (BLOB) é um arquivo, tal como um documento ou um arquivo de vídeo. Por padrão, esses BLOBs, também chamados de dados não estruturados, são embutidos no banco de dados de conteúdo do SharePoint com os metadados ou dados estruturados. O tamanho dos BLOBs pode ser enorme: 2gb no SharePoint 2013, e a remoção dos BLOBs do banco de dados do SQL pode ser útil para melhorar o desempenho do servidor SQL.

Para isto podemos utilizar o RBS com Filestream, que é um recurso do SQL Server (a partir da versão 2008) que permite que dados estruturados sejam armazenados no banco de dados e que os dados associados não estruturados sejam armazenados diretamente no sistema de arquivos NTFS e mantenham a consistência transacional entre os dados estruturados e não estruturados, permitindo até mesmo a recuperação pontual dos dados FILESTREAM usando backups de log.


Seguindo os testes da Microsoft teremos o melhor ganho de desempenho com BLOBs maiores do que 1mb: Filestream usa o cache do sistema NT para dados de arquivo cache, reduzindo o efeito dos BLOBs no database engine. O pool de buffer do SQL Server não é utilizado, portanto, temos mais memória disponível para o processamento de consultas.
Outros efeitos positivos: 


  • Redução do tamanho das bases em torno de 95%
  • Melhoramento no desempenho do upload de arquivos em torno de 30% Maiores detalhes: SQL Server RBS Performance with SharePoint Server 2010



  • Configuração

    Observações:

    • A conta do usuário utilizada executando as etapas da configuração das bases deve ser membro do db_owner em cada banco de dados que você está configurando para RBS.
    • A conta do usuário que instala a biblioteca do cliente RBS deve ser membro do grupo de Administradores em todos os computadores em quais você instala a biblioteca do cliente do RBS.
    • A conta do usuário que habilita RBS para cada banco de dados de conteúdo do SharePoint deve ser administrador da farm do SharePoint.
    • Todas as configurações mencionadas nesse artigo foram testado em uma farm "three-tier" do SharePoint 2013 SP1 e com servidor SQL 2012 SP2.
    • O RBS com Filestream não influencia nos tamanhos recomendados pela Microsoft de 200GB e/ou 4TB.

    Habilitar Filestream na instância do SQL do SharePoint
    a.) Abra o SQL Server Configuration Manager.
    b.) Entre nas propriedades da instância no serviço do SQL e escolha FILESTREAM.
    c.) Habilite filestream na instância do SQL conforme imagem abaixo:


     
    d.) Execute a seguinte consulta para finalizar essa configuração:
    EXEC sp_configure filestream_access_level, 2RECONFIGURE


    e.) Reinicie a instância do SQL.
    Obs.: Essa configuração precisa ser feita uma única vez na instância do SQL em qual você utilizará RBS com Filestream.




    Provisionar o repositório BLOB para cada base de dados de conteúdo.


    Configurar o repositório da base

    Altere o nome da base e execute as consultas abaixo para cada base de dados de conteúdo.
    Obs.: Utilize uma chave de encriptação diferente (create master key encryption by password = N'Admin Key Password !2#4')!


    use [WSS_Content]if not exists(select * from sys.symmetric_keyswhere name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'
    use [WSS_Content]if not exists(select groupname from sysfilegroupswhere groupname=N'RBSFilestreamProvider')alter database [WSS_Content]add filegroup RBSFilestreamProvider contains filestream
    Obs.: Altere o lugar do repositório, conforme desejado.
    use [WSS_Content]alter database [WSS_Content]add file (name = RBSFilestreamFile, filename = 'c:\Blobstore')to filegroup RBSFilestreamProvider




    Instalar o cliente RBS em todos os servidores Web do SharePoint (em todos com o serviço "Microsoft SharePoint Foundation Web Application" habilitado).

    1. Baixe o cliente RBS (x64 RBS.msi) do Microsoft® SQL Server® 2012 SP2 Feature Pack.

    2. Execute no primeiro servidor do SharePoint o seguinte comando em um prompt administrativo:

    msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content" DBINSTANCE="DBInstanceName" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1


    Verifique em seguida o sucesso da instalação no log gerado (rbs_install_log.txt), você deve encontrar no final do log a mensagem do sucesso: "Product: Microsoft SQL Server 2012 Remote BLOB Store  -- Installation completed successfully."

    3. Execute o comando abaixo nos demais servidores web do SharePoint:
    msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME="WSS_Content_Intranet" DBINSTANCE="mvplabsql" ADDLOCAL=Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer


    Verifique em seguida o sucesso da instalação no log gerado (rbs_install_log.txt), você deve encontrar no final do log a mensagem do sucesso: "Product: Microsoft SQL Server 2012 Remote BLOB Store  -- Installation completed successfully."

    4. Ative RBS nas bases de conteúdo do SharePoint.

    Execute o script abaixo no Powershell do SharePoint:
    $cdb = Get-SPContentDatabase <ContentDatabaseName>
    $rbss = $cdb.RemoteBlobStorageSettings
    $rbss.Installed()
    $rbss.Enable()
    $rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
    $rbss


    O conteúdo existente pode ser migrado acrescendo a linha $rbs.Migrate().

    A configuração está funcional a partir desse momento - você pode salvar arquivos dentro do SharePoint e monitorar o crescimento imediato do tamanho da pasta configurada: No caso da minha configuração c:\Blobstore.







    Manutenção do RBS com Filestream


    Uma parte ainda não está funcional: Os BLOBs não são excluídos automaticamente do repositório do RBS quando o conteúdo correspondente é excluído do SharePoint. Um ciclo de coleta de lixo usando o Maintainer do RBS é necessário para limpar os BLOBs órfãos.
    Observação: O Maintainer não precisa ser executado no servidor SQL e pode ser executado a partir do qualquer servidor do SharePoint com o client instalado (Seção "Instalar o cliente RBS em todos os servidores Web do SharePoint" desse artigo).


    Configurar o Maintainer do RBS




    1. Verifique a configuração em vigor no arquivo da configuração da conexão com os seguintes comandos:
    cd C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\Maintainer
    rename Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config web.config
    c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf connectionStrings .
    Você deve encontrar as mesmas configurações feitas na instalação do cliente:
    <connectionStrings>
    <add name="RBSMaintainerConnection" connectionString="Data Source=SQLSERVER;Initial Catalog=CONTENTDATABASE;Integrated Security=True;Application Name=&quot;Remote Blob Storage Maintainer&quot;" providerName="System.Data.SqlClient" />
    </connectionStrings>
    2. Em seguida encripte a configuração da conexão novamente:
    c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pef connectionStrings . -prov DataProtectionConfigurationProvider
    rename web.config Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config
    3. Configure uma tarefa agendada para ser executada, por exemplo mensalmente, no servidor responsável pela manutenção do RBS com Filestream.
    Nas configurações da tarefa, na caixa Programa/script, navegue para o arquivo binário do Maintainer >C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\Maintainer\Microsoft.Data.SqlRemoteBlobs.Maintainer.exe e insira na caixa de texto os seguintes parâmetros:
    <-ConnectionStringName RBSMaintainerConnection> <-Operation GarbageCollection ConsistencyCheck ConsistencyCheckForStores>
    <-GarbageCollectionPhases rdo>
    <-ConsistencyCheckMode r>
    <-TimeLimit 120>

    Verificação da limpeza dos órfãos
    A limpeza dos órfãos deve estar ativa após a configuração anterior e pode ser testada. Para isto precisamos estar ciente do ciclo de vida dos BLOBs, que é diferente dependendo do modo da recuperação da base de dados do conteúdo do SharePoint:
    No modo simples: Após a execução do Maintainer e um backup completo.
    No modo full: Após a execução do Maintainer e de dois backups dos logs e dois checkpoints manuais (backup, checkpoint, backup, checkpoint)

    Você poderá testar a limpeza apagando arquivos (inclusive do segundo estágio) com os seguintes passos:

    1. Altere o período da limpeza para 0 com a seguinte consulta:
    exec mssqlrbs.rbs_sp_set_config_value 'garbage_collection_time_window', 'time 00:00:00';
    exec mssqlrbs.rbs_sp_set_config_value 'delete_scan_period', 'time 00:00:00';
    exec mssqlrbs.rbs_sp_set_config_value 'orphan_scan_period', 'time 00:00:00';
    Observação: Execute a consulta abaixo para reverter essa configuração após os testes.
    exec mssqlrbs.rbs_sp_set_config_value 'garbage_collection_time_window', 'days 30';
    exec mssqlrbs.rbs_sp_set_config_value 'delete_scan_period', 'days 30';
    exec mssqlrbs.rbs_sp_set_config_value 'orphan_scan_period', 'days 30';
    2. Execute em seguida o seguinte comando no servidor responsável pela manutenção.
    "C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\Maintainer\Microsoft.Data.SqlRemoteBlobs.Maintainer.exe" -ConnectionStringName RBSMaintainerConnection -Operation GarbageCollection ConsistencyCheck -GarbageCollectionPhases rdo -ConsistencyCheckMode r 
    O resultado deve ter essa aparência, importante nesse caso é a linha “Scanned 98 blobs. Deleted 98 blobs in the range of […]”
    Starting Maintainer tasks.
        Starting Garbage Collection.
            Starting Reference Scan.
                Reference Scan is complete for this database.
                Scanned 98 blobs. Deleted 98 blobs in the range of 0x000000000000000
    000000000(exclusive) to 0x000000000000006200000001(inclusive).
            This task has ended. Processed 1 work units total. 0 Work units were incomplete.
            Starting Delete Propagation.
                Starting Delete Propagation for pool <PoolId 1, BlobStoreId 1, Store PoolId 0x01000000>.
                    ..
                    This pool does not have to be deleted. Reason: PoolCanStoreNewBlobs.
                Delete Propagation complete for pool <PoolId 1, BlobStoreId 1, Store
    PoolId 0x01000000>.
                98 Delete for 98 blobs attempted, 98 blobs were deleted. 0 blobs were not found in the blob store. For more information, see the RBS Maintainer log.
                Delete Propagation is complete for this database.
            This task has ended. Processed 1 work units total. 0 Work units were incomplete. Needed to delete 98 blobs. Succeeded in deleting 98 blobs, 0 blobs were not found in the blob store.
            Starting Orphan Cleanup.
                Starting Orphan Cleanup for pool <PoolId 1, BlobStoreId 1, StorePool Id 0x01000000>.
                    .
                Enumerated 0 blobs, 0 blobs are being considered for orphan cleanup.
                    .
                Orphan Cleanup complete for pool <PoolId 1, BlobStoreId 1, StorePool Id 0x01000000>.
                0 Delete for 0 blobs attempted, 0 blobs were deleted. 0 blobs were not found in the blob store. For more information, see the RBS Maintainer log.
                Orphan Cleanup is complete for this database.
            This task has ended. Processed 1 work units total. 0 Work units were incomplete. Needed to delete 0 blobs. Succeeded in deleting 0 blobs, 0 blobs were not found in the blob store. Enumerated 0 blobs, 0 blobs are being considered for orphan cleanup.
        This task has ended.
        Starting RBS consistency check with attempt to repair.
            No RBS consistency issues found.
        Consistency check completed.
    This task has ended.
    3. Execute o(s) backup(s) necessários, conforme mencionado anteriormente.
     


    Backup e restaurar dados

    O backup e restaurar dados, tanto no servidor SQL como no SharePoint, continua a funcionar da mesma forma com algumas pequenas alterações:

    • SQL Filestream não suporta Snapshots, portanto não podemos utilizar o parâmetro -UseSqlSnapshot na execução do backup pelo comando Backup-SPSite.
    • É recomendável a utilização do comando Backup-SPSite e Restore-SPSite para trazer um site collection em um web application com Filestream habilitado para um outro web application ou uma outra farm, sem Filestream para evitar problemas.
    • No backup dos web applications vai ocorrer o seguinte evento no log: "Warning: [WSS_Content] A Remote Blob Storage provider is configured for this content database. To successfully recover your data on database restore, you may need to follow additional steps as indicated by your Remote Blob Storage provider." que pode ser desconsiderado nessa configuração.


    Fontes:

    Overview of RBS in SharePoint 2013
    https://technet.microsoft.com/en-us/library/ee748649.aspx

    Deciding to use RBS in SharePoint 2013
    https://technet.microsoft.com/en-us/library/ff628583.aspx

    Install and configure RBS with FILESTREAM in a SharePoint 2013 farm 
    https://technet.microsoft.com/en-us/library/ee748631.aspx

    Habilitar e configurar FILESTREAM
    https://msdn.microsoft.com/library/cc645923.aspx

    View, restore, or delete items in the Recycle Bin of a SharePoint site
    https://support.office.com/en-sg/article/View-restore-or-delete-items-in-the-Recycle-Bin-of-a-SharePoint-site-6df466b6-55f2-4898-8d6e-c0dff851a0be

    Maintaining Remote BLOB Store
    https://technet.microsoft.com/en-us/library/gg316773(v=sql.105).aspx

    ASP.NET IIS Registration Tool (Aspnet_regiis.exe)
    https://msdn.microsoft.com/en-us/library/k6h9cz8h(v=vs.140).aspx

    Whitepaper Armazenamento de Filestream
    http://download.microsoft.com/download/6/1/D/61D13F7E-76D9-4D0F-A1B9-39B66F47DDEB/FILESTREAMStorage.docx

    Database Checkpoints (SQL Server)
    https://msdn.microsoft.com/en-us/library/ms189573.aspx

    Software boundaries and limits for SharePoint 2013
    https://technet.microsoft.com/en-us/library/cc262787.aspx

    Restore content databases in SharePoint 2013
    https://technet.microsoft.com/en-us/library/ee748604.aspx

    Migrar conteúdo para e do RBS no SharePoint 2013

    https://technet.microsoft.com/pt-br/library/ff628254.aspx

    quinta-feira, 30 de abril de 2015

    Project Server 2013: Configurar um conjunto de sites nomeado por host para a instância do PWA.

    PWA nomeado por host

    Desde a versão 2003 do SharePoint (“scalable hosting mode”) existe a possibilidade de criar conjuntos de sites nomeados por host e é o método preferido para implantar sites no SharePoint 2013. O Office 365 usa conjuntos de sites nomeados por host e novos recursos foram otimizados para essa arquitetura. 
    Uma das vantagens é o nome único no DNS, como por exemplo, http://projects.contoso.com e a possibilidade de diminuir o número de aplicações web na farm do SharePoint. 

    A configuração requer o uso do Powershell e não é possível pela interface do SharePoint. O script do exemplo abaixo contém todos os passos necessários para criar o conjunto de sites nomeado por host desde a criação do banco de dados da instância do Project Server.

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ## Informe o endereço da instânica nova do Project Server, por exemplo: "http://projects.contoso.com".
    $web = <"http://projects.contoso.com">
    ## Informe o endereço da aplicação web que vai hospedar o conjunto de sites nomeado por host, por exemplo: "http://sp2013svr1".
    $webapplication = <"http://sp2013dev">
    ## Informe o nome da instância, por exemplo: "Projects Contoso".
    $name = <"Projects Contoso">
    ## Informe a descrição da instância, por exemplo: "Projects Contoso".
    $description = <"Projects Contoso">
    ## Informe o administrador da instância, por exemplo: "contoso\administrator".
    $admin = <"contoso\administrator">
    ## Informe a idioma da instância do PWA, por exemplo: "1033" para inglês e "1046" para português.
    $language = <"1033">
    ## Informe o nome do banco de dados desejado, por exemplo: "ProjectsContoso".
    $db = <"ProjectsContoso">
    ## Informe o nome da aplicação do Project Server, por exemplo: "Project Server Service Application".
    $sa = <"Project Server Service Application">
    ## Informe o nome do sevidor do SQL, por exemplo: "SQLSERVER\INSTANCIA".
    $sql = <"SQLSERVER">

    New-SPSite $web -HostHeaderWebApplication $webapplication -Name "$name" -Description "$description" -OwnerAlias "$admin" -language $language -Template "PWA#0"
    New-SPProjectDatabase –Name "$db" -ServiceApplication "$sa" –DatabaseServer $sql -Tag "PS2013"
    $sc = get-spweb $web
    $sc.Properties[“PWA_TAG”]="PS2013"
    $sc.Properties.Update()
    Enable-SPFeature pwasite -URL "$web"
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    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

     []

    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

    []