Se a ferramenta está fazendo coisas que você não entende, e depois falhar no passo n de um número desconhecido de passos, Você está morto na água…
</fim>
Se a ferramenta está fazendo coisas que você não entende, e depois falhar no passo n de um número desconhecido de passos, Você está morto na água…
</fim>
Foi mais uma vez criando arquivos ADF BDC à mão (para que eu possa construir minha "Saia meu gramado!" cred) e acertar esse erro lindo:
"Importação de definição de aplicativo falha. Ocorreu o seguinte erro:"
Como você pode ver, há um erro, mas … não vai me dizer o que é.
No meu caso, a questão acabou por que eu tinha começou com um ADF funcional para um projeto diferente que conectado a um banco de dados e executada uma consulta SQL contra um modo de exibição. Neste novo projeto, Eu estou chamando um método em um serviço da web. Eu tinha despojado o material específico do DB e acrescentou minhas coisas de serviço web, mas não conseguiu actualizar o <LobSystem>do tipo atributo. Eu mudei isso para "WebService" e eu Felizmente passei para erros de importação mais recente e mais emocionante, que foram manipulados em breve.
Aqui está o LobSystem errado:
<LobSystem
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation =http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalogBDCMetadata.xsd
Tipo = "banco de dados"
Versão = "1.0.0.0" Nome = "xyzzy"
xmlns ="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog">
Isso é correto:
<LobSystem
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation =http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalogBDCMetadata.xsd
Tipo = "WebService"
Versão = "1.0.0.0" Nome = "xyzzy"
xmlns ="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog">
</fim>
ATUALIZAÇÃO: Esta postagem MSDN tem algumas observações interessantes de JXJ com base em seu, principalmente negativas, experiências indo por este caminho: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2623565&SiteID=1
Temos um cenário de negócios onde precisamos ligar duas bibliotecas de documentos por meio de um comum "ID do documento" campo.
Muitas vezes usamos uma coluna de pesquisa que implementa ligações assim. Existem várias desvantagens para colunas de pesquisa, três dos quais são:
Respaldo da BDC, podemos usar um "dados de negócios" tipo de coluna fornece uma pesquisa superior e ainda permite que várias colunas de dados para aparecer em modos de exibição lista.
Eu tive algum sucesso com essa abordagem preliminar e planeja escrever mais sobre isso.
Se você trabalhou este ângulo antes e tiver quaisquer comentários, por favor, compartilhe!
</fim>
Eu tenho trabalhado com BDC hoje, codificação de arquivos ADF com a mão e eu mesmo gerar alguns erros. Um tal erro:
Importação de definição de aplicativo falhada. Ocorreu o seguinte erro: Não foi possível carregar o tipo descrito pelo TypeName de TypeDescriptor. Nome do parâmetro: typeName erro ocorreu em ou antes de linha: 35’ e a posição: '20'.
MOSS exibido este erro ao tentar importar o arquivo XML do ADF.
Eu pesquisei a internete e encontrei que eu estava referenciando o nome de instância LOB (do <LobSystemInstance>) no meu <TypeDescriptor> nó quando eu deveria ter referenciado o próprio nome LOB (De <LobSystem>).
Errado:
<TypeDescriptor TypeName="Conchango.KeyValue, Nome da instância do LOB" Nome = "KeyValue">
Corrigir:
<TypeDescriptor TypeName="Conchango.KeyValue, Nome de LOB" Nome = "KeyValue">
Espero que este alguém salva uma ou duas horas do tempo.
</fim>
Eu estava trabalhando em um recurso na semana passada que gostaria de acrescentar alguns receptores de evento para uma instância de lista específica. (Eu blogged um pouco sobre esse receptor de lista aqui).
Usando a linha de comando, Eu poderia instalar o recurso sem erros (mas veja abaixo o erro oculto). Quando eu tentei implantar o recurso no site, MOSS queixou-se de um "FileNotFoundException" erro. Esta entrada de blog descreve como eu resolvi isso.
Este é o erro que MOSS mostrou-me no navegador da web:
Recurso ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ não pôde ser instalado porque o carregamento de assembly de receptor de eventos "xyzzyFeatureReceiver_0" Falha: System.IO.FileNotFoundException: Não foi possível carregar arquivo ou assembly ' xyzzyFeatureReceiver_0’ ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.
Nome do arquivo: ' xyzzyFeatureReceiver_0’
em System.Reflection.Assembly.nLoad(Nome de arquivo de AssemblyName, Base de código de seqüência de caracteres, Evidência assemblySecurity, Montagem locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyString de Cadeia de caracteres, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
no Load(AssemblyString de Cadeia de caracteres)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
AVI: Log de vinculação conjunto está activado OFF.
Para habilitar o log de falha bind assembly, Defina o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Para 1.
Observação: Há alguma penalidade de desempenho associada assembly vincular falha log.
Para desativar esse recurso, Remova o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog].
Eu sei como deliberadamente causar esse erro: Não instalar o assembly no GAC. Mas, foi no GAC. Eu normalmente instalar assemblies no GAC arrastando-os para o c:\WINDOWSassembly. pasta usando o windows explorer. Eu nunca senti 100% confortável fazendo isso porque eu sempre pensei que gacutil existiu por uma razão … Então, eu tentei isso. Isso não fez diferença.
Eu procurei a internete e encontrei este post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
O cartaz aconteceu estar usando o mesmo bit de raiz do código (do livro WSS dentro desta lista) Então isso foi um sinal de esperança. No entanto, a sugestão de decorar o assembly com um [montagem: ] directiva não fazia sentido para mim. Eu tentei de qualquer maneira e eu estava certo. Isso não fez diferença.
Então eu notei que a minha definição de classe não era pública. Eu fiz isso público e que não fez diferença.
Próximo, Eu fui para o problema de habilitar o log de falha de ligação, montagem"" (seguindo as instruções úteis e precisas fornecidas) e isto é onde as coisas começaram a ficar interessante. Esse log mostra-me que o tempo de execução está procurando em todo lugar nesse servidor para minha montagem. Nem parece ser procurá-lo no meu armário de remédios. Mas … Ele não vai procurá-lo no GAC.
Coloquei meu casaco de inverno e ir procurar a Internet novamente e achar que alguém teve este problema também. A longa discussão em que a publicação peters fora em nada e não consigo encontrar uma solução.
Mudar meu assembly para um dos lugares que o log afirma está procurando e eu avançar um pouco mais. Eu sou recompensado com um novo erro no navegador quando tento ativar o recurso:
Falha ao criar objeto receptor de recursos do assembly "xyzzyFeatureReceiver_0", Digite "Conchango.xyzzyFeatureReceiver" para o recurso b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: Sistema. ArgumentNullException: Valor não pode ser nulo.
Nome do parâmetro: tipo
em System.Activator.CreateInstance(Tipo tipo, Boolean confidenciais)
em System.Activator.CreateInstance(Tipo tipo)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Tempo para uma última viagem à Internets!
Desta vez eu descobrir, previsibilidade suficiente, que MOSS emite este erro porque o assembly não está no GAC.
Quero comprar obter algo positivo fora deste e tentar sentir um pouco orgulhoso que eu criei o Fugitivo de assemblies MSIL, Mas não está funcionando. Estou muito chateado. Me pego resmungando "ovo ou a galinha" sob a minha respiração.
Eu finalmente decidir chutar. Criar um projeto totalmente novo e copiar/colar o código do projeto de não-trabalho de incredible-cloaked-from-the-GAC-assembly sobre a este novo projecto. (Eu procuro um sinalizador de compilação chamado algo como "hide from assembly ligação se instalado no GAC" mas não é possível encontrar um).
Posso instalar o recurso e ativá-lo e … Ele funciona! Assim, Depois de tudo isso, Eu tive que basicamente ' reiniciar’ meu projeto. Esta é outra razão por que eu odeio computadores.
Aprendi uma coisa útil disso. Eu tinha sido instalando recursos usando linha de comando stsadm dia inteiro e usando o "-força" opção por hábito. Por alguma razão, Eu não uso o - opção de força quando eu instalei o novo projeto. Desta vez, Eu fiz realmente, verdadeiramente esquecer copiar assembly deste novo projeto no GAC. Como resultado, Recebi esse "FielNotFoundException" erro. Desta vez, I got it from stsadm, Não, quando eu tentei ativar o recurso através do web browser. Assim, -força, na verdade, interpreta dois papéis. Ele permite que você re-instalar um recurso existente. Ele também permite que você instale uma buggy característica que não pode trabalhar em tempo de execução, suprimindo o erro. Provavelmente diz tanto na ajuda em algum lugar, mas eu nunca notei isso.
</fim>
===
Piada de esposa de bônus:
Dois colegas de trabalho masculinas sair para almoçar. Um deles diz para o outro, "Eu solta um embaraçoso Freudiano slip na outra noite."
"Um lapso Freudiano? O que é aquilo?"
"Bem, Quando nós terminamos comendo, a garçonete veio e perguntou como nós gostamos nossas refeições. Eu quis dizer, ' Eu amei o peito de frango’ Mas em vez disso, eu disse 'Eu amei seus seios'. Eu fiquei tão envergonhada."
"Ah," seu colega de trabalho respondeu:. "Eu tinha a mesma coisa aconteceu neste fim de semana com minha esposa. Estávamos comendo café da manhã, que eu queria perguntar-lhe para passar a manteiga, mas em vez disso eu gritei para ela, ' Você arruinou a minha vida!’"
</fim>
ATUALIZAÇÃO (04/08/08): Parece ter resolvido esse problema. Na linha de comando, Eu corri "c:\windowssystem32lodctr /R" como por uma entrada falando sobre InstallShield problemas e que parece ter resolvido-lo para mim.
Tenho notado que ultimamente, meu fã de desktop/servidor nunca desliga. Eu sei que costumava desligar. Eu levei um momento para verificar para fora notado que a um processo de VMware estava correndo um consistente 20% utilização em um da CPU. Eu verifiquei o log de eventos e vi esses erros no log do aplicativo acontece dezenas de vezes por minuto:
O Windows não pode carregar o UGatherer de DLL de contador extensível, a primeira DWORD na secção de dados é o código de erro do Windows.
O Windows não pode carregar o UGTHRSVC de DLL de contador extensível, a primeira DWORD na secção de dados é o código de erro do Windows.
O Windows não pode carregar MSSCNTRS de DLL de contador extensível, a primeira DWORD na secção de dados é o código de erro do Windows.
Se me aprofundar nos detalhes de uma dessas mensagens, Eu começ este:
Fonte: Perflib
Tipo: Erro
Categoria: Nenhum
ID do evento 1023
Fiz algumas pesquisas e havia alguma indicação de que poderia ser um problema de permissão em termos de acesso às DLLs em questão. Eu brinquei com essas coisas, mas não pode afetar as coisas de uma forma positiva, então desisti do que.
VMware tinha me atormentando sobre como executar uma atualização há muito tempo, assim que eu anotou para baixo a versão que eu tinha instalado (aparentemente "1.0.1 construir 29996") e fiz a atualização. Isto me atualizado para v 1.04. Infelizmente, Ele não corrigiu o problema.
Eu posso parar o número insano de mensagens vai meu log de aplicativo se eu desligar um serviço chamado "VMware Authorization Service". Isto me impede de usar o software VMware, Portanto, … Não uma ótima opção.
O sistema operacional é Windows XP 64 bit.
Eu não acho que isso sempre aconteceu, mas não me lembro de qualquer evento específico que poderia ter conduzido a ele.
Eis porque eu odeio computadores.
</fim>
ATUALIZAÇÃO: Isso funciona, mas existem limitações significativas, que são descritas nos comentários. Isto ainda pode ser útil em algumas circunstâncias.
ATUALIZAÇÃO 2: No meu projeto atual, os usuários sempre fazer upload de documentos. Como resultado, Eu não corro em um problema onde o MS Word está sendo executado e acha que o arquivo foi renomeado nele. Eu funcionei em um problema, "o arquivo foi modificado por outro usuário" e isto resolvido através de um sinalizador de tipo semáforo simples. Os usuários precisam mudar um campo de dados de meta de seu valor padrão para outra coisa. O itemupdated() receptor procura lá um valor válido antes de realmente executar a renomeação e desde então, Eu não tive quaisquer problemas. Sua milhagem pode variar.
Eu tenho uma exigência do cliente para alterar o nome de arquivos carregados para uma biblioteca de documentos específica conformar-se com uma Convenção de nomenclatura específica. A API não oferece uma "renomear()" Método. Em vez disso, Nós usamos "MoveTo(…)". Aqui está um pouco mínimo de código para realizar essa tarefa:
público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades) { SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File; f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
O bit apenas complicado é as "Propriedades. ListItem.ParentList.RootFolder.Url". O MoveTo() método requer uma URL. Que mínimo pontos de seqüência de caracteres para a pasta raiz de minha biblioteca do documento atual. Isso me permite evitar qualquer codificação difícil no meu receptor de eventos.
Esta é uma versão mais útil que faz a mesma coisa, mas atribui o nome do arquivo para "Título":
público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades) { DisableEventFiring(); // Atribuir o título deste item para o nome do próprio arquivo. // OBSERVAÇÃO: Esta atribuição deve ter lugar antes de nós modificar o próprio arquivo. // Atualização de chamada() sobre o SPFile t: Microsoft.SharePoint.SPFile parece invalidar as propriedades em // algum sentido. Atualizações para "título" falha até que altere (e atualização() chamar) // passaram em frente da mudança para o nome do arquivo. Propriedades.ListItem["Título"] = Propriedades.ListItem.File.Name; Propriedades.ListItem.Update(); SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File; // Obter a extensão do arquivo. Precisamos que mais tarde. Cadeia de caracteres spfileExt = Novo FileInfo(f.Name).Extensão; // Renomeie o arquivo para ID do item de lista e use a extensão de arquivo para manter // parte dele intacta. f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url + "/" + Propriedades.ListItem["ID"] + spfileExt); // Confirmar a mudança. f.Update(); EnableEventFiring(); } |
Um companheiro, "Mark", foi iniciado um debate de newsgroup potencialmente interessante enfocando "estabelecendo excelente Governança SharePoint desde o início" para um 35,000 ambiente do usuário.
A discussão é aqui: http://groups.google.com/group/microsoft.public.sharepoint.portalserver/browse_thread/thread/6d9a738d981af772/1c390b15c5407db6?#1c390b15c5407db6
Pop em sobre e contribuir!
</fim>
Ainda tenho o hábito de crafting meus arquivos XML do recurso à mão, já que é tudo muito novo para mim. Não quero contar com uma ferramenta front-end que faz coisas que não entendo (Ele disse que como ele escreveu uma entrada de blog usando uma ferramenta que ele não entende).
Hoje, Estava a tentar adicionar uma ação personalizada para as configurações do site, mas ele não apareceria. Eu poderia instalar o recurso e veja os recursos do site, mas quando eu ativei- (sem erro) Ele simplesmente não iria aparecer no menu Soltar-para baixo.
Finalmente percebi que eu misspelled "SharePoint" no atributo Location do <CustomAction> nó. Este é o arquivo elements. XML mal:
<?XML Versão="1.0" codificação="UTF-8" ?> <Elementos xmlns="http://schemas.Microsoft.com/SharePoint/"> <CustomAction Identificação="SiteActionsToolbar" GroupId="SiteActions" Localização="Microsoft.SharePoint.StandardMenu" Seqüência="100" Título="Olá!" Descrição="Ação do menu personalizado adicionada por meio de um recurso." ImageUrl="_layouts/images/menuprofile.gif"> <UrlAction URL="http://www.xyzzy.com"/> </CustomAction> </Elementos> |
Bom:
<?XML Versão="1.0" codificação="UTF-8" ?> <Elementos xmlns="http://schemas.Microsoft.com/SharePoint/"> <CustomAction Identificação="SiteActionsToolBar" GroupId="SiteActions" Localização="Microsoft.SharePoint.StandardMenu" Seqüência="100" Título="Olá!" Descrição="Ação do menu personalizado adicionada por meio de um recurso." > <UrlAction URL="http://www.xyzzy.com"/> </CustomAction> </Elementos> |
That one took me a good two hours to figure out 🙂
Eu tomo consolo no fato de que algum dia no futuro, Eu vou ser capaz de afirmar com convicção, "back in the day, Eu tinha que caminhar quilômetros até Morro na neve (descalço!) a fim de implantar um recurso personalizado para MOSS. As crianças, você não sabe como é fácil você tê-lo! Saia do meu gramado!"
Não posso esperar.
</fim>