Como a: criar uma classe de conteúdo que pode ser feita e restaurada
Se você tiver um personalizado de conteúdo componente que você desejar a serem incluídos no wssversion3 Windows SharePoint Services 3.0 backups e restaurações, você deve representar o componente com uma classe que implementa a interface IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore. Este tópico explica como fazer isso. Há um completo seguinte exemplo de procedimentos.
A classe não tem derivar de SPPersistedObject mas se o de conteúdo é um banco de dados, recomendamos que você derivar sua classe a partir qualquer SPDatabaseSPContentDatabase. Ambas as classes último forem derivado de SPPersistedObject e dois implementar IBackupRestore. Portanto, você terá implementações usar como padrão de membros de IBackupRestore que você pode usar quando apropriado.
Você pode criar vários tipos de IBackupRestore classes desejar e, se você desejar, eles podem ser aninhados como uma árvore de classes componente. Mas a classe mais alto em qualquer tal árvore Deve Derivar (direta ou indiretamente) do objeto SPPersistedObject T:Microsoft.SharePoint.Administration.Backup.SPPersistedObject e Deve Ser um filho de SPFarm. Se seu de conteúdo classe não é um filho de quaisquer outro personalizado de conteúdo classe, ele Deve Derivar (direta ou indiretamente) do objeto SPPersistedObject T:Microsoft.SharePoint.Administration.Backup.SPPersistedObject e Deve Ser um filho de SPFarm.
Se sua classe deriva de uma classe que já implementa objeto IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore (Whether or not ele deriva de SPPersistedObject) e você desejar para substituir uma implementação herdada de um membro IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore, o declaração de classe deve explicitamente referência IBackupRestore assim:
public class MyClass : SPPersistedObject, IBackupRestore
Seu "substituir" de qualquer membro IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore deve explicitamente incluir " IBackupRestore
" no nome do membro e ele não deve incluir o palavra-chave pública public. A seguir está um exemplo:
UInt64 IBackupRestore.DiskSizeRequired { ... }
Como alternativa, se a implementação do membro na classe pai usou o virtual ou palavras-chave override substituir, você pode usar o palavra-chave override substituir na sua implementação assim:
public override UInt64 DiskSizeRequired { ... }
Aviso
Fazer Nãoocultar a implementação membro herdado por redeclaring o membro com ou sem o palavra-chave new nova ( [new] public UInt64 DiskSizeRequired { ... }
).No procedimento a seguir, o membro assinaturas são gravadas como eles poderiam ser para uma classe que não é derivada de uma classe que implementa já IBackupRestore.Não se esqueça alteração-los para o exigido padrão se sua classe derivar de tal um pai.
If your class derives from SPPersistedObject, let the Microsoft.SharePoint.Administration.Backup.SPPersistedObject.Id and Microsoft.SharePoint.Administration.Backup.SPPersistedObject.Name properties of that class serve as the implementation of the Microsoft.SharePoint.Administration.Backup.IBackupRestore.Id and Microsoft.SharePoint.Administration.Backup.IBackupRestore.Name properties. Você pode substituir as propriedades, mas não criar uma segunda implementação de qualquer um deles. A classe deve ter apenas um Nome e um ID propriedade.
Para implementar os membros de IBackupRestore
Inicie um novo projeto de classe em Visual Studio.
Adicione uma referência aos serviços SharePoint Windows para seu projeto Visual Studio e adicionar using para o
Microsoft.SharePoint.Administration
eMicrosoft.SharePoint.Administration.Backup
espaços para nome para seu arquivo classe.Se a classe não derivar de SPPersistedObject, implementar o Name P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.Name propriedade. Isso servirá como o nome do de conteúdo componente no interface do usuário de
stsadm.exe
, o aplicativo Central Administration e o interface do usuário de qualquer personalizado aplicativo de backup e restaurar. Na maioria casos você implementar a propriedade criando um campo particular para o valor Nome e implementar a propriedade pública como um wrapper em torno de campo. Para informações sobre possível variante implementações, consulte o tópico de referência para a propriedade.private String name; public String Name { get {return name;} set {name = value;} }
Se a classe não derivar de SPPersistedObject, implementar o Id P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.ID propriedade. Na maioria dos casos, você implementar a propriedade criando um campo particular para o valor Nome e implementar a propriedade pública como um wrapper em torno de campo. Para informações sobre possível variante implementações, consulte o tópico de referência para a propriedade.
private Guid id; public Guid Id { get {return id;} set {id = value;} }
Implemente o DiskSizeRequired P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.DiskSizeRequired propriedade. Se sua classe for apenas um contêiner para alguns classes T:Microsoft.SharePoint.Administration.Backup.IBackupRestore IBackupRestore filho, a propriedade deve retornar 0. Caso contrário, a propriedade deve calcular o tamanho do de conteúdo. (Include the size of any non-IBackupRestore child objects, but do not include the size of any child IBackupRestore objects. Eles cada terem sua própria propriedade DiskSizeRequired P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.DiskSizeRequired e Windows SharePoint Services 3.0 irá adicionar esses valores em automaticamente.) O seguinte exemplo soma os tamanhos dos todos os arquivos cujos caminhos estão contidos em um chamado coleção FrontEndFilePaths .
public UInt64 DiskSizeRequired { get { UInt64 total = 0; List<FileInfo> FrontEndFiles = new List<FileInfo>(NUMBER_OF_FILES_TO_BACK_UP); foreach (String path in FrontEndFilePaths) { FileInfo file = new FileInfo(path); FrontEndFiles.Add(file); } foreach (FileInfo file in FrontEndFiles) { total = total + (UInt64)file.Length; } return total; } }
Implemente o CanSelectForBackup P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.CanSelectForBackup propriedade. Se os usuários devem Nunca Consiga de backup objetos de sua classe independently of um de backup do objeto pai, o acessador get get deve retornar false. Se os usuários sempre devem ser capazes de selecionar Qualquer objeto de sua classe para de backup independente, o acessador get get deve retornar true. Em ambos os maiúsculas e minúsculas, o acessador set conjunto deve ser um vazio par de chaves "{}". Se alguns objetos de sua classe é possível fazer o backup independently of seu pai, mas alguns não podem ser, implementar a propriedade como um wrapper em torno um campo particular Boolean T:System.Boolean.
Implemente o CanSelectForRestore P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.CanSelectForRestore propriedade. Se os usuários nunca consiga restaurar objetos da sua personalizado classe componente independently of uma restauração do objeto pai, o acessador get get deve retornar false. Se os usuários sempre devem ser capazes de selecionar qualquer objeto de sua classe para restauração independente, o acessador get get deve retornar true. Em ambos os maiúsculas e minúsculas, o acessador set conjunto deve ser um vazio par de chaves "{}". Se alguns objetos de sua classe podem ser restaurados independently of seu pai, mas alguns não podem ser, implementar a propriedade como um wrapper em torno um campo particular Boolean T:System.Boolean.
Implemente o CanRenameOnRestore P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.CanRenameOnRestore propriedade. Se os usuários nunca consiga restaurar objetos da sua personalizado componente classe para uma nova localidade, o acessador get get deve retornar false. Se os usuários devem ser consiga migrar qualquer objeto de sua classe, o acessador get get deve retornar true. Se objetos de sua classe podem às vezes, ser migrados, mas nem sempre, implementar a propriedade como um wrapper em torno um campo particular Boolean T:System.Boolean.
Implemente o AddBackupObjects método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.AddBackupObjects.
Codificar sua implementação deve começar por lançar uma exceção se não houver nenhum válido pai para que o componente pode ser adicionado.
Use o método AddChild M:Microsoft.SharePoint.Administration.Backup.SPBackupRestoreObject.AddChild para adicionar o componente para a árvore de objetos que será a operação de backup ou restaurar processo.
Use o método SetParameter M:Microsoft.SharePoint.Administration.Backup.SPBackupRestoreInformation.SetParameter para especificar um tipo Nome e descrição do componente que pode ser usado pelo interface do usuário de de backup/restaurar aplicativos.
Se o componente possui objetos IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore filho, sua implementação deve iterar por meio-los e recursivamente chamar o AddBackupObjects método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.AddBackupObjects de cada filho.
Consulte o tópico de referência para o AddBackupObjects M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.AddBackupObjects para obter mais idéias sobre implementações de ele.
O seguinte codificar exemplo pressupõe que sua de conteúdo classe possui um
ChildContentCollection
de objetos IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore filho. Se sua classe tiver more than um tipo de componente filho, talvez seja necessário separar coleções para cada tipo e iterar por cada coleção.public void AddBackupObjects(SPBackupRestoreObject parent) { if (parent == null) { throw new ArgumentNullException("parent"); } SPBackupRestoreObject self = parent.AddChild(this); self.Information.SetParameter(SPBackupRestoreObject.SPTypeName, this.GetType()); self.Information.SetParameter(SPBackupRestoreObject.SPDescription, "Description of custom content component"); foreach (ChildContent child in ChildContentCollection) { IBackupRestore childIBR = child as IBackupRestore; childIBR.AddBackupObjects(self); } }
Implemente o OnAbort método P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnAbort. Ele sempre deve retornar true. Na maioria dos casos ele deve fazer nada mais, mas consulte o tópico de referência para OnAbort para informações sobre exceções a essa regra geral.
Implemente o OnPrepareBackup método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnPrepareBackup. No mínimo, você deve usar o método SetParameter M:Microsoft.SharePoint.Administration.Backup.SPBackupRestoreInformation.SetParameter para especificar um nome para o de conteúdo objeto. Além disso, alguns generalizações podem ser feitas. Consulte o tópico de referência OnPrepareBackup para obter mais informações. O seguinte exemplo mostra uma implementação mínima do método, que geralmente é tudo que for necessário.
public Boolean OnPrepareBackup(Object sender, SPBackupInformation args) { if (args == null) } throw new ArgumentNullException("args"); } args.SetParameter(SPBackupRestoreObject.SPName, this.Name); return true; }
Implemente o OnBackup método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnBackup. Se seu de conteúdo classe tem não de conteúdo outside of quaisquer objetos filho IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore que ela pode ter, sua implementação simplesmente deve definir o CurrentProgess para um valor que representa a porcentagem de de backup o total de aproximadamente tempo operação que é consumido pelos OnBackup e OnPrepareBackup M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnPrepareBackup métodos. Em seguida, ele deve retornar true como visto no seguinte exemplo. Fazer Não call the OnBackup method of any IBackupRestore child objects.
public Boolean OnBackup(Object sender, SPBackupInformation args) { if (args == null) { throw new ArgumentNullException("args"); } args.CurrentProgress = 50; return true; }
Se sua classe does de conteúdo outside of quaisquer objetos filho IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore que ela pode ter, sua implementação deve copiar este de conteúdo para args. Location e retorno false se falhar a copiar. Você deve incluir lógica para qualquer filho objetos que não de backup Não implementar IBackupRestore, mas você deve não de backup explicitamente qualquer filho objetos que Fazer implementar IBackupRestore. Eles serão feitos backup por seus próprios OnBackup método, qual será a tempo de execução chamar. Você não deve chamar os métodos OnBackup M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnBackup dos objetos filho no seu próprio codificar. O seguinte exemplo mostra a estrutura geral de uma implementação essenciais de OnBackup:
public Boolean OnBackup(Object sender, SPBackupInformation args) { if (args == null) { throw new ArgumentNullException("args"); } args.CurrentProgress = 50; Boolean successSignal = true; // TODO: Implement copying your content to args.Location // If the copy fails, set successSignal to false. return successSignal; }
Implemente o OnBackupComplete método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnBackupComplete. No mínimo, sua implementação deve definir CurrentProgess 100 por cento e retornar true conforme o seguinte exemplo. Isso é geralmente todos que é exigido. For information about other work your implementation may need to perform, see the reference topic for OnBackupComplete.
public Boolean OnBackupComplete(Object sender, SPBackupInformation args) { if (args == null) { throw new ArgumentNullException("args"); } args.CurrentProgress = 100; return true; }
Implemente o OnPreRestore método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnPreRestore(System.Object,Microsoft.SharePoint.Administration.Backup.SPRestoreInformation). In most situations, a restoration operation requires no preparation and your implementation of OnPreRestore should just return true. For information about other work your implementation may need to perform, see the reference topic for OnPreRestore.
Implemente o OnRestore método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnRestore(System.Object,Microsoft.SharePoint.Administration.Backup.SPRestoreInformation).
Se seu de conteúdo classe pode ser migrado, seu codificar deve verificar para ver o que o método restaurar e chamar Rename se o método é New.
If your content class has no content outside of any IBackupRestore child objects it may have, your implementation should simply set the CurrentProgess to a value that approximately represents the percentage of the total restore operation time that is consumed by the OnRestore and the OnPreRestore methods. Em seguida, ele deve retornar true como visto no seguinte exemplo. Fazer Não call the OnRestore method of any IBackupRestore child objects.
public Boolean OnRestore(Object sender, SPRestoreInformation args) { if (args == null) { throw new ArgumentNullException("args"); } if (args.RestoreMethod == SPRestoreMethodType.New) { args.Rename(); } args.CurrentProgress = 50; return true; }
- Se sua classe does de conteúdo outside of quaisquer objetos filho IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore que ela pode ter, sua implementação deve copiar este de conteúdo para o destino de restauração. Return false, se por alguma razão o copiar de de conteúdo falhar.
O seguinte exemplo mostra a estrutura geral de uma implementação essenciais de OnRestore:
public Boolean OnRestore(Object sender, SPRestoreInformation args) { if (args == null) { throw new ArgumentNullException("args"); } if (args.RestoreMethod == SPRestoreMethodType.New) { args.Rename(); } args.CurrentProgress = 50; Boolean successSignal = true; // TODO: Implement copying your content to the destination. // If the copy fails, set successSignal to false. return successSignal; }
Implemente o OnPostRestore método M:Microsoft.SharePoint.Administration.Backup.IBackupRestore.OnPostRestore(System.Object,Microsoft.SharePoint.Administration.Backup.SPRestoreInformation). No mínimo, sua implementação deve definir CurrentProgess 100 por cento e retornar true conforme o seguinte exemplo. Isso é geralmente todos que é exigido. For information about other work your implementation may need to perform, see the reference topic for OnPostRestore.
public Boolean OnPostRestore(Object sender, SPRestoreInformation args) { if (args == null) { throw new ArgumentNullException("args"); } args.CurrentProgress = 100; return true; }
Adicionar outros membros para A classe conforme necessário
Adicionar campos, propriedades e métodos auxiliar quando necessário para completo sua classe. Como você trabalho, manter esses pontos em mente:
Usar os campos e propriedades para armazenar de conteúdo filho objetos.
Se sua classe deriva de SPPersistedObject, a declaração de campos que você desejar para persistir na banco de dados a configuração deve ser precedido com o atributo
[Persisted]
[persistente]. No entanto, é possível apenas a seguinte marca tipos de campos dessa forma: tipos primitivos como seqüências de caracteres, números inteiros e GUIDs; Outros objetos SPPersistedObjectSPAutoserializingObject T:Microsoft.SharePoint.Administration.SPAutoserializingObject; ou ou coleções de qualquer uma das opções acima. De exemplo, a classe não pode ter um campo FileInfo T:System.IO.FileInfo marcado com o atributo[Persisted]
[persistente]. Se os dados deseja persistir não é de um persistente classe, use um persistente substituir. A implementação exemplo acima do DiskSizeRequired P:Microsoft.SharePoint.Administration.Backup.IBackupRestore.DiskSizeRequired propriedade Envisions uma classe que persiste uma coleção de nomes arquivo e usa-los para criar uma coleção temporária de FileInfo T:System.IO.FileInfo objetos em tempo de execução.Se sua classe pode possuir múltiplo filhos do mesmo tipo, criar uma propriedade ou campo de um tipo coleção ou outro tipo enumerável para armazenar uma coleção de todos os filhos de um determinado tipo. This is particularly important if the child type itself implements IBackupRestore, because your implementation of the AddBackupObjects method should iterate through such children and call the AddBackupObjects method of each child. Consulte a etapa procedimento para implementar o AddBackupObjects método acima, para obter mais informações.
Adicionar construtores à sua classe para inicializar seus campos e propriedades quando necessário. Se a classe deriva de SPPersistedObject, deve haver at least um construtor que nomes de objeto e a atribui a um pai. Normalmente, esse um construtor leva menos esses dois argumentos:
Um String argumento que será o nome do de conteúdo objeto.
Um SPPersistedObject T:Microsoft.SharePoint.Administration.SPPersistedObject argumento que representa o pai do de conteúdo objeto.
Esse construtor deve chamar o construtor de base que leva os mesmos dois argumentos. A seguir está um exemplo:
public MyContentComponent(String componentName, SPPersistedObject parent, SomeTypesomeOtherArgument, ... ) : base(componentName, parent) { somePrivateField = someOtherArgument; ... }
Você deve transmitir Microsoft.SharePoint.Administration.SPFarm.Local como o pai quando o de conteúdo objeto é o parte superior a maioria dos objeto em uma árvore de personalizado objetos IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore. Se seu personalizado é tipo componente Sempre o parte superior a maioria dos objeto e, em seguida, deixe o argumento SPPersistedObject T:Microsoft.SharePoint.Administration.SPPersistedObject e codificar rígido uma referência ao Microsoft.SharePoint.Administration.SPFarm.Local na chamar para o construtor de base. A seguir está um exemplo:
public MyContentComponent(String componentName, SomeTypesomeOtherArgument, ... ) : base(componentName, SPFarm.Local) { somePrivateField = someOtherArgument; ... }
Se objetos de sua classe sempre possuem o mesmo nome, você poderá deixar o argumento String T:System.String e codificar de disco rígido na chamar para o construtor de base Nome. (Se todos os objetos de um tipo determinado tiverem o mesmo nome, nunca haverá more than um filho desse tipo para um determinado pai e; Portanto, não more than um objeto desse tipo no farm inteiro se o objeto é um filho do farm.)
Compile o projeto classe.
Aviso
Você deve fornecer o assembly um nome forte e pôr o assembly na General Assembly Cache (GAC).
Para criar um objeto de sua classe e torná-lo um filho do farm
Inicie um novo console projeto de aplicativo Visual Studio.
Adicionar uma referência ao DLL do seu personalizado classe componente para o projeto.
Adicione um using Microsoft.SharePoint.Administration
Microsoft.SharePoint.Administration
declaração.Adicionar um using declaração para o espaço para nome que você usou em sua personalizado componente classe (ou simplesmente usar o mesmo espaço para nome no seu aplicativo de console).
Adicionar o Main principal método de seu projeto um chamar para o construtor de seu personalizado classe componente. Se você tiver criado uma hierarquia de personalizado tipos, chamar o construtor do parte superior a maioria das classe.
Se necessário, preceda a chamar para o construtor do componente COM codificar que cria os parâmetros para o construtor.
Depois de chamar para o construtor de seu componente, seu codificar deve chamar Update método M:Microsoft.SharePoint.Administration.SPPersistedObject.Update do objeto de componente. A seguinte é um exemplo do que você deve terão para utilizar o método principal:
MyContentComponent myContentObject = new MyContentComponent("component name", SPFarm.Local); myContentObject.Update();
A compilação e executar o aplicativo.
Na navegar aplicativo Central Administration para operações | Execute um backup .O objeto deve aparecer como filho do farm sobre o executar uma página de backup.
Observação
Há um aplicativo de console exemplo para criar e excluir personalizado de conteúdo objetos na Exemplo seção abaixo.
Conselhos de desenvolvimento
O seguinte dicas podem ser útil conforme você desenvolve sua personalizado de conteúdo classes principalmente porque você provavelmente irá ser criando objetos e adicioná-los no farm múltiplo horas como trabalho você.
Aponta para manter em mental
Se você precisar excluir o objeto de banco de dados de configuração, use Delete.
Uma exceção é apresentada se você chamar obj. Update (M:Microsoft.SharePoint.Administration.SPPersistedObject.UPDATE) e já houver um objeto da mesma classe como obj com o mesmo valor da propriedade Name P:Microsoft.SharePoint.Administration.SPPersistedObject.Name e o mesmo pai no banco de dados de configuração. Há uma versão sobrecarregado de Update que pode ser preferível.
Há um aplicativo de console exemplo na segunda Exemplo seção abaixo que pode ser usado para adicionar ou excluir seu personalizado objetos de banco de dados de configuração.
Execute
iisreset
na linha de comando após cada recompilar do seu IBackupRestore T:Microsoft.SharePoint.Administration.Backup.IBackupRestore classe. Talvez você precise reiniciar o servidor as well.Os vários IBackupRestore.On* Métodos levam tanto um parâmetro SPBackupInformation T:Microsoft.SharePoint.Administration.Backup.SPBackupInformation ou um parâmetro SPRestoreInformation T:Microsoft.SharePoint.Administration.Backup.SPRestoreInformation. Você pode usar seus membros para depuração fins. Particularmente útil é o método Log M:Microsoft.SharePoint.Administration.Backup.SPBackupRestoreInformation.Log.
Exemplo
O seguinte codificar implementa um personalizado de conteúdo componente que representa um arquivo Web.config único Web.config
em um servidor front-end. Substitua o parte TestSite o caminho do arquivo na implementação de construtor um nome do diretório de seu servidor de teste. O compilado assembly deve ser de alta segurança-nomeado e instalado na GAC.
No seguinte exemplo de implementação classe, há a codificar para um aplicativo simples console que irá registrar o componente como um filho do farm ou excluí-la do farm.
using System;
using System.IO;
using System.Collections.Generic;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;
namespace MyCompany.SharePoint.Administration
{
public class CriticalFiles : SPPersistedObject, IBackupRestore
{
public CriticalFiles() { }
public CriticalFiles(String componentName, SPPersistedObject parent)
: base(componentName, parent)
{
String pathOfFile = @"C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\TestSite\Web.config";
FrontEndFilePaths.Add(pathOfFile);
}
[Persisted]
private const Int32 NUMBER_OF_FILES_TO_BACK_UP = 1;
[Persisted]
private List<String> FrontEndFilePaths = new List<String>(NUMBER_OF_FILES_TO_BACK_UP);
public Boolean CanSelectForBackup
{
get { return true; }
set { }
}
public Boolean CanSelectForRestore
{
get { return true; }
set { }
}
public Boolean CanRenameOnRestore
{
get { return false; }
}
public UInt64 DiskSizeRequired
{
get
{
UInt64 total = 0;
List<FileInfo> FrontEndFiles = new List<FileInfo>(NUMBER_OF_FILES_TO_BACK_UP);
foreach (String path in FrontEndFilePaths)
{
FileInfo file = new FileInfo(path);
FrontEndFiles.Add(file);
}
foreach (FileInfo file in FrontEndFiles)
{
total = total + (UInt64)file.Length;
}
return total;
}
}
public void AddBackupObjects(SPBackupRestoreObject parent)
{
if (parent == null)
{
throw new ArgumentNullException("parent");
}
SPBackupRestoreObject self = parent.AddChild(this);
self.Information.SetParameter(SPBackupRestoreObject.SPTypeName, this.GetType());
self.Information.SetParameter(SPBackupRestoreObject.SPDescription, "The critical files on all front end servers.");
}
public Boolean OnAbort(Object sender, SPBackupRestoreInformation args)
{
return true;
}
public Boolean OnPrepareBackup(Object sender, SPBackupInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
args.SetParameter(SPBackupRestoreObject.SPName, this.Name);
return true;
}
public Boolean OnBackup(Object sender, SPBackupInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
Boolean successSignal = true;
foreach (String path in FrontEndFilePaths)
{
FileInfo file = new FileInfo(path);
try
{
String mappedFileName = args.GenerateFileMapping(file.Name);
file.CopyTo(args.Location + @"\" + mappedFileName, true);
args.Log(SPBackupRestoreLogSeverity.Verbose, "Backed up " + file.Name + " in (" + mappedFileName + ")");
}
catch (Exception e)
{
args.Log(SPBackupRestoreLogSeverity.Verbose, file.Name + " not backed up: " + e.Message);
successSignal = false;
}
}
args.CurrentProgress = 50;
return successSignal;
}
public Boolean OnBackupComplete(Object sender, SPBackupInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
args.CurrentProgress = 100;
return true;
}
public Boolean OnPreRestore(Object sender, SPRestoreInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
return true;
}
public Boolean OnRestore(Object sender, SPRestoreInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
// If the CriticalFiles object was deleted from the farm after it was
// backed up, restore it to the configuration database.
CriticalFiles cf = SPFarm.Local.GetChild<CriticalFiles>(this.Name);
if (cf == null)
{
this.Update();
args.Log(SPBackupRestoreLogSeverity.Verbose, this.Name + " added back to configuration database.");
}
Boolean successSignal = true;
// TODO: The following loop restores files to the local server. If there are
// multiple front end servers, your code must iterate through all of
// SPFarm.Local.Servers and restore the same files to every server whose
// Role property is SPServerRole.WebFrontEnd
foreach (String path in FrontEndFilePaths)
{
FileInfo backupCopy = new FileInfo(path);
String mappedFileName = args.ReverseFileMapping(backupCopy.Name);
FileInfo file = new FileInfo(args.Location + @"\" + mappedFileName);
try
{
file.CopyTo(path, true);
args.Log(SPBackupRestoreLogSeverity.Verbose, "Restored " + backupCopy.Name);
}
catch (Exception e)
{
args.Log(SPBackupRestoreLogSeverity.Verbose, file.Name + " not restored: " + e.Message);
successSignal = false;
}
}
args.CurrentProgress = 50;
return successSignal;
}
public Boolean OnPostRestore(Object sender, SPRestoreInformation args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
args.CurrentProgress = 100;
return true;
}
}
}
A seguinte é um aplicativo console que irá adicionar ou excluir seu de conteúdo objeto de banco de dados de configuração.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Backup;
namespace MyCompany.SharePoint.Administration
{
class Program
{
static void Main(string[] args)
{
CriticalFiles cf = SPFarm.Local.GetChild<CriticalFiles>("Critical Front End Files");
if (cf == null)
{
Console.WriteLine("There is no CriticalFiles object in the configuration database.");
Console.Write("Enter 'A' to add it. Press Return to do nothing:");
String response = Console.ReadLine();
if (response == "A")
{
CriticalFiles myCriticalFiles = new CriticalFiles("Critical Front End Files", SPFarm.Local);
myCriticalFiles.Update();
}
}
else
{
Console.WriteLine("There is a CriticalFiles object in the configuration database.");
Console.Write("Enter 'D' to delete it. Press Return to do nothing:");
String response = Console.ReadLine();
if (response == "D")
{
cf.Delete();
}
}
}// end Main
}// end Program
}
Consulte também
Tarefas
Como: de forma programática fazer backup de conteúdo
Como: de forma programática restaurar conteúdo
Como: de forma programática fazer backup e restauração de uma coleção de site único
Referência
Microsoft.SharePoint.Administration.Backup
Backup
Restore
Conceitos
Programação com o modelo de objeto de backup/restauração de serviços SharePoint Windows