Trimiterea de alerte despre sarcinile din Sharepoint, note ale unui administrator gratuit

Sarcinile din Sharepoint sunt afișate într-o "clasă" separată a elementelor. Ei nu au doar domenii preconfigurate și "servesc" procesele de lucru. Ei au, de asemenea, șabloane de mesaje de e-mail pre-configurate care, în afară de notificarea actuală, pot să editeze sarcina direct de la clientul de poștă electronică (desigur, dacă aceasta din urmă acceptă această caracteristică).







Această particularitate este foarte convenabilă, pentru că utilizatorul nu are nevoie să deschidă browserul pentru a efectua orice operațiuni de rutină. În acest caz, sunt încărcate atât formele standard de editare a sarcinilor, cât și cele create în InfoPath (inclusiv codul încorporat).

Acest lucru este bine până când dorim să personalizăm textul scrisorii. Nu este ușor să faceți acest lucru încet, mai ales dacă aveți nevoie de dependență de text de pe site-ul curent etc. În plus, în mod implicit, sunt trimise alerte pentru a crea, a modifica și a închide o sarcină. Adesea, sunt necesare doar anumite evenimente specifice. Prin urmare, multe persoane dezactivează alertele automate și își creează propriul sistem de alerte. Există câteva implementări (bazate pe fluxul de lucru sau procesarea evenimentelor din elementul listei), dar toate au un dezavantaj - funcția de editare a sarcinilor clientului de mail este pierdută.

pentru că utilizatorii noștri sunt obișnuiți să editeze sarcini din Outlook, trebuia să înțelegem cum funcționează toate.

Sa dovedit că totul este destul de simplu - editarea sarcinilor este construită pe protocolul [MS-OSALER]: Alerts Interop Protocol Specification.

2 /// Funcția trimite mesajele de sarcină în conformitate cu protocolul MS-OSALER

4 /// curent nod

5 /// textul scrisorii

6 /// pe cine

7 /// Element liste de sarcini

8 /// [true] dacă este reușit sau [false, "Error_Message"] în caz de eroare

9 obiect public [] SendMail (web SPWeb, șir HtmlBody, string To, SPListItem TaskItem)

13 // Această secțiune este generată în funcție de ajutorul din System.Net.MailAddress

15 // Obțineți setările site-ului. Dintre acestea, trebuie să configurați poșta de ieșire

16 SPWebApplication webApp = web.Site.WebApplication;

17 // Creați un mesaj de e-mail

Mail messenger = MailMessage nou ();

20 mess.From = new MailAddress (webApp.OutboundMailSenderAddress, web.Title);

22 mess.ReplyTo = adresa de e-mail nouă (webApp.OutboundMailReplyToAddress);







23 // corpul este în format UTF8

24 mess.BodyEncoding = Codare .UTF8;

25 // și în format HTML

26 mess.IsBodyHtml = adevărat;

27 / / Scrie litera corpului, poate fi absolut orice. Deși gol

28 mess.Body = HtmlBody;

29 // căruia îi trimitem scrisoarea

31 // Codificarea subiectului scrisorii

32 mess.SubjectEncoding = Codare .UTF8;

33 / Și tema însăși poate fi orice.

34 mess.Subject = "Sarcini -" + TaskItem.Title;

36 // În continuare, sunt necesari parametrii care servesc la formarea anteturilor în conformitate cu MS-OSALER

37 // Attachment este o implementare MIME, deci folosim un atașament gol pentru a forma anteturile MIME

38 Atașament at = Atașament nou (noul System.IO, MemoryStream (0), "");

39 at.ContentType = nou Sistem.Net.Mime.ContentType ("text / html; charset = utf-8");

40 at.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;

41 // Obțineți domeniul pentru a forma MessageId. Puteți modifica această valoare.

42 domeniu string = webApp.OutboundMailSenderAddress.Remove (0, webApp.OutboundMailSenderAddress.LastIndexOf ( '@'));

// Creați un MessageID. Se compune din partea obligatorie și ID-ul aleatoriu al mesajului

44 // (ultima face serverul de mail, dacă MessageID-ul nu este specificat explicit în anteturi)

45 mess.Headers.Add ("Mesaj-Id." "<3BD50098E401463AA228377848493927" + Guid .NewGuid().ToString( "D" )+domain+ ">„);

47 // Acest parametru poate fi, de asemenea, schimbat, în protocol este specificat ca recomandat (SHOULD), dar unde este utilizat nu am gasit

48 // a făcut, de asemenea, ca și în Sharepoint implicit - descrierea sarcinii

49 mess.Headers.Add ("X-Sharing-Title") Acest .ToBase64 (TaskItem ["Body"] .ToString ()));

50 // Dar aici sunt parametrii care nu pot fi schimbati.

51 mess.Headers.Add ("X-AlertTitle" .Acest .ToBase64 ("System"));

52 mess.Headers.Add ( "X-AlertId" "# 123;. 93A2F525-F664-4B02-9AD6-07851B1381C4 # 125; # 123; 791979F1-2AB1-427D-9722-41B08012172B # 125;");

53 Mess.Headers.Add ("Content-Class". "MSWorkflowTask");

55 Mess.Headers.Add ("X-AlertWebUrl" .Acest .ToBase64 (web.Url));

56 Mess.Headers.Add ("X-AlertServerType". "STS");

58 mess.Headers.Add ( "X-AlertWebSoap" acest .ToBase64 (web.Url + "/_vti_bin/alerts.asmx").);

. 59 mess.Headers.Add ( "X-Sharing-config-Url" "stssync: // sts / ver = 1.1type = taskscmd = add-folderbase-url =" + Uri.EscapeDataString (web.Url) + "? lista-url = "+ Uri.EscapeDataString (" liste / Sarcini ") +" guid = "+ Uri.EscapeDataString (TaskItem.ParentList.ID.ToString (" D „)));

60 mess.Headers.Add ("X-Sharing-Remote-Uid"; TaskItem.ParentList.ID.ToString ("D"));

61 mess.Headers.Add ("X-Sharing-WssBaseUrl". Acest .ToBase64 (web.Url));

62 mess.Headers.Add ("X-Sharing-ItemId") Acest lucru ToBase64 (TaskItem.ID.ToString ()));

64 // Antetul este format, puteți trimite.

66 client SmtpClient = nou SmtpClient (webApp.OutboundMailServiceInstance.Server.Address);

67 client.Credentials = CredentialCache.DefaultNetworkCredentials;

69 // Aceasta este o funcție de testare, deci prelucrarea este extrem de primitivă

70 returnează obiect nou [] # 123; adevărat # 125;

72 captură (Excepție er)

73 # 123; returnați un obiect nou [] # 123; false, er.Message # 125; # 125;

77 șir ToBase64 (string InputString)

// Aproape. Poate că există o implementare mai frumoasă. Dar aceasta funcționează exact.

80 // de asemenea, nu ar fi rău să facem tratarea excepțiilor

81 retur "=? Utf-8? B?" + Sistem. Convertiți .ToBase64String (UTF8Encoding .UTF8.GetBytes (InputString)) + "? =";







Articole similare

Trimiteți-le prietenilor: