arquivos Mensais: Novembro 2007

MOSS diz-Me minha coluna nome é reservado ou em uso … Mas não é

ATUALIZAÇÃO 12/04/07: Consulte Este Microsoft KB (http://support.microsoft.com/kb/923589) para obter informações relacionadas.

Na verdade, Afinal, é, mas matreiro MOSS tinha que tornam difícil.

Meu cliente faz algum trabalho de desenvolvimento em seu site MOSS no fim de semana. É um pouco de uma confusão sobre o que ele fez, Mas o resultado final é este:

  • Ele tenta adicionar uma coluna de site chamada "quantidade" e respostas MOSS: "O nome da coluna que você inseriu já está em uso ou reservados. Escolha outro nome."
  • Ele tenta adicioná-lo para outro ambiente e que funciona. Por conseguinte, "A quantidade" Não é um nome reservado.
  • Ele tenta encontrar uma coluna de site existente, chamada "quantidade" Esse conjunto de sites. Ele não pode encontrá-lo.

Eu fiz algumas pesquisa, e até mesmo alguns codificação, encerado filosófico e finalmente encontrou que uma coluna chamada quantidade foi, Na verdade, Existem. Foi na Hidden" Grupo. Portanto, Não conseguimos encontrá-lo através da interface de usuário do SharePoint.

Como foi parar lá? Eu não sei, Mas eu tenho uma teoria. (ou como minha esposa iria chamá-lo, "blah blah blah"). Em algum lugar ao longo da linha, uma fabuloso modelo 40 foi adicionado e provavelmente ativado em um site na coleção site. Em seguida foi desativado (ou o site removido). A coluna de site, no entanto, permaneceu no Hidden" Grupo. Se alguém souber melhor, por favor me avise através Email ou postar nos comentários.

SharePoint estava dizendo a verdade. Não vale salientar que essa mensagem não é tão útil quanto poderia ser. Seria bom ver esse garfo mensagem em duas mensagens diferentes no futuro: 1) Dizem que o nome da coluna é reservado ou não é. 2) Se não é reservado, Visualizar o site, ou pelo menos o grupo, onde o nome da coluna é usado já.

</fim>

Apresentar dados da OM através de uma lista personalizada (ou, Ainda outra OM dados Displayor [como YACC, mas diferentes])

Hoje, Passei um punhado de horas para rastrear a causa raiz para trás a mensagem "o nome da coluna que você inseriu já está em uso ou reservados. Escolha outro nome."

A coluna em questão poderia ser criada, excluído e recriado em outro ambiente, Então eu sabia que não era um nome reservado. No entanto, Eu simplesmente não conseguia encontrar a coluna em qualquer lugar através da interface de usuário padrão SharePoint em qualquer site na coleção site.

Eu postei a Fóruns do MSDN aqui e o indomável Andrew Woodward me apontou na direção dos dados do modelo subjacente do objeto.

Saí para CodePlex para encontrar algumas ferramentas que me ajudasse a perscrutar os dados subjacentes do OM e me ajudar a localizar o problema.

Eu tentei várias ferramentas e eles eram muito legal e interessante, mas no final, a interface do usuário não era suficientemente bom para o meu propósito. Não estou a criticá-los por qualquer meio, mas claramente os fabricantes de ferramentas não tinham meu problema em mente quando eles criaram sua interface do usuário :). A maioria das pessoas parecem ser investir uma quantidade razoável de tempo e esforço na criação de estação de trabalho / aplicativos de cliente que fornecem modos de exibição de árvore, botão direito do mouse menus de contexto e assim por diante. Estes são legais e todos os, mas é muito trabalho para criar uma experiência de usuário de top-of-the-line que também é muito flexível.

Eu realmente precisava de uma resposta para este problema. Ocorreu-me que se eu pudesse pegar todas as colunas de site na coleção site em uma lista personalizada, Eu poderia filtrar, classificar e criar modos de exibição que iria me ajudar a encontrar essa coluna supostamente existente (o que aconteceu, BTW). Eu fui em frente e fez isso e uma ou duas horas mais tarde, tinham todas as minhas colunas de site carregado em uma lista personalizada com agrupamento, classificação e assim por diante. Eu encontrei minha resposta cinco minutos mais tarde.

Se e quando tomo com sucesso o mundo, Acho que será o decreto que todos os fornecedores de ferramentas do SharePoint devem considerar seriamente aplainando seus dados de modelo de objeto em uma lista personalizada. Dessa forma, Eu tenho o poder para procurar qualquer caminho que eu quero (restrita, É claro, por recursos do sharepoint padrão).

Ação de personalizadas de fluxo de trabalho do SharePoint Designer — Observação sobre <FieldBind Tipo de Designer =”StringBuilder” … />

Apenas uma rápida observação que há uma diferença muito importante entre estas duas definições:

<Campo FieldBind = "InParam1" DesignerType = "StringBuilder" ID = "2" Texto = "Parâmetro de entrada # 1" />

comparação:

<Campo FieldBind = "InParam1" ID = "2" Texto = "Parâmetro de entrada # 1" />

O primeiro mostra como este em SPD:

imagem

enquanto a segunda mostra como este:

imagem

I’m not sure how helpful these screen shots are but I put in the effort to make them so you have to view them 🙂

A observação é isso: StringBuilder permite que você construa uma seqüência de caracteres (Obviamente) pela mistura de literais de cadeia de caracteres e dados de fluxo de trabalho (através do "Adicionar pesquisa" botão no canto inferior esquerdo). Quando você usar o botão Adicionar pesquisa, ele insere um símbolo no formulário"[%sinal %]". Quando o SharePoint invoca sua ação personalizada, (No meu caso o código c#), SharePoint passa o token em si, Não o valor do token. Se você usar o tipo de designer padrão (o segundo tipo), SharePoint expande o token e passa o real valor do token para sua ação.

StringBuilder = ruim, padrão tipo designer = bom.

É claro, Isso é não o que realmente quero dizer. Só não tentem passar um parâmetro para sua ação personalizada quando o designer digite = StringBuilder. Usar o tipo de designer padrão e cadeia um StringBuilder para ele na frente, se você precisar criar seqüências de caracteres complexas em seu fluxo de trabalho (que aliás é exatamente o que se faz para criar um tema dinâmico para a ação de e-mail, mas isso é um assunto para outro blog, har har).

<final />

Ativação prematura do fluxo de trabalho — Uma solução não-médicos

ATUALIZAÇÃO: Veja esta discussão MSDN, especialmente a última entrada: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. Ela descreve uma condição que pode tudo isto curto-circuito. Em suma, pode ser tão simple como fazer pelo menos um dos campos obrigatórios.

Eu tenho uma biblioteca de documentos que suporta oito tipos de conteúdo.

Eu tenho um fluxo de trabalho do SharePoint Designer que deseja calcular e atribuir uma data de lembrete"" simplesmente subtraindo 30 dias de outra coluna, "data de vencimento". Isso só deve acontecer por um dos tipos de conteúdo, "Seguros". O objetivo do negócio é produzir um KPI que mostra duas categorias de documentos seguros: "prestes a expirar" e "expirou." (Você pode ler mais sobre este tipo de KPI e mais substancial aprofundamento here).

Tenho configurado o fluxo de trabalho ao fogo quando um novo item é criado e quando um item é modificado. A idéia é que quando um documento seguro é carregado, podemos calcular uma data de aviso"" com base na data de vencimento. Trabalho de um par de pontos de vista em relação a uma lista de KPI para destacar estas condições quando usuários atingiu sua home page.

Esta estratégia não funciona quando fizer o upload de um documento.

Carregar o documento e eu sou presenteado com a tela de entrada de dados meta. Neste ponto, Já estou em apuros. O SharePoint tem já, prematuramente do meu ponto de vista, despedido o fluxo de trabalho. Não tive a chance de escolher o tipo de conteúdo correto nem atribuir uma data de vencimento. Ao mesmo tempo, o fluxo de trabalho não será acionado quando eu apertar o botão enviar neste momento. Há uma lógica interna que "acredita" que primeiro apresentar é parte do "criar" evento. Assim … meu trabalho foi acionado e quando executado, Ele foi passado com valores de dados de meta padrão.

O melhor trabalho que eu conheço é para inserir uma pausa"até" atividade do fluxo de trabalho. Eu tenho a pausa de fluxo de trabalho para 1 minuto. Enquanto ele está pausando, Selecionar o tipo correto de conteúdo, Insira os dados de meta e envie. A pausa é concluída e o fluxo de trabalho continua conforme necessário. (Note que no meu ambiente, atividades de fluxo de trabalho de timer de SPD não funcionam fora da caixa. Você pode ter o mesmo problema. Consulte here para obter mais detalhes).

Eu não gosto de "atraso de magia" trabalho-em torno de. O que acontece se o usuário carrega um documento e o telefone toca e a conversa que se seguiu supera a pausa? Posso fazer a pausa mais longa, mas ainda não gosto.

Escrevi sobre isso aqui nos fóruns do MSDN: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1

Primeira demão de fundamentos de segurança do SharePoint / Evitar as armadilhas comuns

ATUALIZAÇÃO 12/18/07: Consulte o artigo de Paul Liebrand para algumas consequências técnicas de remover ou modificar os nomes de grupo padrão (Consulte também o seu comentário abaixo).

Visão geral:

Segurança do SharePoint é fácil de configurar e gerenciar. No entanto, Ele provou para ser difícil para alguns administradores pela primeira vez para realmente envolver suas mãos em torno dela. Não só isso, Eu vi alguns administradores chegar a um entendimento perfeito na segunda-feira só para tê-la perdido até sexta-feira porque não tinham que fazer alguma configuração no tempo intermediárias. (Eu admito que tem este problema me). Esta entrada de blog espero que fornece uma útil cartilha de segurança do SharePoint e aponta para algumas práticas recomendadas de configuração de segurança.

Nota importante:

Esta descrição baseia-se fora da caixa de segurança do SharePoint. Minha experiência pessoal é orientada em torno de MOSS, então pode haver algumas coisas específicas do MOSS, Mas creio que é preciso para WSS. Espero que ninguém ver quaisquer erros ou omissões indic que nos comentários ou correio eletrónico a mim. Eu vou fazer correções post pressa.

Fundamentos:

Para efeitos desta visão geral, há quatro aspectos fundamentais para a segurança: usuários/grupos, objetos de segurança, herança e níveis de permissão.

Usuários e grupos quebrar para baixo para:

  • Usuários individuais: Puxado de active directory ou criado diretamente no SharePoint.
  • Grupos: Mapeada diretamente do active directory ou criado no SharePoint. Grupos são uma coleção de usuários. Grupos são globais em um conjunto de sites. Eles nunca "atados" a um objeto específico.

Objetos de segurança quebrar para baixo pelo menos:

  • Sites
  • Bibliotecas de documentos
  • Itens individuais em listas e bibliotecas de documentos
  • Pastas
  • Várias configurações de BDC.

Há outros objetos protegíveis, mas você começa a foto.

Níveis de permissão: Um pacote de granulado / direitos de acesso de baixo nível que incluem coisas como criar/ler/apagar entradas nas listas.

Herança: Por padrão entidades herdam as configurações de segurança de seu objeto contendo. Subsites herdam a permissão de seu pai. Bibliotecas de documentos herdam de seu site. Assim por diante e assim por diante.

Usuários e grupos se relacionam a objetos protegidos através de níveis de permissão e herança.

As regras de segurança mais importantes para compreender, Ever 🙂 :

  1. Grupos são simplesmente a coleções de usuários.
  2. Grupos são globais dentro de um conjunto de sites (ou seja. não há nenhuma coisa como um grupo definido a nível local).
  3. Nome do grupo não obstante, grupos não, em e de si, ter qualquer nível específico de segurança.
  4. Grupos têm segurança no contexto de um objeto protegível específico.
  5. Você pode atribuir diferentes níveis de permissão para o mesmo grupo para cada objeto de segurança.
  6. Diretivas de aplicativo Web superam tudo isso (Veja abaixo).

Os administradores de segurança perdidos em um mar de Listagens de grupo e usuário podem sempre contar com estes axiomas para gerenciar e entender a sua configuração de segurança.

Armadilhas comuns:

  • Nomes de grupo implicam falsamente a permissão: Fora da caixa, SharePoint define um conjunto de grupos cujos nomes implicam um nível inerente de segurança. Considerar o grupo "Colaborador". Um desconhecido com segurança SharePoint pode bem Olha esse nome e assumir que qualquer membro desse grupo pode "contribuir" para qualquer site/lista/biblioteca no portal. Isso pode ser verdade, mas não porque o nome do grupo é "colaborador". Isto só é verdade fora da caixa, porque o grupo proporcionou um nível de permissão que permite que eles para adicionar/editar/excluir conteúdo no site da raiz. Por meio de herança, os colaboradores"" grupo também pode adicionar/editar/excluir conteúdo em cada subsite. "Infiltrações" a cadeia de herança e alterar o nível de permissão de um subsite tal que os membros do chamado "contribuinte" Grupo não pode contribuir em todos os, mas apenas ler (por exemplo). Isso não seria uma boa idéia, Obviamente, uma vez que seria muito confuso.
  • Grupos não são definidos no nível de um site. É fácil de ser confundido com a interface do usuário. A Microsoft fornece um link conveniente para gerenciamento de usuário/grupo através "pessoas e grupos do site, todas as" link. É fácil acreditar que quando eu estou no site "xyzzy" e criar um grupo através pessoas do xyzzy e grupos link que acabou de criar um grupo que só existe no xyzzy. Isso não é o caso. Na verdade, eu criei um grupo para a coleção de todo o site.
  • Associação de grupos não variam por local (ou seja. é o mesmo em todos os lugares que o grupo é usado): Considere o grupo "proprietário" e dois sites, "HR" e "Logística". Seria normal pensar que dois indivíduos separados possuiria esses sites — um proprietário de HR e uma logística. A interface do usuário torna mais fácil para um administrador de segurança danificar este cenário. Se não te conhecesse, Pode acessar os links de pessoas e grupos através do site do HR, Selecione os proprietários"" Grupo e adicionar meu dono HR ao grupo. Um mês depois, Logística vem na linha. Ter acesso a pessoas e grupos a partir do site da logística, Adicionar a puxar para cima os proprietários"" Grupo. Eu vejo o proprietário HR lá e removê-la, pensando que estou tirando ela de proprietários na área de logística. Na verdade, Estou tirando ela do grupo global de proprietários. Hilaridade segue.
  • Na falta de nome grupos com base em funções específicas: Os aprovadores"" o grupo é um exemplo perfeito. O que pode a membros de aprovar este grupo? Onde eles possam aprová-lo? Eu realmente quero departamento de logística de pessoas para ser capaz de aprovar documentos RH? Claro que não. Sempre grupos de nome com base em seu papel dentro da organização. Isso reduzirá o risco de que o grupo é atribuído um nível de permissão inadequado para um determinado objeto protegível. Grupos de nome com base na sua função pretendida. No cenário anterior HR/logística, Eu deveria ter criado dois novos grupos de: "Proprietários de HR" "proprietários de logística e" e atribuir níveis de permissão sensata para cada um e a quantidade mínima necessária para os usuários a fazer o seu trabalho.

Outras referências úteis:

Se você fez isso agora:

Por favor, deixe-me saber a sua opinião através dos comentários ou me enviar e-mail. Se você sabe outras boas referências, por favor, faça o mesmo!

Technorati Tags:

Rápido e fácil: Criar uma Web Part de exibição de dados (DVWP)

Há uma riqueza de informações sobre o WSS a grande 3.0 Web Part de exibição de dados (DVWP) na web de várias fontes. No entanto, Eu achei que fosse surpreendentemente difícil de encontrar informações sobre este primeiro passo básico. Aqui está um outro artigo no "rápido e fácil" série de enfrentá-lo.

Siga estas etapas para criar uma web part de exibição de dados (DVWP). Eles são baseados em uma "anúncios" Web part, mas se aplicam a maioria das listas.

  1. Criar uma web part de anúncios e adicioná-lo a um site.
  2. Abra o site no SharePoint Designer.
  3. Abrir default. aspx do site.
  4. Selecione a web part de anúncios e com o botão direito.
  5. No menu de contexto, Selecione "converter para XSLExibição de dados de T".

SharePoint Designer avisa que este site agora é personalizado a partir de sua definição de site. Isso não é necessariamente ruim, mas há implicações importantes (desempenho, atualização, outros) que estão além do escopo deste pequeno "rápido e fácil" entrada. Para obter mais informações sobre este assunto, Eu recomendo os dois livros here assim como a pesquisa de Internet favorita.

Confirmar que você fez isso corretamente:

  1. Feche e reabra o navegador da web (para evitar que acidentalmente re-postagem original "adicionar uma nova web part").
  2. Selecione seta a web part drop-down e escolha "Modificar Web Part compartilhada" no menu.
  3. O painel de ferramenta se abre para a direita.
  4. O painel foi alterado de seus habituais definir opções para esta:
imagem

“Não é possível obter a propriedade de coluna do esquema de lista da lista do SharePoint” — Descrição/equivaleria a

Nesta semana, Nós finalmente reproduzido um problema que tinha sido relatado por um usuário remoto: Quando ela tentou exportar o conteúdo de uma lista para o excel, as coisas parecem começar a trabalhar, mas, em seguida, o Excel iria aparecer um erro: "Não pode ter a propriedade de coluna do esquema de lista da lista do SharePoint". Ela estava correndo de escritório 2003, Windows XP e conectar a MOSS.

Eu procurei a internete e vi algumas especulações, mas nada 100% definitivo. Portanto, Este post.

O problema: Exportando uma vista para excel que contém uma data (Data = o tipo de dados da coluna).

O que funcionou para nós: Converter a data para "uma única linha de texto". Em seguida, convertê-lo para uma data.

Isso resolveu. Foi um prazer ver que a conversão funcionou, na verdade. Foi bastante nervoso que converter as coisas dessa forma poderia falhar, Mas não foi assim.

Esse bug foi lançada uma sombra enorme sobre o tipo de dados data na mente do cliente, Então, vamos procurar uma resposta definitiva da Microsoft, e espero que vou postar e atualizar aqui no próximo período curto de tempo com suas informações de correcção e de resposta oficiais.

Outras referências:

http://www.kevincornwell.com/blog/index.php/cannot-get-the-list-schema-column-property-from-the-sharepoint-list/

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2383611&SiteID=1

<fim>

Subscreva ao meu blog.

Technorati Tags: ,

Rápido e simples: Envie um e-mail com hiperlink incorporado a partir de fluxo de trabalho do SharePoint Designer

Uma ou duas vezes mês, alguém postar uma pergunta do Fórum: "Como para incluir hiperlinks URL que são clicável de um email do SharePoint Designer?"

Sem mais comentários: (bem, na verdade, há ainda uma observação após a imagem):

imagem

Becky Isserman segue-se com uma explicação útil sobre como incorporar um link a um item no email: http://www.sharepointblogs.com/mosslover/archive/2007/11/20/addition-to-paul-galvin-s-post-about-sending-an-e-mail-with-hyperlinks-in-spd.aspx

Novo lançamento: Extensões de fluxo de trabalho do SharePoint Designer (funções de manipulação de String)

ATUALIZAÇÃO: Veja aqui para meus pensamentos em comercializar este projeto: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

Estive ocupado trabalhando no meu projeto do Codeplex, que atualmente está focado em fornecer string extensões de manipulação para fluxos de trabalho criados por meio do SharePoint Designer.

Veja aqui para detalhes:

Projeto home: http://www.codeplex.com/spdwfextensions

Lançamento: https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=spdwfextensions&ReleaseId=8280

Versão 1.0 inclui os seguintes novos recursos:

Função Descrição (Se não mesmo como função do .net)
Num-entradas() Retorna as números "entradas" em uma seqüência de acordo com um delimitador especificado.

Por exemplo: Num-entradas em uma seqüência de caracteres "a,b,c" com delimitador"," = 3.

Entrada() Retorna o enésimo token em uma seqüência de acordo com um delimitador especificado.
Comprimento Length
Substituir() Replace()
Contém() String. Contains()
Retorna a palavra "verdadeiro" ou a palavra "falso".
Substring(Início) Substring(Início)
Substring(Início,comprimento) Substring(Início,comprimento)
ToUpper() String. ToUpper()
ToLower() String. ToLower()
StartsWith() StartsWith()
Retorna a palavra "verdadeiro" ou a palavra "falso".
EndsWith() EndsWith()
Retorna a palavra "verdadeiro" ou a palavra "falso".

Um erro de execução BDC explicado

Eu causou um erro BDC nesta semana que se manifestou na interface do usuário e no 12 log de colméia em tempo de execução.

Primeira, isso apareceu na interface do usuário:

Não foi possível localizar campos para inserir todos os valores de identificador para executar corretamente uma SpecificFinder MethodInstance com nome … Certifique-se de que parâmetros de entrada tem TypeDescriptors associado com cada identificador definido para esta entidade.

Aqui está uma captura de tela:

clip_image001

Eu também poderia causar essa mensagem apareça no 12 log de colméia será (usando meu high-tech-don't-try-this-at-home patenteado "erros misteriosos" Método):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C dados de negócio do SharePoint Portal Server 6q4x alta exceção em BusinessDataWebPart.OnPreRender: System. InvalidOperationException: O valor do identificador ”, do tipo ”, é inválido. Valor de identificador esperado do tipo 'System. String'. em Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Objeto[] subIdentifierValues, LobSystemInstance lobSystemInstance) em Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entidade de entidade, Objeto[] userValues, LobSystemInstance lobSystemInstance) em Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(Vista desiredView) em Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() em Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

Eu procurei e encontrei algumas pistas na Fórum do MSDN, Mas eles não foram suficientes para eu entender o que estava fazendo errado. Eu assisti um webcast por Ted Pattison que meu companhia tem extra disponível em um servidor e veio a perceber o meu problema.

No meu ADF, Estou conectando a um banco de dados SQL como mostrado:

            <Propriedade Nome="RdbCommandText" Tipo="System.">
              <![CDATA[
                SELECIONE SETID, CARRIER_ID, EFFDT, DESCR, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      PAÍS, ADDRESS1, ENDEREÇO2, 3, ADDRESS4, CIDADE, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      CONDADO DE, ESTADO, POSTAL, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, TELEFONE, EXTENSÃO, FAX, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG de dbo.PS_CARRIER_ID_VW com (NOLOCK)
                ONDE
                  (SETID <> 'COMPARTILHAMENTO') and
                  (baixa(CARRIER_ID) >= baixa(@MinId)) and
                  (baixa(CARRIER_ID) <= baixa(@MaxId)) and
                  (baixa(DESCR) COMO baixa(@InputDescr))
                ]]>
            </Propriedade>

Eu estava desde o SQL de uma pessoa DBA e eu sou dado a entender que é um especiais vista que eles criaram só para mim. A chave exclusiva lá é CARRIER_ID.

Aqui é o inseto que apresentei:

      <Identificadores de>
        <Identificador de Nome="CARRIER_ID" TypeName="System." />
        <Identificador de Nome="DESCR" TypeName="System." /> 
</Identificadores de>

Em algum lugar ao longo da linha, Eu tinha conseguido confundir-me sobre o significado de <Identificadores de> e acrescentou DESCR, mesmo que não é na verdade um identificador. Eu tirei DESCR o conjunto de identificadores e presto! Deu tudo.

Espero que isso poupe alguma dor de alguém 🙂

Technorati Tags: , , ,