Poderá receber a exceção sem tratamento System.Reflection.TargetInvocationException quando você usar a classe FormsFactory para abrir um formulário no Professional Accounting, em Accounting Express ou no Small Business Accounting

O suporte para o Office 2003 terminou

A Microsoft terminou o suporte para o Office 2003 em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 906467
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Você pode receber System.Reflection.TargetInvocationException exceção não tratada, quando você usa a classe FormsFactory para abrir um formulário que tenha um usuário interface suplemento instalado. Esse problema ocorre no Microsoft Office Accounting Professional, no Microsoft Office Accounting Express e no Microsoft Office Small Business Accounting.
Causa
Esse problema ocorre porque a desserialização do Microsoft .NET Framework que está definida no assembly mscorlib tenta carregar o assembly no qual o objeto seja desserializado é definido. O .NET Framework não pode localizar os assemblies Accounting Professional, os assemblies Accounting Express ou assemblies Small Business Accounting. As classes não podem localizar os assemblies porque o aplicativo que fez a chamada foi iniciado de uma pasta diferente.
Resolução
Para resolver esse problema, você deve criar explicitamente um domínio de aplicativo. Você deve configurar esse domínio para incluir o caminho do programa de contabilidade e o caminho do aplicativo integração. Para fazer isso, execute as seguintes etapas:
  1. Instale o programa de contabilidade e o aplicativo de integração no mesmo diretório raiz. O diretório de instalação padrão do Small Business Accounting é C:\Program Files\Microsoft Small Business\Small Business Accounting. Se este diretório for o diretório onde o Small Business Accounting está instalado, use os seguintes caminhos de instalação:
    • \Arquivos de Programas\Microsoft Business\Small small Business Accounting
    • \Arquivos de Programas\Microsoft integração Business\My pequeno
    Em Accounting Express 2007 e no Contabilidade Professional 2007, use o seguinte caminho de instalação:
    • C:\Program Files\Microsoft Small Business\Small Business Accounting 2007
    Na contabilidade 2008 Express e no Contabilidade 2008 Professional, use o seguinte caminho de instalação:
    • C:\Program Files\Microsoft Small Business\Office Accounting 2008
  2. Coloque o código que abre o formulário usando a classe FormsFactory em sua própria classe. Além disso, coloque o código que chama a classe FormsFactory em sua própria classe. Para fazer isso, consulte o código na seção "Mais informações".
Mais Informações
Execute o seguinte código. Esse código constrói e, em seguida, usa a classe FormsFactory e o formulário do programa de estatísticas no domínio explicitamente é criado.

O código a seguir cria o domínio de aplicativo.
AppDomain myDomain = AppDomain.CreateDomain(	"MyDomain", 	null, 	GetSbaFullBusinessLogicAssemblyPath(""), 	"My Integration;Small Business Accounting", 	false);ObjectHandle objectHandle = myDomain.CreateInstance(	Assembly.GetExecutingAssembly().FullName,	"SBA.ExecutingCode");ExecutingCode ec = (ExecutingCode) objectHandle.Unwrap();ec.LaunchCustomerForm();
o código a seguir adiciona as pastas que estão envolvidas no domínio do aplicativo.
static string GetSbaFullBusinessLogicAssemblyPath(string assemblyName){	// If you run the Setup program, the installation path is in the registry.	const string InstallPathRegKey = 		@"SOFTWARE\Microsoft\Business Solutions eCRM\2.0";	const string MagellanInstallPathRegKey = 		@"SOFTWARE\Microsoft\Business Solutions eCRM";	const string InstallPathRegValue = "AccountingUI";            	const string DefaultPath = 		@"C:\Program Files\Microsoft Small Business\";	StringBuilder installPath = new StringBuilder();	RegistryKey regkey = 		Registry.LocalMachine.OpenSubKey(InstallPathRegKey);	if (regkey != null)	{		// A Small Business Accounting installation exists.		installPath.Append(			regkey.GetValue(InstallPathRegValue).ToString());		// This line removes the file name and the Small Business Accounting folder.		if (installPath.ToString().EndsWith("sbaui.dll"))		{			int lastSlash = installPath.ToString().LastIndexOf(@"\");			int charToEnd = installPath.Length - (lastSlash);			// This line tells where the last slash is.			installPath.Remove(lastSlash, charToEnd);			// This line finds the newest last slash.			lastSlash = installPath.ToString().LastIndexOf(@"\");			// This line determines how many characters the Remove method must remove.			charToEnd = installPath.Length - (lastSlash);			// This line removes the directory name.			installPath.Remove(lastSlash, charToEnd);		}	}	else 	{		// This line looks for a Magellan installation. 		regkey =			Registry.LocalMachine.OpenSubKey(MagellanInstallPathRegKey);		if (regkey != null)		{			Object temp = regkey.GetValue(InstallPathRegValue);			if (temp != null)			{				installPath.Append(temp.ToString() );			}		}	}	if (regkey != null)	{		regkey.Close();	}	if (installPath.Length == 0)	{		// This line appends the default value of the installation path.		installPath.Append(DefaultPath);	}	installPath.Append(assemblyName);	return installPath.ToString();}
o código seguinte cria uma instância da classe ExecutingCode que abre o formulário usando o class. FormsFactory
[Serializable]public class ExecutingCode : MarshalByRefObject{	public void LaunchCustomerForm()	{		ObjectHandle sbiHandle = 			AppDomain.CurrentDomain.CreateInstance(				"SBAAPI",				"Microsoft.BusinessSolutions.SmallBusinessAccounting.SmallBusinessInstance");		ISmallBusinessInstance iSbi = 			(ISmallBusinessInstance) sbiHandle.Unwrap();		// This line determines that you can log on by using the database name and the server name.		iSbi.LogOn(companyName, serverName);		DataRow dr = iSbi.CustomerAccounts.DataView.Table.Rows[6];		ICustomerAccount cust = 			(ICustomerAccount)iSbi.CustomerAccounts.GetByDataRow(dr);		ObjectHandle ffHandle = AppDomain.CurrentDomain.CreateInstance(			"SBAUI", 			"Microsoft.BusinessSolutions.SmallBusinessAccounting.UI.FormsFactory");		IFormsFactory iFF = (IFormsFactory) ffHandle.Unwrap();		iFF.Initialize(iSbi);		Form form = iFF.CreateForm(cust);		form.ShowDialog();		form.Dispose();		iFF.UnInitialize(false);	}}
Manutenção conteúda 44549, SBA, SDK

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 906467 - Última Revisão: 12/09/2015 03:09:01 - Revisão: 2.0

Microsoft Office Accounting Express 2008, Microsoft Office Accounting Professional 2008, Microsoft Office Accounting Express 2007, Microsoft Office Accounting Professional 2007, Microsoft Office Small Business Accounting 2006, Microsoft Office Small Business Management Edition 2006, Microsoft Office Small Business Accounting 2006 Software Development Kit 1.2

  • kbnosurvey kbarchive kbmt kbtshoot kbmbsmigrate kbprb KB906467 KbMtpt
Comentários