Integracja kodu z systemem e-nadawca Poczty Polskiej

Integracja kodu z systemem e-nadawca Poczty Polskiej
maniutek20
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:138
0

Macie może jakieś doświadczenia w integracji własnego kodu z systemem e-nadawca Poczty Polskiej? Bo właśnie czytam dokumentację i wrażenia mam raczej negatywne. Może są jakieś lżejsze metody ugryzienia tego tematu?


quidquid Latine dictum sit, altum videtur
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

lżejsze metody niż co? konkretnie z czym masz problem?


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
maniutek20
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:138
0

Tak ściślej to szukam jakiejś implementacji uproszczonej, coś jak jest np przy płatnościach on-line: można zrobić implementację pełną (dużo czasu), a można uproszczoną(mało czasu, mniejszy stopień skomplikowania). W metodach podanych przez pocztę napisali, że trzeba najpierw utworzyć konto w serwisie, natomiast na jakiejś podstronie, że można zlecać wysłanie paczki bez rejestracji. I tego mniej więcej szukam: prostej metody która po przekazaniu danych zarejestruje paczkę i wypluje użytkownikowi wypełniony blankiet nadania. Nie wiem czy takie coś istnieje i czy tak się da, ale kto pyta nie błądzi:)


quidquid Latine dictum sit, altum videtur
maniutek20
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:138
0

Muszę odświeżyć temat. Doszedłem do etapu poprawnego logowania i tworzenia przesyłki [ trochę nomenklatury: paczka-paczka pocztowa sensu stricte, przesyłka -lista paczek przekazywana do systemu e-nadawca ], ale nie mogę przeskoczyć dodawania paczek do przesyłki. Stosując metodę addshipment dostaję błąd: nie znaleziono żądanego nagłówka.
Trochę kodu dla rozjaśnienia:

Kopiuj
procedure TForm6.Button2Click(Sender: TObject);
  var
   E: elektronicznynadawca;
   P:paczkaPocztowaType;
   A:adrestype;
   tmp:addshipment;
    inp: hello;
    karta:getkarty;
    kartaakt:setAktywnaKarta;
    bufor1:bufortype;
    nrguid:getguid;
  begin
    inp := hello.Create;
    try
      E:=(httprio1 as elektronicznynadawca);
       inp.in_:='test';
       karta:=getkarty.Create;
         kartaakt:=setAktywnaKarta.Create;
         button1.Caption:=inttostr( kartaakt.idKarta);     //ok daje zero
           bufor1:=bufortype.Create;
           bufor1.active:=true;
            tmp:=addshipment.Create;
               A:=adrestype.Create;
               A.nazwa:='Jan';
               A.nazwa2:='Nowak';
               A.ulica:='Cicha';
               A.numerDomu:='1';
               a.numerLokalu:='1';
               a.miejscowosc:='Warszawa';
               a.kodPocztowy:='00002';
                 P:=paczkapocztowatype.Create;
                 P.posteRestante:=true;// Boolean;
                 P.kategoria:= kategoriaType(0);
                 P.adres:=A;

                //tmp.przesylki[0]:=p;
        E.addShipment(tmp);

        ShowMessage('OK: ' + inp.ToString + #13#10)
     except on E:exception do ShowMessage( e.Message+' not OK');
    end;

    inp.Free;

end; 

quidquid Latine dictum sit, altum videtur
flowCRANE
Bardzo dziwnie formatujesz kod - randomowe wcięcia są złe;
maniutek20
to taki prototyp prototypu:)
JJ
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:11
0

Witam

Czy udało się rozwiązać temat ? Mam podobny problem z tm.przesylka[0] := paczkapocztowa;

pozdrawiam
Jacek

edytowany 1x, ostatnio: flowCRANE
maniutek20
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:138
0

No niestety nie, więc chwilowo zarzuciłem pomysł. Ale jak jest nas dwóch to może uda się popchnąć temat do przodu. Pytałem u źródła w Poczcie Polskiej, ale mam wrażenie że sami mają blade pojęcie jak to jest zrobione. Podejrzewam, że moment w którym się zatrzymaliśmy

Kopiuj
tm.przesylka[0] := paczkapocztowa

to jest jakaś zupełna pierdoła, ale na dziś zupełnie nie wiem jak to rozwiązać


quidquid Latine dictum sit, altum videtur
edytowany 1x, ostatnio: flowCRANE
JJ
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:11
0

to nie do końca pierdoła - w/g mojej oceny - autorzy sugerując się środowiskiem VS uznali, że Delphi-arze to dinozaury i zamiast stworzyć alternatywę uznali, że wszyscy pracują na C# a tam są przekazywane zawsze wskaźniki. Dlatego oni sami nie znają rozwiązania problemu w Delphi.
Gdyby nie konieczność rozwiązania problemu w Delphi dopisałbym bibliotekę w C# i zamknąłbym temat, a tak szukam rozwiązania.
Moim zdaniem - Poczta Polska ma prosty temat do zrobienia - stworzyć metodę przekazującą po wskaźniku (TPointer) lub (TObject), Tyle, że pewnie im się zwyczajnie nie chce ruszyć tematu.

Pozdrawiam

edytowany 3x, ostatnio: jacek_j23
maniutek20
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:138
0

Jeśli problem leży po stronie Poczty to nie wiem czy nie lepiej dopisać bibliotekę w innym języku. Podejrzewam, że dużo więcej czasu zajmie poszukiwanie rozwiązania dla Delphi (a i tak nie wiadomo czy nie skończy się na półśrodkach)


quidquid Latine dictum sit, altum videtur
JJ
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:11
0

o tym to ja już wiem od wczoraj... ale jeszcze szukam...

0

Taka konstrukcja działa bez problemu na Delphi XE3

Kopiuj
  tmp := addShipment.Create;

    arr := Array_Of_przesylkaType.Create();
    SetLength(arr,1);

   paczka:=paczkapocztowatype.Create;

    arr[0] := paczka;

    tmp.przesylki := arr; 
JJ
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:11
0

Delphi nie przekazuje tak jak w C# danych jako wskaźników. Podejrzewam, że nie sprawdziłeś swojego rozwiązania w realu...

0

Powyższe rozwiązanie obecnie funkcjonuje od prawie roku od kiedy zaimplementowaliśmy E-Nadawcę do naszego systemu windykacyjnego.

Obawiam się, że Ty nie sprawdziłeś powyższego przykładu.

0

Witam serdecznie

Mam pytanie - jak zrobić poprawnie autoryzację,bo wywala mi błąd 401 :/

0

Poszukaj mojego wątku na ten temat

0
Wybitny Krawiec napisał(a):

Poszukaj mojego wątku na ten temat

Jak byś się podpisał było by łatwiej :)

NK
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 8 lat
  • Postów:19
0

Szukaj norbert_kacz :)

0

Próbuje na platformie testowej e-nadawcy

Ustawienia HTTPRIO
WSDLLOCATION https://en-testwebapi.poczta-polska.pl/websrv/en.wsdl
Service ElektronicznyNadawca
Port ENSoap

podpięty do tego jest THTTPReqResp

z wypełnionymi username user i password pass i..lipa:/

PS. Delphi XE5

0

Metoda używana w webservice sledzenia czyli

Kopiuj
var
   Hdr: Security;
   Headers: ISOAPHeaders;
begin


  Hdr := Security.Create;
 ]
     Hdr.MustUnderstand := False;
     Hdr.UsernameToken := UsernameToken.Create;
     Hdr.UsernameToken.Username := 'sledzeniepp';
     Hdr.UsernameToken.Password := Password.Create;
     Hdr.UsernameToken.Password.Type_ :=
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
     Hdr.UsernameToken.Password.Text := 'PPSA';
 ]


   htpr1.SOAPHeaders.SetOwnsSentHeaders(True);

    Headers := GetSledzenie(TRUE,'', htpr1) as ISOAPHeaders;

   Headers.Send(hdr);

po zmianie user/pass nie chce działać - ten sam błąd 401

edytowany 1x, ostatnio: flowCRANE
0

Z kolei

Kopiuj
procedure TForm1.htpr2BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  xml: IXMLDocument;
  n1, n2: IXMLNode;
begin

  SOAPRequest.Position := 0;
  xml := TXMLDocument.Create(Application);
  xml.LoadFromStream(SOAPRequest);
  n1 := xml.ChildNodes.FindNode('SOAP-ENV:Envelope');
  if n1 <> nil then
  begin
    n1 := n1.AddChild('SOAP-ENV:Header', 0);
    n1 := n1.AddChild('wsse:Security');
    n1.Attributes['SOAP-ENV:mustUnderstand'] := '1';
    n1.Attributes['xmlns:wsse'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
    n1 := n1.AddChild('wsse:UsernameToken');
    n1.Attributes['xmlns:wsu'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
    n2 := n1.AddChild('wsse:Username');
    n2.Text := 'user';
    n2 := n1.AddChild('wsse:Password');
    n2.Attributes['Type'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
    n2.Text := 'pass';
  end;
  SOAPRequest.Position := 0;
  xml.SaveToStream(SOAPRequest);

end;

daje błąd Header not understod

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Wrzucaj kod w znaczniki &lt;code=delphi&gt;&lt;/code&gt; - łatwiej będzie go analizować, jeśli będzie kolorowy ;)
0

Ok autoryzacje przeskoczyłem.

Ale jak wygenerować guid dla przesyłki itp ??

NK
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 8 lat
  • Postów:19
0

a to widziales?
https://e-nadawca.poczta-polska.pl/download/en_opis_webapi.pdf
https://e-nadawca.poczta-polska.pl/websrv/en.wsdl

I jeszcze jedno - dane w sledzeniu sa tylko przez 30 dni.

flowCRANE
Edytuj swoje posty, jeśli chcesz coś jeszcze dodać (gdy Twój post jest ostatni w wątku);
BD
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:4
0

Dokumentacje widziałem, tylko w dokumentacji piszą sobie cwaniaki na stronie 17 w C# "paczka.guid = Guid.NewGuid().ToString();" ,a nie wiem jak to na Delphi przełożyć

Ps. fragment mojego kodu masz na PW.

edytowany 2x, ostatnio: bdkacz
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1

no rzeczywiście ciężko poszukać... https://www.google.pl/search?q=delphi+generate+guid


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
BD
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:4
0
abrakadaber napisał(a):

no rzeczywiście ciężko poszukać... https://www.google.pl/search?q=delphi+generate+guid

Jest jedno "ale" w dokumentacji do enadawcy dostępnej tutaj https://e-nadawca.poczta-polska.pl/download/specyfikacja-webapi-en-v.43-7.0.1-02.02.2016.zip

czytamy

getGuid napisał(a)

Metoda pozwala pobrać lista guidów (1-100), guidy są wykorzystywane podczas transmisji danych
o przesyłkach. Każda przesyłka powinna posiadać unikalny guid. Zalecamy wykorzystywanie tej metody do nadawania guidów przesyłkom w metodzie addShipement.

Sęk w tym,że to wcale nie zwraca po prostu stringa :)

edytowany 2x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

skoro w dokumentacji jest Guid.NewGuid().ToString(), które robi to https://msdn.microsoft.com/pl-pl/library/system.guid.newguid(v=vs.110).aspx to w delphi aby to (dostać GUID) zrobić trzeba po prostu odpalić to co masz w linku z googla.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
BD
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:4
0

GUID ogarnięty tym http://abakalidis.blogspot.com/2010/12/simple-guid-generator-function-for.html ,ale...wywala mi,że Produkt nie znajduje się na umowie zawartej z Pocztą.." wrr,a to zwykły polecony,który na bank jest,bo przez interfejs www e-nadawcy przechodzi...co za szajs :/

Dodaje go metodą z 1 strony tego tematu czyli

Kopiuj
 tmp := addShipment.Create;
 
    arr := Array_Of_przesylkaType.Create();
    SetLength(arr,1);
 
   paczka:=paczkapocztowatype.Create;
 
    arr[0] := paczka;
 
    tmp.przesylki := arr; 

w var mam zadeklarowane

Kopiuj
resp : addShipmentResponse;

i niżej w kodzie po w/w

Kopiuj
 resp :=  ten.addShipment(tmp);

i w resp[0] mam błąd nr 8304 "'Produkt ("") nie znajduje się na umowie zawartej z Poczta Polską S.A.'"

edytowany 2x, ostatnio: bdkacz
BD
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:4
0

Ja już nie wiem, czy ten system jest chory,czy ze mną coś nie tak ...

Kod https://www.dropbox.com/s/xpk56n5f05zu1mr/poczta.zip?dl=0, zdarzenie na btn2.

Niby pięknie,ładnie a jednak ostatnia linijka numernadania='' i błąd jw :/

DO
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad rok
  • Postów:1
0

Przepraszam, ze odkopuję temat, ale mam bardzo podobny problem co bdkacz. Jestem bardzo, bardzo początkującym programistą Delphi. Utrzymuję w ruchu, poprawiam i dodaje nowe funkcjonalności w starym i dużym systemie zarządzania firmą. Dostałem zlecenie wykonania integracji PP i męczę się z tym już dobry tydzień a zawiesiłem na etapie dodawania przesyłki do pakietu. Metoda addShipment zwraca mi błędy: (33203) Produkt ('Przesyłka nieobsługiwana') Nie znajduje się na umowie zawartej z PP i (81058) Przekazana planowana data dla przesyłki jest w przeszłości. Czyli najważniejszy problem to, że nie rozpoznaje przesyłki. Zmienna przesylka typu pocztex2021KurierType zawiera wszystkie moim zdaniem niezbędne dane a przesdopakietu typu Array_Of_przesylkaType jest bez danych adresowych. Czuję, że to tu jest problem. Próbowałem używać listy jak w przykładowych integracjach udostępnianych przez PP w C# ale problem jest taki sam. Bardzo proszę o pomoc.

Kopiuj
procedure TfrmSandbox.btn5Click(Sender: TObject);
var
  tEN: ElektronicznyNadawca;
  tmp: addshipment;
  tmpres: addShipmentResponse;

  przesdopakietu: Array_Of_przesylkaType;
  przesylka: pocztex2021KurierType;

  getUrzNadResp: getUrzedyNadaniaResponse;

  send: sendEnvelope;
  sendresp: sendEnvelopeResponse;

  guid: getGuid;
  kom: string;
  i,j: Integer;
begin
  inherited;
  try
//-------------------------- Wysyłka przesyłek do pakietu ----------------------

    tEN := GetElektronicznyNadawca(False, '', htprPP);

    tEN.clearEnvelope(clearEnvelope.Create);

    guid := getGuid.Create;
    guid.ilosc := 1;

    przesylka := pocztex2021KurierType.Create;
    przesylka.guid := tEN.getGuid(guid)[0];
    przesylka.masa := 20000;
    przesylka.format := formatPocztex2021Type.XL;
    przesylka.mpk := 'MPK\DRS';
    przesylka.adres := adresType.Create;
    przesylka.adres.nazwa := 'Jan Kowalski';
    przesylka.adres.ulica := 'Woronicza';
    przesylka.adres.numerDomu := '12';
    przesylka.adres.miejscowosc := 'Warszawa';
    przesylka.adres.kodPocztowy := '00950';
    przesylka.adres.telefon := '501123456';

    SetLength(przesdopakietu,1);
    przesdopakietu[0] := przesylka;

    tmp := addShipment.Create;
    tmp.przesylki := przesdopakietu;

    tmpres := tEN.addShipment(tmp);

    kom := '';
    for i:= 0 to Length(tmpres)-1 do
    begin
      kom := kom + 'Numer GUID: ' + tmpres[i].guid + #13#10 +
                   'Numer nadania: ' + tmpres[i].numerNadania + #13#10 +
                   'Błędy:' + #13#10;
      for j:= 0 to Length(tmpres[i].error)-1 do
      begin
        kom := kom + '(' + IntToStr(tmpres[i].error[j].errorNumber) + ') ' +
               tmpres[i].error[j].errorDesc + #13#10;
      end;
      kom := kom + #13#10#13#10;
    end;
    MessageBoxW(Handle, PWideChar(kom),'Komunikat o błędach', MB_OK);

//----------------------------- Dostępne urzędy --------------------------------

    getUrzNadResp := tEN.getUrzedyNadania(getUrzedyNadania.Create);

    kom := '';
    for i:= 0 to Length(getUrzNadResp)-1 do
    begin
      kom := kom + 'ID urzędu: ' + IntToStr(getUrzNadResp[i].urzadNadania) + #13#10 +
                   'Nazwa: ' + getUrzNadResp[i].nazwaWydruk + #13#10 +
                   'Opis: ' + getUrzNadResp[i].opis + #13#10#13#10;
    end;
    MessageBoxW(Handle, PWideChar(kom),'Dostępne urzędy nadania', MB_OK);

//------------------------- Wysyłka do urzędu nadania --------------------------

    send := sendEnvelope.Create;
    send.urzadNadania := getUrzNadResp[0].urzadNadania;

    sendresp := tEN.sendEnvelope(send);

    kom := '';
    for i:= 0 to Length(sendresp.error)-1 do
    begin
      kom := kom + '(' + IntToStr(sendresp.error[i].errorNumber) + ') ' +
             sendresp.error[i].errorDesc + #13#10;
    end;
    MessageBoxW(Handle, PWideChar(kom),'Błędy wysyłki do urzędu nadania', MB_OK);
  except
    raise;
  end;
end;
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)