Rápido e simples: Provisionar um Web Site utilizando o modelo de objeto SharePoint em c#

Eu tentei procurar por um pequeno trecho de código que iria mostrar como pode criar um novo SPWeb t: Microsoft.SharePoint.SPWeb em um conjunto de sites. Não encontrá-lo como rapidamente ou facilmente, como eu esperava, então eu pensei que eu daria um tapa juntos uma pequena entrada sobre o assunto.

Esse código cria um novo site Wiki:

 SPSite t: Microsoft.SharePoint.SPSite siteCollection;

    siteCollection = Novo SPSite t: Microsoft.SharePoint.SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy título",
        "xyzzy descrição", 1033, SPWebTemplate.WebTemplateWIKI, falso, falso);

Minhas buscas iniciais falharam porque eu estava procurando por frases como "configurar um web site utilizando o modelo de objeto sharepoint" e afins.

Se você pesquisa para Webs.Add"()", Você encontrará um número de entradas de blog muito útil, Artigos da MSDN e a documentação do SDK que entram em profundidade sobre este assunto. Eu definitivamente recomendo Este site.

</fim>

Subscreva ao meu blog.

Technorati Tags:

Integrar os fluxos de trabalho do SharePoint Designer com serviços Web

Eu fui brincar com ações personalizadas para SharePoint Designer há algum tempo (Consulte aqui para algumas coisas detalhadas, Se isso lhe interessa.).

No meu projeto atual, Precisamos fazer um trabalho bastante pesado e queremos usar o fluxo de trabalho declarativo SPD para gerenciar o processo de negócios associados.

Longa história curta, Isso é inteiramente possível.. Eu estendi o meu projeto do Codeplex para invocar um serviço de auxiliar"" e agora podemos invocar um serviço web diretamente a partir de um fluxo de trabalho do SPD.

Aqui está a assinatura:

 público Cadeia de caracteres Despachante(
        GUID WebID, // Passou pelo ambiente de tempo de execução
        GUID SiteID, // Passou pelo ambiente de tempo de execução
        Cadeia de caracteres ListID, // Passado pelo RTE (Não sei por que isso é uma seqüência de caracteres, Não um GUID.)
        int ListItemID, // Passado pelo RTE.
        Cadeia de caracteres XmlMessage) // Passado pelo usuário conforme declarado no SPD.

Este aproveita o facto de conseguirmos a informação importante de fluxo de trabalho, como o site, ID da lista, etc. Isto está bem documentado em vários lugares para aqueles interessados na criação de suas próprias ações personalizadas. A idéia é extrair a cadeia de caracteres XML conforme fornecido pelo usuário para despachar um processo adequado. Coisas divertidas!

Infelizmente, Esta é obviamente uma passagem só de ida para baixo para "Loosey Goosey." anti-pattern terra, but it’s better than hitting a brick wall 🙂

Se você fizer isso, mesmo sabendo que é um antipadrão é um antipadrão?

Espero resolver isto dentro Codeplex em um futuro próximo. Se você está interessado em mim fazê-lo, me dê um puxão (Email ou deixe um comentário) and I’ll be that more enthusiastic about doing it 🙂

</fim>

Subscreva ao meu blog.

Technorati Tags: ,

Domingo engraçados: “Gostaria de saber se sua senha for …”

Eu comprei recentemente o almoço para meu irmão (como de costume) e acabamos conversando sobre coisas engraçadas que fizemos em nossas respectivas faculdades. Na minha alma mater, Lafayette College, o departamento de apoio acadêmico tinha uma forma muito abrangente sobre isso. Deram-nos muita corda e eu me aproveitei às vezes.

Dois minhas memórias favoritas referem-se ao meu bom amigo, Gabe. Ele tinha feito o erro terrível de dizer as pessoas que "Eu sou um calouro calouro, Mas eu tenho o segundo ano em pé" devido as várias classes de colocação avançada, que ele tinha tomado, etc. Da mesma forma que muitos de nós estavam situados, mas não falamos muito sobre isso. Seu ano sênior, Quando nós o apresentou a pessoas, Nós diríamos "Este é Gabe. Ele é um Senior, Mas ele tem no segundo pé ".

O colégio tinha uma estação de trabalho/servidores Sun executando o X-Window. Eles tinham monitores gigantes e os engenheiros usaram para CAD e outras coisas chatas do engenheiro. Nós CS pessoas usaram-os para aprender programação e, É claro, jogar jogos.

Não que os engenheiros computador indefeso a muito por uma das nossas coisas favoritas a fazer seria de telnet para a caixa eles estavam na e correr X-eye sobre eles. Isso apareceria um par de olhos que seguia o mouse na tela. Você poderia aparecer ainda mais e ter literalmente uma dúzia ou mais das aplicações X-olho correndo. Try not to laugh out loud when a hapless engineer is trying to close X-eye after X-eye and muttering under his breath about it 🙂

Também jogamos X-trek sobre essas caixas. Para fazer isso, Você tinha que baixar a fonte, se várias dependências onde poderia encontrá-los e construí-lo. Eu não era um programador de C sofisticado, Mas eu podia ler arquivos de cabeçalho. Eu estava olhando através destes e encontrei directivas como "#DEFINE MAX_TORPEDO_DISTANCE 10". Eu brinquei com isso aumentar o alcance e poder para as fases e torpedos, re-construído e destruída na próxima vez que jogámos Gabe.

Gabe também era um grande fã de um programa de TV chamado Blake 7. Eu nunca tinha visto, Mas isso não me impede de insistir que o Dr. Quem é o show superior. The arguments would get heated at times 🙂

Um dia, ocorreu-me que eu provavelmente poderia adivinhar sua senha UNIX. Eu sentei ao lado de um dia e anunciou em tom alto, "Eu vou adivinhar sua senha agora, Gabe." "Sim, direito" foi a resposta dele. Então eu entrei, entrou seu id de usuário, virou-se para enfrentá-lo, digitado e disse em voz alta, "Gostaria de saber se é B-L-A-K-E-7" ? Dactilografar tem nunca tão bem pago como fez naquele dia.

Na próxima semana (ou em breve): Mais palhaçadas de quarto de computador da faculdade.

Você tem alguma para compartilhar? Deixe um comentário ou e-mail me e eu vou publicá-las aqui.

</fim>

Subscreva ao meu blog.

Technorati Tags:

Anúncio público menor: As configurações de segurança ao vivo de Windows e entrar em contato com os proprietários do espaço

Recebo um punhado de mensagens de indivíduos através do built-in "Enviar uma mensagem" função Microsoft fornece com espaços ao vivo (que também hospeda o meu blog) todos os meses.

Cerca de um terço do tempo, os usuários têm garantido conta seus espaços ao vivo tal que eu não posso responder. Isso é algum tipo de característica de anti-spam, que eu assumo.

</fim>

Explicação simples: “Valor não se enquadra no intervalo esperado.”

ATUALIZAÇÃO: Um cartaz anônimo que deixou um grande comentário sobre nomes internos. Certifique-se de lê-lo.

Quando se trabalha com receptores de eventos e outros códigos que faz referência a itens de lista do SharePoint por meio do modelo de objeto, Eu muitas vezes cometem erros que geram esse erro em tempo de execução:

Erro ao carregar e executar o receptor de evento Conchango.xyzzyEventReceiver em xyzzy, Versão = 1.0.0.0, Cultura = neutro, PublicKeyToken = 0dc50a750396c3ac. Informações adicionais estão abaixo. : Valor não se enquadra dentro do intervalo esperado.

Acho que é um erro bastante genérico que é potencialmente causado muitas maneiras diferentes. No entanto, uma explicação simples é que eu estou fazendo referência a um campo incorretamente. Se o nome do campo "Data de vencimento", Eu deve referenciá-lo como este em um receptor de eventos:

Propriedades.ListItem["Due Date"]

Quando escrever mal ou usar o caso errado ao fazer referência o campo, SharePoint gera o acima mencionado erro de tempo de execução. Por exemplo, Isso é errado:

Propriedades.ListItem["due Date"]

</fim>

Subscreva ao meu blog.

Dica rápida do usuário final: Vistas de classificar em uma biblioteca de documentos, Lista, etc.

Nós podemos, deveria e criar muitos pontos de vista em listas do SharePoint (bibliotecas de documentos, listas personalizadas, etc). Modos de exibição disponíveis em ordem alfabética de listas do SharePoint sempre. Não podemos mudar isso usando sem a funcionalidade de caixa. Se isso pode ser feito através de personalização (e não tenho certeza se pode), é muito técnico para seu usuário final típico.

Se você quiser controlar a ordem na qual SharePoint lista modos de exibição disponíveis, simplesmente colocar um número ou uma carta para o nome de exibição, como em:

1 – Por tipo de Material
2 – Todos os documentos
3 – Data de vencimento

-ou-

A – Por tipo de Material
B – Todos os documentos
C – Data de vencimento

Eu também criei vistas cujo objetivo é estritamente alimentar um KPI. Tenho vindo a seguir essa Convenção de nomenclatura:

Z_KPI_[Descrição]

Isso faz com que o meu "KPI" vistas a aparecer na parte inferior da lista.

</fim>

Subscreva ao meu blog.

Domingo engraçados: “Quando eu era um menino”

Como um pai, em algum lugar ao longo da linha que eu descobri o "quando eu era um menino" truque.

Meu filho, provavelmente quatro ou cinco no momento, estava jogando um balão e gosta de meninos mais pequenos que jogam com balões, Ele fez isso. Ele estava muito chateado. O mundo tinha chegado ao fim. Eu disse a ele, "quando eu era menino, Eu tinha um balão e ele apareceu e, eventualmente,, Tenho um novo balão." Ele parecia ajudá-lo a lidar com sua perda e levou a um divertido falar sobre como era quando eu era um garotinho.

Que funcionou bem como uma técnica de consolo e eu usei um várias vezes durante o próximo período de tempo. Eu consegui uma vez em apuros quando seu Monster Rancher 3 criatura morreu. Eu falei sobre como meu cachorro, Príncipe, tinha morrido em um acidente de carro. Desta vez, sua resposta foi, "Agora sinto coisas ruins sobre dois!" Eu evitava usando o "quando eu era um garotinho" técnica para consolação depois disso.

Antes do incidente do cão morto, no entanto, Eu também tinha começado a usar a técnica para convencê-lo a fazer tarefas. "Quando eu era um garotinho, Eu tive que sair e comprar o jornal", "limpar o meu quarto", "se a mamãe a xícara de café", etc.

Isso também foi muito bem sucedido por um tempo, Mas ele começou a cada vez mais se rebelar contra a tirania da minha infância. Um evento, em particular, marcou o fim. Disse-lhe para trazer as latas de lixo da calçada na garagem. Ele argumentou, e eu respondi, "Quando eu era um garotinho, Eu tive que levar o lixo de volta para a garagem." Ele respondeu, "Oh sim! Bem, quando você era um menino, Isso foi estúpido!".

</fim>

Subscreva ao meu blog.

Technorati Tags:

Exibições e colunas em listas e bibliotecas de documentos não podem ser protegidas

ATUALIZAÇÃO (02/29/08): Este novo projeto codeplex parece fornecer um método para proteção de colunas individuais: http://www.codeplex.com/SPListDisplaySetting. Se você tem alguma experiência em trabalhar com ele, por favor, deixe um comentário.

Cartazes Fórum freqüentemente uma pergunta como esta: "Tenho uma visão de gerente e e uma visão pessoal de uma lista. Como para proteger a vista do gerente para que a equipe não pode usá-lo?"

Eles também freqüentemente uma perguntam relacionada: "Quero proteger uma coluna de metadados específicos, de forma que somente os gestores podem editar essa coluna enquanto outros não podem vê-lo."

Estas respostas se aplicam a ambos WSS 3.0 e musgo:

  • SharePoint não oferece suporte out-of-the-box para proteger visualizações.
  • SharePoint não oferece suporte out-of-the-box para colunas de segurança.

Existem várias técnicas podem seguir para encontrar estes tipos de requisitos de segurança. Eis o que penso:

  • Usar a segurança de nível de item de out-of-the-box. Exibições sempre honrar a configuração de segurança em nível de item. Receptores de evento e/ou fluxo de trabalho pode automatizar a atribuição de segurança.
  • Use pontos de vista pessoais para "privilegiado" Modos de exibição. Estas são bastante fáceis de configurar. No entanto, devido à sua "personal" natureza, Estes precisam ser configurados para cada usuário. Use a configuração de segurança padrão para impedir que alguém criando uma visão pessoal.
  • Usar uma web part de exibição de dados e implementar algum tipo de solução de aparamento de segurança AJAXy.
  • Rolar sua própria funcionalidade de exibição de lista e incorporar o aparamento de segurança no nível de coluna.
  • Modificar as formas de entrada de dados e usar JavaScript em conjunto com o modelo de segurança para implementar o aparamento de segurança de nível de coluna.
  • Usar um formulário do InfoPath para entrada de dados. Implementar o aparamento de segurança de nível de coluna através de chamadas de serviço web para SharePoint e condicionalmente ocultar campos conforme necessário.
  • Rolo de sua própria função de entrada de dados do ASP.NET que implementa o aparamento de segurança em nível de coluna.

Nenhuma dessas opções são realmente é ótima, Mas há pelo menos um caminho a seguir, se você precisa, mesmo se é difícil.

OBSERVAÇÃO: Se fores por qualquer um desses caminhos, Não se esqueça de "ações-> Abrir com Windows Explorer". Você quer ter certeza de que você teste com esse recurso para certificar-se de que ele não funciona como uma "porta dos fundos" e derrotar o seu esquema de segurança.

Se você tiver outras idéias para ou experiências com fixar colunas ou pontos de vista, por favor correio eletrónico a mim ou deixe um comentário e eu vou atualizar esta postagem conforme apropriado.

</fim>

Subscreva ao meu blog.

Technorati Tags:

Dica rápida: Números de versão do ADF de BDC são seu amigo

Se você estiver codificação manual ADF arquivos e fazendo um monte de ciclos de teste de importação de código, Use o número de versão para facilitar a sua vida.

Eu odeio admitir isso, mas até esta semana, Eu estava sempre apagar o ADF e importando novamente. Isso iria quebrar minhas colunas de dados de negócios e fazer-me re-conectá-los. Todos os desnecessários.

Este arquivo sob "é óbvio, uma vez que você vê-lo".

Exemplo:

<LobSystem
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog BdcMetadata" Tipo="WebService" Versão="1.2.0.0" Nome="xyzzyDocumentReview" xmlns="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog">

Alterar essa versão e a reimportação e a coluna de dados de negócios existente usa a versão atualizada automaticamente sem qualquer configuração adicional necessária.

</fim>

Subscreva ao meu blog.

Technorati Tags:

Solução: Selecionador de BDC mostra apenas uma coluna de resultados

Em minhas tentativas em curso para fornecer uma coluna de pesquisa mais útil usando BDC, Eu bati uma parede com o selecionador de BDC. Se você não vê-lo, o seletor de BDC é semelhante a um seletor de pessoas exceto que funciona com colunas do tipo "dados de negócios".

Você acessar o seletor de clicando no ícone do livro aberto de uma coluna de dados de negócios como mostrado:

imagem

A imagem acima mostra uma coluna de dados de negócio chamada "Id do documento mestre". Essa coluna é conectada, via BDC, para um serviço da web. O serviço da web retorna duas colunas de informações: Título e ID do documento. A finalidade do negócio aqui é fornecer um "este documento baseia-se na" função. Os usuários selecionam um mestre"" documento e quando eles salvar, um receptor de eventos copia campos de meta dados do mestre referenciado.

Por padrão, o seletor de BDC fica assim quando eu procurar um documento cujo ID = "38":

clip_image002

Isso é útil, Mas não é bom o suficiente. As pessoas não pensam em termos de IDs, Eles pensam em termos de títulos e/ou outros dados de meta. O seletor permite que você pesquise em outras colunas (EG. Título) Mas não vai mostrar a lista real de títulos que encontrei, apenas seu DocId é como mostrado aqui:

clip_image002[1]

(O tiro de tela não é tão grande, porque eu não escolhi uma busca que retorna qualquer resultado válido, Mas você pode ver que se tinha encontrado alguns resultados, Ele só teria mostrado do DocId, títulos não).

Procurei a resposta a esta de alta e baixa e falhou. Meu colega, o Venerável Jonathan Bradshaw, tinha enfrentado e resolvido esse problema. Quando entrei em contato com ele para ajuda, Ele me apontou na direção certa.

Configurar o seletor de para mostrar várias colunas através do "ShowInPicker" Propriedade no ADF:

<Propriedade Nome="ShowInPicker" Tipo="System. Boolean">verdadeiro</Propriedade>

Em mais detalhes:

  <!-- Título -->
  <TypeDescriptor TypeName="System." Nome="Título" >
    <LocalizedDisplayNames>
      <LocalizedDisplayName LCID="1033">Título</LocalizedDisplayName>
    </LocalizedDisplayNames>
    <Propriedades>
      <Propriedade Nome="DisplayByDefault" Tipo="System. Boolean">verdadeiro</Propriedade>
      <Propriedade Nome="ShowInPicker" Tipo="System. Boolean">verdadeiro</Propriedade>
    </Propriedades>
  </TypeDescriptor>

Configuração esta propriedade apresenta um problema menor. Tão logo você configurá-lo uma vez, Você precisa configurá-lo para cada coluna que você deseja mostrar. No meu caso, Selecionador de BDC mostrou DocId por padrão. No entanto, uma vez eu adicionei "ShowInPicker" a título, DocId não será mais exibido. Eu resolvi isso explicitamente definindo a propriedade ShowInPicker para Doc ID.

Aqui está o resultado:

imagem

(Vou explicar o estranho-olhando "168 – CamlSchema.xsd" construção em um post futuro. Em suma, é uma seqüência de caracteres concatenada que permite uma experiência de usuário um pouco melhor).

É claro, ter escrito esta entrada de blog, Fiz uma busca por "ShowInPicker" e encontraram numerosos sucessos, inclusive este: http://msdn2.microsoft.com/en-us/library/ms583986.aspx. Explica o significado dessa propriedade juntamente com outras BDC coisas boas.

</fim>

Subscreva ao meu blog!

Technorati Tags: