Eu postei um anúncio para vender meu carro no Condado de Bergen, NJ no domingo à noite. Recebi vários pedidos via e-mail logo em seguida e fechou o negócio com alguém na noite de terça-feira.
Quase bom demais para ser verdade …
Eu postei um anúncio para vender meu carro no Condado de Bergen, NJ no domingo à noite. Recebi vários pedidos via e-mail logo em seguida e fechou o negócio com alguém na noite de terça-feira.
Quase bom demais para ser verdade …
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.
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:
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
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).
<%@ 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.
<?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.
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:
Categorias adicionais: Visual Studio 2005
Para habilitar o intellisense úteis para recursos, elementos, etc. em visual studio 2005:
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.
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:
Ele lista o que você precisa saber para passar no exame e é, IMO, muito precisos.
</fim>Subscreva ao meu blog!
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.
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.