Hej Helena!
Eller om någon annan vill gnugga geniknölarna och förklara för mej var jag tänker fel.
Som ni ser i koden nedan så gör metoden Test_OpenClose
AdkOpen - Med felkontroll
sedan gör den
AdkClose.
Se nedan test Lägg in den i en Console application och förklara varför den kastar felet: "Föreningen måste vara skapat med Visma Förening."
Förutsätter:
1 - att du har både Visma Förening & Visma Administration installerade på datorn.
2 - att du har Demobolagen kvar.
using Microsoft.Win32;
using System;
using System.IO;
using API = AdkNet4Wrapper.Api;
namespace VismaTest
{
class Program
{
static void Main(string[] args)
{
using (Visma visma = new Visma())
{
visma.Test_OpenClose("SpcsFor.exe", "Idrfor");
}
using (Visma visma = new Visma())
{
visma.Test_OpenClose("SpcsAdm.exe", "Ovnbol1000");
}
}
}
public class Visma : IDisposable
{
const string sAppPaths = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths";
private RegistryKey AppPathsKey
{
get
{
return Registry.LocalMachine.OpenSubKey(sAppPaths, false);
}
}
private RegistryKey VismaERPKey(string _application)
{
return AppPathsKey.OpenSubKey(_application, false);
}
private string CommonFilesPath(string _application)
{
return VismaERPKey(_application).GetValue("CommonFiles") as String;
}
private string DefaultCompanyPath(string _application)
{
return VismaERPKey(_application).GetValue("DefaultCompanyPath") as String;
}
private string AdkDLLPath(string _application)
{
return VismaERPKey(_application).GetValue("AdkDll") as String;
}
private API.ADKERROR CheckADKError(API.ADKERROR _error)
{
if (_error.lRc != API.ADKE_OK)
{
String errortext = new String(' ', 200);
int errtype = (int)API.ADK_ERROR_TEXT_TYPE.elRc;
API.AdkGetErrorText(ref _error, errtype, ref errortext, 200);
throw new Exception(errortext);
}
return _error;
}
public void Test_OpenClose(string _application, string _company)
{
string localAdkDLLPath = AdkDLLPath(_application);
string localCommonFilesPath = CommonFilesPath(_application);
string localCompanyPath = DefaultCompanyPath(_application) + _company;
Directory.SetCurrentDirectory(localAdkDLLPath);
CheckADKError(API.AdkOpen(ref localCommonFilesPath, ref localCompanyPath));
API.AdkClose();
}
public void Dispose()
{
// throw new NotImplementedException();
}
}
}