Platforma StudioSystem oferuje szereg funkcji, które czynią ją idealnym wyborem do tworzenia oprogramowania. Dzięki zintegrowanemu środowisku programistycznemu programiści mogą tworzyć aplikacje w ułamku czasu, jaki zajęłoby to tradycyjnymi metodami. Platforma udostępnia również bibliotekę gotowych komponentów, których można użyć do dostosowania lub rozszerzenia istniejących funkcji. Eliminuje to konieczność wykonywania oddzielnych zadań związanych z kodowaniem lub debugowaniem, umożliwiając programistom skupienie się na tworzeniu unikalnych aplikacji.
W poprzednich artykułach opisałem metodę wykorzystania transakcji j_insert_update.aspx do przygotowania formularza dopisywania pozycji dokumentu. Poniższy artykuł jest kontynuacją i opisuje zmiany w projektowaniu formularza pozwalające na zatwierdzenie dokumentu.
W poprzednim artykule opisałem jak stworzyć formularz taki jak ten:


Łatwo zauważyć, że możemy dane do bazy dodawać, ale brakuje przycisku ZAPISZ, który zapisze dane jako dokument zatwierdzony (zapisze ACH=1 i nada kolejny numer dokumentu).
KROK 1
Zmieniamy funkcje SsOnReady w której wskazujemy że po kliknięciu przez użytkownika na przycisk ZAPISZ ma wykonać się nowa funkcja o nazwie ZapiszDokument()
function SsOnReady() {
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").attr("onclick", "return ZapiszDokument();");
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").hide();
}
oraz ukrywamy przycisk, aby był on niedostępny dla użytkownika do momentu dodania pierwszej pozycji dokumentu.
Krok 2
W funkcji wykonywanej po dodaniu pozycji dodaję polecenie
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").show();
które pokaże przycisk zapisania dokumentu, tak aby użytkownik mógł dokument zatwierdzić.
function DodajSucceeded(wynik) {
if (wynik != "") {
PokazAlert("Komunikat", wynik, 220, 400);
return;
}
$("#UWAGI").val('');
$("#ILOSC").jqxNumberInput('setDecimal', 1);
UstawDphanTable('TABELA');
JqxResetValue("NRIDASN");
$("#NRIDASN").jqxComboBox('focus');
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").show();
}
KROK 3
Dodajemy funkcje ZapiszDokument(), która wykona zapis dokumentu
function ZapiszDokument() {
cTablica = new Array();
var cLicznik = 0;
$('[ssupdate]').each(function (index) {
cTablica[cLicznik] = new cListaKontrolek($(this));
cLicznik++;
})
PageMethods.UpdateData('dphan', cTablica, '1', 'NRDOKUMENTU=ZAM#RRRR-#MM-#XXXXX#TYP', 'refno=' + gcRefno + " AND ACH='0'", 'softwarestudioConnectionString', ThisOnSucceeded, OnFailed);
return false;
}
Funkcja pobiera dane z kontrolek oznaczonych za pomocą znacznika ssupdate i uruchamia metodę UpdateData. Parametry metody:
- nazwa tabeli w bazie SQL w której chcemy zaktualizować dane np. 'dphan’
- Tablica z danymi z kontrolek oznaczonych jako ssupdate (patrz opis poniżej)
- znacznik ACH , standardowo zatwierdzony dokument nadajemy wartość 1,
- parametr wskazujący na nazwę kolumny oraz format numeru dokumentu. Jeżeli wartość parametru jest pusta to numer nie będzie nadawany. W powyższym przykładzie chcę aby numer został zapisany w kolumnie NRDOKUMENTU, a jego typ to ZAM (pierwsze 3 znaki po znaku =), kolejne znaki to sposób formatowania numeru dokumentu, np. 2015-01-00005ZAM ponieważ format to RRRR-MM-XXXXX-TYP
- warunek filtrowania wierszy które mają być aktualizowane, zwykle aktualizujemy wiersze dotyczące danego dokumentu, a więc refno, gdzie zmienna gcRefno zawiera numer referencyjny podawany przy uruchomieniu transakcji w parametrze refno
- parametr wskazujący na nazwę połączenia z bazą danych SQL, domyślnie program używa połączenia o nazwie: softwarestudioConnectionString
- Nazwa funkcji jaka ma być uruchomiona, gdy zapis zakończy się powodzeniem, np. ThisOnSucceeded
- Nazwa funkcji jaka ma być uruchomiona, gdyby wystąpił błąd zapisu, zwykle korzystamy ze standardowej: OnFailed
Zapis danych przy zatwierdzaniu
Zatwierdzając dokument możemy zdecydować, aby dane ze wskazanych kontrolek zostały pobrane i aktualizowały rekordy dokumentu. Do tego celu używam znacznika ssupdate=1, który umieszczam w kolumnie parametry dla wybranych kontrolek:

Rozwiązania zapewnia, że pozycje będą miały przypisaną wartość przy zatwierdzeniu, nawet jeżeli użytkownik dane na zakładce nagłówek uzupełnił na końcu. Ustawiłem je dla kontrolek miejsce dostawy (NRIDCRM), termin dostawy (TERMIN) i opis (UWAGI). Pola te zostaną zaktualizowane przy zatwierdzaniu dokumentu.
Podsumowanie
Za pomocą własnego skryptu można wykreować formularz dopisywania wielopozycyjnych dokumentów wraz z zatwierdzaniem i nadawaniem numeru dokumentu. Można tworzyć logikę biznesową wykorzystując JQuery i zapytani do bazy SQL.
Poniżej cały kod pliku crm_dphan.js jaki wykorzystałem do obsługi opisywanej transakcji rejestrowania zamówienia.
function SsOnLoad() {
$('#BTN_DODAJ').html("<span id='btnDodaj' onclick='return btnDodaj()' class='art-button art-buttonBlue' style='width: 200px; '>Dodaj</span>");
UstawDphanTable('TABELA');
$('#captionTABELA').css('width', '10px');
}
function SsOnReady() {
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").attr("onclick", "return ZapiszDokument();");
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").hide();
}
function btnDodaj() {
// kontrola wymagalnych pól
if (!TestWypelnienia()) {
return false;
}
// ustaw kontrahenta jako nieedytowalny
$("#NRIDODN").jqxComboBox({ disabled: true });
cTablica = new Array();
var cLicznik = 0;
$('[ssPostBack]').each(function (index) {
cTablica[cLicznik] = new cListaKontrolek($(this));
cLicznik++;
})
PageMethods.SendForm(cTablica, '0', DodajSucceeded, OnFailed);
return false; }
function DodajSucceeded(wynik) {
if (wynik != "") {
PokazAlert("Komunikat", wynik, 220, 400);
return;
}
$("#UWAGI").val('');
$("#ILOSC").jqxNumberInput('setDecimal', 1);
UstawDphanTable('TABELA');
JqxResetValue("NRIDASN");
$("#NRIDASN").jqxComboBox('focus');
$("#ctl00_ContentPlaceHolder1_ButtonZapisz").show();
}
function UstawDphanTable(cKontrolka) {
var idGrid = 'grid' + cKontrolka;
$('#' + cKontrolka).html("<div id='" + idGrid + "' ></div>");
var cZrodlo = PobierzDataTable("UPPER(ID_DPHAN) AS ID_DPHAN, knaso.INDEKS, knaso.NAZWAAS, dphan.UWAGIPOZ, dphan.ILOSC FROM dphan INNER JOIN knaso ON dphan.NRIDASN = knaso.NRIDASN WHERE dphan.REFNO = " + gcRefno);
var source =
{
datatype: "json",
datafields: [
{ name: 'INDEKS', type: 'string' },
{ name: 'NAZWAAS', type: 'string' },
{ name: 'UWAGIPOZ', type: 'string' },
{ name: 'ILOSC', type: 'string' }
],
localdata: cZrodlo,
id: 'ID_DPHAN'
};
var dataAdapter = new $.jqx.dataAdapter(source);
$("#" + idGrid).jqxGrid(
{
theme: 'energyblue',
height: '250px',
width: '1000px',
source: dataAdapter,
altrows: true,
columns: [
{ text: 'Indeks', datafield: 'INDEKS', width: 200 },
{ text: 'Nazwa', datafield: 'NAZWAAS', width: 300 },
{ text: 'Ilość', datafield: 'ILOSC', width: 80, cellsalign: 'right', cellsformat: 'n' },
{ text: 'Uwagi', datafield: 'UWAGIPOZ', width: 300 }
]
});
JqxFormatujGrid('#' + idGrid);
}
function ZapiszDokument() {
cTablica = new Array();
var cLicznik = 0;
$('[ssupdate]').each(function (index) {
cTablica[cLicznik] = new cListaKontrolek($(this));
cLicznik++;
})
PageMethods.UpdateData('dphan', cTablica, '1', 'NRDOKUMENTU=ZAM#RRRR-#MM-#XXXXX#TYP', 'refno=' + gcRefno + " AND ACH='0'", 'softwarestudioConnectionString', ThisOnSucceeded, OnFailed);
return false;
}
Czytaj więcej:
j_insert_update – zaawansowane programowanie – zmiana funkcji przycisków
W dzisiejszej erze cyfrowej możliwość łatwego manipulowania obiektami w formularzu lub oknie może otworzyć przed programistami cały świat możliwości. Dzięki platformie StudioSystem programiści mają dostęp do potężnego zestawu narzędzi, dzięki którym manipulowanie obiektami na formularzu jest proste i intuicyjne.
j_insert_update – zaawansowane programowanie – pozycje dokumentu
StudioSystem oferuje szereg funkcji, które czynią go zarówno wszechstronnym, jak i przyjaznym dla użytkownika. Platforma pomaga użytkownikom tworzyć oszałamiające efekty wizualne, animacje, modele 3D i dźwięk za pomocą zintegrowanego zestawu narzędzi. Oferuje również obszerną bibliotekę wbudowanych narzędzi i wtyczek, a także interfejs API, który umożliwia użytkownikom tworzenie własnych narzędzi. Wreszcie, jego modułowa architektura oznacza, że
j_insert_update – zaawansowane programowanie – przykład 1
Platforma StudioSystem to kompleksowe rozwiązanie do tworzenia i zarządzania zaawansowanymi formularzami, szablonami i dokumentami. Oferuje szeroki zakres możliwości, umożliwiając użytkownikom łatwe tworzenie i zarządzanie dokumentami, szybki dostęp do informacji i ich aktualizację oraz zapewnia potężny mechanizm przepływu pracy do automatycznego przetwarzania i przesyłania formularzy.
j_insert_update – zaawansowane programowanie – pozycje dokumentu cz. II
Zaawansowane języki programowania, takie jak C# i Java, dają programistom możliwość tworzenia zaawansowanych aplikacji z szeroką gamą funkcji i możliwości. Te języki są potężne i umożliwiają tworzenie aplikacji, które mogą obsługiwać duże ilości danych i zapewniają solidne interfejsy użytkownika. Deweloperzy mogą również korzystać z zaawansowanych funkcji, takich jak programowanie obiektowe i wątkowanie, co pozwala na
j_insert_update – zaawansowane programowanie – przykład 3
Platforma StudioSystem oferuje szerokie możliwości zaawansowanego programowania formularzy. Dzięki swoim potężnym funkcjom może zapewnić użytkownikom możliwość tworzenia i dostosowywania formularzy do różnych celów.