arquivos Mensais: Agosto 2007

MOSS busca personalização avançada — Caso importa em pesquisa avançada XSLT

Eu muitas vezes não modificar pesquisa avançada XSLT, Parece que estou escalando pequenos montes cada vez.

Minha mais nova lição é esta: Caso importa ao fazer referência a uma coluna. Em minha pesquisa avançada, Tenho colunas definidas como este:

<raiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Colunas>
<
Coluna Nome="GafTrainingInvoiceNumber" />
<
Coluna Nome="GafTrainingInvoiceLocation" />
<
Coluna Nome="WorkId"/>
<
Coluna Nome="Classificação"/>
<
Coluna Nome="Título"/>
<
Coluna Nome="Autor"/>
<
Coluna Nome="Tamanho"/>
<
Coluna Nome="Caminho"/>
<
Coluna Nome="Descrição"/>
<
Coluna Nome="Gravação"/>
<
Coluna Nome="Nome do site"/>
<
Coluna Nome="CollapsingStatus de"/>
<
Coluna Nome="HitHighlightedSummary"/>
<
Coluna Nome="HitHighlightedProperties"/>
<
Coluna Nome="ContentClass"/>
<
Coluna Nome="IsDocument"/>
<
Coluna Nome="PictureThumbnailURL"/>
</
Colunas>
</
raiz>

Tinha sido o XSLT que exibe a localização de número e nota fiscal fatura:

<p>
Número de factura de treinamento: <XSL:valor da Selecione="GafTrainingInvoiceNumber"/>
<
br></br>
Localização de factura de treinamento: <XSL:valor da Selecione="GafTrainingInvoiceLocation"/>
</
p>

No entanto, o select tem que fazer referência a propriedade em todas as letras minúsculas, como em:

<p>
Número de factura de treinamento: <XSL:valor da Selecione="gaftraininginvoicenumber"/>
<
br></br>
Localização de factura de treinamento: <XSL:valor da Selecione="gaftraininginvoicelocation"/>
</
p>


Até corrigi isso, resultados da pesquisa mostraram os rótulos (ou seja. "Número de factura de treinamento") Mas não há dados.

MUSGO: Exemplo funcional – tipo de dados personalizados

Cenário de negócios:

Implementação de toda a empresa de musgo para empresa de fabricação com 30+ algumas dúzias de departamentos corporativos e sites.

Objetivo de negócio:

Apesar de uma infinidade de grupos empresariais (departamentos, locais, etc), alguns dados devem ser mantidos a um nível global. Por exemplo, uma lista mestre autoritária de todos os locais físicos da empresa (EG. instalações de fabricação, localizações de armazém, escritórios de vendas) deve ser mantido em um local central.

Problema técnico:

A taxonomia corporativa foi implementada usando vários conjuntos de sites. Gostaríamos que criar a lista autoritária de locais físicos em uma lista personalizada de WSS. Em seguida, quando precisávamos de ter uma coluna em um tipo de conteúdo (ou uma coluna é adicionada a uma biblioteca lista ou doc) que continha locais corporativos, criaríamos uma coluna usando a pesquisa"" DataType e ponto para esta lista mestre.

Infelizmente, tipos de dados de pesquisa devem acessar uma lista de fonte "localmente" significa que nossa lista autoritária não abrangem conjuntos de sites.

Solução técnica:

Implementar um novo tipo de dados personalizados implementado baseado em SPField t: Microsoft.SharePoint.SPField e representado como um DropDownList na interface do usuário cujos ListItems popular da lista mestra de WSS.

Nós criamos um novo conjunto de sites chamado "http://localhost/EnterpriseData". Lá, criamos uma lista personalizada chamada "Corporate locais". Esta lista só usa o padrão "título" campo para conter a lista de locais corporativos reais.

Um segue várias etapas distintas para criar um tipo de dados personalizados no WSS. Eles são:

  1. Definir uma classe que herda de SPField t: Microsoft.SharePoint.SPField (um pode herdar de outros campos, se necessário).

Aqui está o código para que:

público Classe XYZZYCorporateLocationField : SPFieldText
{
público XYZZYCorporateLocationField
(SPFieldCollection campos, Cadeia de caracteres typeName, Cadeia de caracteres displayName)
: base(campos, typeName, displayName) { }

público XYZZYCorporateLocationField
(SPFieldCollection campos, Cadeia de caracteres displayName)
: base(campos, displayName) { }

público substituir BaseFieldControl FieldRenderingControl P:Microsoft.SharePoint.SPField.FieldRenderingControl
{
Obter
{
BaseFieldControl controle = Novo XYZZYCorporateLocationFieldControl();
controle. FieldName = Isso.InternalName;
Voltar controle;
} //Obter
} // FieldRenderingControl p:Microsoft.SharePoint.SPField.FieldRenderingControl

público substituir Cadeia de caracteres GetValidatedString(objeto valor)
{
se (Isso.Necessário || valor. ToString().É igual a(Seqüência de caracteres.Vazio))
{
jogar Novo SPFieldValidationException ("O departamento não está atribuído.");
}
Voltar base.GetValidatedString(valor);
} // GetValidatedString

} // XYZZYCorporateLocation

  1. Definir outra classe que herda do controle de campo base, como em:

público Classe XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protegido DropDownList XYZZYCorporateLocationSelector;

protegido substituir Cadeia de caracteres DefaultTemplateName
{
Obter
{
Voltar "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

público substituir objeto Valor
{
Obter
{
EnsureChildControls();
Voltar Isso.XYZZYCorporateLocationSelector. SelectedValue;
} // Obter
conjunto
{
EnsureChildControls();
Isso.XYZZYCorporateLocationSelector.SelectedValue = (Cadeia de caracteres)Isso.ItemFieldValue;
} // conjunto
} // substituir o objeto de valor

protegido substituir privatevoid CreateChildControls()
{

se (Isso.Campo = = nulo || Isso.ControlMode = = SPControlMode.Exposição)
Voltar;

base.CreateChildControls();

Isso.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");

se (Isso.XYZZYCorporateLocationSelector = = nulo)
jogar Novo Exceção("ERRO: Não é possível carregar. Arquivo ASCX!");

se (!Isso.IsPostBack página.)
{

usando (SPSite t: Microsoft.SharePoint.SPSite local = Novo SPSite t: Microsoft.SharePoint.SPSite("http://localhost/enterprisedata"))
{
usando (SPWeb Web = site. OpenWeb())
{

SPList t: Microsoft.SharePoint.SPList currentList = web. Listas de["Empresas locais"];

foreach (SPItem XYZZYCorporateLocation em currentList.Items)
{
se (XYZZYCorporateLocation["Título"] == nulo) continuar;

Cadeia de caracteres theTitle;
theTitle = XYZZYCorporateLocation["Título"].ToString();

Isso.XYZZYCorporateLocationSelector.Items.Add
(Novo ListItem(theTitle, theTitle));

} // foreach

} // usando spweb web = site.openweb()
} // usando spsite site = new spsite("http://localhost/enterprisedata")

} // Se não for um postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

O código acima basicamente implementa a lógica para preencher o DropDownList com os valores da lista personalizada do WSS localizado no http://localhost/enterprisedata e nomeado "departamentos corporativos".

Eu defini a ambas as classes em um arquivo único. cs, compilou e colocá-lo no GAC (forte exigido, É claro).

  1. Implementar um modelo de controle (.ascx) como mostrado:

<%@ Controle Língua= "C#" Herda="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versão = 12.0.0.0, Culture = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Sempre" %>
<%
@ Registre-se TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Montagem="Microsoft.SharePoint, Versão = 12.0.0.0, Cultura = neutro, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registre-se TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Montagem="Microsoft.SharePoint, Versão = 12.0.0.0, Cultura = neutro, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "servidor">
<Modelo>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "o servidor" />
</Modelo>
</
SharePoint:RenderingTemplate>

O acima é salvos em c:\programa filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Finalmente, Criamos um arquivo XML para salvar para o... diretório 12XML. Este é o CAML que define o tipo de dados personalizados e para o meu exemplo, se parece com isso:

<?XML Versão="1.0" codificação="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Campo Nome="TypeName">CorporateLocations</Campo>
<
Campo Nome="ParentType">Texto</Campo>
<
Campo Nome="TypeDisplayName">Empresas locais</Campo>
<
Campo Nome="TypeShortDescription">Todos os locais XYZZY corporativa, incluindo instalações de fabricação ou outras.</Campo>
<
Campo Nome="UserCreatable">VERDADE</Campo>
<
Campo Nome="ShowInListCreate">VERDADE</Campo>
<
Campo Nome="ShowInDocumentLibraryCreate">VERDADE</Campo>
<
Campo Nome="ShowInSurveyCreate">VERDADE</Campo>
<
Campo Nome="ShowInColumnTemplateCreate">VERDADE</Campo>
<
Campo Nome="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versão = 1.0.0.0, Cultura = neutro, PublicKeyToken = b0b19e85410990c4</Campo>
<
RenderPattern Nome="DisplayPattern">
<
Interruptor>
<
Expr>
<
Coluna />
</
Expr>

<Caso Valor=""/>

<Padrão>
<
HTML>
<![CDATA[
<span style = "color:Vermelho"><b>]]>
</
HTML>

<
Coluna SubColumnNumber="0" HTMLEncode="VERDADE"/>

<HTML><![CDATA[</b></extensão>]]></HTML>

</
Padrão>
</
Interruptor>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Este arquivo XML adiciona o tipo de dados personalizados para o WSS "biblioteca" e corresponde a ele contra o GAC tinha montagem.

Depois de todos esses bits se posicionando, iisreset no servidor e ele deve começar a trabalhar muito bem.

WSS: Técnica para criar definições de campo CAML.

Categoria adicional: CAML

Aqui é uma ótima postagem por um sujeito chamado "craig" em uma técnica para encontrar definições CAML para tipos de conteúdo de campo baseados fora verdadeiras definições de um site.

Sua postagem diz tudo. Em breve:

  1. Criar um tipo de conteúdo.
  2. Associá-lo com uma lista.
  3. Abra a lista com o SharePoint Designer.
  4. Exportar para um "pacote de web pessoal".
  5. Renomear um. cab.
  6. Extraia o manifesto.
  7. Encontrar o seu tipo de conteúdo e associado CAML.

WSS: Resumo etapas para habilitar útil características/elementos/etc. IntelliSense no VS 2005

Categorias adicionais: Visual Studio 2005

Para habilitar o intellisense úteis para recursos, elementos, etc. em visual studio 2005:

  1. Acessar um servidor WSS.
  2. Navegue até "c:\program filescommon filesmicrosoft sharedweb server extensions12TEMPLATEXML."
  3. Abrir um outro windows explorer, apontando para: "C:\Programa ArquivosMicrosoft Visual Studio 8XmlSchemas"
  4. Copie os seguintes ficheiros do servidor WSS para seus VS 2005 diretório de esquemas:
    1. WSS
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Reiniciar VS 2005
  6. Adicionar um novo arquivo XML para um projeto.
  7. Clique no corpo do arquivo XML.
  8. No painel de propriedades, Clique em "esquemas" e escolher "WSS" entre as opções. (Não é necessário selecionar outro xsd desde que eles são referenciados do WSS).

Agora o IntelliSense está habilitado para esse documento XML.

Consulte here para obter mais informações sobre este assunto e para obter instruções sobre como associar WSS intellisense automaticamente qualquer arquivo XML.

Exame do WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Desenvolvimento de aplicativos

Tomei e passou no teste acima mencionado nesta manhã. Eu achei o exame para ser justo e difícil.

Existe uma relativa escassez de informações sobre este exame na web. Não sei por que.

Não, obviamente, vou entrar em qualquer detalhe sobre o exame que eu levei, Mas acho que posso afirmar o seguinte:

  1. Confiar neste link: http://www.microsoft.com/learning/exams/70-541.mspx.

    Ele lista o que você precisa saber para passar no exame e é, IMO, muito precisos.

  2. O link também recomenda Dentro do Microsoft Windows SharePoint Services 3.0 por Ted Pattison & Daniel Larson. Este livro cobre quase todos os assuntos que aborda o teste. Eu achei que fosse grande em e de si mesmo além do prep exame simples. Fornece grandes exemplos e realmente me fez pensar sobre algumas coisas novas e interessantes para tentar. Se você deseja ignorar alguns trechos do livro, Apenas cruze TOC do livro com os itens no link de cima.
  3. Nada bate a real experiência hands-on. Se você tiver tempo e interesse, acompanhar, juntamente com os exemplos no livro e depois experimentar com eles. Você vai ter um tempo mais fácil no exame, bem como realmente aprender programação de aplicações WSS.

</fim>Subscreva ao meu blog!

MUSGO / Servidor de formulários do InfoPath (InfoPath 2007) desempenho de lista drop-down

Categoria adicional: InfoPath

Resumo: Um InfoPath 2007 formulário implantado para um servidor do MOSS fornece uma lista suspensa de fornecedores amarrado a uma lista personalizada de musgo. Ao selecionar um fornecedor, regras atribuir valores de campo para um punhado de campos de texto, como o nome do representante de vendas, Endereço, cidade, Estado, postal e telefone. O desempenho é horrível. Notamos que o desempenho fica pior (de uma forma não-linear) para cada campo adicional actualizamos assim. Ou seja, Se nós apenas atualizar o nome do representante de vendas, é preciso [x] quantidade de tempo. Se nós actualizamos o representante de vendas, Address1, Endereço2, cidade, Estado, zip, é preciso 10 vezes mais.

Solução: Escrever um serviço web (código de exemplo pode ser encontrado here) Isso é passado em nome de um vendedor e ele volta retorna os detalhes do fornecedor. Em seguida, atribuir os campos desta forma. Embora isto pareça demasiado lento, Não houve diferença perceptível no desempenho quando nós atribuído 1 campo versus 8 campos. Como um bônus adicionado, os usuários obtêm um fresco "em contato com o servidor" Cylon efeito enquanto eles esperam o formulário para invocar e consumir os resultados de serviço.

MUSGO: Ocorreu uma exceção. (Exceção de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ATUALIZAÇÃO: Nunca determinamos a causa raiz desse problema, e ele nunca a superfície novamente.

Notamos durante a implementação de um desenvolvimento local que de repente, dois usuários não conseguem acessar um conjunto de sites. Essas contas podem autenticar para o site principal, mas ao tentar acessar um determinado conjunto de sites, é só pegar uma tela em branco. Sem erros exibidos, apenas uma página em branco em branco.

Nós faça logon como um administrador de coleção do site e tente adicionar um desses utilizadores como um administrador de site e desta vez, após pressionar "OK", Recebemos esta mensagem:

Ocorreu uma exceção. (Exceção de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Passamos algum tempo pesquisando sobre isso e, infelizmente,, não veio com nada de útil. Havia algumas mensagens no log de diagnóstico, mas era difícil exatamente correlacioná-las com esse problema.

No final, a exclusão de sites e recriados e que resolvemos isso.

Se eu descobrir o que causou isso no futuro, Vou atualizar este post.