Skocz do zawartości

Wysyłka emailem dokumentu FS (sfera)

Polecane posty

Witam,

Tworzymy dokumenty FS w Nexo używając Sfery, chcielibyśmy po utworzeniu dokumentu i zapisaniu go (.Zapisz()) - od razu wysłać fakturę mailem. Czy jest jakaś metoda Sfery umożliwiająca wysłanie dokumentu?

Przeszukaliśmy dokumentację po słowie Email i jedyna metoda na którą trafiliśmy to IWysylkaJPK.WyslijZDanymiAutoryzujacymi - czy jest jakaś metoda na wysyłkę faktury - można to zrobić po prostu klikając dokument ale chcemy aby wysłał się sam zaraz po utworzeniu...

będziemy wdzięczni za odpowiedź

pozdrawiam!

Link to postu

Dzięki za odpowiedź, możemy wysyłać samodzielnie bo tak robimy u innych klientów z SubiektemGT, ale myśleliśmy, że skoro Nexo wysyła to czemu nie wykorzystać tego co już jest, nie wiemy tylko czy jest jakaś metoda czy nie - zakładam, że będą wiedzieć to tylko fachowcy z InsERT? ;) 

Link to postu

Jeśli chcecie skorzystać z wbudowanego klienta poczty, to Sfera coś musi mieć, bo jest InsERT.Moria.KlientPoczty oraz metoda WyslijWiadomosc, ale przykładów nie ma, więc trzeba by samem rozgryźć zapewne, no chyba, że ktoś z InsERTu wrzuci ;) Aczkolwiek, zrobienie tego samem, jest banalnie proste i daje większą elastyczność, no chyba, że zależy wam na widoczności w historii Gestora.

Link to postu

Dzięki za 'naprowadzenie' w dokumentacji jest opisana klasa WiadomoscPocztowa i metoda WyslijWiadomosc, spróbuję się jakoś domyślić jak to działa, chociaż krótki przykład od producenta byłby mile widziany...

w dokumentacji mamy tradycyjnie 'na bogato' opis metody:

IKopiaWiadomosciPocztowej.WyslijWiadomosc Method  

Wysyła daną wiadomość. 
 

...bez tej pomocy nie domyśliłbym się zapewne co robi metoda WyslijWiadomosc ;)

 

Link to postu

Witam.

Faktycznie, w tym miejscu dokumentacja powinna być dokładniejsza :) Poprawimy to.

Co do implementacji, to faktycznie, metoda WyslijWiadomosc jest tutaj kluczowa. Jednakże, wysyłka wiadomości nastąpi dopiero podczas synchronizacji konta pocztowego z poziomu nexo. Poniżej przedstawiam uproszczony kod, który zrealizuje Pański scenariusz:
 

private void WyslijWiadomoscZPodanymDokumentem(Uchwyt uchwyt, Dokument dokument)
{
	IKontaPocztowe kontaPocztowe = uchwyt.PodajObiektTypu<IKontaPocztowe>();
	KontoPocztowe konto = kontaPocztowe.Dane.Wszystkie().FirstOrDefault();

	IWiadomosciPocztowe wiadomosciPocztowe = uchwyt.PodajObiektTypu<IWiadomosciPocztowe>();
	using (IKopiaWiadomosciPocztowej kopiaWiadomosci = wiadomosciPocztowe.UtworzNowaWiadomosc(konto))
	{
		// Eksportowanie dokumentu jest opisane w dokumentacji: Przykłady -> Drukowanie -> Eksportowanie wydruku
		string sciezkaDoPliku = EksportujDokumentDoPliku(dokument);

		// W tym miejscu należy pobrać zawartość wyeksportowanego pliku.
		byte[] zawartoscPliku = PobierzZawartoscPlikuZDokumentem(sciezkaDoPliku);

		kopiaWiadomosci.Wiadomosc.DodajZalacznik(zawartoscPliku, "nazwaPliku");

		var adresat = new AdresatWiadomosciPocztowej
		{
			Adres = "test@test.com",
			Nazwa = "test"
		};

		kopiaWiadomosci.Dane.Wiadomosc.Adresaci.Add(adresat);
		kopiaWiadomosci.Dane.Wiadomosc.Temat = "Testowa wiadomość";
		kopiaWiadomosci.Dane.Wiadomosc.Tresc.HTML = true;

		string trescWiadomosci = "przykładowa treść";
		kopiaWiadomosci.Dane.Wiadomosc.Tresc.Tekst = SpakujTrescWiadomosci(trescWiadomosci);

		// Co ważne, ta metoda nie wyśle wiadomości automatycznie. Nastąpi to dopiero podczas synchronizacji konta pocztowego z poziomu nexo.
		kopiaWiadomosci.WyslijWiadomosc();
		kopiaWiadomosci.Zapisz();
	}
}

private byte[] SpakujTrescWiadomosci(string trescWiadomosci)
{
	using (MemoryStream strumienWyjsciowy = new MemoryStream())
	{
		using (MemoryStream strumienWejsciowy = new MemoryStream(Encoding.UTF8.GetBytes(trescWiadomosci)))
		{
			using (GZipStream strumienPakujacy = new GZipStream(strumienWyjsciowy, CompressionMode.Compress))
			{
				strumienWejsciowy.CopyTo(strumienPakujacy);
			}

			return strumienWyjsciowy.ToArray();
		}
	}
}

 

Link to postu

Witam ponownie,

Dziękuję za pomoc, kod okazał się pomocny - tworzymy Fakturę, PDF i to nam działa klient poczty jest skonfigurowany w Nexo - maile się wysyłaja kiedy robimy to ręcznie w Nexo.

Jednak kiedy tylko próbujemy uzyskać dostęp do IKontaPocztowe (lub jakiegokolwiek innego obiektu) z InsERT.Moria.KlientPoczty to otrzymujemy błędy, na przykład:

 

na linii 

IKontaPocztowe kontaPocztowe = sfera.PodajObiektTypu<IKontaPocztowe>();
 

otrzymujemy błąd:

 

Microsoft.Practices.Unity.ResolutionFailedException
  HResult=0x80131500
  Message=Resolution of the dependency failed, type = "InsERT.Moria.KlientPoczty.IKontaPocztowe", name = "(none)".
Exception occurred while: Calling constructor InsERT.Moria.KlientPoczty.KontaPocztowe(InsERT.Moria.IBusinessProductAffinityManager businessProductAffinityManager).
Exception is: TargetInvocationException - Obiekt docelowy wywołania zgłosił wyjątek.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving InsERT.Moria.KlientPoczty.KontaPocztowe,(none) (mapped from InsERT.Moria.KlientPoczty.IKontaPocztowe, (none))
  Calling constructor InsERT.Moria.KlientPoczty.KontaPocztowe(InsERT.Moria.IBusinessProductAffinityManager businessProductAffinityManager)

  Source=Microsoft.Practices.Unity
  StackTrace:
   at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
   at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides)
   at InsERT.Mox.Runtime.Unity.UnityAdapter.GetObject[T]()
   at InsERT.Moria.Sfera.Uchwyt.PodajObiektTypu[Typ]()
   at TofisConnectorNex0.NexoSfera.SendDocumentByEmail(Uchwyt sfera, String documentNumber, String emailTo, String emailToName) in C:\Artoe\TOFISConnector\InsertNexo\NexoSfera.cs:line 1347
   at TofisConnectorNex0.AccountingSystemNexo.CreateSalesDocument(OrderDetails order, EnumOrderType SalesDocumentType) in C:\Artoe\TOFISConnector\InsertNexo\AccountingSystemNexo.cs:line 79
   at TOFISConnector.Main.buttonSubiekt_Click(Object sender, EventArgs e) in C:\Artoe\TOFISConnector\SubiektReplikator\Main.cs:line 4036
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at TOFISConnector.Program.Main() in C:\.....\Program.cs:line 697

Inner Exception 1:
TargetInvocationException: Obiekt docelowy wywołania zgłosił wyjątek.

Inner Exception 2:
InvalidOperationException: Brak licencji na użycie Sfery
 

 

podobne błędy mamy gdy próbujemy:

            var szablony = sfera.PodajObiektTypu<InsERT.Moria.KlientPoczty.ISzablonyWiadomosciPocztowych>();

lub

            var podpisy = sfera.PodajObiektTypu<InsERT.Moria.KlientPoczty.IPodpisyWiadomosci>();
 

 

Możemy prosić o informację jak to rozwiązać? Tak jak wspominałem Sfera nam działa, tworzymy FS, udaje się zapis do PDF, itp. jednak coś chyba jest nie tak z InsERT.Moria.KlientPoczty?

Próbowaliśmy dodać do references InsERT.Moria.KlientPoczty - ale to i tak nie pomaga...

nie wiemy czemu raportowany błąd to 'Brak licencji na użycie Sfery' - uchwyt do sfery jest prawidłowy bo umożliwia nam zapis PDF chwilę wcześniej...

 

będę wdzięczny za pomoc

Edytowane przez Artoe Art of e-commerce
Link to postu

Witam,

Nasz klient w ogóle nie używa Gestora, czyli - czy dobrze rozumiem, że musimy wytłumaczyć teraz klientowi, że pomimo tego, że sam może wysyłać faktury mailem z Nexo, to nasz program tego nie może dla nich zrobić ponieważ muszą sobie dokupić Gestora PRO, którego w ogóle nie będą używać?

 

Edytowane przez Artoe Art of e-commerce
Link to postu
×
×
  • Dodaj nową pozycję...